@forestadmin/workflow-executor 1.33.2 → 1.35.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.
Files changed (51) hide show
  1. package/dist/adapters/agent-client-agent-port.js +6 -8
  2. package/dist/adapters/agent-client-segment-reader.d.ts +24 -0
  3. package/dist/adapters/agent-client-segment-reader.js +182 -0
  4. package/dist/adapters/agent-errors.d.ts +11 -0
  5. package/dist/adapters/agent-errors.js +81 -0
  6. package/dist/adapters/forest-server-automation-port.d.ts +22 -0
  7. package/dist/adapters/forest-server-automation-port.js +174 -0
  8. package/dist/adapters/forest-server-workflow-port.d.ts +3 -1
  9. package/dist/adapters/forest-server-workflow-port.js +47 -21
  10. package/dist/adapters/forestadmin-client-activity-log-port.js +3 -3
  11. package/dist/adapters/project-timezone.d.ts +2 -0
  12. package/dist/adapters/project-timezone.js +11 -0
  13. package/dist/adapters/run-to-available-step-mapper.js +7 -16
  14. package/dist/adapters/server-types.d.ts +119 -1
  15. package/dist/adapters/server-types.js +104 -2
  16. package/dist/adapters/step-user.d.ts +23 -0
  17. package/dist/adapters/step-user.js +33 -0
  18. package/dist/automation/automation-poller.d.ts +45 -0
  19. package/dist/automation/automation-poller.js +201 -0
  20. package/dist/automation/inbox-poll.d.ts +47 -0
  21. package/dist/automation/inbox-poll.js +357 -0
  22. package/dist/automation/lease-keeper.d.ts +12 -0
  23. package/dist/automation/lease-keeper.js +30 -0
  24. package/dist/automation/read-failure.d.ts +5 -0
  25. package/dist/automation/read-failure.js +40 -0
  26. package/dist/automation/reconciliation.d.ts +13 -0
  27. package/dist/automation/reconciliation.js +88 -0
  28. package/dist/build-workflow-executor.d.ts +2 -0
  29. package/dist/build-workflow-executor.js +62 -4
  30. package/dist/cli-core.js +7 -1
  31. package/dist/defaults.d.ts +2 -0
  32. package/dist/defaults.js +10 -2
  33. package/dist/errors.d.ts +30 -2
  34. package/dist/errors.js +56 -26
  35. package/dist/http/pending-data-validators.js +3 -3
  36. package/dist/http/step-serializer.js +5 -5
  37. package/dist/ports/automation-port.d.ts +19 -0
  38. package/dist/ports/automation-port.js +3 -0
  39. package/dist/ports/segment-reader-port.d.ts +43 -0
  40. package/dist/ports/segment-reader-port.js +3 -0
  41. package/dist/ports/workflow-port.d.ts +3 -1
  42. package/dist/{adapters/record-id-serializer.d.ts → record-id.d.ts} +2 -2
  43. package/dist/record-id.js +20 -0
  44. package/dist/runner.d.ts +3 -0
  45. package/dist/runner.js +59 -12
  46. package/dist/types/automation.d.ts +64 -0
  47. package/dist/types/automation.js +3 -0
  48. package/dist/types/validated/execution.d.ts +2 -1
  49. package/dist/types/validated/execution.js +2 -1
  50. package/package.json +5 -3
  51. package/dist/adapters/record-id-serializer.js +0 -20
@@ -1,10 +1,8 @@
1
1
  "use strict";
2
- var __importDefault = (this && this.__importDefault) || function (mod) {
3
- return (mod && mod.__esModule) ? mod : { "default": mod };
4
- };
5
2
  Object.defineProperty(exports, "__esModule", { value: true });
6
3
  const agent_client_1 = require("@forestadmin/agent-client");
7
- const jsonwebtoken_1 = __importDefault(require("jsonwebtoken"));
4
+ const agent_errors_1 = require("./agent-errors");
5
+ const step_user_1 = require("./step-user");
8
6
  const errors_1 = require("../errors");
9
7
  // agent-client keeps the agent's own wording as the message only when the body had one; otherwise
10
8
  // the message is its generic fallback and unstructuredCause holds the raw response.
@@ -16,7 +14,7 @@ function backendRefusalMessage(cause) {
16
14
  else if (cause instanceof agent_client_1.AgentHttpError) {
17
15
  detail = (0, agent_client_1.extractErrorDetail)(cause);
18
16
  }
19
- return detail ? (0, errors_1.flattenAgentMessage)(detail) : undefined;
17
+ return detail ? (0, agent_errors_1.flattenAgentMessage)(detail) : undefined;
20
18
  }
21
19
  // Re-wrap agent-client's semantic action error into the executor's domain error (carries userMessage
22
20
  // + drives the step fallback). Anything else stays raw → AgentPortError = step error.
@@ -299,11 +297,11 @@ class AgentClientAgentPort {
299
297
  catch (cause) {
300
298
  if (cause instanceof errors_1.WorkflowExecutorError)
301
299
  throw cause;
302
- throw new errors_1.AgentPortError(operation, cause);
300
+ throw (0, agent_errors_1.agentPortError)(operation, cause);
303
301
  }
304
302
  }
305
303
  mintToken(user) {
306
- return jsonwebtoken_1.default.sign({ ...(0, agent_client_1.toAgentTokenClaims)(user), scope: 'step-execution' }, this.authSecret, { expiresIn: '5m' });
304
+ return (0, step_user_1.mintStepToken)(user, this.authSecret);
307
305
  }
308
306
  createClient(user, forestServerToken) {
309
307
  return (0, agent_client_1.createRemoteAgentClient)({
@@ -376,4 +374,4 @@ class AgentClientAgentPort {
376
374
  }
377
375
  }
378
376
  exports.default = AgentClientAgentPort;
379
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWdlbnQtY2xpZW50LWFnZW50LXBvcnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvYWRhcHRlcnMvYWdlbnQtY2xpZW50LWFnZW50LXBvcnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFvQkEsNERBVW1DO0FBQ25DLGdFQUF3QztBQUV4QyxzQ0FVbUI7QUFFbkIsa0dBQWtHO0FBQ2xHLG9GQUFvRjtBQUNwRixTQUFTLHFCQUFxQixDQUFDLEtBQWM7SUFDM0MsSUFBSSxNQUEwQixDQUFDO0lBRS9CLElBQUksS0FBSyxZQUFZLHdDQUErQixFQUFFLENBQUM7UUFDckQsTUFBTSxHQUFHLEtBQUssQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDO0lBQy9ELENBQUM7U0FBTSxJQUFJLEtBQUssWUFBWSw2QkFBYyxFQUFFLENBQUM7UUFDM0MsTUFBTSxHQUFHLElBQUEsaUNBQWtCLEVBQUMsS0FBSyxDQUFDLENBQUM7SUFDckMsQ0FBQztJQUVELE9BQU8sTUFBTSxDQUFDLENBQUMsQ0FBQyxJQUFBLDRCQUFtQixFQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUM7QUFDMUQsQ0FBQztBQUVELHFHQUFxRztBQUNyRyxzRkFBc0Y7QUFDdEYsU0FBUyx1QkFBdUIsQ0FBQyxNQUFjLEVBQUUsS0FBYztJQUM3RCxJQUFJLEtBQUssWUFBWSwwQ0FBaUMsRUFBRSxDQUFDO1FBQ3ZELE9BQU8sSUFBSSxvQ0FBMkIsQ0FBQyxNQUFNLEVBQUUsS0FBSyxDQUFDLHVCQUF1QixDQUFDLENBQUM7SUFDaEYsQ0FBQztJQUVELElBQUksS0FBSyxZQUFZLHdDQUErQixFQUFFLENBQUM7UUFDckQsT0FBTyxJQUFJLGtDQUF5QixDQUFDLE1BQU0sRUFBRSxLQUFLLEVBQUUscUJBQXFCLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztJQUNwRixDQUFDO0lB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
377
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWdlbnQtY2xpZW50LWFnZW50LXBvcnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvYWRhcHRlcnMvYWdlbnQtY2xpZW50LWFnZW50LXBvcnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFvQkEsNERBU21DO0FBRW5DLGlEQUFxRTtBQUNyRSwyQ0FBNEM7QUFDNUMsc0NBUW1CO0FBRW5CLGtHQUFrRztBQUNsRyxvRkFBb0Y7QUFDcEYsU0FBUyxxQkFBcUIsQ0FBQyxLQUFjO0lBQzNDLElBQUksTUFBMEIsQ0FBQztJQUUvQixJQUFJLEtBQUssWUFBWSx3Q0FBK0IsRUFBRSxDQUFDO1FBQ3JELE1BQU0sR0FBRyxLQUFLLENBQUMsaUJBQWlCLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQztJQUMvRCxDQUFDO1NBQU0sSUFBSSxLQUFLLFlBQVksNkJBQWMsRUFBRSxDQUFDO1FBQzNDLE1BQU0sR0FBRyxJQUFBLGlDQUFrQixFQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ3JDLENBQUM7SUFFRCxPQUFPLE1BQU0sQ0FBQyxDQUFDLENBQUMsSUFBQSxrQ0FBbUIsRUFBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDO0FBQzFELENBQUM7QUFFRCxxR0FBcUc7QUFDckcsc0ZBQXNGO0FBQ3RGLFNBQVMsdUJBQXVCLENBQUMsTUFBYyxFQUFFLEtBQWM7SUFDN0QsSUFBSSxLQUFLLFlBQVksMENBQWlDLEVBQUUsQ0FBQztRQUN2RCxPQUFPLElBQUksb0NBQTJCLENBQUMsTUFBTSxFQUFFLEtBQUssQ0FBQyx1QkFBdUIsQ0FBQyxDQUFDO0lBQ2hGLENBQUM7SUFFRCxJQUFJLEtBQUssWUFBWSx3Q0FBK0IsRUFBRSxDQUFDO1FBQ3JELE9BQU8sSUFBSSxrQ0FBeUIsQ0FBQyxNQUFNLEVBQUUsS0FBSyxFQUFFLHFCQUFxQixDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7SUFD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
@@ -0,0 +1,24 @@
1
+ import type { ExclusionQuery, ExclusionUnavailableReason, ListSegmentRecordIdsQuery, SegmentReaderPort } from '../ports/segment-reader-port';
2
+ export default class AgentClientSegmentReader implements SegmentReaderPort {
3
+ private readonly agentUrl;
4
+ private readonly authSecret;
5
+ constructor(params: {
6
+ agentUrl: string;
7
+ authSecret: string;
8
+ });
9
+ listRecordIds(query: ListSegmentRecordIdsQuery): Promise<string[]>;
10
+ exclusionUnavailableReason(query: ExclusionQuery): Promise<ExclusionUnavailableReason | undefined>;
11
+ sortsOnSeveralFields(liana: string | null | undefined, lianaVersion: string | null | undefined): boolean;
12
+ private createClient;
13
+ private static resolveLister;
14
+ private static buildFilters;
15
+ private static buildRecordIdFilter;
16
+ /**
17
+ * The JSON:API resource id, which the agent already builds by joining the primary key with `|`
18
+ * (`IdUtils.packId`) — the very form the orchestrator stores as `recordId`. Rebuilding it from the
19
+ * attributes would be wrong anyway: the deserializer overwrites an `id` attribute with the
20
+ * resource id, so a composite key would come back doubled.
21
+ */
22
+ private static readRecordId;
23
+ }
24
+ //# sourceMappingURL=agent-client-segment-reader.d.ts.map
@@ -0,0 +1,182 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ const agent_client_1 = require("@forestadmin/agent-client");
7
+ const semver_1 = __importDefault(require("semver"));
8
+ const agent_errors_1 = require("./agent-errors");
9
+ const step_user_1 = require("./step-user");
10
+ const errors_1 = require("../errors");
11
+ const record_id_1 = require("../record-id");
12
+ // The exclusion filter travels in the query string of a GET. The orchestrator's untreated cap does
13
+ // not bound it: records waiting on a person in the fallback inbox stay excluded, as many as there
14
+ // are, so past this the page is padded instead.
15
+ const MAX_EXCLUDED_RECORDS = 150;
16
+ // The agents that serve `POST /forest/_internal/capabilities`, the same list the front gates that
17
+ // call on. Any other name is a v1 liana, which raises on `not_in`, or one this executor predates:
18
+ // both pad rather than risk a candidate read that fails on every sweep.
19
+ const LIANAS_WITH_CAPABILITIES = new Set([
20
+ 'forest-nodejs-agent',
21
+ 'agent-ruby',
22
+ 'agent-python',
23
+ 'agent-php',
24
+ ]);
25
+ // The first version of each liana that sorts on several fields, the front's `MultipleSortingFields`.
26
+ // An older one reads `a,id` as a single column: forest-express-sequelize answers 500, and
27
+ // forest-express-mongoose sorts on a field literally named `a,_id`.
28
+ const MULTIPLE_SORT_MINIMAL_VERSIONS = new Map([
29
+ ['forest-rails', '8.3.0'],
30
+ ['forest-nodejs-agent', '1.40.0'],
31
+ ['agent-python', '1.8.0'],
32
+ ['agent-ruby', '1.0.0-beta.56'],
33
+ ['forest-express-sequelize', '9.6.11'],
34
+ ['forest-express-mongoose', '9.6.8'],
35
+ ]);
36
+ class AgentClientSegmentReader {
37
+ constructor(params) {
38
+ this.agentUrl = params.agentUrl;
39
+ this.authSecret = params.authSecret;
40
+ }
41
+ async listRecordIds(query) {
42
+ const { collectionName, segment, primaryKeys, user, timezone, pageSize, pageNumber } = query;
43
+ const { recordIds, excludedRecordIds } = query;
44
+ try {
45
+ const client = this.createClient(user, timezone);
46
+ const filters = AgentClientSegmentReader.buildFilters(segment, primaryKeys, recordIds, excludedRecordIds);
47
+ const options = {
48
+ fields: primaryKeys,
49
+ ...(pageSize !== undefined
50
+ ? { pagination: { size: pageSize, number: pageNumber ?? 1 } }
51
+ : {}),
52
+ sort: query.sort,
53
+ ...(filters !== undefined ? { filters } : {}),
54
+ };
55
+ const records = await AgentClientSegmentReader.resolveLister(client, collectionName, segment).list(options);
56
+ return records.map(record => AgentClientSegmentReader.readRecordId(record, collectionName));
57
+ }
58
+ catch (cause) {
59
+ // These three say the read itself is unusable, not that the agent failed; wrapping them would
60
+ // bury what the poller needs to log.
61
+ if (cause instanceof errors_1.WorkflowExecutorError ||
62
+ cause instanceof errors_1.SegmentRecordIdMissingError ||
63
+ cause instanceof errors_1.CompositeRecordIdMismatchError) {
64
+ throw cause;
65
+ }
66
+ throw (0, agent_errors_1.segmentReadError)('listSegmentRecordIds', cause);
67
+ }
68
+ }
69
+ async exclusionUnavailableReason(query) {
70
+ const { collectionName, primaryKeys, user, timezone, liana, knownRecordCount } = query;
71
+ if (primaryKeys.length !== 1)
72
+ return 'composite-key';
73
+ if (knownRecordCount > MAX_EXCLUDED_RECORDS)
74
+ return 'too-many-known-records';
75
+ if (!knownRecordCount)
76
+ return undefined;
77
+ if (liana == null || !LIANAS_WITH_CAPABILITIES.has(liana))
78
+ return 'unknown-liana';
79
+ let operators;
80
+ try {
81
+ const { fields } = await this.createClient(user, timezone)
82
+ .collection(collectionName)
83
+ .capabilities();
84
+ operators = fields.find(({ name }) => name === primaryKeys[0])?.operators ?? [];
85
+ }
86
+ catch (cause) {
87
+ throw (0, agent_errors_1.segmentReadError)('listFieldOperators', cause);
88
+ }
89
+ return operators.includes('not_in') ? undefined : 'field-without-not-in';
90
+ }
91
+ sortsOnSeveralFields(liana, lianaVersion) {
92
+ const minimalVersion = liana != null ? MULTIPLE_SORT_MINIMAL_VERSIONS.get(liana) : undefined;
93
+ const version = lianaVersion != null ? semver_1.default.valid(lianaVersion) : null;
94
+ return Boolean(minimalVersion && version && semver_1.default.gte(version, minimalVersion));
95
+ }
96
+ createClient(user, timezone) {
97
+ return (0, agent_client_1.createRemoteAgentClient)({
98
+ url: this.agentUrl,
99
+ token: (0, step_user_1.mintStepToken)(user, this.authSecret),
100
+ // Left out, agent-client sends Europe/Paris, and every relative-date condition in the
101
+ // segment would resolve against a day the project never asked for.
102
+ timezone,
103
+ });
104
+ }
105
+ static resolveLister(client, collectionName, segment) {
106
+ const collection = client.collection(collectionName);
107
+ if (segment.kind === 'smart')
108
+ return collection.segment(segment.name);
109
+ if (segment.kind === 'sql') {
110
+ // A v1 liana runs the query against the single database it is bound to and never reads
111
+ // `connectionName`; the key is dropped rather than sent empty, which superagent would
112
+ // forward as a connection name the agent cannot resolve. agent-client types it required,
113
+ // hence the cast.
114
+ return collection.liveQuerySegment({
115
+ query: segment.query,
116
+ ...(segment.connectionName ? { connectionName: segment.connectionName } : {}),
117
+ });
118
+ }
119
+ return collection;
120
+ }
121
+ static buildFilters(segment, primaryKeys, recordIds, excludedRecordIds) {
122
+ const branches = [
123
+ segment.kind === 'filter' ? segment.conditionTree : null,
124
+ recordIds?.length
125
+ ? AgentClientSegmentReader.buildRecordIdFilter(primaryKeys, recordIds)
126
+ : null,
127
+ // Single-column keys only, as the port states: `not_in` takes a flat list of values, and the
128
+ // caller falls back to reading a wider page rather than negating a composite key.
129
+ excludedRecordIds?.length && primaryKeys.length === 1
130
+ ? { field: primaryKeys[0], operator: 'not_in', value: excludedRecordIds }
131
+ : null,
132
+ ].filter((tree) => tree !== null);
133
+ if (branches.length === 0)
134
+ return undefined;
135
+ const tree = branches.length === 1 ? branches[0] : { aggregator: 'and', conditions: branches };
136
+ return tree;
137
+ }
138
+ static buildRecordIdFilter(primaryKeys, recordIds) {
139
+ // `in` takes a flat list of values, so it only ever addresses a single-column key. A composite
140
+ // key is asked for as one branch per record, each ANDing the parts of its packed id.
141
+ if (primaryKeys.length === 1) {
142
+ return { field: primaryKeys[0], operator: 'in', value: recordIds };
143
+ }
144
+ return {
145
+ aggregator: 'or',
146
+ conditions: recordIds.map(recordId => {
147
+ const parts = (0, record_id_1.deserializeRecordId)(recordId);
148
+ // Same limitation as the agent's own `IdUtils.packId`: a key value containing the separator
149
+ // cannot be unpacked. Caught here, where the id is named, rather than sent as a leaf with
150
+ // no field for the agent to reject.
151
+ if (parts.length !== primaryKeys.length) {
152
+ throw new errors_1.CompositeRecordIdMismatchError(recordId, primaryKeys.length);
153
+ }
154
+ return {
155
+ aggregator: 'and',
156
+ conditions: parts.map((part, index) => ({
157
+ field: primaryKeys[index],
158
+ operator: 'equal',
159
+ value: part,
160
+ })),
161
+ };
162
+ }),
163
+ };
164
+ }
165
+ /**
166
+ * The JSON:API resource id, which the agent already builds by joining the primary key with `|`
167
+ * (`IdUtils.packId`) — the very form the orchestrator stores as `recordId`. Rebuilding it from the
168
+ * attributes would be wrong anyway: the deserializer overwrites an `id` attribute with the
169
+ * resource id, so a composite key would come back doubled.
170
+ */
171
+ static readRecordId(record, collectionName) {
172
+ const { id } = record;
173
+ // Guarded rather than coerced: an id the orchestrator cannot resolve would start a run against
174
+ // the wrong record, and an empty string is no more an id than a missing one.
175
+ if ((typeof id !== 'string' && typeof id !== 'number') || String(id) === '') {
176
+ throw new errors_1.SegmentRecordIdMissingError(collectionName);
177
+ }
178
+ return String(id);
179
+ }
180
+ }
181
+ exports.default = AgentClientSegmentReader;
182
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWdlbnQtY2xpZW50LXNlZ21lbnQtcmVhZGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2FkYXB0ZXJzL2FnZW50LWNsaWVudC1zZWdtZW50LXJlYWRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQVNBLDREQUFvRTtBQUNwRSxvREFBNEI7QUFFNUIsaURBQWtEO0FBQ2xELDJDQUE0QztBQUM1QyxzQ0FJbUI7QUFDbkIsNENBQW1EO0FBSW5ELG1HQUFtRztBQUNuRyxrR0FBa0c7QUFDbEcsZ0RBQWdEO0FBQ2hELE1BQU0sb0JBQW9CLEdBQUcsR0FBRyxDQUFDO0FBRWpDLGtHQUFrRztBQUNsRyxrR0FBa0c7QUFDbEcsd0VBQXdFO0FBQ3hFLE1BQU0sd0JBQXdCLEdBQXdCLElBQUksR0FBRyxDQUFDO0lBQzVELHFCQUFxQjtJQUNyQixZQUFZO0lBQ1osY0FBYztJQUNkLFdBQVc7Q0FDWixDQUFDLENBQUM7QUFFSCxxR0FBcUc7QUFDckcsMEZBQTBGO0FBQzFGLG9FQUFvRTtBQUNwRSxNQUFNLDhCQUE4QixHQUFnQyxJQUFJLEdBQUcsQ0FBQztJQUMxRSxDQUFDLGNBQWMsRUFBRSxPQUFPLENBQUM7SUFDekIsQ0FBQyxxQkFBcUIsRUFBRSxRQUFRLENBQUM7SUFDakMsQ0FBQyxjQUFjLEVBQUUsT0FBTyxDQUFDO0lBQ3pCLENBQUMsWUFBWSxFQUFFLGVBQWUsQ0FBQztJQUMvQixDQUFDLDBCQUEwQixFQUFFLFFBQVEsQ0FBQztJQUN0QyxDQUFDLHlCQUF5QixFQUFFLE9BQU8sQ0FBQztDQUNyQyxDQUFDLENBQUM7QUFZSCxNQUFxQix3QkFBd0I7SUFJM0MsWUFBWSxNQUFnRDtRQUMxRCxJQUFJLENBQUMsUUFBUSxHQUFHLE1BQU0sQ0FBQyxRQUFRLENBQUM7UUFDaEMsSUFBSSxDQUFDLFVBQVUsR0FBRyxNQUFNLENBQUMsVUFBVSxDQUFDO0lBQ3RDLENBQUM7SUFFRCxLQUFLLENBQUMsYUFBYSxDQUFDLEtBQWdD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
@@ -0,0 +1,11 @@
1
+ import type { SegmentReadFailureKind } from '../errors';
2
+ import { AgentPortError, SegmentReadError } from '../errors';
3
+ export declare function flattenAgentMessage(detail: string): string;
4
+ export declare function agentErrorDetail(cause: unknown): string | undefined;
5
+ export declare function agentPortError(operation: string, cause: unknown): AgentPortError;
6
+ export declare function classifyAgentFailure(cause: unknown): {
7
+ failure: SegmentReadFailureKind;
8
+ httpStatus?: number;
9
+ };
10
+ export declare function segmentReadError(operation: string, cause: unknown): SegmentReadError;
11
+ //# sourceMappingURL=agent-errors.d.ts.map
@@ -0,0 +1,81 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.flattenAgentMessage = flattenAgentMessage;
4
+ exports.agentErrorDetail = agentErrorDetail;
5
+ exports.agentPortError = agentPortError;
6
+ exports.classifyAgentFailure = classifyAgentFailure;
7
+ exports.segmentReadError = segmentReadError;
8
+ const agent_client_1 = require("@forestadmin/agent-client");
9
+ const errors_1 = require("../errors");
10
+ const AGENT_ERROR_MESSAGE_MAX_LENGTH = 500;
11
+ function isAgentHttpResponse(cause) {
12
+ return cause instanceof Error && typeof cause.status === 'number';
13
+ }
14
+ function flattenAgentMessage(detail) {
15
+ const flat = Array.from(detail.slice(0, AGENT_ERROR_MESSAGE_MAX_LENGTH * 4), char => char < ' ' || (char >= '\u007f' && char <= '\u009f') ? ' ' : char)
16
+ .join('')
17
+ .replace(/\s+/g, ' ')
18
+ .trim();
19
+ return flat.length > AGENT_ERROR_MESSAGE_MAX_LENGTH
20
+ ? `${flat.slice(0, AGENT_ERROR_MESSAGE_MAX_LENGTH)}…`
21
+ : flat;
22
+ }
23
+ function agentErrorDetail(cause) {
24
+ if (!isAgentHttpResponse(cause))
25
+ return undefined;
26
+ const detail = (0, agent_client_1.extractErrorDetail)(cause);
27
+ return detail ? flattenAgentMessage(detail) : undefined;
28
+ }
29
+ function agentErrorMessage(cause) {
30
+ return isAgentHttpResponse(cause) && cause.status >= 500 ? agentErrorDetail(cause) : undefined;
31
+ }
32
+ function agentPortError(operation, cause) {
33
+ return new errors_1.AgentPortError(operation, cause, agentErrorMessage(cause));
34
+ }
35
+ const FORBIDDEN_AGENT_STATUSES = new Set([401, 403]);
36
+ const UNREACHABLE_AGENT_STATUSES = new Set([502, 503, 504]);
37
+ const OVERLOADED_AGENT_STATUSES = new Set([408, 429]);
38
+ // Superagent's own timeout is ECONNABORTED. Any other failure without an HTTP answer (a JWT that
39
+ // cannot be signed, a malformed agent URL) is a fault on our side, not an agent to go and restart.
40
+ const UNREACHABLE_AGENT_ERROR_CODES = new Set([
41
+ 'ECONNABORTED',
42
+ 'ECONNREFUSED',
43
+ 'ECONNRESET',
44
+ 'EAI_AGAIN',
45
+ 'EHOSTUNREACH',
46
+ 'ENETUNREACH',
47
+ 'ENOTFOUND',
48
+ 'EPIPE',
49
+ 'ETIMEDOUT',
50
+ ]);
51
+ // agent-client reports status 0 when a response carries none. 0 is not a real HTTP status, so a
52
+ // read that lands there reached no answer worth classifying by code: treat it as unreachable.
53
+ const isHttpStatus = (status) => status >= 100 && status <= 599;
54
+ function classifyAgentFailure(cause) {
55
+ if (!(cause instanceof agent_client_1.AgentHttpError)) {
56
+ const code = cause?.code;
57
+ return {
58
+ failure: typeof code === 'string' && UNREACHABLE_AGENT_ERROR_CODES.has(code)
59
+ ? 'unreachable'
60
+ : 'failed',
61
+ };
62
+ }
63
+ const httpStatus = cause.status;
64
+ if (!isHttpStatus(httpStatus))
65
+ return { failure: 'unreachable' };
66
+ if (FORBIDDEN_AGENT_STATUSES.has(httpStatus))
67
+ return { failure: 'forbidden', httpStatus };
68
+ if (UNREACHABLE_AGENT_STATUSES.has(httpStatus))
69
+ return { failure: 'unreachable', httpStatus };
70
+ if (OVERLOADED_AGENT_STATUSES.has(httpStatus))
71
+ return { failure: 'overloaded', httpStatus };
72
+ return { failure: 'failed', httpStatus };
73
+ }
74
+ function segmentReadError(operation, cause) {
75
+ return new errors_1.SegmentReadError(operation, cause, {
76
+ ...classifyAgentFailure(cause),
77
+ agentDetail: agentErrorDetail(cause),
78
+ agentMessage: agentErrorMessage(cause),
79
+ });
80
+ }
81
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWdlbnQtZXJyb3JzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2FkYXB0ZXJzL2FnZW50LWVycm9ycy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQWNBLGtEQVdDO0FBRUQsNENBS0M7QUFNRCx3Q0FFQztBQTBCRCxvREF1QkM7QUFFRCw0Q0FNQztBQS9GRCw0REFBK0U7QUFFL0Usc0NBQTZEO0FBRTdELE1BQU0sOEJBQThCLEdBQUcsR0FBRyxDQUFDO0FBSTNDLFNBQVMsbUJBQW1CLENBQUMsS0FBYztJQUN6QyxPQUFPLEtBQUssWUFBWSxLQUFLLElBQUksT0FBUSxLQUFvQyxDQUFDLE1BQU0sS0FBSyxRQUFRLENBQUM7QUFDcEcsQ0FBQztBQUVELFNBQWdCLG1CQUFtQixDQUFDLE1BQWM7SUFDaEQsTUFBTSxJQUFJLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSw4QkFBOEIsR0FBRyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsRUFBRSxDQUNsRixJQUFJLEdBQUcsR0FBRyxJQUFJLENBQUMsSUFBSSxJQUFJLFFBQVEsSUFBSSxJQUFJLElBQUksUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUNsRTtTQUNFLElBQUksQ0FBQyxFQUFFLENBQUM7U0FDUixPQUFPLENBQUMsTUFBTSxFQUFFLEdBQUcsQ0FBQztTQUNwQixJQUFJLEVBQUUsQ0FBQztJQUVWLE9BQU8sSUFBSSxDQUFDLE1BQU0sR0FBRyw4QkFBOEI7UUFDakQsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsOEJBQThCLENBQUMsR0FBRztRQUNyRCxDQUFDLENBQUMsSUFBSSxDQUFDO0FBQ1gsQ0FBQztBQUVELFNBQWdCLGdCQUFnQixDQUFDLEtBQWM7SUFDN0MsSUFBSSxDQUFDLG1CQUFtQixDQUFDLEtBQUssQ0FBQztRQUFFLE9BQU8sU0FBUyxDQUFDO0lBQ2xELE1BQU0sTUFBTSxHQUFHLElBQUEsaUNBQWtCLEVBQUMsS0FBSyxDQUFDLENBQUM7SUFFekMsT0FBTyxNQUFNLENBQUMsQ0FBQyxDQUFDLG1CQUFtQixDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUM7QUFDMUQsQ0FBQztBQUVELFNBQVMsaUJBQWlCLENBQUMsS0FBYztJQUN2QyxPQUFPLG1CQUFtQixDQUFDLEtBQUssQ0FBQyxJQUFJLEtBQUssQ0FBQyxNQUFNLElBQUksR0FBRyxDQUFDLENBQUMsQ0FBQyxnQkFBZ0IsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDO0FBQ2pHLENBQUM7QUFFRCxTQUFnQixjQUFjLENBQUMsU0FBaUIsRUFBRSxLQUFjO0lBQzlELE9BQU8sSUFBSSx1QkFBYyxDQUFDLFNBQVMsRUFBRSxLQUFLLEVBQUUsaUJBQWlCLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztBQUN4RSxDQUFDO0FBRUQsTUFBTSx3QkFBd0IsR0FBd0IsSUFBSSxHQUFHLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQztBQUUxRSxNQUFNLDBCQUEwQixHQUF3QixJQUFJLEdBQUcsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQztBQUVqRixNQUFNLHlCQUF5QixHQUF3QixJQUFJLEdBQUcsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBRTNFLGlHQUFpRztBQUNqRyxtR0FBbUc7QUFDbkcsTUFBTSw2QkFBNkIsR0FBd0IsSUFBSSxHQUFHLENBQUM7SUFDakUsY0FBYztJQUNkLGNBQWM7SUFDZCxZQUFZO0lBQ1osV0FBVztJQUNYLGNBQWM7SUFDZCxhQUFhO0lBQ2IsV0FBVztJQUNYLE9BQU87SUFDUCxXQUFXO0NBQ1osQ0FBQyxDQUFDO0FBRUgsZ0dBQWdHO0FBQ2hHLDhGQUE4RjtBQUM5RixNQUFNLFlBQVksR0FBRyxDQUFDLE1BQWMsRUFBVyxFQUFFLENBQUMsTUFBTSxJQUFJLEdBQUcsSUFBSSxNQUFNLElBQUksR0FBRyxDQUFDO0FBRWpGLFNBQWdCLG9CQUFvQixDQUFDLEtBQWM7SUFJakQsSUFBSSxDQUFDLENBQUMsS0FBSyxZQUFZLDZCQUFjLENBQUMsRUFBRSxDQUFDO1FBQ3ZDLE1BQU0sSUFBSSxHQUFJLEtBQTRCLEVBQUUsSUFBSSxDQUFDO1FBRWpELE9BQU87WUFDTCxPQUFPLEVBQ0wsT0FBTyxJQUFJLEtBQUssUUFBUSxJQUFJLDZCQUE2QixDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUM7Z0JBQ2pFLENBQUMsQ0FBQyxhQUFhO2dCQUNmLENBQUMsQ0FBQyxRQUFRO1NBQ2YsQ0FBQztJQUNKLENBQUM7SUFFRCxNQUFNLFVBQVUsR0FBRyxLQUFLLENBQUMsTUFBTSxDQUFDO0lBRWhDLElBQUksQ0FBQyxZQUFZLENBQUMsVUFBVSxDQUFDO1FBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxhQUFhLEVBQUUsQ0FBQztJQUNqRSxJQUFJLHdCQUF3QixDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUM7UUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLFdBQVcsRUFBRSxVQUFVLEVBQUUsQ0FBQztJQUMxRixJQUFJLDBCQUEwQixDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUM7UUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLGFBQWEsRUFBRSxVQUFVLEVBQUUsQ0FBQztJQUM5RixJQUFJLHlCQUF5QixDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUM7UUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLFlBQVksRUFBRSxVQUFVLEVBQUUsQ0FBQztJQUU1RixPQUFPLEVBQUUsT0FBTyxFQUFFLFFBQVEsRUFBRSxVQUFVLEVBQUUsQ0FBQztBQUMzQyxDQUFDO0FBRUQsU0FBZ0IsZ0JBQWdCLENBQUMsU0FBaUIsRUFBRSxLQUFjO0lBQ2hFLE9BQU8sSUFBSSx5QkFBZ0IsQ0FBQyxTQUFTLEVBQUUsS0FBSyxFQUFFO1FBQzVDLEdBQUcsb0JBQW9CLENBQUMsS0FBSyxDQUFDO1FBQzlCLFdBQVcsRUFBRSxnQkFBZ0IsQ0FBQyxLQUFLLENBQUM7UUFDcEMsWUFBWSxFQUFFLGlCQUFpQixDQUFDLEtBQUssQ0FBQztLQUN2QyxDQUFDLENBQUM7QUFDTCxDQUFDIn0=
@@ -0,0 +1,22 @@
1
+ import type { AutomationPort } from '../ports/automation-port';
2
+ import type { Logger } from '../ports/logger-port';
3
+ import type { AutomatedInbox, InboxAssignment, InboxSyncReport, InboxSyncResult } from '../types/automation';
4
+ export default class ForestServerAutomationPort implements AutomationPort {
5
+ private readonly options;
6
+ private readonly logger;
7
+ private reportedMissingRoute;
8
+ constructor(params: {
9
+ envSecret: string;
10
+ forestServerUrl: string;
11
+ logger?: Logger;
12
+ });
13
+ listAutomatedInboxes(instanceId: string): Promise<AutomatedInbox[]>;
14
+ holdLease(instanceId: string): Promise<boolean>;
15
+ private reportMissingRoute;
16
+ private parseConfigs;
17
+ private warnOnUnreadableSort;
18
+ listAssignments(inboxId: string): Promise<InboxAssignment[]>;
19
+ sync(inboxId: string, report: InboxSyncReport): Promise<InboxSyncResult[]>;
20
+ private callPort;
21
+ }
22
+ //# sourceMappingURL=forest-server-automation-port.d.ts.map