@dbos-inc/dbos-sdk 2.10.21-preview → 2.11.4-preview

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 (62) hide show
  1. package/dist/src/authdecorators.d.ts +9 -0
  2. package/dist/src/authdecorators.d.ts.map +1 -0
  3. package/dist/src/authdecorators.js +71 -0
  4. package/dist/src/authdecorators.js.map +1 -0
  5. package/dist/src/context.d.ts +8 -3
  6. package/dist/src/context.d.ts.map +1 -1
  7. package/dist/src/context.js.map +1 -1
  8. package/dist/src/dbos-executor.d.ts +1 -1
  9. package/dist/src/dbos-executor.d.ts.map +1 -1
  10. package/dist/src/dbos-executor.js +45 -22
  11. package/dist/src/dbos-executor.js.map +1 -1
  12. package/dist/src/dbos-runtime/cloudutils/databases.d.ts +1 -1
  13. package/dist/src/dbos-runtime/migrate.d.ts +2 -2
  14. package/dist/src/dbos-runtime/workflow_management.d.ts +1 -0
  15. package/dist/src/dbos-runtime/workflow_management.d.ts.map +1 -1
  16. package/dist/src/dbos-runtime/workflow_management.js +12 -1
  17. package/dist/src/dbos-runtime/workflow_management.js.map +1 -1
  18. package/dist/src/dbos.d.ts +59 -4
  19. package/dist/src/dbos.d.ts.map +1 -1
  20. package/dist/src/dbos.js +82 -18
  21. package/dist/src/dbos.js.map +1 -1
  22. package/dist/src/decorators.d.ts +73 -52
  23. package/dist/src/decorators.d.ts.map +1 -1
  24. package/dist/src/decorators.js +297 -246
  25. package/dist/src/decorators.js.map +1 -1
  26. package/dist/src/httpServer/handler.d.ts.map +1 -1
  27. package/dist/src/httpServer/handler.js +3 -2
  28. package/dist/src/httpServer/handler.js.map +1 -1
  29. package/dist/src/httpServer/middleware.d.ts +2 -4
  30. package/dist/src/httpServer/middleware.d.ts.map +1 -1
  31. package/dist/src/httpServer/middleware.js +3 -3
  32. package/dist/src/httpServer/middleware.js.map +1 -1
  33. package/dist/src/httpServer/server.d.ts +2 -0
  34. package/dist/src/httpServer/server.d.ts.map +1 -1
  35. package/dist/src/httpServer/server.js +205 -185
  36. package/dist/src/httpServer/server.js.map +1 -1
  37. package/dist/src/index.d.ts +5 -3
  38. package/dist/src/index.d.ts.map +1 -1
  39. package/dist/src/index.js +25 -20
  40. package/dist/src/index.js.map +1 -1
  41. package/dist/src/paramdecorators.d.ts +30 -0
  42. package/dist/src/paramdecorators.d.ts.map +1 -0
  43. package/dist/src/paramdecorators.js +362 -0
  44. package/dist/src/paramdecorators.js.map +1 -0
  45. package/dist/src/system_database.d.ts +3 -2
  46. package/dist/src/system_database.d.ts.map +1 -1
  47. package/dist/src/system_database.js +27 -0
  48. package/dist/src/system_database.js.map +1 -1
  49. package/dist/src/testing/testing_runtime.d.ts +1 -2
  50. package/dist/src/testing/testing_runtime.d.ts.map +1 -1
  51. package/dist/src/testing/testing_runtime.js +1 -0
  52. package/dist/src/testing/testing_runtime.js.map +1 -1
  53. package/dist/src/workflow.d.ts +2 -2
  54. package/dist/src/workflow.d.ts.map +1 -1
  55. package/dist/src/workflow.js +1 -1
  56. package/dist/src/workflow.js.map +1 -1
  57. package/dist/tsconfig.tsbuildinfo +1 -1
  58. package/package.json +1 -1
  59. package/dist/src/data_validation.d.ts +0 -3
  60. package/dist/src/data_validation.d.ts.map +0 -1
  61. package/dist/src/data_validation.js +0 -185
  62. package/dist/src/data_validation.js.map +0 -1
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@dbos-inc/dbos-sdk",
3
- "version": "2.10.21-preview",
3
+ "version": "2.11.4-preview",
4
4
  "description": "A Typescript framework built on the database",
5
5
  "license": "MIT",
