@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.
Files changed (167) hide show
  1. package/.claude/settings.local.json +7 -0
  2. package/.clavix/outputs/dbos-http-sdk/full-prd.md +142 -0
  3. package/.clavix/outputs/dbos-http-sdk/quick-prd.md +12 -0
  4. package/.clavix/outputs/dbos-http-sdk/tasks.md +630 -0
  5. package/.clavix/outputs/prompts/dbos-http-api-20260110-033219.md +91 -0
  6. package/.husky/pre-commit +1 -0
  7. package/.prettierignore +3 -0
  8. package/.prettierrc +9 -0
  9. package/CODE_OF_CONDUCT.md +49 -0
  10. package/CONTRIBUTING.md +47 -0
  11. package/LICENSE +21 -0
  12. package/README.md +172 -0
  13. package/dist/dbos-config.schema.json +132 -0
  14. package/dist/schemas/system_db_schema.d.ts +73 -0
  15. package/dist/schemas/system_db_schema.d.ts.map +1 -0
  16. package/dist/schemas/system_db_schema.js +3 -0
  17. package/dist/schemas/system_db_schema.js.map +1 -0
  18. package/dist/src/adminserver.d.ts +79 -0
  19. package/dist/src/adminserver.d.ts.map +1 -0
  20. package/dist/src/adminserver.js +495 -0
  21. package/dist/src/adminserver.js.map +1 -0
  22. package/dist/src/authdecorators.d.ts +2 -0
  23. package/dist/src/authdecorators.d.ts.map +1 -0
  24. package/dist/src/authdecorators.js +48 -0
  25. package/dist/src/authdecorators.js.map +1 -0
  26. package/dist/src/cli/cli.d.ts +9 -0
  27. package/dist/src/cli/cli.d.ts.map +1 -0
  28. package/dist/src/cli/cli.js +116 -0
  29. package/dist/src/cli/cli.js.map +1 -0
  30. package/dist/src/cli/commands.d.ts +3 -0
  31. package/dist/src/cli/commands.d.ts.map +1 -0
  32. package/dist/src/cli/commands.js +46 -0
  33. package/dist/src/cli/commands.js.map +1 -0
  34. package/dist/src/client.d.ts +85 -0
  35. package/dist/src/client.d.ts.map +1 -0
  36. package/dist/src/client.js +186 -0
  37. package/dist/src/client.js.map +1 -0
  38. package/dist/src/conductor/conductor.d.ts +28 -0
  39. package/dist/src/conductor/conductor.d.ts.map +1 -0
  40. package/dist/src/conductor/conductor.js +376 -0
  41. package/dist/src/conductor/conductor.js.map +1 -0
  42. package/dist/src/conductor/protocol.d.ts +238 -0
  43. package/dist/src/conductor/protocol.d.ts.map +1 -0
  44. package/dist/src/conductor/protocol.js +353 -0
  45. package/dist/src/conductor/protocol.js.map +1 -0
  46. package/dist/src/config.d.ts +91 -0
  47. package/dist/src/config.d.ts.map +1 -0
  48. package/dist/src/config.js +199 -0
  49. package/dist/src/config.js.map +1 -0
  50. package/dist/src/context.d.ts +62 -0
  51. package/dist/src/context.d.ts.map +1 -0
  52. package/dist/src/context.js +118 -0
  53. package/dist/src/context.js.map +1 -0
  54. package/dist/src/database_utils.d.ts +17 -0
  55. package/dist/src/database_utils.d.ts.map +1 -0
  56. package/dist/src/database_utils.js +53 -0
  57. package/dist/src/database_utils.js.map +1 -0
  58. package/dist/src/datasource.d.ts +109 -0
  59. package/dist/src/datasource.d.ts.map +1 -0
  60. package/dist/src/datasource.js +204 -0
  61. package/dist/src/datasource.js.map +1 -0
  62. package/dist/src/dbos-executor.d.ts +189 -0
  63. package/dist/src/dbos-executor.d.ts.map +1 -0
  64. package/dist/src/dbos-executor.js +817 -0
  65. package/dist/src/dbos-executor.js.map +1 -0
  66. package/dist/src/dbos.d.ts +519 -0
  67. package/dist/src/dbos.d.ts.map +1 -0
  68. package/dist/src/dbos.js +1282 -0
  69. package/dist/src/dbos.js.map +1 -0
  70. package/dist/src/debouncer.d.ts +33 -0
  71. package/dist/src/debouncer.d.ts.map +1 -0
  72. package/dist/src/debouncer.js +170 -0
  73. package/dist/src/debouncer.js.map +1 -0
  74. package/dist/src/debugpoint.d.ts +26 -0
  75. package/dist/src/debugpoint.d.ts.map +1 -0
  76. package/dist/src/debugpoint.js +65 -0
  77. package/dist/src/debugpoint.js.map +1 -0
  78. package/dist/src/decorators.d.ts +219 -0
  79. package/dist/src/decorators.d.ts.map +1 -0
  80. package/dist/src/decorators.js +873 -0
  81. package/dist/src/decorators.js.map +1 -0
  82. package/dist/src/error.d.ts +130 -0
  83. package/dist/src/error.d.ts.map +1 -0
  84. package/dist/src/error.js +290 -0
  85. package/dist/src/error.js.map +1 -0
  86. package/dist/src/http_client.d.ts +82 -0
  87. package/dist/src/http_client.d.ts.map +1 -0
  88. package/dist/src/http_client.js +286 -0
  89. package/dist/src/http_client.js.map +1 -0
  90. package/dist/src/http_system_database.d.ts +84 -0
  91. package/dist/src/http_system_database.d.ts.map +1 -0
  92. package/dist/src/http_system_database.js +429 -0
  93. package/dist/src/http_system_database.js.map +1 -0
  94. package/dist/src/index.d.ts +14 -0
  95. package/dist/src/index.d.ts.map +1 -0
  96. package/dist/src/index.js +53 -0
  97. package/dist/src/index.js.map +1 -0
  98. package/dist/src/scheduler/crontab.d.ts +14 -0
  99. package/dist/src/scheduler/crontab.d.ts.map +1 -0
  100. package/dist/src/scheduler/crontab.js +308 -0
  101. package/dist/src/scheduler/crontab.js.map +1 -0
  102. package/dist/src/scheduler/scheduler.d.ts +41 -0
  103. package/dist/src/scheduler/scheduler.d.ts.map +1 -0
  104. package/dist/src/scheduler/scheduler.js +165 -0
  105. package/dist/src/scheduler/scheduler.js.map +1 -0
  106. package/dist/src/serialization.d.ts +57 -0
  107. package/dist/src/serialization.d.ts.map +1 -0
  108. package/dist/src/serialization.js +306 -0
  109. package/dist/src/serialization.js.map +1 -0
  110. package/dist/src/solidactions-executor.d.ts +177 -0
  111. package/dist/src/solidactions-executor.d.ts.map +1 -0
  112. package/dist/src/solidactions-executor.js +817 -0
  113. package/dist/src/solidactions-executor.js.map +1 -0
  114. package/dist/src/solidactions.d.ts +519 -0
  115. package/dist/src/solidactions.d.ts.map +1 -0
  116. package/dist/src/solidactions.js +1284 -0
  117. package/dist/src/solidactions.js.map +1 -0
  118. package/dist/src/step.d.ts +16 -0
  119. package/dist/src/step.d.ts.map +1 -0
  120. package/dist/src/step.js +3 -0
  121. package/dist/src/step.js.map +1 -0
  122. package/dist/src/system_database.d.ts +141 -0
  123. package/dist/src/system_database.d.ts.map +1 -0
  124. package/dist/src/system_database.js +25 -0
  125. package/dist/src/system_database.js.map +1 -0
  126. package/dist/src/telemetry/collector.d.ts +13 -0
  127. package/dist/src/telemetry/collector.d.ts.map +1 -0
  128. package/dist/src/telemetry/collector.js +63 -0
  129. package/dist/src/telemetry/collector.js.map +1 -0
  130. package/dist/src/telemetry/exporters.d.ts +13 -0
  131. package/dist/src/telemetry/exporters.d.ts.map +1 -0
  132. package/dist/src/telemetry/exporters.js +101 -0
  133. package/dist/src/telemetry/exporters.js.map +1 -0
  134. package/dist/src/telemetry/logs.d.ts +52 -0
  135. package/dist/src/telemetry/logs.d.ts.map +1 -0
  136. package/dist/src/telemetry/logs.js +287 -0
  137. package/dist/src/telemetry/logs.js.map +1 -0
  138. package/dist/src/telemetry/traces.d.ts +52 -0
  139. package/dist/src/telemetry/traces.d.ts.map +1 -0
  140. package/dist/src/telemetry/traces.js +150 -0
  141. package/dist/src/telemetry/traces.js.map +1 -0
  142. package/dist/src/utils.d.ts +26 -0
  143. package/dist/src/utils.d.ts.map +1 -0
  144. package/dist/src/utils.js +136 -0
  145. package/dist/src/utils.js.map +1 -0
  146. package/dist/src/wfqueue.d.ts +64 -0
  147. package/dist/src/wfqueue.d.ts.map +1 -0
  148. package/dist/src/wfqueue.js +147 -0
  149. package/dist/src/wfqueue.js.map +1 -0
  150. package/dist/src/workflow.d.ts +154 -0
  151. package/dist/src/workflow.d.ts.map +1 -0
  152. package/dist/src/workflow.js +99 -0
  153. package/dist/src/workflow.js.map +1 -0
  154. package/dist/src/workflow_management.d.ts +15 -0
  155. package/dist/src/workflow_management.d.ts.map +1 -0
  156. package/dist/src/workflow_management.js +87 -0
  157. package/dist/src/workflow_management.js.map +1 -0
  158. package/dist/tsconfig.tsbuildinfo +1 -0
  159. package/docs/api-schema.md +1441 -0
  160. package/docs/migration-guide.md +460 -0
  161. package/docs/phase-14-changes.md +156 -0
  162. package/docs/solidsteps-ai-prompt.md +534 -0
  163. package/eslint.config.cjs +50 -0
  164. package/package.json +84 -0
  165. package/solidactions-ai-prompt.md +1504 -0
  166. package/solidactions-config.schema.json +132 -0
  167. package/solidactions-test-config.yaml +15 -0
