temba 0.38.0 → 0.40.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 (72) hide show
  1. package/README.md +7 -72
  2. package/config/index.d.ts +2 -5
  3. package/config/index.d.ts.map +1 -1
  4. package/config/index.js +2 -7
  5. package/config/index.js.map +1 -1
  6. package/data/json/index.d.ts.map +1 -1
  7. package/data/json/index.js +5 -2
  8. package/data/json/index.js.map +1 -1
  9. package/data/mongo/index.js +2 -2
  10. package/data/mongo/index.js.map +1 -1
  11. package/data/types.d.ts +1 -1
  12. package/data/types.d.ts.map +1 -1
  13. package/etags/etags.d.ts +1 -0
  14. package/etags/etags.d.ts.map +1 -1
  15. package/etags/etags.js +3 -0
  16. package/etags/etags.js.map +1 -1
  17. package/index.d.ts +4 -5
  18. package/index.d.ts.map +1 -1
  19. package/index.js +51 -80
  20. package/index.js.map +1 -1
  21. package/openapi/openapi.d.ts +2 -1
  22. package/openapi/openapi.d.ts.map +1 -1
  23. package/openapi/openapi.js +88 -23
  24. package/openapi/openapi.js.map +1 -1
  25. package/package.json +8 -10
  26. package/requestHandlers/delete.d.ts +1 -1
  27. package/requestHandlers/delete.d.ts.map +1 -1
  28. package/requestHandlers/delete.js +5 -5
  29. package/requestHandlers/delete.js.map +1 -1
  30. package/requestHandlers/get.d.ts +14 -1
  31. package/requestHandlers/get.d.ts.map +1 -1
  32. package/requestHandlers/get.js +12 -4
  33. package/requestHandlers/get.js.map +1 -1
  34. package/requestHandlers/index.d.ts +13 -0
  35. package/requestHandlers/index.d.ts.map +1 -1
  36. package/requestHandlers/index.js +5 -5
  37. package/requestHandlers/index.js.map +1 -1
  38. package/requestHandlers/patch.d.ts +1 -1
  39. package/requestHandlers/patch.d.ts.map +1 -1
  40. package/requestHandlers/patch.js +2 -2
  41. package/requestHandlers/patch.js.map +1 -1
  42. package/requestHandlers/post.d.ts.map +1 -1
  43. package/requestHandlers/post.js +13 -3
  44. package/requestHandlers/post.js.map +1 -1
  45. package/requestHandlers/put.d.ts +1 -1
  46. package/requestHandlers/put.d.ts.map +1 -1
  47. package/requestHandlers/put.js +2 -2
  48. package/requestHandlers/put.js.map +1 -1
  49. package/requestHandlers/types.d.ts +4 -1
  50. package/requestHandlers/types.d.ts.map +1 -1
  51. package/requestInterceptor/interceptRequest.d.ts +1 -1
  52. package/requestInterceptor/interceptRequest.d.ts.map +1 -1
  53. package/requestInterceptor/interceptRequest.js +2 -2
  54. package/requestInterceptor/interceptRequest.js.map +1 -1
  55. package/requestInterceptor/types.d.ts +4 -1
  56. package/requestInterceptor/types.d.ts.map +1 -1
  57. package/resourceHandler.d.ts +16 -0
  58. package/resourceHandler.d.ts.map +1 -0
  59. package/resourceHandler.js +189 -0
  60. package/resourceHandler.js.map +1 -0
  61. package/auth/auth.d.ts +0 -6
  62. package/auth/auth.d.ts.map +0 -1
  63. package/auth/auth.js +0 -19
  64. package/auth/auth.js.map +0 -1
  65. package/delay/delayMiddleware.d.ts +0 -3
  66. package/delay/delayMiddleware.d.ts.map +0 -1
  67. package/delay/delayMiddleware.js +0 -11
  68. package/delay/delayMiddleware.js.map +0 -1
  69. package/resourceRouter.d.ts +0 -5
  70. package/resourceRouter.d.ts.map +0 -1
  71. package/resourceRouter.js +0 -139
  72. package/resourceRouter.js.map +0 -1
@@ -12,6 +12,7 @@ export type RequestInfo = {
12
12
  method: string;
13
13
  headers: IncomingHttpHeaders;
14
14
  etag: string | null;
15
+ ifNoneMatchEtag: string | null;
15
16
  };
