temba 0.43.0 → 0.45.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 (86) hide show
  1. package/README.md +55 -32
  2. package/config/index.d.ts +0 -1
  3. package/config/index.d.ts.map +1 -1
  4. package/config/index.js +1 -1
  5. package/config/index.js.map +1 -1
  6. package/index.d.ts +2 -2
  7. package/index.d.ts.map +1 -1
  8. package/index.js +20 -32
  9. package/index.js.map +1 -1
  10. package/openapi/html.d.ts +2 -0
  11. package/openapi/html.d.ts.map +1 -0
  12. package/openapi/html.js +14 -0
  13. package/openapi/html.js.map +1 -0
  14. package/openapi/index.d.ts +5 -0
  15. package/openapi/index.d.ts.map +1 -0
  16. package/openapi/index.js +37 -0
  17. package/openapi/index.js.map +1 -0
  18. package/openapi/spec.d.ts +8 -0
  19. package/openapi/spec.d.ts.map +1 -0
  20. package/openapi/spec.js +518 -0
  21. package/openapi/spec.js.map +1 -0
  22. package/package.json +11 -11
  23. package/requestHandlers/delete.d.ts +2 -2
  24. package/requestHandlers/delete.js +8 -8
  25. package/requestHandlers/delete.js.map +1 -1
  26. package/requestHandlers/get.d.ts +13 -7
  27. package/requestHandlers/get.d.ts.map +1 -1
  28. package/requestHandlers/get.js +7 -7
  29. package/requestHandlers/get.js.map +1 -1
  30. package/requestHandlers/index.d.ts +40 -18
  31. package/requestHandlers/index.d.ts.map +1 -1
  32. package/requestHandlers/index.js +2 -2
  33. package/requestHandlers/index.js.map +1 -1
  34. package/requestHandlers/patch.d.ts +9 -2
  35. package/requestHandlers/patch.d.ts.map +1 -1
  36. package/requestHandlers/patch.js +10 -7
  37. package/requestHandlers/patch.js.map +1 -1
  38. package/requestHandlers/post.d.ts +5 -3
  39. package/requestHandlers/post.d.ts.map +1 -1
  40. package/requestHandlers/post.js +6 -6
  41. package/requestHandlers/post.js.map +1 -1
  42. package/requestHandlers/put.d.ts +9 -2
  43. package/requestHandlers/put.d.ts.map +1 -1
  44. package/requestHandlers/put.js +10 -7
  45. package/requestHandlers/put.js.map +1 -1
  46. package/requestHandlers/types.d.ts +4 -12
  47. package/requestHandlers/types.d.ts.map +1 -1
  48. package/requestHandlers/utils.d.ts +4 -1
  49. package/requestHandlers/utils.d.ts.map +1 -1
  50. package/requestHandlers/utils.js.map +1 -1
  51. package/requestInterceptor/interceptRequest.d.ts +6 -5
  52. package/requestInterceptor/interceptRequest.d.ts.map +1 -1
  53. package/requestInterceptor/interceptRequest.js +8 -8
  54. package/requestInterceptor/interceptRequest.js.map +1 -1
  55. package/requestInterceptor/types.d.ts +9 -7
  56. package/requestInterceptor/types.d.ts.map +1 -1
  57. package/resourceHandler.d.ts +2 -7
  58. package/resourceHandler.d.ts.map +1 -1
  59. package/resourceHandler.js +17 -48
  60. package/resourceHandler.js.map +1 -1
  61. package/responseHandler.d.ts +13 -0
  62. package/responseHandler.d.ts.map +1 -0
  63. package/responseHandler.js +39 -0
  64. package/responseHandler.js.map +1 -0
  65. package/root/html.d.ts +8 -0
  66. package/root/html.d.ts.map +1 -0
  67. package/root/html.js +48 -0
  68. package/root/html.js.map +1 -0
  69. package/root/root.d.ts +4 -0
  70. package/root/root.d.ts.map +1 -0
  71. package/root/root.js +37 -0
  72. package/root/root.js.map +1 -0
  73. package/schema/compile.js +10 -11
  74. package/schema/compile.js.map +1 -1
  75. package/schema/validate.d.ts +2 -1
  76. package/schema/validate.d.ts.map +1 -1
  77. package/schema/validate.js.map +1 -1
  78. package/staticFolder/staticFolder.d.ts +3 -5
  79. package/staticFolder/staticFolder.d.ts.map +1 -1
  80. package/staticFolder/staticFolder.js +15 -18
  81. package/staticFolder/staticFolder.js.map +1 -1
  82. package/version.js +1 -1
  83. package/openapi/openapi.d.ts +0 -6
  84. package/openapi/openapi.d.ts.map +0 -1
  85. package/openapi/openapi.js +0 -476
  86. package/openapi/openapi.js.map +0 -1
