@dbos-inc/dbos-sdk 0.7.18-preview

Sign up to get free protection for your applications and to get access to all the features.
Files changed (203) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +30 -0
  3. package/dbos-config.schema.json +121 -0
  4. package/dbos-test-config.yaml +16 -0
  5. package/dist/schemas/system_db_schema.d.ts +34 -0
  6. package/dist/schemas/system_db_schema.d.ts.map +1 -0
  7. package/dist/schemas/system_db_schema.js +75 -0
  8. package/dist/schemas/system_db_schema.js.map +1 -0
  9. package/dist/schemas/user_db_schema.d.ts +11 -0
  10. package/dist/schemas/user_db_schema.d.ts.map +1 -0
  11. package/dist/schemas/user_db_schema.js +16 -0
  12. package/dist/schemas/user_db_schema.js.map +1 -0
  13. package/dist/src/cloud-cli/applications/configure.d.ts +2 -0
  14. package/dist/src/cloud-cli/applications/configure.d.ts.map +1 -0
  15. package/dist/src/cloud-cli/applications/configure.js +57 -0
  16. package/dist/src/cloud-cli/applications/configure.js.map +1 -0
  17. package/dist/src/cloud-cli/applications/delete-app.d.ts +2 -0
  18. package/dist/src/cloud-cli/applications/delete-app.d.ts.map +1 -0
  19. package/dist/src/cloud-cli/applications/delete-app.js +36 -0
  20. package/dist/src/cloud-cli/applications/delete-app.js.map +1 -0
  21. package/dist/src/cloud-cli/applications/deploy-app-code.d.ts +2 -0
  22. package/dist/src/cloud-cli/applications/deploy-app-code.d.ts.map +1 -0
  23. package/dist/src/cloud-cli/applications/deploy-app-code.js +64 -0
  24. package/dist/src/cloud-cli/applications/deploy-app-code.js.map +1 -0
  25. package/dist/src/cloud-cli/applications/get-app-logs.d.ts +2 -0
  26. package/dist/src/cloud-cli/applications/get-app-logs.d.ts.map +1 -0
  27. package/dist/src/cloud-cli/applications/get-app-logs.js +37 -0
  28. package/dist/src/cloud-cli/applications/get-app-logs.js.map +1 -0
  29. package/dist/src/cloud-cli/applications/index.d.ts +8 -0
  30. package/dist/src/cloud-cli/applications/index.d.ts.map +1 -0
  31. package/dist/src/cloud-cli/applications/index.js +18 -0
  32. package/dist/src/cloud-cli/applications/index.js.map +1 -0
  33. package/dist/src/cloud-cli/applications/list-apps.d.ts +2 -0
  34. package/dist/src/cloud-cli/applications/list-apps.d.ts.map +1 -0
  35. package/dist/src/cloud-cli/applications/list-apps.js +45 -0
  36. package/dist/src/cloud-cli/applications/list-apps.js.map +1 -0
  37. package/dist/src/cloud-cli/applications/register-app.d.ts +2 -0
  38. package/dist/src/cloud-cli/applications/register-app.d.ts.map +1 -0
  39. package/dist/src/cloud-cli/applications/register-app.js +41 -0
  40. package/dist/src/cloud-cli/applications/register-app.js.map +1 -0
  41. package/dist/src/cloud-cli/applications/types.d.ts +7 -0
  42. package/dist/src/cloud-cli/applications/types.d.ts.map +1 -0
  43. package/dist/src/cloud-cli/applications/types.js +3 -0
  44. package/dist/src/cloud-cli/applications/types.js.map +1 -0
  45. package/dist/src/cloud-cli/applications/update-app.d.ts +2 -0
  46. package/dist/src/cloud-cli/applications/update-app.d.ts.map +1 -0
  47. package/dist/src/cloud-cli/applications/update-app.js +42 -0
  48. package/dist/src/cloud-cli/applications/update-app.js.map +1 -0
  49. package/dist/src/cloud-cli/cli.d.ts +3 -0
  50. package/dist/src/cloud-cli/cli.d.ts.map +1 -0
  51. package/dist/src/cloud-cli/cli.js +148 -0
  52. package/dist/src/cloud-cli/cli.js.map +1 -0
  53. package/dist/src/cloud-cli/login.d.ts +7 -0
  54. package/dist/src/cloud-cli/login.d.ts.map +1 -0
  55. package/dist/src/cloud-cli/login.js +40 -0
  56. package/dist/src/cloud-cli/login.js.map +1 -0
  57. package/dist/src/cloud-cli/register.d.ts +2 -0
  58. package/dist/src/cloud-cli/register.d.ts.map +1 -0
  59. package/dist/src/cloud-cli/register.js +35 -0
  60. package/dist/src/cloud-cli/register.js.map +1 -0
  61. package/dist/src/cloud-cli/userdb.d.ts +4 -0
  62. package/dist/src/cloud-cli/userdb.d.ts.map +1 -0
  63. package/dist/src/cloud-cli/userdb.js +149 -0
  64. package/dist/src/cloud-cli/userdb.js.map +1 -0
  65. package/dist/src/cloud-cli/utils.d.ts +3 -0
  66. package/dist/src/cloud-cli/utils.d.ts.map +1 -0
  67. package/dist/src/cloud-cli/utils.js +17 -0
  68. package/dist/src/cloud-cli/utils.js.map +1 -0
  69. package/dist/src/communicator.d.ts +24 -0
  70. package/dist/src/communicator.d.ts.map +1 -0
  71. package/dist/src/communicator.js +26 -0
  72. package/dist/src/communicator.js.map +1 -0
  73. package/dist/src/context.d.ts +60 -0
  74. package/dist/src/context.d.ts.map +1 -0
  75. package/dist/src/context.js +94 -0
  76. package/dist/src/context.js.map +1 -0
  77. package/dist/src/data_validation.d.ts +3 -0
  78. package/dist/src/data_validation.d.ts.map +1 -0
  79. package/dist/src/data_validation.js +168 -0
  80. package/dist/src/data_validation.js.map +1 -0
  81. package/dist/src/dbos-executor.d.ts +79 -0
  82. package/dist/src/dbos-executor.d.ts.map +1 -0
  83. package/dist/src/dbos-executor.js +408 -0
  84. package/dist/src/dbos-executor.js.map +1 -0
  85. package/dist/src/dbos-runtime/TypeParser.d.ts +33 -0
  86. package/dist/src/dbos-runtime/TypeParser.d.ts.map +1 -0
  87. package/dist/src/dbos-runtime/TypeParser.js +104 -0
  88. package/dist/src/dbos-runtime/TypeParser.js.map +1 -0
  89. package/dist/src/dbos-runtime/applicationVersion.d.ts +3 -0
  90. package/dist/src/dbos-runtime/applicationVersion.d.ts.map +1 -0
  91. package/dist/src/dbos-runtime/applicationVersion.js +13 -0
  92. package/dist/src/dbos-runtime/applicationVersion.js.map +1 -0
  93. package/dist/src/dbos-runtime/cli.d.ts +8 -0
  94. package/dist/src/dbos-runtime/cli.d.ts.map +1 -0
  95. package/dist/src/dbos-runtime/cli.js +52 -0
  96. package/dist/src/dbos-runtime/cli.js.map +1 -0
  97. package/dist/src/dbos-runtime/config.d.ts +28 -0
  98. package/dist/src/dbos-runtime/config.d.ts.map +1 -0
  99. package/dist/src/dbos-runtime/config.js +111 -0
  100. package/dist/src/dbos-runtime/config.js.map +1 -0
  101. package/dist/src/dbos-runtime/init.d.ts +7 -0
  102. package/dist/src/dbos-runtime/init.d.ts.map +1 -0
  103. package/dist/src/dbos-runtime/init.js +51 -0
  104. package/dist/src/dbos-runtime/init.js.map +1 -0
  105. package/dist/src/dbos-runtime/openApi.d.ts +35 -0
  106. package/dist/src/dbos-runtime/openApi.d.ts.map +1 -0
  107. package/dist/src/dbos-runtime/openApi.js +595 -0
  108. package/dist/src/dbos-runtime/openApi.js.map +1 -0
  109. package/dist/src/dbos-runtime/runtime.d.ts +28 -0
  110. package/dist/src/dbos-runtime/runtime.d.ts.map +1 -0
  111. package/dist/src/dbos-runtime/runtime.js +96 -0
  112. package/dist/src/dbos-runtime/runtime.js.map +1 -0
  113. package/dist/src/dbos-runtime/tsDiagUtil.d.ts +16 -0
  114. package/dist/src/dbos-runtime/tsDiagUtil.d.ts.map +1 -0
  115. package/dist/src/dbos-runtime/tsDiagUtil.js +72 -0
  116. package/dist/src/dbos-runtime/tsDiagUtil.js.map +1 -0
  117. package/dist/src/decorators.d.ts +118 -0
  118. package/dist/src/decorators.d.ts.map +1 -0
  119. package/dist/src/decorators.js +467 -0
  120. package/dist/src/decorators.js.map +1 -0
  121. package/dist/src/error.d.ts +44 -0
  122. package/dist/src/error.d.ts.map +1 -0
  123. package/dist/src/error.js +164 -0
  124. package/dist/src/error.js.map +1 -0
  125. package/dist/src/httpServer/handler.d.ts +62 -0
  126. package/dist/src/httpServer/handler.d.ts.map +1 -0
  127. package/dist/src/httpServer/handler.js +168 -0
  128. package/dist/src/httpServer/handler.js.map +1 -0
  129. package/dist/src/httpServer/middleware.d.ts +56 -0
  130. package/dist/src/httpServer/middleware.d.ts.map +1 -0
  131. package/dist/src/httpServer/middleware.js +57 -0
  132. package/dist/src/httpServer/middleware.js.map +1 -0
  133. package/dist/src/httpServer/server.d.ts +40 -0
  134. package/dist/src/httpServer/server.d.ts.map +1 -0
  135. package/dist/src/httpServer/server.js +231 -0
  136. package/dist/src/httpServer/server.js.map +1 -0
  137. package/dist/src/index.d.ts +12 -0
  138. package/dist/src/index.d.ts.map +1 -0
  139. package/dist/src/index.js +75 -0
  140. package/dist/src/index.js.map +1 -0
  141. package/dist/src/provenance/provenance_daemon.d.ts +34 -0
  142. package/dist/src/provenance/provenance_daemon.d.ts.map +1 -0
  143. package/dist/src/provenance/provenance_daemon.js +86 -0
  144. package/dist/src/provenance/provenance_daemon.js.map +1 -0
  145. package/dist/src/system_database.d.ts +69 -0
  146. package/dist/src/system_database.d.ts.map +1 -0
  147. package/dist/src/system_database.js +384 -0
  148. package/dist/src/system_database.js.map +1 -0
  149. package/dist/src/telemetry/collector.d.ts +17 -0
  150. package/dist/src/telemetry/collector.d.ts.map +1 -0
  151. package/dist/src/telemetry/collector.js +77 -0
  152. package/dist/src/telemetry/collector.js.map +1 -0
  153. package/dist/src/telemetry/exporters.d.ts +29 -0
  154. package/dist/src/telemetry/exporters.d.ts.map +1 -0
  155. package/dist/src/telemetry/exporters.js +186 -0
  156. package/dist/src/telemetry/exporters.js.map +1 -0
  157. package/dist/src/telemetry/index.d.ts +7 -0
  158. package/dist/src/telemetry/index.d.ts.map +1 -0
  159. package/dist/src/telemetry/index.js +3 -0
  160. package/dist/src/telemetry/index.js.map +1 -0
  161. package/dist/src/telemetry/logs.d.ts +25 -0
  162. package/dist/src/telemetry/logs.d.ts.map +1 -0
  163. package/dist/src/telemetry/logs.js +91 -0
  164. package/dist/src/telemetry/logs.js.map +1 -0
  165. package/dist/src/telemetry/signals.d.ts +30 -0
  166. package/dist/src/telemetry/signals.d.ts.map +1 -0
  167. package/dist/src/telemetry/signals.js +11 -0
  168. package/dist/src/telemetry/signals.js.map +1 -0
  169. package/dist/src/telemetry/traces.d.ts +17 -0
  170. package/dist/src/telemetry/traces.d.ts.map +1 -0
  171. package/dist/src/telemetry/traces.js +76 -0
  172. package/dist/src/telemetry/traces.js.map +1 -0
  173. package/dist/src/testing/testing_runtime.d.ts +76 -0
  174. package/dist/src/testing/testing_runtime.d.ts.map +1 -0
  175. package/dist/src/testing/testing_runtime.js +147 -0
  176. package/dist/src/testing/testing_runtime.js.map +1 -0
  177. package/dist/src/transaction.d.ts +28 -0
  178. package/dist/src/transaction.d.ts.map +1 -0
  179. package/dist/src/transaction.js +27 -0
  180. package/dist/src/transaction.js.map +1 -0
  181. package/dist/src/user_database.d.ts +132 -0
  182. package/dist/src/user_database.d.ts.map +1 -0
  183. package/dist/src/user_database.js +324 -0
  184. package/dist/src/user_database.js.map +1 -0
  185. package/dist/src/utils.d.ts +6 -0
  186. package/dist/src/utils.d.ts.map +1 -0
  187. package/dist/src/utils.js +35 -0
  188. package/dist/src/utils.js.map +1 -0
  189. package/dist/src/workflow.d.ts +179 -0
  190. package/dist/src/workflow.d.ts.map +1 -0
  191. package/dist/src/workflow.js +446 -0
  192. package/dist/src/workflow.js.map +1 -0
  193. package/examples/hello/README.md +41 -0
  194. package/examples/hello/dbos-config.yaml +15 -0
  195. package/examples/hello/jest.config.js +8 -0
  196. package/examples/hello/knexfile.ts +23 -0
  197. package/examples/hello/migrations/create_dbos_hello_tables.ts +12 -0
  198. package/examples/hello/package.json +21 -0
  199. package/examples/hello/src/operations.test.ts +38 -0
  200. package/examples/hello/src/operations.ts +21 -0
  201. package/examples/hello/start_postgres_docker.sh +23 -0
  202. package/examples/hello/tsconfig.json +24 -0
  203. package/package.json +78 -0
