@sdkgen/node-runtime 2.3.2 → 2.5.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 (54) hide show
  1. package/dist/api-config.js +19 -0
  2. package/dist/{src/context.d.ts → context.d.ts} +1 -0
  3. package/dist/context.js +3 -0
  4. package/dist/encode-decode.js +344 -0
  5. package/dist/error.js +33 -0
  6. package/dist/execute.js +57 -0
  7. package/dist/http-client.js +107 -0
  8. package/dist/{src/http-server.d.ts → http-server.d.ts} +1 -0
  9. package/dist/http-server.js +941 -0
  10. package/dist/{src/index.js → index.js} +1 -0
  11. package/dist/swagger.js +454 -0
  12. package/dist/test-wrapper.js +58 -0
  13. package/dist/utils.js +8 -0
  14. package/package.json +50 -34
  15. package/.eslintignore +0 -1
  16. package/.eslintrc.json +0 -3
  17. package/.prettierrc +0 -12
  18. package/.vscode/settings.json +0 -14
  19. package/dist/spec/error.spec.d.ts +0 -1
  20. package/dist/spec/error.spec.js +0 -15
  21. package/dist/spec/rest/rest.spec.d.ts +0 -1
  22. package/dist/spec/rest/rest.spec.js +0 -353
  23. package/dist/spec/runtime/errors.spec.d.ts +0 -1
  24. package/dist/spec/runtime/errors.spec.js +0 -43
  25. package/dist/spec/runtime/middleware.spec.d.ts +0 -1
  26. package/dist/spec/runtime/middleware.spec.js +0 -100
  27. package/dist/spec/simple/legacyNodeClient.d.ts +0 -17
  28. package/dist/spec/simple/legacyNodeClient.js +0 -128
  29. package/dist/spec/simple/simple.spec.d.ts +0 -1
  30. package/dist/spec/simple/simple.spec.js +0 -113
  31. package/dist/spec/types.d.ts +0 -1
  32. package/dist/spec/types.js +0 -60
  33. package/dist/spec/types.spec.d.ts +0 -1
  34. package/dist/spec/types.spec.js +0 -128
  35. package/dist/src/api-config.js +0 -19
  36. package/dist/src/context.js +0 -2
  37. package/dist/src/encode-decode.js +0 -376
  38. package/dist/src/error.js +0 -32
  39. package/dist/src/execute.js +0 -56
  40. package/dist/src/http-client.js +0 -105
  41. package/dist/src/http-server.js +0 -941
  42. package/dist/src/swagger.js +0 -439
  43. package/dist/src/test-wrapper.js +0 -52
  44. package/dist/src/utils.js +0 -7
  45. package/dist/tsconfig.tsbuildinfo +0 -1
  46. /package/dist/{src/api-config.d.ts → api-config.d.ts} +0 -0
  47. /package/dist/{src/encode-decode.d.ts → encode-decode.d.ts} +0 -0
  48. /package/dist/{src/error.d.ts → error.d.ts} +0 -0
  49. /package/dist/{src/execute.d.ts → execute.d.ts} +0 -0
  50. /package/dist/{src/http-client.d.ts → http-client.d.ts} +0 -0
  51. /package/dist/{src/index.d.ts → index.d.ts} +0 -0
  52. /package/dist/{src/swagger.d.ts → swagger.d.ts} +0 -0
  53. /package/dist/{src/test-wrapper.d.ts → test-wrapper.d.ts} +0 -0
  54. /package/dist/{src/utils.d.ts → utils.d.ts} +0 -0
@@ -0,0 +1,19 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.BaseApiConfig = void 0;
4
+ const parser_1 = require("@sdkgen/parser");
5
+ class BaseApiConfig {
6
+ constructor() {
7
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
8
+ this.fn = {};
9
+ this.middlewares = [];
10
+ }
11
+ get ast() {
12
+ return (this._ast ??= (0, parser_1.jsonToAst)(this.astJson));
13
+ }
14
+ use(middleware) {
15
+ this.middlewares.push(middleware);
16
+ }
17
+ }
18
+ exports.BaseApiConfig = BaseApiConfig;
19
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBpLWNvbmZpZy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9hcGktY29uZmlnLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUNBLDJDQUEyQztBQU8zQyxNQUFhLGFBQWE7SUFBMUI7UUFTRSw4REFBOEQ7UUFDOUQsT0FBRSxHQUE0RixFQUFFLENBQUM7UUFFeEYsZ0JBQVcsR0FBcUMsRUFBRSxDQUFDO0lBSzlELENBQUM7SUFkQyxJQUFJLEdBQUc7UUFDTCxPQUFPLENBQUMsSUFBSSxDQUFDLElBQUksS0FBSyxJQUFBLGtCQUFTLEVBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUM7SUFDakQsQ0FBQztJQVNELEdBQUcsQ0FBQyxVQUFxQztRQUN2QyxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQztJQUNwQyxDQUFDO0NBQ0Y7QUFqQkQsc0NBaUJDIn0=
@@ -15,6 +15,7 @@ export interface ContextRequest {
15
15
  };