@@ -1 +0,0 @@
1
- {"version":3,"file":"openapi.d.ts","sourceRoot":"","sources":["../../../src/openapi/openapi.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,WAAW,CAAA;AASvC,OAAO,KAAK,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,MAAM,CAAA;AAkF3D,KAAK,aAAa,GAAG,MAAM,GAAG,MAAM,CAAA;AAIpC,eAAO,MAAM,oBAAoB,GAAI,QAAQ,aAAa,EAAE,QAAQ,MAAM,WACrC,eAAe,OAAO,cAAc,CAAC,eAAe,CAAC,kBA8bzF,CAAA"}
@@ -1,476 +0,0 @@
1
- import { OpenApiBuilder, } from 'openapi3-ts/oas31';
2
- import indefinite from 'indefinite';
3
- import deepmerge from 'deepmerge';
4
- import { handleNotFound } from '../resourceHandler.js';
5
- import { setCorsHeaders } from '../cors/cors.js';
6
- const getRequestBodySchema = (schema = { type: 'object' }) => ({
7
- content: {
8
- 'application/json': {
9
- schema,
10
- },
11
- },
12
- });
13
- const getResponseBodySchema = (requestSchema) => {
14
- const defaultSchema = {
15
- type: 'object',
16
- properties: {
17
- id: {
18
- type: 'string',
19
- },
20
- },
21
- required: ['id'],
22
- };
23
- if (!requestSchema)
24
- return defaultSchema;
25
- return deepmerge(defaultSchema, requestSchema);
26
- };
27
- const defaultErrorResponseBodySchema = {
28
- type: 'object',
29
- properties: {
30
- message: {
31
- type: 'string',
32
- },
33
- },
34
- required: ['message'],
35
- };
36
- const getPathParameters = (resourceInfo, id = false) => {
37
- const { resource, singularResourceLowerCase } = resourceInfo;
38
- const resourceParameter = {
39
- name: 'resource',
40
- in: 'path',
41
- required: true,
42
- schema: {
43
- type: 'string',
44
- },
45
- description: 'The name of the resource.',
46
- };
47
- const idParameter = {
48
- name: `${singularResourceLowerCase}Id`,
49
- in: 'path',
50
- required: true,
51
- schema: {
52
- type: 'string',
53
- },
54
- description: `The ID of the ${singularResourceLowerCase}.`,
55
- };
56
- let parameters = [];
57
- if (resource === anyResource) {
58
- parameters = [...parameters, resourceParameter];
59
- }
60
- if (id) {
61
- parameters = [...parameters, idParameter];
62
- }
63
- return parameters;
64
- };
65
- const anyResource = '{resource}';
66
- export const createOpenApiHandler = (format, config) => {
67
- const openApiHandler = async (req, res) => {
68
- if (!config.openapi) {
69
- return handleNotFound(req, res);
70
- }
71
- let server = req.headers.host?.split(':')[1] &&
72
- !['80', '443'].includes(req.headers.host.split(':')[1] || '')
73
- ? req.headers.host
74
- : 'default';
75
- if (config.apiPrefix)
76
- server += `/${config.apiPrefix}/`;
77
- let resourceInfos = [
78
- {
79
- resource: anyResource,
80
- pluralResourceLowerCase: 'resources',
81
- pluralResourceUpperCase: 'Resources',
82
- singularResourceLowerCase: 'resource',
83
- singularResourceUpperCase: 'Resource',
84
- },
85
- ];
86
- if (config.resources.length > 0) {
87
- resourceInfos = config.resources.map((resource) => {
88
- if (typeof resource === 'string') {
89
- const pluralResourceLowerCase = resource.toLowerCase();
90
- const pluralResourceUpperCase = pluralResourceLowerCase.charAt(0).toUpperCase() + pluralResourceLowerCase.slice(1);
91
- let singularResourceLowerCase = pluralResourceLowerCase;
92
- if (singularResourceLowerCase.endsWith('s')) {
93
- singularResourceLowerCase = singularResourceLowerCase.slice(0, -1);
94
- }
95
- const singularResourceUpperCase = singularResourceLowerCase.charAt(0).toUpperCase() + singularResourceLowerCase.slice(1);
96
- return {
97
- resource,
98
- pluralResourceLowerCase,
99
- pluralResourceUpperCase,
100
- singularResourceLowerCase,
101
- singularResourceUpperCase,
102
- };
103
- }
104
- else {
105
- const pluralResourceLowerCase = resource.pluralName.toLowerCase();
106
- const pluralResourceUpperCase = pluralResourceLowerCase.charAt(0).toUpperCase() + pluralResourceLowerCase.slice(1);
107
- const singularResourceLowerCase = resource.singularName.toLowerCase();
108
- const singularResourceUpperCase = singularResourceLowerCase.charAt(0).toUpperCase() + singularResourceLowerCase.slice(1);
109
- return {
110
- resource: resource.resourcePath,
111
- pluralResourceLowerCase,
112
- pluralResourceUpperCase,
113
- singularResourceLowerCase,
114
- singularResourceUpperCase,
115
- };
116
- }
117
- });
118
- }
119
- const spec = buildOpenApiSpec(server, resourceInfos);
120
- const builder = new OpenApiBuilder(typeof config.openapi === 'object' ? deepmerge(spec, config.openapi) : spec);
121
- res.statusCode = 200;
122
- res.setHeader('Content-Type', format === 'json' ? 'application/json' : 'application/yaml');
123
- setCorsHeaders(res);
124
- res.end(format === 'json' ? builder.getSpecAsJson() : builder.getSpecAsYaml());
125
- };
126
- const buildOpenApiSpec = (server, resourceInfos) => {
127
- let apiDescription = 'This API has been generated using [Temba](https://github.com/bouwe77/temba).';
128
- if (!config.returnNullFields) {
129
- apiDescription += '\n\nAny fields with `null` values are omitted in all API responses.';
130
- }
131
- const builder = OpenApiBuilder.create()
132
- .addOpenApiVersion('3.1.0')
133
- .addInfo({
134
- title: 'My API',
135
- version: '1.0',
136
- description: apiDescription,
137
- })
138
- .addLicense({
139
- name: 'Apache 2.0',
140
- url: 'http://www.apache.org/licenses/LICENSE-2.0.html',
141
- })
142
- // For convenience, we use a generic server URL, relative to where the docs are served from.
143
- .addServer({
144
- url: server,
145
- });
146
- resourceInfos.forEach((resourceInfo) => {
147
- const { resource, pluralResourceLowerCase, pluralResourceUpperCase, singularResourceLowerCase, singularResourceUpperCase, } = resourceInfo;
148
- // GET on the root URL
149
- builder.addPath('/', {
150
- get: {
151
- summary: 'API root',
152
- operationId: 'getApiRoot',
153
- responses: {
154
- '200': {
155
- description: 'The API is working.',
156
- content: {
157
- 'text/html': {
158
- schema: {
159
- type: 'string',
160
- },
161
- },
162
- },
163
- },
164
- },
165
- },
166
- });
167
- const nullFieldsRemark = () => config.returnNullFields
168
- ? ''
169
- : '\n\nAny fields with `null` values are omitted in all API responses.';
170
- const postRequestSchema = config.schemas?.[resource]
171
- ?.post;
172
- const responseSchema = getResponseBodySchema(postRequestSchema);
173
- // GET, HEAD, POST on a collection
174
- builder.addPath(`/${resource}`, {
175
- get: {
176
- summary: `List all ${pluralResourceLowerCase}.`,
177
- operationId: `getAll${pluralResourceUpperCase}`,
178
- parameters: getPathParameters(resourceInfo),
179
- responses: {
180
- '200': {
181
- description: `List of all ${pluralResourceLowerCase}.${nullFieldsRemark()}`,
182
- content: {
183
- 'application/json': {
184
- schema: {
185
- type: 'array',
186
- items: responseSchema,
187
- },
188
- },
189
- },
190
- },
191
- },
192
- },
193
- head: {
194
- summary: `Returns HTTP headers for the list of ${pluralResourceLowerCase}.`,
195
- operationId: `getAll${pluralResourceUpperCase}Headers`,
196
- parameters: getPathParameters(resourceInfo),
197
- responses: {
198
- '200': {
199
- description: `HTTP headers for the list of all ${pluralResourceLowerCase}.`,
200
- },
201
- },
202
- },
203
- post: {
204
- summary: `Create a new ${singularResourceLowerCase}.`,
205
- operationId: `create${singularResourceUpperCase}`,
206
- parameters: getPathParameters(resourceInfo),
207
- requestBody: getRequestBodySchema(postRequestSchema),
208
- responses: {
209
- '201': {
210
- description: `The ${singularResourceLowerCase} was created. The created ${singularResourceLowerCase} is returned in the response.${nullFieldsRemark()}`,
211
- content: {
212
- 'application/json': {
213
- schema: responseSchema,
214
- },
215
- },
216
- },
217
- '400': {
218
- description: 'The request was invalid.',
219
- content: {
220
- 'application/json': {
221
- schema: defaultErrorResponseBodySchema,
222
- examples: {
223
- IdNotAllowedInRequestBody: {
224
- value: {
225
- message: 'An id is not allowed in the request body',
226
- },
227
- },
228
- },
229
- },
230
- },
231
- },
232
- },
233
- },
234
- });
235
- // DELETE on a collection if configured
236
- if (config.allowDeleteCollection) {
237
- builder.addPath(`/${resource}`, {
238
- delete: {
239
- summary: `Delete all ${pluralResourceLowerCase}.`,
240
- operationId: `deleteAll${pluralResourceUpperCase}`,
241
- parameters: getPathParameters(resourceInfo),
242
- responses: {
243
- '204': {
244
- description: `All ${pluralResourceLowerCase} were deleted.`,
245
- },
246
- },
247
- },
248
- });
249
- }
250
- else {
251
- builder.addPath(`/${resource}`, {
252
- delete: {
253
- summary: 'Deleting whole collections is disabled. Enable by setting `allowDeleteCollection` to `true`.',
254
- operationId: `deleteAll${pluralResourceUpperCase}`,
255
- parameters: getPathParameters(resourceInfo),
256
- responses: {
257
- '405': {
258
- description: `Method not allowed`,
259
- },
260
- },
261
- },
262
- });
263
- }
264
- // GET, HEAD, POST, PUT, PATCH, DELETE on an ID
265
- builder.addPath(`/${resource}/{${singularResourceLowerCase}Id}`, {
266
- get: {
267
- summary: `Find ${indefinite(singularResourceLowerCase)} by ID`,
268
- operationId: `get${singularResourceUpperCase}ById`,
269
- parameters: getPathParameters(resourceInfo, true),
270
- responses: {
271
- '200': {
272
- description: `The ${singularResourceLowerCase} with the ${singularResourceLowerCase}Id.${nullFieldsRemark()}`,
273
- content: {
274
- 'application/json': {
275
- schema: responseSchema,
276
- },
277
- },
278
- },
279
- '404': {
280
- description: `The ${singularResourceLowerCase}Id was not found.`,
281
- content: {
282
- 'application/json': {
283
- schema: defaultErrorResponseBodySchema,
284
- },
285
- },
286
- },
287
- },
288
- },
289
- head: {
290
- summary: `Returns HTTP headers for the ${singularResourceLowerCase} by ID.`,
291
- operationId: `get${singularResourceUpperCase}ByIdHeaders`,
292
- parameters: getPathParameters(resourceInfo, true),
293
- responses: {
294
- '200': {
295
- description: `HTTP headers for the ${singularResourceLowerCase} with the ${singularResourceLowerCase}Id.`,
296
- },
297
- '404': {
298
- description: `The ${singularResourceLowerCase}Id was not found.`,
299
- },
300
- },
301
- },
302
- post: {
303
- summary: `Create a new ${singularResourceLowerCase}, specifying your own id.`,
304
- operationId: `create${singularResourceUpperCase}WithId`,
305
- parameters: getPathParameters(resourceInfo, true),
306
- requestBody: {
307
- content: {
308
- 'application/json': {
309
- schema: {
310
- type: 'object',
311
- },
312
- },
313
- },
314
- },
315
- responses: {
316
- '201': {
317
- description: `The ${singularResourceLowerCase} was created. The created ${singularResourceLowerCase} is returned in the response.${nullFieldsRemark()}`,
318
- content: {
319
- 'application/json': {
320
- schema: {
321
- type: 'object',
322
- },
323
- },
324
- },
325
- },
326
- '400': {
327
- description: 'The request was invalid.',
328
- content: {
329
- 'application/json': {
330
- schema: {
331
- type: 'object',
332
- properties: {
333
- message: {
334
- type: 'string',
335
- },
336
- },
337
- },
338
- examples: {
339
- IdNotAllowedInRequestBody: {
340
- value: {
341
- message: 'An id is not allowed in the request body',
342
- },
343
- },
344
- },
345
- },
346
- },
347
- },
348
- '409': {
349
- description: 'The id already exists.',
350
- content: {
351
- 'application/json': {
352
- schema: {
353
- type: 'object',
354
- properties: {
355
- message: {
356
- type: 'string',
357
- },
358
- },
359
- },
360
- examples: {
361
- IdAlreadyExists: {
362
- value: {
363
- message: "ID '{resourceId}' already exists",
364
- },
365
- },
366
- },
367
- },
368
- },
369
- },
370
- },
371
- },
372
- put: {
373
- summary: `Replace ${indefinite(singularResourceLowerCase)}.`,
374
- operationId: `replace${singularResourceUpperCase}`,
375
- parameters: getPathParameters(resourceInfo, true),
376
- requestBody: getRequestBodySchema(config.schemas?.[resource]?.put),
377
- responses: {
378
- '200': {
379
- description: `The ${singularResourceLowerCase} was replaced. The replaced ${singularResourceLowerCase} is returned in the response.${nullFieldsRemark()}`,
380
- content: {
381
- 'application/json': {
382
- schema: responseSchema,
383
- },
384
- },
385
- },
386
- '404': {
387
- description: `The ${singularResourceLowerCase}Id was not found.`,
388
- content: {
389
- 'application/json': {
390
- schema: defaultErrorResponseBodySchema,
391
- },
392
- },
393
- },
394
- '400': {
395
- description: 'The request was invalid.',
396
- content: {
397
- 'application/json': {
398
- schema: defaultErrorResponseBodySchema,
399
- examples: {
400
- MissingIdInUrl: {
401
- value: {
402
- message: 'An id is required in the URL',
403
- },
404
- },
405
- IdNotAllowedInRequestBody: {
406
- value: {
407
- message: 'An id is not allowed in the request body',
408
- },
409
- },
410
- },
411
- },
412
- },
413
- },
414
- },
415
- },
416
- patch: {
417
- summary: `Update ${indefinite(singularResourceLowerCase)}.`,
418
- operationId: `update${singularResourceUpperCase}`,
419
- parameters: getPathParameters(resourceInfo, true),
420
- requestBody: getRequestBodySchema(config.schemas?.[resource]?.patch),
421
- responses: {
422
- '200': {
423
- description: `The ${singularResourceLowerCase} was updated. The updated ${singularResourceLowerCase} is returned in the response.${nullFieldsRemark()}`,
424
- content: {
425
- 'application/json': {
426
- schema: responseSchema,
427
- },
428
- },
429
- },
430
- '404': {
431
- description: `The ${singularResourceLowerCase}Id was not found.`,
432
- content: {
433
- 'application/json': {
434
- schema: defaultErrorResponseBodySchema,
435
- },
436
- },
437
- },
438
- '400': {
439
- description: 'The request was invalid.',
440
- content: {
441
- 'application/json': {
442
- schema: defaultErrorResponseBodySchema,
443
- examples: {
444
- MissingIdInUrl: {
445
- value: {
446
- message: 'An id is required in the URL',
447
- },
448
- },
449
- IdNotAllowedInRequestBody: {
450
- value: {
451
- message: 'An id is not allowed in the request body',
452
- },
453
- },
454
- },
455
- },
456
- },
457
- },
458
- },
459
- },
460
- delete: {
461
- summary: `Delete ${indefinite(singularResourceLowerCase)}.`,
462
- operationId: `delete${singularResourceUpperCase}`,
463
- parameters: getPathParameters(resourceInfo, true),
464
- responses: {
465
- '204': {
466
- description: `The ${singularResourceLowerCase} was deleted.`,
467
- },
468
- },
469
- },
470
- });
471
- });
472
- return builder.getSpec();
473
- };
474
- return openApiHandler;
475
- };
476
- //# sourceMappingURL=openapi.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"openapi.js","sourceRoot":"","sources":["../../../src/openapi/openapi.ts"],"names":[],"mappings":"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"}