6
6
  "repository": {
@@ -1,3 +0,0 @@
1
- import { MethodRegistrationBase } from './decorators';
2
- export declare function validateMethodArgs<Args extends unknown[]>(methReg: MethodRegistrationBase, args: Args): Args;
3
- //# sourceMappingURL=data_validation.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"data_validation.d.ts","sourceRoot":"","sources":["../../src/data_validation.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,sBAAsB,EAAsB,MAAM,cAAc,CAAC;AAI1E,wBAAgB,kBAAkB,CAAC,IAAI,SAAS,OAAO,EAAE,EAAE,OAAO,EAAE,sBAAsB,EAAE,IAAI,EAAE,IAAI,QAmNrG"}
@@ -1,185 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.validateMethodArgs = void 0;
4
- const decorators_1 = require("./decorators");
5
- const context_1 = require("./context");
6
- const error_1 = require("./error");
7
- function validateMethodArgs(methReg, args) {
8
- let opCtx = undefined;
9
- if (!methReg.passContext) {
10
- opCtx = (0, context_1.getCurrentDBOSContext)();
11
- }
12
- const validationError = (msg) => {
13
- const err = new error_1.DBOSDataValidationError(msg);
14
- opCtx?.span?.addEvent('DataValidationError', { message: err.message });
15
- return err;
16
- };
17
- // Input validation
18
- methReg.args.forEach((argDescriptor, idx) => {
19
- if (idx === 0 && methReg.passContext) {
20
- // Context, may find a more robust way.
21
- opCtx = args[idx];
22
- return;
23
- }
24
- if (!methReg.performArgValidation &&
25
- !methReg.defaults?.defaultArgValidate &&
26
- argDescriptor.required !== decorators_1.ArgRequiredOptions.REQUIRED) {
27
- return;
28
- }
29
- // Do we have an arg at all
30
- if (idx >= args.length) {
31
- if (argDescriptor.required === decorators_1.ArgRequiredOptions.REQUIRED ||
32
- (argDescriptor.required === decorators_1.ArgRequiredOptions.DEFAULT &&
33
- methReg.defaults?.defaultArgRequired === decorators_1.ArgRequiredOptions.REQUIRED)) {
34
- throw validationError(`Insufficient number of arguments calling ${methReg.name} - ${args.length}/${methReg.args.length}`);
35
- }
36
- return;
37
- }
38
- let argValue = args[idx];
39
- // So... there is such a thing as "undefined", and another thing called "null"
40
- // We will fold this to "undefined" for our APIs. It's just a rule of ours.
41
- if (argValue === null) {
42
- argValue = undefined;
43
- args[idx] = undefined;
44
- }
45
- if (argValue === undefined &&
46
- methReg.defaults?.argRequiredEnabled &&
47
- (argDescriptor.required === decorators_1.ArgRequiredOptions.REQUIRED ||
48
- (argDescriptor.required === decorators_1.ArgRequiredOptions.DEFAULT &&
49
- methReg.defaults?.defaultArgRequired === decorators_1.ArgRequiredOptions.REQUIRED))) {
50
- throw validationError(`Missing required argument ${argDescriptor.name} of ${methReg.name}`);
51
- }
52
- if (argValue === undefined) {
53
- return;
54
- }
55
- if (argValue instanceof String) {
56
- argValue = argValue.toString();
57
- args[idx] = argValue;
58
- }
59
- if (argValue instanceof Boolean) {
60
- argValue = argValue.valueOf();
61
- args[idx] = argValue;
62
- }
63
- if (argValue instanceof Number) {
64
- argValue = argValue.valueOf();
65
- args[idx] = argValue;
66
- }
67
- if (argValue instanceof BigInt) {
68
- // ES2020+
69
- argValue = argValue.valueOf();
70
- args[idx] = argValue;
71
- }
72
- // Argument validation - below - if we have any info about it
73
- if (!argDescriptor.dataType)
74
- return;
75
- // Maybe look into https://www.npmjs.com/package/validator
76
- // We could support emails and other validations too with something like that...
77
- if (argDescriptor.dataType.dataType === 'text' || argDescriptor.dataType.dataType === 'varchar') {
78
- if (typeof argValue !== 'string') {
79
- throw validationError(`Argument ${argDescriptor.name} of ${methReg.name} is marked as type '${argDescriptor.dataType.dataType}' and should be a string`);
80
- }
81
- if (argDescriptor.dataType.length > 0) {
82
- if (argValue.length > argDescriptor.dataType.length) {
83
- throw validationError(`Argument ${argDescriptor.name} of ${methReg.name} is marked as type '${argDescriptor.dataType.dataType}' with maximum length ${argDescriptor.dataType.length} but has length ${argValue.length}`);
84
- }
85
- }
86
- }
87
- if (argDescriptor.dataType.dataType === 'boolean') {
88
- if (typeof argValue !== 'boolean') {
89
- if (typeof argValue === 'number') {
90
- if (argValue === 0 || argValue === 1) {
91
- argValue = argValue !== 0 ? true : false;
92
- args[idx] = argValue;
93
- }
94
- else {
95
- throw validationError(`Argument ${argDescriptor.name} of ${methReg.name} is marked as type '${argDescriptor.dataType.dataType}' and may be a number (0 or 1) convertible to boolean, but was ${argValue}.`);
96
- }
97
- }
98
- else if (typeof argValue === 'string') {
99
- if (argValue.toLowerCase() === 't' || argValue.toLowerCase() === 'true' || argValue === '1') {
100
- argValue = true;
101
- args[idx] = argValue;
102
- }
103
- else if (argValue.toLowerCase() === 'f' || argValue.toLowerCase() === 'false' || argValue === '0') {
104
- argValue = false;
105
- args[idx] = argValue;
106
- }
107
- else {
108
- throw validationError(`Argument ${argDescriptor.name} of ${methReg.name} is marked as type '${argDescriptor.dataType.dataType}' and may be a string convertible to boolean, but was ${argValue}.`);
109
- }
110
- }
111
- else {
112
- throw validationError(`Argument ${argDescriptor.name} of ${methReg.name} is marked as type '${argDescriptor.dataType.dataType}' and should be a boolean`);
113
- }
114
- }
115
- }
116
- if (argDescriptor.dataType.dataType === 'decimal') {
117
- // Range check precision and scale... wishing there was a bigdecimal
118
- // Floats don't really permit us to check the scale.
119
- if (typeof argValue !== 'number') {
120
- throw validationError(`Argument ${argDescriptor.name} of ${methReg.name} is marked as type '${argDescriptor.dataType.dataType}' and should be a number`);
121
- }
122
- let prec = argDescriptor.dataType.precision;
123
- if (prec > 0) {
124
- if (argDescriptor.dataType.scale > 0) {
125
- prec = prec - argDescriptor.dataType.scale;
126
- }
127
- if (Math.abs(argValue) >= Math.exp(prec)) {
128
- throw validationError(`Argument ${argDescriptor.name} of ${methReg.name} is out of range for type '${argDescriptor.dataType.formatAsString()}`);
129
- }
130
- }
131
- }
132
- if (argDescriptor.dataType.dataType === 'double' || argDescriptor.dataType.dataType === 'integer') {
133
- if (typeof argValue !== 'number') {
134
- if (typeof argValue === 'string') {
135
- const n = parseFloat(argValue);
136
- if (isNaN(n)) {
137
- throw validationError(`Argument ${argDescriptor.name} of ${methReg.name} is marked as type '${argDescriptor.dataType.dataType}' and should be a number`);
138
- }
139
- argValue = n;
140
- args[idx] = argValue;
141
- }
142
- else if (typeof argValue === 'bigint') {
143
- // Hum, maybe we should allow bigint as a type, number won't even do 64-bit.
144
- argValue = Number(argValue).valueOf();
145
- args[idx] = argValue;
146
- }
147
- else {
148
- throw validationError(`Argument ${argDescriptor.name} of ${methReg.name} is marked as type '${argDescriptor.dataType.dataType}' and should be a number`);
149
- }
150
- }
151
- if (argDescriptor.dataType.dataType === 'integer') {
152
- if (!Number.isInteger(argValue)) {
153
- throw validationError(`Argument ${argDescriptor.name} of ${methReg.name} is marked as type '${argDescriptor.dataType.dataType}' but has a fractional part`);
154
- }
155
- }
156
- }
157
- if (argDescriptor.dataType.dataType === 'timestamp') {
158
- if (!(argValue instanceof Date)) {
159
- if (typeof argValue === 'string') {
160
- const d = Date.parse(argValue);
161
- if (isNaN(d)) {
162
- throw validationError(`Argument ${argDescriptor.name} of ${methReg.name} is marked as type '${argDescriptor.dataType.dataType}' but is a string that will not parse as Date`);
163
- }
164
- argValue = new Date(d);
165
- args[idx] = argValue;
166
- }
167
- else {
168
- throw validationError(`Argument ${argDescriptor.name} of ${methReg.name} is marked as type '${argDescriptor.dataType.dataType}' but is not a date or time`);
169
- }
170
- }
171
- }
172
- if (argDescriptor.dataType.dataType === 'uuid') {
173
- // This validation is loose. A tighter one would be:
174
- // /^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-5][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}$/
175
- // That matches UUID version 1-5.
176
- if (!/^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$/.test(String(argValue))) {
177
- throw validationError(`Argument ${argDescriptor.name} of ${methReg.name} is marked as type '${argDescriptor.dataType.dataType}' but is not a valid UUID`);
178
- }
179
- }
180
- // JSON can be anything. We can validate it against a schema at some later version...
181
- });
182
- return args;
183
- }
184
- exports.validateMethodArgs = validateMethodArgs;
185
- //# sourceMappingURL=data_validation.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"data_validation.js","sourceRoot":"","sources":["../../src/data_validation.ts"],"names":[],"mappings":"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"}