@forestadmin/workflow-executor 1.8.0 → 1.9.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -8,33 +8,53 @@ client data ever leaves your infrastructure.
8
8
 
9
9
  ## Prerequisites
10
10
 
11
- Make sure you are on the latest version of your Forest Admin agent (Node.js/JS or Ruby), then add `workflowExecutorUrl` to your agent config:
11
+ Make sure you are on the latest version of your Forest Admin agent (Node.js/JS or Ruby), then point your agent at the executor with `workflowExecutorUrl`:
12
12
 
13
13
  ```js
14
14
  createAgent({
15
15
  // ...
16
- workflowExecutorUrl: 'http://localhost:3400',
16
+ workflowExecutorUrl: process.env.WORKFLOW_EXECUTOR_URL, // e.g. http://localhost:3400
17
17
  })
18
18
  ```
19
19
 
20
+ This is **required** for the executor to work: when `workflowExecutorUrl` is set, the agent mounts the route that forwards workflow requests to the executor (and relays the JWT for auth). If it is left unset, the agent returns `404` on those routes and the executor never receives any work.
21
+
22
+ Drive it from an environment variable (`WORKFLOW_EXECUTOR_URL` above) so each deployment can target its own executor. The URL is where the agent reaches the executor — its HTTP server (default port `3400`). When the agent and executor run on separate hosts behind a private network (e.g. an internal load balancer), use the executor's internal address, and make sure the agent can reach the executor's HTTP port.
23
+
20
24
  ---
21
25
 
22
- ## Quick Setup
26
+ ## Docker (recommended)
27
+
28
+ ### Quick start
29
+
30
+ ```bash
31
+ cp .env.example .env # fill in your secrets
32
+ docker compose up
33
+ ```
23
34
 
24
- ### In-memory (no database)
35
+ The `docker-compose.yml` at the root of this package starts a single executor instance. See `.env.example` for the full list of environment variables and their descriptions.
25
36
 
26
- For testing — state is lost on restart, not for production:
37
+ ### Run directly
27
38
 
28
39
  ```bash
29
- FOREST_ENV_SECRET="your-env-secret" \
30
- FOREST_AUTH_SECRET="your-auth-secret" \
31
- AGENT_URL="https://your-agent-url" \
32
- npx @forestadmin/workflow-executor --in-memory
40
+ docker run -d \
41
+ -e FOREST_ENV_SECRET="your-env-secret" \
42
+ -e FOREST_AUTH_SECRET="your-auth-secret" \
43
+ -e AGENT_URL="http://host.docker.internal:3351" \
44
+ -e DATABASE_URL="postgres://user:pass@host.docker.internal:5432/mydb" \
45
+ -p 3400:3400 \
46
+ ghcr.io/forestadmin/workflow-executor:latest
33
47
  ```
34
48
 
49
+ > **Note:** When the executor runs in Docker and your agent runs on the host machine, use `host.docker.internal` instead of `localhost` in `AGENT_URL` and `DATABASE_URL`.
50
+
51
+ ---
52
+
53
+ ## Without Docker
54
+
35
55
  ### With a database
36
56
 
37
- For production — requires a Postgres database:
57
+ Requires Node.js ≥ 22.12.0 and a Postgres database:
38
58
 
39
59
  ```bash
40
60
  FOREST_ENV_SECRET="your-env-secret" \
@@ -49,3 +69,30 @@ npx @forestadmin/workflow-executor
49
69
  Both values are already in your agent's environment variables. `FOREST_ENV_SECRET` can also be found in [app.forestadmin.com](https://app.forestadmin.com) → **Settings** → **Environments** → click your environment. `FOREST_AUTH_SECRET` is defined on your side only and is not available in the Forest Admin UI.
50
70
 
51
71
  `AGENT_URL` is the URL where your Forest Admin agent is running (e.g. `http://localhost:3351`).
72
+
73
+ ---
74
+
75
+ ## Testing only
76
+
77
+ The following modes skip the database requirement but are **not suitable for production** — state is lost on restart.
78
+
79
+ ### Docker
80
+
81
+ ```bash
82
+ docker run --rm \
83
+ -e FOREST_ENV_SECRET="your-env-secret" \
84
+ -e FOREST_AUTH_SECRET="your-auth-secret" \
85
+ -e AGENT_URL="http://host.docker.internal:3351" \
86
+ -p 3400:3400 \
87
+ ghcr.io/forestadmin/workflow-executor:latest \
88
+ node packages/workflow-executor/dist/cli.js --in-memory --json
89
+ ```
90
+
91
+ ### Without Docker
92
+
93
+ ```bash
94
+ FOREST_ENV_SECRET="your-env-secret" \
95
+ FOREST_AUTH_SECRET="your-auth-secret" \
96
+ AGENT_URL="https://your-agent-url" \
97
+ npx @forestadmin/workflow-executor --in-memory
98
+ ```
package/dist/cli-core.js CHANGED
@@ -39,9 +39,9 @@ function parseLoggerLevelEnv(raw) {
39
39
  }
