@versori/run 0.6.0-alpha.1 → 0.6.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/esm/deps/jsr.io/@std/fmt/1.0.10/colors.d.ts.map +1 -0
- package/esm/deps/jsr.io/@std/fmt/{1.0.9 → 1.0.10}/colors.js +2 -2
- package/esm/deps/jsr.io/@std/log/0.224.14/console_handler.js +1 -1
- package/esm/src/connection/internal/CredentialHolder.js +1 -1
- package/esm/src/connection/internal/FetchBuilder.d.ts +2 -9
- package/esm/src/connection/internal/FetchBuilder.d.ts.map +1 -1
- package/esm/src/connection/internal/FetchBuilder.js +3 -124
- package/esm/src/context/Context.d.ts +0 -5
- package/esm/src/context/Context.d.ts.map +1 -1
- package/esm/src/context/Context.js +1 -6
- package/esm/src/context/VanillaContext.d.ts.map +1 -1
- package/esm/src/context/VanillaContext.js +1 -0
- package/esm/src/context/WorkflowClient.d.ts +1 -0
- package/esm/src/context/WorkflowClient.d.ts.map +1 -1
- package/esm/src/context/WorkflowClient.js +1 -0
- package/esm/src/dsl/Workflow.d.ts.map +1 -1
- package/esm/src/dsl/Workflow.js +0 -2
- package/esm/src/dsl/http/types.d.ts +0 -2
- package/esm/src/dsl/http/types.d.ts.map +1 -1
- package/esm/src/dsl/http/versori/configloader.d.ts.map +1 -1
- package/esm/src/dsl/http/versori/configloader.js +1 -1
- package/esm/src/dsl/http/versori/constants.d.ts +21 -0
- package/esm/src/dsl/http/versori/constants.d.ts.map +1 -0
- package/esm/src/dsl/http/versori/constants.js +38 -0
- package/esm/src/dsl/http/versori/cronapi.d.ts +3 -2
- package/esm/src/dsl/http/versori/cronapi.d.ts.map +1 -1
- package/esm/src/dsl/http/versori/cronapi.js +15 -14
- package/esm/src/dsl/http/versori/kvapi/core/OpenAPI.js +1 -1
- package/esm/src/dsl/triggers/WebhookTrigger.d.ts.map +1 -1
- package/esm/src/dsl/triggers/WebhookTrigger.js +1 -3
- package/esm/src/internal/constants.d.ts +0 -3
- package/esm/src/internal/constants.d.ts.map +1 -1
- package/esm/src/internal/constants.js +0 -3
- package/esm/src/interpreter/durable/DurableInterpreter.d.ts +2 -9
- package/esm/src/interpreter/durable/DurableInterpreter.d.ts.map +1 -1
- package/esm/src/interpreter/durable/DurableInterpreter.js +13 -57
- package/esm/src/interpreter/durable/ObservableCompiler.d.ts +1 -6
- package/esm/src/interpreter/durable/ObservableCompiler.d.ts.map +1 -1
- package/esm/src/interpreter/durable/Queue.d.ts +1 -0
- package/esm/src/interpreter/durable/Queue.d.ts.map +1 -1
- package/esm/src/interpreter/durable/Queue.js +1 -1
- package/esm/src/interpreter/durable/compilers/catch.d.ts.map +1 -1
- package/esm/src/interpreter/durable/compilers/catch.js +1 -3
- package/esm/src/interpreter/durable/compilers/fn.d.ts.map +1 -1
- package/esm/src/interpreter/durable/compilers/fn.js +6 -29
- package/esm/src/interpreter/durable/compilers/http.d.ts.map +1 -1
- package/esm/src/interpreter/durable/compilers/http.js +11 -45
- package/esm/src/interpreter/durable/compilers/schedule.d.ts.map +1 -1
- package/esm/src/interpreter/durable/compilers/schedule.js +3 -4
- package/esm/src/interpreter/durable/compilers/webhook.d.ts.map +1 -1
- package/esm/src/interpreter/durable/compilers/webhook.js +0 -2
- package/esm/src/interpreter/memory/MemoryInterpreter.d.ts +1 -8
- package/esm/src/interpreter/memory/MemoryInterpreter.d.ts.map +1 -1
- package/esm/src/interpreter/memory/MemoryInterpreter.js +12 -56
- package/esm/src/interpreter/memory/ObservableCompiler.d.ts +1 -6
- package/esm/src/interpreter/memory/ObservableCompiler.d.ts.map +1 -1
- package/esm/src/interpreter/memory/compilers/catch.d.ts.map +1 -1
- package/esm/src/interpreter/memory/compilers/catch.js +0 -5
- package/esm/src/interpreter/memory/compilers/fn.d.ts.map +1 -1
- package/esm/src/interpreter/memory/compilers/fn.js +18 -29
- package/esm/src/interpreter/memory/compilers/http.d.ts.map +1 -1
- package/esm/src/interpreter/memory/compilers/http.js +10 -44
- package/esm/src/interpreter/memory/compilers/schedule.d.ts.map +1 -1
- package/esm/src/interpreter/memory/compilers/schedule.js +4 -61
- package/esm/src/interpreter/memory/compilers/webhook.d.ts.map +1 -1
- package/esm/src/interpreter/memory/compilers/webhook.js +3 -9
- package/esm/src/interpreter/vanilla/VanillaInterpreter.d.ts +0 -1
- package/esm/src/interpreter/vanilla/VanillaInterpreter.d.ts.map +1 -1
- package/esm/src/interpreter/vanilla/VanillaInterpreter.js +6 -30
- package/esm/src/interpreter/vanilla/compilers/schedule.js +1 -1
- package/esm/src/issues/Issues.d.ts.map +1 -1
- package/esm/src/issues/Issues.js +1 -6
- package/esm/src/kv/KeyValue.d.ts +7 -3
- package/esm/src/kv/KeyValue.d.ts.map +1 -1
- package/esm/src/kv/fingerprintExternalUserId.d.ts +6 -0
- package/esm/src/kv/fingerprintExternalUserId.d.ts.map +1 -0
- package/esm/src/kv/fingerprintExternalUserId.js +20 -0
- package/esm/src/kv/memory/MemoryKeyValueProvider.d.ts +4 -0
- package/esm/src/kv/memory/MemoryKeyValueProvider.d.ts.map +1 -1
- package/esm/src/kv/memory/MemoryKeyValueProvider.js +50 -0
- package/esm/src/kv/nats/NatsKeyValueProvider.d.ts.map +1 -1
- package/esm/src/kv/nats/NatsKeyValueProvider.js +14 -0
- package/esm/src/kv/sdk/SDKKeyValueProvider.d.ts.map +1 -1
- package/esm/src/kv/sdk/SDKKeyValueProvider.js +12 -0
- package/esm/src/observability/logging/ConsoleLogger.d.ts.map +1 -1
- package/package.json +1 -3
- package/script/deps/jsr.io/@std/fmt/1.0.10/colors.d.ts.map +1 -0
- package/script/deps/jsr.io/@std/fmt/{1.0.9 → 1.0.10}/colors.js +2 -2
- package/script/deps/jsr.io/@std/log/0.224.14/console_handler.js +1 -1
- package/script/src/connection/internal/CredentialHolder.js +1 -1
- package/script/src/connection/internal/FetchBuilder.d.ts +2 -9
- package/script/src/connection/internal/FetchBuilder.d.ts.map +1 -1
- package/script/src/connection/internal/FetchBuilder.js +3 -147
- package/script/src/context/Context.d.ts +0 -5
- package/script/src/context/Context.d.ts.map +1 -1
- package/script/src/context/Context.js +1 -6
- package/script/src/context/VanillaContext.d.ts.map +1 -1
- package/script/src/context/VanillaContext.js +1 -0
- package/script/src/context/WorkflowClient.d.ts +1 -0
- package/script/src/context/WorkflowClient.d.ts.map +1 -1
- package/script/src/context/WorkflowClient.js +1 -0
- package/script/src/dsl/Workflow.d.ts.map +1 -1
- package/script/src/dsl/Workflow.js +0 -2
- package/script/src/dsl/http/types.d.ts +0 -2
- package/script/src/dsl/http/types.d.ts.map +1 -1
- package/script/src/dsl/http/versori/configloader.d.ts.map +1 -1
- package/script/src/dsl/http/versori/configloader.js +1 -1
- package/script/src/dsl/http/versori/constants.d.ts +21 -0
- package/script/src/dsl/http/versori/constants.d.ts.map +1 -0
- package/script/src/dsl/http/versori/constants.js +41 -0
- package/script/src/dsl/http/versori/cronapi.d.ts +3 -2
- package/script/src/dsl/http/versori/cronapi.d.ts.map +1 -1
- package/script/src/dsl/http/versori/cronapi.js +15 -14
- package/script/src/dsl/http/versori/kvapi/core/OpenAPI.js +1 -1
- package/script/src/dsl/triggers/WebhookTrigger.d.ts.map +1 -1
- package/script/src/dsl/triggers/WebhookTrigger.js +1 -3
- package/script/src/internal/constants.d.ts +0 -3
- package/script/src/internal/constants.d.ts.map +1 -1
- package/script/src/internal/constants.js +1 -4
- package/script/src/interpreter/durable/DurableInterpreter.d.ts +2 -9
- package/script/src/interpreter/durable/DurableInterpreter.d.ts.map +1 -1
- package/script/src/interpreter/durable/DurableInterpreter.js +18 -62
- package/script/src/interpreter/durable/ObservableCompiler.d.ts +1 -6
- package/script/src/interpreter/durable/ObservableCompiler.d.ts.map +1 -1
- package/script/src/interpreter/durable/Queue.d.ts +1 -0
- package/script/src/interpreter/durable/Queue.d.ts.map +1 -1
- package/script/src/interpreter/durable/Queue.js +1 -1
- package/script/src/interpreter/durable/compilers/catch.d.ts.map +1 -1
- package/script/src/interpreter/durable/compilers/catch.js +1 -3
- package/script/src/interpreter/durable/compilers/fn.d.ts.map +1 -1
- package/script/src/interpreter/durable/compilers/fn.js +5 -28
- package/script/src/interpreter/durable/compilers/http.d.ts.map +1 -1
- package/script/src/interpreter/durable/compilers/http.js +11 -45
- package/script/src/interpreter/durable/compilers/schedule.d.ts.map +1 -1
- package/script/src/interpreter/durable/compilers/schedule.js +3 -4
- package/script/src/interpreter/durable/compilers/webhook.d.ts.map +1 -1
- package/script/src/interpreter/durable/compilers/webhook.js +0 -2
- package/script/src/interpreter/memory/MemoryInterpreter.d.ts +1 -8
- package/script/src/interpreter/memory/MemoryInterpreter.d.ts.map +1 -1
- package/script/src/interpreter/memory/MemoryInterpreter.js +11 -55
- package/script/src/interpreter/memory/ObservableCompiler.d.ts +1 -6
- package/script/src/interpreter/memory/ObservableCompiler.d.ts.map +1 -1
- package/script/src/interpreter/memory/compilers/catch.d.ts.map +1 -1
- package/script/src/interpreter/memory/compilers/catch.js +0 -5
- package/script/src/interpreter/memory/compilers/fn.d.ts.map +1 -1
- package/script/src/interpreter/memory/compilers/fn.js +17 -28
- package/script/src/interpreter/memory/compilers/http.d.ts.map +1 -1
- package/script/src/interpreter/memory/compilers/http.js +10 -44
- package/script/src/interpreter/memory/compilers/schedule.d.ts.map +1 -1
- package/script/src/interpreter/memory/compilers/schedule.js +4 -61
- package/script/src/interpreter/memory/compilers/webhook.d.ts.map +1 -1
- package/script/src/interpreter/memory/compilers/webhook.js +3 -9
- package/script/src/interpreter/vanilla/VanillaInterpreter.d.ts +0 -1
- package/script/src/interpreter/vanilla/VanillaInterpreter.d.ts.map +1 -1
- package/script/src/interpreter/vanilla/VanillaInterpreter.js +6 -30
- package/script/src/interpreter/vanilla/compilers/schedule.js +1 -1
- package/script/src/issues/Issues.d.ts.map +1 -1
- package/script/src/issues/Issues.js +1 -6
- package/script/src/kv/KeyValue.d.ts +7 -3
- package/script/src/kv/KeyValue.d.ts.map +1 -1
- package/script/src/kv/fingerprintExternalUserId.d.ts +6 -0
- package/script/src/kv/fingerprintExternalUserId.d.ts.map +1 -0
- package/script/src/kv/fingerprintExternalUserId.js +23 -0
- package/script/src/kv/memory/MemoryKeyValueProvider.d.ts +4 -0
- package/script/src/kv/memory/MemoryKeyValueProvider.d.ts.map +1 -1
- package/script/src/kv/memory/MemoryKeyValueProvider.js +50 -0
- package/script/src/kv/nats/NatsKeyValueProvider.d.ts.map +1 -1
- package/script/src/kv/nats/NatsKeyValueProvider.js +14 -0
- package/script/src/kv/sdk/SDKKeyValueProvider.d.ts.map +1 -1
- package/script/src/kv/sdk/SDKKeyValueProvider.js +12 -0
- package/script/src/observability/logging/ConsoleLogger.d.ts.map +1 -1
- package/esm/deps/jsr.io/@std/fmt/1.0.9/colors.d.ts.map +0 -1
- package/esm/src/internal/supervisor.d.ts +0 -23
- package/esm/src/internal/supervisor.d.ts.map +0 -1
- package/esm/src/internal/supervisor.js +0 -267
- package/script/deps/jsr.io/@std/fmt/1.0.9/colors.d.ts.map +0 -1
- package/script/src/internal/supervisor.d.ts +0 -23
- package/script/src/internal/supervisor.d.ts.map +0 -1
- package/script/src/internal/supervisor.js +0 -275
- /package/esm/deps/jsr.io/@std/fmt/{1.0.9 → 1.0.10}/colors.d.ts +0 -0
- /package/script/deps/jsr.io/@std/fmt/{1.0.9 → 1.0.10}/colors.d.ts +0 -0
|
@@ -1,267 +0,0 @@
|
|
|
1
|
-
/*
|
|
2
|
-
* Copyright (c) 2025 Versori Group Inc
|
|
3
|
-
*
|
|
4
|
-
* Use of this software is governed by the Business Source License 1.1
|
|
5
|
-
* included in the LICENSE file at the root of this repository.
|
|
6
|
-
*
|
|
7
|
-
* Change Date: 2029-01-01
|
|
8
|
-
* Change License: Apache License, Version 2.0
|
|
9
|
-
*
|
|
10
|
-
* As of the Change Date, in accordance with the Business Source License,
|
|
11
|
-
* use of this software will be governed by the Apache License, Version 2.0.
|
|
12
|
-
*/
|
|
13
|
-
import { ExportResultCode, hrTimeToMilliseconds, hrTimeToTimeStamp, } from '@opentelemetry/core';
|
|
14
|
-
import { ConsoleLogger } from '../observability/logging/ConsoleLogger.js';
|
|
15
|
-
import { ChainTask } from '../dsl/tasks/ChainTask.js';
|
|
16
|
-
import { ScheduleTrigger } from '../dsl/triggers/ScheduleTrigger.js';
|
|
17
|
-
import { WebhookTrigger } from '../dsl/triggers/WebhookTrigger.js';
|
|
18
|
-
import { DurableWorkflowTrigger } from '../dsl/triggers/DurableTrigger.js';
|
|
19
|
-
import { TaskType } from '../dsl/Task.js';
|
|
20
|
-
import { CatchTask } from '../dsl/tasks/CatchTask.js';
|
|
21
|
-
import { FnTask } from '../dsl/tasks/FnTask.js';
|
|
22
|
-
import { HttpTaskImpl } from '../dsl/tasks/HttpTask.js';
|
|
23
|
-
import { BackgroundTask } from '../dsl/tasks/BackgroundTask.js';
|
|
24
|
-
import { ParallelTask } from '../dsl/tasks/ParallelTask.js';
|
|
25
|
-
const supervisorURL = (function () {
|
|
26
|
-
return Deno.env.get('RUN_SUPERVISOR_URL') || '';
|
|
27
|
-
})();
|
|
28
|
-
export const enabled = (function () {
|
|
29
|
-
return Deno.env.get('RUN_SUPERVISOR_URL') ? true : false;
|
|
30
|
-
})();
|
|
31
|
-
const flows = (function () {
|
|
32
|
-
try {
|
|
33
|
-
const _cwd = Deno.cwd();
|
|
34
|
-
const flowsFile = Deno.readTextFileSync(_cwd + '/versori-flow.json');
|
|
35
|
-
const flows = JSON.parse(flowsFile);
|
|
36
|
-
const nodes = {};
|
|
37
|
-
for (const node of flows.nodes) {
|
|
38
|
-
nodes[node.id] = {
|
|
39
|
-
description: node?.data?.description,
|
|
40
|
-
steps: node?.data?.steps,
|
|
41
|
-
files: node?.data?.files[0],
|
|
42
|
-
};
|
|
43
|
-
}
|
|
44
|
-
return nodes;
|
|
45
|
-
}
|
|
46
|
-
catch {
|
|
47
|
-
return {};
|
|
48
|
-
}
|
|
49
|
-
})();
|
|
50
|
-
const logger = new ConsoleLogger('debug');
|
|
51
|
-
function getTriggerData(workflow) {
|
|
52
|
-
if (workflow.trigger instanceof WebhookTrigger) {
|
|
53
|
-
return {
|
|
54
|
-
id: workflow.trigger.id,
|
|
55
|
-
type: 'webhook',
|
|
56
|
-
method: workflow.trigger.options.method || 'post',
|
|
57
|
-
};
|
|
58
|
-
}
|
|
59
|
-
else if (workflow.trigger instanceof ScheduleTrigger) {
|
|
60
|
-
return {
|
|
61
|
-
id: workflow.trigger.id,
|
|
62
|
-
type: 'schedule',
|
|
63
|
-
schedule: workflow.trigger.schedule,
|
|
64
|
-
};
|
|
65
|
-
}
|
|
66
|
-
else if (workflow.trigger instanceof DurableWorkflowTrigger) {
|
|
67
|
-
return {
|
|
68
|
-
id: workflow.trigger.id,
|
|
69
|
-
type: 'durable',
|
|
70
|
-
};
|
|
71
|
-
}
|
|
72
|
-
return null;
|
|
73
|
-
}
|
|
74
|
-
function getTaskData(task) {
|
|
75
|
-
let taskData = [];
|
|
76
|
-
if (task instanceof ChainTask) {
|
|
77
|
-
taskData = task.tasks.map((t) => getTaskData(t)).flat();
|
|
78
|
-
}
|
|
79
|
-
else if (task instanceof CatchTask) {
|
|
80
|
-
taskData = [...getTaskData(task._base), ...getTaskData(task._errorHandler)];
|
|
81
|
-
}
|
|
82
|
-
else if (task instanceof BackgroundTask) {
|
|
83
|
-
taskData = getTaskData(task._base);
|
|
84
|
-
}
|
|
85
|
-
else if (task instanceof ParallelTask) {
|
|
86
|
-
// I'm not sure if this is correct, but I don't think there are any ParallelTasks out in the wild yet
|
|
87
|
-
taskData = [...getTaskData(task._base), ...getTaskData(task._each)];
|
|
88
|
-
}
|
|
89
|
-
else if (task instanceof FnTask) {
|
|
90
|
-
taskData.push({
|
|
91
|
-
taskId: task.id,
|
|
92
|
-
type: task[TaskType].toLowerCase(),
|
|
93
|
-
});
|
|
94
|
-
}
|
|
95
|
-
else if (task instanceof HttpTaskImpl) {
|
|
96
|
-
taskData.push({
|
|
97
|
-
taskId: task.id,
|
|
98
|
-
type: task[TaskType].toLowerCase(),
|
|
99
|
-
});
|
|
100
|
-
}
|
|
101
|
-
else {
|
|
102
|
-
// yolo
|
|
103
|
-
taskData.push({
|
|
104
|
-
taskId: String(task.id || 'unknown'),
|
|
105
|
-
type: task[TaskType].toLowerCase(),
|
|
106
|
-
});
|
|
107
|
-
}
|
|
108
|
-
return taskData;
|
|
109
|
-
}
|
|
110
|
-
export async function signalReady() {
|
|
111
|
-
if (!enabled) {
|
|
112
|
-
return;
|
|
113
|
-
}
|
|
114
|
-
try {
|
|
115
|
-
await fetch(`${supervisorURL}/ready`, {
|
|
116
|
-
method: 'POST',
|
|
117
|
-
});
|
|
118
|
-
}
|
|
119
|
-
catch (err) {
|
|
120
|
-
logger.error('Failed to signal ready to supervisor', { error: err });
|
|
121
|
-
}
|
|
122
|
-
}
|
|
123
|
-
export async function registerWorkflow(workflow) {
|
|
124
|
-
if (!enabled) {
|
|
125
|
-
return;
|
|
126
|
-
}
|
|
127
|
-
const triggerData = getTriggerData(workflow);
|
|
128
|
-
const tasks = getTaskData(workflow.task);
|
|
129
|
-
try {
|
|
130
|
-
if (triggerData) {
|
|
131
|
-
const data = {
|
|
132
|
-
workflowId: triggerData.id,
|
|
133
|
-
trigger: triggerData,
|
|
134
|
-
tasks,
|
|
135
|
-
};
|
|
136
|
-
await fetch(`${supervisorURL}/register-workflow`, {
|
|
137
|
-
method: 'POST',
|
|
138
|
-
body: JSON.stringify(data),
|
|
139
|
-
headers: {
|
|
140
|
-
'Content-Type': 'application/json',
|
|
141
|
-
},
|
|
142
|
-
});
|
|
143
|
-
}
|
|
144
|
-
}
|
|
145
|
-
catch (err) {
|
|
146
|
-
logger.error('Failed to register workflow with supervisor', { error: err });
|
|
147
|
-
}
|
|
148
|
-
}
|
|
149
|
-
export async function sendTaskStartEvent(taskId, ctx, span) {
|
|
150
|
-
if (!enabled) {
|
|
151
|
-
return ctx;
|
|
152
|
-
}
|
|
153
|
-
const data = {
|
|
154
|
-
taskId,
|
|
155
|
-
spanId: span.spanContext().spanId,
|
|
156
|
-
traceId: span.spanContext().traceId,
|
|
157
|
-
startTime: new Date().toISOString(), // assuming current time as start time
|
|
158
|
-
executionId: ctx.executionId,
|
|
159
|
-
workflowId: ctx.workflowId || '',
|
|
160
|
-
};
|
|
161
|
-
try {
|
|
162
|
-
const resp = await fetch(`${supervisorURL}/tasks/start`, {
|
|
163
|
-
method: 'POST',
|
|
164
|
-
body: JSON.stringify(data),
|
|
165
|
-
headers: {
|
|
166
|
-
'Content-Type': 'application/json',
|
|
167
|
-
},
|
|
168
|
-
});
|
|
169
|
-
if (resp.ok) {
|
|
170
|
-
const bodyString = await resp.text();
|
|
171
|
-
if (!bodyString) {
|
|
172
|
-
return ctx;
|
|
173
|
-
}
|
|
174
|
-
// TODO: XML, CSV yada yada
|
|
175
|
-
const respData = JSON.parse(bodyString);
|
|
176
|
-
return ctx.withData(respData);
|
|
177
|
-
}
|
|
178
|
-
}
|
|
179
|
-
catch (err) {
|
|
180
|
-
logger.error('Failed to send task start event to supervisor', { error: err });
|
|
181
|
-
}
|
|
182
|
-
return ctx;
|
|
183
|
-
}
|
|
184
|
-
export async function mockAPIRequest(info, cnx, options) {
|
|
185
|
-
if (!enabled) {
|
|
186
|
-
return new Response();
|
|
187
|
-
}
|
|
188
|
-
const mockRequest = {
|
|
189
|
-
url: info.toString(),
|
|
190
|
-
payload: options?.body || '',
|
|
191
|
-
method: options?.method || 'GET',
|
|
192
|
-
headers: options?.headers,
|
|
193
|
-
connection: cnx?.name,
|
|
194
|
-
connectionId: cnx?.id,
|
|
195
|
-
};
|
|
196
|
-
try {
|
|
197
|
-
const response = await fetch(`${supervisorURL}/ai/fake-fetch-call`, {
|
|
198
|
-
method: 'POST',
|
|
199
|
-
body: JSON.stringify(mockRequest),
|
|
200
|
-
headers: {
|
|
201
|
-
'Content-Type': 'application/json',
|
|
202
|
-
},
|
|
203
|
-
});
|
|
204
|
-
if (!response.ok) {
|
|
205
|
-
logger.error('Failed to mock api request', { response });
|
|
206
|
-
return new Response();
|
|
207
|
-
}
|
|
208
|
-
const text = await response.text();
|
|
209
|
-
return new Response(text);
|
|
210
|
-
}
|
|
211
|
-
catch (err) {
|
|
212
|
-
logger.error('Failed to mock api request', { error: err });
|
|
213
|
-
return new Response();
|
|
214
|
-
}
|
|
215
|
-
}
|
|
216
|
-
function printableSpan(s) {
|
|
217
|
-
const span = {
|
|
218
|
-
name: s.name,
|
|
219
|
-
startTime: hrTimeToTimeStamp(s.startTime),
|
|
220
|
-
endTime: hrTimeToTimeStamp(s.endTime),
|
|
221
|
-
duration: hrTimeToMilliseconds(s.duration),
|
|
222
|
-
attributes: s.attributes,
|
|
223
|
-
status: s.status,
|
|
224
|
-
ended: s.ended,
|
|
225
|
-
events: s.events,
|
|
226
|
-
parentSpanContext: s.parentSpanContext,
|
|
227
|
-
spanContext: s.spanContext(),
|
|
228
|
-
};
|
|
229
|
-
const nodeDetail = flows[span.attributes['task.id']]; // I know I have coded all of those as string
|
|
230
|
-
if (nodeDetail) {
|
|
231
|
-
span.attributes['description'] = nodeDetail?.description || '';
|
|
232
|
-
span.attributes['steps'] = nodeDetail?.steps || '';
|
|
233
|
-
span.attributes['files'] = nodeDetail?.files || '';
|
|
234
|
-
}
|
|
235
|
-
return span;
|
|
236
|
-
}
|
|
237
|
-
export class Fake {
|
|
238
|
-
constructor() {
|
|
239
|
-
this.export = this.export.bind(this);
|
|
240
|
-
this.shutdown = this.shutdown.bind(this);
|
|
241
|
-
this.forceFlush = this.forceFlush.bind(this);
|
|
242
|
-
}
|
|
243
|
-
export(spans, resultCallback) {
|
|
244
|
-
const ss = spans.map(printableSpan);
|
|
245
|
-
try {
|
|
246
|
-
fetch(`${supervisorURL}/receive-spans`, {
|
|
247
|
-
method: 'POST',
|
|
248
|
-
body: JSON.stringify({ spans: ss }),
|
|
249
|
-
headers: {
|
|
250
|
-
'Content-Type': 'application/json',
|
|
251
|
-
},
|
|
252
|
-
}).catch((err) => {
|
|
253
|
-
logger.error('Failed to send spans to supervisor', { error: err });
|
|
254
|
-
});
|
|
255
|
-
}
|
|
256
|
-
catch (err) {
|
|
257
|
-
logger.error('Failed to send spans to supervisor', { error: err });
|
|
258
|
-
}
|
|
259
|
-
resultCallback({ code: ExportResultCode.SUCCESS });
|
|
260
|
-
}
|
|
261
|
-
shutdown() {
|
|
262
|
-
return Promise.resolve();
|
|
263
|
-
}
|
|
264
|
-
forceFlush() {
|
|
265
|
-
return Promise.resolve();
|
|
266
|
-
}
|
|
267
|
-
}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"colors.d.ts","sourceRoot":"","sources":["../../../../../../src/deps/jsr.io/@std/fmt/1.0.9/colors.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,23 +0,0 @@
|
|
|
1
|
-
import { ExportResult } from '@opentelemetry/core';
|
|
2
|
-
import { ReadableSpan, SpanExporter } from '@opentelemetry/sdk-trace-node';
|
|
3
|
-
import { Span } from '@opentelemetry/api';
|
|
4
|
-
import { ContextImpl } from '../context/Context.js';
|
|
5
|
-
import { WorkflowImpl } from '../dsl/Workflow.js';
|
|
6
|
-
export declare const enabled: boolean;
|
|
7
|
-
type MockConnection = {
|
|
8
|
-
name: string;
|
|
9
|
-
id?: string;
|
|
10
|
-
baseUrl?: string;
|
|
11
|
-
};
|
|
12
|
-
export declare function signalReady(): Promise<void>;
|
|
13
|
-
export declare function registerWorkflow<I, O>(workflow: WorkflowImpl<I, O>): Promise<void>;
|
|
14
|
-
export declare function sendTaskStartEvent<I, O>(taskId: string, ctx: ContextImpl<I, O>, span: Span): Promise<ContextImpl<I, O>>;
|
|
15
|
-
export declare function mockAPIRequest(info: RequestInfo | URL, cnx?: MockConnection, options?: RequestInit): Promise<Response>;
|
|
16
|
-
export declare class Fake implements SpanExporter {
|
|
17
|
-
constructor();
|
|
18
|
-
export(spans: ReadableSpan[], resultCallback: (result: ExportResult) => void): void;
|
|
19
|
-
shutdown(): Promise<void>;
|
|
20
|
-
forceFlush(): Promise<void>;
|
|
21
|
-
}
|
|
22
|
-
export {};
|
|
23
|
-
//# sourceMappingURL=supervisor.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"supervisor.d.ts","sourceRoot":"","sources":["../../../src/src/internal/supervisor.ts"],"names":[],"mappings":"AAaA,OAAO,EACH,YAAY,EAIf,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,+BAA+B,CAAC;AAE3E,OAAO,EAAE,IAAI,EAAE,MAAM,oBAAoB,CAAC;AAC1C,OAAO,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AACpD,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AA2ClD,eAAO,MAAM,OAAO,SAEhB,CAAC;AA2BL,KAAK,cAAc,GAAG;IAClB,IAAI,EAAE,MAAM,CAAC;IACb,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,OAAO,CAAC,EAAE,MAAM,CAAC;CACpB,CAAC;AA0DF,wBAAsB,WAAW,IAAI,OAAO,CAAC,IAAI,CAAC,CAYjD;AAED,wBAAsB,gBAAgB,CAAC,CAAC,EAAE,CAAC,EAAE,QAAQ,EAAE,YAAY,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,CA0BxF;AAED,wBAAsB,kBAAkB,CAAC,CAAC,EAAE,CAAC,EACzC,MAAM,EAAE,MAAM,EACd,GAAG,EAAE,WAAW,CAAC,CAAC,EAAE,CAAC,CAAC,EACtB,IAAI,EAAE,IAAI,GACX,OAAO,CAAC,WAAW,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAwC5B;AAED,wBAAsB,cAAc,CAChC,IAAI,EAAE,WAAW,GAAG,GAAG,EACvB,GAAG,CAAC,EAAE,cAAc,EACpB,OAAO,CAAC,EAAE,WAAW,GACtB,OAAO,CAAC,QAAQ,CAAC,CAoCnB;AA0BD,qBAAa,IAAK,YAAW,YAAY;;IAOrC,MAAM,CAAC,KAAK,EAAE,YAAY,EAAE,EAAE,cAAc,EAAE,CAAC,MAAM,EAAE,YAAY,KAAK,IAAI,GAAG,IAAI;IAmBnF,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC;IAIzB,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;CAG9B"}
|
|
@@ -1,275 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
/*
|
|
3
|
-
* Copyright (c) 2025 Versori Group Inc
|
|
4
|
-
*
|
|
5
|
-
* Use of this software is governed by the Business Source License 1.1
|
|
6
|
-
* included in the LICENSE file at the root of this repository.
|
|
7
|
-
*
|
|
8
|
-
* Change Date: 2029-01-01
|
|
9
|
-
* Change License: Apache License, Version 2.0
|
|
10
|
-
*
|
|
11
|
-
* As of the Change Date, in accordance with the Business Source License,
|
|
12
|
-
* use of this software will be governed by the Apache License, Version 2.0.
|
|
13
|
-
*/
|
|
14
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
15
|
-
exports.Fake = exports.enabled = void 0;
|
|
16
|
-
exports.signalReady = signalReady;
|
|
17
|
-
exports.registerWorkflow = registerWorkflow;
|
|
18
|
-
exports.sendTaskStartEvent = sendTaskStartEvent;
|
|
19
|
-
exports.mockAPIRequest = mockAPIRequest;
|
|
20
|
-
const core_1 = require("@opentelemetry/core");
|
|
21
|
-
const ConsoleLogger_js_1 = require("../observability/logging/ConsoleLogger.js");
|
|
22
|
-
const ChainTask_js_1 = require("../dsl/tasks/ChainTask.js");
|
|
23
|
-
const ScheduleTrigger_js_1 = require("../dsl/triggers/ScheduleTrigger.js");
|
|
24
|
-
const WebhookTrigger_js_1 = require("../dsl/triggers/WebhookTrigger.js");
|
|
25
|
-
const DurableTrigger_js_1 = require("../dsl/triggers/DurableTrigger.js");
|
|
26
|
-
const Task_js_1 = require("../dsl/Task.js");
|
|
27
|
-
const CatchTask_js_1 = require("../dsl/tasks/CatchTask.js");
|
|
28
|
-
const FnTask_js_1 = require("../dsl/tasks/FnTask.js");
|
|
29
|
-
const HttpTask_js_1 = require("../dsl/tasks/HttpTask.js");
|
|
30
|
-
const BackgroundTask_js_1 = require("../dsl/tasks/BackgroundTask.js");
|
|
31
|
-
const ParallelTask_js_1 = require("../dsl/tasks/ParallelTask.js");
|
|
32
|
-
const supervisorURL = (function () {
|
|
33
|
-
return Deno.env.get('RUN_SUPERVISOR_URL') || '';
|
|
34
|
-
})();
|
|
35
|
-
exports.enabled = (function () {
|
|
36
|
-
return Deno.env.get('RUN_SUPERVISOR_URL') ? true : false;
|
|
37
|
-
})();
|
|
38
|
-
const flows = (function () {
|
|
39
|
-
try {
|
|
40
|
-
const _cwd = Deno.cwd();
|
|
41
|
-
const flowsFile = Deno.readTextFileSync(_cwd + '/versori-flow.json');
|
|
42
|
-
const flows = JSON.parse(flowsFile);
|
|
43
|
-
const nodes = {};
|
|
44
|
-
for (const node of flows.nodes) {
|
|
45
|
-
nodes[node.id] = {
|
|
46
|
-
description: node?.data?.description,
|
|
47
|
-
steps: node?.data?.steps,
|
|
48
|
-
files: node?.data?.files[0],
|
|
49
|
-
};
|
|
50
|
-
}
|
|
51
|
-
return nodes;
|
|
52
|
-
}
|
|
53
|
-
catch {
|
|
54
|
-
return {};
|
|
55
|
-
}
|
|
56
|
-
})();
|
|
57
|
-
const logger = new ConsoleLogger_js_1.ConsoleLogger('debug');
|
|
58
|
-
function getTriggerData(workflow) {
|
|
59
|
-
if (workflow.trigger instanceof WebhookTrigger_js_1.WebhookTrigger) {
|
|
60
|
-
return {
|
|
61
|
-
id: workflow.trigger.id,
|
|
62
|
-
type: 'webhook',
|
|
63
|
-
method: workflow.trigger.options.method || 'post',
|
|
64
|
-
};
|
|
65
|
-
}
|
|
66
|
-
else if (workflow.trigger instanceof ScheduleTrigger_js_1.ScheduleTrigger) {
|
|
67
|
-
return {
|
|
68
|
-
id: workflow.trigger.id,
|
|
69
|
-
type: 'schedule',
|
|
70
|
-
schedule: workflow.trigger.schedule,
|
|
71
|
-
};
|
|
72
|
-
}
|
|
73
|
-
else if (workflow.trigger instanceof DurableTrigger_js_1.DurableWorkflowTrigger) {
|
|
74
|
-
return {
|
|
75
|
-
id: workflow.trigger.id,
|
|
76
|
-
type: 'durable',
|
|
77
|
-
};
|
|
78
|
-
}
|
|
79
|
-
return null;
|
|
80
|
-
}
|
|
81
|
-
function getTaskData(task) {
|
|
82
|
-
let taskData = [];
|
|
83
|
-
if (task instanceof ChainTask_js_1.ChainTask) {
|
|
84
|
-
taskData = task.tasks.map((t) => getTaskData(t)).flat();
|
|
85
|
-
}
|
|
86
|
-
else if (task instanceof CatchTask_js_1.CatchTask) {
|
|
87
|
-
taskData = [...getTaskData(task._base), ...getTaskData(task._errorHandler)];
|
|
88
|
-
}
|
|
89
|
-
else if (task instanceof BackgroundTask_js_1.BackgroundTask) {
|
|
90
|
-
taskData = getTaskData(task._base);
|
|
91
|
-
}
|
|
92
|
-
else if (task instanceof ParallelTask_js_1.ParallelTask) {
|
|
93
|
-
// I'm not sure if this is correct, but I don't think there are any ParallelTasks out in the wild yet
|
|
94
|
-
taskData = [...getTaskData(task._base), ...getTaskData(task._each)];
|
|
95
|
-
}
|
|
96
|
-
else if (task instanceof FnTask_js_1.FnTask) {
|
|
97
|
-
taskData.push({
|
|
98
|
-
taskId: task.id,
|
|
99
|
-
type: task[Task_js_1.TaskType].toLowerCase(),
|
|
100
|
-
});
|
|
101
|
-
}
|
|
102
|
-
else if (task instanceof HttpTask_js_1.HttpTaskImpl) {
|
|
103
|
-
taskData.push({
|
|
104
|
-
taskId: task.id,
|
|
105
|
-
type: task[Task_js_1.TaskType].toLowerCase(),
|
|
106
|
-
});
|
|
107
|
-
}
|
|
108
|
-
else {
|
|
109
|
-
// yolo
|
|
110
|
-
taskData.push({
|
|
111
|
-
taskId: String(task.id || 'unknown'),
|
|
112
|
-
type: task[Task_js_1.TaskType].toLowerCase(),
|
|
113
|
-
});
|
|
114
|
-
}
|
|
115
|
-
return taskData;
|
|
116
|
-
}
|
|
117
|
-
async function signalReady() {
|
|
118
|
-
if (!exports.enabled) {
|
|
119
|
-
return;
|
|
120
|
-
}
|
|
121
|
-
try {
|
|
122
|
-
await fetch(`${supervisorURL}/ready`, {
|
|
123
|
-
method: 'POST',
|
|
124
|
-
});
|
|
125
|
-
}
|
|
126
|
-
catch (err) {
|
|
127
|
-
logger.error('Failed to signal ready to supervisor', { error: err });
|
|
128
|
-
}
|
|
129
|
-
}
|
|
130
|
-
async function registerWorkflow(workflow) {
|
|
131
|
-
if (!exports.enabled) {
|
|
132
|
-
return;
|
|
133
|
-
}
|
|
134
|
-
const triggerData = getTriggerData(workflow);
|
|
135
|
-
const tasks = getTaskData(workflow.task);
|
|
136
|
-
try {
|
|
137
|
-
if (triggerData) {
|
|
138
|
-
const data = {
|
|
139
|
-
workflowId: triggerData.id,
|
|
140
|
-
trigger: triggerData,
|
|
141
|
-
tasks,
|
|
142
|
-
};
|
|
143
|
-
await fetch(`${supervisorURL}/register-workflow`, {
|
|
144
|
-
method: 'POST',
|
|
145
|
-
body: JSON.stringify(data),
|
|
146
|
-
headers: {
|
|
147
|
-
'Content-Type': 'application/json',
|
|
148
|
-
},
|
|
149
|
-
});
|
|
150
|
-
}
|
|
151
|
-
}
|
|
152
|
-
catch (err) {
|
|
153
|
-
logger.error('Failed to register workflow with supervisor', { error: err });
|
|
154
|
-
}
|
|
155
|
-
}
|
|
156
|
-
async function sendTaskStartEvent(taskId, ctx, span) {
|
|
157
|
-
if (!exports.enabled) {
|
|
158
|
-
return ctx;
|
|
159
|
-
}
|
|
160
|
-
const data = {
|
|
161
|
-
taskId,
|
|
162
|
-
spanId: span.spanContext().spanId,
|
|
163
|
-
traceId: span.spanContext().traceId,
|
|
164
|
-
startTime: new Date().toISOString(), // assuming current time as start time
|
|
165
|
-
executionId: ctx.executionId,
|
|
166
|
-
workflowId: ctx.workflowId || '',
|
|
167
|
-
};
|
|
168
|
-
try {
|
|
169
|
-
const resp = await fetch(`${supervisorURL}/tasks/start`, {
|
|
170
|
-
method: 'POST',
|
|
171
|
-
body: JSON.stringify(data),
|
|
172
|
-
headers: {
|
|
173
|
-
'Content-Type': 'application/json',
|
|
174
|
-
},
|
|
175
|
-
});
|
|
176
|
-
if (resp.ok) {
|
|
177
|
-
const bodyString = await resp.text();
|
|
178
|
-
if (!bodyString) {
|
|
179
|
-
return ctx;
|
|
180
|
-
}
|
|
181
|
-
// TODO: XML, CSV yada yada
|
|
182
|
-
const respData = JSON.parse(bodyString);
|
|
183
|
-
return ctx.withData(respData);
|
|
184
|
-
}
|
|
185
|
-
}
|
|
186
|
-
catch (err) {
|
|
187
|
-
logger.error('Failed to send task start event to supervisor', { error: err });
|
|
188
|
-
}
|
|
189
|
-
return ctx;
|
|
190
|
-
}
|
|
191
|
-
async function mockAPIRequest(info, cnx, options) {
|
|
192
|
-
if (!exports.enabled) {
|
|
193
|
-
return new Response();
|
|
194
|
-
}
|
|
195
|
-
const mockRequest = {
|
|
196
|
-
url: info.toString(),
|
|
197
|
-
payload: options?.body || '',
|
|
198
|
-
method: options?.method || 'GET',
|
|
199
|
-
headers: options?.headers,
|
|
200
|
-
connection: cnx?.name,
|
|
201
|
-
connectionId: cnx?.id,
|
|
202
|
-
};
|
|
203
|
-
try {
|
|
204
|
-
const response = await fetch(`${supervisorURL}/ai/fake-fetch-call`, {
|
|
205
|
-
method: 'POST',
|
|
206
|
-
body: JSON.stringify(mockRequest),
|
|
207
|
-
headers: {
|
|
208
|
-
'Content-Type': 'application/json',
|
|
209
|
-
},
|
|
210
|
-
});
|
|
211
|
-
if (!response.ok) {
|
|
212
|
-
logger.error('Failed to mock api request', { response });
|
|
213
|
-
return new Response();
|
|
214
|
-
}
|
|
215
|
-
const text = await response.text();
|
|
216
|
-
return new Response(text);
|
|
217
|
-
}
|
|
218
|
-
catch (err) {
|
|
219
|
-
logger.error('Failed to mock api request', { error: err });
|
|
220
|
-
return new Response();
|
|
221
|
-
}
|
|
222
|
-
}
|
|
223
|
-
function printableSpan(s) {
|
|
224
|
-
const span = {
|
|
225
|
-
name: s.name,
|
|
226
|
-
startTime: (0, core_1.hrTimeToTimeStamp)(s.startTime),
|
|
227
|
-
endTime: (0, core_1.hrTimeToTimeStamp)(s.endTime),
|
|
228
|
-
duration: (0, core_1.hrTimeToMilliseconds)(s.duration),
|
|
229
|
-
attributes: s.attributes,
|
|
230
|
-
status: s.status,
|
|
231
|
-
ended: s.ended,
|
|
232
|
-
events: s.events,
|
|
233
|
-
parentSpanContext: s.parentSpanContext,
|
|
234
|
-
spanContext: s.spanContext(),
|
|
235
|
-
};
|
|
236
|
-
const nodeDetail = flows[span.attributes['task.id']]; // I know I have coded all of those as string
|
|
237
|
-
if (nodeDetail) {
|
|
238
|
-
span.attributes['description'] = nodeDetail?.description || '';
|
|
239
|
-
span.attributes['steps'] = nodeDetail?.steps || '';
|
|
240
|
-
span.attributes['files'] = nodeDetail?.files || '';
|
|
241
|
-
}
|
|
242
|
-
return span;
|
|
243
|
-
}
|
|
244
|
-
class Fake {
|
|
245
|
-
constructor() {
|
|
246
|
-
this.export = this.export.bind(this);
|
|
247
|
-
this.shutdown = this.shutdown.bind(this);
|
|
248
|
-
this.forceFlush = this.forceFlush.bind(this);
|
|
249
|
-
}
|
|
250
|
-
export(spans, resultCallback) {
|
|
251
|
-
const ss = spans.map(printableSpan);
|
|
252
|
-
try {
|
|
253
|
-
fetch(`${supervisorURL}/receive-spans`, {
|
|
254
|
-
method: 'POST',
|
|
255
|
-
body: JSON.stringify({ spans: ss }),
|
|
256
|
-
headers: {
|
|
257
|
-
'Content-Type': 'application/json',
|
|
258
|
-
},
|
|
259
|
-
}).catch((err) => {
|
|
260
|
-
logger.error('Failed to send spans to supervisor', { error: err });
|
|
261
|
-
});
|
|
262
|
-
}
|
|
263
|
-
catch (err) {
|
|
264
|
-
logger.error('Failed to send spans to supervisor', { error: err });
|
|
265
|
-
}
|
|
266
|
-
resultCallback({ code: core_1.ExportResultCode.SUCCESS });
|
|
267
|
-
}
|
|
268
|
-
shutdown() {
|
|
269
|
-
return Promise.resolve();
|
|
270
|
-
}
|
|
271
|
-
forceFlush() {
|
|
272
|
-
return Promise.resolve();
|
|
273
|
-
}
|
|
274
|
-
}
|
|
275
|
-
exports.Fake = Fake;
|
|
File without changes
|
|
File without changes
|