@sdkgen/node-runtime 0.0.0-dev.20231221180829 → 0.0.0-dev.20240110140542

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