@dbos-inc/dbos-sdk 2.1.9-preview → 2.1.12-preview

Sign up to get free protection for your applications and to get access to all the features.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@dbos-inc/dbos-sdk",
3
- "version": "2.1.9-preview",
3
+ "version": "2.1.12-preview",
4
4
  "description": "A Typescript framework built on the database",
5
5
  "license": "MIT",
6
6
  "repository": {
@@ -1,56 +0,0 @@
1
- import { DBOSExecutor } from "../dbos-executor";
2
- import { Transaction } from "../transaction";
3
- import { StepFunction } from "../step";
4
- import { UserDatabaseClient } from "../user_database";
5
- import { DBOSContextImpl } from "../context";
6
- import { ConfiguredInstance } from "../decorators";
7
- import { WFInvokeFuncs, WfInvokeWfs, WfInvokeWfsAsync, Workflow, WorkflowConfig, WorkflowContext, WorkflowHandle } from "../workflow";
8
- import { InvokeFuncsInst } from "../httpServer/handler";
9
- import { StoredProcedure } from "../procedure";
10
- import { PoolClient } from "pg";
11
- import { WorkflowQueue } from "../wfqueue";
12
- interface RecordedResult<R> {
13
- output: R;
14
- txn_snapshot: string;
15
- txn_id: string;
16
- }
17
- /**
18
- * Context used for debugging a workflow
19
- */
20
- export declare class WorkflowContextDebug extends DBOSContextImpl implements WorkflowContext {
21
- #private;
22
- readonly workflowConfig: WorkflowConfig;
23
- functionID: number;
24
- readonly isTempWorkflow: boolean;
25
- constructor(dbosExec: DBOSExecutor, parentCtx: DBOSContextImpl | undefined, workflowUUID: string, workflowConfig: WorkflowConfig, workflowName: string);
26
- functionIDGetIncrement(): number;
27
- invoke<T extends object>(object: T | ConfiguredInstance): WFInvokeFuncs<T> | InvokeFuncsInst<T>;
28
- checkTxExecution<R>(client: UserDatabaseClient, funcID: number): Promise<RecordedResult<R> | Error>;
29
- checkProcExecution<R>(client: PoolClient, funcID: number): Promise<RecordedResult<R> | Error>;
30
- /**
31
- * Execute a transactional function in debug mode.
32
- * If a debug proxy is provided, it connects to a debug proxy and everything should be read-only.
33
- */
34
- transaction<T extends unknown[], R>(txn: Transaction<T, R>, clsinst: ConfiguredInstance | null, ...args: T): Promise<R>;
35
- procedure<T extends unknown[], R>(proc: StoredProcedure<T, R>, ...args: T): Promise<R>;
36
- external<T extends unknown[], R>(stepFn: StepFunction<T, R>, _clsinst: ConfiguredInstance | null, ..._args: T): Promise<R>;
37
- startChildWorkflow<T extends any[], R>(wf: Workflow<T, R>, ...args: T): Promise<WorkflowHandle<R>>;
38
- invokeChildWorkflow<T extends unknown[], R>(wf: Workflow<T, R>, ...args: T): Promise<R>;
39
- /**
40
- * Generate a proxy object for the provided class that wraps direct calls (i.e. OpClass.someMethod(param))
41
- * to use WorkflowContext.Transaction(OpClass.someMethod, param);
42
- */
43
- proxyInvokeWF<T extends object>(object: T, workflowUUID: string | undefined, asyncWf: boolean, configuredInstance: ConfiguredInstance | null, queue?: WorkflowQueue): WfInvokeWfsAsync<T>;
44
- startWorkflow<T extends object>(target: T, workflowUUID?: string, queue?: WorkflowQueue): WfInvokeWfsAsync<T>;
45
- invokeWorkflow<T extends object>(target: T, workflowUUID?: string): WfInvokeWfs<T>;
46
- childWorkflow<T extends any[], R>(wf: Workflow<T, R>, ...args: T): Promise<WorkflowHandle<R>>;
47
- send<T>(_destinationUUID: string, _message: T, _topic?: string | undefined): Promise<void>;
48
- recv<T>(_topic?: string | undefined, _timeoutSeconds?: number | undefined): Promise<T | null>;
49
- setEvent<T>(_key: string, _value: T): Promise<void>;
50
- getEvent<T>(_workflowUUID: string, _key: string, _timeoutSeconds?: number | undefined): Promise<T | null>;
51
- retrieveWorkflow<R>(targetUUID: string): WorkflowHandle<R>;
52
- sleepms(_: number): Promise<void>;
53
- sleep(s: number): Promise<void>;
54
- }
55
- export {};
56
- //# sourceMappingURL=debug_workflow.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"debug_workflow.d.ts","sourceRoot":"","sources":["../../../src/debugger/debug_workflow.ts"],"names":[],"mappings":"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"}
@@ -1,388 +0,0 @@
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.WorkflowContextDebug = void 0;
7
- /* eslint-disable @typescript-eslint/no-explicit-any */
8
- const dbos_executor_1 = require("../dbos-executor");
9
- const transaction_1 = require("../transaction");
10
- const error_1 = require("../error");
11
- const serialize_error_1 = require("serialize-error");
12
- const context_1 = require("../context");
13
- const decorators_1 = require("../decorators");
14
- const utils_1 = require("../utils");
15
- const procedure_1 = require("../procedure");
16
- const node_assert_1 = __importDefault(require("node:assert"));
17
- /**
18
- * Context used for debugging a workflow
19
- */
20
- class WorkflowContextDebug extends context_1.DBOSContextImpl {
21
- workflowConfig;
22
- functionID = 0;
23
- #dbosExec;
24
- isTempWorkflow;
25
- constructor(dbosExec, parentCtx, workflowUUID, workflowConfig, workflowName) {
26
- const span = dbosExec.tracer.startSpan(workflowName, {
27
- operationUUID: workflowUUID,
28
- operationType: dbos_executor_1.OperationType.WORKFLOW,
29
- authenticatedUser: parentCtx?.authenticatedUser ?? "",
30
- authenticatedRoles: parentCtx?.authenticatedRoles ?? [],
31
- assumedRole: parentCtx?.assumedRole ?? "",
32
- }, parentCtx?.span);
33
- super(workflowName, span, dbosExec.logger, parentCtx);
34
- this.workflowConfig = workflowConfig;
35
- this.workflowUUID = workflowUUID;
36
- this.#dbosExec = dbosExec;
37
- this.isTempWorkflow = dbos_executor_1.DBOSExecutor.tempWorkflowName === workflowName;
38
- this.applicationConfig = dbosExec.config.application;
39
- }
40
- functionIDGetIncrement() {
41
- return this.functionID++;
42
- }
43
- invoke(object) {
44
- if (typeof object === 'function') {
45
- const ops = (0, decorators_1.getRegisteredOperations)(object);
46
- const proxy = {};
47
- for (const op of ops) {
48
- proxy[op.name] = op.txnConfig
49
- ? (...args) => this.transaction(op.registeredFunction, null, ...args)
50
- : op.commConfig
51
- ? (...args) => this.external(op.registeredFunction, null, ...args)
52
- : op.procConfig
53
- ? (...args) => this.procedure(op.registeredFunction, ...args)
54
- : undefined;
55
- }
56
- return proxy;
57
- }
58
- else {
59
- const targetInst = object;
60
- const ops = (0, decorators_1.getRegisteredOperations)(targetInst);
61
- const proxy = {};
62
- for (const op of ops) {
63
- proxy[op.name] = op.txnConfig
64
- ? (...args) => this.transaction(op.registeredFunction, targetInst, ...args)
65
- : op.commConfig
66
- ? (...args) => this.external(op.registeredFunction, targetInst, ...args)
67
- : undefined;
68
- }
69
- return proxy;
70
- }
71
- }
72
- async #checkExecution(queryFunc, funcID) {
73
- // Note: we read the recorded snapshot and transaction ID!
74
- const query = "SELECT output, error, txn_snapshot, txn_id FROM dbos.transaction_outputs WHERE workflow_uuid=$1 AND function_id=$2";
75
- const rows = await queryFunc(query, [this.workflowUUID, funcID]);
76
- if (rows.length === 0 || rows.length > 1) {
77
- this.logger.error("Unexpected! This should never happen during debug. Found incorrect rows for transaction output. Returned rows: " + rows.toString() + `. WorkflowUUID ${this.workflowUUID}, function ID ${funcID}`);
78
- throw new error_1.DBOSDebuggerError(`This should never happen during debug. Found incorrect rows for transaction output. Returned ${rows.length} rows: ` + rows.toString());
79
- }
80
- if (utils_1.DBOSJSON.parse(rows[0].error) !== null) {
81
- return (0, serialize_error_1.deserializeError)(utils_1.DBOSJSON.parse(rows[0].error));
82
- }
83
- const res = {
84
- output: utils_1.DBOSJSON.parse(rows[0].output),
85
- txn_snapshot: rows[0].txn_snapshot,
86
- txn_id: rows[0].txn_id,
87
- };
88
- if (this.#dbosExec.debugProxy) {
89
- // Send a signal to the debug proxy.
90
- await queryFunc(`--proxy:${res.txn_id ?? ''}:${res.txn_snapshot}`, []);
91
- }
92
- return res;
93
- }
94
- async checkTxExecution(client, funcID) {
95
- const func = (sql, args) => this.#dbosExec.userDatabase.queryWithClient(client, sql, ...args);
96
- return this.#checkExecution(func, funcID);
97
- }
98
- async checkProcExecution(client, funcID) {
99
- const func = (sql, args) => client.query(sql, args).then(v => v.rows);
100
- return this.#checkExecution(func, funcID);
101
- }
102
- /**
103
- * Execute a transactional function in debug mode.
104
- * If a debug proxy is provided, it connects to a debug proxy and everything should be read-only.
105
- */
106
- async transaction(txn, clsinst, ...args) {
107
- const txnInfo = this.#dbosExec.getTransactionInfo(txn);
108
- if (txnInfo === undefined) {
109
- throw new error_1.DBOSDebuggerError(`Transaction ${txn.name} not registered!`);
110
- }
111
- // const readOnly = true; // TODO: eventually, this transaction must be read-only.
112
- const funcID = this.functionIDGetIncrement();
113
- const span = this.#dbosExec.tracer.startSpan(txn.name, {
114
- operationUUID: this.workflowUUID,
115
- operationType: dbos_executor_1.OperationType.TRANSACTION,
116
- authenticatedUser: this.authenticatedUser,
117
- authenticatedRoles: this.authenticatedRoles,
118
- assumedRole: this.assumedRole,
119
- readOnly: txnInfo.config.readOnly ?? false, // For now doing as in src/workflow.ts:272
120
- isolationLevel: txnInfo.config.isolationLevel,
121
- }, this.span);
122
- let check;
123
- const wrappedTransaction = async (client) => {
124
- // Original result must exist during replay.
125
- const tCtxt = new transaction_1.TransactionContextImpl(this.#dbosExec.userDatabase.getName(), client, this, span, this.#dbosExec.logger, funcID, txn.name);
126
- check = await this.checkTxExecution(client, funcID);
127
- if (check instanceof Error) {
128
- if (this.#dbosExec.debugProxy) {
129
- this.logger.warn(`original transaction ${txn.name} failed with error: ${check.message}`);
130
- }
131
- else {
132
- throw check; // In direct mode, directly throw the error.
133
- }
134
- }
135
- if (!this.#dbosExec.debugProxy) {
136
- // Direct mode skips execution and return the recorded result.
137
- return check.output;
138
- }
139
- // If we have a proxy, then execute the user's transaction.
140
- let cresult;
141
- await (0, context_1.runWithTransactionContext)(tCtxt, async () => {
142
- cresult = await txn.call(clsinst, tCtxt, ...args);
143
- });
144
- const result = cresult;
145
- return result;
146
- };
147
- let result;
148
- try {
149
- result = await this.#dbosExec.userDatabase.transaction(wrappedTransaction, txnInfo.config);
150
- }
151
- catch (e) {
152
- result = e;
153
- }
154
- check = check;
155
- result = result;
156
- if (check instanceof Error) {
157
- throw check;
158
- }
159
- // If returned nothing and the recorded value is also null/undefined, we just return it
160
- if (result === undefined && !check.output) {
161
- return result;
162
- }
163
- if (utils_1.DBOSJSON.stringify(check.output) !== utils_1.DBOSJSON.stringify(result)) {
164
- this.logger.error(`Detected different transaction output than the original one!\n Result: ${utils_1.DBOSJSON.stringify(result)}\n Original: ${utils_1.DBOSJSON.stringify(check.output)}`);
165
- }
166
- return check.output; // Always return the recorded result.
167
- }
168
- async procedure(proc, ...args) {
169
- const procInfo = this.#dbosExec.getProcedureInfo(proc);
170
- if (procInfo === undefined) {
171
- throw new error_1.DBOSDebuggerError(proc.name);
172
- }
173
- const funcId = this.functionIDGetIncrement();
174
- const span = this.#dbosExec.tracer.startSpan(proc.name, {
175
- operationUUID: this.workflowUUID,
176
- operationType: dbos_executor_1.OperationType.PROCEDURE,
177
- authenticatedUser: this.authenticatedUser,
178
- assumedRole: this.assumedRole,
179
- authenticatedRoles: this.authenticatedRoles,
180
- readOnly: procInfo.config.readOnly ?? false,
181
- isolationLevel: procInfo.config.isolationLevel ?? transaction_1.IsolationLevel.Serializable,
182
- }, this.span);
183
- let check;
184
- const wrappedProcedure = async (client) => {
185
- check = await this.checkProcExecution(client, funcId);
186
- const procCtxt = new procedure_1.StoredProcedureContextImpl(client, this, span, this.#dbosExec.logger, funcId, proc.name);
187
- if (check instanceof Error) {
188
- if (this.#dbosExec.debugProxy) {
189
- this.logger.warn(`original procedure ${proc.name} failed with error: ${check.message}`);
190
- }
191
- else {
192
- throw check; // In direct mode, directly throw the error.
193
- }
194
- }
195
- if (!this.#dbosExec.debugProxy) {
196
- // Direct mode skips execution and return the recorded result.
197
- return check.output;
198
- }
199
- // If we have a proxy, then execute the user's transaction.
200
- const result = await proc(procCtxt, ...args);
201
- return result;
202
- };
203
- let result;
204
- try {
205
- result = await this.#dbosExec.invokeStoredProcFunction(wrappedProcedure, procInfo.config);
206
- }
207
- catch (e) {
208
- result = e;
209
- }
210
- check = check;
211
- result = result;
212
- if (check instanceof Error) {
213
- throw check;
214
- }
215
- // If returned nothing and the recorded value is also null/undefined, we just return it
216
- if (result === undefined && !check.output) {
217
- return result;
218
- }
219
- try {
220
- node_assert_1.default.deepStrictEqual(result, check.output);
221
- }
222
- catch {
223
- this.logger.error(`Detected different transaction output than the original one!\n Result: ${JSON.stringify(result)}\n Original: ${JSON.stringify(check.output)}`);
224
- }
225
- return check.output; // Always return the recorded result.
226
- }
227
- async external(stepFn, _clsinst, ..._args) {
228
- const commConfig = this.#dbosExec.getStepInfo(stepFn);
229
- if (commConfig === undefined) {
230
- throw new error_1.DBOSDebuggerError(`Step ${stepFn.name} not registered!`);
231
- }
232
- const funcID = this.functionIDGetIncrement();
233
- // FIXME: we do not create a span for the replay step. Do we want to?
234
- // Original result must exist during replay.
235
- const check = await this.#dbosExec.systemDatabase.checkOperationOutput(this.workflowUUID, funcID);
236
- if (check === dbos_executor_1.dbosNull) {
237
- throw new error_1.DBOSDebuggerError(`Cannot find recorded step output for ${stepFn.name}. Shouldn't happen in debug mode!`);
238
- }
239
- this.logger.debug("Use recorded step output.");
240
- return check;
241
- }
242
- // Invoke the debugWorkflow() function instead.
243
- async startChildWorkflow(wf, ...args) {
244
- const funcId = this.functionIDGetIncrement();
245
- const childUUID = this.workflowUUID + "-" + funcId;
246
- return this.#dbosExec.debugWorkflow(wf, { parentCtx: this, workflowUUID: childUUID }, this.workflowUUID, funcId, ...args);
247
- }
248
- async invokeChildWorkflow(wf, ...args) {
249
- return this.startChildWorkflow(wf, ...args).then((handle) => handle.getResult());
250
- }
251
- /**
252
- * Generate a proxy object for the provided class that wraps direct calls (i.e. OpClass.someMethod(param))
253
- * to use WorkflowContext.Transaction(OpClass.someMethod, param);
254
- */
255
- proxyInvokeWF(object, workflowUUID, asyncWf, configuredInstance, queue) {
256
- const ops = (0, decorators_1.getRegisteredOperations)(object);
257
- const proxy = {};
258
- const funcId = this.functionIDGetIncrement();
259
- const childUUID = workflowUUID || (this.workflowUUID + "-" + funcId);
260
- const params = { workflowUUID: childUUID, parentCtx: this, configuredInstance, queueName: queue?.name };
261
- for (const op of ops) {
262
- if (asyncWf) {
263
- proxy[op.name] = op.workflowConfig
264
- ? (...args) => this.#dbosExec.debugWorkflow(op.registeredFunction, params, this.workflowUUID, funcId, ...args)
265
- : undefined;
266
- }
267
- else {
268
- proxy[op.name] = op.workflowConfig
269
- ? (...args) => this.#dbosExec.debugWorkflow(op.registeredFunction, params, this.workflowUUID, funcId, ...args)
270
- .then((handle) => handle.getResult())
271
- : undefined;
272
- }
273
- }
274
- return proxy;
275
- }
276
- startWorkflow(target, workflowUUID, queue) {
277
- if (typeof target === 'function') {
278
- return this.proxyInvokeWF(target, workflowUUID, true, null, queue);
279
- }
280
- else {
281
- return this.proxyInvokeWF(target, workflowUUID, true, target, queue);
282
- }
283
- }
284
- invokeWorkflow(target, workflowUUID) {
285
- if (typeof target === 'function') {
286
- return this.proxyInvokeWF(target, workflowUUID, false, null);
287
- }
288
- else {
289
- return this.proxyInvokeWF(target, workflowUUID, false, target);
290
- }
291
- }
292
- async childWorkflow(wf, ...args) {
293
- return this.startChildWorkflow(wf, ...args);
294
- }
295
- async send(_destinationUUID, _message, _topic) {
296
- const functionID = this.functionIDGetIncrement();
297
- // Original result must exist during replay.
298
- const check = await this.#dbosExec.systemDatabase.checkOperationOutput(this.workflowUUID, functionID);
299
- if (check === dbos_executor_1.dbosNull) {
300
- throw new error_1.DBOSDebuggerError(`Cannot find recorded send. Shouldn't happen in debug mode!`);
301
- }
302
- this.logger.debug("Use recorded send output.");
303
- return;
304
- }
305
- async recv(_topic, _timeoutSeconds) {
306
- const functionID = this.functionIDGetIncrement();
307
- //Increment once more to account for the timeoutFunctionID created by workflow
308
- this.functionIDGetIncrement();
309
- // Original result must exist during replay.
310
- const check = await this.#dbosExec.systemDatabase.checkOperationOutput(this.workflowUUID, functionID);
311
- if (check === dbos_executor_1.dbosNull) {
312
- throw new error_1.DBOSDebuggerError(`Cannot find recorded recv. Shouldn't happen in debug mode!`);
313
- }
314
- this.logger.debug("Use recorded recv output.");
315
- return check;
316
- }
317
- async setEvent(_key, _value) {
318
- const functionID = this.functionIDGetIncrement();
319
- // Original result must exist during replay.
320
- const check = await this.#dbosExec.systemDatabase.checkOperationOutput(this.workflowUUID, functionID);
321
- if (check === dbos_executor_1.dbosNull) {
322
- throw new error_1.DBOSDebuggerError(`Cannot find recorded setEvent. Shouldn't happen in debug mode!`);
323
- }
324
- this.logger.debug("Use recorded setEvent output.");
325
- }
326
- async getEvent(_workflowUUID, _key, _timeoutSeconds) {
327
- const functionID = this.functionIDGetIncrement();
328
- //take into account the extra functionID increment from workflow
329
- this.functionIDGetIncrement();
330
- // Original result must exist during replay.
331
- const check = await this.#dbosExec.systemDatabase.checkOperationOutput(this.workflowUUID, functionID);
332
- if (check === dbos_executor_1.dbosNull) {
333
- throw new error_1.DBOSDebuggerError(`Cannot find recorded getEvent. Shouldn't happen in debug mode!`);
334
- }
335
- this.logger.debug("Use recorded getEvent output.");
336
- return check;
337
- }
338
- retrieveWorkflow(targetUUID) {
339
- // TODO: write a proper test for this.
340
- const functionID = this.functionIDGetIncrement();
341
- return new RetrievedHandleDebug(this.#dbosExec.systemDatabase, targetUUID, this.workflowUUID, functionID);
342
- }
343
- async sleepms(_) {
344
- // Need to increment function ID for faithful replay.
345
- this.functionIDGetIncrement();
346
- return Promise.resolve();
347
- }
348
- async sleep(s) {
349
- return this.sleepms(s * 1000);
350
- }
351
- }
352
- exports.WorkflowContextDebug = WorkflowContextDebug;
353
- /**
354
- * The handle returned when retrieving a workflow with Debug workflow's retrieve
355
- */
356
- class RetrievedHandleDebug {
357
- systemDatabase;
358
- workflowUUID;
359
- callerUUID;
360
- callerFunctionID;
361
- constructor(systemDatabase, workflowUUID, callerUUID, callerFunctionID) {
362
- this.systemDatabase = systemDatabase;
363
- this.workflowUUID = workflowUUID;
364
- this.callerUUID = callerUUID;
365
- this.callerFunctionID = callerFunctionID;
366
- }
367
- getWorkflowUUID() {
368
- return this.workflowUUID;
369
- }
370
- get workflowID() {
371
- return this.workflowUUID;
372
- }
373
- async getStatus() {
374
- // Must use original result.
375
- const check = await this.systemDatabase.checkOperationOutput(this.callerUUID, this.callerFunctionID);
376
- if (check === dbos_executor_1.dbosNull) {
377
- throw new error_1.DBOSDebuggerError(`Cannot find recorded workflow status. Shouldn't happen in debug mode!`);
378
- }
379
- return check;
380
- }
381
- async getResult() {
382
- return await this.systemDatabase.getWorkflowResult(this.workflowUUID);
383
- }
384
- async getWorkflowInputs() {
385
- return await this.systemDatabase.getWorkflowInputs(this.workflowUUID);
386
- }
387
- }
388
- //# sourceMappingURL=debug_workflow.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"debug_workflow.js","sourceRoot":"","sources":["../../../src/debugger/debug_workflow.ts"],"names":[],"mappings":"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"}