16
17
  export type ErrorResponse = {
17
18
  message: string;
@@ -23,12 +24,14 @@ export type TembaRequest = {
23
24
  };
24
25
  export type GetRequest = TembaRequest & {
25
26
  id: string | null;
26
- isHeadRequest: boolean;
27
+ method: 'get' | 'head';
28
+ ifNoneMatchEtag: string | null;
27
29
  };
28
30
  export type PostRequest = TembaRequest & {
29
31
  body: unknown;
30
32
  protocol: string | null;
31
33
  host: string | null;
34
+ id: string | null;
32
35
  };
33
36
  export type PutRequest = TembaRequest & {
34
37
  id: string;
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/requestHandlers/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,MAAM,CAAA;AAE/C,MAAM,MAAM,OAAO,GAAG;IACpB,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAA;IACvB,EAAE,EAAE,MAAM,GAAG,IAAI,CAAA;CAClB,CAAA;AAED,MAAM,MAAM,WAAW,GAAG;IACxB,EAAE,EAAE,MAAM,GAAG,IAAI,CAAA;IACjB,QAAQ,EAAE,MAAM,CAAA;IAChB,IAAI,EAAE,OAAO,GAAG,IAAI,CAAA;IACpB,IAAI,EAAE,MAAM,GAAG,IAAI,CAAA;IACnB,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAA;IACvB,MAAM,EAAE,MAAM,CAAA;IACd,OAAO,EAAE,mBAAmB,CAAA;IAC5B,IAAI,EAAE,MAAM,GAAG,IAAI,CAAA;CACpB,CAAA;AAED,MAAM,MAAM,aAAa,GAAG;IAC1B,OAAO,EAAE,MAAM,CAAA;IACf,MAAM,EAAE,MAAM,CAAA;CACf,CAAA;AAED,MAAM,MAAM,YAAY,GAAG;IACzB,OAAO,EAAE,mBAAmB,CAAA;IAC5B,QAAQ,EAAE,MAAM,CAAA;CACjB,CAAA;AAED,MAAM,MAAM,UAAU,GAAG,YAAY,GAAG;IACtC,EAAE,EAAE,MAAM,GAAG,IAAI,CAAA;IACjB,aAAa,EAAE,OAAO,CAAA;CACvB,CAAA;AAED,MAAM,MAAM,WAAW,GAAG,YAAY,GAAG;IACvC,IAAI,EAAE,OAAO,CAAA;IACb,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAA;IACvB,IAAI,EAAE,MAAM,GAAG,IAAI,CAAA;CACpB,CAAA;AAED,MAAM,MAAM,UAAU,GAAG,YAAY,GAAG;IACtC,EAAE,EAAE,MAAM,CAAA;IACV,IAAI,EAAE,OAAO,CAAA;IACb,IAAI,EAAE,MAAM,GAAG,IAAI,CAAA;CACpB,CAAA;AAED,MAAM,MAAM,YAAY,GAAG,UAAU,CAAA;AAErC,MAAM,MAAM,aAAa,GAAG,YAAY,GAAG;IACzC,EAAE,EAAE,MAAM,GAAG,IAAI,CAAA;IACjB,IAAI,EAAE,MAAM,GAAG,IAAI,CAAA;CACpB,CAAA;AAED,MAAM,MAAM,aAAa,GAAG;IAC1B,MAAM,EAAE,MAAM,CAAA;IACd,IAAI,CAAC,EAAE,OAAO,CAAA;IACd,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;CACjC,CAAA"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/requestHandlers/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,MAAM,CAAA;AAE/C,MAAM,MAAM,OAAO,GAAG;IACpB,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAA;IACvB,EAAE,EAAE,MAAM,GAAG,IAAI,CAAA;CAClB,CAAA;AAED,MAAM,MAAM,WAAW,GAAG;IACxB,EAAE,EAAE,MAAM,GAAG,IAAI,CAAA;IACjB,QAAQ,EAAE,MAAM,CAAA;IAChB,IAAI,EAAE,OAAO,GAAG,IAAI,CAAA;IACpB,IAAI,EAAE,MAAM,GAAG,IAAI,CAAA;IACnB,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAA;IACvB,MAAM,EAAE,MAAM,CAAA;IACd,OAAO,EAAE,mBAAmB,CAAA;IAC5B,IAAI,EAAE,MAAM,GAAG,IAAI,CAAA;IACnB,eAAe,EAAE,MAAM,GAAG,IAAI,CAAA;CAC/B,CAAA;AAED,MAAM,MAAM,aAAa,GAAG;IAC1B,OAAO,EAAE,MAAM,CAAA;IACf,MAAM,EAAE,MAAM,CAAA;CACf,CAAA;AAED,MAAM,MAAM,YAAY,GAAG;IACzB,OAAO,EAAE,mBAAmB,CAAA;IAC5B,QAAQ,EAAE,MAAM,CAAA;CACjB,CAAA;AAED,MAAM,MAAM,UAAU,GAAG,YAAY,GAAG;IACtC,EAAE,EAAE,MAAM,GAAG,IAAI,CAAA;IACjB,MAAM,EAAE,KAAK,GAAG,MAAM,CAAA;IACtB,eAAe,EAAE,MAAM,GAAG,IAAI,CAAA;CAC/B,CAAA;AAED,MAAM,MAAM,WAAW,GAAG,YAAY,GAAG;IACvC,IAAI,EAAE,OAAO,CAAA;IACb,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAA;IACvB,IAAI,EAAE,MAAM,GAAG,IAAI,CAAA;IACnB,EAAE,EAAE,MAAM,GAAG,IAAI,CAAA;CAClB,CAAA;AAED,MAAM,MAAM,UAAU,GAAG,YAAY,GAAG;IACtC,EAAE,EAAE,MAAM,CAAA;IACV,IAAI,EAAE,OAAO,CAAA;IACb,IAAI,EAAE,MAAM,GAAG,IAAI,CAAA;CACpB,CAAA;AAED,MAAM,MAAM,YAAY,GAAG,UAAU,CAAA;AAErC,MAAM,MAAM,aAAa,GAAG,YAAY,GAAG;IACzC,EAAE,EAAE,MAAM,GAAG,IAAI,CAAA;IACjB,IAAI,EAAE,MAAM,GAAG,IAAI,CAAA;CACpB,CAAA;AAED,MAAM,MAAM,aAAa,GAAG;IAC1B,MAAM,EAAE,MAAM,CAAA;IACd,IAAI,CAAC,EAAE,OAAO,CAAA;IACd,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;CACjC,CAAA"}
@@ -1,7 +1,7 @@
1
1
  import type { IncomingHttpHeaders } from 'http';
2
2
  import type { InterceptedDeleteRequest, InterceptedGetRequest, InterceptedPostRequest, InterceptedPutRequest } from './types.js';
3
3
  export declare const interceptGetRequest: (intercept: InterceptedGetRequest, headers: IncomingHttpHeaders, resource: string, id: string | null) => void;
4
- export declare const interceptPostRequest: (intercept: InterceptedPostRequest, headers: IncomingHttpHeaders, resource: string, body: unknown) => unknown;
4
+ export declare const interceptPostRequest: (intercept: InterceptedPostRequest, headers: IncomingHttpHeaders, resource: string, id: string | null, body: unknown) => unknown;
5
5
  export declare const interceptPutRequest: (intercept: InterceptedPutRequest, headers: IncomingHttpHeaders, resource: string, id: string, body: unknown) => unknown;
6
6
  export declare const interceptPatchRequest: (intercept: InterceptedPutRequest, headers: IncomingHttpHeaders, resource: string, id: string, body: unknown) => unknown;
7
7
  export declare const interceptDeleteRequest: (intercept: InterceptedDeleteRequest, headers: IncomingHttpHeaders, resource: string, id: string | null) => void;
@@ -1 +1 @@
1
- {"version":3,"file":"interceptRequest.d.ts","sourceRoot":"","sources":["../../../src/requestInterceptor/interceptRequest.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,MAAM,CAAA;AAE/C,OAAO,KAAK,EACV,wBAAwB,EACxB,qBAAqB,EACrB,sBAAsB,EACtB,qBAAqB,EAEtB,MAAM,SAAS,CAAA;AAEhB,eAAO,MAAM,mBAAmB,cACnB,qBAAqB,WACvB,mBAAmB,YAClB,MAAM,MACZ,MAAM,GAAG,IAAI,SAGlB,CAAA;AAED,eAAO,MAAM,oBAAoB,cACpB,sBAAsB,WACxB,mBAAmB,YAClB,MAAM,QACV,OAAO,YAId,CAAA;AAED,eAAO,MAAM,mBAAmB,cACnB,qBAAqB,WACvB,mBAAmB,YAClB,MAAM,MACZ,MAAM,QACJ,OAAO,YAId,CAAA;AAED,eAAO,MAAM,qBAAqB,cAVrB,qBAAqB,WACvB,mBAAmB,YAClB,MAAM,MACZ,MAAM,QACJ,OAAO,YAMyC,CAAA;AAExD,eAAO,MAAM,sBAAsB,cACtB,wBAAwB,WAC1B,mBAAmB,YAClB,MAAM,MACZ,MAAM,GAAG,IAAI,SAGlB,CAAA"}
1
+ {"version":3,"file":"interceptRequest.d.ts","sourceRoot":"","sources":["../../../src/requestInterceptor/interceptRequest.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,MAAM,CAAA;AAE/C,OAAO,KAAK,EACV,wBAAwB,EACxB,qBAAqB,EACrB,sBAAsB,EACtB,qBAAqB,EAEtB,MAAM,SAAS,CAAA;AAEhB,eAAO,MAAM,mBAAmB,cACnB,qBAAqB,WACvB,mBAAmB,YAClB,MAAM,MACZ,MAAM,GAAG,IAAI,SAGlB,CAAA;AAED,eAAO,MAAM,oBAAoB,cACpB,sBAAsB,WACxB,mBAAmB,YAClB,MAAM,MACZ,MAAM,GAAG,IAAI,QACX,OAAO,YAId,CAAA;AAED,eAAO,MAAM,mBAAmB,cACnB,qBAAqB,WACvB,mBAAmB,YAClB,MAAM,MACZ,MAAM,QACJ,OAAO,YAId,CAAA;AAED,eAAO,MAAM,qBAAqB,cAVrB,qBAAqB,WACvB,mBAAmB,YAClB,MAAM,MACZ,MAAM,QACJ,OAAO,YAMyC,CAAA;AAExD,eAAO,MAAM,sBAAsB,cACtB,wBAAwB,WAC1B,mBAAmB,YAClB,MAAM,MACZ,MAAM,GAAG,IAAI,SAGlB,CAAA"}
@@ -1,8 +1,8 @@
1
1
  export const interceptGetRequest = (intercept, headers, resource, id) => {
2
2
  intercept({ headers, resource, id });
3
3
  };
4
- export const interceptPostRequest = (intercept, headers, resource, body) => {
5
- const intercepted = intercept({ headers, resource, body });
4
+ export const interceptPostRequest = (intercept, headers, resource, id, body) => {
5
+ const intercepted = intercept({ headers, resource, body, id });
6
6
  return interceptRequest(intercepted, body);
7
7
  };
8
8
  export const interceptPutRequest = (intercept, headers, resource, id, body) => {
@@ -1 +1 @@
1
- {"version":3,"file":"interceptRequest.js","sourceRoot":"","sources":["../../../src/requestInterceptor/interceptRequest.ts"],"names":[],"mappings":"AAUA,MAAM,CAAC,MAAM,mBAAmB,GAAG,CACjC,SAAgC,EAChC,OAA4B,EAC5B,QAAgB,EAChB,EAAiB,EACjB,EAAE;IACF,SAAS,CAAC,EAAE,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,CAAC,CAAA;AACtC,CAAC,CAAA;AAED,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAClC,SAAiC,EACjC,OAA4B,EAC5B,QAAgB,EAChB,IAAa,EACb,EAAE;IACF,MAAM,WAAW,GAAG,SAAS,CAAC,EAAE,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAA;IAC1D,OAAO,gBAAgB,CAAC,WAAW,EAAE,IAAI,CAAC,CAAA;AAC5C,CAAC,CAAA;AAED,MAAM,CAAC,MAAM,mBAAmB,GAAG,CACjC,SAAgC,EAChC,OAA4B,EAC5B,QAAgB,EAChB,EAAU,EACV,IAAa,EACb,EAAE;IACF,MAAM,WAAW,GAAG,SAAS,CAAC,EAAE,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,IAAI,EAAE,CAAC,CAAA;IAC9D,OAAO,gBAAgB,CAAC,WAAW,EAAE,IAAI,CAAC,CAAA;AAC5C,CAAC,CAAA;AAED,MAAM,CAAC,MAAM,qBAAqB,GAAG,mBAAmB,CAAA;AAExD,MAAM,CAAC,MAAM,sBAAsB,GAAG,CACpC,SAAmC,EACnC,OAA4B,EAC5B,QAAgB,EAChB,EAAiB,EACjB,EAAE;IACF,SAAS,CAAC,EAAE,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,CAAC,CAAA;AACtC,CAAC,CAAA;AAED,MAAM,gBAAgB,GAAG,CAAC,WAAmC,EAAE,IAAa,EAAE,EAAE;IAC9E,IAAI,CAAC,WAAW,IAAI,OAAO,IAAI,KAAK,QAAQ;QAAE,OAAO,IAAI,CAAA;IAEzD,6CAA6C;IAC7C,IAAI,WAAW,IAAI,OAAO,WAAW,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,WAAW,CAAC;QAC/E,OAAO,WAAW,CAAA;IAEpB,kEAAkE;IAClE,iEAAiE;IACjE,OAAO,IAAI,CAAA;AACb,CAAC,CAAA"}
1
+ {"version":3,"file":"interceptRequest.js","sourceRoot":"","sources":["../../../src/requestInterceptor/interceptRequest.ts"],"names":[],"mappings":"AAUA,MAAM,CAAC,MAAM,mBAAmB,GAAG,CACjC,SAAgC,EAChC,OAA4B,EAC5B,QAAgB,EAChB,EAAiB,EACjB,EAAE;IACF,SAAS,CAAC,EAAE,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,CAAC,CAAA;AACtC,CAAC,CAAA;AAED,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAClC,SAAiC,EACjC,OAA4B,EAC5B,QAAgB,EAChB,EAAiB,EACjB,IAAa,EACb,EAAE;IACF,MAAM,WAAW,GAAG,SAAS,CAAC,EAAE,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC,CAAA;IAC9D,OAAO,gBAAgB,CAAC,WAAW,EAAE,IAAI,CAAC,CAAA;AAC5C,CAAC,CAAA;AAED,MAAM,CAAC,MAAM,mBAAmB,GAAG,CACjC,SAAgC,EAChC,OAA4B,EAC5B,QAAgB,EAChB,EAAU,EACV,IAAa,EACb,EAAE;IACF,MAAM,WAAW,GAAG,SAAS,CAAC,EAAE,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,IAAI,EAAE,CAAC,CAAA;IAC9D,OAAO,gBAAgB,CAAC,WAAW,EAAE,IAAI,CAAC,CAAA;AAC5C,CAAC,CAAA;AAED,MAAM,CAAC,MAAM,qBAAqB,GAAG,mBAAmB,CAAA;AAExD,MAAM,CAAC,MAAM,sBAAsB,GAAG,CACpC,SAAmC,EACnC,OAA4B,EAC5B,QAAgB,EAChB,EAAiB,EACjB,EAAE;IACF,SAAS,CAAC,EAAE,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,CAAC,CAAA;AACtC,CAAC,CAAA;AAED,MAAM,gBAAgB,GAAG,CAAC,WAAmC,EAAE,IAAa,EAAE,EAAE;IAC9E,IAAI,CAAC,WAAW,IAAI,OAAO,IAAI,KAAK,QAAQ;QAAE,OAAO,IAAI,CAAA;IAEzD,6CAA6C;IAC7C,IAAI,WAAW,IAAI,OAAO,WAAW,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,WAAW,CAAC;QAC/E,OAAO,WAAW,CAAA;IAEpB,kEAAkE;IAClE,iEAAiE;IACjE,OAAO,IAAI,CAAA;AACb,CAAC,CAAA"}
@@ -13,9 +13,12 @@ type WithIdAndBody = InterceptedResource & {
13
13
  id: string;
14
14
  body: unknown;
15
15
  };
16
+ type WithBodyAndMaybeId = WithBody & {
17
+ id: string | null;
18
+ };
16
19
  export type InterceptedReturnValue = void | object;
17
20
  export type InterceptedGetRequest = (request: WithMaybeId) => InterceptedReturnValue;
18
- export type InterceptedPostRequest = (request: WithBody) => InterceptedReturnValue;
21
+ export type InterceptedPostRequest = (request: WithBodyAndMaybeId) => InterceptedReturnValue;
19
22
  export type InterceptedPatchRequest = (request: WithIdAndBody) => InterceptedReturnValue;
20
23
  export type InterceptedPutRequest = (request: WithIdAndBody) => InterceptedReturnValue;
21
24
  export type InterceptedDeleteRequest = (request: WithMaybeId) => InterceptedReturnValue;
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/requestInterceptor/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,MAAM,CAAA;AAE/C,KAAK,mBAAmB,GAAG;IACzB,OAAO,EAAE,mBAAmB,CAAA;IAC5B,QAAQ,EAAE,MAAM,CAAA;CACjB,CAAA;AAED,KAAK,WAAW,GAAG,mBAAmB,GAAG;IACvC,EAAE,EAAE,MAAM,GAAG,IAAI,CAAA;CAClB,CAAA;AAED,KAAK,QAAQ,GAAG,mBAAmB,GAAG;IACpC,IAAI,EAAE,OAAO,CAAA;CACd,CAAA;AAED,KAAK,aAAa,GAAG,mBAAmB,GAAG;IACzC,EAAE,EAAE,MAAM,CAAA;IACV,IAAI,EAAE,OAAO,CAAA;CACd,CAAA;AAED,MAAM,MAAM,sBAAsB,GAAG,IAAI,GAAG,MAAM,CAAA;AAElD,MAAM,MAAM,qBAAqB,GAAG,CAAC,OAAO,EAAE,WAAW,KAAK,sBAAsB,CAAA;AACpF,MAAM,MAAM,sBAAsB,GAAG,CAAC,OAAO,EAAE,QAAQ,KAAK,sBAAsB,CAAA;AAClF,MAAM,MAAM,uBAAuB,GAAG,CAAC,OAAO,EAAE,aAAa,KAAK,sBAAsB,CAAA;AACxF,MAAM,MAAM,qBAAqB,GAAG,CAAC,OAAO,EAAE,aAAa,KAAK,sBAAsB,CAAA;AACtF,MAAM,MAAM,wBAAwB,GAAG,CAAC,OAAO,EAAE,WAAW,KAAK,sBAAsB,CAAA;AAEvF,MAAM,MAAM,kBAAkB,GAAG;IAC/B,GAAG,CAAC,EAAE,qBAAqB,CAAA;IAC3B,IAAI,CAAC,EAAE,sBAAsB,CAAA;IAC7B,KAAK,CAAC,EAAE,uBAAuB,CAAA;IAC/B,GAAG,CAAC,EAAE,qBAAqB,CAAA;IAC3B,MAAM,CAAC,EAAE,wBAAwB,CAAA;CAClC,CAAA"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/requestInterceptor/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,MAAM,CAAA;AAE/C,KAAK,mBAAmB,GAAG;IACzB,OAAO,EAAE,mBAAmB,CAAA;IAC5B,QAAQ,EAAE,MAAM,CAAA;CACjB,CAAA;AAED,KAAK,WAAW,GAAG,mBAAmB,GAAG;IACvC,EAAE,EAAE,MAAM,GAAG,IAAI,CAAA;CAClB,CAAA;AAED,KAAK,QAAQ,GAAG,mBAAmB,GAAG;IACpC,IAAI,EAAE,OAAO,CAAA;CACd,CAAA;AAED,KAAK,aAAa,GAAG,mBAAmB,GAAG;IACzC,EAAE,EAAE,MAAM,CAAA;IACV,IAAI,EAAE,OAAO,CAAA;CACd,CAAA;AAED,KAAK,kBAAkB,GAAG,QAAQ,GAAG;IACnC,EAAE,EAAE,MAAM,GAAG,IAAI,CAAA;CAClB,CAAA;AAED,MAAM,MAAM,sBAAsB,GAAG,IAAI,GAAG,MAAM,CAAA;AAElD,MAAM,MAAM,qBAAqB,GAAG,CAAC,OAAO,EAAE,WAAW,KAAK,sBAAsB,CAAA;AACpF,MAAM,MAAM,sBAAsB,GAAG,CAAC,OAAO,EAAE,kBAAkB,KAAK,sBAAsB,CAAA;AAC5F,MAAM,MAAM,uBAAuB,GAAG,CAAC,OAAO,EAAE,aAAa,KAAK,sBAAsB,CAAA;AACxF,MAAM,MAAM,qBAAqB,GAAG,CAAC,OAAO,EAAE,aAAa,KAAK,sBAAsB,CAAA;AACtF,MAAM,MAAM,wBAAwB,GAAG,CAAC,OAAO,EAAE,WAAW,KAAK,sBAAsB,CAAA;AAEvF,MAAM,MAAM,kBAAkB,GAAG;IAC/B,GAAG,CAAC,EAAE,qBAAqB,CAAA;IAC3B,IAAI,CAAC,EAAE,sBAAsB,CAAA;IAC7B,KAAK,CAAC,EAAE,uBAAuB,CAAA;IAC/B,GAAG,CAAC,EAAE,qBAAqB,CAAA;IAC3B,MAAM,CAAC,EAAE,wBAAwB,CAAA;CAClC,CAAA"}
@@ -0,0 +1,16 @@
1
+ import type { IncomingMessage, ServerResponse } from 'http';
2
+ import type { Queries } from './data/types.js';
3
+ import type { CompiledSchemas } from './schema/types.js';
4
+ import type { RouterConfig } from './config/index.js';
5
+ export declare const noopHandler: (_: IncomingMessage, __: ServerResponse<IncomingMessage>, next: (err?: unknown) => void) => void;
6
+ export declare const sendErrorResponse: (res: {
7
+ statusCode: number;
8
+ setHeader: (arg0: string, arg1: string) => void;
9
+ end: (arg0: string) => void;
10
+ }, statusCode?: number, message?: string) => void;
11
+ export declare const handleMethodNotAllowed: (_: IncomingMessage, res: ServerResponse<IncomingMessage>) => void;
12
+ export declare const handleNotFound: (_: IncomingMessage, res: ServerResponse<IncomingMessage> & {
13
+ req: IncomingMessage;
14
+ }) => void;
15
+ export declare const createResourceHandler: (queries: Queries, schemas: CompiledSchemas, routerConfig: RouterConfig) => (req: IncomingMessage, res: ServerResponse<IncomingMessage>) => Promise<void> | undefined;
16
+ //# sourceMappingURL=resourceHandler.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"resourceHandler.d.ts","sourceRoot":"","sources":["../../src/resourceHandler.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,MAAM,CAAA;AAY3D,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,cAAc,CAAA;AAC3C,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAA;AACrD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,UAAU,CAAA;AAE5C,eAAO,MAAM,WAAW,MACnB,eAAe,MACd,cAAc,CAAC,eAAe,CAAC,QAC7B,CAAC,GAAG,CAAC,EAAE,OAAO,KAAK,IAAI,SACpB,CAAA;AAEX,eAAO,MAAM,iBAAiB,QACvB;IACH,UAAU,EAAE,MAAM,CAAA;IAClB,SAAS,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,KAAK,IAAI,CAAA;IAC/C,GAAG,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAA;CAC5B,eACW,MAAM,YACT,MAAM,SAKhB,CAAA;AAED,eAAO,MAAM,sBAAsB,MAC9B,eAAe,OACb,cAAc,CAAC,eAAe,CAAC,SAGrC,CAAA;AAED,eAAO,MAAM,cAAc,MACtB,eAAe,OACb,cAAc,CAAC,eAAe,CAAC,GAAG;IAAE,GAAG,EAAE,eAAe,CAAA;CAAE,SAGhE,CAAA;AAuED,eAAO,MAAM,qBAAqB,YACvB,OAAO,WACP,eAAe,gBACV,YAAY,WAuLb,eAAe,OAAO,cAAc,CAAC,eAAe,CAAC,8BAiBnE,CAAA"}
@@ -0,0 +1,189 @@
1
+ import { getRequestHandler } from './requestHandlers/index.js';
2
+ import { parseUrl } from './urls/urlParser.js';
3
+ export const noopHandler = (_, __, next) => next();
4
+ export const sendErrorResponse = (res, statusCode = 500, message = 'Internal Server Error') => {
5
+ res.statusCode = statusCode;
6
+ res.setHeader('Content-Type', 'application/json');
7
+ res.end(JSON.stringify({ message }));
8
+ };
9
+ export const handleMethodNotAllowed = (_, res) => {
10
+ sendErrorResponse(res, 405, 'Method Not Allowed');
11
+ };
12
+ export const handleNotFound = (_, res) => {
13
+ sendErrorResponse(res, 404, 'Not Found');
14
+ };
15
+ const isError = (request) => {
16
+ return 'status' in request;
17
+ };
18
+ const createError = (status, message) => {
19
+ return { status, message };
20
+ };
21
+ const validateIdInUrlRequired = (requestInfo) => {
22
+ return !requestInfo.id ? createError(400, 'An id is required in the URL') : requestInfo;
23
+ };
24
+ const validateIdInRequestBodyNotAllowed = (requestInfo) => {
25
+ return requestInfo.body && typeof requestInfo.body === 'object' && 'id' in requestInfo.body
26
+ ? createError(400, 'An id is not allowed in the request body')
27
+ : requestInfo;
28
+ };
29
+ const convertToGetRequest = (requestInfo) => {
30
+ return {
31
+ headers: requestInfo.headers,
32
+ id: requestInfo.id,
33
+ resource: requestInfo.resource,
34
+ method: requestInfo.method.toUpperCase() === 'HEAD' ? 'head' : 'get',
35
+ ifNoneMatchEtag: requestInfo.ifNoneMatchEtag,
36
+ };
37
+ };
38
+ const convertToPostRequest = (requestInfo) => {
39
+ return {
40
+ headers: requestInfo.headers,
41
+ id: requestInfo.id ?? null,
42
+ resource: requestInfo.resource,
43
+ body: requestInfo.body ?? {},
44
+ protocol: requestInfo.protocol,
45
+ host: requestInfo.host,
46
+ };
47
+ };
48
+ const convertToPutRequest = (requestInfo) => {
49
+ return {
50
+ headers: requestInfo.headers,
51
+ id: requestInfo.id,
52
+ resource: requestInfo.resource,
53
+ body: requestInfo.body ?? {},
54
+ etag: requestInfo.etag ?? null,
55
+ };
56
+ };
57
+ const convertToPatchRequest = convertToPutRequest;
58
+ const convertToDeleteRequest = (requestInfo) => {
59
+ return {
60
+ headers: requestInfo.headers,
61
+ id: requestInfo.id,
62
+ resource: requestInfo.resource,
63
+ etag: requestInfo.etag ?? null,
64
+ };
65
+ };
66
+ export const createResourceHandler = (queries, schemas, routerConfig) => {
67
+ const getUrlInfo = (baseUrl) => {
68
+ const url = routerConfig.apiPrefix ? baseUrl.replace(routerConfig.apiPrefix, '') : baseUrl;
69
+ return parseUrl(url);
70
+ };
71
+ const getBody = (request) => {
72
+ return new Promise((resolve, reject) => {
73
+ const bodyParts = [];
74
+ request
75
+ .on('data', (chunk) => {
76
+ bodyParts.push(chunk);
77
+ })
78
+ .on('end', () => {
79
+ try {
80
+ const body = Buffer.concat(bodyParts).toString();
81
+ if (!body)
82
+ return resolve(null);
83
+ resolve(JSON.parse(body));
84
+ }
85
+ catch {
86
+ reject(new Error('Invalid JSON'));
87
+ }
88
+ })
89
+ .on('error', (err) => reject(err));
90
+ });
91
+ };
92
+ const parseRequest = async (req) => {
93
+ const urlInfo = getUrlInfo(req.url ?? '');
94
+ // Due to how routing is setup this situation can not happen,
95
+ // so it's mainly to satisfy TypeScript.
96
+ if (!urlInfo.resource || urlInfo.resource.trim().length === 0)
97
+ return createError(404, 'Resource could not be determined from req.baseUrl');
98
+ const host = req.headers.host || null;
99
+ const protoHeader = req.headers['x-forwarded-proto'];
100
+ const protocol = (Array.isArray(protoHeader) ? protoHeader[0] : protoHeader) ?? 'http';
101
+ const body = await getBody(req);
102
+ return {
103
+ id: urlInfo.id,
104
+ resource: urlInfo.resource,
105
+ body,
106
+ host,
107
+ protocol,
108
+ method: req.method ?? '',
109
+ headers: req.headers,
110
+ etag: req.headers['if-match'] ?? null,
111
+ ifNoneMatchEtag: req.headers['if-none-match'] ?? null,
112
+ };
113
+ };
114
+ const validateResource = (requestInfo) => {
115
+ const resourcePaths = routerConfig.resources.map((resource) => {
116
+ return typeof resource === 'string' ? resource : resource.resourcePath;
117
+ });
118
+ if (routerConfig.validateResources &&
119
+ !resourcePaths.includes((requestInfo.resource ?? '').toLowerCase())) {
120
+ return createError(404, 'Invalid resource');
121
+ }
122
+ return requestInfo;
123
+ };
124
+ const sendResponse = (tembaResponse, res) => {
125
+ res.statusCode = tembaResponse.status;
126
+ if (tembaResponse.headers) {
127
+ for (const [key, value] of Object.entries(tembaResponse.headers)) {
128
+ res.setHeader(key, value);
129
+ }
130
+ }
131
+ if (tembaResponse.body) {
132
+ res.setHeader('Content-Type', 'application/json');
133
+ res.write(JSON.stringify(tembaResponse.body));
134
+ }
135
+ res.end();
136
+ };
137
+ const handle = async (httpRequest, httpResponse, validators, convert, handleRequest) => {
138
+ const requestInfo = await parseRequest(httpRequest);
139
+ if (isError(requestInfo)) {
140
+ // return httpResponse.status(requestInfo.status).json({
141
+ // message: requestInfo.message,
142
+ // })
143
+ return sendErrorResponse(httpResponse, requestInfo.status, requestInfo.message);
144
+ }
145
+ for (const validator of [validators].flat()) {
146
+ const validationResult = validator(requestInfo);
147
+ if (isError(validationResult)) {
148
+ return sendErrorResponse(httpResponse, validationResult.status, validationResult.message);
149
+ }
150
+ }
151
+ const convertedRequest = convert(requestInfo);
152
+ const response = await handleRequest(convertedRequest);
153
+ sendResponse(response, httpResponse);
154
+ };
155
+ const requestHandler = getRequestHandler(queries, schemas, routerConfig);
156
+ const getHandler = async (httpRequest, httpResponse) => {
157
+ await handle(httpRequest, httpResponse, validateResource, convertToGetRequest, requestHandler.handleGet);
158
+ };
159
+ const postHandler = async (httpRequest, httpResponse) => {
160
+ await handle(httpRequest, httpResponse, [validateResource, validateIdInRequestBodyNotAllowed], convertToPostRequest, requestHandler.handlePost);
161
+ };
162
+ const putHandler = async (httpRequest, httpResponse) => {
163
+ await handle(httpRequest, httpResponse, [validateResource, validateIdInUrlRequired, validateIdInRequestBodyNotAllowed], convertToPutRequest, requestHandler.handlePut);
164
+ };
165
+ const patchHandler = async (httpRequest, httpResponse) => {
166
+ await handle(httpRequest, httpResponse, [validateResource, validateIdInUrlRequired, validateIdInRequestBodyNotAllowed], convertToPatchRequest, requestHandler.handlePatch);
167
+ };
168
+ const deleteHandler = async (httpRequest, httpResponse) => {
169
+ await handle(httpRequest, httpResponse, validateResource, convertToDeleteRequest, requestHandler.handleDelete);
170
+ };
171
+ return (req, res) => {
172
+ if (['GET', 'HEAD'].includes(req.method ?? '')) {
173
+ return getHandler(req, res);
174
+ }
175
+ if (req.method === 'POST') {
176
+ return postHandler(req, res);
177
+ }
178
+ if (req.method === 'PUT') {
179
+ return putHandler(req, res);
180
+ }
181
+ if (req.method === 'PATCH') {
182
+ return patchHandler(req, res);
183
+ }
184
+ if (req.method === 'DELETE') {
185
+ return deleteHandler(req, res);
186
+ }
187
+ };
188
+ };
189
+ //# sourceMappingURL=resourceHandler.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"resourceHandler.js","sourceRoot":"","sources":["../../src/resourceHandler.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAA;AACrD,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAA;AAc3C,MAAM,CAAC,MAAM,WAAW,GAAG,CACzB,CAAkB,EAClB,EAAmC,EACnC,IAA6B,EAC7B,EAAE,CAAC,IAAI,EAAE,CAAA;AAEX,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAC/B,GAIC,EACD,aAAqB,GAAG,EACxB,UAAkB,uBAAuB,EACzC,EAAE;IACF,GAAG,CAAC,UAAU,GAAG,UAAU,CAAA;IAC3B,GAAG,CAAC,SAAS,CAAC,cAAc,EAAE,kBAAkB,CAAC,CAAA;IACjD,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC,CAAA;AACtC,CAAC,CAAA;AAED,MAAM,CAAC,MAAM,sBAAsB,GAAG,CACpC,CAAkB,EAClB,GAAoC,EACpC,EAAE;IACF,iBAAiB,CAAC,GAAG,EAAE,GAAG,EAAE,oBAAoB,CAAC,CAAA;AACnD,CAAC,CAAA;AAED,MAAM,CAAC,MAAM,cAAc,GAAG,CAC5B,CAAkB,EAClB,GAA+D,EAC/D,EAAE;IACF,iBAAiB,CAAC,GAAG,EAAE,GAAG,EAAE,WAAW,CAAC,CAAA;AAC1C,CAAC,CAAA;AAOD,MAAM,OAAO,GAAG,CACd,OAA6C,EACV,EAAE;IACrC,OAAO,QAAQ,IAAI,OAAO,CAAA;AAC5B,CAAC,CAAA;AAED,MAAM,WAAW,GAAG,CAAC,MAAc,EAAE,OAAe,EAAE,EAAE;IACtD,OAAO,EAAE,MAAM,EAAE,OAAO,EAAmC,CAAA;AAC7D,CAAC,CAAA;AAED,MAAM,uBAAuB,GAAG,CAAC,WAAwB,EAAE,EAAE;IAC3D,OAAO,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC,CAAC,WAAW,CAAC,GAAG,EAAE,8BAA8B,CAAC,CAAC,CAAC,CAAC,WAAW,CAAA;AACzF,CAAC,CAAA;AAED,MAAM,iCAAiC,GAAG,CAAC,WAAwB,EAAE,EAAE;IACrE,OAAO,WAAW,CAAC,IAAI,IAAI,OAAO,WAAW,CAAC,IAAI,KAAK,QAAQ,IAAI,IAAI,IAAI,WAAW,CAAC,IAAI;QACzF,CAAC,CAAC,WAAW,CAAC,GAAG,EAAE,0CAA0C,CAAC;QAC9D,CAAC,CAAC,WAAW,CAAA;AACjB,CAAC,CAAA;AAED,MAAM,mBAAmB,GAAG,CAAC,WAAwB,EAAE,EAAE;IACvD,OAAO;QACL,OAAO,EAAE,WAAW,CAAC,OAAO;QAC5B,EAAE,EAAE,WAAW,CAAC,EAAE;QAClB,QAAQ,EAAE,WAAW,CAAC,QAAQ;QAC9B,MAAM,EAAE,WAAW,CAAC,MAAM,CAAC,WAAW,EAAE,KAAK,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK;QACpE,eAAe,EAAE,WAAW,CAAC,eAAe;KACxB,CAAA;AACxB,CAAC,CAAA;AAED,MAAM,oBAAoB,GAAG,CAAC,WAAwB,EAAE,EAAE;IACxD,OAAO;QACL,OAAO,EAAE,WAAW,CAAC,OAAO;QAC5B,EAAE,EAAE,WAAW,CAAC,EAAE,IAAI,IAAI;QAC1B,QAAQ,EAAE,WAAW,CAAC,QAAQ;QAC9B,IAAI,EAAE,WAAW,CAAC,IAAI,IAAI,EAAE;QAC5B,QAAQ,EAAE,WAAW,CAAC,QAAQ;QAC9B,IAAI,EAAE,WAAW,CAAC,IAAI;KACD,CAAA;AACzB,CAAC,CAAA;AAED,MAAM,mBAAmB,GAAG,CAAC,WAAwB,EAAE,EAAE;IACvD,OAAO;QACL,OAAO,EAAE,WAAW,CAAC,OAAO;QAC5B,EAAE,EAAE,WAAW,CAAC,EAAG;QACnB,QAAQ,EAAE,WAAW,CAAC,QAAQ;QAC9B,IAAI,EAAE,WAAW,CAAC,IAAI,IAAI,EAAE;QAC5B,IAAI,EAAE,WAAW,CAAC,IAAI,IAAI,IAAI;KACV,CAAA;AACxB,CAAC,CAAA;AAED,MAAM,qBAAqB,GAAG,mBAAmB,CAAA;AAEjD,MAAM,sBAAsB,GAAG,CAAC,WAAwB,EAAE,EAAE;IAC1D,OAAO;QACL,OAAO,EAAE,WAAW,CAAC,OAAO;QAC5B,EAAE,EAAE,WAAW,CAAC,EAAE;QAClB,QAAQ,EAAE,WAAW,CAAC,QAAQ;QAC9B,IAAI,EAAE,WAAW,CAAC,IAAI,IAAI,IAAI;KACP,CAAA;AAC3B,CAAC,CAAA;AAID,MAAM,CAAC,MAAM,qBAAqB,GAAG,CACnC,OAAgB,EAChB,OAAwB,EACxB,YAA0B,EAC1B,EAAE;IACF,MAAM,UAAU,GAAG,CAAC,OAAe,EAAE,EAAE;QACrC,MAAM,GAAG,GAAG,YAAY,CAAC,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,YAAY,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,OAAO,CAAA;QAC1F,OAAO,QAAQ,CAAC,GAAG,CAAC,CAAA;IACtB,CAAC,CAAA;IAED,MAAM,OAAO,GAAG,CAAC,OAAwB,EAAE,EAAE;QAC3C,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YACrC,MAAM,SAAS,GAAa,EAAE,CAAA;YAE9B,OAAO;iBACJ,EAAE,CAAC,MAAM,EAAE,CAAC,KAAa,EAAE,EAAE;gBAC5B,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;YACvB,CAAC,CAAC;iBACD,EAAE,CAAC,KAAK,EAAE,GAAG,EAAE;gBACd,IAAI,CAAC;oBACH,MAAM,IAAI,GAAG,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,QAAQ,EAAE,CAAA;oBAChD,IAAI,CAAC,IAAI;wBAAE,OAAO,OAAO,CAAC,IAAI,CAAC,CAAA;oBAC/B,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAY,CAAC,CAAA;gBACtC,CAAC;gBAAC,MAAM,CAAC;oBACP,MAAM,CAAC,IAAI,KAAK,CAAC,cAAc,CAAC,CAAC,CAAA;gBACnC,CAAC;YACH,CAAC,CAAC;iBACD,EAAE,CAAC,OAAO,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAA;QACtC,CAAC,CAAC,CAAA;IACJ,CAAC,CAAA;IAED,MAAM,YAAY,GAAG,KAAK,EAAE,GAAoB,EAAE,EAAE;QAClD,MAAM,OAAO,GAAG,UAAU,CAAC,GAAG,CAAC,GAAG,IAAI,EAAE,CAAC,CAAA;QAEzC,6DAA6D;QAC7D,wCAAwC;QACxC,IAAI,CAAC,OAAO,CAAC,QAAQ,IAAI,OAAO,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC,MAAM,KAAK,CAAC;YAC3D,OAAO,WAAW,CAAC,GAAG,EAAE,mDAAmD,CAAC,CAAA;QAE9E,MAAM,IAAI,GAAG,GAAG,CAAC,OAAO,CAAC,IAAI,IAAI,IAAI,CAAA;QACrC,MAAM,WAAW,GAAG,GAAG,CAAC,OAAO,CAAC,mBAAmB,CAAC,CAAA;QACpD,MAAM,QAAQ,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,IAAI,MAAM,CAAA;QAEtF,MAAM,IAAI,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC,CAAA;QAE/B,OAAO;YACL,EAAE,EAAE,OAAO,CAAC,EAAE;YACd,QAAQ,EAAE,OAAO,CAAC,QAAQ;YAC1B,IAAI;YACJ,IAAI;YACJ,QAAQ;YACR,MAAM,EAAE,GAAG,CAAC,MAAM,IAAI,EAAE;YACxB,OAAO,EAAE,GAAG,CAAC,OAAO;YACpB,IAAI,EAAE,GAAG,CAAC,OAAO,CAAC,UAAU,CAAC,IAAI,IAAI;YACrC,eAAe,EAAE,GAAG,CAAC,OAAO,CAAC,eAAe,CAAC,IAAI,IAAI;SAChC,CAAA;IACzB,CAAC,CAAA;IAED,MAAM,gBAAgB,GAAG,CAAC,WAAwB,EAAE,EAAE;QACpD,MAAM,aAAa,GAAG,YAAY,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,EAAE;YAC5D,OAAO,OAAO,QAAQ,KAAK,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,YAAY,CAAA;QACxE,CAAC,CAAC,CAAA;QAEF,IACE,YAAY,CAAC,iBAAiB;YAC9B,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC,WAAW,CAAC,QAAQ,IAAI,EAAE,CAAC,CAAC,WAAW,EAAE,CAAC,EACnE,CAAC;YACD,OAAO,WAAW,CAAC,GAAG,EAAE,kBAAkB,CAAC,CAAA;QAC7C,CAAC;QAED,OAAO,WAAW,CAAA;IACpB,CAAC,CAAA;IAED,MAAM,YAAY,GAAG,CAAC,aAA4B,EAAE,GAAoC,EAAE,EAAE;QAC1F,GAAG,CAAC,UAAU,GAAG,aAAa,CAAC,MAAM,CAAA;QAErC,IAAI,aAAa,CAAC,OAAO,EAAE,CAAC;YAC1B,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,aAAa,CAAC,OAAO,CAAC,EAAE,CAAC;gBACjE,GAAG,CAAC,SAAS,CAAC,GAAG,EAAE,KAAK,CAAC,CAAA;YAC3B,CAAC;QACH,CAAC;QAED,IAAI,aAAa,CAAC,IAAI,EAAE,CAAC;YACvB,GAAG,CAAC,SAAS,CAAC,cAAc,EAAE,kBAAkB,CAAC,CAAA;YACjD,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC,CAAA;QAC/C,CAAC;QAED,GAAG,CAAC,GAAG,EAAE,CAAA;IACX,CAAC,CAAA;IAED,MAAM,MAAM,GAAG,KAAK,EAClB,WAA4B,EAC5B,YAA6C,EAC7C,UAAiD,EACjD,OAAoC,EACpC,aAAqD,EACrD,EAAE;QACF,MAAM,WAAW,GAAG,MAAM,YAAY,CAAC,WAAW,CAAC,CAAA;QAEnD,IAAI,OAAO,CAAC,WAAW,CAAC,EAAE,CAAC;YACzB,wDAAwD;YACxD,kCAAkC;YAClC,KAAK;YACL,OAAO,iBAAiB,CAAC,YAAY,EAAE,WAAW,CAAC,MAAM,EAAE,WAAW,CAAC,OAAO,CAAC,CAAA;QACjF,CAAC;QAED,KAAK,MAAM,SAAS,IAAI,CAAC,UAAU,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC;YAC5C,MAAM,gBAAgB,GAAG,SAAS,CAAC,WAAW,CAAC,CAAA;YAC/C,IAAI,OAAO,CAAC,gBAAgB,CAAC,EAAE,CAAC;gBAC9B,OAAO,iBAAiB,CAAC,YAAY,EAAE,gBAAgB,CAAC,MAAM,EAAE,gBAAgB,CAAC,OAAO,CAAC,CAAA;YAC3F,CAAC;QACH,CAAC;QAED,MAAM,gBAAgB,GAAG,OAAO,CAAC,WAAW,CAAC,CAAA;QAE7C,MAAM,QAAQ,GAAG,MAAM,aAAa,CAAC,gBAAgB,CAAC,CAAA;QACtD,YAAY,CAAC,QAAQ,EAAE,YAAY,CAAC,CAAA;IACtC,CAAC,CAAA;IAED,MAAM,cAAc,GAAG,iBAAiB,CAAC,OAAO,EAAE,OAAO,EAAE,YAAY,CAAC,CAAA;IAExE,MAAM,UAAU,GAAG,KAAK,EACtB,WAA4B,EAC5B,YAA6C,EAC7C,EAAE;QACF,MAAM,MAAM,CACV,WAAW,EACX,YAAY,EACZ,gBAAgB,EAChB,mBAAmB,EACnB,cAAc,CAAC,SAAS,CACzB,CAAA;IACH,CAAC,CAAA;IAED,MAAM,WAAW,GAAG,KAAK,EACvB,WAA4B,EAC5B,YAA6C,EAC7C,EAAE;QACF,MAAM,MAAM,CACV,WAAW,EACX,YAAY,EACZ,CAAC,gBAAgB,EAAE,iCAAiC,CAAC,EACrD,oBAAoB,EACpB,cAAc,CAAC,UAAU,CAC1B,CAAA;IACH,CAAC,CAAA;IAED,MAAM,UAAU,GAAG,KAAK,EACtB,WAA4B,EAC5B,YAA6C,EAC7C,EAAE;QACF,MAAM,MAAM,CACV,WAAW,EACX,YAAY,EACZ,CAAC,gBAAgB,EAAE,uBAAuB,EAAE,iCAAiC,CAAC,EAC9E,mBAAmB,EACnB,cAAc,CAAC,SAAS,CACzB,CAAA;IACH,CAAC,CAAA;IAED,MAAM,YAAY,GAAG,KAAK,EACxB,WAA4B,EAC5B,YAA6C,EAC7C,EAAE;QACF,MAAM,MAAM,CACV,WAAW,EACX,YAAY,EACZ,CAAC,gBAAgB,EAAE,uBAAuB,EAAE,iCAAiC,CAAC,EAC9E,qBAAqB,EACrB,cAAc,CAAC,WAAW,CAC3B,CAAA;IACH,CAAC,CAAA;IAED,MAAM,aAAa,GAAG,KAAK,EACzB,WAA4B,EAC5B,YAA6C,EAC7C,EAAE;QACF,MAAM,MAAM,CACV,WAAW,EACX,YAAY,EACZ,gBAAgB,EAChB,sBAAsB,EACtB,cAAc,CAAC,YAAY,CAC5B,CAAA;IACH,CAAC,CAAA;IAED,OAAO,CAAC,GAAoB,EAAE,GAAoC,EAAE,EAAE;QACpE,IAAI,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,MAAM,IAAI,EAAE,CAAC,EAAE,CAAC;YAC/C,OAAO,UAAU,CAAC,GAAG,EAAE,GAAG,CAAC,CAAA;QAC7B,CAAC;QACD,IAAI,GAAG,CAAC,MAAM,KAAK,MAAM,EAAE,CAAC;YAC1B,OAAO,WAAW,CAAC,GAAG,EAAE,GAAG,CAAC,CAAA;QAC9B,CAAC;QACD,IAAI,GAAG,CAAC,MAAM,KAAK,KAAK,EAAE,CAAC;YACzB,OAAO,UAAU,CAAC,GAAG,EAAE,GAAG,CAAC,CAAA;QAC7B,CAAC;QACD,IAAI,GAAG,CAAC,MAAM,KAAK,OAAO,EAAE,CAAC;YAC3B,OAAO,YAAY,CAAC,GAAG,EAAE,GAAG,CAAC,CAAA;QAC/B,CAAC;QACD,IAAI,GAAG,CAAC,MAAM,KAAK,QAAQ,EAAE,CAAC;YAC5B,OAAO,aAAa,CAAC,GAAG,EAAE,GAAG,CAAC,CAAA;QAChC,CAAC;IACH,CAAC,CAAA;AACH,CAAC,CAAA"}
package/auth/auth.d.ts DELETED
@@ -1,6 +0,0 @@
1
- import 'dotenv/config';
2
- import type { NextFunction, Request, Response } from 'express';
3
- import type { Queries } from '../data/types.js';
4
- export declare const isAuthEnabled: () => boolean;
5
- export declare const createAuthMiddleware: (queries: Queries) => (req: Request, res: Response, next: NextFunction) => Promise<void>;
6
- //# sourceMappingURL=auth.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"auth.d.ts","sourceRoot":"","sources":["../../../src/auth/auth.ts"],"names":[],"mappings":"AAAA,OAAO,eAAe,CAAA;AACtB,OAAO,KAAK,EAAE,YAAY,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAA;AAC9D,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,eAAe,CAAA;AAE5C,eAAO,MAAM,aAAa,eAAwD,CAAA;AAElF,eAAO,MAAM,oBAAoB,YAAa,OAAO,WAChC,OAAO,OAAO,QAAQ,QAAQ,YAAY,kBAmB9D,CAAA"}
package/auth/auth.js DELETED
@@ -1,19 +0,0 @@
1
- import 'dotenv/config';
2
- export const isAuthEnabled = () => process.env.FEATURE_FLAG_SIMPLE_AUTH === 'true';
3
- export const createAuthMiddleware = (queries) => {
4
- return async (req, res, next) => {
5
- const token = req.headers['x-token'];
6
- if (!token || typeof token !== 'string' || token.length === 0) {
7
- res.status(401).json({ message: 'Unauthorized' });
8
- return;
9
- }
10
- const tokens = await queries.getAll('tokens');
11
- const foundToken = tokens.find((t) => t.token === token);
12
- if (!foundToken) {
13
- res.status(401).json({ message: 'Unauthorized' });
14
- return;
15
- }
16
- next();
17
- };
18
- };
19
- //# sourceMappingURL=auth.js.map
package/auth/auth.js.map DELETED
@@ -1 +0,0 @@
1
- {"version":3,"file":"auth.js","sourceRoot":"","sources":["../../../src/auth/auth.ts"],"names":[],"mappings":"AAAA,OAAO,eAAe,CAAA;AAItB,MAAM,CAAC,MAAM,aAAa,GAAG,GAAG,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,wBAAwB,KAAK,MAAM,CAAA;AAElF,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAAC,OAAgB,EAAE,EAAE;IACvD,OAAO,KAAK,EAAE,GAAY,EAAE,GAAa,EAAE,IAAkB,EAAE,EAAE;QAC/D,MAAM,KAAK,GAAG,GAAG,CAAC,OAAO,CAAC,SAAS,CAAC,CAAA;QAEpC,IAAI,CAAC,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC9D,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,cAAc,EAAE,CAAC,CAAA;YACjD,OAAM;QACR,CAAC;QAED,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAA;QAE7C,MAAM,UAAU,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,KAAK,KAAK,CAAC,CAAA;QAExD,IAAI,CAAC,UAAU,EAAE,CAAC;YAChB,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,cAAc,EAAE,CAAC,CAAA;YACjD,OAAM;QACR,CAAC;QAED,IAAI,EAAE,CAAA;IACR,CAAC,CAAA;AACH,CAAC,CAAA"}
@@ -1,3 +0,0 @@
1
- import type { NextFunction, Request, Response } from 'express';
2
- export declare const createDelayMiddleware: (delay: number) => (req: Request, res: Response, next: NextFunction) => void;
3
- //# sourceMappingURL=delayMiddleware.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"delayMiddleware.d.ts","sourceRoot":"","sources":["../../../src/delay/delayMiddleware.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAA;AAQ9D,eAAO,MAAM,qBAAqB,UAAW,MAAM,WACpC,OAAO,OAAO,QAAQ,QAAQ,YAAY,SAGxD,CAAA"}
@@ -1,11 +0,0 @@
1
- const pause = (delay) => {
2
- return (req, res, next) => {
3
- setTimeout(next, delay);
4
- };
5
- };
6
- export const createDelayMiddleware = (delay) => {
7
- return (req, res, next) => {
8
- pause(delay)(req, res, next);
9
- };
10
- };
11
- //# sourceMappingURL=delayMiddleware.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"delayMiddleware.js","sourceRoot":"","sources":["../../../src/delay/delayMiddleware.ts"],"names":[],"mappings":"AAEA,MAAM,KAAK,GAAG,CAAC,KAAa,EAAE,EAAE;IAC9B,OAAO,CAAC,GAAY,EAAE,GAAa,EAAE,IAAkB,EAAE,EAAE;QACzD,UAAU,CAAC,IAAI,EAAE,KAAK,CAAC,CAAA;IACzB,CAAC,CAAA;AACH,CAAC,CAAA;AAED,MAAM,CAAC,MAAM,qBAAqB,GAAG,CAAC,KAAa,EAAE,EAAE;IACrD,OAAO,CAAC,GAAY,EAAE,GAAa,EAAE,IAAkB,EAAE,EAAE;QACzD,KAAK,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,IAAI,CAAC,CAAA;IAC9B,CAAC,CAAA;AACH,CAAC,CAAA"}
@@ -1,5 +0,0 @@
1
- import type { Queries } from './data/types.js';
2
- import type { CompiledSchemas } from './schema/types.js';
3
- import type { RouterConfig } from './config/index.js';
4
- export declare const createResourceRouter: (queries: Queries, schemas: CompiledSchemas, routerConfig: RouterConfig) => import("express-serve-static-core").Router;
5
- //# sourceMappingURL=resourceRouter.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"resourceRouter.d.ts","sourceRoot":"","sources":["../../src/resourceRouter.ts"],"names":[],"mappings":"AAaA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,cAAc,CAAA;AAC3C,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAA;AACrD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,UAAU,CAAA;AAyE5C,eAAO,MAAM,oBAAoB,YACtB,OAAO,WACP,eAAe,gBACV,YAAY,+CAgJ3B,CAAA"}
package/resourceRouter.js DELETED
@@ -1,139 +0,0 @@
1
- import express from 'express';
2
- import { getRequestHandler } from './requestHandlers/index.js';
3
- import { parseUrl } from './urls/urlParser.js';
4
- const isError = (request) => {
5
- return 'status' in request;
6
- };
7
- const createError = (status, message) => {
8
- return { status, message };
9
- };
10
- const validateIdInUrlRequired = (requestInfo) => {
11
- return !requestInfo.id ? createError(400, 'An id is required in the URL') : requestInfo;
12
- };
13
- const validateIdInUrlNotAllowed = (requestInfo) => {
14
- return requestInfo.id ? createError(400, 'An id is not allowed in the URL') : requestInfo;
15
- };
16
- const validateIdInRequestBodyNotAllowed = (requestInfo) => {
17
- return requestInfo.body && typeof requestInfo.body === 'object' && 'id' in requestInfo.body
18
- ? createError(400, 'An id is not allowed in the request body')
19
- : requestInfo;
20
- };
21
- const convertToGetRequest = (requestInfo) => {
22
- return {
23
- headers: requestInfo.headers,
24
- id: requestInfo.id,
25
- resource: requestInfo.resource,
26
- isHeadRequest: requestInfo.method.toUpperCase() === 'HEAD',
27
- };
28
- };
29
- const convertToPostRequest = (requestInfo) => {
30
- return {
31
- headers: requestInfo.headers,
32
- resource: requestInfo.resource,
33
- body: requestInfo.body ?? {},
34
- protocol: requestInfo.protocol,
35
- host: requestInfo.host,
36
- };
37
- };
38
- const convertToPutRequest = (requestInfo) => {
39
- return {
40
- headers: requestInfo.headers,
41
- id: requestInfo.id,
42
- resource: requestInfo.resource,
43
- body: requestInfo.body ?? {},
44
- etag: requestInfo.etag ?? null,
45
- };
46
- };
47
- const convertToPatchRequest = convertToPutRequest;
48
- const convertToDeleteRequest = (requestInfo) => {
49
- return {
50
- headers: requestInfo.headers,
51
- id: requestInfo.id,
52
- resource: requestInfo.resource,
53
- etag: requestInfo.etag ?? null,
54
- };
55
- };
56
- export const createResourceRouter = (queries, schemas, routerConfig) => {
57
- const getUrlInfo = (baseUrl) => {
58
- const url = routerConfig.apiPrefix ? baseUrl.replace(routerConfig.apiPrefix, '') : baseUrl;
59
- return parseUrl(url);
60
- };
61
- const parseRequest = (req) => {
62
- const urlInfo = getUrlInfo(req.baseUrl);
63
- // Due to how routing is setup this situation can not happen,
64
- // so it's mainly to satisfy TypeScript.
65
- if (!urlInfo.resource || urlInfo.resource.trim().length === 0)
66
- return createError(404, 'Resource could not be determined from req.baseUrl');
67
- const host = req.get('host') || null;
68
- const protocol = host ? req.protocol : null;
69
- const etag = req.headers['if-match'] ?? null;
70
- return {
71
- id: urlInfo.id,
72
- resource: urlInfo.resource,
73
- body: req.body,
74
- host,
75
- protocol,
76
- method: req.method,
77
- headers: req.headers,
78
- etag,
79
- };
80
- };
81
- const validateResource = (requestInfo) => {
82
- const resourcePaths = routerConfig.resources.map((resource) => {
83
- return typeof resource === 'string' ? resource : resource.resourcePath;
84
- });
85
- if (routerConfig.validateResources &&
86
- !resourcePaths.includes((requestInfo.resource ?? '').toLowerCase())) {
87
- return createError(404, 'Invalid resource');
88
- }
89
- return requestInfo;
90
- };
91
- const sendResponse = (tembaResponse, res) => {
92
- res.status(tembaResponse.status);
93
- if (tembaResponse.headers) {
94
- for (const [key, value] of Object.entries(tembaResponse.headers)) {
95
- res.set(key, value);
96
- }
97
- }
98
- res.json(tembaResponse.body);
99
- res.end();
100
- };
101
- const handle = async (expressRequest, expressResponse, validators, convert, handleRequest) => {
102
- const requestInfo = parseRequest(expressRequest);
103
- if (isError(requestInfo)) {
104
- return expressResponse.status(requestInfo.status).json({
105
- message: requestInfo.message,
106
- });
107
- }
108
- for (const validator of [validators].flat()) {
109
- const validationResult = validator(requestInfo);
110
- if (isError(validationResult)) {
111
- return expressResponse.status(validationResult.status).json({
112
- message: validationResult.message,
113
- });
114
- }
115
- }
116
- const convertedRequest = convert(requestInfo);
117
- const response = await handleRequest(convertedRequest);
118
- sendResponse(response, expressResponse);
119
- };
120
- const requestHandler = getRequestHandler(queries, schemas, routerConfig);
121
- const resourceRouter = express.Router();
122
- resourceRouter.get('*', async (expressRequest, expressResponse) => {
123
- await handle(expressRequest, expressResponse, validateResource, convertToGetRequest, requestHandler.handleGet);
124
- });
125
- resourceRouter.post('*', async (expressRequest, expressResponse) => {
126
- await handle(expressRequest, expressResponse, [validateResource, validateIdInUrlNotAllowed, validateIdInRequestBodyNotAllowed], convertToPostRequest, requestHandler.handlePost);
127
- });
128
- resourceRouter.put('*', async (expressRequest, expressResponse) => {
129
- await handle(expressRequest, expressResponse, [validateResource, validateIdInUrlRequired, validateIdInRequestBodyNotAllowed], convertToPutRequest, requestHandler.handlePut);
130
- });
131
- resourceRouter.patch('*', async (expressRequest, expressResponse) => {
132
- await handle(expressRequest, expressResponse, [validateResource, validateIdInUrlRequired, validateIdInRequestBodyNotAllowed], convertToPatchRequest, requestHandler.handlePatch);
133
- });
134
- resourceRouter.delete('*', async (expressRequest, expressResponse) => {
135
- await handle(expressRequest, expressResponse, validateResource, convertToDeleteRequest, requestHandler.handleDelete);
136
- });
137
- return resourceRouter;
138
- };
139
- //# sourceMappingURL=resourceRouter.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"resourceRouter.js","sourceRoot":"","sources":["../../src/resourceRouter.ts"],"names":[],"mappings":"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"}