@versori/run 0.5.10 → 0.6.0-alpha.1
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/src/connection/internal/CredentialHolder.js +1 -1
- package/esm/src/connection/internal/FetchBuilder.d.ts +9 -2
- package/esm/src/connection/internal/FetchBuilder.d.ts.map +1 -1
- package/esm/src/connection/internal/FetchBuilder.js +124 -3
- package/esm/src/context/Context.d.ts +5 -0
- package/esm/src/context/Context.d.ts.map +1 -1
- package/esm/src/context/Context.js +6 -1
- package/esm/src/context/VanillaContext.d.ts.map +1 -1
- package/esm/src/context/VanillaContext.js +0 -1
- package/esm/src/dsl/Workflow.d.ts.map +1 -1
- package/esm/src/dsl/Workflow.js +2 -0
- package/esm/src/dsl/http/types.d.ts +2 -0
- 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/cronapi.d.ts +2 -3
- package/esm/src/dsl/http/versori/cronapi.d.ts.map +1 -1
- package/esm/src/dsl/http/versori/cronapi.js +14 -15
- 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 +3 -1
- package/esm/src/internal/constants.d.ts +3 -0
- package/esm/src/internal/constants.d.ts.map +1 -1
- package/esm/src/internal/constants.js +3 -0
- package/esm/src/internal/supervisor.d.ts +23 -0
- package/esm/src/internal/supervisor.d.ts.map +1 -0
- package/esm/src/internal/supervisor.js +267 -0
- package/esm/src/interpreter/durable/DurableInterpreter.d.ts +9 -2
- package/esm/src/interpreter/durable/DurableInterpreter.d.ts.map +1 -1
- package/esm/src/interpreter/durable/DurableInterpreter.js +57 -13
- package/esm/src/interpreter/durable/ObservableCompiler.d.ts +6 -1
- package/esm/src/interpreter/durable/ObservableCompiler.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 +3 -1
- package/esm/src/interpreter/durable/compilers/fn.d.ts.map +1 -1
- package/esm/src/interpreter/durable/compilers/fn.js +29 -6
- package/esm/src/interpreter/durable/compilers/http.d.ts.map +1 -1
- package/esm/src/interpreter/durable/compilers/http.js +45 -11
- package/esm/src/interpreter/durable/compilers/schedule.d.ts.map +1 -1
- package/esm/src/interpreter/durable/compilers/schedule.js +4 -3
- package/esm/src/interpreter/durable/compilers/webhook.d.ts.map +1 -1
- package/esm/src/interpreter/durable/compilers/webhook.js +2 -0
- package/esm/src/interpreter/memory/MemoryInterpreter.d.ts +8 -1
- package/esm/src/interpreter/memory/MemoryInterpreter.d.ts.map +1 -1
- package/esm/src/interpreter/memory/MemoryInterpreter.js +56 -12
- package/esm/src/interpreter/memory/ObservableCompiler.d.ts +6 -1
- 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 +5 -0
- package/esm/src/interpreter/memory/compilers/fn.d.ts.map +1 -1
- package/esm/src/interpreter/memory/compilers/fn.js +29 -18
- package/esm/src/interpreter/memory/compilers/http.d.ts.map +1 -1
- package/esm/src/interpreter/memory/compilers/http.js +44 -10
- package/esm/src/interpreter/memory/compilers/schedule.d.ts.map +1 -1
- package/esm/src/interpreter/memory/compilers/schedule.js +61 -4
- package/esm/src/interpreter/memory/compilers/webhook.d.ts.map +1 -1
- package/esm/src/interpreter/memory/compilers/webhook.js +9 -3
- package/esm/src/interpreter/vanilla/VanillaInterpreter.d.ts +1 -0
- package/esm/src/interpreter/vanilla/VanillaInterpreter.d.ts.map +1 -1
- package/esm/src/interpreter/vanilla/VanillaInterpreter.js +30 -6
- 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 +6 -1
- package/esm/src/kv/KeyValue.d.ts +3 -7
- package/esm/src/kv/KeyValue.d.ts.map +1 -1
- package/esm/src/kv/memory/MemoryKeyValueProvider.d.ts +0 -4
- package/esm/src/kv/memory/MemoryKeyValueProvider.d.ts.map +1 -1
- package/esm/src/kv/memory/MemoryKeyValueProvider.js +0 -50
- package/esm/src/kv/nats/NatsKeyValueProvider.d.ts.map +1 -1
- package/esm/src/kv/nats/NatsKeyValueProvider.js +0 -14
- package/esm/src/kv/sdk/SDKKeyValueProvider.d.ts.map +1 -1
- package/esm/src/kv/sdk/SDKKeyValueProvider.js +0 -12
- package/esm/src/observability/logging/ConsoleLogger.d.ts.map +1 -1
- package/package.json +3 -1
- package/script/src/connection/internal/CredentialHolder.js +1 -1
- package/script/src/connection/internal/FetchBuilder.d.ts +9 -2
- package/script/src/connection/internal/FetchBuilder.d.ts.map +1 -1
- package/script/src/connection/internal/FetchBuilder.js +147 -3
- package/script/src/context/Context.d.ts +5 -0
- package/script/src/context/Context.d.ts.map +1 -1
- package/script/src/context/Context.js +6 -1
- package/script/src/context/VanillaContext.d.ts.map +1 -1
- package/script/src/context/VanillaContext.js +0 -1
- package/script/src/dsl/Workflow.d.ts.map +1 -1
- package/script/src/dsl/Workflow.js +2 -0
- package/script/src/dsl/http/types.d.ts +2 -0
- 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/cronapi.d.ts +2 -3
- package/script/src/dsl/http/versori/cronapi.d.ts.map +1 -1
- package/script/src/dsl/http/versori/cronapi.js +14 -15
- 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 +3 -1
- package/script/src/internal/constants.d.ts +3 -0
- package/script/src/internal/constants.d.ts.map +1 -1
- package/script/src/internal/constants.js +4 -1
- package/script/src/internal/supervisor.d.ts +23 -0
- package/script/src/internal/supervisor.d.ts.map +1 -0
- package/script/src/internal/supervisor.js +275 -0
- package/script/src/interpreter/durable/DurableInterpreter.d.ts +9 -2
- package/script/src/interpreter/durable/DurableInterpreter.d.ts.map +1 -1
- package/script/src/interpreter/durable/DurableInterpreter.js +62 -18
- package/script/src/interpreter/durable/ObservableCompiler.d.ts +6 -1
- package/script/src/interpreter/durable/ObservableCompiler.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 +3 -1
- package/script/src/interpreter/durable/compilers/fn.d.ts.map +1 -1
- package/script/src/interpreter/durable/compilers/fn.js +28 -5
- package/script/src/interpreter/durable/compilers/http.d.ts.map +1 -1
- package/script/src/interpreter/durable/compilers/http.js +45 -11
- package/script/src/interpreter/durable/compilers/schedule.d.ts.map +1 -1
- package/script/src/interpreter/durable/compilers/schedule.js +4 -3
- package/script/src/interpreter/durable/compilers/webhook.d.ts.map +1 -1
- package/script/src/interpreter/durable/compilers/webhook.js +2 -0
- package/script/src/interpreter/memory/MemoryInterpreter.d.ts +8 -1
- package/script/src/interpreter/memory/MemoryInterpreter.d.ts.map +1 -1
- package/script/src/interpreter/memory/MemoryInterpreter.js +55 -11
- package/script/src/interpreter/memory/ObservableCompiler.d.ts +6 -1
- 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 +5 -0
- package/script/src/interpreter/memory/compilers/fn.d.ts.map +1 -1
- package/script/src/interpreter/memory/compilers/fn.js +28 -17
- package/script/src/interpreter/memory/compilers/http.d.ts.map +1 -1
- package/script/src/interpreter/memory/compilers/http.js +44 -10
- package/script/src/interpreter/memory/compilers/schedule.d.ts.map +1 -1
- package/script/src/interpreter/memory/compilers/schedule.js +61 -4
- package/script/src/interpreter/memory/compilers/webhook.d.ts.map +1 -1
- package/script/src/interpreter/memory/compilers/webhook.js +9 -3
- package/script/src/interpreter/vanilla/VanillaInterpreter.d.ts +1 -0
- package/script/src/interpreter/vanilla/VanillaInterpreter.d.ts.map +1 -1
- package/script/src/interpreter/vanilla/VanillaInterpreter.js +30 -6
- 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 +6 -1
- package/script/src/kv/KeyValue.d.ts +3 -7
- package/script/src/kv/KeyValue.d.ts.map +1 -1
- package/script/src/kv/memory/MemoryKeyValueProvider.d.ts +0 -4
- package/script/src/kv/memory/MemoryKeyValueProvider.d.ts.map +1 -1
- package/script/src/kv/memory/MemoryKeyValueProvider.js +0 -50
- package/script/src/kv/nats/NatsKeyValueProvider.d.ts.map +1 -1
- package/script/src/kv/nats/NatsKeyValueProvider.js +0 -14
- package/script/src/kv/sdk/SDKKeyValueProvider.d.ts.map +1 -1
- package/script/src/kv/sdk/SDKKeyValueProvider.js +0 -12
- package/script/src/observability/logging/ConsoleLogger.d.ts.map +1 -1
- package/esm/src/dsl/http/versori/constants.d.ts +0 -21
- package/esm/src/dsl/http/versori/constants.d.ts.map +0 -1
- package/esm/src/dsl/http/versori/constants.js +0 -38
- package/esm/src/kv/fingerprintExternalUserId.d.ts +0 -6
- package/esm/src/kv/fingerprintExternalUserId.d.ts.map +0 -1
- package/esm/src/kv/fingerprintExternalUserId.js +0 -20
- package/script/src/dsl/http/versori/constants.d.ts +0 -21
- package/script/src/dsl/http/versori/constants.d.ts.map +0 -1
- package/script/src/dsl/http/versori/constants.js +0 -41
- package/script/src/kv/fingerprintExternalUserId.d.ts +0 -6
- package/script/src/kv/fingerprintExternalUserId.d.ts.map +0 -1
- package/script/src/kv/fingerprintExternalUserId.js +0 -23
|
@@ -14,19 +14,32 @@
|
|
|
14
14
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
15
15
|
exports.httpCompiler = void 0;
|
|
16
16
|
const rxjs_1 = require("rxjs");
|
|
17
|
-
const operators_1 = require("rxjs/operators");
|
|
18
|
-
const HttpTask_js_1 = require("../../../dsl/tasks/HttpTask.js");
|
|
19
17
|
const DynamicFetchFactory_js_1 = require("../../../connection/DynamicFetchFactory.js");
|
|
18
|
+
const FetchBuilder_js_1 = require("../../../connection/internal/FetchBuilder.js");
|
|
20
19
|
const StaticFetchFactory_js_1 = require("../../../connection/StaticFetchFactory.js");
|
|
20
|
+
const HttpTask_js_1 = require("../../../dsl/tasks/HttpTask.js");
|
|
21
|
+
const supervisor_js_1 = require("../../../internal/supervisor.js");
|
|
21
22
|
function compileHttp(compilerCtx, task) {
|
|
22
23
|
const cnxMap = compilerCtx.configReader.getCnxMapping(task.opts.connection);
|
|
23
24
|
let fetchFactory;
|
|
24
25
|
if (!cnxMap) {
|
|
25
|
-
compilerCtx.log.
|
|
26
|
-
|
|
26
|
+
compilerCtx.log.warn(`Connection ${task.opts.connection} not found, using default fetch with no credentials`);
|
|
27
|
+
if (supervisor_js_1.enabled) {
|
|
28
|
+
// missing connection map and we are in supervised mode, so we use the fake fetcher
|
|
29
|
+
fetchFactory = Promise.resolve(new StaticFetchFactory_js_1.StaticFetchFactory(new FetchBuilder_js_1.FetchBuilder(globalThis.fetch, { name: task.opts.connection }).buildSupervisedFetch()));
|
|
30
|
+
}
|
|
31
|
+
else {
|
|
32
|
+
// missing connection map and not in supervised mode, so we use global fetch
|
|
33
|
+
fetchFactory = Promise.resolve(new StaticFetchFactory_js_1.StaticFetchFactory(globalThis.fetch));
|
|
34
|
+
}
|
|
27
35
|
}
|
|
28
36
|
else if (cnxMap.dynamic) {
|
|
29
|
-
|
|
37
|
+
if (cnxMap.mockWithAI) {
|
|
38
|
+
fetchFactory = Promise.resolve(new StaticFetchFactory_js_1.StaticFetchFactory(new FetchBuilder_js_1.FetchBuilder(globalThis.fetch, { name: task.opts.connection }).buildSupervisedFetch()));
|
|
39
|
+
}
|
|
40
|
+
else {
|
|
41
|
+
fetchFactory = Promise.resolve(new DynamicFetchFactory_js_1.DynamicFetchFactory(compilerCtx.cnxFactory, compilerCtx.platformApi, compilerCtx.organisationId, cnxMap.templateId));
|
|
42
|
+
}
|
|
30
43
|
}
|
|
31
44
|
else {
|
|
32
45
|
fetchFactory = compilerCtx.platformApi.getConnection({
|
|
@@ -36,8 +49,21 @@ function compileHttp(compilerCtx, task) {
|
|
|
36
49
|
},
|
|
37
50
|
throwOnError: true,
|
|
38
51
|
})
|
|
39
|
-
.then(({ data }) =>
|
|
40
|
-
.
|
|
52
|
+
.then(({ data }) => {
|
|
53
|
+
if (cnxMap.mockWithAI) {
|
|
54
|
+
// use the fake fetcher that calls the supervisor to generate a mock reponse
|
|
55
|
+
return new StaticFetchFactory_js_1.StaticFetchFactory(new FetchBuilder_js_1.FetchBuilder(globalThis.fetch, data).buildSupervisedFetch());
|
|
56
|
+
}
|
|
57
|
+
return Promise.all([compilerCtx.cnxFactory.fetcher(data), data.baseUrl ?? ''])
|
|
58
|
+
.then(([fetcher, baseUrl]) => new StaticFetchFactory_js_1.StaticFetchFactory(fetcher, baseUrl));
|
|
59
|
+
})
|
|
60
|
+
.catch((err) => {
|
|
61
|
+
compilerCtx.log.error(`Failed to get connection ${task.opts.connection}`, err);
|
|
62
|
+
if (supervisor_js_1.enabled) {
|
|
63
|
+
return new StaticFetchFactory_js_1.StaticFetchFactory(new FetchBuilder_js_1.FetchBuilder(globalThis.fetch, { name: task.opts.connection }).build());
|
|
64
|
+
}
|
|
65
|
+
throw err;
|
|
66
|
+
});
|
|
41
67
|
}
|
|
42
68
|
async function http(ctx) {
|
|
43
69
|
const [fetch, baseUrl] = await fetchFactory.then((ff) => Promise.all([ff.fetcher(ctx), ff.baseUrl(ctx)]));
|
|
@@ -45,19 +71,27 @@ function compileHttp(compilerCtx, task) {
|
|
|
45
71
|
const result = await task.fn(httpContext);
|
|
46
72
|
return ctx.withData(result);
|
|
47
73
|
}
|
|
48
|
-
return (src) => src.pipe((0,
|
|
49
|
-
complete: () => compilerCtx.log.debug('http.complete'),
|
|
50
|
-
}), (0, rxjs_1.mergeMap)((ctx) => {
|
|
74
|
+
return (src) => src.pipe((0, rxjs_1.mergeMap)((ctx) => {
|
|
51
75
|
return compilerCtx.tracer.startActiveSpan(`http-${task.id}`, async (span) => {
|
|
76
|
+
await (0, supervisor_js_1.sendTaskStartEvent)(task.id, ctx, span);
|
|
52
77
|
span.setAttribute('task.id', task.id);
|
|
53
78
|
span.setAttribute('task.type', 'http');
|
|
79
|
+
span.setAttribute('type', 'task');
|
|
54
80
|
span.setAttribute('execution.id', ctx.executionId);
|
|
55
81
|
span.setAttribute('connection.name', task.opts.connection);
|
|
82
|
+
span.setAttribute('workflow.id', ctx.options.workflowId || 'unknown-workflow');
|
|
83
|
+
const spanContext = span.spanContext();
|
|
56
84
|
try {
|
|
57
|
-
|
|
85
|
+
const result = await http(ctx.withLogger(ctx.log.child({ spanId: spanContext.spanId, traceId: spanContext.traceId })));
|
|
86
|
+
if (supervisor_js_1.enabled) {
|
|
87
|
+
span.setAttribute('response.body', JSON.stringify(result.data));
|
|
88
|
+
}
|
|
89
|
+
span.setAttribute('status', 'pass');
|
|
90
|
+
return result;
|
|
58
91
|
}
|
|
59
92
|
catch (error) {
|
|
60
93
|
if (error instanceof Error) {
|
|
94
|
+
span.setAttribute('status', 'fail');
|
|
61
95
|
span.recordException(error);
|
|
62
96
|
}
|
|
63
97
|
else {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"schedule.d.ts","sourceRoot":"","sources":["../../../../../src/src/interpreter/durable/compilers/schedule.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"schedule.d.ts","sourceRoot":"","sources":["../../../../../src/src/interpreter/durable/compilers/schedule.ts"],"names":[],"mappings":"AAiBA,OAAO,EAAE,YAAY,EAAE,eAAe,EAAE,MAAM,0CAA0C,CAAC;AAQzF,OAAO,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAqJ7C,eAAO,MAAM,gBAAgB,EAAE,eAAe,CAAC,YAAY,EAAE,eAAe,CAG3E,CAAC"}
|
|
@@ -14,8 +14,8 @@
|
|
|
14
14
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
15
15
|
exports.scheduleCompiler = void 0;
|
|
16
16
|
const rxjs_1 = require("rxjs");
|
|
17
|
-
const constants_js_1 = require("../../../dsl/http/versori/constants.js");
|
|
18
17
|
const ScheduleTrigger_js_1 = require("../../../dsl/triggers/ScheduleTrigger.js");
|
|
18
|
+
const constants_js_1 = require("../../../internal/constants.js");
|
|
19
19
|
function compileSchedule(ctx, trigger, signal) {
|
|
20
20
|
return new rxjs_1.Observable((subscriber) => {
|
|
21
21
|
// Add HTTP endpoint for manual triggering
|
|
@@ -55,7 +55,7 @@ function compileSchedule(ctx, trigger, signal) {
|
|
|
55
55
|
});
|
|
56
56
|
return;
|
|
57
57
|
}
|
|
58
|
-
const executionCtx = ctx.contextProvider.create(activation[0], {});
|
|
58
|
+
const executionCtx = ctx.contextProvider.create(activation[0], {}, { workflowId: trigger.id });
|
|
59
59
|
span.setAttribute('execution.id', executionCtx.executionId);
|
|
60
60
|
try {
|
|
61
61
|
subscriber.next(executionCtx);
|
|
@@ -87,7 +87,7 @@ function compileSchedule(ctx, trigger, signal) {
|
|
|
87
87
|
return;
|
|
88
88
|
}
|
|
89
89
|
activations.forEach((activation) => {
|
|
90
|
-
const executionCtx = ctx.contextProvider.create(activation, {});
|
|
90
|
+
const executionCtx = ctx.contextProvider.create(activation, {}, { workflowId: trigger.id });
|
|
91
91
|
try {
|
|
92
92
|
subscriber.next(executionCtx);
|
|
93
93
|
}
|
|
@@ -106,6 +106,7 @@ function compileSchedule(ctx, trigger, signal) {
|
|
|
106
106
|
await ctx.tracer.startActiveSpan(`schedule-${trigger.id}`, async (span) => {
|
|
107
107
|
span.setAttribute('task.id', trigger.id);
|
|
108
108
|
span.setAttribute('task.type', 'schedule');
|
|
109
|
+
span.setAttribute('type', 'task');
|
|
109
110
|
span.setAttribute('schedule', trigger.schedule);
|
|
110
111
|
span.setAttribute('project.id', projectId);
|
|
111
112
|
span.setAttribute('environment.id', environmentId);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"webhook.d.ts","sourceRoot":"","sources":["../../../../../src/src/interpreter/durable/compilers/webhook.ts"],"names":[],"mappings":"AA2BA,OAAO,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,yCAAyC,CAAC;AAGtF,OAAO,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAuD7C,eAAO,MAAM,eAAe,EAAE,eAAe,CAAC,WAAW,EAAE,cAAc,
|
|
1
|
+
{"version":3,"file":"webhook.d.ts","sourceRoot":"","sources":["../../../../../src/src/interpreter/durable/compilers/webhook.ts"],"names":[],"mappings":"AA2BA,OAAO,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,yCAAyC,CAAC;AAGtF,OAAO,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAuD7C,eAAO,MAAM,eAAe,EAAE,eAAe,CAAC,WAAW,EAAE,cAAc,CA4SxE,CAAC"}
|
|
@@ -90,6 +90,7 @@ exports.webhookCompiler = {
|
|
|
90
90
|
onError = trigger.options.response.onError;
|
|
91
91
|
}
|
|
92
92
|
const ctxOptionsFn = (req, res) => ({
|
|
93
|
+
workflowId: trigger.id,
|
|
93
94
|
onSuccess: (ctx) => {
|
|
94
95
|
if (isSync) {
|
|
95
96
|
sendResponse(res, onSuccess(ctx));
|
|
@@ -110,6 +111,7 @@ exports.webhookCompiler = {
|
|
|
110
111
|
else {
|
|
111
112
|
routeMiddleware.push(express_1.default.raw({ type: '*/*', limit: '50mb' }));
|
|
112
113
|
}
|
|
114
|
+
ctx.webhookRegistry.set(trigger.id, { method, path: `/${trigger.id}`, options: trigger.options });
|
|
113
115
|
return new rxjs_1.Observable((subscriber) => {
|
|
114
116
|
if (!ctx.webhookRouter) {
|
|
115
117
|
throw new Error('Router not available in compiler context');
|
|
@@ -44,6 +44,11 @@ type Registration = {
|
|
|
44
44
|
sigintListener: () => void;
|
|
45
45
|
subscription?: Subscription;
|
|
46
46
|
};
|
|
47
|
+
type WebhookRegistry = Map<string, {
|
|
48
|
+
method: string;
|
|
49
|
+
path: string;
|
|
50
|
+
options: any;
|
|
51
|
+
}>;
|
|
47
52
|
/**
|
|
48
53
|
* MemoryInterpreter is the default interpreter for executing Versori workflows. It handles registration and execution
|
|
49
54
|
* of workflows triggered by schedules and webhooks.
|
|
@@ -72,6 +77,7 @@ export declare class MemoryInterpreter {
|
|
|
72
77
|
private readonly webhookRouter;
|
|
73
78
|
private readonly cronRouter;
|
|
74
79
|
private cronRegistry;
|
|
80
|
+
private webhookRegistry;
|
|
75
81
|
private readonly cnxFactory;
|
|
76
82
|
private readonly cronProvider;
|
|
77
83
|
private readonly tracer;
|
|
@@ -83,7 +89,8 @@ export declare class MemoryInterpreter {
|
|
|
83
89
|
private cronServer?;
|
|
84
90
|
private shutdownServer?;
|
|
85
91
|
private isShuttingDown;
|
|
86
|
-
|
|
92
|
+
private wfRegistration;
|
|
93
|
+
constructor(log: Logger, compiler: ObservableCompiler, contextProvider: ContextProvider, webhookRouter: Router, cronRouter: Router, cronRegistry: Map<string, string>, webhookRegistry: WebhookRegistry, cnxFactory: DirectConnectionFactory, cronProvider: CronProvider, tracer: Tracer, issuesProvider: IssueAPI, cfgReader: ConfigReader, otelSDK?: NodeSDK | undefined);
|
|
87
94
|
static newInstance(options?: MemoryInterpreterOptions): Promise<MemoryInterpreter>;
|
|
88
95
|
register<O>(workflow: Workflow<O>, options?: MemoryInterpreterOptions): Registration;
|
|
89
96
|
start(): Promise<void>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MemoryInterpreter.d.ts","sourceRoot":"","sources":["../../../../src/src/interpreter/memory/MemoryInterpreter.ts"],"names":[],"mappings":"AAaA,OAAsB,
|
|
1
|
+
{"version":3,"file":"MemoryInterpreter.d.ts","sourceRoot":"","sources":["../../../../src/src/interpreter/memory/MemoryInterpreter.ts"],"names":[],"mappings":"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"}
|
|
@@ -29,14 +29,15 @@ const configloader_js_1 = require("../../dsl/http/versori/configloader.js");
|
|
|
29
29
|
const cronapi_js_1 = require("../../dsl/http/versori/cronapi.js");
|
|
30
30
|
const Workflow_js_1 = require("../../dsl/Workflow.js");
|
|
31
31
|
const constants_js_1 = require("../../internal/constants.js");
|
|
32
|
+
const supervisor_js_1 = require("../../internal/supervisor.js");
|
|
32
33
|
const Issues_js_1 = require("../../issues/Issues.js");
|
|
33
34
|
const MemoryKeyValueProvider_js_1 = require("../../kv/memory/MemoryKeyValueProvider.js");
|
|
34
35
|
const NatsKeyValueProvider_js_1 = require("../../kv/nats/NatsKeyValueProvider.js");
|
|
35
36
|
const ConsoleLogger_js_1 = require("../../observability/logging/ConsoleLogger.js");
|
|
36
37
|
const PlatformApi_js_1 = require("../../services/platform/PlatformApi.js");
|
|
37
38
|
const ObservableCompiler_js_1 = require("./ObservableCompiler.js");
|
|
38
|
-
function getKVProvider(
|
|
39
|
-
if (
|
|
39
|
+
function getKVProvider() {
|
|
40
|
+
if (supervisor_js_1.enabled) {
|
|
40
41
|
return Promise.resolve(new MemoryKeyValueProvider_js_1.MemoryKeyValueProvider());
|
|
41
42
|
}
|
|
42
43
|
return NatsKeyValueProvider_js_1.NatsKeyValueProvider.fromEnv();
|
|
@@ -63,7 +64,7 @@ function getKVProvider(runLocal) {
|
|
|
63
64
|
* ```
|
|
64
65
|
*/
|
|
65
66
|
class MemoryInterpreter {
|
|
66
|
-
constructor(log, compiler, contextProvider, webhookRouter, cronRouter, cronRegistry, cnxFactory, cronProvider, tracer, issuesProvider, cfgReader, otelSDK) {
|
|
67
|
+
constructor(log, compiler, contextProvider, webhookRouter, cronRouter, cronRegistry, webhookRegistry, cnxFactory, cronProvider, tracer, issuesProvider, cfgReader, otelSDK) {
|
|
67
68
|
Object.defineProperty(this, "log", {
|
|
68
69
|
enumerable: true,
|
|
69
70
|
configurable: true,
|
|
@@ -100,6 +101,12 @@ class MemoryInterpreter {
|
|
|
100
101
|
writable: true,
|
|
101
102
|
value: cronRegistry
|
|
102
103
|
});
|
|
104
|
+
Object.defineProperty(this, "webhookRegistry", {
|
|
105
|
+
enumerable: true,
|
|
106
|
+
configurable: true,
|
|
107
|
+
writable: true,
|
|
108
|
+
value: webhookRegistry
|
|
109
|
+
});
|
|
103
110
|
Object.defineProperty(this, "cnxFactory", {
|
|
104
111
|
enumerable: true,
|
|
105
112
|
configurable: true,
|
|
@@ -166,6 +173,13 @@ class MemoryInterpreter {
|
|
|
166
173
|
writable: true,
|
|
167
174
|
value: false
|
|
168
175
|
});
|
|
176
|
+
// Workflow registration promises only used when supervisor is enabled
|
|
177
|
+
Object.defineProperty(this, "wfRegistration", {
|
|
178
|
+
enumerable: true,
|
|
179
|
+
configurable: true,
|
|
180
|
+
writable: true,
|
|
181
|
+
value: []
|
|
182
|
+
});
|
|
169
183
|
if (typeof this.log === 'undefined') {
|
|
170
184
|
// this captures the old way of instantiating the MemoryInterpreter and provides an
|
|
171
185
|
// error message back to the user to let them know they should use the new way.
|
|
@@ -184,7 +198,6 @@ class MemoryInterpreter {
|
|
|
184
198
|
const otelTracesURL = Deno.env.get(constants_js_1.envVarOtelTracesURL);
|
|
185
199
|
let otelSDK;
|
|
186
200
|
const configReader = configloader_js_1.VersoriConfigReader.fromEnv(log);
|
|
187
|
-
const runLocal = Deno.env.get(constants_js_1.envVarLocalRun) === 'true';
|
|
188
201
|
await waitForReady(log);
|
|
189
202
|
// Do NOT change those attributes, they are used by the API to filter on
|
|
190
203
|
const resource = (0, resources_1.resourceFromAttributes)({
|
|
@@ -206,20 +219,29 @@ class MemoryInterpreter {
|
|
|
206
219
|
log.info('Starting OpenTelemetry SDK');
|
|
207
220
|
otelSDK.start();
|
|
208
221
|
}
|
|
222
|
+
else if (supervisor_js_1.enabled) {
|
|
223
|
+
otelSDK = new sdk_node_1.NodeSDK({
|
|
224
|
+
traceExporter: new supervisor_js_1.Fake(),
|
|
225
|
+
serviceName: serviceName,
|
|
226
|
+
resource: resource,
|
|
227
|
+
});
|
|
228
|
+
log.info('Starting Testing OpenTelemetry SDK');
|
|
229
|
+
otelSDK.start();
|
|
230
|
+
}
|
|
209
231
|
const tracer = api_1.default.trace.getTracer(serviceName, version);
|
|
210
232
|
const connectionFactory = DirectConnectionFactory_js_1.DirectConnectionFactory.fromEnv(log);
|
|
211
233
|
const issuesProvider = new Issues_js_1.IssueImpl(log);
|
|
212
234
|
if (options.contextProvider) {
|
|
213
235
|
// no need to set up a key-value provider if options.contextProvider is already
|
|
214
236
|
// initialised.
|
|
215
|
-
return new MemoryInterpreter(log, compiler, options.contextProvider, express_1.default.Router(), express_1.default.Router(), new Map(),
|
|
237
|
+
return new MemoryInterpreter(log, compiler, options.contextProvider, express_1.default.Router(), express_1.default.Router(), new Map(), new Map(), connectionFactory, cronapi_js_1.CronAPIClient.fromEnv(), tracer, issuesProvider, configReader, otelSDK);
|
|
216
238
|
}
|
|
217
|
-
const kvp = await getKVProvider(
|
|
239
|
+
const kvp = await getKVProvider();
|
|
218
240
|
const platformApi = PlatformApi_js_1.PlatformApiImpl.fromEnv();
|
|
219
241
|
const organisationId = Deno.env.get(constants_js_1.envVarOrgId) || 'development';
|
|
220
242
|
const environmentId = Deno.env.get(constants_js_1.envVarEnvId) || 'development';
|
|
221
243
|
const ctxProvider = new ContextProvider_js_1.ContextProviderImpl(log, kvp, new CredentialsProvider_js_1.CredentialsProviderImpl(connectionFactory.credentials, connectionFactory.tokens, connectionFactory.oauth1, configReader, platformApi), platformApi, organisationId, environmentId, issuesProvider);
|
|
222
|
-
return new MemoryInterpreter(log, compiler, ctxProvider, express_1.default.Router(), express_1.default.Router(), new Map(), connectionFactory, cronapi_js_1.CronAPIClient.fromEnv(), tracer, issuesProvider, configReader, otelSDK);
|
|
244
|
+
return new MemoryInterpreter(log, compiler, ctxProvider, express_1.default.Router(), express_1.default.Router(), new Map(), new Map(), connectionFactory, cronapi_js_1.CronAPIClient.fromEnv(), tracer, issuesProvider, configReader, otelSDK);
|
|
223
245
|
}
|
|
224
246
|
register(workflow, options) {
|
|
225
247
|
const localAbortController = new AbortController();
|
|
@@ -241,6 +263,7 @@ class MemoryInterpreter {
|
|
|
241
263
|
cnxFactory: this.cnxFactory,
|
|
242
264
|
platformApi: PlatformApi_js_1.PlatformApiImpl.fromEnv(),
|
|
243
265
|
webhookRouter: this.webhookRouter,
|
|
266
|
+
webhookRegistry: this.webhookRegistry,
|
|
244
267
|
cronRouter: this.cronRouter,
|
|
245
268
|
cronRegistry: this.cronRegistry,
|
|
246
269
|
configReader: this.cfgReader,
|
|
@@ -260,11 +283,14 @@ class MemoryInterpreter {
|
|
|
260
283
|
},
|
|
261
284
|
};
|
|
262
285
|
this.registeredWorkflows.push(registration);
|
|
286
|
+
if (supervisor_js_1.enabled) {
|
|
287
|
+
this.wfRegistration.push((0, supervisor_js_1.registerWorkflow)(workflow));
|
|
288
|
+
}
|
|
263
289
|
return registration;
|
|
264
290
|
}
|
|
265
|
-
start() {
|
|
266
|
-
const port = Deno.env.get(
|
|
267
|
-
const cronPort = Deno.env.get(
|
|
291
|
+
async start() {
|
|
292
|
+
const port = Deno.env.get(constants_js_1.envPort) || 3000;
|
|
293
|
+
const cronPort = Deno.env.get(constants_js_1.envCronPort) || 3001;
|
|
268
294
|
const webhookApp = (0, express_1.default)();
|
|
269
295
|
const cronApp = (0, express_1.default)();
|
|
270
296
|
cronApp.use(express_1.default.json());
|
|
@@ -291,6 +317,13 @@ class MemoryInterpreter {
|
|
|
291
317
|
triggerName: registration.triggerName,
|
|
292
318
|
error: err instanceof Error ? err.toString() : err,
|
|
293
319
|
});
|
|
320
|
+
this.tracer.startActiveSpan('done', (span) => {
|
|
321
|
+
span.setAttribute('error.message', err instanceof Error ? err.toString() : err);
|
|
322
|
+
span.setAttribute('execution.id', ctx.executionId);
|
|
323
|
+
span.setAttribute('result', 'fail');
|
|
324
|
+
span.setAttribute('workflow.id', ctx.workflowId || 'unknown-workflow');
|
|
325
|
+
span.end();
|
|
326
|
+
});
|
|
294
327
|
try {
|
|
295
328
|
ctx.options.onError?.(ctx.withData(err));
|
|
296
329
|
}
|
|
@@ -313,6 +346,12 @@ class MemoryInterpreter {
|
|
|
313
346
|
triggerName: registration.triggerName,
|
|
314
347
|
durationMs,
|
|
315
348
|
});
|
|
349
|
+
this.tracer.startActiveSpan('done', (span) => {
|
|
350
|
+
span.setAttribute('execution.id', ctx.executionId);
|
|
351
|
+
span.setAttribute('result', 'pass');
|
|
352
|
+
span.setAttribute('workflow.id', ctx.workflowId || 'unknown-workflow');
|
|
353
|
+
span.end();
|
|
354
|
+
});
|
|
316
355
|
try {
|
|
317
356
|
ctx.options.onSuccess?.(ctx);
|
|
318
357
|
}
|
|
@@ -374,6 +413,7 @@ class MemoryInterpreter {
|
|
|
374
413
|
if (this.cronServer) {
|
|
375
414
|
this.cronServer.close();
|
|
376
415
|
}
|
|
416
|
+
this.otelSDK?.shutdown();
|
|
377
417
|
// Remove all signal listeners
|
|
378
418
|
for (const registration of this.registeredWorkflows) {
|
|
379
419
|
Deno.removeSignalListener('SIGINT', registration.sigintListener);
|
|
@@ -390,6 +430,10 @@ class MemoryInterpreter {
|
|
|
390
430
|
}
|
|
391
431
|
};
|
|
392
432
|
Deno.addSignalListener('SIGINT', this.shutdownServer);
|
|
433
|
+
if (supervisor_js_1.enabled) {
|
|
434
|
+
await Promise.all(this.wfRegistration);
|
|
435
|
+
await (0, supervisor_js_1.signalReady)();
|
|
436
|
+
}
|
|
393
437
|
return new Promise((resolve) => {
|
|
394
438
|
let serversClosed = 0;
|
|
395
439
|
const totalServers = [this.webhookServer, this.cronServer].filter(Boolean).length;
|
|
@@ -427,7 +471,7 @@ class MemoryInterpreter {
|
|
|
427
471
|
}
|
|
428
472
|
exports.MemoryInterpreter = MemoryInterpreter;
|
|
429
473
|
async function waitForReady(log) {
|
|
430
|
-
const readyCheckUrl = Deno.env.get(
|
|
474
|
+
const readyCheckUrl = Deno.env.get(constants_js_1.envReadyCheckURL);
|
|
431
475
|
if (!readyCheckUrl) {
|
|
432
476
|
return Promise.resolve();
|
|
433
477
|
}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { Tracer } from '@opentelemetry/api';
|
|
2
2
|
import { Router } from 'express';
|
|
3
3
|
import { Observable, OperatorFunction } from 'rxjs';
|
|
4
|
+
import { ConnectionFactory } from '../../connection/types.js';
|
|
4
5
|
import { ContextImpl } from '../../context/Context.js';
|
|
5
6
|
import { ContextProvider } from '../../context/ContextProvider.js';
|
|
6
7
|
import { ConfigReader } from '../../dsl/http/types.js';
|
|
@@ -10,7 +11,6 @@ import { IssueAPI } from '../../issues/Issues.js';
|
|
|
10
11
|
import { Logger } from '../../observability/logging/Logger.js';
|
|
11
12
|
import { PlatformApi } from '../../services/platform/PlatformApi.js';
|
|
12
13
|
import { ContextOperatorFunction, TaskCompiler, TriggerCompiler } from './compilers/types.js';
|
|
13
|
-
import { ConnectionFactory } from '../../connection/types.js';
|
|
14
14
|
export type CompilerContext = {
|
|
15
15
|
compiler: ObservableCompiler;
|
|
16
16
|
log: Logger;
|
|
@@ -23,6 +23,11 @@ export type CompilerContext = {
|
|
|
23
23
|
issueProvider: IssueAPI;
|
|
24
24
|
configReader: ConfigReader;
|
|
25
25
|
cronRegistry: Map<string, string>;
|
|
26
|
+
webhookRegistry: Map<string, {
|
|
27
|
+
method: string;
|
|
28
|
+
path: string;
|
|
29
|
+
options: any;
|
|
30
|
+
}>;
|
|
26
31
|
organisationId: string;
|
|
27
32
|
};
|
|
28
33
|
export type CompilerFunc<In = any, Out = any, T extends Task<In, Out> = Task<In, Out>> = (ctx: CompilerContext, task: T) => OperatorFunction<In, Out>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ObservableCompiler.d.ts","sourceRoot":"","sources":["../../../../src/src/interpreter/memory/ObservableCompiler.ts"],"names":[],"mappings":"AAaA,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAC5C,OAAO,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AACjC,OAAO,EAAE,UAAU,EAAE,gBAAgB,EAAE,MAAM,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"ObservableCompiler.d.ts","sourceRoot":"","sources":["../../../../src/src/interpreter/memory/ObservableCompiler.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"catch.d.ts","sourceRoot":"","sources":["../../../../../src/src/interpreter/memory/compilers/catch.ts"],"names":[],"mappings":"AAgBA,OAAO,EAAE,SAAS,EAAE,MAAM,iCAAiC,CAAC;AAG5D,OAAO,EAA2B,YAAY,EAAE,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"catch.d.ts","sourceRoot":"","sources":["../../../../../src/src/interpreter/memory/compilers/catch.ts"],"names":[],"mappings":"AAgBA,OAAO,EAAE,SAAS,EAAE,MAAM,iCAAiC,CAAC;AAG5D,OAAO,EAA2B,YAAY,EAAE,MAAM,YAAY,CAAC;AA4FnE,eAAO,MAAM,aAAa,EAAE,YAAY,CAAC,GAAG,EAAE,GAAG,EAAE,SAAS,CAAC,GAAG,EAAE,GAAG,CAAC,CAGrE,CAAC"}
|
|
@@ -22,9 +22,13 @@ function compileCatch(compilerCtx, task) {
|
|
|
22
22
|
return (src) => src.pipe((0, rxjs_1.mergeMap)((ctx) => {
|
|
23
23
|
return baseOperator((0, rxjs_1.of)(ctx)).pipe((0, rxjs_1.catchError)((error) => {
|
|
24
24
|
return compilerCtx.tracer.startActiveSpan(`catch`, (span) => {
|
|
25
|
+
// TODO: do we even want this here? Can't be async in here I believe
|
|
26
|
+
// await sendTaskStartEvent(task.id, span);
|
|
25
27
|
span.setAttribute('execution.id', ctx.executionId);
|
|
26
28
|
span.setAttribute('task.type', 'catch');
|
|
29
|
+
span.setAttribute('type', 'task');
|
|
27
30
|
if (error instanceof Error) {
|
|
31
|
+
span.setAttribute('status', 'fail');
|
|
28
32
|
span.recordException(error);
|
|
29
33
|
span.setAttribute('error.message', error.message);
|
|
30
34
|
span.setAttribute('error.stack', error.stack ?? '');
|
|
@@ -62,6 +66,7 @@ function compileCatch(compilerCtx, task) {
|
|
|
62
66
|
ctx.log.error('execution has encountered an error', {
|
|
63
67
|
error: error,
|
|
64
68
|
});
|
|
69
|
+
span.setAttribute('status', 'fail');
|
|
65
70
|
span.setAttribute('error', `${error}`);
|
|
66
71
|
span.end();
|
|
67
72
|
return errorOperator((0, rxjs_1.of)(ctx.withData(new ExecutionError_js_1.ExecutionError(ctx, `${error}`, { cause: error }), { recoveredFromCatch: true })));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fn.d.ts","sourceRoot":"","sources":["../../../../../src/src/interpreter/memory/compilers/fn.ts"],"names":[],"mappings":"AAgBA,OAAO,EAAE,MAAM,EAAE,MAAM,8BAA8B,CAAC;
|
|
1
|
+
{"version":3,"file":"fn.d.ts","sourceRoot":"","sources":["../../../../../src/src/interpreter/memory/compilers/fn.ts"],"names":[],"mappings":"AAgBA,OAAO,EAAE,MAAM,EAAE,MAAM,8BAA8B,CAAC;AAGtD,OAAO,EAA2B,YAAY,EAAE,MAAM,YAAY,CAAC;AAoDnE,eAAO,MAAM,UAAU,EAAE,YAAY,CAAC,GAAG,EAAE,GAAG,EAAE,MAAM,CAAC,GAAG,EAAE,GAAG,CAAC,CAG/D,CAAC"}
|
|
@@ -1,32 +1,43 @@
|
|
|
1
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
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
15
3
|
exports.fnCompiler = void 0;
|
|
16
4
|
const rxjs_1 = require("rxjs");
|
|
17
5
|
const FnTask_js_1 = require("../../../dsl/tasks/FnTask.js");
|
|
6
|
+
const supervisor_js_1 = require("../../../internal/supervisor.js");
|
|
18
7
|
function compileFn(compilerCtx, task) {
|
|
19
|
-
return (src) => src.pipe((0, rxjs_1.
|
|
20
|
-
complete: () => compilerCtx.log.debug('fn.complete'),
|
|
21
|
-
}), (0, rxjs_1.mergeMap)(async (ctx) => {
|
|
8
|
+
return (src) => src.pipe((0, rxjs_1.mergeMap)(async (ctx) => {
|
|
22
9
|
return await compilerCtx.tracer.startActiveSpan(`fn-${task.id}`, async (span) => {
|
|
10
|
+
ctx = await (0, supervisor_js_1.sendTaskStartEvent)(task.id, ctx, span);
|
|
23
11
|
span.setAttribute('task.id', task.id);
|
|
12
|
+
span.setAttribute('type', 'task');
|
|
13
|
+
span.setAttribute('task.type', 'fn');
|
|
24
14
|
span.setAttribute('execution.id', ctx.executionId);
|
|
15
|
+
span.setAttribute('workflow.id', ctx.options.workflowId || 'unknown-workflow');
|
|
25
16
|
try {
|
|
17
|
+
let result;
|
|
18
|
+
const spanContext = span.spanContext();
|
|
19
|
+
const ctxWithLogger = ctx.withLogger(ctx.log.child({ spanId: spanContext.spanId, traceId: spanContext.traceId }));
|
|
26
20
|
if (typeof ctx.idx === 'number') {
|
|
27
|
-
|
|
21
|
+
result = ctx.withData(await task._fn(ctxWithLogger, ctx.idx));
|
|
28
22
|
}
|
|
29
|
-
|
|
23
|
+
else {
|
|
24
|
+
result = ctx.withData(await task._fn(ctxWithLogger));
|
|
25
|
+
}
|
|
26
|
+
if (supervisor_js_1.enabled) {
|
|
27
|
+
span.setAttribute('response.body', JSON.stringify(result.data));
|
|
28
|
+
}
|
|
29
|
+
span.setAttribute('status', 'pass');
|
|
30
|
+
return result;
|
|
31
|
+
}
|
|
32
|
+
catch (error) {
|
|
33
|
+
if (error instanceof Error) {
|
|
34
|
+
span.setAttribute('status', 'fail');
|
|
35
|
+
span.recordException(error);
|
|
36
|
+
}
|
|
37
|
+
else {
|
|
38
|
+
span.recordException(new Error(String(error)));
|
|
39
|
+
}
|
|
40
|
+
throw error;
|
|
30
41
|
}
|
|
31
42
|
finally {
|
|
32
43
|
span.end();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"http.d.ts","sourceRoot":"","sources":["../../../../../src/src/interpreter/memory/compilers/http.ts"],"names":[],"mappings":"AAoBA,OAAO,EAAmB,YAAY,EAAE,MAAM,gCAAgC,CAAC;
|
|
1
|
+
{"version":3,"file":"http.d.ts","sourceRoot":"","sources":["../../../../../src/src/interpreter/memory/compilers/http.ts"],"names":[],"mappings":"AAoBA,OAAO,EAAmB,YAAY,EAAE,MAAM,gCAAgC,CAAC;AAG/E,OAAO,EAA2B,YAAY,EAAE,MAAM,YAAY,CAAC;AAyHnE,eAAO,MAAM,YAAY,EAAE,YAAY,CAAC,GAAG,EAAE,GAAG,EAAE,YAAY,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAG5E,CAAC"}
|
|
@@ -14,19 +14,32 @@
|
|
|
14
14
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
15
15
|
exports.httpCompiler = void 0;
|
|
16
16
|
const rxjs_1 = require("rxjs");
|
|
17
|
-
const operators_1 = require("rxjs/operators");
|
|
18
17
|
const DynamicFetchFactory_js_1 = require("../../../connection/DynamicFetchFactory.js");
|
|
18
|
+
const FetchBuilder_js_1 = require("../../../connection/internal/FetchBuilder.js");
|
|
19
19
|
const StaticFetchFactory_js_1 = require("../../../connection/StaticFetchFactory.js");
|
|
20
20
|
const HttpTask_js_1 = require("../../../dsl/tasks/HttpTask.js");
|
|
21
|
+
const supervisor_js_1 = require("../../../internal/supervisor.js");
|
|
21
22
|
function compileHttp(compilerCtx, task) {
|
|
22
23
|
const cnxMap = compilerCtx.configReader.getCnxMapping(task.opts.connection);
|
|
23
24
|
let fetchFactory;
|
|
24
25
|
if (!cnxMap) {
|
|
25
|
-
compilerCtx.log.
|
|
26
|
-
|
|
26
|
+
compilerCtx.log.warn(`Connection ${task.opts.connection} not found, using default fetch with no credentials`);
|
|
27
|
+
if (supervisor_js_1.enabled) {
|
|
28
|
+
// missing connection map and we are in supervised mode, so we use the fake fetcher
|
|
29
|
+
fetchFactory = Promise.resolve(new StaticFetchFactory_js_1.StaticFetchFactory(new FetchBuilder_js_1.FetchBuilder(globalThis.fetch, { name: task.opts.connection }).buildSupervisedFetch()));
|
|
30
|
+
}
|
|
31
|
+
else {
|
|
32
|
+
// missing connection map and not in supervised mode, so we use global fetch
|
|
33
|
+
fetchFactory = Promise.resolve(new StaticFetchFactory_js_1.StaticFetchFactory(globalThis.fetch));
|
|
34
|
+
}
|
|
27
35
|
}
|
|
28
36
|
else if (cnxMap.dynamic) {
|
|
29
|
-
|
|
37
|
+
if (cnxMap.mockWithAI) {
|
|
38
|
+
fetchFactory = Promise.resolve(new StaticFetchFactory_js_1.StaticFetchFactory(new FetchBuilder_js_1.FetchBuilder(globalThis.fetch, { name: task.opts.connection }).buildSupervisedFetch()));
|
|
39
|
+
}
|
|
40
|
+
else {
|
|
41
|
+
fetchFactory = Promise.resolve(new DynamicFetchFactory_js_1.DynamicFetchFactory(compilerCtx.cnxFactory, compilerCtx.platformApi, compilerCtx.organisationId, cnxMap.templateId));
|
|
42
|
+
}
|
|
30
43
|
}
|
|
31
44
|
else {
|
|
32
45
|
fetchFactory = compilerCtx.platformApi.getConnection({
|
|
@@ -36,8 +49,21 @@ function compileHttp(compilerCtx, task) {
|
|
|
36
49
|
},
|
|
37
50
|
throwOnError: true,
|
|
38
51
|
})
|
|
39
|
-
.then(({ data }) =>
|
|
40
|
-
.
|
|
52
|
+
.then(({ data }) => {
|
|
53
|
+
if (cnxMap.mockWithAI) {
|
|
54
|
+
// use the fake fetcher that calls the supervisor to generate a mock reponse
|
|
55
|
+
return new StaticFetchFactory_js_1.StaticFetchFactory(new FetchBuilder_js_1.FetchBuilder(globalThis.fetch, data).buildSupervisedFetch());
|
|
56
|
+
}
|
|
57
|
+
return Promise.all([compilerCtx.cnxFactory.fetcher(data), data.baseUrl ?? ''])
|
|
58
|
+
.then(([fetcher, baseUrl]) => new StaticFetchFactory_js_1.StaticFetchFactory(fetcher, baseUrl));
|
|
59
|
+
})
|
|
60
|
+
.catch((err) => {
|
|
61
|
+
compilerCtx.log.error(`Failed to get connection ${task.opts.connection}`, err);
|
|
62
|
+
if (supervisor_js_1.enabled) {
|
|
63
|
+
return new StaticFetchFactory_js_1.StaticFetchFactory(new FetchBuilder_js_1.FetchBuilder(globalThis.fetch, { name: task.opts.connection }).build());
|
|
64
|
+
}
|
|
65
|
+
throw err;
|
|
66
|
+
});
|
|
41
67
|
}
|
|
42
68
|
async function http(ctx) {
|
|
43
69
|
const [fetch, baseUrl] = await fetchFactory.then((ff) => Promise.all([ff.fetcher(ctx), ff.baseUrl(ctx)]));
|
|
@@ -45,19 +71,27 @@ function compileHttp(compilerCtx, task) {
|
|
|
45
71
|
const result = await task.fn(httpContext);
|
|
46
72
|
return ctx.withData(result);
|
|
47
73
|
}
|
|
48
|
-
return (src) => src.pipe((0,
|
|
49
|
-
complete: () => compilerCtx.log.debug('http.complete'),
|
|
50
|
-
}), (0, rxjs_1.mergeMap)((ctx) => {
|
|
74
|
+
return (src) => src.pipe((0, rxjs_1.mergeMap)((ctx) => {
|
|
51
75
|
return compilerCtx.tracer.startActiveSpan(`http-${task.id}`, async (span) => {
|
|
76
|
+
ctx = await (0, supervisor_js_1.sendTaskStartEvent)(task.id, ctx, span);
|
|
52
77
|
span.setAttribute('task.id', task.id);
|
|
53
78
|
span.setAttribute('task.type', 'http');
|
|
79
|
+
span.setAttribute('type', 'task');
|
|
54
80
|
span.setAttribute('execution.id', ctx.executionId);
|
|
55
81
|
span.setAttribute('connection.name', task.opts.connection);
|
|
82
|
+
span.setAttribute('workflow.id', ctx.options.workflowId || 'unknown-workflow');
|
|
83
|
+
const spanContext = span.spanContext();
|
|
56
84
|
try {
|
|
57
|
-
|
|
85
|
+
const newCtx = await http(ctx.withLogger(ctx.log.child({ spanId: spanContext.spanId, traceId: spanContext.traceId })));
|
|
86
|
+
if (supervisor_js_1.enabled) {
|
|
87
|
+
span.setAttribute('response.body', JSON.stringify(newCtx.data));
|
|
88
|
+
}
|
|
89
|
+
span.setAttribute('status', 'pass');
|
|
90
|
+
return newCtx;
|
|
58
91
|
}
|
|
59
92
|
catch (error) {
|
|
60
93
|
if (error instanceof Error) {
|
|
94
|
+
span.setAttribute('status', 'fail');
|
|
61
95
|
span.recordException(error);
|
|
62
96
|
}
|
|
63
97
|
else {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"schedule.d.ts","sourceRoot":"","sources":["../../../../../src/src/interpreter/memory/compilers/schedule.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"schedule.d.ts","sourceRoot":"","sources":["../../../../../src/src/interpreter/memory/compilers/schedule.ts"],"names":[],"mappings":"AAiBA,OAAO,EAAE,YAAY,EAAE,eAAe,EAAE,MAAM,0CAA0C,CAAC;AASzF,OAAO,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AA+M7C,eAAO,MAAM,gBAAgB,EAAE,eAAe,CAAC,YAAY,EAAE,eAAe,CAG3E,CAAC"}
|