@@ -0,0 +1,308 @@
1
+ "use strict";
2
+ // This code was based on code from node-cron:
3
+ // https://github.com/node-cron/node-cron
4
+ /*
5
+ ISC License
6
+ Copyright (c) 2016, Lucas Merencia <lucas.merencia@gmail.com>
7
+
8
+ Permission to use, copy, modify, and/or distribute this software for any
9
+ purpose with or without fee is hereby granted, provided that the above
10
+ copyright notice and this permission notice appear in all copies.
11
+
12
+ THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
13
+ WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
14
+ MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
15
+ ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
16
+ WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
17
+ ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
18
+ OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
19
+ */
20
+ Object.defineProperty(exports, "__esModule", { value: true });
21
+ exports.TimeMatcher = exports.convertExpression = exports.validateCrontab = exports.convertAsterisksToRanges = void 0;
22
+ function removeExtraSpaces(str) {
23
+ return str.replace(/\s{2,}/g, ' ').trim();
24
+ }
25
+ function prependSecondExpression(expressions) {
26
+ if (expressions.length === 5) {
27
+ return ['0'].concat(expressions);
28
+ }
29
+ return expressions;
30
+ }
31
+ const months = [
32
+ 'january',
33
+ 'february',
34
+ 'march',
35
+ 'april',
36
+ 'may',
37
+ 'june',
38
+ 'july',
39
+ 'august',
40
+ 'september',
41
+ 'october',
42
+ 'november',
43
+ 'december',
44
+ ];
45
+ const shortMonths = ['jan', 'feb', 'mar', 'apr', 'may', 'jun', 'jul', 'aug', 'sep', 'oct', 'nov', 'dec'];
46
+ function convertMonthNameI(expression, items) {
47
+ for (let i = 0; i < items.length; i++) {
48
+ expression = expression.replace(new RegExp(items[i], 'gi'), `${i + 1}`);
49
+ }
50
+ return expression;
51
+ }
52
+ function monthNamesConversion(monthExpression) {
53
+ monthExpression = convertMonthNameI(monthExpression, months);
54
+ monthExpression = convertMonthNameI(monthExpression, shortMonths);
55
+ return monthExpression;
56
+ }
57
+ const weekDays = ['sunday', 'monday', 'tuesday', 'wednesday', 'thursday', 'friday', 'saturday'];
58
+ const shortWeekDays = ['sun', 'mon', 'tue', 'wed', 'thu', 'fri', 'sat'];
59
+ function convertWeekDayName(weekExpression, items) {
60
+ for (let i = 0; i < items.length; i++) {
61
+ weekExpression = weekExpression.replace(new RegExp(items[i], 'gi'), `${i}`);
62
+ }
63
+ return weekExpression;
64
+ }
65
+ function weekDayNamesConversion(expression) {
66
+ expression = expression.replace('7', '0');
67
+ expression = convertWeekDayName(expression, weekDays);
68
+ return convertWeekDayName(expression, shortWeekDays);
69
+ }
70
+ function convertAsterisk(expression, replacement) {
71
+ if (expression.indexOf('*') !== -1) {
72
+ return expression.replace('*', replacement);
73
+ }
74
+ return expression;
75
+ }
76
+ // Based on position in full crontab, convert asterisk to appropriate range
77
+ function convertAsterisksToRanges(expressions) {
78
+ expressions[0] = convertAsterisk(expressions[0], '0-59');
79
+ expressions[1] = convertAsterisk(expressions[1], '0-59');
80
+ expressions[2] = convertAsterisk(expressions[2], '0-23');
81
+ expressions[3] = convertAsterisk(expressions[3], '1-31');
82
+ expressions[4] = convertAsterisk(expressions[4], '1-12');
83
+ expressions[5] = convertAsterisk(expressions[5], '0-6');
84
+ return expressions;
85
+ }
86
+ exports.convertAsterisksToRanges = convertAsterisksToRanges;
87
+ function replaceWithRange(expression, text, init, end) {
88
+ const numbers = [];
89
+ let last = parseInt(end);
90
+ let first = parseInt(init);
91
+ if (first > last) {
92
+ last = parseInt(init);
93
+ first = parseInt(end);
94
+ }
95
+ for (let i = first; i <= last; i++) {
96
+ numbers.push(i.toString());
97
+ }
98
+ return expression.replace(new RegExp(text, 'i'), numbers.join());
99
+ }
100
+ function convertRange(expression) {
101
+ const rangeRegEx = /(\d+)-(\d+)/;
102
+ let match = rangeRegEx.exec(expression);
103
+ while (match !== null && match.length > 0) {
104
+ expression = replaceWithRange(expression, match[0], match[1], match[2]);
105
+ match = rangeRegEx.exec(expression);
106
+ }
107
+ return expression;
108
+ }
109
+ function convertAllRanges(expressions) {
110
+ for (let i = 0; i < expressions.length; i++) {
111
+ expressions[i] = convertRange(expressions[i]);
112
+ }
113
+ return expressions;
114
+ }
115
+ function convertSteps(expressions) {
116
+ const stepValuePattern = /^(.+)\/(\w+)$/;
117
+ for (let i = 0; i < expressions.length; i++) {
118
+ const match = stepValuePattern.exec(expressions[i]);
119
+ const isStepValue = match !== null && match.length > 0;
120
+ if (isStepValue) {
121
+ const baseDivider = match[2];
122
+ if (isNaN(parseInt(baseDivider))) {
123
+ throw new Error(baseDivider + ' is not a valid step value');
124
+ }
125
+ const values = match[1].split(',');
126
+ const stepValues = [];
127
+ const divider = parseInt(baseDivider, 10);
128
+ for (let j = 0; j <= values.length; j++) {
129
+ const value = parseInt(values[j], 10);
130
+ if (value % divider === 0) {
131
+ stepValues.push(`${value}`);
132
+ }
133
+ }
134
+ expressions[i] = stepValues.join(',');
135
+ }
136
+ }
137
+ return expressions;
138
+ }
139
+ // Function that takes care of normalization.
140
+ function normalizeIntegers(expressions) {
141
+ for (let i = 0; i < expressions.length; i++) {
142
+ const numbers = expressions[i].split(',');
143
+ for (let j = 0; j < numbers.length; j++) {
144
+ numbers[j] = parseInt(numbers[j]).toString();
145
+ }
146
+ expressions[i] = numbers.join(',');
147
+ }
148
+ return expressions;
149
+ }
150
+ const validationRegex = /^(?:\d+|\*|\*\/\d+)$/;
151
+ // Check comma-delimited list to see if elements are in range
152
+ function isValidExpression(expression, min, max) {
153
+ const options = expression.split(',');
154
+ for (const option of options) {
155
+ const optionAsInt = parseInt(option, 10);
156
+ if ((!Number.isNaN(optionAsInt) && (optionAsInt < min || optionAsInt > max)) || !validationRegex.test(option)) {
157
+ return false;
158
+ }
159
+ }
160
+ return true;
161
+ }
162
+ function isInvalidSecond(expression) {
163
+ return !isValidExpression(expression, 0, 59);
164
+ }
165
+ function isInvalidMinute(expression) {
166
+ return !isValidExpression(expression, 0, 59);
167
+ }
168
+ function isInvalidHour(expression) {
169
+ return !isValidExpression(expression, 0, 23);
170
+ }
171
+ function isInvalidDayOfMonth(expression) {
172
+ return !isValidExpression(expression, 1, 31);
173
+ }
174
+ function isInvalidMonth(expression) {
175
+ return !isValidExpression(expression, 1, 12);
176
+ }
177
+ function isInvalidWeekDay(expression) {
178
+ return !isValidExpression(expression, 0, 7);
179
+ }
180
+ function validateFields(patterns, executablePatterns) {
181
+ if (isInvalidSecond(executablePatterns[0]))
182
+ throw new Error(`${patterns[0]} is a invalid expression for second`);
183
+ if (isInvalidMinute(executablePatterns[1]))
184
+ throw new Error(`${patterns[1]} is a invalid expression for minute`);
185
+ if (isInvalidHour(executablePatterns[2]))
186
+ throw new Error(`${patterns[2]} is a invalid expression for hour`);
187
+ if (isInvalidDayOfMonth(executablePatterns[3]))
188
+ throw new Error(`${patterns[3]} is a invalid expression for day of month`);
189
+ if (isInvalidMonth(executablePatterns[4]))
190
+ throw new Error(`${patterns[4]} is a invalid expression for month`);
191
+ if (isInvalidWeekDay(executablePatterns[5]))
192
+ throw new Error(`${patterns[5]} is a invalid expression for week day`);
193
+ }
194
+ /**
195
+ * Validates a Cron-Job expression pattern.
196
+ * Throws on error.
197
+ */
198
+ function validateCrontab(pattern) {
199
+ if (typeof pattern !== 'string')
200
+ throw new TypeError('pattern must be a string!');
201
+ const patterns = pattern.split(' ');
202
+ const executablePatterns = convertExpression(pattern).split(' ');
203
+ if (patterns.length === 5)
204
+ patterns.unshift('0');
205
+ validateFields(patterns, executablePatterns);
206
+ return executablePatterns.join(' ');
207
+ }
208
+ exports.validateCrontab = validateCrontab;
209
+ /*
210
+ * The node-cron core allows only numbers (including multiple numbers e.g 1,2).
211
+ * This module is going to translate the month names, week day names and ranges
212
+ * to integers relatives.
213
+ *
214
+ * Month names example:
215
+ * - expression 0 1 1 January,Sep *
216
+ * - Will be translated to 0 1 1 1,9 *
217
+ *
218
+ * Week day names example:
219
+ * - expression 0 1 1 2 Monday,Sat
220
+ * - Will be translated to 0 1 1 1,5 *
221
+ *
222
+ * Ranges example:
223
+ * - expression 1-5 * * * *
224
+ * - Will be translated to 1,2,3,4,5 * * * *
225
+ */
226
+ function convertExpression(crontab) {
227
+ let expressions = removeExtraSpaces(crontab).split(' ');
228
+ expressions = prependSecondExpression(expressions);
229
+ expressions[4] = monthNamesConversion(expressions[4]);
230
+ expressions[5] = weekDayNamesConversion(expressions[5]);
231
+ expressions = convertAsterisksToRanges(expressions);
232
+ expressions = convertAllRanges(expressions);
233
+ expressions = convertSteps(expressions);
234
+ expressions = normalizeIntegers(expressions);
235
+ return expressions.join(' ');
236
+ }
237
+ exports.convertExpression = convertExpression;
238
+ //////////
239
+ /// Time matcher
240
+ //////////
241
+ function matchPattern(pattern, nvalue) {
242
+ const value = `${nvalue}`;
243
+ if (pattern.indexOf(',') !== -1) {
244
+ const patterns = pattern.split(',');
245
+ return patterns.includes(value);
246
+ }
247
+ return pattern === value;
248
+ }
249
+ class TimeMatcher {
250
+ #pattern;
251
+ #expressions;
252
+ #dtf;
253
+ #timezone;
254
+ constructor(pattern, timezone) {
255
+ validateCrontab(pattern);
256
+ this.#pattern = convertExpression(pattern);
257
+ this.#timezone = timezone;
258
+ this.#expressions = this.#pattern.split(' ');
259
+ this.#dtf = this.#timezone
260
+ ? new Intl.DateTimeFormat('en-US', {
261
+ year: 'numeric',
262
+ month: '2-digit',
263
+ day: '2-digit',
264
+ hour: '2-digit',
265
+ minute: '2-digit',
266
+ second: '2-digit',
267
+ hourCycle: 'h23',
268
+ fractionalSecondDigits: 3,
269
+ timeZone: this.#timezone,
270
+ })
271
+ : null;
272
+ }
273
+ match(date) {
274
+ date = this.#apply(date);
275
+ const runOnSecond = matchPattern(this.#expressions[0], date.getSeconds());
276
+ const runOnMinute = matchPattern(this.#expressions[1], date.getMinutes());
277
+ const runOnHour = matchPattern(this.#expressions[2], date.getHours());
278
+ const runOnDay = this.#runsThisDay(date);
279
+ return runOnSecond && runOnMinute && runOnHour && runOnDay;
280
+ }
281
+ #runsThisDay(date) {
282
+ const runOnDay = matchPattern(this.#expressions[3], date.getDate());
283
+ const runOnMonth = matchPattern(this.#expressions[4], date.getMonth() + 1);
284
+ const runOnWeekDay = matchPattern(this.#expressions[5], date.getDay());
285
+ return runOnDay && runOnMonth && runOnWeekDay;
286
+ }
287
+ nextWakeupTime(date) {
288
+ // This is conservative. Some schedules never occur, such as the 30th of February, but you can ask for them
289
+ const time = typeof date === 'number' ? date : date.getTime();
290
+ let msec = Math.round(time);
291
+ // This can be optimized by skipping ahead, but unit test first
292
+ for (let maxIters = 3600; --maxIters; maxIters > 0) {
293
+ msec += 1000;
294
+ const nd = new Date(msec);
295
+ if (this.match(nd))
296
+ return nd;
297
+ }
298
+ return new Date(msec);
299
+ }
300
+ #apply(date) {
301
+ if (this.#dtf) {
302
+ return new Date(this.#dtf.format(date));
303
+ }
304
+ return typeof date === 'number' ? new Date(date) : date;
305
+ }
306
+ }
307
+ exports.TimeMatcher = TimeMatcher;
308
+ //# sourceMappingURL=crontab.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"crontab.js","sourceRoot":"","sources":["../../../src/scheduler/crontab.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,41 @@
1
+ import { DBOSLifecycleCallback, FunctionName } from '../decorators';
2
+ /**
3
+ * Choices for scheduler mode for `@DBOS.scheduled` workflows
4
+ */
5
+ export declare enum SchedulerMode {
6
+ /**
7
+ * Using `ExactlyOncePerInterval` causes the scheduler to add "make-up work" for any
8
+ * schedule slots that occurred when the app was not running
9
+ */
10
+ ExactlyOncePerInterval = "ExactlyOncePerInterval",
11
+ /**
12
+ * Using `ExactlyOncePerIntervalWhenActive` causes the scheduler to run the workflow once
13
+ * per interval when the application is active. If the app is not running at a time
14
+ * otherwise indicated by the schedule, no workflow will be run.
15
+ */
16
+ ExactlyOncePerIntervalWhenActive = "ExactlyOncePerIntervalWhenActive"
17
+ }
18
+ /**
19
+ * Configuration for a `@DBOS.scheduled` workflow
20
+ */
21
+ export interface SchedulerConfig {
22
+ /** Schedule, in 5- or 6-spot crontab format */
23
+ crontab: string;
24
+ /**
25
+ * Indicates whether or not to retroactively start workflows that were scheduled during
26
+ * times when the app was not running. @see `SchedulerMode`.
27
+ */
28
+ mode?: SchedulerMode;
29
+ /** If set, workflows will be enqueued on the named queue, rather than being started immediately */
30
+ queueName?: string;
31
+ }
32
+ export type ScheduledArgs = [Date, Date];
33
+ export declare class ScheduledReceiver implements DBOSLifecycleCallback {
34
+ #private;
35
+ constructor();
36
+ initialize(): Promise<void>;
37
+ destroy(): Promise<void>;
38
+ logRegisteredEndpoints(): void;
39
+ static registerScheduled<This, Return>(func: (this: This, ...args: ScheduledArgs) => Promise<Return>, config: SchedulerConfig & FunctionName): void;
40
+ }
41
+ //# sourceMappingURL=scheduler.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scheduler.d.ts","sourceRoot":"","sources":["../../../src/scheduler/scheduler.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,qBAAqB,EAAE,YAAY,EAA0B,MAAM,eAAe,CAAC;AAQ5F;;GAEG;AACH,oBAAY,aAAa;IACvB;;;OAGG;IACH,sBAAsB,2BAA2B;IACjD;;;;OAIG;IACH,gCAAgC,qCAAqC;CACtE;AAED;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,+CAA+C;IAC/C,OAAO,EAAE,MAAM,CAAC;IAChB;;;OAGG;IACH,IAAI,CAAC,EAAE,aAAa,CAAC;IACrB,mGAAmG;IACnG,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAOD,MAAM,MAAM,aAAa,GAAG,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;AASzC,qBAAa,iBAAkB,YAAW,qBAAqB;;;IASvD,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IA6B3B,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IAM9B,sBAAsB,IAAI,IAAI;IA+G9B,MAAM,CAAC,iBAAiB,CAAC,IAAI,EAAE,MAAM,EACnC,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,GAAG,IAAI,EAAE,aAAa,KAAK,OAAO,CAAC,MAAM,CAAC,EAC7D,MAAM,EAAE,eAAe,GAAG,YAAY;CAazC"}
@@ -0,0 +1,165 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ScheduledReceiver = exports.SchedulerMode = void 0;
4
+ const __1 = require("..");
5
+ const utils_1 = require("../utils");
6
+ const crontab_1 = require("./crontab");
7
+ ////
8
+ // Configuration
9
+ ////
10
+ /**
11
+ * Choices for scheduler mode for `@DBOS.scheduled` workflows
12
+ */
13
+ var SchedulerMode;
14
+ (function (SchedulerMode) {
15
+ /**
16
+ * Using `ExactlyOncePerInterval` causes the scheduler to add "make-up work" for any
17
+ * schedule slots that occurred when the app was not running
18
+ */
19
+ SchedulerMode["ExactlyOncePerInterval"] = "ExactlyOncePerInterval";
20
+ /**
21
+ * Using `ExactlyOncePerIntervalWhenActive` causes the scheduler to run the workflow once
22
+ * per interval when the application is active. If the app is not running at a time
23
+ * otherwise indicated by the schedule, no workflow will be run.
24
+ */
25
+ SchedulerMode["ExactlyOncePerIntervalWhenActive"] = "ExactlyOncePerIntervalWhenActive";
26
+ })(SchedulerMode || (exports.SchedulerMode = SchedulerMode = {}));
27
+ ///////////////////////////
28
+ // Scheduler Management
29
+ ///////////////////////////
30
+ const SCHEDULER_EVENT_SERVICE_NAME = 'dbos.scheduler';
31
+ class ScheduledReceiver {
32
+ #controller = new AbortController();
33
+ #disposables = new Array();
34
+ constructor() {
35
+ __1.DBOS.registerLifecycleCallback(this);
36
+ }
37
+ // eslint-disable-next-line @typescript-eslint/require-await
38
+ async initialize() {
39
+ for (const regOp of __1.DBOS.getAssociatedInfo(SCHEDULER_EVENT_SERVICE_NAME)) {
40
+ if (regOp.methodReg.registeredFunction === undefined) {
41
+ __1.DBOS.logger.warn(`Scheduled workflow ${regOp.methodReg.className}.${regOp.methodReg.name} is missing registered function; skipping`);
42
+ continue;
43
+ }
44
+ const { crontab, mode, queueName } = regOp.methodConfig;
45
+ if (!crontab) {
46
+ __1.DBOS.logger.warn(`Scheduled workflow ${regOp.methodReg.className}.${regOp.methodReg.name} is missing crontab; skipping`);
47
+ continue;
48
+ }
49
+ const timeMatcher = new crontab_1.TimeMatcher(crontab);
50
+ const promise = ScheduledReceiver.#schedulerLoop(regOp.methodReg, timeMatcher, mode ?? SchedulerMode.ExactlyOncePerIntervalWhenActive, queueName, this.#controller.signal);
51
+ this.#disposables.push(promise);
52
+ }
53
+ }
54
+ async destroy() {
55
+ this.#controller.abort();
56
+ const promises = this.#disposables.splice(0);
57
+ await Promise.allSettled(promises);
58
+ }
59
+ logRegisteredEndpoints() {
60
+ __1.DBOS.logger.info('Scheduled endpoints:');
61
+ for (const regOp of __1.DBOS.getAssociatedInfo(SCHEDULER_EVENT_SERVICE_NAME)) {
62
+ const name = `${regOp.methodReg.className}.${regOp.methodReg.name}`;
63
+ const { crontab, mode } = regOp.methodConfig;
64
+ if (crontab) {
65
+ __1.DBOS.logger.info(` ${name} @ ${crontab}; ${mode ?? SchedulerMode.ExactlyOncePerIntervalWhenActive}`);
66
+ }
67
+ else {
68
+ __1.DBOS.logger.info(` ${name} is missing crontab; skipping`);
69
+ }
70
+ }
71
+ }
72
+ static async #schedulerLoop(methodReg, timeMatcher, mode, queueName, signal) {
73
+ const name = `${methodReg.className}.${methodReg.name}`;
74
+ let lastExec = new Date().setMilliseconds(0);
75
+ if (mode === SchedulerMode.ExactlyOncePerInterval) {
76
+ const lastState = await __1.DBOS.getEventDispatchState(SCHEDULER_EVENT_SERVICE_NAME, name, 'lastState');
77
+ if (lastState?.value) {
78
+ lastExec = parseFloat(lastState.value);
79
+ }
80
+ }
81
+ while (!signal.aborted) {
82
+ const nextExec = timeMatcher.nextWakeupTime(lastExec).getTime();
83
+ const sleepTime = nextExec - Date.now();
84
+ if (sleepTime > 0) {
85
+ await new Promise((resolve, reject) => {
86
+ // eslint-disable-next-line prefer-const
87
+ let timeoutID;
88
+ const onAbort = () => {
89
+ clearTimeout(timeoutID);
90
+ reject(new Error('Abort signal received'));
91
+ };
92
+ signal.addEventListener('abort', onAbort, { once: true });
93
+ if (signal.aborted) {
94
+ signal.removeEventListener('abort', onAbort);
95
+ reject(new Error('Abort signal received'));
96
+ }
97
+ timeoutID = setTimeout(() => {
98
+ signal.removeEventListener('abort', onAbort);
99
+ resolve();
100
+ }, sleepTime);
101
+ });
102
+ }
103
+ if (signal.aborted) {
104
+ break;
105
+ }
106
+ if (!timeMatcher.match(nextExec)) {
107
+ lastExec = nextExec;
108
+ continue;
109
+ }
110
+ const date = new Date(nextExec);
111
+ if (methodReg.workflowConfig && methodReg.registeredFunction) {
112
+ const workflowID = `sched-${name}-${date.toISOString()}`;
113
+ const wfParams = { workflowID, queueName: queueName ?? utils_1.INTERNAL_QUEUE_NAME };
114
+ __1.DBOS.logger.debug(`Executing scheduled workflow ${workflowID}`);
115
+ await __1.DBOS.startWorkflow(methodReg.registeredFunction, wfParams)(date, new Date());
116
+ }
117
+ else {
118
+ __1.DBOS.logger.error(`${name} is @scheduled but not a workflow`);
119
+ }
120
+ lastExec = await ScheduledReceiver.#setLastExecTime(name, nextExec);
121
+ }
122
+ }
123
+ static async #setLastExecTime(name, time) {
124
+ // Record the time of the wf kicked off
125
+ try {
126
+ const state = {
127
+ service: SCHEDULER_EVENT_SERVICE_NAME,
128
+ workflowFnName: name,
129
+ key: 'lastState',
130
+ value: `${time}`,
131
+ updateTime: time,
132
+ };
133
+ const newState = await __1.DBOS.upsertEventDispatchState(state);
134
+ const dbTime = parseFloat(newState.value);
135
+ if (dbTime && dbTime > time) {
136
+ return dbTime;
137
+ }
138
+ }
139
+ catch (e) {
140
+ // This write is not strictly essential and the scheduler is often the "canary in the coal mine"
141
+ // We will simply continue after giving full details.
142
+ const err = e;
143
+ __1.DBOS.logger.warn(`Scheduler caught an error writing to system DB: ${err.message}`);
144
+ __1.DBOS.logger.error(e);
145
+ }
146
+ return time;
147
+ }
148
+ // registerScheduled is static so it can be called before an instance is created during DBOS.launch.
149
+ // This means we can't use the instance as the external info key for associateFunctionWithInfo below
150
+ // or in getAssociatedInfo above...which means we can only have one scheduled receiver instance.
151
+ // However, since this is an internal receiver, it's safe to assume there is ever only one instnace.
152
+ static registerScheduled(func, config) {
153
+ const { regInfo } = __1.DBOS.associateFunctionWithInfo(SCHEDULER_EVENT_SERVICE_NAME, func, {
154
+ ctorOrProto: config.ctorOrProto,
155
+ className: config.className,
156
+ name: config.name ?? func.name,
157
+ });
158
+ const schedRegInfo = regInfo;
159
+ schedRegInfo.crontab = config.crontab;
160
+ schedRegInfo.mode = config.mode;
161
+ schedRegInfo.queueName = config.queueName;
162
+ }
163
+ }
164
+ exports.ScheduledReceiver = ScheduledReceiver;
165
+ //# sourceMappingURL=scheduler.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scheduler.js","sourceRoot":"","sources":["../../../src/scheduler/scheduler.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,57 @@
1
+ import type { JSONValue } from 'superjson/dist/types';
2
+ export { type JSONValue };
3
+ /**
4
+ * Generic serializer interface for SolidActions.
5
+ * Implementations must be able to serialize any value to a string and deserialize it back.
6
+ */
7
+ export interface SolidActionsSerializer {
8
+ /**
9
+ * Serialize a value to a string.
10
+ * @param value - The value to serialize
11
+ * @returns The serialized string representation
12
+ */
13
+ stringify(value: unknown): string;
14
+ /**
15
+ * Deserialize a string back to a value.
16
+ * @param text - A serialized string (potentially null or undefined)
17
+ * @returns The deserialized value, or null if the input was null/undefined
18
+ */
19
+ parse(text: string | null | undefined): unknown;
20
+ }
21
+ export type SerializationRecipe<T, S extends JSONValue> = {
22
+ name: string;
23
+ isApplicable: (v: unknown) => v is T;
24
+ serialize: (v: T) => S;
25
+ deserialize: (s: S) => T;
26
+ };
27
+ export declare function registerSerializationRecipe<T, S extends JSONValue>(r: SerializationRecipe<T, S>): void;
28
+ export declare function SolidActionsReplacer(this: any, key: string, value: unknown): unknown;
29
+ export declare function SolidActionsReviver(_key: string, value: unknown): unknown;
30
+ export declare const SolidActionsJSONLegacy: {
31
+ parse: (text: string | null) => any;
32
+ stringify: (value: unknown) => string | undefined;
33
+ };
34
+ export declare const SERIALIZER_MARKER_KEY = "__solidactions_serializer";
35
+ export declare const SERIALIZER_MARKER_VALUE = "superjson";
36
+ /**
37
+ * SolidActionsJSON with SuperJSON support for richer type serialization.
38
+ *
39
+ * Backwards compatible - can deserialize both old SolidActionsJSON format and new SuperJSON format.
40
+ * New serialization uses SuperJSON to handle Sets, Maps, undefined, RegExp, circular refs, etc.
41
+ */
42
+ export declare const SolidActionsJSON: SolidActionsSerializer;
43
+ type PathToMember = Array<string | number | symbol>;
44
+ /**
45
+ * Roundtrips `value` through serialization. This doesn't preserve functions by default.
46
+ * So then, we recursively attach function stubs that throw clear errors, for any
47
+ * functions present on the original (own props + prototype methods) that
48
+ * aren't present as functions on the deserialized object.
49
+ * The return is both the deserialized object and its serialized string.
50
+ */
51
+ export declare function serializeFunctionInputOutput<T>(value: T, path: PathToMember | undefined, serializer: SolidActionsSerializer): {
52
+ deserialized: T;
53
+ stringified: string;
54
+ };
55
+ export declare function safeParse(serializer: SolidActionsSerializer, val: string): unknown;
56
+ export declare function safeParseError(serializer: SolidActionsSerializer, val: string): Error;
57
+ //# sourceMappingURL=serialization.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"serialization.d.ts","sourceRoot":"","sources":["../../src/serialization.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAmB,SAAS,EAAE,MAAM,sBAAsB,CAAC;AACvE,OAAO,EAAE,KAAK,SAAS,EAAE,CAAC;AAE1B;;;GAGG;AACH,MAAM,WAAW,sBAAsB;IACrC;;;;OAIG;IACH,SAAS,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAAC;IAElC;;;;OAIG;IACH,KAAK,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GAAG,OAAO,CAAC;CACjD;AAED,MAAM,MAAM,mBAAmB,CAAC,CAAC,EAAE,CAAC,SAAS,SAAS,IAAI;IACxD,IAAI,EAAE,MAAM,CAAC;IACb,YAAY,EAAE,CAAC,CAAC,EAAE,OAAO,KAAK,CAAC,IAAI,CAAC,CAAC;IACrC,SAAS,EAAE,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC;IACvB,WAAW,EAAE,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC;CAC1B,CAAC;AAEF,wBAAgB,2BAA2B,CAAC,CAAC,EAAE,CAAC,SAAS,SAAS,EAAE,CAAC,EAAE,mBAAmB,CAAC,CAAC,EAAE,CAAC,CAAC,QAE/F;AA8CD,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,WAmB1E;AAsBD,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,GAAG,OAAO,CAWzE;AAGD,eAAO,MAAM,sBAAsB;kBACnB,MAAM,GAAG,IAAI;uBAIR,OAAO,KAAG,MAAM,GAAG,SAAS;CAGhD,CAAC;AAGF,eAAO,MAAM,qBAAqB,8BAA8B,CAAC;AACjE,eAAO,MAAM,uBAAuB,cAAc,CAAC;AAkCnD;;;;;GAKG;AACH,eAAO,MAAM,gBAAgB,EAAE,sBAiC9B,CAAC;AAKF,KAAK,YAAY,GAAG,KAAK,CAAC,MAAM,GAAG,MAAM,GAAG,MAAM,CAAC,CAAC;AAGpD;;;;;;GAMG;AACH,wBAAgB,4BAA4B,CAAC,CAAC,EAC5C,KAAK,EAAE,CAAC,EACR,IAAI,0BAAmB,EACvB,UAAU,EAAE,sBAAsB,GACjC;IAAE,YAAY,EAAE,CAAC,CAAC;IAAC,WAAW,EAAE,MAAM,CAAA;CAAE,CAO1C;AA+ID,wBAAgB,SAAS,CAAC,UAAU,EAAE,sBAAsB,EAAE,GAAG,EAAE,MAAM,WAMxE;AAED,wBAAgB,cAAc,CAAC,UAAU,EAAE,sBAAsB,EAAE,GAAG,EAAE,MAAM,SAM7E"}