[Deprecated] CustomFunctions:Home - bettyblocks/cli GitHub Wiki
This feature is deprecated
Please use Action Functions to add coded solutions to your application. All functions need to be migrated as this feature will be shut down over time.
The documentation below serves solely to help to migrate functions to the new Actions Functions setup.
What are custom functions?
Custom functions (also referred as custom code) enable application builders to extend their actions toolset (the "native" events) with their own written Javascript code. They are seemlessly executed with native events.
Can I use NPM packages?
Yes but not all of them. As custom functions are labelled as untrusted code, they will be executed in an isolated environment. There are certain restrictions in what you can and cannot do within the code (e.g. using the file system is not allowed).
Getting started
In order to use custom functions within your Betty Blocks application, please follow these steps:
- Install the CLI
- Initialize the custom functions project
- Build your project
- Publish the custom code to your application
1. Install the CLI
To install the CLI globally you will need a recent version of Node.js.
$ npm install -g @betty-blocks/cli
2. Initialize the custom functions project
The init command initializes an NPM based Javascript project containing two example custom functions:
-
src/say-hello.js- which demonstrates how to acquire thenameinput variable value using thecontext()helper function and how to use Lodash'joinfunction -
src/all-users.js- which demonstrates how to query for application data using thegql()helper function
You need to pass the subdomain of your application. So if your application is available at https://awesome.bettyblocks.com then the subdomain is awesome.
$ bb functions init awesome
Initialized functions project in /Users/betty-functions/awesome.
You can use "bb functions" to build and/or publish it:
cd awesome
bb functions build
bb functions publish
Please note that It is recommended to create a separate Javascript file for every custom function. Do not forget to export your custom functions in src/index.js.
Available helper functions
The following helper functions are available in custom functions:
-
context(name)- acquire the value of input variables: async -
console- log messages in the application logs e.g.console.debug(message) -
gql(query)- execute GQL queries compliant to the Betty Data API: async -
mapAsync(collection, function)- asynchronously map either anarrayorobject: async -
request(url, options)- execute an HTTP or HTTPS request: async
3. Build your project
The build command is for debugging purposes really because (at default) publishing custom code will trigger building the project first. It builds the project using webpack under the hood and whenever a build has failed, you can use the build command to view the webpack output.
$ bb functions build
Building awesome.bettyblocks.com bundle (this can take a while) ...
npm WARN deprecated [email protected]: fsevents 1 will break on node v14+ and could be using insecure binaries. Upgrade to fsevents 2.
...
Asset Size Chunks Chunk Names
custom.js 1.4 KiB 0 [emitted] main
Entrypoint main = custom.js
[1] ./src/index.js + 2 modules 544 bytes {0} [built]
| ./src/index.js 112 bytes [built]
| ./src/say-hello.js 245 bytes [built]
| ./src/all-users.js 182 bytes [built]
+ 1 hidden module
Done.
4. Publish the custom code to your application
The publish command does the following:
- Builds the project using webpack unless passed the
-sor--skipflag - Grooms the
functions.jsonfile - Bumps the revision number if passed the
-bor--bumpflag - Updates the custom functions meta data conforming the
functions.jsonfile - Uploads the webpack bundle
- Compiles "new runtime" actions
Please note that you are asked to fill in your Betty credentials when publishing the custom code for the first time.
$ bb functions publish -b
Publishing to awesome.bettyblocks.com ...
✔ Building custom functions bundle (this can take a while) ...
Grooming functions.json ...
✔ Fill in your e-mail address … [email protected]
✔ Fill in your password … ********
✔ Updating custom function "sayHello" ...
✔ Updating custom function "allUsers" ...
✔ Uploading "2.js" ...
✔ Compiling action "My awesome action" ...
Done.