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

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/.eslintignore +1 -0
  2. package/.eslintrc.json +3 -0
  3. package/.prettierrc +12 -0
  4. package/.vscode/settings.json +14 -0
  5. package/dist/spec/error.spec.d.ts +1 -0
  6. package/dist/spec/error.spec.js +15 -0
  7. package/dist/spec/rest/rest.spec.d.ts +1 -0
  8. package/dist/spec/rest/rest.spec.js +353 -0
  9. package/dist/spec/runtime/errors.spec.d.ts +1 -0
  10. package/dist/spec/runtime/errors.spec.js +43 -0
  11. package/dist/spec/runtime/middleware.spec.d.ts +1 -0
  12. package/dist/spec/runtime/middleware.spec.js +100 -0
  13. package/dist/spec/simple/legacyNodeClient.d.ts +17 -0
  14. package/dist/spec/simple/legacyNodeClient.js +128 -0
  15. package/dist/spec/simple/simple.spec.d.ts +1 -0
  16. package/dist/spec/simple/simple.spec.js +113 -0
  17. package/dist/spec/types.d.ts +1 -0
  18. package/dist/spec/types.js +60 -0
  19. package/dist/spec/types.spec.d.ts +1 -0
  20. package/dist/spec/types.spec.js +128 -0
  21. package/dist/src/api-config.js +19 -0
  22. package/dist/src/context.js +2 -0
  23. package/dist/src/encode-decode.js +376 -0
  24. package/dist/src/error.js +32 -0
  25. package/dist/src/execute.js +56 -0
  26. package/dist/src/http-client.js +105 -0
  27. package/dist/src/http-server.js +941 -0
  28. package/dist/src/index.js +18 -0
  29. package/dist/src/swagger.js +439 -0
  30. package/dist/src/test-wrapper.js +52 -0
  31. package/dist/src/utils.js +7 -0
  32. package/dist/tsconfig.tsbuildinfo +1 -0
  33. package/package.json +26 -42
  34. package/dist/api-config.js +0 -15
  35. package/dist/context.js +0 -2
  36. package/dist/encode-decode.js +0 -338
  37. package/dist/error.js +0 -27
  38. package/dist/execute.js +0 -53
  39. package/dist/http-client.js +0 -103
  40. package/dist/http-server.js +0 -930
  41. package/dist/index.js +0 -7
  42. package/dist/swagger.js +0 -448
  43. package/dist/test-wrapper.js +0 -53
  44. package/dist/utils.js +0 -4
  45. /package/dist/{api-config.d.ts → src/api-config.d.ts} +0 -0
  46. /package/dist/{context.d.ts → src/context.d.ts} +0 -0
  47. /package/dist/{encode-decode.d.ts → src/encode-decode.d.ts} +0 -0
  48. /package/dist/{error.d.ts → src/error.d.ts} +0 -0
  49. /package/dist/{execute.d.ts → src/execute.d.ts} +0 -0
  50. /package/dist/{http-client.d.ts → src/http-client.d.ts} +0 -0
  51. /package/dist/{http-server.d.ts → src/http-server.d.ts} +0 -0
  52. /package/dist/{index.d.ts → src/index.d.ts} +0 -0
  53. /package/dist/{swagger.d.ts → src/swagger.d.ts} +0 -0
  54. /package/dist/{test-wrapper.d.ts → src/test-wrapper.d.ts} +0 -0
  55. /package/dist/{utils.d.ts → src/utils.d.ts} +0 -0
