@solidactions/sdk 0.1.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/.claude/settings.local.json +7 -0
- package/.clavix/outputs/dbos-http-sdk/full-prd.md +142 -0
- package/.clavix/outputs/dbos-http-sdk/quick-prd.md +12 -0
- package/.clavix/outputs/dbos-http-sdk/tasks.md +630 -0
- package/.clavix/outputs/prompts/dbos-http-api-20260110-033219.md +91 -0
- package/.husky/pre-commit +1 -0
- package/.prettierignore +3 -0
- package/.prettierrc +9 -0
- package/CODE_OF_CONDUCT.md +49 -0
- package/CONTRIBUTING.md +47 -0
- package/LICENSE +21 -0
- package/README.md +172 -0
- package/dist/dbos-config.schema.json +132 -0
- package/dist/schemas/system_db_schema.d.ts +73 -0
- package/dist/schemas/system_db_schema.d.ts.map +1 -0
- package/dist/schemas/system_db_schema.js +3 -0
- package/dist/schemas/system_db_schema.js.map +1 -0
- package/dist/src/adminserver.d.ts +79 -0
- package/dist/src/adminserver.d.ts.map +1 -0
- package/dist/src/adminserver.js +495 -0
- package/dist/src/adminserver.js.map +1 -0
- package/dist/src/authdecorators.d.ts +2 -0
- package/dist/src/authdecorators.d.ts.map +1 -0
- package/dist/src/authdecorators.js +48 -0
- package/dist/src/authdecorators.js.map +1 -0
- package/dist/src/cli/cli.d.ts +9 -0
- package/dist/src/cli/cli.d.ts.map +1 -0
- package/dist/src/cli/cli.js +116 -0
- package/dist/src/cli/cli.js.map +1 -0
- package/dist/src/cli/commands.d.ts +3 -0
- package/dist/src/cli/commands.d.ts.map +1 -0
- package/dist/src/cli/commands.js +46 -0
- package/dist/src/cli/commands.js.map +1 -0
- package/dist/src/client.d.ts +85 -0
- package/dist/src/client.d.ts.map +1 -0
- package/dist/src/client.js +186 -0
- package/dist/src/client.js.map +1 -0
- package/dist/src/conductor/conductor.d.ts +28 -0
- package/dist/src/conductor/conductor.d.ts.map +1 -0
- package/dist/src/conductor/conductor.js +376 -0
- package/dist/src/conductor/conductor.js.map +1 -0
- package/dist/src/conductor/protocol.d.ts +238 -0
- package/dist/src/conductor/protocol.d.ts.map +1 -0
- package/dist/src/conductor/protocol.js +353 -0
- package/dist/src/conductor/protocol.js.map +1 -0
- package/dist/src/config.d.ts +91 -0
- package/dist/src/config.d.ts.map +1 -0
- package/dist/src/config.js +199 -0
- package/dist/src/config.js.map +1 -0
- package/dist/src/context.d.ts +62 -0
- package/dist/src/context.d.ts.map +1 -0
- package/dist/src/context.js +118 -0
- package/dist/src/context.js.map +1 -0
- package/dist/src/database_utils.d.ts +17 -0
- package/dist/src/database_utils.d.ts.map +1 -0
- package/dist/src/database_utils.js +53 -0
- package/dist/src/database_utils.js.map +1 -0
- package/dist/src/datasource.d.ts +109 -0
- package/dist/src/datasource.d.ts.map +1 -0
- package/dist/src/datasource.js +204 -0
- package/dist/src/datasource.js.map +1 -0
- package/dist/src/dbos-executor.d.ts +189 -0
- package/dist/src/dbos-executor.d.ts.map +1 -0
- package/dist/src/dbos-executor.js +817 -0
- package/dist/src/dbos-executor.js.map +1 -0
- package/dist/src/dbos.d.ts +519 -0
- package/dist/src/dbos.d.ts.map +1 -0
- package/dist/src/dbos.js +1282 -0
- package/dist/src/dbos.js.map +1 -0
- package/dist/src/debouncer.d.ts +33 -0
- package/dist/src/debouncer.d.ts.map +1 -0
- package/dist/src/debouncer.js +170 -0
- package/dist/src/debouncer.js.map +1 -0
- package/dist/src/debugpoint.d.ts +26 -0
- package/dist/src/debugpoint.d.ts.map +1 -0
- package/dist/src/debugpoint.js +65 -0
- package/dist/src/debugpoint.js.map +1 -0
- package/dist/src/decorators.d.ts +219 -0
- package/dist/src/decorators.d.ts.map +1 -0
- package/dist/src/decorators.js +873 -0
- package/dist/src/decorators.js.map +1 -0
- package/dist/src/error.d.ts +130 -0
- package/dist/src/error.d.ts.map +1 -0
- package/dist/src/error.js +290 -0
- package/dist/src/error.js.map +1 -0
- package/dist/src/http_client.d.ts +82 -0
- package/dist/src/http_client.d.ts.map +1 -0
- package/dist/src/http_client.js +286 -0
- package/dist/src/http_client.js.map +1 -0
- package/dist/src/http_system_database.d.ts +84 -0
- package/dist/src/http_system_database.d.ts.map +1 -0
- package/dist/src/http_system_database.js +429 -0
- package/dist/src/http_system_database.js.map +1 -0
- package/dist/src/index.d.ts +14 -0
- package/dist/src/index.d.ts.map +1 -0
- package/dist/src/index.js +53 -0
- package/dist/src/index.js.map +1 -0
- package/dist/src/scheduler/crontab.d.ts +14 -0
- package/dist/src/scheduler/crontab.d.ts.map +1 -0
- package/dist/src/scheduler/crontab.js +308 -0
- package/dist/src/scheduler/crontab.js.map +1 -0
- package/dist/src/scheduler/scheduler.d.ts +41 -0
- package/dist/src/scheduler/scheduler.d.ts.map +1 -0
- package/dist/src/scheduler/scheduler.js +165 -0
- package/dist/src/scheduler/scheduler.js.map +1 -0
- package/dist/src/serialization.d.ts +57 -0
- package/dist/src/serialization.d.ts.map +1 -0
- package/dist/src/serialization.js +306 -0
- package/dist/src/serialization.js.map +1 -0
- package/dist/src/solidactions-executor.d.ts +177 -0
- package/dist/src/solidactions-executor.d.ts.map +1 -0
- package/dist/src/solidactions-executor.js +817 -0
- package/dist/src/solidactions-executor.js.map +1 -0
- package/dist/src/solidactions.d.ts +519 -0
- package/dist/src/solidactions.d.ts.map +1 -0
- package/dist/src/solidactions.js +1284 -0
- package/dist/src/solidactions.js.map +1 -0
- package/dist/src/step.d.ts +16 -0
- package/dist/src/step.d.ts.map +1 -0
- package/dist/src/step.js +3 -0
- package/dist/src/step.js.map +1 -0
- package/dist/src/system_database.d.ts +141 -0
- package/dist/src/system_database.d.ts.map +1 -0
- package/dist/src/system_database.js +25 -0
- package/dist/src/system_database.js.map +1 -0
- package/dist/src/telemetry/collector.d.ts +13 -0
- package/dist/src/telemetry/collector.d.ts.map +1 -0
- package/dist/src/telemetry/collector.js +63 -0
- package/dist/src/telemetry/collector.js.map +1 -0
- package/dist/src/telemetry/exporters.d.ts +13 -0
- package/dist/src/telemetry/exporters.d.ts.map +1 -0
- package/dist/src/telemetry/exporters.js +101 -0
- package/dist/src/telemetry/exporters.js.map +1 -0
- package/dist/src/telemetry/logs.d.ts +52 -0
- package/dist/src/telemetry/logs.d.ts.map +1 -0
- package/dist/src/telemetry/logs.js +287 -0
- package/dist/src/telemetry/logs.js.map +1 -0
- package/dist/src/telemetry/traces.d.ts +52 -0
- package/dist/src/telemetry/traces.d.ts.map +1 -0
- package/dist/src/telemetry/traces.js +150 -0
- package/dist/src/telemetry/traces.js.map +1 -0
- package/dist/src/utils.d.ts +26 -0
- package/dist/src/utils.d.ts.map +1 -0
- package/dist/src/utils.js +136 -0
- package/dist/src/utils.js.map +1 -0
- package/dist/src/wfqueue.d.ts +64 -0
- package/dist/src/wfqueue.d.ts.map +1 -0
- package/dist/src/wfqueue.js +147 -0
- package/dist/src/wfqueue.js.map +1 -0
- package/dist/src/workflow.d.ts +154 -0
- package/dist/src/workflow.d.ts.map +1 -0
- package/dist/src/workflow.js +99 -0
- package/dist/src/workflow.js.map +1 -0
- package/dist/src/workflow_management.d.ts +15 -0
- package/dist/src/workflow_management.d.ts.map +1 -0
- package/dist/src/workflow_management.js +87 -0
- package/dist/src/workflow_management.js.map +1 -0
- package/dist/tsconfig.tsbuildinfo +1 -0
- package/docs/api-schema.md +1441 -0
- package/docs/migration-guide.md +460 -0
- package/docs/phase-14-changes.md +156 -0
- package/docs/solidsteps-ai-prompt.md +534 -0
- package/eslint.config.cjs +50 -0
- package/package.json +84 -0
- package/solidactions-ai-prompt.md +1504 -0
- package/solidactions-config.schema.json +132 -0
- package/solidactions-test-config.yaml +15 -0
|
@@ -0,0 +1,136 @@
|
|
|
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
|
+
exports.getClientConfig = exports.interceptStreams = exports.exhaustiveCheckGuard = exports.cancellableSleep = exports.DEBOUNCER_WORKLOW_NAME = exports.INTERNAL_QUEUE_NAME = exports.sleepms = exports.globalParams = exports.defaultEnableOTLP = exports.readFile = void 0;
|
|
7
|
+
const node_fs_1 = __importDefault(require("node:fs"));
|
|
8
|
+
const node_path_1 = __importDefault(require("node:path"));
|
|
9
|
+
/*
|
|
10
|
+
* A wrapper of readFile used for mocking in tests
|
|
11
|
+
**/
|
|
12
|
+
async function readFile(path, encoding = 'utf8') {
|
|
13
|
+
return await node_fs_1.default.promises.readFile(path, { encoding });
|
|
14
|
+
}
|
|
15
|
+
exports.readFile = readFile;
|
|
16
|
+
function loadSolidActionsVersion() {
|
|
17
|
+
try {
|
|
18
|
+
function findPackageRoot(start) {
|
|
19
|
+
if (typeof start === 'string') {
|
|
20
|
+
if (!start.endsWith(node_path_1.default.sep)) {
|
|
21
|
+
start += node_path_1.default.sep;
|
|
22
|
+
}
|
|
23
|
+
start = start.split(node_path_1.default.sep);
|
|
24
|
+
}
|
|
25
|
+
if (start.length === 0) {
|
|
26
|
+
throw new Error('package.json not found in path');
|
|
27
|
+
}
|
|
28
|
+
start.pop();
|
|
29
|
+
const dir = start.join(node_path_1.default.sep);
|
|
30
|
+
if (node_fs_1.default.existsSync(node_path_1.default.join(dir, 'package.json'))) {
|
|
31
|
+
return dir;
|
|
32
|
+
}
|
|
33
|
+
return findPackageRoot(start);
|
|
34
|
+
}
|
|
35
|
+
const packageJsonPath = node_path_1.default.join(findPackageRoot(__dirname), 'package.json');
|
|
36
|
+
// eslint-disable-next-line @typescript-eslint/no-require-imports
|
|
37
|
+
const packageJson = require(packageJsonPath);
|
|
38
|
+
return packageJson.version;
|
|
39
|
+
}
|
|
40
|
+
catch (error) {
|
|
41
|
+
// Return "unknown" if package.json cannot be found or loaded
|
|
42
|
+
// This can happen in bundled environments where the file system structure is different
|
|
43
|
+
return 'unknown';
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
// Enable OTLP by default only in SolidActions Cloud. Otherwise, enable through configuration.
|
|
47
|
+
function defaultEnableOTLP() {
|
|
48
|
+
return process.env.SOLIDACTIONS__CLOUD === 'true';
|
|
49
|
+
}
|
|
50
|
+
exports.defaultEnableOTLP = defaultEnableOTLP;
|
|
51
|
+
exports.globalParams = {
|
|
52
|
+
appVersion: process.env.SOLIDACTIONS__APPVERSION || '', // The one true source of appVersion
|
|
53
|
+
wasComputed: false, // Was app version set or computed? Stored procs don't support computed versions.
|
|
54
|
+
executorID: process.env.SOLIDACTIONS__VMID || 'local', // The one true source of executorID
|
|
55
|
+
appID: process.env.SOLIDACTIONS__APPID || '', // The one true source of appID
|
|
56
|
+
enableOTLP: defaultEnableOTLP(), // Whether OTLP is enabled
|
|
57
|
+
solidActionsVersion: loadSolidActionsVersion(), // The version of the SolidActions library
|
|
58
|
+
};
|
|
59
|
+
const sleepms = (ms) => new Promise((r) => setTimeout(r, ms));
|
|
60
|
+
exports.sleepms = sleepms;
|
|
61
|
+
// The name of the internal queue used by SolidActions
|
|
62
|
+
exports.INTERNAL_QUEUE_NAME = '_solidactions_internal_queue';
|
|
63
|
+
exports.DEBOUNCER_WORKLOW_NAME = '_solidactions_debouncer_workflow';
|
|
64
|
+
/*
|
|
65
|
+
A cancellable sleep function that returns a promise and a callback
|
|
66
|
+
The promise can be awaited for and will automatically resolve after the given time
|
|
67
|
+
When cancel is called, not only it clears the timeout, but also resolves the promise
|
|
68
|
+
So any waiters on the cancelable sleep will be resolved
|
|
69
|
+
*/
|
|
70
|
+
function cancellableSleep(ms) {
|
|
71
|
+
let timeoutId = undefined;
|
|
72
|
+
let resolvePromise;
|
|
73
|
+
let resolved = false;
|
|
74
|
+
const promise = new Promise((resolve) => {
|
|
75
|
+
resolvePromise = () => {
|
|
76
|
+
if (resolved)
|
|
77
|
+
return;
|
|
78
|
+
resolved = true;
|
|
79
|
+
resolve();
|
|
80
|
+
timeoutId = undefined;
|
|
81
|
+
};
|
|
82
|
+
timeoutId = setTimeout(resolvePromise, ms);
|
|
83
|
+
});
|
|
84
|
+
const cancel = () => {
|
|
85
|
+
if (timeoutId) {
|
|
86
|
+
clearTimeout(timeoutId);
|
|
87
|
+
timeoutId = undefined;
|
|
88
|
+
resolvePromise();
|
|
89
|
+
}
|
|
90
|
+
};
|
|
91
|
+
return { promise, cancel };
|
|
92
|
+
}
|
|
93
|
+
exports.cancellableSleep = cancellableSleep;
|
|
94
|
+
function exhaustiveCheckGuard(_) {
|
|
95
|
+
throw new Error('Exaustive matching is not applied');
|
|
96
|
+
}
|
|
97
|
+
exports.exhaustiveCheckGuard = exhaustiveCheckGuard;
|
|
98
|
+
// Capture original functions
|
|
99
|
+
const originalStdoutWrite = process.stdout.write.bind(process.stdout);
|
|
100
|
+
const originalStderrWrite = process.stderr.write.bind(process.stderr);
|
|
101
|
+
function interceptStreams(onMessage) {
|
|
102
|
+
const intercept = (stream, originalWrite) => {
|
|
103
|
+
return (chunk, encodingOrCb, cb) => {
|
|
104
|
+
const message = chunk.toString();
|
|
105
|
+
onMessage(message, stream);
|
|
106
|
+
if (typeof encodingOrCb === 'function') {
|
|
107
|
+
return originalWrite(chunk, encodingOrCb); // Handle case where encodingOrCb is a callback
|
|
108
|
+
}
|
|
109
|
+
return originalWrite(chunk, encodingOrCb, cb); // Handle case where encodingOrCb is a BufferEncoding
|
|
110
|
+
};
|
|
111
|
+
};
|
|
112
|
+
process.stdout.write = intercept('stdout', originalStdoutWrite);
|
|
113
|
+
process.stderr.write = intercept('stderr', originalStderrWrite);
|
|
114
|
+
}
|
|
115
|
+
exports.interceptStreams = interceptStreams;
|
|
116
|
+
// The `pg` package we use does not parse the connect_timeout parameter, so we need to handle it ourselves.
|
|
117
|
+
function getClientConfig(databaseUrl) {
|
|
118
|
+
const connectionString = typeof databaseUrl === 'string' ? databaseUrl : databaseUrl.toString();
|
|
119
|
+
const timeout = getTimeout(typeof databaseUrl === 'string' ? new URL(databaseUrl) : databaseUrl);
|
|
120
|
+
return {
|
|
121
|
+
connectionString,
|
|
122
|
+
connectionTimeoutMillis: timeout ? timeout * 1000 : 10000,
|
|
123
|
+
};
|
|
124
|
+
function getTimeout(url) {
|
|
125
|
+
try {
|
|
126
|
+
const $timeout = url.searchParams.get('connect_timeout');
|
|
127
|
+
return $timeout ? Number.parseInt($timeout, 10) : undefined;
|
|
128
|
+
}
|
|
129
|
+
catch {
|
|
130
|
+
// Ignore errors in parsing the connect_timeout parameter
|
|
131
|
+
return undefined;
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
exports.getClientConfig = getClientConfig;
|
|
136
|
+
//# sourceMappingURL=utils.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../../src/utils.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
import { DBOSExecutor } from './dbos-executor';
|
|
2
|
+
/**
|
|
3
|
+
* Limit the maximum number of functions started from a `WorkflowQueue`
|
|
4
|
+
* per given time period.
|
|
5
|
+
* If the limit is 5 and the period is 10, no more than 5 functions can be
|
|
6
|
+
* started per 10 seconds.
|
|
7
|
+
*/
|
|
8
|
+
interface QueueRateLimit {
|
|
9
|
+
/** Number of queue dispateches per `periodSec` */
|
|
10
|
+
limitPerPeriod: number;
|
|
11
|
+
/** Period of time during which `limitPerPeriod` queued workflows may be dispatched */
|
|
12
|
+
periodSec: number;
|
|
13
|
+
}
|
|
14
|
+
/**
|
|
15
|
+
* Limit the number of concurrent workflows running for a queue.
|
|
16
|
+
* This limit may be per worker or global
|
|
17
|
+
*/
|
|
18
|
+
export interface QueueParameters {
|
|
19
|
+
/** If defined, this limits the number of running workflows for a single DBOS process */
|
|
20
|
+
workerConcurrency?: number;
|
|
21
|
+
/** If defined, this limits the number of running workflows globally in the app */
|
|
22
|
+
concurrency?: number;
|
|
23
|
+
/** If set, this limits the rate at which queued workflows are started */
|
|
24
|
+
rateLimit?: QueueRateLimit;
|
|
25
|
+
/** If set, this queue supports priority */
|
|
26
|
+
priorityEnabled?: boolean;
|
|
27
|
+
/** If set, this queue supports partitioning */
|
|
28
|
+
partitionQueue?: boolean;
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* Settings structure for a named workflow queue.
|
|
32
|
+
* Workflow queues limit the rate and concurrency at which DBOS executes workflows.
|
|
33
|
+
* Queue policies apply to workflows started by `DBOS.startWorkflow`,
|
|
34
|
+
* `DBOS.withWorkflowQueue`, etc.
|
|
35
|
+
*/
|
|
36
|
+
export declare class WorkflowQueue {
|
|
37
|
+
readonly name: string;
|
|
38
|
+
readonly concurrency?: number;
|
|
39
|
+
readonly rateLimit?: QueueRateLimit;
|
|
40
|
+
readonly workerConcurrency?: number;
|
|
41
|
+
readonly priorityEnabled: boolean;
|
|
42
|
+
readonly partitionQueue: boolean;
|
|
43
|
+
constructor(name: string);
|
|
44
|
+
/**
|
|
45
|
+
*
|
|
46
|
+
* @param name - Name to give the `WorkflowQueue`, accepted by `DBOS.startWorkflow`
|
|
47
|
+
* @param queueParameters - Policy for limiting workflow initiation rate and execution concurrency
|
|
48
|
+
*/
|
|
49
|
+
constructor(name: string, queueParameters: QueueParameters);
|
|
50
|
+
}
|
|
51
|
+
declare class WFQueueRunner {
|
|
52
|
+
readonly wfQueuesByName: Map<string, WorkflowQueue>;
|
|
53
|
+
private isRunning;
|
|
54
|
+
private interruptResolve?;
|
|
55
|
+
private pollingIntervalMs;
|
|
56
|
+
private readonly minPollingIntervalMs;
|
|
57
|
+
private readonly maxPollingIntervalMs;
|
|
58
|
+
stop(): void;
|
|
59
|
+
dispatchLoop(exec: DBOSExecutor, listenQueuesArg: WorkflowQueue[] | null): Promise<void>;
|
|
60
|
+
logRegisteredEndpoints(exec: DBOSExecutor): void;
|
|
61
|
+
}
|
|
62
|
+
export declare const wfQueueRunner: WFQueueRunner;
|
|
63
|
+
export {};
|
|
64
|
+
//# sourceMappingURL=wfqueue.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"wfqueue.d.ts","sourceRoot":"","sources":["../../src/wfqueue.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAK/C;;;;;GAKG;AACH,UAAU,cAAc;IACtB,kDAAkD;IAClD,cAAc,EAAE,MAAM,CAAC;IACvB,sFAAsF;IACtF,SAAS,EAAE,MAAM,CAAC;CACnB;AAED;;;GAGG;AACH,MAAM,WAAW,eAAe;IAC9B,wFAAwF;IACxF,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,kFAAkF;IAClF,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,yEAAyE;IACzE,SAAS,CAAC,EAAE,cAAc,CAAC;IAC3B,2CAA2C;IAC3C,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,+CAA+C;IAC/C,cAAc,CAAC,EAAE,OAAO,CAAC;CAC1B;AAED;;;;;GAKG;AACH,qBAAa,aAAa;IACxB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,SAAS,CAAC,EAAE,cAAc,CAAC;IACpC,QAAQ,CAAC,iBAAiB,CAAC,EAAE,MAAM,CAAC;IACpC,QAAQ,CAAC,eAAe,EAAE,OAAO,CAAS;IAC1C,QAAQ,CAAC,cAAc,EAAE,OAAO,CAAS;gBAE7B,IAAI,EAAE,MAAM;IAExB;;;;OAIG;gBACS,IAAI,EAAE,MAAM,EAAE,eAAe,EAAE,eAAe;CA6B3D;AAED,cAAM,aAAa;IACjB,QAAQ,CAAC,cAAc,EAAE,GAAG,CAAC,MAAM,EAAE,aAAa,CAAC,CAAa;IAEhE,OAAO,CAAC,SAAS,CAAkB;IACnC,OAAO,CAAC,gBAAgB,CAAC,CAAa;IACtC,OAAO,CAAC,iBAAiB,CAAgB;IACzC,OAAO,CAAC,QAAQ,CAAC,oBAAoB,CAAgB;IACrD,OAAO,CAAC,QAAQ,CAAC,oBAAoB,CAAkB;IAEvD,IAAI;IAQE,YAAY,CAAC,IAAI,EAAE,YAAY,EAAE,eAAe,EAAE,aAAa,EAAE,GAAG,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC;IA0F9F,sBAAsB,CAAC,IAAI,EAAE,YAAY;CAc1C;AAED,eAAO,MAAM,aAAa,eAAsB,CAAC"}
|
|
@@ -0,0 +1,147 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.wfQueueRunner = exports.WorkflowQueue = void 0;
|
|
4
|
+
const dbos_1 = require("./dbos");
|
|
5
|
+
const debugpoint_1 = require("./debugpoint");
|
|
6
|
+
const utils_1 = require("./utils");
|
|
7
|
+
/**
|
|
8
|
+
* Settings structure for a named workflow queue.
|
|
9
|
+
* Workflow queues limit the rate and concurrency at which DBOS executes workflows.
|
|
10
|
+
* Queue policies apply to workflows started by `DBOS.startWorkflow`,
|
|
11
|
+
* `DBOS.withWorkflowQueue`, etc.
|
|
12
|
+
*/
|
|
13
|
+
class WorkflowQueue {
|
|
14
|
+
name;
|
|
15
|
+
concurrency;
|
|
16
|
+
rateLimit;
|
|
17
|
+
workerConcurrency;
|
|
18
|
+
priorityEnabled = false;
|
|
19
|
+
partitionQueue = false;
|
|
20
|
+
constructor(name, arg2, rateLimit) {
|
|
21
|
+
this.name = name;
|
|
22
|
+
if (dbos_1.DBOS.isInitialized()) {
|
|
23
|
+
dbos_1.DBOS.logger.warn(`Workflow queue '${name}' is being created after DBOS initialization and will not be considered for dequeue.`);
|
|
24
|
+
}
|
|
25
|
+
if (typeof arg2 === 'object' && arg2 !== null) {
|
|
26
|
+
// Handle the case where the second argument is QueueParameters
|
|
27
|
+
this.concurrency = arg2.concurrency;
|
|
28
|
+
this.rateLimit = arg2.rateLimit;
|
|
29
|
+
this.workerConcurrency = arg2.workerConcurrency;
|
|
30
|
+
this.priorityEnabled = arg2.priorityEnabled ?? false;
|
|
31
|
+
this.partitionQueue = arg2.partitionQueue ?? false;
|
|
32
|
+
}
|
|
33
|
+
else {
|
|
34
|
+
// Handle the case where the second argument is a number
|
|
35
|
+
this.concurrency = arg2;
|
|
36
|
+
this.rateLimit = rateLimit;
|
|
37
|
+
}
|
|
38
|
+
if (exports.wfQueueRunner.wfQueuesByName.has(name)) {
|
|
39
|
+
throw Error(`Workflow Queue '${name}' defined multiple times`);
|
|
40
|
+
}
|
|
41
|
+
exports.wfQueueRunner.wfQueuesByName.set(name, this);
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
exports.WorkflowQueue = WorkflowQueue;
|
|
45
|
+
class WFQueueRunner {
|
|
46
|
+
wfQueuesByName = new Map();
|
|
47
|
+
isRunning = false;
|
|
48
|
+
interruptResolve;
|
|
49
|
+
pollingIntervalMs = 1000;
|
|
50
|
+
minPollingIntervalMs = 1000;
|
|
51
|
+
maxPollingIntervalMs = 120000;
|
|
52
|
+
stop() {
|
|
53
|
+
if (!this.isRunning)
|
|
54
|
+
return;
|
|
55
|
+
this.isRunning = false;
|
|
56
|
+
if (this.interruptResolve) {
|
|
57
|
+
this.interruptResolve();
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
async dispatchLoop(exec, listenQueuesArg) {
|
|
61
|
+
this.isRunning = true;
|
|
62
|
+
while (this.isRunning) {
|
|
63
|
+
// Wait for either the timeout or an interruption
|
|
64
|
+
let timer;
|
|
65
|
+
const timeoutPromise = new Promise((resolve) => {
|
|
66
|
+
timer = setTimeout(() => {
|
|
67
|
+
resolve();
|
|
68
|
+
}, this.pollingIntervalMs);
|
|
69
|
+
});
|
|
70
|
+
await Promise.race([timeoutPromise, new Promise((_, reject) => (this.interruptResolve = reject))]).catch(() => {
|
|
71
|
+
exec.logger.debug('Workflow queue loop interrupted!');
|
|
72
|
+
}); // Interrupt sleep throws
|
|
73
|
+
clearTimeout(timer);
|
|
74
|
+
if (!this.isRunning) {
|
|
75
|
+
break;
|
|
76
|
+
}
|
|
77
|
+
let listenQueues;
|
|
78
|
+
if (listenQueuesArg !== null) {
|
|
79
|
+
// If explicitly listening for queues, use only those queues plus the internal queue
|
|
80
|
+
listenQueues = [...listenQueuesArg, this.wfQueuesByName.get(utils_1.INTERNAL_QUEUE_NAME)];
|
|
81
|
+
}
|
|
82
|
+
else {
|
|
83
|
+
// Else, listen to all declared queues
|
|
84
|
+
listenQueues = Array.from(this.wfQueuesByName.values());
|
|
85
|
+
}
|
|
86
|
+
// Check queues
|
|
87
|
+
for (const q of listenQueues) {
|
|
88
|
+
let wfids = [];
|
|
89
|
+
try {
|
|
90
|
+
if (q.partitionQueue) {
|
|
91
|
+
// For partitioned queues, get all partition keys and dequeue from each partition separately
|
|
92
|
+
const partitionKeys = await exec.systemDatabase.getQueuePartitions(q.name);
|
|
93
|
+
for (const partitionKey of partitionKeys) {
|
|
94
|
+
const partitionWfids = await exec.systemDatabase.findAndMarkStartableWorkflows(q, exec.executorID, utils_1.globalParams.appVersion, partitionKey);
|
|
95
|
+
wfids.push(...partitionWfids);
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
else {
|
|
99
|
+
// For non-partitioned queues, pass null to match workflows with queue_partition_key IS NULL
|
|
100
|
+
wfids = await exec.systemDatabase.findAndMarkStartableWorkflows(q, exec.executorID, utils_1.globalParams.appVersion, undefined);
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
catch (e) {
|
|
104
|
+
const err = e;
|
|
105
|
+
// Handle serialization errors and lock contention with backoff
|
|
106
|
+
if ('code' in err && (err.code === '40001' || err.code === '55P03')) {
|
|
107
|
+
// 40001: serialization_failure, 55P03: lock_not_available
|
|
108
|
+
// Increase the polling interval on contention
|
|
109
|
+
this.pollingIntervalMs = Math.min(this.maxPollingIntervalMs, this.pollingIntervalMs * 2.0);
|
|
110
|
+
exec.logger.warn(`Contention detected in queue thread for ${q.name}. Increasing polling interval to ${(this.pollingIntervalMs / 1000).toFixed(2)}s.`);
|
|
111
|
+
}
|
|
112
|
+
else {
|
|
113
|
+
exec.logger.warn(`Error getting startable workflows: ${err.message}`);
|
|
114
|
+
}
|
|
115
|
+
wfids = [];
|
|
116
|
+
}
|
|
117
|
+
if (wfids.length > 0) {
|
|
118
|
+
await (0, debugpoint_1.debugTriggerPoint)(debugpoint_1.DEBUG_TRIGGER_WORKFLOW_QUEUE_START);
|
|
119
|
+
}
|
|
120
|
+
for (const wfid of wfids) {
|
|
121
|
+
try {
|
|
122
|
+
const _wfh = await exec.executeWorkflowId(wfid, { isQueueDispatch: true });
|
|
123
|
+
}
|
|
124
|
+
catch (e) {
|
|
125
|
+
exec.logger.warn(`Could not execute workflow with id ${wfid}: ${e.message}`);
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
// Gradually decrease the polling interval when there's no contention
|
|
130
|
+
this.pollingIntervalMs = Math.max(this.minPollingIntervalMs, this.pollingIntervalMs * 0.9);
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
logRegisteredEndpoints(exec) {
|
|
134
|
+
const logger = exec.logger;
|
|
135
|
+
logger.info('Workflow queues:');
|
|
136
|
+
for (const [qn, q] of this.wfQueuesByName) {
|
|
137
|
+
const conc = q.concurrency !== undefined ? `global concurrency limit: ${q.concurrency}` : 'No concurrency limit set';
|
|
138
|
+
logger.info(` ${qn}: ${conc}`);
|
|
139
|
+
const workerconc = q.workerConcurrency !== undefined
|
|
140
|
+
? `worker concurrency limit: ${q.workerConcurrency}`
|
|
141
|
+
: 'No worker concurrency limit set';
|
|
142
|
+
logger.info(` ${qn}: ${workerconc}`);
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
exports.wfQueueRunner = new WFQueueRunner();
|
|
147
|
+
//# sourceMappingURL=wfqueue.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"wfqueue.js","sourceRoot":"","sources":["../../src/wfqueue.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,154 @@
|
|
|
1
|
+
import { SystemDatabase } from './system_database';
|
|
2
|
+
import { ConfiguredInstance } from './decorators';
|
|
3
|
+
import { EnqueueOptions } from './system_database';
|
|
4
|
+
export interface WorkflowParams {
|
|
5
|
+
workflowUUID?: string;
|
|
6
|
+
configuredInstance?: ConfiguredInstance | null;
|
|
7
|
+
queueName?: string;
|
|
8
|
+
executeWorkflow?: boolean;
|
|
9
|
+
timeoutMS?: number | null;
|
|
10
|
+
deadlineEpochMS?: number;
|
|
11
|
+
enqueueOptions?: EnqueueOptions;
|
|
12
|
+
}
|
|
13
|
+
export declare const DEFAULT_MAX_RECOVERY_ATTEMPTS = 100;
|
|
14
|
+
/**
|
|
15
|
+
* Configuration for `SolidActions.workflow` functions
|
|
16
|
+
*/
|
|
17
|
+
export interface WorkflowConfig {
|
|
18
|
+
/** Maximum number of recovery attempts to make on workflow function, before sending to dead-letter queue */
|
|
19
|
+
maxRecoveryAttempts?: number;
|
|
20
|
+
/** Name to use */
|
|
21
|
+
name?: string;
|
|
22
|
+
}
|
|
23
|
+
export interface WorkflowStatus {
|
|
24
|
+
readonly workflowID: string;
|
|
25
|
+
readonly status: string;
|
|
26
|
+
readonly workflowName: string;
|
|
27
|
+
readonly workflowClassName: string;
|
|
28
|
+
readonly workflowConfigName?: string;
|
|
29
|
+
readonly queueName?: string;
|
|
30
|
+
readonly authenticatedUser?: string;
|
|
31
|
+
readonly assumedRole?: string;
|
|
32
|
+
readonly authenticatedRoles?: string[];
|
|
33
|
+
readonly input?: unknown[];
|
|
34
|
+
readonly output?: unknown;
|
|
35
|
+
readonly error?: unknown;
|
|
36
|
+
readonly executorId?: string;
|
|
37
|
+
readonly applicationVersion?: string;
|
|
38
|
+
readonly createdAt: number;
|
|
39
|
+
readonly updatedAt?: number;
|
|
40
|
+
readonly timeoutMS?: number;
|
|
41
|
+
readonly deadlineEpochMS?: number;
|
|
42
|
+
readonly deduplicationID?: string;
|
|
43
|
+
readonly priority: number;
|
|
44
|
+
readonly queuePartitionKey?: string;
|
|
45
|
+
readonly forkedFrom?: string;
|
|
46
|
+
readonly applicationID: string;
|
|
47
|
+
readonly request?: object;
|
|
48
|
+
readonly recoveryAttempts?: number;
|
|
49
|
+
}
|
|
50
|
+
export interface GetWorkflowsInput {
|
|
51
|
+
workflowIDs?: string[];
|
|
52
|
+
workflowName?: string;
|
|
53
|
+
status?: 'PENDING' | 'SUCCESS' | 'ERROR' | 'MAX_RECOVERY_ATTEMPTS_EXCEEDED' | 'CANCELLED' | 'ENQUEUED';
|
|
54
|
+
startTime?: string;
|
|
55
|
+
endTime?: string;
|
|
56
|
+
authenticatedUser?: string;
|
|
57
|
+
applicationVersion?: string;
|
|
58
|
+
workflow_id_prefix?: string;
|
|
59
|
+
queueName?: string;
|
|
60
|
+
queuesOnly?: boolean;
|
|
61
|
+
forkedFrom?: string;
|
|
62
|
+
limit?: number;
|
|
63
|
+
offset?: number;
|
|
64
|
+
sortDesc?: boolean;
|
|
65
|
+
loadInput?: boolean;
|
|
66
|
+
loadOutput?: boolean;
|
|
67
|
+
}
|
|
68
|
+
export interface GetPendingWorkflowsOutput {
|
|
69
|
+
workflowUUID: string;
|
|
70
|
+
queueName?: string;
|
|
71
|
+
}
|
|
72
|
+
export interface StepInfo {
|
|
73
|
+
readonly functionID: number;
|
|
74
|
+
readonly name: string;
|
|
75
|
+
readonly output: unknown;
|
|
76
|
+
readonly error: Error | null;
|
|
77
|
+
readonly childWorkflowID: string | null;
|
|
78
|
+
readonly startedAtEpochMs?: number;
|
|
79
|
+
readonly completedAtEpochMs?: number;
|
|
80
|
+
}
|
|
81
|
+
export interface PgTransactionId {
|
|
82
|
+
txid: string;
|
|
83
|
+
}
|
|
84
|
+
/** Enumeration of values for workflow status */
|
|
85
|
+
export declare const StatusString: {
|
|
86
|
+
/** Workflow has may be running */
|
|
87
|
+
readonly PENDING: "PENDING";
|
|
88
|
+
/** Workflow complete with return value */
|
|
89
|
+
readonly SUCCESS: "SUCCESS";
|
|
90
|
+
/** Workflow complete with error thrown */
|
|
91
|
+
readonly ERROR: "ERROR";
|
|
92
|
+
/** Workflow has exceeded its maximum number of execution or recovery attempts */
|
|
93
|
+
readonly MAX_RECOVERY_ATTEMPTS_EXCEEDED: "MAX_RECOVERY_ATTEMPTS_EXCEEDED";
|
|
94
|
+
/** Workflow is being, or has been, cancelled */
|
|
95
|
+
readonly CANCELLED: "CANCELLED";
|
|
96
|
+
/** Workflow is on a `WorkflowQueue` and has not yet started */
|
|
97
|
+
readonly ENQUEUED: "ENQUEUED";
|
|
98
|
+
};
|
|
99
|
+
export declare function isWorkflowActive(status: string): boolean;
|
|
100
|
+
/**
|
|
101
|
+
* Object representing an active or completed workflow execution, identified by the workflow UUID.
|
|
102
|
+
* Allows retrieval of information about the workflow.
|
|
103
|
+
*/
|
|
104
|
+
export interface WorkflowHandle<R> {
|
|
105
|
+
/**
|
|
106
|
+
* Retrieve the workflow's status.
|
|
107
|
+
* Statuses are updated asynchronously.
|
|
108
|
+
*/
|
|
109
|
+
getStatus(): Promise<WorkflowStatus | null>;
|
|
110
|
+
/**
|
|
111
|
+
* Await workflow completion and return its result.
|
|
112
|
+
*/
|
|
113
|
+
getResult(): Promise<R>;
|
|
114
|
+
/**
|
|
115
|
+
* Return the workflow's ID
|
|
116
|
+
*/
|
|
117
|
+
get workflowID(): string;
|
|
118
|
+
/**
|
|
119
|
+
* Return the workflow's inputs
|
|
120
|
+
*/
|
|
121
|
+
getWorkflowInputs<T extends any[]>(): Promise<T>;
|
|
122
|
+
}
|
|
123
|
+
export interface InternalWFHandle<R> extends WorkflowHandle<R> {
|
|
124
|
+
getResult(funcIdForGet?: number): Promise<R>;
|
|
125
|
+
}
|
|
126
|
+
/**
|
|
127
|
+
* The handle returned when invoking a workflow with SolidActionsExecutor.workflow
|
|
128
|
+
*/
|
|
129
|
+
export declare class InvokedHandle<R> implements InternalWFHandle<R> {
|
|
130
|
+
readonly systemDatabase: SystemDatabase;
|
|
131
|
+
readonly workflowPromise: Promise<R>;
|
|
132
|
+
readonly workflowUUID: string;
|
|
133
|
+
readonly workflowName: string;
|
|
134
|
+
constructor(systemDatabase: SystemDatabase, workflowPromise: Promise<R>, workflowUUID: string, workflowName: string);
|
|
135
|
+
getWorkflowUUID(): string;
|
|
136
|
+
get workflowID(): string;
|
|
137
|
+
getStatus(): Promise<WorkflowStatus | null>;
|
|
138
|
+
getResult(funcIdForGet?: number): Promise<R>;
|
|
139
|
+
getWorkflowInputs<T extends any[]>(): Promise<T>;
|
|
140
|
+
}
|
|
141
|
+
/**
|
|
142
|
+
* The handle returned when retrieving a workflow with SolidActionsExecutor.retrieve
|
|
143
|
+
*/
|
|
144
|
+
export declare class RetrievedHandle<R> implements InternalWFHandle<R> {
|
|
145
|
+
readonly systemDatabase: SystemDatabase;
|
|
146
|
+
readonly workflowUUID: string;
|
|
147
|
+
constructor(systemDatabase: SystemDatabase, workflowUUID: string);
|
|
148
|
+
getWorkflowUUID(): string;
|
|
149
|
+
get workflowID(): string;
|
|
150
|
+
getStatus(): Promise<WorkflowStatus | null>;
|
|
151
|
+
getResult(funcIdForGet?: number): Promise<R>;
|
|
152
|
+
getWorkflowInputs<T extends any[]>(): Promise<T>;
|
|
153
|
+
}
|
|
154
|
+
//# sourceMappingURL=workflow.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"workflow.d.ts","sourceRoot":"","sources":["../../src/workflow.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.RetrievedHandle = exports.InvokedHandle = exports.isWorkflowActive = exports.StatusString = exports.DEFAULT_MAX_RECOVERY_ATTEMPTS = void 0;
|
|
4
|
+
const serialization_1 = require("./serialization");
|
|
5
|
+
const solidactions_1 = require("./solidactions");
|
|
6
|
+
const solidactions_executor_1 = require("./solidactions-executor");
|
|
7
|
+
exports.DEFAULT_MAX_RECOVERY_ATTEMPTS = 100;
|
|
8
|
+
/** Enumeration of values for workflow status */
|
|
9
|
+
exports.StatusString = {
|
|
10
|
+
/** Workflow has may be running */
|
|
11
|
+
PENDING: 'PENDING',
|
|
12
|
+
/** Workflow complete with return value */
|
|
13
|
+
SUCCESS: 'SUCCESS',
|
|
14
|
+
/** Workflow complete with error thrown */
|
|
15
|
+
ERROR: 'ERROR',
|
|
16
|
+
/** Workflow has exceeded its maximum number of execution or recovery attempts */
|
|
17
|
+
MAX_RECOVERY_ATTEMPTS_EXCEEDED: 'MAX_RECOVERY_ATTEMPTS_EXCEEDED',
|
|
18
|
+
/** Workflow is being, or has been, cancelled */
|
|
19
|
+
CANCELLED: 'CANCELLED',
|
|
20
|
+
/** Workflow is on a `WorkflowQueue` and has not yet started */
|
|
21
|
+
ENQUEUED: 'ENQUEUED',
|
|
22
|
+
};
|
|
23
|
+
function isWorkflowActive(status) {
|
|
24
|
+
return status === exports.StatusString.PENDING || status === exports.StatusString.ENQUEUED;
|
|
25
|
+
}
|
|
26
|
+
exports.isWorkflowActive = isWorkflowActive;
|
|
27
|
+
/**
|
|
28
|
+
* The handle returned when invoking a workflow with SolidActionsExecutor.workflow
|
|
29
|
+
*/
|
|
30
|
+
class InvokedHandle {
|
|
31
|
+
systemDatabase;
|
|
32
|
+
workflowPromise;
|
|
33
|
+
workflowUUID;
|
|
34
|
+
workflowName;
|
|
35
|
+
constructor(systemDatabase, workflowPromise, workflowUUID, workflowName) {
|
|
36
|
+
this.systemDatabase = systemDatabase;
|
|
37
|
+
this.workflowPromise = workflowPromise;
|
|
38
|
+
this.workflowUUID = workflowUUID;
|
|
39
|
+
this.workflowName = workflowName;
|
|
40
|
+
}
|
|
41
|
+
getWorkflowUUID() {
|
|
42
|
+
return this.workflowUUID;
|
|
43
|
+
}
|
|
44
|
+
get workflowID() {
|
|
45
|
+
return this.workflowUUID;
|
|
46
|
+
}
|
|
47
|
+
async getStatus() {
|
|
48
|
+
return await solidactions_1.SolidActions.getWorkflowStatus(this.workflowUUID);
|
|
49
|
+
}
|
|
50
|
+
async getResult(funcIdForGet) {
|
|
51
|
+
return await (0, solidactions_1.runInternalStep)(async () => {
|
|
52
|
+
return await this.workflowPromise;
|
|
53
|
+
}, 'SolidActions.getResult', this.workflowUUID, funcIdForGet);
|
|
54
|
+
}
|
|
55
|
+
async getWorkflowInputs() {
|
|
56
|
+
const status = (await this.systemDatabase.getWorkflowStatus(this.workflowUUID));
|
|
57
|
+
return this.systemDatabase.getSerializer().parse(status.input);
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
exports.InvokedHandle = InvokedHandle;
|
|
61
|
+
/**
|
|
62
|
+
* The handle returned when retrieving a workflow with SolidActionsExecutor.retrieve
|
|
63
|
+
*/
|
|
64
|
+
class RetrievedHandle {
|
|
65
|
+
systemDatabase;
|
|
66
|
+
workflowUUID;
|
|
67
|
+
constructor(systemDatabase, workflowUUID) {
|
|
68
|
+
this.systemDatabase = systemDatabase;
|
|
69
|
+
this.workflowUUID = workflowUUID;
|
|
70
|
+
}
|
|
71
|
+
getWorkflowUUID() {
|
|
72
|
+
return this.workflowUUID;
|
|
73
|
+
}
|
|
74
|
+
get workflowID() {
|
|
75
|
+
return this.workflowUUID;
|
|
76
|
+
}
|
|
77
|
+
async getStatus() {
|
|
78
|
+
return await solidactions_1.SolidActions.getWorkflowStatus(this.workflowUUID);
|
|
79
|
+
}
|
|
80
|
+
async getResult(funcIdForGet) {
|
|
81
|
+
return (await solidactions_1.SolidActions.getResultInternal(this.workflowUUID, undefined, undefined, funcIdForGet));
|
|
82
|
+
}
|
|
83
|
+
async getWorkflowInputs() {
|
|
84
|
+
const status = (await this.systemDatabase.getWorkflowStatus(this.workflowUUID));
|
|
85
|
+
return this.systemDatabase.getSerializer().parse(status.input);
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
exports.RetrievedHandle = RetrievedHandle;
|
|
89
|
+
(0, serialization_1.registerSerializationRecipe)({
|
|
90
|
+
name: 'SolidActions.WorkflowHandle',
|
|
91
|
+
isApplicable: (v) => {
|
|
92
|
+
return v instanceof RetrievedHandle || v instanceof InvokedHandle;
|
|
93
|
+
},
|
|
94
|
+
serialize: (v) => {
|
|
95
|
+
return { wfid: v.workflowID };
|
|
96
|
+
},
|
|
97
|
+
deserialize: (s) => new RetrievedHandle(solidactions_executor_1.SolidActionsExecutor.globalInstance.systemDatabase, s.wfid),
|
|
98
|
+
});
|
|
99
|
+
//# sourceMappingURL=workflow.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"workflow.js","sourceRoot":"","sources":["../../src/workflow.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import type { SystemDatabase, WorkflowStatusInternal } from './system_database';
|
|
2
|
+
import type { StepInfo, WorkflowStatus, GetWorkflowsInput } from './workflow';
|
|
3
|
+
import { SolidActionsSerializer } from './serialization';
|
|
4
|
+
export declare function listWorkflows(sysdb: SystemDatabase, input: GetWorkflowsInput): Promise<WorkflowStatus[]>;
|
|
5
|
+
export declare function listQueuedWorkflows(sysdb: SystemDatabase, input: GetWorkflowsInput): Promise<WorkflowStatus[]>;
|
|
6
|
+
export declare function getWorkflow(sysdb: SystemDatabase, workflowID: string): Promise<WorkflowStatus | undefined>;
|
|
7
|
+
export declare function listWorkflowSteps(sysdb: SystemDatabase, workflowID: string): Promise<StepInfo[] | undefined>;
|
|
8
|
+
export declare function forkWorkflow(sysdb: SystemDatabase, workflowID: string, startStep: number, options?: {
|
|
9
|
+
newWorkflowID?: string;
|
|
10
|
+
applicationVersion?: string;
|
|
11
|
+
timeoutMS?: number;
|
|
12
|
+
}): Promise<string>;
|
|
13
|
+
export declare function toWorkflowStatus(internal: WorkflowStatusInternal, serializer: SolidActionsSerializer): WorkflowStatus;
|
|
14
|
+
export declare function globalTimeout(sysdb: SystemDatabase, cutoffEpochTimestampMs: number): Promise<void>;
|
|
15
|
+
//# sourceMappingURL=workflow_management.d.ts.map
|