gatewayd-plugin-js
The gatewayd-plugin-js is a GatewayD plugin for running JS functions as hooks and this is how it works:
- Upon startup, the plugin creates a minimal JavaScript engine (Goja) and registers helper functions for various tasks.
- Then it loads all JS files in the directory specified by the
SCRIPT_PATH
environment variable. The environment variable must be set to the path of the file that contains the JS functions to be executed as hooks. It can also import other JS files from the same directory. - Based on the existing functions in the JS files, the plugin registers hooks for various events. If a function is not found for a particular event, the plugin does not register a hook for that event.
- When an event is triggered and a hook function is called from GatewayD, the plugin executes the corresponding JS function and returns the result to the plugin and eventually to GatewayD.
The functions receive a context and a request object as arguments and must return the same or the modified object. The
parseSQL
helper function can be used to parse SQL queries as stringified JSON objects.function onTrafficFromClient(context, request) { // Do something with the request object and return it return request }
Features
- Run JS functions as hooks
- Helper functions for common tasks such as parsing incoming queries
- Support for running multiple JS functions as hooks
- Prometheus metrics for monitoring
- Logging
- Configurable via environment variables and command-line arguments
Installation
It is assumed that you have already installed PostgreSQL and GatewayD.
The plugin is compatible with Linux, Windows and macOS.
Automatic installation
The latest version of the plugin can be installed automatically by running the following command. This command downloads and installs the latest version of the plugin from GitHub releases to the plugins
directory in the current directory. The command will then enable the plugin automatically by copying the default configuration to gatewayd_plugins.yaml
from the project’s GitHub repository.
gatewayd plugin install github.com/gatewayd-io/gatewayd-plugin-js@latest
Manual installation
- Download and install the latest version of gatewayd-plugin-js by copying the binary to a directory that is in your
PATH
or accessible to GatewayD. - Copy the configuration to
gatewayd_plugins.yaml
. - Make sure that the configuration parameters and environment variables are correct, particularly the
localPath
,checksum
and theSCRIPT_PATH
.
After installing the plugin using any of the above methods, you can start GatewayD and test the plugin by querying the database via GatewayD.
Configuration
The plugin can be configured via environment variables or command-line arguments. For more information about other configuration parameters, see plugins configuration.
plugins:
- name: gatewayd-plugin-js
enabled: True
localPath: ../gatewayd-plugin-js/gatewayd-plugin-js
args: ["--log-level", "info"]
env:
- MAGIC_COOKIE_KEY=GATEWAYD_PLUGIN
- MAGIC_COOKIE_VALUE=5712b87aa5d7e9f9e9ab643e6603181c5b796015cb1c09d6f5ada882bf2a1872
- SCRIPT_PATH=./scripts/index.js
- SENTRY_DSN=https://439b580ade4a947cf16e5cfedd18f51f@o4504550475038720.ingest.sentry.io/4506475229413376
checksum: d310772152467d9c6ab4ba17fd9dd40d3f724dee4aa014a722e1865d91744a4f
Environment variables
Name | Description | Default |
---|---|---|
MAGIC_COOKIE_KEY | The key for the magic cookie. | GATEWAYD_PLUGIN |
MAGIC_COOKIE_VALUE | The value for the magic cookie. | 5712b87aa5d7e9f9e9ab643e6603181c5b796015cb1c09d6f5ada882bf2a1872 |
SCRIPT_PATH | The path to the JS file that contains the functions to be executed as hooks. | ./scripts/index.js |
SENTRY_DSN | Sentry DSN. Set to empty string to disable Sentry. | https://439b580ade4a947cf16e5cfedd18f51f@o4504550475038720.ingest.sentry.io/4506475229413376 |
Command-line arguments
Name | Description | Default |
---|---|---|
--log-level | The log level. | info |
Build for testing
To build the plugin for development and testing, run the following command in the project’s root directory after cloning the repository.
git clone git@github.com:gatewayd-io/gatewayd-plugin-js.git
cd gatewayd-plugin-js
make build-dev
Running the above commands clones the repository, changes the current directory and runs the go mod tidy
and go build
commands to compile and generate the plugin binary.