@@ -0,0 +1,408 @@
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.DBOSExecutor = exports.dbosNull = void 0;
7
+ /* eslint-disable @typescript-eslint/no-explicit-any */
8
+ const error_1 = require("./error");
9
+ const workflow_1 = require("./workflow");
10
+ const exporters_1 = require("./telemetry/exporters");
11
+ const collector_1 = require("./telemetry/collector");
12
+ const traces_1 = require("./telemetry/traces");
13
+ const logs_1 = require("./telemetry/logs");
14
+ const system_database_1 = require("./system_database");
15
+ const uuid_1 = require("uuid");
16
+ const user_database_1 = require("./user_database");
17
+ const decorators_1 = require("./decorators");
18
+ const api_1 = require("@opentelemetry/api");
19
+ const knex_1 = __importDefault(require("knex"));
20
+ const context_1 = require("./context");
21
+ exports.dbosNull = {};
22
+ class DBOSExecutor {
23
+ config;
24
+ initialized;
25
+ // User Database
26
+ userDatabase = null;
27
+ // System Database
28
+ systemDatabase;
29
+ // Temporary workflows are created by calling transaction/send/recv directly from the executor class
30
+ tempWorkflowName = "temp_workflow";
31
+ workflowInfoMap = new Map([
32
+ // We initialize the map with an entry for temporary workflows.
33
+ [
34
+ this.tempWorkflowName,
35
+ {
36
+ // eslint-disable-next-line @typescript-eslint/require-await
37
+ workflow: async () => this.logger.error("UNREACHABLE: Indirect invoke of temp workflow"),
38
+ config: {},
39
+ },
40
+ ],
41
+ ]);
42
+ transactionConfigMap = new Map();
43
+ communicatorConfigMap = new Map();
44
+ topicConfigMap = new Map();
45
+ registeredOperations = [];
46
+ initialEpochTimeMs;
47
+ pendingWorkflowMap = new Map(); // Map from workflowUUID to workflow promise.
48
+ telemetryCollector;
49
+ flushBufferIntervalMs = 1000;
50
+ flushBufferID;
51
+ static defaultNotificationTimeoutSec = 60;
52
+ logger;
53
+ tracer;
54
+ // eslint-disable-next-line @typescript-eslint/ban-types
55
+ entities = [];
56
+ /* WORKFLOW EXECUTOR LIFE CYCLE MANAGEMENT */
57
+ constructor(config, systemDatabase) {
58
+ this.config = config;
59
+ this.logger = (0, logs_1.createGlobalLogger)(this.config.telemetry?.logs);
60
+ if (systemDatabase) {
61
+ this.logger.debug("Using provided system database"); // XXX print the name or something
62
+ this.systemDatabase = systemDatabase;
63
+ }
64
+ else {
65
+ this.logger.debug("Using Postgres system database");
66
+ this.systemDatabase = new system_database_1.PostgresSystemDatabase(this.config.poolConfig, this.config.system_database, this.logger);
67
+ }
68
+ this.flushBufferID = setInterval(() => {
69
+ void this.flushWorkflowStatusBuffer();
70
+ }, this.flushBufferIntervalMs);
71
+ this.logger.debug('Started workflow status buffer worker');
72
+ // Add Jaeger exporter if tracing is enabled
73
+ const telemetryExporters = [];
74
+ if (this.config.telemetry?.traces?.enabled) {
75
+ telemetryExporters.push(new exporters_1.JaegerExporter(this.config.telemetry?.traces?.endpoint));
76
+ this.logger.debug("Loaded Jaeger Telemetry Exporter");
77
+ }
78
+ this.telemetryCollector = new collector_1.TelemetryCollector(telemetryExporters);
79
+ this.tracer = new traces_1.Tracer(this.telemetryCollector);
80
+ this.initialized = false;
81
+ this.initialEpochTimeMs = Date.now();
82
+ }
83
+ configureDbClient() {
84
+ const userDbClient = this.config.userDbclient;
85
+ if (userDbClient === user_database_1.UserDatabaseName.PRISMA) {
86
+ // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment, @typescript-eslint/no-var-requires
87
+ const { PrismaClient } = require('@prisma/client');
88
+ // eslint-disable-next-line @typescript-eslint/no-unsafe-argument, @typescript-eslint/no-unsafe-call
89
+ this.userDatabase = new user_database_1.PrismaUserDatabase(new PrismaClient());
90
+ this.logger.debug("Loaded Prisma user database");
91
+ }
92
+ else if (userDbClient === user_database_1.UserDatabaseName.TYPEORM) {
93
+ // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment, @typescript-eslint/no-var-requires
94
+ const DataSourceExports = require('typeorm');
95
+ try {
96
+ // eslint-disable-next-line @typescript-eslint/no-unsafe-argument, @typescript-eslint/no-unsafe-call, @typescript-eslint/no-unsafe-member-access
97
+ this.userDatabase = new user_database_1.TypeORMDatabase(new DataSourceExports.DataSource({
98
+ type: "postgres",
99
+ host: this.config.poolConfig.host,
100
+ port: this.config.poolConfig.port,
101
+ username: this.config.poolConfig.user,
102
+ password: this.config.poolConfig.password,
103
+ database: this.config.poolConfig.database,
104
+ // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment, @typescript-eslint/no-unsafe-member-access
105
+ entities: this.entities
106
+ }));
107
+ }
108
+ catch (s) {
109
+ this.logger.error("Error loading TypeORM user database");
110
+ }
111
+ this.logger.debug("Loaded TypeORM user database");
112
+ }
113
+ else if (userDbClient === user_database_1.UserDatabaseName.KNEX) {
114
+ const knexConfig = {
115
+ client: 'postgres',
116
+ connection: {
117
+ host: this.config.poolConfig.host,
118
+ port: this.config.poolConfig.port,
119
+ user: this.config.poolConfig.user,
120
+ password: this.config.poolConfig.password,
121
+ database: this.config.poolConfig.database,
122
+ ssl: this.config.poolConfig.ssl,
123
+ }
124
+ };
125
+ this.userDatabase = new user_database_1.KnexUserDatabase((0, knex_1.default)(knexConfig));
126
+ this.logger.debug("Loaded Knex user database");
127
+ }
128
+ else {
129
+ this.userDatabase = new user_database_1.PGNodeUserDatabase(this.config.poolConfig);
130
+ this.logger.debug("Loaded Postgres user database");
131
+ }
132
+ }
133
+ #registerClass(cls) {
134
+ const registeredClassOperations = (0, decorators_1.getRegisteredOperations)(cls);
135
+ this.registeredOperations.push(...registeredClassOperations);
136
+ for (const ro of registeredClassOperations) {
137
+ if (ro.workflowConfig) {
138
+ const wf = ro.registeredFunction;
139
+ this.#registerWorkflow(wf, ro.workflowConfig);
140
+ this.logger.debug(`Registered workflow ${ro.name}`);
141
+ }
142
+ else if (ro.txnConfig) {
143
+ const tx = ro.registeredFunction;
144
+ this.#registerTransaction(tx, ro.txnConfig);
145
+ this.logger.debug(`Registered transaction ${ro.name}`);
146
+ }
147
+ else if (ro.commConfig) {
148
+ const comm = ro.registeredFunction;
149
+ this.#registerCommunicator(comm, ro.commConfig);
150
+ this.logger.debug(`Registered communicator ${ro.name}`);
151
+ }
152
+ }
153
+ }
154
+ async init(...classes) {
155
+ if (this.initialized) {
156
+ this.logger.error("Workflow executor already initialized!");
157
+ return;
158
+ }
159
+ try {
160
+ for (const cls of classes) {
161
+ const reg = (0, decorators_1.getOrCreateClassRegistration)(cls);
162
+ if (reg.ormEntities.length > 0) {
163
+ this.entities = this.entities.concat(reg.ormEntities);
164
+ this.logger.debug(`Loaded ${reg.ormEntities.length} ORM entities`);
165
+ }
166
+ }
167
+ this.configureDbClient();
168
+ if (!this.userDatabase) {
169
+ this.logger.error("No user database configured!");
170
+ throw new error_1.DBOSInitializationError("No user database configured!");
171
+ }
172
+ for (const cls of classes) {
173
+ this.#registerClass(cls);
174
+ }
175
+ await this.telemetryCollector.init(this.registeredOperations);
176
+ await this.userDatabase.init();
177
+ await this.systemDatabase.init();
178
+ }
179
+ catch (err) {
180
+ if (err instanceof Error) {
181
+ this.logger.error(`failed to initialize workflow executor: ${err.message}`, err, err.stack);
182
+ throw new error_1.DBOSInitializationError(err.message);
183
+ }
184
+ }
185
+ await this.recoverPendingWorkflows();
186
+ this.initialized = true;
187
+ for (const v of this.registeredOperations) {
188
+ const m = v;
189
+ if (m.init === true) {
190
+ this.logger.debug("Executing init method: " + m.name);
191
+ await m.origFunction(new context_1.InitContext(this));
192
+ }
193
+ }
194
+ this.logger.info("Workflow executor initialized");
195
+ }
196
+ async destroy() {
197
+ if (this.pendingWorkflowMap.size > 0) {
198
+ this.logger.info("Waiting for pending workflows to finish.");
199
+ await Promise.allSettled(this.pendingWorkflowMap.values());
200
+ }
201
+ clearInterval(this.flushBufferID);
202
+ await this.flushWorkflowStatusBuffer();
203
+ await this.systemDatabase.destroy();
204
+ await this.userDatabase.destroy();
205
+ await this.telemetryCollector.destroy();
206
+ }
207
+ /* WORKFLOW OPERATIONS */
208
+ #registerWorkflow(wf, config = {}) {
209
+ if (wf.name === this.tempWorkflowName || this.workflowInfoMap.has(wf.name)) {
210
+ throw new error_1.DBOSError(`Repeated workflow name: ${wf.name}`);
211
+ }
212
+ const workflowInfo = {
213
+ workflow: wf,
214
+ config: config,
215
+ };
216
+ this.workflowInfoMap.set(wf.name, workflowInfo);
217
+ }
218
+ #registerTransaction(txn, params = {}) {
219
+ if (this.transactionConfigMap.has(txn.name)) {
220
+ throw new error_1.DBOSError(`Repeated Transaction name: ${txn.name}`);
221
+ }
222
+ this.transactionConfigMap.set(txn.name, params);
223
+ }
224
+ #registerCommunicator(comm, params = {}) {
225
+ if (this.communicatorConfigMap.has(comm.name)) {
226
+ throw new error_1.DBOSError(`Repeated Commmunicator name: ${comm.name}`);
227
+ }
228
+ this.communicatorConfigMap.set(comm.name, params);
229
+ }
230
+ async workflow(wf, params, ...args) {
231
+ return this.internalWorkflow(wf, params, undefined, undefined, ...args);
232
+ }
233
+ // If callerUUID and functionID are set, it means the workflow is invoked from within a workflow.
234
+ async internalWorkflow(wf, params, callerUUID, callerFunctionID, ...args) {
235
+ const workflowUUID = params.workflowUUID ? params.workflowUUID : this.#generateUUID();
236
+ const wInfo = this.workflowInfoMap.get(wf.name);
237
+ if (wInfo === undefined) {
238
+ throw new error_1.DBOSNotRegisteredError(wf.name);
239
+ }
240
+ const wConfig = wInfo.config;
241
+ const wCtxt = new workflow_1.WorkflowContextImpl(this, params.parentCtx, workflowUUID, wConfig, wf.name);
242
+ wCtxt.span.setAttributes({ args: JSON.stringify(args) }); // TODO enforce skipLogging & request for hashing
243
+ // Synchronously set the workflow's status to PENDING and record workflow inputs. Not needed for temporary workflows.
244
+ if (!wCtxt.isTempWorkflow) {
245
+ args = await this.systemDatabase.initWorkflowStatus(workflowUUID, wf.name, wCtxt.authenticatedUser, wCtxt.assumedRole, wCtxt.authenticatedRoles, wCtxt.request, args);
246
+ }
247
+ const runWorkflow = async () => {
248
+ // Check if the workflow previously ran.
249
+ const previousOutput = await this.systemDatabase.checkWorkflowOutput(workflowUUID);
250
+ if (previousOutput !== exports.dbosNull) {
251
+ wCtxt.span.setAttribute("cached", true);
252
+ wCtxt.span.setStatus({ code: api_1.SpanStatusCode.OK });
253
+ this.tracer.endSpan(wCtxt.span);
254
+ return previousOutput;
255
+ }
256
+ let result;
257
+ // Execute the workflow.
258
+ try {
259
+ result = await wf(wCtxt, ...args);
260
+ this.systemDatabase.bufferWorkflowOutput(workflowUUID, result);
261
+ wCtxt.span.setStatus({ code: api_1.SpanStatusCode.OK });
262
+ }
263
+ catch (err) {
264
+ if (err instanceof error_1.DBOSWorkflowConflictUUIDError) {
265
+ // Retrieve the handle and wait for the result.
266
+ const retrievedHandle = this.retrieveWorkflow(workflowUUID);
267
+ result = await retrievedHandle.getResult();
268
+ wCtxt.span.setAttribute("cached", true);
269
+ wCtxt.span.setStatus({ code: api_1.SpanStatusCode.OK });
270
+ }
271
+ else {
272
+ // Record the error.
273
+ const e = err;
274
+ this.logger.error(e);
275
+ await this.systemDatabase.recordWorkflowError(workflowUUID, e);
276
+ // TODO: Log errors, but not in the tests when they're expected.
277
+ wCtxt.span.setStatus({ code: api_1.SpanStatusCode.ERROR, message: e.message });
278
+ throw err;
279
+ }
280
+ }
281
+ finally {
282
+ this.tracer.endSpan(wCtxt.span);
283
+ }
284
+ return result;
285
+ };
286
+ const workflowPromise = runWorkflow();
287
+ // Need to await for the workflow and capture errors.
288
+ const awaitWorkflowPromise = workflowPromise
289
+ .catch((error) => {
290
+ this.logger.debug("Captured error in awaitWorkflowPromise: " + error);
291
+ })
292
+ .finally(() => {
293
+ // Remove itself from pending workflow map.
294
+ this.pendingWorkflowMap.delete(workflowUUID);
295
+ });
296
+ this.pendingWorkflowMap.set(workflowUUID, awaitWorkflowPromise);
297
+ // Return the normal handle that doesn't capture errors.
298
+ return new workflow_1.InvokedHandle(this.systemDatabase, workflowPromise, workflowUUID, wf.name, callerUUID, callerFunctionID);
299
+ }
300
+ async transaction(txn, params, ...args) {
301
+ // Create a workflow and call transaction.
302
+ const temp_workflow = async (ctxt, ...args) => {
303
+ const ctxtImpl = ctxt;
304
+ return await ctxtImpl.transaction(txn, ...args);
305
+ };
306
+ return (await this.workflow(temp_workflow, params, ...args)).getResult();
307
+ }
308
+ async external(commFn, params, ...args) {
309
+ // Create a workflow and call external.
310
+ const temp_workflow = async (ctxt, ...args) => {
311
+ const ctxtImpl = ctxt;
312
+ return await ctxtImpl.external(commFn, ...args);
313
+ };
314
+ return (await this.workflow(temp_workflow, params, ...args)).getResult();
315
+ }
316
+ async send(destinationUUID, message, topic, idempotencyKey) {
317
+ // Create a workflow and call send.
318
+ const temp_workflow = async (ctxt, destinationUUID, message, topic) => {
319
+ return await ctxt.send(destinationUUID, message, topic);
320
+ };
321
+ const workflowUUID = idempotencyKey ? destinationUUID + idempotencyKey : undefined;
322
+ return (await this.workflow(temp_workflow, { workflowUUID: workflowUUID }, destinationUUID, message, topic)).getResult();
323
+ }
324
+ /**
325
+ * Wait for a workflow to emit an event, then return its value.
326
+ */
327
+ async getEvent(workflowUUID, key, timeoutSeconds = DBOSExecutor.defaultNotificationTimeoutSec) {
328
+ return this.systemDatabase.getEvent(workflowUUID, key, timeoutSeconds);
329
+ }
330
+ /**
331
+ * Retrieve a handle for a workflow UUID.
332
+ */
333
+ retrieveWorkflow(workflowUUID) {
334
+ return new workflow_1.RetrievedHandle(this.systemDatabase, workflowUUID);
335
+ }
336
+ /* INTERNAL HELPERS */
337
+ #generateUUID() {
338
+ return (0, uuid_1.v4)();
339
+ }
340
+ /**
341
+ * A recovery process that by default runs during executor init time.
342
+ * It runs to completion all pending workflows that were executing when the previous executor failed.
343
+ */
344
+ async recoverPendingWorkflows(executorIDs = ["local"]) {
345
+ const pendingWorkflows = [];
346
+ for (const execID of executorIDs) {
347
+ this.logger.debug(`Recovering workflows of executor: ${execID}`);
348
+ const wIDs = await this.systemDatabase.getPendingWorkflows(execID);
349
+ pendingWorkflows.push(...wIDs);
350
+ }
351
+ const handlerArray = [];
352
+ for (const workflowUUID of pendingWorkflows) {
353
+ try {
354
+ const wfStatus = await this.systemDatabase.getWorkflowStatus(workflowUUID);
355
+ const inputs = await this.systemDatabase.getWorkflowInputs(workflowUUID);
356
+ if (!inputs || !wfStatus) {
357
+ this.logger.error(`Failed to find inputs during recover, workflow UUID: ${workflowUUID}`);
358
+ continue;
359
+ }
360
+ const wfInfo = this.workflowInfoMap.get(wfStatus.workflowName);
361
+ const parentCtx = this.#getRecoveryContext(workflowUUID, wfStatus);
362
+ // eslint-disable-next-line @typescript-eslint/no-unsafe-argument
363
+ handlerArray.push(await this.workflow(wfInfo.workflow, { workflowUUID: workflowUUID, parentCtx: parentCtx ?? undefined }, ...inputs));
364
+ }
365
+ catch (e) {
366
+ this.logger.warn(`Recovery of workflow ${workflowUUID} failed:`, e);
367
+ }
368
+ }
369
+ return handlerArray;
370
+ }
371
+ #getRecoveryContext(workflowUUID, status) {
372
+ const span = this.tracer.startSpan(status.workflowName);
373
+ span.setAttributes({
374
+ operationName: status.workflowName,
375
+ });
376
+ const oc = new context_1.DBOSContextImpl(status.workflowName, span, this.logger);
377
+ oc.request = status.request;
378
+ oc.authenticatedUser = status.authenticatedUser;
379
+ oc.authenticatedRoles = status.authenticatedRoles;
380
+ oc.assumedRole = status.assumedRole;
381
+ oc.workflowUUID = workflowUUID;
382
+ return oc;
383
+ }
384
+ /* BACKGROUND PROCESSES */
385
+ /**
386
+ * Periodically flush the workflow output buffer to the system database.
387
+ */
388
+ async flushWorkflowStatusBuffer() {
389
+ if (this.initialized) {
390
+ await this.systemDatabase.flushWorkflowStatusBuffer();
391
+ }
392
+ }
393
+ logRegisteredHTTPUrls() {
394
+ this.logger.info("HTTP endpoints supported:");
395
+ this.registeredOperations.forEach((registeredOperation) => {
396
+ const ro = registeredOperation;
397
+ if (ro.apiURL) {
398
+ this.logger.info(" " + ro.apiType.padEnd(4) + " : " + ro.apiURL);
399
+ const roles = ro.getRequiredRoles();
400
+ if (roles.length > 0) {
401
+ this.logger.info(" Required Roles: " + JSON.stringify(roles));
402
+ }
403
+ }
404
+ });
405
+ }
406
+ }
407
+ exports.DBOSExecutor = DBOSExecutor;
408
+ //# sourceMappingURL=dbos-executor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dbos-executor.js","sourceRoot":"","sources":["../../src/dbos-executor.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,33 @@
1
+ import ts from 'typescript';
2
+ export interface ClassInfo {
3
+ readonly node: ts.ClassDeclaration;
4
+ readonly name?: string;
5
+ readonly decorators: readonly DecoratorInfo[];
6
+ readonly methods: readonly MethodInfo[];
7
+ }
8
+ export interface MethodInfo {
9
+ readonly node: ts.MethodDeclaration;
10
+ readonly name: string;
11
+ readonly decorators: readonly DecoratorInfo[];
12
+ readonly parameters: readonly ParameterInfo[];
13
+ }
14
+ export interface ParameterInfo {
15
+ readonly node: ts.ParameterDeclaration;
16
+ readonly name: string;
17
+ readonly decorators: readonly DecoratorInfo[];
18
+ readonly required: boolean;
19
+ }
20
+ export interface DecoratorInfo {
21
+ node: ts.Decorator;
22
+ identifier: ts.Identifier;
23
+ args: readonly ts.Expression[];
24
+ name?: string;
25
+ module?: string;
26
+ }
27
+ export declare class TypeParser {
28
+ #private;
29
+ get diags(): readonly ts.Diagnostic[];
30
+ constructor(program: ts.Program);
31
+ parse(): readonly ClassInfo[] | undefined;
32
+ }
33
+ //# sourceMappingURL=TypeParser.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TypeParser.d.ts","sourceRoot":"","sources":["../../../src/dbos-runtime/TypeParser.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,YAAY,CAAC;AAG5B,MAAM,WAAW,SAAS;IACxB,QAAQ,CAAC,IAAI,EAAE,EAAE,CAAC,gBAAgB,CAAC;IACnC,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,UAAU,EAAE,SAAS,aAAa,EAAE,CAAC;IAC9C,QAAQ,CAAC,OAAO,EAAE,SAAS,UAAU,EAAE,CAAC;CACzC;AAED,MAAM,WAAW,UAAU;IACzB,QAAQ,CAAC,IAAI,EAAE,EAAE,CAAC,iBAAiB,CAAC;IACpC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,UAAU,EAAE,SAAS,aAAa,EAAE,CAAC;IAC9C,QAAQ,CAAC,UAAU,EAAE,SAAS,aAAa,EAAE,CAAC;CAC/C;AAED,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,IAAI,EAAE,EAAE,CAAC,oBAAoB,CAAC;IACvC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,UAAU,EAAE,SAAS,aAAa,EAAE,CAAC;IAC9C,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC;CAC5B;AAED,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,EAAE,CAAC,SAAS,CAAC;IACnB,UAAU,EAAE,EAAE,CAAC,UAAU,CAAC;IAC1B,IAAI,EAAE,SAAS,EAAE,CAAC,UAAU,EAAE,CAAC;IAC/B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAOD,qBAAa,UAAU;;IAIrB,IAAI,KAAK,6BAAgC;gBAE7B,OAAO,EAAE,EAAE,CAAC,OAAO;IAK/B,KAAK,IAAI,SAAS,SAAS,EAAE,GAAG,SAAS;CA2F1C"}
@@ -0,0 +1,104 @@
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.TypeParser = void 0;
7
+ const typescript_1 = __importDefault(require("typescript"));
8
+ const tsDiagUtil_1 = require("./tsDiagUtil");
9
+ function isStaticMethod(node) {
10
+ const mods = node.modifiers ?? [];
11
+ return mods.some(m => m.kind === typescript_1.default.SyntaxKind.StaticKeyword);
12
+ }
13
+ class TypeParser {
14
+ #program;
15
+ #checker;
16
+ #diags = new tsDiagUtil_1.DiagnosticsCollector();
17
+ get diags() { return this.#diags.diags; }
18
+ constructor(program) {
19
+ this.#program = program;
20
+ this.#checker = program.getTypeChecker();
21
+ }
22
+ parse() {
23
+ const classes = new Array();
24
+ for (const file of this.#program.getSourceFiles()) {
25
+ if (file.isDeclarationFile)
26
+ continue;
27
+ for (const stmt of file.statements) {
28
+ if (typescript_1.default.isClassDeclaration(stmt)) {
29
+ const staticMethods = stmt.members
30
+ .filter(typescript_1.default.isMethodDeclaration)
31
+ // Only static methods are supported now, so filter out instance methods by default
32
+ .filter(isStaticMethod)
33
+ .map(m => this.#getMethod(m));
34
+ classes.push({
35
+ node: stmt,
36
+ // a class may not have a name if it's the default export
37
+ name: stmt.name?.getText(),
38
+ decorators: this.#getDecorators(stmt),
39
+ methods: staticMethods,
40
+ });
41
+ }
42
+ }
43
+ }
44
+ if (classes.length === 0) {
45
+ this.#diags.warn(`no classes found in ${JSON.stringify(this.#program.getRootFileNames())}`);
46
+ }
47
+ return (0, tsDiagUtil_1.diagResult)(classes, this.diags);
48
+ }
49
+ #getMethod(node) {
50
+ const name = node.name.getText();
51
+ const decorators = this.#getDecorators(node);
52
+ const parameters = node.parameters.map(p => this.#getParameter(p));
53
+ return { node, name, decorators, parameters };
54
+ }
55
+ #getParameter(node) {
56
+ const decorators = this.#getDecorators(node);
57
+ const name = node.name.getText();
58
+ const required = !node.questionToken && !node.initializer;
59
+ return { node, name, decorators, required };
60
+ }
61
+ #getDecoratorIdentifier(node) {
62
+ if (typescript_1.default.isCallExpression(node.expression)) {
63
+ if (typescript_1.default.isIdentifier(node.expression.expression)) {
64
+ return { identifier: node.expression.expression, args: node.expression.arguments };
65
+ }
66
+ this.#diags.raise(`Unexpected decorator CallExpression.expression type: ${typescript_1.default.SyntaxKind[node.expression.expression.kind]}`, node);
67
+ }
68
+ if (typescript_1.default.isIdentifier(node.expression)) {
69
+ return { identifier: node.expression, args: [] };
70
+ }
71
+ this.#diags.raise(`Unexpected decorator expression type: ${typescript_1.default.SyntaxKind[node.expression.kind]}`, node);
72
+ }
73
+ #getDecorators(node) {
74
+ return (typescript_1.default.getDecorators(node) ?? [])
75
+ .map(node => {
76
+ const decoratorIdentifier = this.#getDecoratorIdentifier(node);
77
+ if (!decoratorIdentifier)
78
+ return undefined;
79
+ const { identifier, args } = decoratorIdentifier;
80
+ const { name, module } = getImportSpecifier(identifier, this.#checker) ?? {};
81
+ return { node, identifier, name, module, args };
82
+ })
83
+ .filter((d) => !!d);
84
+ function getImportSpecifier(node, checker) {
85
+ const symbol = checker.getSymbolAtLocation(node);
86
+ const decls = symbol?.getDeclarations() ?? [];
87
+ for (const decl of decls) {
88
+ if (typescript_1.default.isImportSpecifier(decl)) {
89
+ // decl.name is the name for this type used in the local module.
90
+ // If the type name was overridden in the local module, the original type name is stored in decl.propertyName.
91
+ // Otherwise, decl.propertyName is undefined.
92
+ const name = (decl.propertyName ?? decl.name).getText();
93
+ // comment in TS AST declaration indicates moduleSpecifier *must* be a string literal
94
+ // "If [ImportDeclaration.moduleSpecifier] is not a StringLiteral it will be a grammar error."
95
+ const module = decl.parent.parent.parent.moduleSpecifier;
96
+ return { name, module: module.text };
97
+ }
98
+ }
99
+ return undefined;
100
+ }
101
+ }
102
+ }
103
+ exports.TypeParser = TypeParser;
104
+ //# sourceMappingURL=TypeParser.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TypeParser.js","sourceRoot":"","sources":["../../../src/dbos-runtime/TypeParser.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ export declare function getApplicationVersion(): string | undefined;
2
+ export declare function setApplicationVersion(version: string): void;
3
+ //# sourceMappingURL=applicationVersion.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"applicationVersion.d.ts","sourceRoot":"","sources":["../../../src/dbos-runtime/applicationVersion.ts"],"names":[],"mappings":"AAAA,wBAAgB,qBAAqB,IAAI,MAAM,GAAG,SAAS,CAE1D;AAED,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAE3D"}
@@ -0,0 +1,13 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.setApplicationVersion = exports.getApplicationVersion = void 0;
4
+ function getApplicationVersion() {
5
+ return applicationVersion;
6
+ }
7
+ exports.getApplicationVersion = getApplicationVersion;
8
+ function setApplicationVersion(version) {
9
+ applicationVersion = version;
10
+ }
11
+ exports.setApplicationVersion = setApplicationVersion;
12
+ let applicationVersion = undefined;
13
+ //# sourceMappingURL=applicationVersion.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"applicationVersion.js","sourceRoot":"","sources":["../../../src/dbos-runtime/applicationVersion.ts"],"names":[],"mappings":";;;AAAA,SAAgB,qBAAqB;IACjC,OAAO,kBAAkB,CAAC;AAC9B,CAAC;AAFD,sDAEC;AAED,SAAgB,qBAAqB,CAAC,OAAe;IACjD,kBAAkB,GAAG,OAAO,CAAC;AACjC,CAAC;AAFD,sDAEC;AAED,IAAI,kBAAkB,GAAuB,SAAS,CAAC"}
@@ -0,0 +1,8 @@
1
+ #!/usr/bin/env node
2
+ export interface DBOSCLIStartOptions {
3
+ port?: number;
4
+ loglevel?: string;
5
+ configfile?: string;
6
+ entrypoint?: string;
7
+ }
8
+ //# sourceMappingURL=cli.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../../../src/dbos-runtime/cli.ts"],"names":[],"mappings":";AAkBA,MAAM,WAAW,mBAAmB;IAClC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB"}