@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.
- package/dist/adapters/agent-client-agent-port.js +6 -8
- package/dist/adapters/agent-client-segment-reader.d.ts +24 -0
- package/dist/adapters/agent-client-segment-reader.js +182 -0
- package/dist/adapters/agent-errors.d.ts +11 -0
- package/dist/adapters/agent-errors.js +81 -0
- package/dist/adapters/forest-server-automation-port.d.ts +22 -0
- package/dist/adapters/forest-server-automation-port.js +174 -0
- package/dist/adapters/forest-server-workflow-port.d.ts +3 -1
- package/dist/adapters/forest-server-workflow-port.js +47 -21
- package/dist/adapters/forestadmin-client-activity-log-port.js +3 -3
- package/dist/adapters/project-timezone.d.ts +2 -0
- package/dist/adapters/project-timezone.js +11 -0
- package/dist/adapters/run-to-available-step-mapper.js +7 -16
- package/dist/adapters/server-types.d.ts +119 -1
- package/dist/adapters/server-types.js +104 -2
- package/dist/adapters/step-user.d.ts +23 -0
- package/dist/adapters/step-user.js +33 -0
- package/dist/automation/automation-poller.d.ts +45 -0
- package/dist/automation/automation-poller.js +201 -0
- package/dist/automation/inbox-poll.d.ts +47 -0
- package/dist/automation/inbox-poll.js +357 -0
- package/dist/automation/lease-keeper.d.ts +12 -0
- package/dist/automation/lease-keeper.js +30 -0
- package/dist/automation/read-failure.d.ts +5 -0
- package/dist/automation/read-failure.js +40 -0
- package/dist/automation/reconciliation.d.ts +13 -0
- package/dist/automation/reconciliation.js +88 -0
- package/dist/build-workflow-executor.d.ts +2 -0
- package/dist/build-workflow-executor.js +62 -4
- package/dist/cli-core.js +7 -1
- package/dist/defaults.d.ts +2 -0
- package/dist/defaults.js +10 -2
- package/dist/errors.d.ts +30 -2
- package/dist/errors.js +56 -26
- package/dist/http/pending-data-validators.js +3 -3
- package/dist/http/step-serializer.js +5 -5
- package/dist/ports/automation-port.d.ts +19 -0
- package/dist/ports/automation-port.js +3 -0
- package/dist/ports/segment-reader-port.d.ts +43 -0
- package/dist/ports/segment-reader-port.js +3 -0
- package/dist/ports/workflow-port.d.ts +3 -1
- package/dist/{adapters/record-id-serializer.d.ts → record-id.d.ts} +2 -2
- package/dist/record-id.js +20 -0
- package/dist/runner.d.ts +3 -0
- package/dist/runner.js +59 -12
- package/dist/types/automation.d.ts +64 -0
- package/dist/types/automation.js +3 -0
- package/dist/types/validated/execution.d.ts +2 -1
- package/dist/types/validated/execution.js +2 -1
- package/package.json +5 -3
- package/dist/adapters/record-id-serializer.js +0 -20
|
@@ -0,0 +1,174 @@
|
|
|
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 forestadmin_client_1 = require("@forestadmin/forestadmin-client");
|
|
7
|
+
const console_logger_1 = __importDefault(require("./console-logger"));
|
|
8
|
+
const project_timezone_1 = __importDefault(require("./project-timezone"));
|
|
9
|
+
const step_user_1 = require("./step-user");
|
|
10
|
+
const with_retry_1 = __importDefault(require("./with-retry"));
|
|
11
|
+
const errors_1 = require("../errors");
|
|
12
|
+
const server_types_1 = require("./server-types");
|
|
13
|
+
const ROUTES = {
|
|
14
|
+
automatedInboxes: (instanceId) => `/api/workflow-orchestrator/automated-inboxes?instanceId=${encodeURIComponent(instanceId)}`,
|
|
15
|
+
lease: (instanceId) => `/api/workflow-orchestrator/automated-inboxes/lease?instanceId=${encodeURIComponent(instanceId)}`,
|
|
16
|
+
assignments: (inboxId) => `/api/workflow-orchestrator/automated-inboxes/${encodeURIComponent(inboxId)}/assignments`,
|
|
17
|
+
sync: (inboxId) => `/api/workflow-orchestrator/automated-inboxes/${encodeURIComponent(inboxId)}/sync`,
|
|
18
|
+
};
|
|
19
|
+
// The next heartbeat leaves 15 s after this one ends, and the lease lives 45 s: a heartbeat allowed
|
|
20
|
+
// the default 10 s would leave the one after it under 5 s to land.
|
|
21
|
+
const HEARTBEAT_TIMEOUT_MS = 5000;
|
|
22
|
+
const AUTOMATION_ROUTE_MISSING = 'The orchestrator does not serve automated inboxes. Expected while the executor runs ahead of ' +
|
|
23
|
+
'the server; check forestServerUrl if it persists.';
|
|
24
|
+
function toAutomatedInbox(config) {
|
|
25
|
+
return {
|
|
26
|
+
inboxId: config.inboxId,
|
|
27
|
+
renderingId: config.renderingId,
|
|
28
|
+
workflowId: config.workflowId,
|
|
29
|
+
collectionName: config.collectionName,
|
|
30
|
+
primaryKeys: config.primaryKeys,
|
|
31
|
+
maxConcurrentRuns: config.maxConcurrentRuns,
|
|
32
|
+
timezone: (0, project_timezone_1.default)(config.timezone),
|
|
33
|
+
liana: config.liana,
|
|
34
|
+
lianaVersion: config.lianaVersion,
|
|
35
|
+
segment: config.segment,
|
|
36
|
+
sort: config.sort,
|
|
37
|
+
user: (0, step_user_1.toStepUser)(config.serviceAccountProfile),
|
|
38
|
+
};
|
|
39
|
+
}
|
|
40
|
+
function isNotFound(error) {
|
|
41
|
+
return error?.status === 404;
|
|
42
|
+
}
|
|
43
|
+
class ForestServerAutomationPort {
|
|
44
|
+
constructor(params) {
|
|
45
|
+
this.reportedMissingRoute = false;
|
|
46
|
+
this.options = { envSecret: params.envSecret, forestServerUrl: params.forestServerUrl };
|
|
47
|
+
this.logger = params.logger ?? (0, console_logger_1.default)();
|
|
48
|
+
}
|
|
49
|
+
async listAutomatedInboxes(instanceId) {
|
|
50
|
+
let response;
|
|
51
|
+
try {
|
|
52
|
+
response = await this.callPort('listAutomatedInboxes', () => forestadmin_client_1.ServerUtils.query(this.options, 'get', ROUTES.automatedInboxes(instanceId)));
|
|
53
|
+
}
|
|
54
|
+
catch (error) {
|
|
55
|
+
// An orchestrator that predates automated inboxes has no such route, so this is not an error
|
|
56
|
+
// — but a wrong `forestServerUrl` or a proxy that 404s unknown paths looks exactly the same,
|
|
57
|
+
// and that one never resolves itself.
|
|
58
|
+
if (isNotFound(error)) {
|
|
59
|
+
this.reportMissingRoute(instanceId);
|
|
60
|
+
return [];
|
|
61
|
+
}
|
|
62
|
+
throw error;
|
|
63
|
+
}
|
|
64
|
+
return this.parseConfigs(response);
|
|
65
|
+
}
|
|
66
|
+
// Not retried: the poller's next heartbeat is the retry, and backing off here would only widen
|
|
67
|
+
// the gap between two renewals of a lease that lives three heartbeats.
|
|
68
|
+
async holdLease(instanceId) {
|
|
69
|
+
let response;
|
|
70
|
+
try {
|
|
71
|
+
response = await forestadmin_client_1.ServerUtils.query(this.options, 'put', ROUTES.lease(instanceId), {}, undefined, HEARTBEAT_TIMEOUT_MS);
|
|
72
|
+
}
|
|
73
|
+
catch (error) {
|
|
74
|
+
// An orchestrator without the heartbeat route still elects on the listing, so the listing
|
|
75
|
+
// decides, as it did before this route existed.
|
|
76
|
+
if (isNotFound(error)) {
|
|
77
|
+
this.reportMissingRoute(instanceId);
|
|
78
|
+
return true;
|
|
79
|
+
}
|
|
80
|
+
throw error;
|
|
81
|
+
}
|
|
82
|
+
return server_types_1.ServerAutomationLeaseResponseSchema.parse(response).held;
|
|
83
|
+
}
|
|
84
|
+
// Said once at Warn so it is visible without becoming a line every heartbeat for the release
|
|
85
|
+
// window this is expected in.
|
|
86
|
+
reportMissingRoute(instanceId) {
|
|
87
|
+
this.logger(this.reportedMissingRoute ? 'Debug' : 'Warn', AUTOMATION_ROUTE_MISSING, {
|
|
88
|
+
instanceId,
|
|
89
|
+
forestServerUrl: this.options.forestServerUrl,
|
|
90
|
+
});
|
|
91
|
+
this.reportedMissingRoute = true;
|
|
92
|
+
}
|
|
93
|
+
parseConfigs(response) {
|
|
94
|
+
const envelope = server_types_1.ServerAutomatedInboxesResponseSchema.safeParse(response);
|
|
95
|
+
if (!envelope.success) {
|
|
96
|
+
throw new errors_1.UnreadableAutomatedInboxListingError(this.options.forestServerUrl, envelope.error);
|
|
97
|
+
}
|
|
98
|
+
const configs = [];
|
|
99
|
+
for (const [index, raw] of envelope.data.inboxes.entries()) {
|
|
100
|
+
const parsed = server_types_1.ServerAutomatedInboxConfigSchema.safeParse(raw);
|
|
101
|
+
// One unreadable config must not blind the poller to the others: a contract the executor is
|
|
102
|
+
// too old to understand is the expected reason, and the rest of the environment still runs.
|
|
103
|
+
if (parsed.success) {
|
|
104
|
+
this.warnOnUnreadableSort(raw, parsed.data);
|
|
105
|
+
configs.push(toAutomatedInbox(parsed.data));
|
|
106
|
+
}
|
|
107
|
+
else {
|
|
108
|
+
this.logger('Warn', 'Skipping an automated inbox config the executor cannot read', {
|
|
109
|
+
index,
|
|
110
|
+
inboxId: raw?.inboxId,
|
|
111
|
+
error: parsed.error.message,
|
|
112
|
+
});
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
return configs;
|
|
116
|
+
}
|
|
117
|
+
warnOnUnreadableSort(raw, config) {
|
|
118
|
+
const sent = raw?.sort;
|
|
119
|
+
if (sent == null || config.sort)
|
|
120
|
+
return;
|
|
121
|
+
this.logger('Warn', 'Ignoring an automated inbox sort the executor cannot read, reading in the agent order', {
|
|
122
|
+
inboxId: config.inboxId,
|
|
123
|
+
sort: sent,
|
|
124
|
+
});
|
|
125
|
+
}
|
|
126
|
+
async listAssignments(inboxId) {
|
|
127
|
+
const response = await this.callPort('listAutomatedInboxAssignments', () => forestadmin_client_1.ServerUtils.query(this.options, 'get', ROUTES.assignments(inboxId)), inboxId);
|
|
128
|
+
// Thrown, not swallowed: an empty list here is indistinguishable from an inbox with nothing
|
|
129
|
+
// assigned, and the sweep would propose every record in the segment as a fresh candidate.
|
|
130
|
+
return server_types_1.ServerAutomatedInboxAssignmentsResponseSchema.parse(response).assignments;
|
|
131
|
+
}
|
|
132
|
+
async sync(inboxId, report) {
|
|
133
|
+
const response = await this.callPort('syncAutomatedInbox', () => {
|
|
134
|
+
const body = report;
|
|
135
|
+
return forestadmin_client_1.ServerUtils.query(this.options, 'post', ROUTES.sync(inboxId), {}, body);
|
|
136
|
+
}, inboxId);
|
|
137
|
+
const envelope = server_types_1.ServerAutomatedInboxSyncResponseSchema.safeParse(response);
|
|
138
|
+
// The sync landed and the runs it asked for have already started; only the answer is unreadable.
|
|
139
|
+
// Thrown here it would surface as `Automated inbox poll failed`, which an operator reads as the
|
|
140
|
+
// sync never reaching the orchestrator — the opposite of what happened.
|
|
141
|
+
if (!envelope.success) {
|
|
142
|
+
this.logger('Error', 'Unreadable automated inbox sync response, the sync itself landed', {
|
|
143
|
+
inboxId,
|
|
144
|
+
error: envelope.error.message,
|
|
145
|
+
});
|
|
146
|
+
return [];
|
|
147
|
+
}
|
|
148
|
+
return envelope.data.results;
|
|
149
|
+
}
|
|
150
|
+
async callPort(operation, fn, inboxId) {
|
|
151
|
+
try {
|
|
152
|
+
return await (0, with_retry_1.default)(operation, fn, { logger: this.logger });
|
|
153
|
+
}
|
|
154
|
+
catch (cause) {
|
|
155
|
+
// A 404 means two different things here, so it is never wrapped: on an inbox route the
|
|
156
|
+
// orchestrator has stopped serving that inbox, on the listing it has no such route at all.
|
|
157
|
+
if (isNotFound(cause)) {
|
|
158
|
+
if (inboxId !== undefined) {
|
|
159
|
+
throw new errors_1.AutomatedInboxGoneError(inboxId, operation, (0, errors_1.extractErrorMessage)(cause));
|
|
160
|
+
}
|
|
161
|
+
throw cause;
|
|
162
|
+
}
|
|
163
|
+
if (cause instanceof errors_1.WorkflowExecutorError)
|
|
164
|
+
throw cause;
|
|
165
|
+
this.logger('Error', `Automation port "${operation}" failed`, {
|
|
166
|
+
inboxId,
|
|
167
|
+
error: (0, errors_1.extractErrorMessage)(cause),
|
|
168
|
+
});
|
|
169
|
+
throw new errors_1.WorkflowPortError(operation, cause);
|
|
170
|
+
}
|
|
171
|
+
}
|
|
172
|
+
}
|
|
173
|
+
exports.default = ForestServerAutomationPort;
|
|
174
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9yZXN0LXNlcnZlci1hdXRvbWF0aW9uLXBvcnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvYWRhcHRlcnMvZm9yZXN0LXNlcnZlci1hdXRvbWF0aW9uLXBvcnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFXQSx3RUFBOEQ7QUFFOUQsc0VBQW1EO0FBQ25ELDBFQUFtRDtBQUNuRCwyQ0FBeUM7QUFDekMsOERBQXFDO0FBQ3JDLHNDQU1tQjtBQUNuQixpREFNd0I7QUFFeEIsTUFBTSxNQUFNLEdBQUc7SUFDYixnQkFBZ0IsRUFBRSxDQUFDLFVBQWtCLEVBQUUsRUFBRSxDQUN2QywyREFBMkQsa0JBQWtCLENBQUMsVUFBVSxDQUFDLEVBQUU7SUFDN0YsS0FBSyxFQUFFLENBQUMsVUFBa0IsRUFBRSxFQUFFLENBQzVCLGlFQUFpRSxrQkFBa0IsQ0FDakYsVUFBVSxDQUNYLEVBQUU7SUFDTCxXQUFXLEVBQUUsQ0FBQyxPQUFlLEVBQUUsRUFBRSxDQUMvQixnREFBZ0Qsa0JBQWtCLENBQUMsT0FBTyxDQUFDLGNBQWM7SUFDM0YsSUFBSSxFQUFFLENBQUMsT0FBZSxFQUFFLEVBQUUsQ0FDeEIsZ0RBQWdELGtCQUFrQixDQUFDLE9BQU8sQ0FBQyxPQUFPO0NBQ3JGLENBQUM7QUFFRixvR0FBb0c7QUFDcEcsbUVBQW1FO0FBQ25FLE1BQU0sb0JBQW9CLEdBQUcsSUFBSyxDQUFDO0FBRW5DLE1BQU0sd0JBQXdCLEdBQzVCLCtGQUErRjtJQUMvRixtREFBbUQsQ0FBQztBQUV0RCxTQUFTLGdCQUFnQixDQUFDLE1BQWtDO0lBQzFELE9BQU87UUFDTCxPQUFPLEVBQUUsTUFBTSxDQUFDLE9BQU87UUFDdkIsV0FBVyxFQUFFLE1BQU0sQ0FBQyxXQUFXO1FBQy9CLFVBQVUsRUFBRSxNQUFNLENBQUMsVUFBVTtRQUM3QixjQUFjLEVBQUUsTUFBTSxDQUFDLGNBQWM7UUFDckMsV0FBVyxFQUFFLE1BQU0sQ0FBQyxXQUFXO1FBQy9C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
|
|
@@ -6,16 +6,18 @@ import type { ToolConfig } from '@forestadmin/ai-proxy';
|
|
|
6
6
|
export default class ForestServerWorkflowPort implements WorkflowPort {
|
|
7
7
|
private readonly options;
|
|
8
8
|
private readonly logger;
|
|
9
|
+
private reportedMissingReleaseRoute;
|
|
9
10
|
constructor(params: {
|
|
10
11
|
envSecret: string;
|
|
11
12
|
forestServerUrl: string;
|
|
12
13
|
logger?: Logger;
|
|
13
14
|
});
|
|
14
|
-
getAvailableRuns(): Promise<AvailableRunsBatch>;
|
|
15
|
+
getAvailableRuns(count: number): Promise<AvailableRunsBatch>;
|
|
15
16
|
getAvailableRun(runId: string): Promise<AvailableRunDispatch | null>;
|
|
16
17
|
private toDispatch;
|
|
17
18
|
private toMalformedInfo;
|
|
18
19
|
updateStepExecution(runId: string, stepOutcome: StepOutcome): Promise<AvailableRunDispatch | null>;
|
|
20
|
+
releaseRun(runId: string, lockedAt: string | null): Promise<void>;
|
|
19
21
|
getCollectionSchema(collectionName: string, runId: string): Promise<CollectionSchema>;
|
|
20
22
|
reportExecutorMetadata({ version }: {
|
|
21
23
|
version: string;
|
|
@@ -12,10 +12,11 @@ const with_retry_1 = __importDefault(require("./with-retry"));
|
|
|
12
12
|
const errors_1 = require("../errors");
|
|
13
13
|
const collection_1 = require("../types/validated/collection");
|
|
14
14
|
const ROUTES = {
|
|
15
|
-
pendingRuns:
|
|
15
|
+
pendingRuns: (count) => `/api/workflow-orchestrator/pending-run?count=${count}`,
|
|
16
16
|
availableRun: (runId) => `/api/workflow-orchestrator/available-run/${encodeURIComponent(runId)}`,
|
|
17
17
|
updateStep: '/api/workflow-orchestrator/update-step',
|
|
18
18
|
executorMetadata: '/api/workflow-orchestrator/executor-metadata',
|
|
19
|
+
releaseRun: '/api/workflow-orchestrator/release-run',
|
|
19
20
|
collectionSchema: (collectionName, runId) => `/api/workflow-orchestrator/collection-schema/${encodeURIComponent(collectionName)}?runId=${encodeURIComponent(runId)}`,
|
|
20
21
|
accessCheck: (runId, userId) => `/api/workflow-orchestrator/run/${encodeURIComponent(runId)}/access-check?userId=${userId}`,
|
|
21
22
|
mcpServerConfigs: '/liana/mcp-server-configs-with-details',
|
|
@@ -25,13 +26,16 @@ const ROUTES = {
|
|
|
25
26
|
function stripReferenceKey(name) {
|
|
26
27
|
return name?.includes('.') ? name.slice(0, name.lastIndexOf('.')) : name;
|
|
27
28
|
}
|
|
29
|
+
const RELEASE_ROUTE_MISSING = 'The orchestrator cannot take back the runs this executor lets go; they resume once their ' +
|
|
30
|
+
'lock expires. Expected while the executor runs ahead of the server.';
|
|
28
31
|
class ForestServerWorkflowPort {
|
|
29
32
|
constructor(params) {
|
|
33
|
+
this.reportedMissingReleaseRoute = false;
|
|
30
34
|
this.options = { envSecret: params.envSecret, forestServerUrl: params.forestServerUrl };
|
|
31
35
|
this.logger = params.logger ?? (0, console_logger_1.default)();
|
|
32
36
|
}
|
|
33
|
-
async getAvailableRuns() {
|
|
34
|
-
const runs = await this.callPort('getAvailableRuns', () => forestadmin_client_1.ServerUtils.query(this.options, 'get', ROUTES.pendingRuns));
|
|
37
|
+
async getAvailableRuns(count) {
|
|
38
|
+
const runs = await this.callPort('getAvailableRuns', () => forestadmin_client_1.ServerUtils.query(this.options, 'get', ROUTES.pendingRuns(count)));
|
|
35
39
|
const pending = [];
|
|
36
40
|
const malformed = [];
|
|
37
41
|
for (const run of runs) {
|
|
@@ -84,7 +88,7 @@ class ForestServerWorkflowPort {
|
|
|
84
88
|
const step = (0, run_to_available_step_mapper_1.default)(run);
|
|
85
89
|
if (!step)
|
|
86
90
|
return null;
|
|
87
|
-
return { step, auth: { forestServerToken: token } };
|
|
91
|
+
return { step, auth: { forestServerToken: token }, lockedAt: run.lockedAt ?? null };
|
|
88
92
|
}
|
|
89
93
|
toMalformedInfo(run, err) {
|
|
90
94
|
const history = Array.isArray(run.workflowHistory) ? run.workflowHistory : [];
|
|
@@ -98,24 +102,46 @@ class ForestServerWorkflowPort {
|
|
|
98
102
|
};
|
|
99
103
|
}
|
|
100
104
|
async updateStepExecution(runId, stepOutcome) {
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
105
|
+
const run = await this.callPort('updateStepExecution', () => forestadmin_client_1.ServerUtils.query(this.options, 'post', ROUTES.updateStep, {}, (0, step_outcome_to_update_step_mapper_1.default)(runId, stepOutcome)), { retry: true });
|
|
106
|
+
if (!run)
|
|
107
|
+
return null;
|
|
108
|
+
let dispatch = null;
|
|
109
|
+
try {
|
|
110
|
+
dispatch = this.toDispatch(run);
|
|
111
|
+
}
|
|
112
|
+
catch (error) {
|
|
113
|
+
// The outcome was recorded server-side; only the chain parse failed. Fall back to the
|
|
114
|
+
// next poll cycle — don't let a malformed chain response mask the successful update.
|
|
115
|
+
this.logger('Error', 'Failed to parse chained next step from /update-step response', {
|
|
116
|
+
runId: String(run.id),
|
|
117
|
+
error: (0, errors_1.extractErrorMessage)(error),
|
|
118
|
+
});
|
|
119
|
+
}
|
|
120
|
+
if (!dispatch)
|
|
121
|
+
await this.releaseRun(String(run.id), run.lockedAt ?? null);
|
|
122
|
+
return dispatch;
|
|
123
|
+
}
|
|
124
|
+
async releaseRun(runId, lockedAt) {
|
|
125
|
+
if (!lockedAt)
|
|
126
|
+
return;
|
|
127
|
+
try {
|
|
128
|
+
const body = { runId: Number(runId), lockedAt };
|
|
129
|
+
await forestadmin_client_1.ServerUtils.query(this.options, 'post', ROUTES.releaseRun, {}, body);
|
|
130
|
+
}
|
|
131
|
+
catch (error) {
|
|
132
|
+
if (error?.status === 404) {
|
|
133
|
+
this.logger(this.reportedMissingReleaseRoute ? 'Debug' : 'Warn', RELEASE_ROUTE_MISSING, {
|
|
134
|
+
runId,
|
|
135
|
+
forestServerUrl: this.options.forestServerUrl,
|
|
115
136
|
});
|
|
116
|
-
|
|
137
|
+
this.reportedMissingReleaseRoute = true;
|
|
138
|
+
return;
|
|
117
139
|
}
|
|
118
|
-
|
|
140
|
+
this.logger('Warn', 'Failed to hand a run back to the orchestrator', {
|
|
141
|
+
runId,
|
|
142
|
+
error: (0, errors_1.extractErrorMessage)(error),
|
|
143
|
+
});
|
|
144
|
+
}
|
|
119
145
|
}
|
|
120
146
|
async getCollectionSchema(collectionName, runId) {
|
|
121
147
|
return this.callPort('getCollectionSchema', async () => {
|
|
@@ -165,4 +191,4 @@ class ForestServerWorkflowPort {
|
|
|
165
191
|
}
|
|
166
192
|
}
|
|
167
193
|
exports.default = ForestServerWorkflowPort;
|
|
168
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
194
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9yZXN0LXNlcnZlci13b3JrZmxvdy1wb3J0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2FkYXB0ZXJzL2ZvcmVzdC1zZXJ2ZXItd29ya2Zsb3ctcG9ydC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQWFBLHdFQUE4RDtBQUM5RCw2QkFBd0I7QUFFeEIsc0VBQW1EO0FBQ25ELGtHQUFzRTtBQUN0RSw4R0FBdUU7QUFDdkUsOERBQXFDO0FBQ3JDLHNDQVFtQjtBQUNuQiw4REFBdUU7QUFFdkUsTUFBTSxNQUFNLEdBQUc7SUFDYixXQUFXLEVBQUUsQ0FBQyxLQUFhLEVBQUUsRUFBRSxDQUFDLGdEQUFnRCxLQUFLLEVBQUU7SUFDdkYsWUFBWSxFQUFFLENBQUMsS0FBYSxFQUFFLEVBQUUsQ0FDOUIsNENBQTRDLGtCQUFrQixDQUFDLEtBQUssQ0FBQyxFQUFFO0lBQ3pFLFVBQVUsRUFBRSx3Q0FBd0M7SUFDcEQsZ0JBQWdCLEVBQUUsOENBQThDO0lBQ2hFLFVBQVUsRUFBRSx3Q0FBd0M7SUFDcEQsZ0JBQWdCLEVBQUUsQ0FBQyxjQUFzQixFQUFFLEtBQWEsRUFBRSxFQUFFLENBQzFELGdEQUFnRCxrQkFBa0IsQ0FDaEUsY0FBYyxDQUNmLFVBQVUsa0JBQWtCLENBQUMsS0FBSyxDQUFDLEVBQUU7SUFDeEMsV0FBVyxFQUFFLENBQUMsS0FBYSxFQUFFLE1BQWMsRUFBRSxFQUFFLENBQzdDLGtDQUFrQyxrQkFBa0IsQ0FBQyxLQUFLLENBQUMsd0JBQXdCLE1BQU0sRUFBRTtJQUM3RixnQkFBZ0IsRUFBRSx3Q0FBd0M7Q0FDM0QsQ0FBQztBQUVGLDhGQUE4RjtBQUM5RixxR0FBcUc7QUFDckcsU0FBUyxpQkFBaUIsQ0FBQyxJQUF3QjtJQUNqRCxPQUFPLElBQUksRUFBRSxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxXQUFXLENBQUMs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
|
|
@@ -3,7 +3,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
3
3
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
4
|
};
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
-
const
|
|
6
|
+
const record_id_1 = require("../record-id");
|
|
7
7
|
const with_retry_1 = __importDefault(require("./with-retry"));
|
|
8
8
|
const errors_1 = require("../errors");
|
|
9
9
|
class ForestadminClientActivityLogPort {
|
|
@@ -24,7 +24,7 @@ class ForestadminClientActivityLogPort {
|
|
|
24
24
|
// (JSON:API). The Forest server audit-trail API expects the numeric collectionId.
|
|
25
25
|
collectionName: args.collectionId,
|
|
26
26
|
// Record ids are serialized to the pipe wire format here, never in the executor.
|
|
27
|
-
recordId: args.recordId?.length ? (0,
|
|
27
|
+
recordId: args.recordId?.length ? (0, record_id_1.serializeRecordId)(args.recordId) : undefined,
|
|
28
28
|
label: args.label,
|
|
29
29
|
}), { logger: this.logger });
|
|
30
30
|
return { id: response.id, index: response.attributes.index };
|
|
@@ -75,4 +75,4 @@ class ForestadminClientActivityLogPort {
|
|
|
75
75
|
}
|
|
76
76
|
}
|
|
77
77
|
exports.default = ForestadminClientActivityLogPort;
|
|
78
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
78
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9yZXN0YWRtaW4tY2xpZW50LWFjdGl2aXR5LWxvZy1wb3J0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2FkYXB0ZXJzL2ZvcmVzdGFkbWluLWNsaWVudC1hY3Rpdml0eS1sb2ctcG9ydC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQVNBLDRDQUFpRDtBQUNqRCw4REFBcUM7QUFDckMsc0NBQTBFO0FBRTFFLE1BQXFCLGdDQUFnQztJQUNuRCxZQUNtQixPQUFxQyxFQUNyQyxNQUFjLEVBQ2QsaUJBQXlCLEVBQ3pCLE9BQTJCO1FBSDNCLFlBQU8sR0FBUCxPQUFPLENBQThCO1FBQ3JDLFdBQU0sR0FBTixNQUFNLENBQVE7UUFDZCxzQkFBaUIsR0FBakIsaUJBQWlCLENBQVE7UUFDekIsWUFBTyxHQUFQLE9BQU8sQ0FBb0I7SUFDM0MsQ0FBQztJQUVKLEtBQUssQ0FBQyxhQUFhLENBQUMsSUFBMkI7UUFDN0MsSUFBSSxDQUFDO1lBQ0gsTUFBTSxRQUFRLEdBQUcsTUFBTSxJQUFBLG9CQUFTLEVBQzlCLHFCQUFxQixFQUNyQixHQUFHLEVBQUUsQ0FDSCxJQUFJLENBQUMsT0FBTyxDQUFDLGlCQUFpQixDQUFDO2dCQUM3QixpQkFBaUIsRUFBRSxJQUFJLENBQUMsaUJBQWlCO2dCQUN6QyxXQUFXLEVBQUUsTUFBTSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUM7Z0JBQ3JDLE1BQU0sRUFBRSxJQUFJLENBQUMsTUFBTTtnQkFDbkIsSUFBSSxFQUFFLElBQUksQ0FBQyxJQUFJO2dCQUNmLDJFQUEyRTtnQkFDM0Usa0ZBQWtGO2dCQUNsRixjQUFjLEVBQUUsSUFBSSxDQUFDLFlBQVk7Z0JBQ2pDLGlGQUFpRjtnQkFDakYsUUFBUSxFQUFFLElBQUksQ0FBQyxRQUFRLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQyxJQUFBLDZCQUFpQixFQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUztnQkFDOUUs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
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.default = toProjectTimezone;
|
|
4
|
+
const luxon_1 = require("luxon");
|
|
5
|
+
// Every executor instance must read a relative date the same way, so the machine's zone is never the
|
|
6
|
+
// fallback. A zone the agent would reject is treated as an absent one: it answers 400 on an unknown
|
|
7
|
+
// zone, which would fail every read of every sweep of that inbox.
|
|
8
|
+
function toProjectTimezone(timezone) {
|
|
9
|
+
return timezone && luxon_1.IANAZone.isValidZone(timezone) ? timezone : 'UTC';
|
|
10
|
+
}
|
|
11
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvamVjdC10aW1lem9uZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9hZGFwdGVycy9wcm9qZWN0LXRpbWV6b25lLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBS0Esb0NBRUM7QUFQRCxpQ0FBaUM7QUFFakMscUdBQXFHO0FBQ3JHLG9HQUFvRztBQUNwRyxrRUFBa0U7QUFDbEUsU0FBd0IsaUJBQWlCLENBQUMsUUFBbUM7SUFDM0UsT0FBTyxRQUFRLElBQUksZ0JBQVEsQ0FBQyxXQUFXLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDO0FBQ3ZFLENBQUMifQ==
|
|
@@ -4,11 +4,12 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
4
4
|
};
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
6
|
exports.default = toAvailableStepExecution;
|
|
7
|
-
const luxon_1 = require("luxon");
|
|
8
7
|
const zod_1 = require("zod");
|
|
9
|
-
const
|
|
8
|
+
const project_timezone_1 = __importDefault(require("./project-timezone"));
|
|
9
|
+
const record_id_1 = require("../record-id");
|
|
10
10
|
const server_types_1 = require("./server-types");
|
|
11
11
|
const step_definition_mapper_1 = __importDefault(require("./step-definition-mapper"));
|
|
12
|
+
const step_user_1 = require("./step-user");
|
|
12
13
|
const errors_1 = require("../errors");
|
|
13
14
|
const execution_1 = require("../types/validated/execution");
|
|
14
15
|
const step_definition_1 = require("../types/validated/step-definition");
|
|
@@ -154,17 +155,7 @@ function toStepUser(runId, profile) {
|
|
|
154
155
|
if (typeof profile.renderingId !== 'number' || !Number.isFinite(profile.renderingId)) {
|
|
155
156
|
throw new errors_1.InvalidStepDefinitionError(`Run ${runId} userProfile has no valid renderingId (got "${String(profile.renderingId)}")`);
|
|
156
157
|
}
|
|
157
|
-
return
|
|
158
|
-
id: profile.id,
|
|
159
|
-
email: profile.email,
|
|
160
|
-
firstName: profile.firstName ?? '',
|
|
161
|
-
lastName: profile.lastName ?? '',
|
|
162
|
-
team: profile.team ?? '',
|
|
163
|
-
renderingId: profile.renderingId,
|
|
164
|
-
role: profile.role ?? '',
|
|
165
|
-
permissionLevel: profile.permissionLevel ?? '',
|
|
166
|
-
tags: profile.tags,
|
|
167
|
-
};
|
|
158
|
+
return (0, step_user_1.toStepUser)(profile);
|
|
168
159
|
}
|
|
169
160
|
// Returns null when the run has no available step (terminal state or all done/cancelled).
|
|
170
161
|
// Throws InvalidStepDefinitionError on missing required fields (collectionId, collectionName,
|
|
@@ -191,7 +182,7 @@ function toAvailableStepExecution(run) {
|
|
|
191
182
|
triggerType: run.triggerType ?? server_types_1.ServerWorkflowTriggerType.manual,
|
|
192
183
|
baseRecordRef: {
|
|
193
184
|
collectionName: run.collectionName,
|
|
194
|
-
recordId: (0,
|
|
185
|
+
recordId: (0, record_id_1.deserializeRecordId)(run.selectedRecordId),
|
|
195
186
|
stepIndex: 0,
|
|
196
187
|
},
|
|
197
188
|
stepDefinition: (0, step_definition_mapper_1.default)(pending.stepDefinition),
|
|
@@ -205,7 +196,7 @@ function toAvailableStepExecution(run) {
|
|
|
205
196
|
// (0.7%, measured on production in September 2026), so almost every Decision reads its
|
|
206
197
|
// relative dates in UTC — an hour or two away from the day the list filter shows the same
|
|
207
198
|
// user, since that one follows the browser.
|
|
208
|
-
timezone:
|
|
199
|
+
timezone: (0, project_timezone_1.default)(run.timezone),
|
|
209
200
|
...(callScope && { callScope }),
|
|
210
201
|
};
|
|
211
202
|
// Defense against mapper bugs: zod asserts the shape we produce is what the domain expects,
|
|
@@ -221,4 +212,4 @@ function toAvailableStepExecution(run) {
|
|
|
221
212
|
throw err;
|
|
222
213
|
}
|
|
223
214
|
}
|
|
224
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicnVuLXRvLWF2YWlsYWJsZS1zdGVwLW1hcHBlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9hZGFwdGVycy9ydW4tdG8tYXZhaWxhYmxlLXN0ZXAtbWFwcGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBMk9BLDJDQWlFQztBQTlSRCxpQ0FBaUM7QUFDakMsNkJBQXdCO0FBRXhCLGlFQUE2RDtBQUM3RCxpREFBK0U7QUFDL0Usc0ZBQXdEO0FBQ3hELHNDQUltQjtBQUNuQiw0REFNc0M7QUFDdEMsd0VBQTRFO0FBQzVFLGtFQUl5QztBQUV6QyxTQUFTLGNBQWMsQ0FBQyxTQUFrQjtJQUN4QyxJQUFJLFNBQVMsS0FBSyxPQUFPO1FBQUUsT0FBTyxPQUFPLENBQUM7SUFDMUMsSUFBSSxTQUFTLEtBQUssZ0JBQWdCO1FBQUUsT0FBTyxnQkFBZ0IsQ0FBQztJQUU1RCxPQUFPLFNBQVMsQ0FBQztBQUNuQixDQUFDO0FBRUQsaUdBQWlHO0FBQ2pHLDJGQUEyRjtBQUMzRiw2REFBNkQ7QUFDN0QsU0FBUyxhQUFhLENBQUMsQ0FBb0I7SUFDekMsTUFBTSxPQUFPLEdBQUcsSUFBQSxnQ0FBZ0IsRUFBQyxDQUFDLENBQUMsY0FBYyxDQUFDLENBQUM7SUFDbkQsTUFBTSxXQUFXLEdBQUcsSUFBQSxvQ0FBcUIsRUFBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDeEQsTUFBTSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsT0FBTyxJQUFJLEVBQUUsQ0FBNEIsQ0FBQztJQUV6RCxtR0FBbUc7SUFDbkcsNEZBQTRGO0lBQzVGLE1BQU0sZUFBZSxHQUFHLDhCQUFlLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUNqRSxNQUFNLHFCQUFxQixHQUFHLHlDQUEwQixDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsb0JBQW9CLENBQUMsQ0FBQztJQUU3RixNQUFNLFdBQVcsR0FBRztRQUNsQixNQUFNLEVB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
|
|
215
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicnVuLXRvLWF2YWlsYWJsZS1zdGVwLW1hcHBlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9hZGFwdGVycy9ydW4tdG8tYXZhaWxhYmxlLXN0ZXAtbWFwcGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBa09BLDJDQWlFQztBQXJSRCw2QkFBd0I7QUFFeEIsMEVBQW1EO0FBQ25ELDRDQUFtRDtBQUNuRCxpREFBK0U7QUFDL0Usc0ZBQXdEO0FBQ3hELDJDQUE2RDtBQUM3RCxzQ0FJbUI7QUFDbkIsNERBTXNDO0FBQ3RDLHdFQUE0RTtBQUM1RSxrRUFJeUM7QUFFekMsU0FBUyxjQUFjLENBQUMsU0FBa0I7SUFDeEMsSUFBSSxTQUFTLEtBQUssT0FBTztRQUFFLE9BQU8sT0FBTyxDQUFDO0lBQzFDLElBQUksU0FBUyxLQUFLLGdCQUFnQjtRQUFFLE9BQU8sZ0JBQWdCLENBQUM7SUFFNUQsT0FBTyxTQUFTLENBQUM7QUFDbkIsQ0FBQztBQUVELGlHQUFpRztBQUNqRywyRkFBMkY7QUFDM0YsNkRBQTZEO0FBQzdELFNBQVMsYUFBYSxDQUFDLENBQW9CO0lBQ3pDLE1BQU0sT0FBTyxHQUFHLElBQUEsZ0NBQWdCLEVBQUMsQ0FBQyxDQUFDLGNBQWMsQ0FBQyxDQUFDO0lBQ25ELE1BQU0sV0FBVyxHQUFHLElBQUEsb0NBQXFCLEVBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ3hELE1BQU0sR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLE9BQU8sSUFBSSxFQUFFLENBQTRCLENBQUM7SUFFekQsbUdBQW1HO0lBQ25HLDRGQUE0RjtJQUM1RixNQUFNLGVBQWUsR0FBRyw4QkFBZSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDLENBQUM7SUFDakUsTUFBTSxxQkFBcUIsR0FBRyx5Q0FBMEIsQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLG9CQUFvQixDQUFDLENBQUM7SUFFN0YsTUFBTSxXQUFXLEdBQUc7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
|