16
16
  extra: Record<string, unknown>;
17
17
  headers: IncomingHttpHeaders;
18
+ query: string | null;
18
19
  id: string;
19
20
  ip: string;
20
21
  name: string;
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29udGV4dC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9jb250ZXh0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiIifQ==
@@ -0,0 +1,344 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.decode = exports.encode = void 0;
4
+ const tslib_1 = require("tslib");
5
+ const CNPJ = tslib_1.__importStar(require("@fnando/cnpj"));
6
+ const CPF = tslib_1.__importStar(require("@fnando/cpf"));
7
+ const decimal_js_1 = require("decimal.js");
8
+ const simpleStringTypes = ["string", "email", "html", "xml"];
9
+ const simpleTypes = ["json", "bool", "url", "int", "uint", "float", "money", "hex", "uuid", "base64", "void", ...simpleStringTypes];
10
+ class ParseError extends Error {
11
+ constructor(path, type, value) {
12
+ let str;
13
+ try {
14
+ str = JSON.stringify(value);
15
+ }
16
+ catch (err) {
17
+ str = String(value);
18
+ }
19
+ super(`Invalid type at '${path}', expected ${String(type)}, got ${str}`);
20
+ }
21
+ }
22
+ function simpleEncodeDecode(path, type, value) {
23
+ if (type === "json") {
24
+ if (value === null || value === undefined) {
25
+ return null;
26
+ }
27
+ return JSON.parse(JSON.stringify(value));
28
+ }
29
+ else if (type === "bool") {
30
+ if (typeof value !== "boolean") {
31
+ throw new ParseError(path, type, value);
32
+ }
33
+ return value;
34
+ }
35
+ else if (simpleStringTypes.includes(type)) {
36
+ if (typeof value !== "string") {
37
+ throw new ParseError(path, type, value);
38
+ }
39
+ return value;
40
+ }
41
+ else if (type === "hex") {
42
+ if (typeof value !== "string" || !/^(?:[A-Fa-f0-9]{2})*$/u.test(value)) {
43
+ throw new ParseError(path, type, value);
44
+ }
45
+ return value.toLowerCase();
46
+ }
47
+ else if (type === "uuid") {
48
+ if (typeof value !== "string" || !/^[A-Fa-f0-9]{8}-[A-Fa-f0-9]{4}-[A-Fa-f0-9]{4}-[A-Fa-f0-9]{4}-[A-Fa-f0-9]{12}$/u.test(value)) {
49
+ throw new ParseError(path, type, value);
50
+ }
51
+ return value.toLowerCase();
52
+ }
53
+ else if (type === "base64") {
54
+ if (typeof value !== "string" || Buffer.from(value, "base64").toString("base64") !== value) {
55
+ throw new ParseError(path, type, value);
56
+ }
57
+ return value;
58
+ }
59
+ else if (type === "int") {
60
+ if (typeof value !== "number" || (value | 0) !== value) {
61
+ throw new ParseError(path, type, value);
62
+ }
63
+ return value;
64
+ }
65
+ else if (type === "uint") {
66
+ if (typeof value !== "number" || (value | 0) !== value || value < 0) {
67
+ throw new ParseError(path, type, value);
68
+ }
69
+ return value;
70
+ }
71
+ else if (type === "float") {
72
+ if (typeof value !== "number") {
73
+ throw new ParseError(path, type, value);
74
+ }
75
+ return value;
76
+ }
77
+ else if (type === "money") {
78
+ if (typeof value !== "number" || !Number.isInteger(value)) {
79
+ throw new ParseError(path, type, value);
80
+ }
81
+ return value;
82
+ }
83
+ else if (type === "url") {
84
+ let url;
85
+ if (typeof value === "string") {
86
+ try {
87
+ url = new URL(value);
88
+ }
89
+ catch (e) {
90
+ // ignore
91
+ }
92
+ }
93
+ if (!url) {
94
+ throw new ParseError(path, type, value);
95
+ }
96
+ return url.toString();
97
+ }
98
+ else if (type === "void") {
99
+ return null;
100
+ }
101
+ throw new Error(`Unknown type '${type}' at '${path}'`);
102
+ }
103
+ function encode(typeTable, path, type, value) {
104
+ if (typeof type === "string" && !type.endsWith("?") && type !== "void" && (value === null || value === undefined)) {
105
+ throw new Error(`Invalid type at '${path}', cannot be null`);
106
+ }
107
+ else if (Array.isArray(type)) {
108
+ if (type.every(tag => typeof tag === "string")) {
109
+ for (const tag of type) {
110
+ if (tag === value) {
111
+ return tag;
112
+ }
113
+ }
114
+ }
115
+ else if (typeof value === "object" && value && "tag" in value) {
116
+ const { tag: tagValue, ...restValue } = value;
117
+ for (const entry of type) {
118
+ if (typeof entry === "string") {
119
+ if (entry === tagValue) {
120
+ return entry;
121
+ }
122
+ }
123
+ else {
124
+ const [tag, valueType] = entry;
125
+ if (tag === tagValue) {
126
+ const encodedValues = encode(typeTable, `${path}.${tag}`, valueType, restValue);
127
+ // eslint-disable-next-line max-depth
128
+ if (Object.values(encodedValues).every(v => v === null)) {
129
+ return tag;
130
+ }
131
+ return [tag, encodedValues];
132
+ }
133
+ }
134
+ }
135
+ }
136
+ throw new ParseError(path, type, value);
137
+ }
138
+ else if (typeof type === "object") {
139
+ if (typeof value !== "object") {
140
+ throw new ParseError(path, type, value);
141
+ }
142
+ const obj = {};
143
+ for (const key of Object.keys(type)) {
144
+ obj[key] = encode(typeTable, `${path}.${key}`, type[key], value[key]);
145
+ }
146
+ return obj;
147
+ }
148
+ else if (typeof type === "string" && type.endsWith("?")) {
149
+ if (value === null || value === undefined) {
150
+ return null;
151
+ }
152
+ return encode(typeTable, path, type.slice(0, type.length - 1), value);
153
+ }
154
+ else if (typeof type === "string" && type.endsWith("[]")) {
155
+ if (!Array.isArray(value)) {
156
+ throw new ParseError(path, type, value);
157
+ }
158
+ return value.map((entry, index) => encode(typeTable, `${path}[${index}]`, type.slice(0, type.length - 2), entry));
159
+ }
160
+ else if (typeof type === "string" && simpleTypes.includes(type)) {
161
+ return simpleEncodeDecode(path, type, value);
162
+ }
163
+ else if (type === "bytes") {
164
+ if (!(value instanceof Buffer)) {
165
+ throw new ParseError(path, type, value);
166
+ }
167
+ return value.toString("base64");
168
+ }
169
+ else if (type === "bigint") {
170
+ if (!(typeof value === "bigint")) {
171
+ throw new ParseError(path, type, value);
172
+ }
173
+ return value.toString();
174
+ }
175
+ else if (type === "cpf") {
176
+ if (typeof value !== "string" || !CPF.isValid(value)) {
177
+ throw new ParseError(path, type, value);
178
+ }
179
+ return CPF.strip(value);
180
+ }
181
+ else if (type === "cnpj") {
182
+ if (typeof value !== "string" || !CNPJ.isValid(value)) {
183
+ throw new ParseError(path, type, value);
184
+ }
185
+ return CNPJ.strip(value);
186
+ }
187
+ else if (type === "date") {
188
+ if (!(value instanceof Date && !isNaN(value.getTime())) && !(typeof value === "string" && /^[0-9]{4}-[01][0-9]-[0123][0-9]$/u.test(value))) {
189
+ throw new ParseError(path, type, value);
190
+ }
191
+ const dateValue = value instanceof Date ? value : new Date(value);
192
+ return `${dateValue.getFullYear().toString().padStart(4, "0")}-${(dateValue.getMonth() + 1).toString().padStart(2, "0")}-${dateValue
193
+ .getDate()
194
+ .toString()
195
+ .padStart(2, "0")}`;
196
+ }
197
+ else if (type === "datetime") {
198
+ if (!(value instanceof Date && !isNaN(value.getTime())) &&
199
+ !(typeof value === "string" &&
200
+ /^[0-9]{4}-[01][0-9]-[0123][0-9]T[012][0-9]:[0123456][0-9]:[0123456][0-9](?:\.[0-9]{1,6})?(?:Z|[+-][012][0-9]:[0123456][0-9])?$/u.test(value))) {
201
+ throw new ParseError(path, type, value);
202
+ }
203
+ return (typeof value === "string" ? new Date(value) : value).toISOString().replace("Z", "");
204
+ }
205
+ else if (type === "decimal") {
206
+ if (typeof value !== "number" && (typeof value !== "string" || !/^-?[0-9]+(?:\.[0-9]+)?$/u.test(value)) && !decimal_js_1.Decimal.isDecimal(value)) {
207
+ throw new ParseError(path, type, value);
208
+ }
209
+ return new decimal_js_1.Decimal(value).toString();
210
+ }
211
+ else {
212
+ // eslint-disable-next-line @typescript-eslint/no-unnecessary-type-assertion
213
+ const resolved = typeTable[type];
214
+ if (resolved) {
215
+ return encode(typeTable, path, resolved, value);
216
+ }
217
+ throw new Error(`Unknown type '${String(type)}' at '${path}'`);
218
+ }
219
+ }
220
+ exports.encode = encode;
221
+ function decode(typeTable, path, type, value) {
222
+ if (typeof type === "string" && !type.endsWith("?") && type !== "void" && (value === null || value === undefined)) {
223
+ throw new Error(`Invalid type at '${path}', cannot be null`);
224
+ }
225
+ else if (Array.isArray(type)) {
226
+ if (type.every(tag => typeof tag === "string")) {
227
+ for (const tag of type) {
228
+ if (tag === value) {
229
+ return tag;
230
+ }
231
+ }
232
+ }
233
+ else {
234
+ for (const entry of type) {
235
+ if (typeof entry === "string") {
236
+ if (entry === value) {
237
+ return { tag: entry };
238
+ }
239
+ }
240
+ else {
241
+ const [tag, valueType] = entry;
242
+ if (tag === value) {
243
+ const decodedValues = decode(typeTable, `${path}.${tag}`, valueType, {});
244
+ return { ...decodedValues, tag };
245
+ }
246
+ else if (Array.isArray(value) && value.length === 2 && tag === value[0]) {
247
+ const decodedValues = decode(typeTable, `${path}.${tag}`, valueType, value[1]);
248
+ return { ...decodedValues, tag };
249
+ }
250
+ }
251
+ }
252
+ }
253
+ throw new ParseError(path, type, value);
254
+ }
255
+ else if (typeof type === "object") {
256
+ if (typeof value !== "object") {
257
+ throw new ParseError(path, type, value);
258
+ }
259
+ const obj = {};
260
+ for (const key of Object.keys(type)) {
261
+ obj[key] = decode(typeTable, `${path}.${key}`, type[key], value[key]);
262
+ }
263
+ return obj;
264
+ }
265
+ else if (typeof type === "string" && type.endsWith("?")) {
266
+ if (value === null || value === undefined) {
267
+ return null;
268
+ }
269
+ return decode(typeTable, path, type.slice(0, type.length - 1), value);
270
+ }
271
+ else if (typeof type === "string" && type.endsWith("[]")) {
272
+ if (!Array.isArray(value)) {
273
+ throw new ParseError(path, type, value);
274
+ }
275
+ return value.map((entry, index) => decode(typeTable, `${path}[${index}]`, type.slice(0, type.length - 2), entry));
276
+ }
277
+ else if (typeof type === "string" && simpleTypes.includes(type)) {
278
+ return simpleEncodeDecode(path, type, value);
279
+ }
280
+ else if (type === "bytes") {
281
+ if (typeof value !== "string") {
282
+ throw new ParseError(path, `${String(type)} (base 64)`, value);
283
+ }
284
+ const buffer = Buffer.from(value, "base64");
285
+ if (buffer.toString("base64") !== value) {
286
+ throw new ParseError(path, `${String(type)} (base 64)`, value);
287
+ }
288
+ return buffer;
289
+ }
290
+ else if (type === "bigint") {
291
+ if (typeof value !== "number" && (typeof value !== "string" || !/^-?[0-9]+$/u.test(value))) {
292
+ throw new ParseError(path, type, value);
293
+ }
294
+ return BigInt(value);
295
+ }
296
+ else if (type === "cpf") {
297
+ if (typeof value !== "string" || !CPF.isValid(value)) {
298
+ throw new ParseError(path, type, value);
299
+ }
300
+ return CPF.format(value);
301
+ }
302
+ else if (type === "cnpj") {
303
+ if (typeof value !== "string" || !CNPJ.isValid(value)) {
304
+ throw new ParseError(path, type, value);
305
+ }
306
+ return CNPJ.format(value);
307
+ }
308
+ else if (type === "date") {
309
+ if (typeof value !== "string" || !/^[0-9]{4}-[01][0-9]-[0123][0-9]$/u.test(value)) {
310
+ throw new ParseError(path, type, value);
311
+ }
312
+ const day = parseInt(value.split("-")[2], 10);
313
+ const month = parseInt(value.split("-")[1], 10) - 1;
314
+ const year = parseInt(value.split("-")[0], 10);
315
+ const date = new Date(year, month, day);
316
+ if (date.getFullYear() !== year || date.getMonth() !== month || date.getDate() !== day) {
317
+ throw new ParseError(path, type, value);
318
+ }
319
+ return date;
320
+ }
321
+ else if (type === "datetime") {
322
+ if (typeof value !== "string" || !/^[0-9]{4}-[01][0-9]-[0123][0-9]T[012][0-9]:[0123456][0-9]:[0123456][0-9](?:\.[0-9]{1,6})?Z?$/u.test(value)) {
323
+ throw new ParseError(path, type, value);
324
+ }
325
+ return new Date(`${value.endsWith("Z") ? value : value.concat("Z")}`);
326
+ }
327
+ else if (type === "decimal") {
328
+ if (typeof value !== "number" && (typeof value !== "string" || !/^-?[0-9]+(?:\.[0-9]+)?$/u.test(value))) {
329
+ throw new ParseError(path, type, value);
330
+ }
331
+ return new decimal_js_1.Decimal(value);
332
+ }
333
+ else {
334
+ // eslint-disable-next-line @typescript-eslint/no-unnecessary-type-assertion
335
+ const resolved = typeTable[type];
336
+ if (resolved) {
337
+ // eslint-disable-next-line @typescript-eslint/no-unsafe-return
338
+ return decode(typeTable, path, resolved, value);
339
+ }
340
+ throw new Error(`Unknown type '${String(type)}' at '${path}'`);
341
+ }
342
+ }
343
+ exports.decode = decode;
344
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW5jb2RlLWRlY29kZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9lbmNvZGUtZGVjb2RlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7QUFBQSwyREFBcUM7QUFDckMseURBQW1DO0FBRW5DLDJDQUFxQztBQU1yQyxNQUFNLGlCQUFpQixHQUFHLENBQUMsUUFBUSxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsS0FBSyxDQUFDLENBQUM7QUFDN0QsTUFBTSxXQUFXLEdBQUcsQ0FBQyxNQUFNLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLEdBQUcsaUJBQWlCLENBQUMsQ0FBQztBQWtHcEksTUFBTSxVQUFXLFNBQVEsS0FBSztJQUM1QixZQUFZLElBQVksRUFBRSxJQUFtQyxFQUFFLEtBQWM7UUFDM0UsSUFBSSxHQUFXLENBQUM7UUFFaEIsSUFBSTtZQUNGLEdBQUcsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxDQUFDO1NBQzdCO1FBQUMsT0FBTyxHQUFHLEVBQUU7WUFDWixHQUFHLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO1NBQ3JCO1FBRUQsS0FBSyxDQUFDLG9CQUFvQixJQUFJLGVBQWUsTUFBTSxDQUFDLElBQUksQ0FBQyxTQUFTLEdBQUcsRUFBRSxDQUFDLENBQUM7SUFDM0UsQ0FBQztDQUNGO0FBRUQsU0FBUyxrQkFBa0IsQ0FBQyxJQUFZLEVBQUUsSUFBWSxFQUFFLEtBQWM7SUFDcEUsSUFBSSxJQUFJLEtBQUssTUFBTSxFQUFFO1FBQ25CLElBQUksS0FBSyxLQUFLLElBQUksSUFBSSxLQUFLLEtBQUssU0FBUyxFQUFFO1lBQ3pDLE9BQU8sSUFBSSxDQUFDO1NBQ2I7UUFFRCxPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLFNBQVMs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
package/dist/error.js ADDED
@@ -0,0 +1,33 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.Fatal = exports.SdkgenErrorWithData = exports.SdkgenError = void 0;
4
+ class SdkgenError extends Error {
5
+ get type() {
6
+ return this.constructor.name;
7
+ }
8
+ toJSON() {
9
+ return {
10
+ message: this.message,
11
+ type: this.type,
12
+ };
13
+ }
14
+ }
15
+ exports.SdkgenError = SdkgenError;
16
+ class SdkgenErrorWithData extends SdkgenError {
17
+ constructor(message, data) {
18
+ super(message);
19
+ this.data = data;
20
+ }
21
+ toJSON() {
22
+ return {
23
+ data: this.data,
24
+ message: this.message,
25
+ type: this.type,
26
+ };
27
+ }
28
+ }
29
+ exports.SdkgenErrorWithData = SdkgenErrorWithData;
30
+ class Fatal extends SdkgenError {
31
+ }
32
+ exports.Fatal = Fatal;
33
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXJyb3IuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvZXJyb3IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsTUFBc0IsV0FBWSxTQUFRLEtBQUs7SUFDN0MsSUFBSSxJQUFJO1FBQ04sT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQztJQUMvQixDQUFDO0lBRU0sTUFBTTtRQUNYLE9BQU87WUFDTCxPQUFPLEVBQUUsSUFBSSxDQUFDLE9BQU87WUFDckIsSUFBSSxFQUFFLElBQUksQ0FBQyxJQUFJO1NBQ2hCLENBQUM7SUFDSixDQUFDO0NBQ0Y7QUFYRCxrQ0FXQztBQUNELE1BQXNCLG1CQUE4QixTQUFRLFdBQVc7SUFDckUsWUFDRSxPQUFlLEVBQ1IsSUFBYztRQUVyQixLQUFLLENBQUMsT0FBTyxDQUFDLENBQUM7UUFGUixTQUFJLEdBQUosSUFBSSxDQUFVO0lBR3ZCLENBQUM7SUFFTSxNQUFNO1FBQ1gsT0FBTztZQUNMLElBQUksRUFBRSxJQUFJLENBQUMsSUFBSTtZQUNmLE9BQU8sRUFBRSxJQUFJLENBQUMsT0FBTztZQUNyQixJQUFJLEVBQUUsSUFBSSxDQUFDLElBQUk7U0FDaEIsQ0FBQztJQUNKLENBQUM7Q0FDRjtBQWZELGtEQWVDO0FBRUQsTUFBYSxLQUFNLFNBQVEsV0FBVztDQUFHO0FBQXpDLHNCQUF5QyJ9
@@ -0,0 +1,57 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.executeRequest = void 0;
4
+ const parser_1 = require("@sdkgen/parser");
5
+ const encode_decode_1 = require("./encode-decode");
6
+ const error_1 = require("./error");
7
+ const utils_1 = require("./utils");
8
+ async function executeRequest(ctx, apiConfig) {
9
+ // eslint-disable-next-line func-style
10
+ let next = async () => {
11
+ try {
12
+ const functionDescription = apiConfig.astJson.functionTable[ctx.request.name];
13
+ const functionImplementation = apiConfig.fn[ctx.request.name];
14
+ if (!functionDescription || !functionImplementation) {
15
+ throw new error_1.Fatal(`Function does not exist: ${ctx.request.name}`);
16
+ }
17
+ const args = (0, encode_decode_1.decode)(apiConfig.astJson.typeTable, `${ctx.request.name}.args`, functionDescription.args, ctx.request.args);
18
+ const ret = (await functionImplementation(ctx, args));
19
+ const encodedRet = (0, encode_decode_1.encode)(apiConfig.astJson.typeTable, `${ctx.request.name}.ret`, functionDescription.ret, ret);
20
+ return { result: encodedRet };
21
+ }
22
+ catch (error) {
23
+ return { error };
24
+ }
25
+ };
26
+ for (let i = apiConfig.middlewares.length - 1; i >= 0; --i) {
27
+ const middleware = apiConfig.middlewares[i];
28
+ const previousNext = next;
29
+ next = async () => {
30
+ try {
31
+ return await middleware(ctx, previousNext);
32
+ }
33
+ catch (error) {
34
+ return { error };
35
+ }
36
+ };
37
+ }
38
+ const reply = await next();
39
+ // If errors, check if the error type is one of the @throws annotation. If it isn't, change to Fatal
40
+ if (reply.error) {
41
+ const functionAst = apiConfig.ast.operations.find(op => op.name === ctx.request.name);
42
+ if (functionAst) {
43
+ const allowedErrors = functionAst.annotations.filter(ann => ann instanceof parser_1.ThrowsAnnotation).map(ann => ann.error);
44
+ if (typeof reply.error !== "object" ||
45
+ reply.error === null ||
46
+ !(0, utils_1.has)(reply.error, "type") ||
47
+ typeof reply.error.type !== "string" ||
48
+ (allowedErrors.length > 0 && !allowedErrors.includes(reply.error.type)) ||
49
+ !apiConfig.astJson.errors.map(error => (typeof error === "string" ? error : error[0])).includes(reply.error.type)) {
50
+ Object.defineProperty(reply.error, "type", { value: "Fatal" });
51
+ }
52
+ }
53
+ }
54
+ return reply;
55
+ }
56
+ exports.executeRequest = executeRequest;
57
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXhlY3V0ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9leGVjdXRlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLDJDQUFrRDtBQUlsRCxtREFBaUQ7QUFDakQsbUNBQWdDO0FBQ2hDLG1DQUE4QjtBQUV2QixLQUFLLFVBQVUsY0FBYyxDQUFnQixHQUE0QixFQUFFLFNBQXVDO0lBQ3ZILHNDQUFzQztJQUN0QyxJQUFJLElBQUksR0FBRyxLQUFLLElBQUksRUFBRTtRQUNwQixJQUFJO1lBQ0YsTUFBTSxtQkFBbUIsR0FBRyxTQUFTLENBQUMsT0FBTyxDQUFDLGFBQWEsQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQzlFLE1BQU0sc0JBQXNCLEdBQUcsU0FBUyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO1lBRTlELElBQUksQ0FBQyxtQkFBbUIsSUFBSSxDQUFDLHNCQUFzQixFQUFFO2dCQUNuRCxNQUFNLElBQUksYUFBSyxDQUFDLDRCQUE0QixHQUFHLENBQUMsT0FBTyxDQUFDLElBQUksRUFBRSxDQUFDLENBQUM7YUFDakU7WUFFRCxNQUFNLElBQUksR0FBRyxJQUFBLHNCQUFNLEVBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxTQUFTLEVBQUUsR0FBRyxHQUFHLENBQUMsT0FBTyxDQUFDLElBQUksT0FBTyxFQUFFLG1CQUFtQixDQUFDLElBQUksRUFBRSxHQUFHLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO1lBRXpILE1BQU0sR0FBRyxHQUFHLENBQUMsTUFBTSxzQkFBc0IsQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLENBQVksQ0FBQztZQUNqRSxNQUFNLFVBQVUsR0FBRyxJQUFBLHNCQUFNLEVBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxTQUFTLEVBQUUsR0FBRyxHQUFHLENBQUMsT0FBTyxDQUFDLElBQUksTUFBTSxFQUFFLG1CQUFt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
@@ -0,0 +1,107 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.SdkgenHttpClient = void 0;
4
+ /* eslint-disable @typescript-eslint/no-explicit-any */
5
+ /* eslint-disable prefer-promise-reject-errors */
6
+ const crypto_1 = require("crypto");
7
+ const http_1 = require("http");
8
+ const https_1 = require("https");
9
+ const os_1 = require("os");
10
+ const url_1 = require("url");
11
+ const encode_decode_1 = require("./encode-decode");
12
+ const utils_1 = require("./utils");
13
+ class SdkgenHttpClient {
14
+ constructor(baseUrl, astJson, errClasses) {
15
+ this.astJson = astJson;
16
+ this.errClasses = errClasses;
17
+ this.extra = new Map();
18
+ this.baseUrl = new url_1.URL(baseUrl);
19
+ }
20
+ async makeRequest(ctx, functionName, args) {
21
+ const func = this.astJson.functionTable[functionName];
22
+ if (!func) {
23
+ throw new Error(`Unknown function ${functionName}`);
24
+ }
25
+ const extra = {};
26
+ for (const [key, value] of this.extra) {
27
+ extra[key] = value;
28
+ }
29
+ const requestBody = JSON.stringify({
30
+ args: (0, encode_decode_1.encode)(this.astJson.typeTable, `${functionName}.args`, func.args, args),
31
+ deviceInfo: ctx?.request?.deviceInfo ?? { id: (0, os_1.hostname)(), type: "node" },
32
+ extra: {
33
+ ...extra,
34
+ ...ctx?.request?.extra,
35
+ },
36
+ name: functionName,
37
+ requestId: ctx?.request?.id ? ctx.request.id + (0, crypto_1.randomBytes)(6).toString("hex") : (0, crypto_1.randomBytes)(16).toString("hex"),
38
+ version: 3,
39
+ });
40
+ const options = {
41
+ hostname: this.baseUrl.hostname,
42
+ method: "POST",
43
+ path: this.baseUrl.pathname,
44
+ port: this.baseUrl.port,
45
+ headers: {
46
+ "content-type": "application/sdkgen",
47
+ },
48
+ };
49
+ const encodedRet = await new Promise((resolve, reject) => {
50
+ const req = (this.baseUrl.protocol === "http:" ? http_1.request : https_1.request)(options, res => {
51
+ let data = "";
52
+ res.on("data", chunk => {
53
+ data += chunk;
54
+ });
55
+ res.on("end", () => {
56
+ try {
57
+ const response = JSON.parse(data);
58
+ if ((0, utils_1.has)(response, "error") && response.error) {
59
+ reject(response.error);
60
+ }
61
+ else {
62
+ resolve((0, utils_1.has)(response, "result") ? response.result : null);
63
+ }
64
+ }
65
+ catch (error) {
66
+ reject({ message: `${error}`, type: "Fatal" });
67
+ }
68
+ });
69
+ res.on("error", error => {
70
+ reject({ message: `${error}`, type: "Fatal" });
71
+ });
72
+ res.on("aborted", () => {
73
+ reject({ message: "Request aborted", type: "Fatal" });
74
+ });
75
+ });
76
+ req.on("error", error => {
77
+ reject({ message: `${error}`, type: "Fatal" });
78
+ });
79
+ req.write(requestBody);
80
+ req.end();
81
+ }).catch((error) => {
82
+ if ((0, utils_1.has)(error, "type") && (0, utils_1.has)(error, "message") && typeof error.type === "string" && typeof error.message === "string") {
83
+ // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
84
+ const errClass = this.errClasses[error.type] ?? this.errClasses.Fatal;
85
+ const errType = errClass.name;
86
+ const errorJson = this.astJson.errors.find(err => (Array.isArray(err) ? err[0] === errType : err === errType));
87
+ let newError;
88
+ if (errorJson && Array.isArray(errorJson) && (0, utils_1.has)(error, "data")) {
89
+ newError = new errClass(error.message, (0, encode_decode_1.decode)(this.astJson.typeTable, `${errClass.name}.data`, errorJson[1], error.data));
90
+ }
91
+ else {
92
+ newError = new errClass(error.message, undefined);
93
+ }
94
+ if (!newError.type) {
95
+ newError.type = errType;
96
+ }
97
+ throw newError;
98
+ }
99
+ else {
100
+ throw error;
101
+ }
102
+ });
103
+ return (0, encode_decode_1.decode)(this.astJson.typeTable, `${functionName}.ret`, func.ret, encodedRet);
104
+ }
105
+ }
106
+ exports.SdkgenHttpClient = SdkgenHttpClient;
107
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaHR0cC1jbGllbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvaHR0cC1jbGllbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsdURBQXVEO0FBQ3ZELGlEQUFpRDtBQUNqRCxtQ0FBcUM7QUFDckMsK0JBQThDO0FBQzlDLGlDQUFnRDtBQUVoRCwyQkFBOEI7QUFDOUIsNkJBQTBCO0FBTTFCLG1EQUFpRDtBQUdqRCxtQ0FBOEI7QUFJOUIsTUFBYSxnQkFBZ0I7SUFLM0IsWUFDRSxPQUFlLEVBQ1AsT0FBOEIsRUFDOUIsVUFBc0I7UUFEdEIsWUFBTyxHQUFQLE9BQU8sQ0FBdUI7UUFDOUIsZUFBVSxHQUFWLFVBQVUsQ0FBWTtRQUxoQyxVQUFLLEdBQUcsSUFBSSxHQUFHLEVBQW1CLENBQUM7UUFPakMsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLFNBQUcsQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUNsQyxDQUFDO0lBRUQsS0FBSyxDQUFDLFdBQVcsQ0FBQyxHQUFnQyxFQUFFLFlBQW9CLEVBQUUsSUFBYTtRQUNyRixNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLGFBQWEsQ0FBQyxZQUFZLENBQUMsQ0FBQztRQUV0RCxJQUFJLENBQUMsSUFBSSxFQUFFO1lBQ1QsTUFBTSxJQUFJLEtBQUssQ0FBQyxvQkFBb0IsWUFBWSxFQUFFLENBQUMsQ0FBQztTQUNyRDtRQUVELE1BQU0sS0FBSyxHQUE0QixFQUFFLENBQUM7UUFFMUMsS0FBSyxNQUFNLENBQUMsR0FBRyxFQUFFLEtBQUssQ0FBQyxJQUFJLElBQUksQ0FBQyxLQUFLLEVBQUU7WUFDckMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEtBQUssQ0FBQztTQUNwQjtRQUVELE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUM7WUFDakMsSUFBSSxFQUFFLElBQUEsc0JBQU0sRUFBQyxJQUFJLENBQUMsT0FBTyxDQUFDLFNBQVMsRUFBRSxHQUFHLFlB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
@@ -11,6 +11,7 @@ export declare class SdkgenHttpServer<ExtraContextT = unknown> {
11
11
  dynamicCorsOrigin: boolean;
12
12
  introspection: boolean;
13
13
  log: (message: string) => void;
14
+ logError: (...error: unknown[]) => void;
14
15
  private hasSwagger;
15
16
  private ignoredUrlPrefix;
16
17
  private extraContext;