40
40
  const TRUTHY = ['true', '1', 'yes', 'on'];
41
41
  const FALSY = ['false', '0', 'no', 'off'];
42
- function parseBooleanEnv(name, raw) {
42
+ function parseBooleanEnv(name, raw, defaultValue = false) {
43
43
  if (!raw)
44
- return false;
44
+ return defaultValue;
45
45
  const value = raw.trim().toLowerCase();
46
46
  if (TRUTHY.includes(value))
47
47
  return true;
@@ -145,7 +145,9 @@ function readEnvConfig(env, args) {
145
145
  return {
146
146
  executorOptions,
147
147
  databaseUrl: env.DATABASE_URL,
148
- databaseSsl: parseBooleanEnv('DATABASE_SSL', env.DATABASE_SSL),
148
+ // Defaults to true: managed Postgres (RDS, Supabase, Railway…) requires TLS.
149
+ // Set DATABASE_SSL=false for a local/dev database without TLS.
150
+ databaseSsl: parseBooleanEnv('DATABASE_SSL', env.DATABASE_SSL, true),
149
151
  mode: args.inMemory ? 'in-memory' : 'database',
150
152
  };
151
153
  }
@@ -168,7 +170,7 @@ Required environment variables:
168
170
  DATABASE_URL Postgres connection string (not needed with --in-memory)
169
171
 
170
172
  Optional environment variables:
171
- DATABASE_SSL Set to "true" to connect to the database over TLS (managed DBs like RDS)
173
+ DATABASE_SSL Connect to the database over TLS (default: true; set "false" for a local DB without TLS)
172
174
  HTTP_PORT Default: ${defaults_1.DEFAULT_HTTP_PORT}
173
175
  FOREST_SERVER_URL Default: ${defaults_1.DEFAULT_FOREST_SERVER_URL}
174
176
  POLLING_INTERVAL_S Default: ${defaults_1.DEFAULT_POLLING_INTERVAL_S}
@@ -259,4 +261,4 @@ async function runCli(argv, env, factories) {
259
261
  throw error;
260
262
  }
261
263
  }
262
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xpLWNvcmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvY2xpLWNvcmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLCtCQUErQjs7Ozs7QUErRi9CLDhCQWtDQztBQUlELGdDQVNDO0FBNkJELHNDQXdDQztBQUVELDhCQXVDQztBQUVELG9DQUVDO0FBRUQsZ0NBc0JDO0FBRUQsd0JBdURDO0FBNVVELDZCQUF3QjtBQUV4QiwrRUFBNEQ7QUFDNUQsNkVBQTBEO0FBTTFELHlDQVVvQjtBQUNwQixxQ0FBbUU7QUFFbkUsTUFBTSxZQUFZLEdBQUcsT0FBQyxDQUFDLE1BQU0sQ0FBQyxNQUFNLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxRQUFRLEVBQUUsQ0FBQztBQUN4RCxNQUFNLG1CQUFtQixHQUFHLE9BQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxPQUFPLENBQUMsQ0FBQyxDQUFDO0FBRXZFLFNBQVMsbUJBQW1CLENBQUMsSUFBWSxFQUFFLEdBQXVCO0lBQ2hFLElBQUksQ0FBQyxHQUFHO1FBQUUsT0FBTyxTQUFTLENBQUM7SUFFM0IsTUFBTSxNQUFNLEdBQUcsWUFBWSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUUzQyxJQUFJLENBQUMsTUFBTSxDQUFDLE9BQU8sRUFBRSxDQUFDO1FBQ3BCLE1BQU0sSUFBSSwyQkFBa0IsQ0FBQyxHQUFHLElBQUkscUNBQXFDLEdBQUcsSUFBSSxDQUFDLENBQUM7SUFDcEYsQ0FBQztJQUVELE9BQU8sTUFBTSxDQUFDLElBQUksQ0FBQztBQUNyQixDQUFDO0FBRUQsU0FBUyxtQkFBbUIsQ0FBQyxHQUF1QjtJQUNsRCxJQUFJLENBQUMsR0FBRztRQUFFLE9BQU8sU0FBUyxDQUFDO0lBRTNCLE1BQU0sVUFBVSxHQUFHLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxFQUFFLEdBQUcsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxXQUFXLEVBQUUsQ0FBQztJQUM1RSxNQUFNLE1BQU0sR0FBRyxtQkFBbUIsQ0FBQyxTQUFTLENBQUMsVUFBVSxDQUFDLENBQUM7SUFFekQsSUFBSSxDQUFDLE1BQU0sQ0FBQyxPQUFPLEVBQUUsQ0FBQztRQUNwQixNQUFNLElBQUksMkJBQWtCLENBQzFCLDJEQUEyRCxHQUFHLElBQUksQ0FDbkUsQ0FBQztJQUNKLENBQUM7SUFFRCxPQUFPLE1BQU0sQ0FBQyxJQUFJLENBQUM7QUFDckIsQ0FBQztBQUVELE1BQU0sTUFBTSxHQUFHLENBQUMsTUFBTSxFQUFFLEdBQUcsRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLENBQUM7QUFDMUMsTUFBTSxLQUFLLEdBQUcsQ0FBQyxPQUFPLEVBQUUsR0FBRyxFQUFFLElBQUksRUFBRSxLQUFLLENBQUMsQ0FBQztBQUUxQyxTQUFTLGVBQWUsQ0FBQyxJQUFZLEVBQUUsR0FBdUI7SUFDNUQsSUFBSSxDQUFDLEdBQUc7UUFBRSxPQUFPLEtBQUssQ0FBQztJQUV2QixNQUFNLEtBQUssR0FBRyxHQUFHLENBQUMsSUFBSSxFQUFFLENBQUMsV0FBVyxFQUFFLENBQUM7SUFDdkMsSUFBSSxNQUFNLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQztRQUFFLE9BQU8sSUFBSSxDQUFDO0lBQ3hDLElBQUksS0FBSyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUM7UUFBRSxPQUFPLEtBQUssQ0FBQztJQUV4QyxNQUFNLElBQUksMkJBQWtCLENBQUMsR0FBRyxJQUFJLHlDQUF5QyxHQUFHLEdBQUcsQ0FBQyxDQUFDO0FBQ3ZGLENBQUM7QUFFRCx5R0FBeUc7QUFDekcsTUFBTSxFQUFFLE9BQU8sRUFBRSxHQUFHLE9BQU8sQ0FBQyxpQkFBaUIsQ0FBd0IsQ0FBQztBQUV0RSxNQUFNLFdBQVcsR0FBRywwQkFBMEIsQ0FBQztBQXNCL0MsU0FBZ0IsU0FBUyxDQUFDLElBQWM7SUFDdEMsTUFBTSxNQUFNLEdBQVk7UUFDdEIsSUFBSSxFQUFFLEtBQUs7UUFDWCxPQUFPLEVBQUUsS0FBSztRQUNkLFFBQVEsRUFBRSxLQUFLO1FBQ2YsTUFBTSxFQUFFLEtBQUs7UUFDYixJQUFJLEVBQUUsS0FBSztLQUNaLENBQUM7SUFFRixLQUFLLE1BQU0sR0FBRyxJQUFJLElBQUksRUFBRSxDQUFDO1FBQ3ZCLFFBQVEsR0FBRyxFQUFFLENBQUM7WUFDWixLQUFLLFFBQVEsQ0FBQztZQUNkLEtBQUssSUFBSTtnQkFDUCxNQUFNLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQztnQkFDbkIsTUFBTTtZQUNSLEtBQUssV0FBVyxDQUFDO1lBQ2pCLEtBQUssSUFBSTtnQkFDUCxNQUFNLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQztnQkFDdEIsTUFBTTtZQUNSLEtBQUssYUFBYTtnQkFDaEIsTUFBTSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUM7Z0JBQ3ZCLE1BQU07WUFDUixLQUFLLFVBQVU7Z0JBQ2IsTUFBTSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUM7Z0JBQ3JCLE1BQU07WUFDUixLQUFLLFFBQVE7Z0JBQ1gsTUFBTSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUM7Z0JBQ25CLE1BQU07WUFDUjtnQkFDRSxNQUFNLElBQUksS0FBSyxDQUFDLHFCQUFxQixHQUFHLEVBQUUsQ0FBQyxDQUFDO1FBQ2hELENBQUM7SUFDSCxDQUFDO0lBRUQsT0FBTyxNQUFNLENBQUM7QUFDaEIsQ0FBQztBQUVELG1HQUFtRztBQUNuRyw4RkFBOEY7QUFDOUYsU0FBZ0IsVUFBVSxDQUN4QixJQUFhLEVBQ2IsS0FBa0IsRUFDbEIsU0FBNkIsT0FBTyxDQUFDLE1BQU07SUFFM0MsSUFBSSxJQUFJLENBQUMsSUFBSTtRQUFFLE9BQU8sSUFBQSx3QkFBbUIsRUFBQyxLQUFLLENBQUMsQ0FBQztJQUNqRCxJQUFJLElBQUksQ0FBQyxNQUFNO1FBQUUsT0FBTyxJQUFBLHVCQUFrQixFQUFDLEtBQUssQ0FBQyxDQUFDO0lBRWxELE9BQU8sTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsSUFBQSx1QkFBa0IsRUFBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBQSx3QkFBbUIsRUFBQyxLQUFLLENBQUMsQ0FBQztBQUMvRSxDQUFDO0FBRUQsU0FBUyxhQUFhLENBQUMsR0FBc0I7SUFDM0MsTUFBTSxFQUFFLFdBQVcsRUFBRSxRQUFRLEVBQUUsVUFBVSxFQUFFLEdBQUcsR0FBRyxDQUFDO0lBQ2xELE1BQU0sTUFBTSxHQUFHLENBQUMsV0FBVyxFQUFFLFFBQVEsRUFBRSxVQUFVLENBQUMsQ0FBQztJQUNuRCxNQUFNLFFBQVEsR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDLE1BQU0sQ0FBQztJQUUvQyxJQUFJLFFBQVEsS0FBSyxDQUFDO1FBQUUsT0FBTyxTQUFTLENBQUM7SUFFckMsSUFBSSxRQUFRLEtBQUssTUFBTSxDQUFDLE1BQU0sRUFBRSxDQUFDO1FBQy9CLE1BQU0sSUFBSSxLQUFLLENBQ2IseUdBQXlHLENBQzFHLENBQUM7SUFDSixDQUFDO0lBRUQsSUFBSSxXQUFXLEtBQUssV0FBVyxJQUFJLFdBQVcsS0FBSyxRQUFRLEVBQUUsQ0FBQztRQUM1RCxNQUFNLElBQUksS0FBSyxDQUFDLHFEQUFxRCxXQUFXLEdBQUcsQ0FBQyxDQUFDO0lBQ3ZGLENBQUM7SUFFRCxPQUFPO1FBQ0w7WUFDRSxJQUFJLEVBQUUsU0FBUztZQUNmLFFBQVEsRUFBRSxXQUFXO1lBQ3JCLEtBQUssRUFBRSxRQUFrQjtZQUN6QixNQUFNLEVBQUUsVUFBb0I7U0FDN0I7S0FDRixDQUFDO0FBQ0osQ0FBQztBQUVELFNBQWdCLGFBQWEsQ0FBQyxHQUFzQixFQUFFLElBQWE7SUFDakUsTUFBTSxZQUFZLEdBQUcsQ0FBQyxtQkFBbUIsRUFBRSxvQkFBb0IsRUFBRSxXQUFXLENBQVUsQ0FBQztJQUN2RixNQUFNLE9BQU8sR0FBYSxZQUFZLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztJQUVoRSxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsSUFBSSxDQUFDLEdBQUcsQ0FBQyxZQUFZLEVBQUUsQ0FBQztRQUN4QyxPQUFPLENBQUMsSUFBSSxDQUFDLDRDQUE0QyxDQUFDLENBQUM7SUFDN0QsQ0FBQztJQUVELElBQUksT0FBTyxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQztRQUN2QixNQUFNLElBQUksS0FBSyxDQUNiLDRDQUE0QyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTTtZQUN2RixTQUFTLFdBQVcsOEJBQThCLENBQ3JELENBQUM7SUFDSixDQUFDO0lBRUQsTUFBTSxnQkFBZ0IsR0FBRyxhQUFhLENBQUMsR0FBRyxDQUFDLENBQUM7SUFFNUMsTUFBTSxlQUFlLEdBQW9CO1FBQ3ZDLFNBQVMsRUFBRSxHQUFHLENBQUMsaUJBQTJCO1FBQzFDLFVBQVUsRUFBRSxHQUFHLENBQUMsa0JBQTRCO1FBQzVDLFFBQVEsRUFBRSxHQUFHLENBQUMsU0FBbUI7UUFDakMsUUFBUSxFQUFFLG1CQUFtQixDQUFDLFdBQVcsRUFBRSxHQUFHLENBQUMsU0FBUyxDQUFDLElBQUksNEJBQWlCO1FBQzlFLGVBQWUsRUFBRSxHQUFHLENBQUMsaUJBQWlCO1FBQ3RDLGdCQUFnQixFQUFFLG1CQUFtQixDQUFDLG9CQUFvQixFQUFFLEdBQUcsQ0FBQyxrQkFBa0IsQ0FBQztRQUNuRixZQUFZLEVBQUUsbUJBQW1CLENBQUMsZ0JBQWdCLEVBQUUsR0FBRyxDQUFDLGNBQWMsQ0FBQztRQUN2RSxZQUFZLEVBQUUsbUJBQW1CLENBQUMsZ0JBQWdCLEVBQUUsR0FBRyxDQUFDLGNBQWMsQ0FBQztRQUN2RSxnQkFBZ0IsRUFBRSxtQkFBbUIsQ0FBQyxxQkFBcUIsRUFBRSxHQUFHLENBQUMsbUJBQW1CLENBQUM7UUFDckYsYUFBYSxFQUFFLG1CQUFtQixDQUFDLGlCQUFpQixFQUFFLEdBQUcsQ0FBQyxlQUFlLENBQUM7UUFDMUUsZUFBZSxFQUFFLG1CQUFtQixDQUFDLG9CQUFvQixFQUFFLEdBQUcsQ0FBQyxrQkFBa0IsQ0FBQztRQUNsRixXQUFXLEVBQUUsbUJBQW1CLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxJQUFJLCtCQUFvQjtRQUN2RSxHQUFHLENBQUMsZ0JBQWdCLElBQUksRUFBRSxnQkFBZ0IsRUFBRSxDQUFDO1FBQzdDLEdBQUcsQ0FBQyxHQUFHLENBQUMsY0FBYyxLQUFLLE1BQU0sSUFBSSxFQUFFLFlBQVksRUFBRSxJQUFJLEVBQUUsQ0FBQztLQUM3RCxDQUFDO0lBRUYsT0FBTztRQUNMLGVBQWU7UUFDZixXQUFXLEVBQUUsR0FBRyxDQUFDLFlBQVk7UUFDN0IsV0FBVyxFQUFFLGVBQWUsQ0FBQyxjQUFjLEVBQUUsR0FBRyxDQUFDLFlBQVksQ0FBQztRQUM5RCxJQUFJLEVBQUUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxVQUFVO0tBQy9DLENBQUM7QUFDSixDQUFDO0FBRUQsU0FBZ0IsU0FBUztJQUN2QixPQUFPLENBQUMsR0FBRyxDQUFDLFVBQVUsV0FBVzs7Ozs7Ozs7Ozs7Ozs7Ozs7OztvQ0FtQkMsNEJBQWlCO29DQUNqQixvQ0FBeUI7bUNBQzFCLHFDQUEwQjttQ0FDMUIsaUNBQXNCO3NFQUNhLGlDQUFzQjsrRkFDRyxzQ0FBMkI7cUZBQ3JDLGtDQUF1QjsyRUFDakMscUNBQTBCO2lFQUNwQywrQkFBb0I7Ozs7Ozs7Ozs7bUVBVWxCLENBQUMsQ0FBQztBQUNyRSxDQUFDO0FBRUQsU0FBZ0IsWUFBWTtJQUMxQixPQUFPLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxDQUFDO0FBQ3ZCLENBQUM7QUFFRCxTQUFnQixVQUFVLENBQUMsTUFBYyxFQUFFLE1BQWlCO0lBQzFELE1BQU0sRUFBRSxlQUFlLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxXQUFXLEVBQUUsR0FBRyxNQUFNLENBQUM7SUFDNUQsSUFBSSxPQUFlLENBQUM7SUFFcEIsSUFBSSxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7UUFDdEIsT0FBTyxHQUFHLHlCQUF5QixDQUFDO0lBQ3RDLENBQUM7U0FBTSxJQUFJLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxNQUFNLEVBQUUsQ0FBQztRQUN6QyxPQUFPLEdBQUcsVUFBVSxJQUFJLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxNQUFNLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsQ0FBQztJQUMvRixDQUFDO1NBQU0sQ0FBQztRQUNOLE9BQU8sR0FBRyxpQkFBaUIsQ0FBQztJQUM5QixDQUFDO0lBRUQsTUFBTSxDQUFDLE1BQU0sRUFBRSw0QkFBNEIsRUFBRTtRQUMzQyxJQUFJO1FBQ0osV0FBVyxFQUFFLElBQUksS0FBSyxVQUFVLENBQUMsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsU0FBUztRQUMxRCxlQUFlLEVBQUUsSUFBSSxDQUFDLGVBQWUsSUFBSSxvQ0FBeUI7UUFDbEUsUUFBUSxFQUFFLElBQUksQ0FBQyxRQUFRO1FBQ3ZCLFFBQVEsRUFBRSxJQUFJLENBQUMsUUFBUTtRQUN2QixnQkFBZ0IsRUFBRSxJQUFJLENBQUMsZ0JBQWdCLElBQUkscUNBQTBCO1FBQ3JFLFdBQVcsRUFBRSxJQUFJLENBQUMsV0FBVyxJQUFJLCtCQUFvQjtRQUNyRCxRQUFRLEVBQUUsT0FBTztLQUNsQixDQUFDLENBQUM7QUFDTCxDQUFDO0FBRU0sS0FBSyxVQUFVLE1BQU0sQ0FDMUIsSUFBYyxFQUNkLEdBQXNCLEVBQ3RCLFNBQXVCO0lBRXZCLE1BQU0sSUFBSSxHQUFHLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUU3QixJQUFJLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUNkLFNBQVMsRUFBRSxDQUFDO1FBRVosT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBRUQsSUFBSSxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7UUFDakIsWUFBWSxFQUFFLENBQUM7UUFFZixPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7SUFFRCxNQUFNLE1BQU0sR0FBRyxhQUFhLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxDQUFDO0lBQ3hDLE1BQU0sTUFBTSxHQUFHLFVBQVUsQ0FBQyxJQUFJLEVBQUUsTUFBTSxDQUFDLGVBQWUsQ0FBQyxXQUFXLElBQUksK0JBQW9CLENBQUMsQ0FBQztJQUM1RixNQUFNLENBQUMsZUFBZSxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUM7SUFFdkMsVUFBVSxDQUFDLE1BQU0sRUFBRSxNQUFNLENBQUMsQ0FBQztJQUUzQixJQUFJLENBQUM7UUFDSCxJQUFJLFFBQTBCLENBQUM7UUFFL0IsSUFBSSxNQUFNLENBQUMsSUFBSSxLQUFLLFdBQVcsRUFBRSxDQUFDO1lBQ2hDLFFBQVEsR0FBRyxTQUFTLENBQUMsYUFBYSxDQUFDLE1BQU0sQ0FBQyxlQUFlLENBQUMsQ0FBQztRQUM3RCxDQUFDO2FBQU0sQ0FBQztZQUNOLE1BQU0sZUFBZSxHQUE0QjtnQkFDL0MsR0FBRyxNQUFNLENBQUMsZUFBZTtnQkFDekIsUUFBUSxFQUFFO29CQUNSLEdBQUcsRUFBRSxNQUFNLENBQUMsV0FBcUI7b0JBQ2pDLEdBQUcsQ0FBQyxNQUFNLENBQUMsV0FBVyxJQUFJO3dCQUN4QixjQUFjLEVBQUUsRUFBRSxHQUFHLEVBQUUsRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLGtCQUFrQixFQUFFLEtBQUssRUFBRSxFQUFFO3FCQUN0RSxDQUFDO2lCQUNIO2FBQ0YsQ0FBQztZQUNGLFFBQVEsR0FBRyxTQUFTLENBQUMsYUFBYSxDQUFDLGVBQWUsQ0FBQyxDQUFDO1FBQ3RELENBQUM7UUFFRCxNQUFNLFFBQVEsQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUN2QixNQUFNLENBQUMsTUFBTSxFQUFFLHlCQUF5QixFQUFFO1lBQ3hDLEdBQUcsRUFBRSxvQkFBb0IsTUFBTSxDQUFDLGVBQWUsQ0FBQyxRQUFRLEVBQUU7U0FDM0QsQ0FBQyxDQUFDO1FBRUgsT0FBTyxRQUFRLENBQUM7SUFDbEIsQ0FBQztJQUFDLE9BQU8sS0FBSyxFQUFFLENBQUM7UUFDZixNQUFNLENBQUMsT0FBTyxFQUFFLG1DQUFtQyxFQUFFO1lBQ25ELEtBQUssRUFBRSxJQUFBLDRCQUFtQixFQUFDLEtBQUssQ0FBQztTQUNsQyxDQUFDLENBQUM7UUFDSCxNQUFNLEtBQUssQ0FBQztJQUNkLENBQUM7QUFDSCxDQUFDIn0=
264
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xpLWNvcmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvY2xpLWNvcmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLCtCQUErQjs7Ozs7QUErRi9CLDhCQWtDQztBQUlELGdDQVNDO0FBNkJELHNDQTBDQztBQUVELDhCQXVDQztBQUVELG9DQUVDO0FBRUQsZ0NBc0JDO0FBRUQsd0JBdURDO0FBOVVELDZCQUF3QjtBQUV4QiwrRUFBNEQ7QUFDNUQsNkVBQTBEO0FBTTFELHlDQVVvQjtBQUNwQixxQ0FBbUU7QUFFbkUsTUFBTSxZQUFZLEdBQUcsT0FBQyxDQUFDLE1BQU0sQ0FBQyxNQUFNLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxRQUFRLEVBQUUsQ0FBQztBQUN4RCxNQUFNLG1CQUFtQixHQUFHLE9BQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxPQUFPLENBQUMsQ0FBQyxDQUFDO0FBRXZFLFNBQVMsbUJBQW1CLENBQUMsSUFBWSxFQUFFLEdBQXVCO0lBQ2hFLElBQUksQ0FBQyxHQUFHO1FBQUUsT0FBTyxTQUFTLENBQUM7SUFFM0IsTUFBTSxNQUFNLEdBQUcsWUFBWSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUUzQyxJQUFJLENBQUMsTUFBTSxDQUFDLE9BQU8sRUFBRSxDQUFDO1FBQ3BCLE1BQU0sSUFBSSwyQkFBa0IsQ0FBQyxHQUFHLElBQUkscUNBQXFDLEdBQUcsSUFBSSxDQUFDLENBQUM7SUFDcEYsQ0FBQztJQUVELE9BQU8sTUFBTSxDQUFDLElBQUksQ0FBQztBQUNyQixDQUFDO0FBRUQsU0FBUyxtQkFBbUIsQ0FBQyxHQUF1QjtJQUNsRCxJQUFJLENBQUMsR0FBRztRQUFFLE9BQU8sU0FBUyxDQUFDO0lBRTNCLE1BQU0sVUFBVSxHQUFHLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxFQUFFLEdBQUcsR0FBRyxDQUFD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
@@ -0,0 +1 @@
1
+ //# sourceMappingURL=tracing.d.ts.map
@@ -0,0 +1,41 @@
1
+ // Loaded via --require before cli.js to ensure instrumentation patches run first.
2
+ // Initialises the OpenTelemetry SDK only when OTEL_EXPORTER_OTLP_ENDPOINT is set.
3
+ // All configuration is handled via standard OTel environment variables:
4
+ // OTEL_EXPORTER_OTLP_ENDPOINT OTLP receiver (e.g. http://localhost:4318)
5
+ // OTEL_SERVICE_NAME default: forestadmin-workflow-executor
6
+ // OTEL_SDK_DISABLED set to "true" to force-disable
7
+ // OTEL_RESOURCE_ATTRIBUTES e.g. deployment.environment=production,version=1.7.0
8
+ //
9
+ // The OTel packages are installed only into the Docker image's isolated deps
10
+ // (see packages/workflow-executor/docker/), never shipped to npm consumers of
11
+ // the CLI — hence the dynamic require guarded by a try/catch.
12
+ if (process.env.OTEL_EXPORTER_OTLP_ENDPOINT && process.env.OTEL_SDK_DISABLED !== 'true') {
13
+ try {
14
+ /* eslint-disable global-require, @typescript-eslint/no-var-requires, import/no-extraneous-dependencies */
15
+ const { NodeSDK } = require('@opentelemetry/sdk-node');
16
+ const { getNodeAutoInstrumentations } = require('@opentelemetry/auto-instrumentations-node');
17
+ const { OTLPTraceExporter } = require('@opentelemetry/exporter-trace-otlp-http');
18
+ /* eslint-enable global-require, @typescript-eslint/no-var-requires, import/no-extraneous-dependencies */
19
+ const sdk = new NodeSDK({
20
+ serviceName: process.env.OTEL_SERVICE_NAME || 'forestadmin-workflow-executor',
21
+ traceExporter: new OTLPTraceExporter(),
22
+ instrumentations: [getNodeAutoInstrumentations()],
23
+ });
24
+ sdk.start();
25
+ // Flush buffered spans on graceful shutdown. We must NOT call process.exit
26
+ // here: the executor's own SIGTERM/SIGINT handler drains in-flight steps
27
+ // (up to stopTimeoutMs) and owns the exit. We only flush in parallel — once
28
+ // the SDK shutdown and the drain both settle, the event loop empties and the
29
+ // process exits naturally (the executor keeps its own force-exit safety net).
30
+ const flush = () => {
31
+ void sdk.shutdown();
32
+ };
33
+ process.once('SIGTERM', flush);
34
+ process.once('SIGINT', flush);
35
+ }
36
+ catch {
37
+ // eslint-disable-next-line no-console
38
+ console.warn('[tracing] OpenTelemetry packages not available, skipping APM initialisation');
39
+ }
40
+ }
41
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhY2luZy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy90cmFjaW5nLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGtGQUFrRjtBQUNsRixrRkFBa0Y7QUFDbEYsd0VBQXdFO0FBQ3hFLDZFQUE2RTtBQUM3RSwwRUFBMEU7QUFDMUUsa0VBQWtFO0FBQ2xFLHdGQUF3RjtBQUN4RixFQUFFO0FBQ0YsNkVBQTZFO0FBQzdFLDhFQUE4RTtBQUM5RSw4REFBOEQ7QUFDOUQsSUFBSSxPQUFPLENBQUMsR0FBRyxDQUFDLDJCQUEyQixJQUFJLE9BQU8sQ0FBQyxHQUFHLENBQUMsaUJBQWlCLEtBQUssTUFBTSxFQUFFLENBQUM7SUFDeEYsSUFBSSxDQUFDO1FBQ0gsMEdBQTBHO1FBQzFHLE1BQU0sRUFBRSxPQUFPLEVBQUUsR0FBRyxPQUFPLENBQUMseUJBQXlCLENBQUMsQ0FBQztRQUN2RCxNQUFNLEVBQUUsMkJBQTJCLEVBQUUsR0FBRyxPQUFPLENBQUMsMkNBQTJDLENBQUMsQ0FBQztRQUM3RixNQUFNLEVBQUUsaUJBQWlCLEVBQUUsR0FBRyxPQUFPLENBQUMseUNBQXlDLENBQUMsQ0FBQztRQUNqRix5R0FBeUc7UUFFekcsTUFBTSxHQUFHLEdBQUcsSUFBSSxPQUFPLENBQUM7WUFDdEIsV0FBVyxFQUFFLE9BQU8sQ0FBQyxHQUFHLENBQUMsaUJBQWlCLElBQUksK0JBQStCO1lBQzdFLGFBQWEsRUFBRSxJQUFJLGlCQUFpQixFQUFFO1lBQ3RDLGdCQUFnQixFQUFFLENBQUMsMkJBQTJCLEVBQUUsQ0FBQztTQUNsRCxDQUFDLENBQUM7UUFFSCxHQUFHLENBQUMsS0FBSyxFQUFFLENBQUM7UUFFWiwyRUFBMkU7UUFDM0UseUVBQXlFO1FBQ3pFLDRFQUE0RTtRQUM1RSw2RUFBNkU7UUFDN0UsOEVBQThFO1FBQzlFLE1BQU0sS0FBSyxHQUFHLEdBQUcsRUFBRTtZQUNqQixLQUFLLEdBQUcsQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUN0QixDQUFDLENBQUM7UUFFRixPQUFPLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxLQUFLLENBQUMsQ0FBQztRQUMvQixPQUFPLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxLQUFLLENBQUMsQ0FBQztJQUNoQyxDQUFDO0lBQUMsTUFBTSxDQUFDO1FBQ1Asc0NBQXNDO1FBQ3RDLE9BQU8sQ0FBQyxJQUFJLENBQUMsNkVBQTZFLENBQUMsQ0FBQztJQUM5RixDQUFDO0FBQ0gsQ0FBQyJ9
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@forestadmin/workflow-executor",
3
- "version": "1.8.0",
3
+ "version": "1.9.0",
4
4
  "main": "dist/index.js",
5
5
  "bin": {
6
6
  "forest-workflow-executor": "dist/cli.js"
@@ -37,6 +37,7 @@
37
37
  "jsonwebtoken": "^9.0.3",
38
38
  "koa": "^3.0.1",
39
39
  "koa-jwt": "^4.0.4",
40
+ "pg": "^8.8.0",
40
41
  "picocolors": "^1.1.1",
41
42
  "sequelize": "^6.37.8",
42
43
  "umzug": "^3.8.2",
@@ -47,7 +48,6 @@
47
48
  "@types/koa": "^2.13.5",
48
49
  "@types/koa__router": "^12.0.4",
49
50
  "@types/sequelize": "^6.12.0",
50
- "pg": "^8.8.0",
51
51
  "sqlite3": "^6.0.1",
52
52
  "supertest": "^7.1.3"
53
53
  }