package/dist/index.js DELETED
@@ -1,7 +0,0 @@
1
- export { BaseApiConfig } from "./api-config";
2
- export { decode, encode } from "./encode-decode";
3
- export { Fatal, SdkgenError, SdkgenErrorWithData } from "./error";
4
- export { SdkgenHttpClient } from "./http-client";
5
- export { SdkgenHttpServer } from "./http-server";
6
- export { apiTestWrapper } from "./test-wrapper";
7
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUU3QyxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBNEIsTUFBTSxpQkFBaUIsQ0FBQztBQUMzRSxPQUFPLEVBQUUsS0FBSyxFQUFFLFdBQVcsRUFBRSxtQkFBbUIsRUFBRSxNQUFNLFNBQVMsQ0FBQztBQUNsRSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDakQsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ2pELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQyJ9
package/dist/swagger.js DELETED
@@ -1,448 +0,0 @@
1
- import { StatusCodeAnnotation, ThrowsAnnotation, DecimalPrimitiveType, JsonPrimitiveType, ArrayType, Base64PrimitiveType, BigIntPrimitiveType, BoolPrimitiveType, BytesPrimitiveType, CnpjPrimitiveType, CpfPrimitiveType, DatePrimitiveType, DateTimePrimitiveType, DescriptionAnnotation, EmailPrimitiveType, EnumType, FloatPrimitiveType, HexPrimitiveType, HtmlPrimitiveType, IntPrimitiveType, MoneyPrimitiveType, OptionalType, RestAnnotation, StringPrimitiveType, StructType, TypeReference, UIntPrimitiveType, UrlPrimitiveType, UuidPrimitiveType, VoidPrimitiveType, } from "@sdkgen/parser";
2
- import staticFilesHandler from "serve-handler";
3
- import { getAbsoluteFSPath as getSwaggerUiAssetPath } from "swagger-ui-dist";
4
- const swaggerUiAssetPath = getSwaggerUiAssetPath();
5
- function objectFromEntries(entries) {
6
- return Object.assign({}, ...Array.from(entries, ([k, v]) => ({ [k]: v })));
7
- }
8
- function typeToSchema(definitions, type) {
9
- if (type instanceof EnumType) {
10
- return {
11
- enum: type.values.map(x => x.value),
12
- type: "string",
13
- };
14
- }
15
- else if (type instanceof StructType) {
16
- return {
17
- properties: objectFromEntries(type.fields.map(field => [
18
- field.name,
19
- {
20
- description: field.annotations
21
- .filter(x => x instanceof DescriptionAnnotation)
22
- .map(x => x.text)
23
- .join(" ") || undefined,
24
- ...typeToSchema(definitions, field.type),
25
- },
26
- ])),
27
- required: type.fields.filter(f => !(f.type instanceof OptionalType)).map(f => f.name),
28
- type: "object",
29
- additionalProperties: false,
30
- };
31
- }
32
- else if (type instanceof StringPrimitiveType ||
33
- type instanceof UuidPrimitiveType ||
34
- type instanceof HexPrimitiveType ||
35
- type instanceof HtmlPrimitiveType ||
36
- type instanceof Base64PrimitiveType) {
37
- return {
38
- type: "string",
39
- };
40
- }
41
- else if (type instanceof UrlPrimitiveType) {
42
- return {
43
- format: "uri",
44
- type: "string",
45
- };
46
- }
47
- else if (type instanceof DatePrimitiveType) {
48
- return {
49
- format: "date",
50
- type: "string",
51
- };
52
- }
53
- else if (type instanceof DateTimePrimitiveType) {
54
- return {
55
- format: "date-time",
56
- type: "string",
57
- };
58
- }
59
- else if (type instanceof CpfPrimitiveType) {
60
- return {
61
- type: "string",
62
- };
63
- }
64
- else if (type instanceof CnpjPrimitiveType) {
65
- return {
66
- type: "string",
67
- };
68
- }
69
- else if (type instanceof BoolPrimitiveType) {
70
- return {
71
- type: "boolean",
72
- };
73
- }
74
- else if (type instanceof BytesPrimitiveType) {
75
- return {
76
- format: "byte",
77
- type: "string",
78
- };
79
- }
80
- else if (type instanceof IntPrimitiveType) {
81
- return {
82
- format: "int32",
83
- type: "integer",
84
- };
85
- }
86
- else if (type instanceof UIntPrimitiveType) {
87
- return {
88
- format: "int32",
89
- minimum: 0,
90
- type: "integer",
91
- };
92
- }
93
- else if (type instanceof MoneyPrimitiveType) {
94
- return {
95
- format: "int64",
96
- type: "integer",
97
- };
98
- }
99
- else if (type instanceof FloatPrimitiveType) {
100
- return {
101
- type: "number",
102
- };
103
- }
104
- else if (type instanceof EmailPrimitiveType) {
105
- return {
106
- type: "string",
107
- };
108
- }
109
- else if (type instanceof BigIntPrimitiveType) {
110
- return {
111
- type: "string",
112
- };
113
- }
114
- else if (type instanceof DecimalPrimitiveType) {
115
- return {
116
- type: "string",
117
- };
118
- }
119
- else if (type instanceof JsonPrimitiveType) {
120
- return {};
121
- }
122
- else if (type instanceof OptionalType) {
123
- return {
124
- oneOf: [typeToSchema(definitions, type.base), { type: "null" }],
125
- };
126
- }
127
- else if (type instanceof ArrayType) {
128
- return {
129
- items: typeToSchema(definitions, type.base),
130
- type: "array",
131
- };
132
- }
133
- else if (type instanceof TypeReference) {
134
- if (!definitions[type.name]) {
135
- definitions[type.name] = typeToSchema(definitions, type.type);
136
- }
137
- return { $ref: `#/components/schemas/${type.name}` };
138
- }
139
- throw new Error(`Unhandled type ${type.constructor.name}`);
140
- }
141
- function getSwaggerJson(apiConfig) {
142
- const schemas = {};
143
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
144
- const paths = {};
145
- for (const op of apiConfig.ast.operations) {
146
- const throwAnnotations = op.annotations.filter(ann => ann instanceof ThrowsAnnotation);
147
- let possibleErrors = throwAnnotations.map(ann => apiConfig.ast.errors.find(err => err.name === ann.error)).filter(x => x);
148
- if (possibleErrors.length === 0) {
149
- possibleErrors = apiConfig.ast.errors;
150
- }
151
- const errorsByStatus = new Map();
152
- for (const error of possibleErrors) {
153
- const statusAnnotation = error.annotations.find(ann => ann instanceof StatusCodeAnnotation);
154
- const statusCode = statusAnnotation ? statusAnnotation.statusCode : error.name === "Fatal" ? 500 : 400;
155
- const errorList = errorsByStatus.get(statusCode) ?? [];
156
- errorList.push(error);
157
- errorsByStatus.set(statusCode, errorList);
158
- }
159
- const errorResponses = Object.fromEntries([...errorsByStatus.entries()].map(([status, errors]) => [
160
- status,
161
- {
162
- description: errors
163
- .map(error => error.name)
164
- .sort((a, b) => a.localeCompare(b))
165
- .join("<br>"),
166
- content: {
167
- "application/json": {
168
- schema: {
169
- anyOf: errors.map(error => ({
170
- properties: {
171
- message: {
172
- type: "string",
173
- },
174
- type: {
175
- enum: [error.name],
176
- type: "string",
177
- },
178
- ...(error.dataType instanceof VoidPrimitiveType
179
- ? {}
180
- : {
181
- data: typeToSchema(schemas, error.dataType),
182
- }),
183
- },
184
- required: ["type", "message", ...(error.dataType instanceof VoidPrimitiveType ? [] : ["data"])],
185
- type: "object",
186
- additionalProperties: false,
187
- })),
188
- },
189
- },
190
- },
191
- },
192
- ]));
193
- for (const ann of op.annotations) {
194
- if (ann instanceof RestAnnotation) {
195
- if (!paths[ann.path]) {
196
- paths[ann.path] = {};
197
- }
198
- // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access
199
- paths[ann.path][ann.method.toLowerCase()] = {
200
- operationId: op.name,
201
- parameters: [
202
- ...ann.pathVariables.map(name => ({
203
- // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
204
- arg: op.args.find(arg => arg.name === name),
205
- location: "path",
206
- name,
207
- })),
208
- ...ann.queryVariables.map(name => ({
209
- // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
210
- arg: op.args.find(arg => arg.name === name),
211
- location: "query",
212
- name,
213
- })),
214
- ...[...ann.headers.entries()].map(([header, name]) => ({
215
- // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
216
- arg: op.args.find(arg => arg.name === name),
217
- location: "header",
218
- name: header,
219
- })),
220
- ].map(({ name, location, arg }) => ({
221
- description: arg.annotations
222
- .filter(x => x instanceof DescriptionAnnotation)
223
- .map(x => x.text)
224
- .join(" ") || undefined,
225
- in: location,
226
- name,
227
- required: !(arg.type instanceof OptionalType),
228
- schema: typeToSchema(schemas, arg.type),
229
- })),
230
- requestBody: ann.bodyVariable
231
- ? {
232
- content: {
233
- ...(() => {
234
- const bodyType = op.args.find(arg => arg.name === ann.bodyVariable)?.type;
235
- return bodyType instanceof BoolPrimitiveType ||
236
- bodyType instanceof IntPrimitiveType ||
237
- bodyType instanceof UIntPrimitiveType ||
238
- bodyType instanceof FloatPrimitiveType ||
239
- bodyType instanceof StringPrimitiveType ||
240
- bodyType instanceof DatePrimitiveType ||
241
- bodyType instanceof DateTimePrimitiveType ||
242
- bodyType instanceof MoneyPrimitiveType ||
243
- bodyType instanceof CpfPrimitiveType ||
244
- bodyType instanceof CnpjPrimitiveType ||
245
- bodyType instanceof EmailPrimitiveType ||
246
- bodyType instanceof HtmlPrimitiveType ||
247
- bodyType instanceof UuidPrimitiveType ||
248
- bodyType instanceof HexPrimitiveType ||
249
- bodyType instanceof BytesPrimitiveType ||
250
- bodyType instanceof Base64PrimitiveType
251
- ? {
252
- [bodyType instanceof HtmlPrimitiveType ? "text/html" : "text/plain"]: {
253
- schema: typeToSchema(schemas, bodyType),
254
- },
255
- }
256
- : {};
257
- })(),
258
- "application/json": {
259
- // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
260
- schema: typeToSchema(schemas, op.args.find(arg => arg.name === ann.bodyVariable).type),
261
- },
262
- },
263
- // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
264
- required: !(op.args.find(arg => arg.name === ann.bodyVariable).type instanceof OptionalType),
265
- }
266
- : undefined,
267
- responses: {
268
- ...(op.returnType instanceof OptionalType || op.returnType instanceof VoidPrimitiveType
269
- ? { [ann.method === "GET" ? "404" : "204"]: {} }
270
- : {}),
271
- ...(op.returnType instanceof VoidPrimitiveType
272
- ? {}
273
- : {
274
- 200: {
275
- description: "",
276
- content: {
277
- ...(() => {
278
- return op.returnType instanceof BoolPrimitiveType ||
279
- op.returnType instanceof IntPrimitiveType ||
280
- op.returnType instanceof UIntPrimitiveType ||
281
- op.returnType instanceof FloatPrimitiveType ||
282
- op.returnType instanceof StringPrimitiveType ||
283
- op.returnType instanceof DatePrimitiveType ||
284
- op.returnType instanceof DateTimePrimitiveType ||
285
- op.returnType instanceof MoneyPrimitiveType ||
286
- op.returnType instanceof CpfPrimitiveType ||
287
- op.returnType instanceof CnpjPrimitiveType ||
288
- op.returnType instanceof EmailPrimitiveType ||
289
- op.returnType instanceof UuidPrimitiveType ||
290
- op.returnType instanceof HexPrimitiveType ||
291
- op.returnType instanceof BytesPrimitiveType ||
292
- op.returnType instanceof Base64PrimitiveType
293
- ? {
294
- "text/plain": {
295
- schema: typeToSchema(schemas, op.returnType),
296
- },
297
- }
298
- : {};
299
- })(),
300
- "application/json": {
301
- schema: typeToSchema(schemas, op.returnType),
302
- },
303
- },
304
- },
305
- }),
306
- ...errorResponses,
307
- },
308
- summary: op.annotations
309
- .filter(x => x instanceof DescriptionAnnotation)
310
- .map(x => x.text)
311
- .join(" ") || undefined,
312
- tags: [ann.path.split("/")[1]],
313
- };
314
- }
315
- }
316
- }
317
- const securitySchemes = {
318
- bearerAuth: {
319
- type: "http",
320
- scheme: "bearer",
321
- },
322
- };
323
- const security = [
324
- {
325
- bearerAuth: [],
326
- },
327
- ];
328
- return {
329
- openapi: "3.0.0",
330
- info: {
331
- title: "",
332
- version: "",
333
- },
334
- paths,
335
- components: {
336
- schemas,
337
- securitySchemes,
338
- },
339
- security,
340
- };
341
- }
342
- export function setupSwagger(server) {
343
- server.addHttpHandler("GET", "/swagger", (req, res) => {
344
- if (!server.introspection) {
345
- res.statusCode = 404;
346
- res.end();
347
- return;
348
- }
349
- res.setHeader("content-type", "text/html");
350
- res.write(`
351
- <!DOCTYPE html>
352
- <html lang="en">
353
- <head>
354
- <meta charset="UTF-8">
355
- <title>Swagger UI</title>
356
- <link rel="stylesheet" type="text/css" href="/swagger/swagger-ui.css" >
357
- <link rel="icon" type="image/png" href="/swagger/favicon-32x32.png" sizes="32x32" />
358
- <link rel="icon" type="image/png" href="/swagger/favicon-16x16.png" sizes="16x16" />
359
- <style>
360
- html {
361
- box-sizing: border-box;
362
- overflow: -moz-scrollbars-vertical;
363
- overflow-y: scroll;
364
- }
365
-
366
- *, *:before, *:after {
367
- box-sizing: inherit;
368
- }
369
-
370
- body {
371
- margin: 0;
372
- background: #fafafa;
373
- }
374
-
375
- .topbar {
376
- display: none !important;
377
- }
378
- </style>
379
- </head>
380
-
381
- <body>
382
- <div id="swagger-ui"></div>
383
- <script src="swagger/swagger-ui-bundle.js"> </script>
384
- <script src="swagger/swagger-ui-standalone-preset.js"> </script>
385
- <script>
386
- window.onload = function() {
387
- window.ui = SwaggerUIBundle({
388
- spec: {
389
- ...${JSON.stringify(getSwaggerJson(server.apiConfig))},
390
- servers: [{ url: location.origin + location.pathname.replace(/\\/swagger$/, "") }]
391
- },
392
- dom_id: '#swagger-ui',
393
- deepLinking: true,
394
- presets: [
395
- SwaggerUIBundle.presets.apis,
396
- SwaggerUIStandalonePreset,
397
- ],
398
- plugins: [
399
- SwaggerUIBundle.plugins.DownloadUrl,
400
- ],
401
- layout: "StandaloneLayout"
402
- });
403
- }
404
- </script>
405
- </body>
406
- </html>
407
- `);
408
- res.end();
409
- });
410
- server.addHttpHandler("GET", /^\/swagger.*/u, (req, res) => {
411
- if (!server.introspection) {
412
- res.statusCode = 404;
413
- res.end();
414
- return;
415
- }
416
- if (req.url) {
417
- req.url = req.url.replace(/\/swagger/u, "");
418
- }
419
- // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access, @typescript-eslint/no-unsafe-call
420
- staticFilesHandler(req, res, {
421
- cleanUrls: false,
422
- directoryListing: false,
423
- etag: true,
424
- public: swaggerUiAssetPath,
425
- }).catch(e => {
426
- console.error(e);
427
- res.statusCode = 500;
428
- res.write(`${e}`);
429
- res.end();
430
- });
431
- });
432
- server.addHttpHandler("GET", "/swagger.json", (req, res) => {
433
- if (!server.introspection) {
434
- res.statusCode = 404;
435
- res.end();
436
- return;
437
- }
438
- try {
439
- res.write(JSON.stringify(getSwaggerJson(server.apiConfig)));
440
- }
441
- catch (error) {
442
- console.error(error);
443
- res.statusCode = 500;
444
- }
445
- res.end();
446
- });
447
- }
448
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3dhZ2dlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9zd2FnZ2VyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFDTCxvQkFBb0IsRUFDcEIsZ0JBQWdCLEVBQ2hCLG9CQUFvQixFQUNwQixpQkFBaUIsRUFDakIsU0FBUyxFQUNULG1CQUFtQixFQUNuQixtQkFBbUIsRUFDbkIsaUJBQWlCLEVBQ2pCLGtCQUFrQixFQUNsQixpQkFBaUIsRUFDakIsZ0JBQWdCLEVBQ2hCLGlCQUFpQixFQUNqQixxQkFBcUIsRUFDckIscUJBQXFCLEVBQ3JCLGtCQUFrQixFQUNsQixRQUFRLEVBQ1Isa0JBQWtCLEVBQ2xCLGdCQUFnQixFQUNoQixpQkFBaUIsRUFDakIsZ0JBQWdCLEVBQ2hCLGtCQUFrQixFQUNsQixZQUFZLEVBQ1osY0FBYyxFQUNkLG1CQUFtQixFQUNuQixVQUFVLEVBQ1YsYUFBYSxFQUNiLGlCQUFpQixFQUNqQixnQkFBZ0IsRUFDaEIsaUJBQWlCLEVBQ2pCLGlCQUFpQixHQUNsQixNQUFNLGdCQUFnQixDQUFDO0FBR3hCLE9BQU8sa0JBQWtCLE1BQU0sZUFBZSxDQUFDO0FBQy9DLE9BQU8sRUFBRSxpQkFBaUIsSUFBSSxxQkFBcUIsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBSzdFLE1BQU0sa0JBQWtCLEdBQUcscUJBQXFCLEVBQUUsQ0FBQztBQUVuRCxTQUFTLGlCQUFpQixDQUFJLE9BQTJCO0lBQ3ZELE9BQU8sTUFBTSxDQUFDLE1BQU0sQ0FBQyxFQUFFLEVBQUUsR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQXNCLENBQUM7QUFDbEcsQ0FBQztBQUVELFNBQVMsWUFBWSxDQUFDLFdBQW1ELEVBQUUsSUFBVTtJQUNu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
@@ -1,53 +0,0 @@
1
- /* eslint-disable @typescript-eslint/no-explicit-any */
2
- /* eslint-disable @typescript-eslint/no-unused-vars */
3
- /* eslint-disable @typescript-eslint/no-unsafe-assignment */
4
- /* eslint-disable @typescript-eslint/no-unsafe-call */
5
- /* eslint-disable @typescript-eslint/no-unsafe-member-access */
6
- /* eslint-disable @typescript-eslint/no-unsafe-return */
7
- import { randomBytes } from "crypto";
8
- import { decode, encode } from "./encode-decode";
9
- import { executeRequest } from "./execute";
10
- export function apiTestWrapper(api, extraContext = {}) {
11
- const wrappedApi = new api.constructor();
12
- for (const functionName of Object.keys(api.astJson.functionTable)) {
13
- wrappedApi.fn[functionName] = async (partialCtx, args) => {
14
- const encodedArgs = encode(api.astJson.typeTable, `fn.${functionName}.args`, api.astJson.functionTable[functionName].args, args);
15
- const ctx = {
16
- ...extraContext,
17
- ...partialCtx,
18
- request: {
19
- args: encodedArgs,
20
- deviceInfo: partialCtx.request?.deviceInfo ?? {
21
- fingerprint: null,
22
- id: randomBytes(16).toString("hex"),
23
- language: null,
24
- platform: null,
25
- timezone: null,
26
- type: "test",
27
- version: null,
28
- },
29
- extra: partialCtx.request?.extra ?? {},
30
- files: partialCtx.request?.files ?? [],
31
- headers: partialCtx.request?.headers ?? {},
32
- id: partialCtx.request?.id ?? randomBytes(16).toString("hex"),
33
- ip: partialCtx.request?.ip ?? "0.0.0.0",
34
- name: functionName,
35
- version: 3,
36
- },
37
- response: {
38
- headers: new Map(),
39
- },
40
- };
41
- const reply = await executeRequest(ctx, api);
42
- if (reply.error) {
43
- throw reply.error;
44
- }
45
- else {
46
- const decodedRet = decode(api.astJson.typeTable, `fn.${functionName}.ret`, api.astJson.functionTable[functionName].ret, JSON.parse(JSON.stringify(reply.result)));
47
- return decodedRet;
48
- }
49
- };
50
- }
51
- return wrappedApi;
52
- }
53
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVzdC13cmFwcGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL3Rlc3Qtd3JhcHBlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSx1REFBdUQ7QUFDdkQsc0RBQXNEO0FBQ3RELDREQUE0RDtBQUM1RCxzREFBc0Q7QUFDdEQsK0RBQStEO0FBQy9ELHdEQUF3RDtBQUN4RCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sUUFBUSxDQUFDO0FBSXJDLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDakQsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLFdBQVcsQ0FBQztBQUUzQyxNQUFNLFVBQVUsY0FBYyxDQUEyRCxHQUFTLEVBQUUsZUFBdUMsRUFBRTtJQUMzSSxNQUFNLFVBQVUsR0FBUyxJQUFLLEdBQUcsQ0FBQyxXQUFtQixFQUFFLENBQUM7SUFFeEQsS0FBSyxNQUFNLFlBQVksSUFBSSxNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsYUFBYSxDQUFDLEVBQUU7UUFDakUsVUFBVSxDQUFDLEVBQUUsQ0FBQyxZQUFZLENBQUMsR0FBRyxLQUFLLEVBQUUsVUFBNEIsRUFBRSxJQUFTLEVBQUUsRUFBRTtZQUM5RSxNQUFNLFdBQVcsR0FBRyxNQUFNLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxTQUFTLEVBQUUsTUFBTSxZQUFZLE9BQU8sRUFBRyxHQUFHLENBQUMsT0FBTyxDQUFDLGFBQXFCLENBQUMsWUFBWSxDQUFDLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDO1lBRTFJLE1BQU0sR0FBRyxHQUFZO2dCQUNuQixHQUFHLFlBQVk7Z0JBQ2YsR0FBRyxVQUFVO2dCQUNiLE9BQU8sRUFBRTtvQkFDUCxJQUFJLEVBQUUsV0FBc0M7b0JBQzVDLFVBQVUsRUFBRSxVQUFVLENBQUMsT0FBTyxFQUFFLFVBQVUsSUFBSTt3QkFDNUMsV0FBVyxFQUFFLElBQUk7d0JBQ2pCLEVBQUUsRUFBRSxXQUFXLENBQUMsRUFBRSxDQUFDLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQzt3QkFDbkMsUUFBUSxFQUFFLElBQUk7d0JBQ2QsUUFBUSxFQUFFLElBQUk7d0JBQ2QsUUFBUSxFQUFFLElBQUk7d0JBQ2QsSUFBSSxFQUFFLE1BQU07d0JBQ1osT0FBTyxFQUFFLElBQUk7cUJBQ2Q7b0JBQ0QsS0FBSyxFQUFFLFVBQVUsQ0FBQyxPQUFPLEVBQUUsS0FBSyxJQUFJLEVBQUU7b0JBQ3RDLEtBQUssRUFBRSxVQUFVLENBQUMsT0FBTyxFQUFFLEtBQUssSUFBSSxFQUFFO29CQUN0QyxPQUFPLEVBQUUsVUFBVSxDQUFDLE9BQU8sRUFBRSxPQUFPLElBQUksRUFBRTtvQkFDMUMsRUFBRSxFQUFFLFVBQVUsQ0FBQyxPQUFPLEVBQUUsRUFBRSxJQUFJLFdBQVcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDO29CQUM3RCxFQUFFLEVBQUUsVUFBVSxDQUFDLE9BQU8sRUFBRSxFQUFFLElBQUksU0FBUztvQkFDdkMsSUFBSSxFQUFFLFlBQVk7b0JBQ2xCLE9BQU8sRUFBRSxDQUFDO2lCQUNYO2dCQUNELFFBQVEsRUFBRTtvQkFDUixPQUFPLEVBQUUsSUFBSSxHQUFHLEVBQUU7aUJBQ25CO2FBQ0YsQ0FBQztZQUVGLE1BQU0sS0FBSyxHQUFHLE1BQU0sY0FBYyxDQUFDLEdBQThCLEVBQUUsR0FBRyxDQUFDLENBQUM7WUFFeEUsSUFBSSxLQUFLLENBQUMsS0FBSyxFQUFFO2dCQUNmLE1BQU0sS0FBSyxDQUFDLEtBQUssQ0FBQzthQUNuQjtpQkFBTTtnQkFDTCxNQUFNLFVBQVUsR0FBRyxNQUFNLENBQ3ZCLEdBQUcsQ0FBQyxPQUFPLENBQUMsU0FBUyxFQUNyQixNQUFNLFlBQVksTUFBTSxFQUN2QixHQUFHLENBQUMsT0FBTyxDQUFDLGFBQXFCLENBQUMsWUFBWSxDQUFDLENBQUMsR0FBRyxFQUNwRCxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQ3pDLENBQUM7Z0JBRUYsT0FBTyxVQUFVLENBQUM7YUFDbkI7UUFDSCxDQUFDLENBQUM7S0FDSDtJQUVELE9BQU8sVUFBVSxDQUFDO0FBQ3BCLENBQUMifQ==
package/dist/utils.js DELETED
@@ -1,4 +0,0 @@
1
- export function has(target, property) {
2
- return property in target;
3
- }
4
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvdXRpbHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBY0EsTUFBTSxVQUFVLEdBQUcsQ0FBd0IsTUFBYyxFQUFFLFFBQVc7SUFDcEUsT0FBTyxRQUFRLElBQUksTUFBTSxDQUFDO0FBQzVCLENBQUMifQ==
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes