@furystack/rest-service 7.0.0 → 7.0.2

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 (189) hide show
  1. package/{types → esm}/actions/error-action.d.ts +1 -1
  2. package/{types → esm}/actions/error-action.d.ts.map +1 -1
  3. package/esm/actions/error-action.js +25 -0
  4. package/esm/actions/error-action.js.map +1 -0
  5. package/{types → esm}/actions/get-current-user.d.ts +1 -1
  6. package/{types → esm}/actions/get-current-user.d.ts.map +1 -1
  7. package/esm/actions/get-current-user.js +12 -0
  8. package/esm/actions/get-current-user.js.map +1 -0
  9. package/esm/actions/index.d.ts +7 -0
  10. package/esm/actions/index.d.ts.map +1 -0
  11. package/esm/actions/index.js +7 -0
  12. package/esm/actions/index.js.map +1 -0
  13. package/{types → esm}/actions/is-authenticated.d.ts +1 -1
  14. package/{types → esm}/actions/is-authenticated.d.ts.map +1 -1
  15. package/esm/actions/is-authenticated.js +13 -0
  16. package/esm/actions/is-authenticated.js.map +1 -0
  17. package/{types → esm}/actions/login.d.ts +2 -2
  18. package/esm/actions/login.d.ts.map +1 -0
  19. package/esm/actions/login.js +22 -0
  20. package/esm/actions/login.js.map +1 -0
  21. package/{types → esm}/actions/logout.d.ts +1 -1
  22. package/{types → esm}/actions/logout.d.ts.map +1 -1
  23. package/esm/actions/logout.js +15 -0
  24. package/esm/actions/logout.js.map +1 -0
  25. package/{types → esm}/actions/not-found-action.d.ts +1 -1
  26. package/{types → esm}/actions/not-found-action.d.ts.map +1 -1
  27. package/esm/actions/not-found-action.js +10 -0
  28. package/esm/actions/not-found-action.js.map +1 -0
  29. package/{types → esm}/api-manager.d.ts +4 -4
  30. package/{types → esm}/api-manager.d.ts.map +1 -1
  31. package/esm/api-manager.js +153 -0
  32. package/esm/api-manager.js.map +1 -0
  33. package/{types → esm}/authenticate.d.ts +1 -1
  34. package/{types → esm}/authenticate.d.ts.map +1 -1
  35. package/esm/authenticate.js +16 -0
  36. package/esm/authenticate.js.map +1 -0
  37. package/{types → esm}/authorize.d.ts +1 -1
  38. package/{types → esm}/authorize.d.ts.map +1 -1
  39. package/esm/authorize.js +19 -0
  40. package/esm/authorize.js.map +1 -0
  41. package/{types → esm}/endpoint-generators/create-delete-endpoint.d.ts +1 -1
  42. package/{types → esm}/endpoint-generators/create-delete-endpoint.d.ts.map +1 -1
  43. package/esm/endpoint-generators/create-delete-endpoint.js +20 -0
  44. package/esm/endpoint-generators/create-delete-endpoint.js.map +1 -0
  45. package/{types → esm}/endpoint-generators/create-get-collection-endpoint.d.ts +1 -1
  46. package/{types → esm}/endpoint-generators/create-get-collection-endpoint.d.ts.map +1 -1
  47. package/esm/endpoint-generators/create-get-collection-endpoint.js +22 -0
  48. package/esm/endpoint-generators/create-get-collection-endpoint.js.map +1 -0
  49. package/{types → esm}/endpoint-generators/create-get-entity-endpoint.d.ts +1 -1
  50. package/{types → esm}/endpoint-generators/create-get-entity-endpoint.d.ts.map +1 -1
  51. package/esm/endpoint-generators/create-get-entity-endpoint.js +25 -0
  52. package/esm/endpoint-generators/create-get-entity-endpoint.js.map +1 -0
  53. package/{types → esm}/endpoint-generators/create-patch-endpoint.d.ts +1 -1
  54. package/{types → esm}/endpoint-generators/create-patch-endpoint.d.ts.map +1 -1
  55. package/esm/endpoint-generators/create-patch-endpoint.js +22 -0
  56. package/esm/endpoint-generators/create-patch-endpoint.js.map +1 -0
  57. package/{types → esm}/endpoint-generators/create-post-endpoint.d.ts +1 -1
  58. package/{types → esm}/endpoint-generators/create-post-endpoint.d.ts.map +1 -1
  59. package/esm/endpoint-generators/create-post-endpoint.js +25 -0
  60. package/esm/endpoint-generators/create-post-endpoint.js.map +1 -0
  61. package/esm/endpoint-generators/index.d.ts +6 -0
  62. package/{types → esm}/endpoint-generators/index.d.ts.map +1 -1
  63. package/esm/endpoint-generators/index.js +6 -0
  64. package/esm/endpoint-generators/index.js.map +1 -0
  65. package/esm/endpoint-generators/utils.js +23 -0
  66. package/esm/endpoint-generators/utils.js.map +1 -0
  67. package/{types → esm}/helpers.d.ts +4 -4
  68. package/esm/helpers.d.ts.map +1 -0
  69. package/esm/helpers.js +28 -0
  70. package/esm/helpers.js.map +1 -0
  71. package/{types → esm}/http-authentication-settings.d.ts +1 -1
  72. package/{types → esm}/http-authentication-settings.d.ts.map +1 -1
  73. package/esm/http-authentication-settings.js +26 -0
  74. package/esm/http-authentication-settings.js.map +1 -0
  75. package/{types → esm}/http-user-context.d.ts +2 -2
  76. package/{types → esm}/http-user-context.d.ts.map +1 -1
  77. package/esm/http-user-context.js +168 -0
  78. package/esm/http-user-context.js.map +1 -0
  79. package/esm/incoming-message-extensions.js +11 -0
  80. package/esm/incoming-message-extensions.js.map +1 -0
  81. package/esm/index.d.ts +19 -0
  82. package/esm/index.d.ts.map +1 -0
  83. package/esm/index.js +19 -0
  84. package/esm/index.js.map +1 -0
  85. package/esm/mime-types.js +333 -0
  86. package/esm/mime-types.js.map +1 -0
  87. package/esm/models/cors-options.js +2 -0
  88. package/esm/models/cors-options.js.map +1 -0
  89. package/esm/models/default-session.js +6 -0
  90. package/esm/models/default-session.js.map +1 -0
  91. package/esm/models/index.d.ts +3 -0
  92. package/esm/models/index.d.ts.map +1 -0
  93. package/esm/models/index.js +3 -0
  94. package/esm/models/index.js.map +1 -0
  95. package/esm/request-action-implementation.js +34 -0
  96. package/esm/request-action-implementation.js.map +1 -0
  97. package/esm/schema-validator/index.d.ts +3 -0
  98. package/{types → esm}/schema-validator/index.d.ts.map +1 -1
  99. package/esm/schema-validator/index.js +3 -0
  100. package/esm/schema-validator/index.js.map +1 -0
  101. package/esm/schema-validator/schema-validation-error.js +11 -0
  102. package/esm/schema-validator/schema-validation-error.js.map +1 -0
  103. package/esm/schema-validator/schema-validator.js +31 -0
  104. package/esm/schema-validator/schema-validator.js.map +1 -0
  105. package/esm/schema-validator/validate-examples.js +26 -0
  106. package/esm/schema-validator/validate-examples.js.map +1 -0
  107. package/{types → esm}/server-manager.d.ts +1 -1
  108. package/esm/server-manager.js +73 -0
  109. package/esm/server-manager.js.map +1 -0
  110. package/{types → esm}/server-response-extensions.d.ts +1 -1
  111. package/{types → esm}/server-response-extensions.d.ts.map +1 -1
  112. package/esm/server-response-extensions.js +12 -0
  113. package/esm/server-response-extensions.js.map +1 -0
  114. package/{types → esm}/static-server-manager.d.ts +1 -1
  115. package/esm/static-server-manager.js +68 -0
  116. package/esm/static-server-manager.js.map +1 -0
  117. package/{types → esm}/utils.d.ts +1 -1
  118. package/{types → esm}/utils.d.ts.map +1 -1
  119. package/esm/utils.js +70 -0
  120. package/esm/utils.js.map +1 -0
  121. package/{types → esm}/validate.d.ts +1 -1
  122. package/{types → esm}/validate.d.ts.map +1 -1
  123. package/esm/validate.integration.schema.js +2 -0
  124. package/esm/validate.integration.schema.js.map +1 -0
  125. package/esm/validate.integration.spec.schema.json +903 -0
  126. package/esm/validate.js +43 -0
  127. package/esm/validate.js.map +1 -0
  128. package/package.json +11 -20
  129. package/src/actions/error-action.ts +3 -3
  130. package/src/actions/get-current-user.ts +3 -3
  131. package/src/actions/index.ts +6 -6
  132. package/src/actions/is-authenticated.ts +2 -2
  133. package/src/actions/login.ts +4 -4
  134. package/src/actions/logout.ts +3 -3
  135. package/src/actions/not-found-action.ts +2 -2
  136. package/src/api-manager.ts +10 -9
  137. package/src/authenticate.ts +3 -3
  138. package/src/authorize.ts +2 -2
  139. package/src/endpoint-generators/create-delete-endpoint.ts +2 -2
  140. package/src/endpoint-generators/create-get-collection-endpoint.ts +2 -2
  141. package/src/endpoint-generators/create-get-entity-endpoint.ts +2 -2
  142. package/src/endpoint-generators/create-patch-endpoint.ts +2 -2
  143. package/src/endpoint-generators/create-post-endpoint.ts +2 -2
  144. package/src/endpoint-generators/index.ts +5 -5
  145. package/src/endpoint-generators/utils.ts +1 -1
  146. package/src/helpers.ts +6 -6
  147. package/src/http-authentication-settings.ts +1 -1
  148. package/src/http-user-context.ts +2 -2
  149. package/src/incoming-message-extensions.ts +1 -1
  150. package/src/index.ts +18 -18
  151. package/src/models/index.ts +2 -2
  152. package/src/schema-validator/index.ts +2 -2
  153. package/src/schema-validator/schema-validator.ts +3 -3
  154. package/src/server-response-extensions.ts +1 -1
  155. package/src/static-server-manager.ts +2 -2
  156. package/src/utils.ts +1 -1
  157. package/src/validate.ts +2 -2
  158. package/types/actions/index.d.ts +0 -7
  159. package/types/actions/index.d.ts.map +0 -1
  160. package/types/actions/login.d.ts.map +0 -1
  161. package/types/endpoint-generators/index.d.ts +0 -6
  162. package/types/helpers.d.ts.map +0 -1
  163. package/types/index.d.ts +0 -19
  164. package/types/index.d.ts.map +0 -1
  165. package/types/models/index.d.ts +0 -3
  166. package/types/models/index.d.ts.map +0 -1
  167. package/types/schema-validator/index.d.ts +0 -3
  168. /package/{types → esm}/endpoint-generators/utils.d.ts +0 -0
  169. /package/{types → esm}/endpoint-generators/utils.d.ts.map +0 -0
  170. /package/{types → esm}/incoming-message-extensions.d.ts +0 -0
  171. /package/{types → esm}/incoming-message-extensions.d.ts.map +0 -0
  172. /package/{types → esm}/mime-types.d.ts +0 -0
  173. /package/{types → esm}/mime-types.d.ts.map +0 -0
  174. /package/{types → esm}/models/cors-options.d.ts +0 -0
  175. /package/{types → esm}/models/cors-options.d.ts.map +0 -0
  176. /package/{types → esm}/models/default-session.d.ts +0 -0
  177. /package/{types → esm}/models/default-session.d.ts.map +0 -0
  178. /package/{types → esm}/request-action-implementation.d.ts +0 -0
  179. /package/{types → esm}/request-action-implementation.d.ts.map +0 -0
  180. /package/{types → esm}/schema-validator/schema-validation-error.d.ts +0 -0
  181. /package/{types → esm}/schema-validator/schema-validation-error.d.ts.map +0 -0
  182. /package/{types → esm}/schema-validator/schema-validator.d.ts +0 -0
  183. /package/{types → esm}/schema-validator/schema-validator.d.ts.map +0 -0
  184. /package/{types → esm}/schema-validator/validate-examples.d.ts +0 -0
  185. /package/{types → esm}/schema-validator/validate-examples.d.ts.map +0 -0
  186. /package/{types → esm}/server-manager.d.ts.map +0 -0
  187. /package/{types → esm}/static-server-manager.d.ts.map +0 -0
  188. /package/{types → esm}/validate.integration.schema.d.ts +0 -0
  189. /package/{types → esm}/validate.integration.schema.d.ts.map +0 -0
@@ -0,0 +1,25 @@
1
+ import { RequestError } from '@furystack/rest';
2
+ import '@furystack/repository';
3
+ import { JsonResult } from '../request-action-implementation.js';
4
+ import { getRepository } from '@furystack/repository';
5
+ /**
6
+ * Creates a simple Get Entity endpoint for a specified model.
7
+ * @param options The options for endpoint creation
8
+ * @param options.model The entity model, should have a Repository DataSet
9
+ * @param options.primaryKey The field name used as primary key on the model
10
+ * @returns The generated endpoint
11
+ */
12
+ export const createGetEntityEndpoint = (options) => {
13
+ const endpoint = async ({ injector, getUrlParams, getQuery }) => {
14
+ const { id } = getUrlParams();
15
+ const { select } = getQuery();
16
+ const dataSet = getRepository(injector).getDataSetFor(options.model, options.primaryKey);
17
+ const entry = await dataSet.get(injector, id, select);
18
+ if (!entry) {
19
+ throw new RequestError('Entity not found', 404);
20
+ }
21
+ return JsonResult(entry);
22
+ };
23
+ return endpoint;
24
+ };
25
+ //# sourceMappingURL=create-get-entity-endpoint.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"create-get-entity-endpoint.js","sourceRoot":"","sources":["../../src/endpoint-generators/create-get-entity-endpoint.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAA;AAC9C,OAAO,uBAAuB,CAAA;AAE9B,OAAO,EAAE,UAAU,EAAE,MAAM,qCAAqC,CAAA;AAChE,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAA;AAErD;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,uBAAuB,GAAG,CAAgD,OAGtF,EAAE,EAAE;IACH,MAAM,QAAQ,GAAqD,KAAK,EAAE,EAAE,QAAQ,EAAE,YAAY,EAAE,QAAQ,EAAE,EAAE,EAAE;QAChH,MAAM,EAAE,EAAE,EAAE,GAAG,YAAY,EAAE,CAAA;QAC7B,MAAM,EAAE,MAAM,EAAE,GAAG,QAAQ,EAAE,CAAA;QAC7B,MAAM,OAAO,GAAG,aAAa,CAAC,QAAQ,CAAC,CAAC,aAAa,CAAC,OAAO,CAAC,KAAK,EAAE,OAAO,CAAC,UAAU,CAAC,CAAA;QACxF,MAAM,KAAK,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC,QAAQ,EAAE,EAAE,EAAE,MAAM,CAAC,CAAA;QACrD,IAAI,CAAC,KAAK,EAAE;YACV,MAAM,IAAI,YAAY,CAAC,kBAAkB,EAAE,GAAG,CAAC,CAAA;SAChD;QACD,OAAO,UAAU,CAAC,KAAK,CAAC,CAAA;IAC1B,CAAC,CAAA;IACD,OAAO,QAAQ,CAAA;AACjB,CAAC,CAAA"}
@@ -2,7 +2,7 @@ import type { Constructable } from '@furystack/inject';
2
2
  import type { PatchEndpoint } from '@furystack/rest';
3
3
  import '@furystack/repository';
4
4
  import '../incoming-message-extensions';
5
- import type { RequestAction } from '../request-action-implementation';
5
+ import type { RequestAction } from '../request-action-implementation.js';
6
6
  import type { WithOptionalId } from '@furystack/core';
7
7
  /**
8
8
  * Creates a PATCH endpoint for updating entities
@@ -1 +1 @@
1
- {"version":3,"file":"create-patch-endpoint.d.ts","sourceRoot":"","sources":["../../src/endpoint-generators/create-patch-endpoint.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAA;AACtD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAA;AACpD,OAAO,uBAAuB,CAAA;AAC9B,OAAO,gCAAgC,CAAA;AACvC,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,kCAAkC,CAAA;AAGrE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAA;AAErD;;;;;;GAMG;AACH,eAAO,MAAM,mBAAmB;;;iEAoB/B,CAAA"}
1
+ {"version":3,"file":"create-patch-endpoint.d.ts","sourceRoot":"","sources":["../../src/endpoint-generators/create-patch-endpoint.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAA;AACtD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAA;AACpD,OAAO,uBAAuB,CAAA;AAC9B,OAAO,gCAAgC,CAAA;AACvC,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,qCAAqC,CAAA;AAGxE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAA;AAErD;;;;;;GAMG;AACH,eAAO,MAAM,mBAAmB;;;iEAoB/B,CAAA"}
@@ -0,0 +1,22 @@
1
+ import '@furystack/repository';
2
+ import '../incoming-message-extensions';
3
+ import { JsonResult } from '../request-action-implementation.js';
4
+ import { getRepository } from '@furystack/repository';
5
+ /**
6
+ * Creates a PATCH endpoint for updating entities
7
+ * @param options The options for endpoint creation
8
+ * @param options.model The Model class
9
+ * @param options.primaryKey The field name that is used as primary key on the model
10
+ * @returns a boolean that indicates the success
11
+ */
12
+ export const createPatchEndpoint = (options) => {
13
+ const endpoint = async ({ injector, request, getUrlParams, }) => {
14
+ const { id } = getUrlParams();
15
+ const patchData = await request.readPostBody();
16
+ const dataSet = getRepository(injector).getDataSetFor(options.model, options.primaryKey);
17
+ await dataSet.update(injector, id, patchData);
18
+ return JsonResult({});
19
+ };
20
+ return endpoint;
21
+ };
22
+ //# sourceMappingURL=create-patch-endpoint.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"create-patch-endpoint.js","sourceRoot":"","sources":["../../src/endpoint-generators/create-patch-endpoint.ts"],"names":[],"mappings":"AAEA,OAAO,uBAAuB,CAAA;AAC9B,OAAO,gCAAgC,CAAA;AAEvC,OAAO,EAAE,UAAU,EAAE,MAAM,qCAAqC,CAAA;AAChE,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAA;AAGrD;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,mBAAmB,GAAG,CAIjC,OAGD,EAAE,EAAE;IACH,MAAM,QAAQ,GAAgE,KAAK,EAAE,EACnF,QAAQ,EACR,OAAO,EACP,YAAY,GACb,EAAE,EAAE;QACH,MAAM,EAAE,EAAE,EAAE,GAAG,YAAY,EAAE,CAAA;QAC7B,MAAM,SAAS,GAAG,MAAM,OAAO,CAAC,YAAY,EAAK,CAAA;QACjD,MAAM,OAAO,GAAG,aAAa,CAAC,QAAQ,CAAC,CAAC,aAAa,CAAC,OAAO,CAAC,KAAK,EAAE,OAAO,CAAC,UAAU,CAAC,CAAA;QACxF,MAAM,OAAO,CAAC,MAAM,CAAC,QAAQ,EAAE,EAAE,EAAE,SAAS,CAAC,CAAA;QAC7C,OAAO,UAAU,CAAC,EAAE,CAAC,CAAA;IACvB,CAAC,CAAA;IACD,OAAO,QAAQ,CAAA;AACjB,CAAC,CAAA"}
@@ -2,7 +2,7 @@ import type { Constructable } from '@furystack/inject';
2
2
  import type { PostEndpoint } from '@furystack/rest';
3
3
  import '@furystack/repository';
4
4
  import '../incoming-message-extensions';
5
- import type { RequestAction } from '../request-action-implementation';
5
+ import type { RequestAction } from '../request-action-implementation.js';
6
6
  import type { WithOptionalId } from '@furystack/core';
7
7
  /**
8
8
  * Creates a POST endpoint for updating entities
@@ -1 +1 @@
1
- {"version":3,"file":"create-post-endpoint.d.ts","sourceRoot":"","sources":["../../src/endpoint-generators/create-post-endpoint.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAA;AACtD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAA;AAEnD,OAAO,uBAAuB,CAAA;AAC9B,OAAO,gCAAgC,CAAA;AACvC,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,kCAAkC,CAAA;AAErE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAA;AAErD;;;;;;GAMG;AACH,eAAO,MAAM,kBAAkB;;;gEAsB9B,CAAA"}
1
+ {"version":3,"file":"create-post-endpoint.d.ts","sourceRoot":"","sources":["../../src/endpoint-generators/create-post-endpoint.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAA;AACtD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAA;AAEnD,OAAO,uBAAuB,CAAA;AAC9B,OAAO,gCAAgC,CAAA;AACvC,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,qCAAqC,CAAA;AAExE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAA;AAErD;;;;;;GAMG;AACH,eAAO,MAAM,kBAAkB;;;gEAsB9B,CAAA"}
@@ -0,0 +1,25 @@
1
+ import { RequestError } from '@furystack/rest';
2
+ import '@furystack/repository';
3
+ import '../incoming-message-extensions';
4
+ import { JsonResult } from '../request-action-implementation.js';
5
+ import { getRepository } from '@furystack/repository';
6
+ /**
7
+ * Creates a POST endpoint for updating entities
8
+ * @param options The options for endpoint creation
9
+ * @param options.model The Model class
10
+ * @param options.primaryKey The field name used as primary key
11
+ * @returns a boolean that indicates the success
12
+ */
13
+ export const createPostEndpoint = (options) => {
14
+ const endpoint = async ({ injector, request }) => {
15
+ const dataSet = getRepository(injector).getDataSetFor(options.model, options.primaryKey);
16
+ const entityToCreate = await request.readPostBody();
17
+ const { created } = await dataSet.add(injector, entityToCreate);
18
+ if (!created || !created.length) {
19
+ throw new RequestError('Entity not found', 404);
20
+ }
21
+ return JsonResult(created[0], 201);
22
+ };
23
+ return endpoint;
24
+ };
25
+ //# sourceMappingURL=create-post-endpoint.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"create-post-endpoint.js","sourceRoot":"","sources":["../../src/endpoint-generators/create-post-endpoint.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAA;AAC9C,OAAO,uBAAuB,CAAA;AAC9B,OAAO,gCAAgC,CAAA;AAEvC,OAAO,EAAE,UAAU,EAAE,MAAM,qCAAqC,CAAA;AAEhE,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAA;AACrD;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAIhC,OAGD,EAAE,EAAE;IACH,MAAM,QAAQ,GAA+D,KAAK,EAAE,EAAE,QAAQ,EAAE,OAAO,EAAE,EAAE,EAAE;QAC3G,MAAM,OAAO,GAAG,aAAa,CAAC,QAAQ,CAAC,CAAC,aAAa,CACnD,OAAO,CAAC,KAAK,EACb,OAAO,CAAC,UAAU,CACnB,CAAA;QAED,MAAM,cAAc,GAAG,MAAM,OAAO,CAAC,YAAY,EAAiB,CAAA;QAClE,MAAM,EAAE,OAAO,EAAE,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC,QAAQ,EAAE,cAAc,CAAC,CAAA;QAC/D,IAAI,CAAC,OAAO,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE;YAC/B,MAAM,IAAI,YAAY,CAAC,kBAAkB,EAAE,GAAG,CAAC,CAAA;SAChD;QACD,OAAO,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAA;IACpC,CAAC,CAAA;IACD,OAAO,QAAQ,CAAA;AACjB,CAAC,CAAA"}
@@ -0,0 +1,6 @@
1
+ export * from './create-delete-endpoint.js';
2
+ export * from './create-get-collection-endpoint.js';
3
+ export * from './create-get-entity-endpoint.js';
4
+ export * from './create-patch-endpoint.js';
5
+ export * from './create-post-endpoint.js';
6
+ //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/endpoint-generators/index.ts"],"names":[],"mappings":"AAAA,cAAc,0BAA0B,CAAA;AACxC,cAAc,kCAAkC,CAAA;AAChD,cAAc,8BAA8B,CAAA;AAC5C,cAAc,yBAAyB,CAAA;AACvC,cAAc,wBAAwB,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/endpoint-generators/index.ts"],"names":[],"mappings":"AAAA,cAAc,6BAA6B,CAAA;AAC3C,cAAc,qCAAqC,CAAA;AACnD,cAAc,iCAAiC,CAAA;AAC/C,cAAc,4BAA4B,CAAA;AAC1C,cAAc,2BAA2B,CAAA"}
@@ -0,0 +1,6 @@
1
+ export * from './create-delete-endpoint.js';
2
+ export * from './create-get-collection-endpoint.js';
3
+ export * from './create-get-entity-endpoint.js';
4
+ export * from './create-patch-endpoint.js';
5
+ export * from './create-post-endpoint.js';
6
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/endpoint-generators/index.ts"],"names":[],"mappings":"AAAA,cAAc,6BAA6B,CAAA;AAC3C,cAAc,qCAAqC,CAAA;AACnD,cAAc,iCAAiC,CAAA;AAC/C,cAAc,4BAA4B,CAAA;AAC1C,cAAc,2BAA2B,CAAA"}
@@ -0,0 +1,23 @@
1
+ import { addStore, InMemoryStore, User } from '@furystack/core';
2
+ import { DefaultSession } from '../models/default-session.js';
3
+ import '@furystack/repository';
4
+ import '../helpers';
5
+ import { getRepository } from '@furystack/repository';
6
+ export class MockClass {
7
+ }
8
+ export const setupContext = (i) => {
9
+ addStore(i, new InMemoryStore({
10
+ model: MockClass,
11
+ primaryKey: 'id',
12
+ }))
13
+ .addStore(new InMemoryStore({
14
+ model: User,
15
+ primaryKey: 'username',
16
+ }))
17
+ .addStore(new InMemoryStore({
18
+ model: DefaultSession,
19
+ primaryKey: 'sessionId',
20
+ }));
21
+ getRepository(i).createDataSet(MockClass, 'id');
22
+ };
23
+ //# sourceMappingURL=utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.js","sourceRoot":"","sources":["../../src/endpoint-generators/utils.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,QAAQ,EAAE,aAAa,EAAE,IAAI,EAAE,MAAM,iBAAiB,CAAA;AAC/D,OAAO,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAA;AAC7D,OAAO,uBAAuB,CAAA;AAC9B,OAAO,YAAY,CAAA;AACnB,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAA;AAErD,MAAM,OAAO,SAAS;CAGrB;AAED,MAAM,CAAC,MAAM,YAAY,GAAG,CAAC,CAAW,EAAE,EAAE;IAC1C,QAAQ,CACN,CAAC,EACD,IAAI,aAAa,CAAC;QAChB,KAAK,EAAE,SAAS;QAChB,UAAU,EAAE,IAAI;KACjB,CAAC,CACH;SACE,QAAQ,CACP,IAAI,aAAa,CAAC;QAChB,KAAK,EAAE,IAAI;QACX,UAAU,EAAE,UAAU;KACvB,CAAC,CACH;SACA,QAAQ,CACP,IAAI,aAAa,CAAC;QAChB,KAAK,EAAE,cAAc;QACrB,UAAU,EAAE,WAAW;KACxB,CAAC,CACH,CAAA;IACH,aAAa,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC,SAAS,EAAE,IAAI,CAAC,CAAA;AACjD,CAAC,CAAA"}
@@ -1,10 +1,10 @@
1
1
  import type { User } from '@furystack/core';
2
2
  import type { Injector } from '@furystack/inject';
3
- import { HttpAuthenticationSettings } from './http-authentication-settings';
3
+ import { HttpAuthenticationSettings } from './http-authentication-settings.js';
4
4
  import type { RestApi } from '@furystack/rest';
5
- import type { ImplementApiOptions } from './api-manager';
6
- import type { DefaultSession } from './models/default-session';
7
- import type { StaticServerOptions } from './static-server-manager';
5
+ import type { ImplementApiOptions } from './api-manager.js';
6
+ import type { DefaultSession } from './models/default-session.js';
7
+ import type { StaticServerOptions } from './static-server-manager.js';
8
8
  /**
9
9
  * Sets up the @furystack/rest-service with the provided settings
10
10
  * @param api The API implementation details
@@ -0,0 +1 @@
1
+ {"version":3,"file":"helpers.d.ts","sourceRoot":"","sources":["../src/helpers.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,iBAAiB,CAAA;AAC3C,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAA;AACjD,OAAO,EAAE,0BAA0B,EAAE,MAAM,mCAAmC,CAAA;AAC9E,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,iBAAiB,CAAA;AAC9C,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAA;AAE3D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAA;AACjE,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAA;AAGrE;;;;GAIG;AACH,eAAO,MAAM,cAAc,mEACoC,CAAA;AAE/D;;;;;GAKG;AACH,eAAO,MAAM,qBAAqB,kEACtB,QAAQ,sFAE+F,CAAA;AAEnH;;;;;;GAMG;AACH,eAAO,MAAM,cAAc,YAAa;IAAE,QAAQ,EAAE,QAAQ,CAAA;CAAE,GAAG,mBAAmB,kBAGnF,CAAA"}
package/esm/helpers.js ADDED
@@ -0,0 +1,28 @@
1
+ import { HttpAuthenticationSettings } from './http-authentication-settings.js';
2
+ import { ApiManager } from './api-manager.js';
3
+ import { StaticServerManager } from './static-server-manager.js';
4
+ /**
5
+ * Sets up the @furystack/rest-service with the provided settings
6
+ * @param api The API implementation details
7
+ * @returns a promise that resolves when the API is added to the server
8
+ */
9
+ export const useRestService = async (api) => await api.injector.getInstance(ApiManager).addApi({ ...api });
10
+ /**
11
+ * Sets up the HTTP Authentication
12
+ * @param injector The Injector instance
13
+ * @param settings Settings for HTTP Authentication
14
+ * @returns void
15
+ */
16
+ export const useHttpAuthentication = (injector, settings) => injector.setExplicitInstance({ ...new HttpAuthenticationSettings(), ...settings }, HttpAuthenticationSettings);
17
+ /**
18
+ * Sets up a static file server
19
+ * @param options The settings for the static file server
20
+ * @param options.injector The Injector instance
21
+ * @param options.settings Settings for the static file server
22
+ * @returns a promise that resolves when the server is ready
23
+ */
24
+ export const useStaticFiles = (options) => {
25
+ const { injector, ...settings } = options;
26
+ return injector.getInstance(StaticServerManager).addStaticSite(settings);
27
+ };
28
+ //# sourceMappingURL=helpers.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"helpers.js","sourceRoot":"","sources":["../src/helpers.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,0BAA0B,EAAE,MAAM,mCAAmC,CAAA;AAG9E,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAA;AAG7C,OAAO,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAA;AAEhE;;;;GAIG;AACH,MAAM,CAAC,MAAM,cAAc,GAAG,KAAK,EAAqB,GAA2B,EAAE,EAAE,CACrF,MAAM,GAAG,CAAC,QAAQ,CAAC,WAAW,CAAC,UAAU,CAAC,CAAC,MAAM,CAAC,EAAE,GAAG,GAAG,EAAE,CAAC,CAAA;AAE/D;;;;;GAKG;AACH,MAAM,CAAC,MAAM,qBAAqB,GAAG,CACnC,QAAkB,EAClB,QAA+D,EAC/D,EAAE,CAAC,QAAQ,CAAC,mBAAmB,CAAC,EAAE,GAAG,IAAI,0BAA0B,EAAE,EAAE,GAAG,QAAQ,EAAE,EAAE,0BAA0B,CAAC,CAAA;AAEnH;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,OAAqD,EAAE,EAAE;IACtF,MAAM,EAAE,QAAQ,EAAE,GAAG,QAAQ,EAAE,GAAG,OAAO,CAAA;IACzC,OAAO,QAAQ,CAAC,WAAW,CAAC,mBAAmB,CAAC,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAA;AAC1E,CAAC,CAAA"}
@@ -1,7 +1,7 @@
1
1
  import type { PhysicalStore, StoreManager } from '@furystack/core';
2
2
  import { User } from '@furystack/core';
3
3
  import type { Constructable } from '@furystack/inject';
4
- import { DefaultSession } from './models/default-session';
4
+ import { DefaultSession } from './models/default-session.js';
5
5
  /**
6
6
  * Authentication settings object for FuryStack HTTP Api
7
7
  */
@@ -1 +1 @@
1
- {"version":3,"file":"http-authentication-settings.d.ts","sourceRoot":"","sources":["../src/http-authentication-settings.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAA;AAClE,OAAO,EAAE,IAAI,EAAE,MAAM,iBAAiB,CAAA;AACtC,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAA;AAEtD,OAAO,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAA;AAEzD;;GAEG;AACH,qBACa,0BAA0B,CAAC,KAAK,SAAS,IAAI,EAAE,QAAQ,SAAS,cAAc;IAClF,KAAK,EAAE,aAAa,CAAC,KAAK,CAAC,CAA+B;IAE1D,YAAY,EAAE,CAAC,YAAY,EAAE,YAAY,KAAK,aAAa,CAAC,KAAK,EAAE,MAAM,KAAK,CAAC,CACzB;IAEtD,eAAe,EAAE,CAAC,YAAY,EAAE,YAAY,KAAK,aAAa,CAAC,QAAQ,EAAE,MAAM,QAAQ,CAAC,CACI;IAE5F,UAAU,SAAQ;IAClB,eAAe,UAAO;CAC9B"}
1
+ {"version":3,"file":"http-authentication-settings.d.ts","sourceRoot":"","sources":["../src/http-authentication-settings.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAA;AAClE,OAAO,EAAE,IAAI,EAAE,MAAM,iBAAiB,CAAA;AACtC,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAA;AAEtD,OAAO,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAA;AAE5D;;GAEG;AACH,qBACa,0BAA0B,CAAC,KAAK,SAAS,IAAI,EAAE,QAAQ,SAAS,cAAc;IAClF,KAAK,EAAE,aAAa,CAAC,KAAK,CAAC,CAA+B;IAE1D,YAAY,EAAE,CAAC,YAAY,EAAE,YAAY,KAAK,aAAa,CAAC,KAAK,EAAE,MAAM,KAAK,CAAC,CACzB;IAEtD,eAAe,EAAE,CAAC,YAAY,EAAE,YAAY,KAAK,aAAa,CAAC,QAAQ,EAAE,MAAM,QAAQ,CAAC,CACI;IAE5F,UAAU,SAAQ;IAClB,eAAe,UAAO;CAC9B"}
@@ -0,0 +1,26 @@
1
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
2
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
3
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
4
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
5
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
6
+ };
7
+ import { User } from '@furystack/core';
8
+ import { Injectable } from '@furystack/inject';
9
+ import { DefaultSession } from './models/default-session.js';
10
+ /**
11
+ * Authentication settings object for FuryStack HTTP Api
12
+ */
13
+ let HttpAuthenticationSettings = class HttpAuthenticationSettings {
14
+ constructor() {
15
+ this.model = User;
16
+ this.getUserStore = (sm) => sm.getStoreFor(User, 'username');
17
+ this.getSessionStore = (sm) => sm.getStoreFor(DefaultSession, 'sessionId');
18
+ this.cookieName = 'fss';
19
+ this.enableBasicAuth = true;
20
+ }
21
+ };
22
+ HttpAuthenticationSettings = __decorate([
23
+ Injectable({ lifetime: 'singleton' })
24
+ ], HttpAuthenticationSettings);
25
+ export { HttpAuthenticationSettings };
26
+ //# sourceMappingURL=http-authentication-settings.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"http-authentication-settings.js","sourceRoot":"","sources":["../src/http-authentication-settings.ts"],"names":[],"mappings":";;;;;;AACA,OAAO,EAAE,IAAI,EAAE,MAAM,iBAAiB,CAAA;AAEtC,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAA;AAC9C,OAAO,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAA;AAE5D;;GAEG;AAEH,IAAa,0BAA0B,GAAvC,MAAa,0BAA0B;IAAvC;QACS,UAAK,GAAyB,IAA4B,CAAA;QAE1D,iBAAY,GAAsE,CAAC,EAAE,EAAE,EAAE,CAC9F,EAAE,CAAC,WAAW,CAAqB,IAAW,EAAE,UAAU,CAAC,CAAA;QAEtD,oBAAe,GAA4E,CAAC,EAAE,EAAE,EAAE,CACvG,EAAE,CAAC,WAAW,CAAC,cAAc,EAAE,WAAW,CAAuD,CAAA;QAE5F,eAAU,GAAG,KAAK,CAAA;QAClB,oBAAe,GAAG,IAAI,CAAA;IAC/B,CAAC;CAAA,CAAA;AAXY,0BAA0B;IADtC,UAAU,CAAC,EAAE,QAAQ,EAAE,WAAW,EAAE,CAAC;GACzB,0BAA0B,CAWtC;SAXY,0BAA0B"}
@@ -1,7 +1,7 @@
1
1
  import type { IncomingMessage, ServerResponse } from 'http';
2
2
  import type { User } from '@furystack/core';
3
- import { HttpAuthenticationSettings } from './http-authentication-settings';
4
- import type { DefaultSession } from './models/default-session';
3
+ import { HttpAuthenticationSettings } from './http-authentication-settings.js';
4
+ import type { DefaultSession } from './models/default-session.js';
5
5
  /**
6
6
  * Injectable UserContext for FuryStack HTTP Api
7
7
  */
@@ -1 +1 @@
1
- {"version":3,"file":"http-user-context.d.ts","sourceRoot":"","sources":["../src/http-user-context.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,MAAM,CAAA;AAC3D,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,iBAAiB,CAAA;AAG3C,OAAO,EAAE,0BAA0B,EAAE,MAAM,gCAAgC,CAAA;AAC3E,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAA;AAI9D;;GAEG;AACH,qBACa,eAAe;IACnB,YAAY,8HAA4D;IAExE,eAAe,sKAA+D;IAErF,OAAO,CAAC,aAAa,CAOpB;IAED,OAAO,CAAC,cAAc,CAOrB;IAED,OAAO,CAAC,IAAI,CAAC,CAAM;IAEnB;;;OAGG;IACU,eAAe,CAAC,OAAO,EAAE,eAAe;IASrD;;;;;OAKG;IACU,YAAY,CAAC,OAAO,EAAE,eAAe,EAAE,GAAG,KAAK,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,OAAO,CAAC;IAUzF;;;;;OAKG;IACU,gBAAgB,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM;IAanD,cAAc,CAAC,OAAO,EAAE,eAAe;IAQ7C,uBAAuB,CAAC,OAAO,EAAE,eAAe,GAAG,MAAM,GAAG,IAAI;IAkB1D,mBAAmB,CAAC,OAAO,EAAE,eAAe,GAAG,OAAO,CAAC,IAAI,CAAC;IAuBzE;;;;;OAKG;IACU,WAAW,CAAC,IAAI,EAAE,IAAI,EAAE,cAAc,EAAE,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC;IAQtE,YAAY,CAAC,OAAO,EAAE,eAAe,EAAE,QAAQ,EAAE,cAAc;IAW5E,SACgB,cAAc,EAAG,0BAA0B,CAAC,IAAI,EAAE,cAAc,CAAC,CAAA;IAGjF,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAe;IAG5C,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAwB;CACvD"}
1
+ {"version":3,"file":"http-user-context.d.ts","sourceRoot":"","sources":["../src/http-user-context.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,MAAM,CAAA;AAC3D,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,iBAAiB,CAAA;AAG3C,OAAO,EAAE,0BAA0B,EAAE,MAAM,mCAAmC,CAAA;AAC9E,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAA;AAIjE;;GAEG;AACH,qBACa,eAAe;IACnB,YAAY,8HAA4D;IAExE,eAAe,sKAA+D;IAErF,OAAO,CAAC,aAAa,CAOpB;IAED,OAAO,CAAC,cAAc,CAOrB;IAED,OAAO,CAAC,IAAI,CAAC,CAAM;IAEnB;;;OAGG;IACU,eAAe,CAAC,OAAO,EAAE,eAAe;IASrD;;;;;OAKG;IACU,YAAY,CAAC,OAAO,EAAE,eAAe,EAAE,GAAG,KAAK,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,OAAO,CAAC;IAUzF;;;;;OAKG;IACU,gBAAgB,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM;IAanD,cAAc,CAAC,OAAO,EAAE,eAAe;IAQ7C,uBAAuB,CAAC,OAAO,EAAE,eAAe,GAAG,MAAM,GAAG,IAAI;IAkB1D,mBAAmB,CAAC,OAAO,EAAE,eAAe,GAAG,OAAO,CAAC,IAAI,CAAC;IAuBzE;;;;;OAKG;IACU,WAAW,CAAC,IAAI,EAAE,IAAI,EAAE,cAAc,EAAE,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC;IAQtE,YAAY,CAAC,OAAO,EAAE,eAAe,EAAE,QAAQ,EAAE,cAAc;IAW5E,SACgB,cAAc,EAAG,0BAA0B,CAAC,IAAI,EAAE,cAAc,CAAC,CAAA;IAGjF,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAe;IAG5C,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAwB;CACvD"}
@@ -0,0 +1,168 @@
1
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
2
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
3
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
4
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
5
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
6
+ };
7
+ var __metadata = (this && this.__metadata) || function (k, v) {
8
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
9
+ };
10
+ import { StoreManager } from '@furystack/core';
11
+ import { Injectable, Injected } from '@furystack/inject';
12
+ import { HttpAuthenticationSettings } from './http-authentication-settings.js';
13
+ import { PasswordAuthenticator, UnauthenticatedError } from '@furystack/security';
14
+ import { randomBytes } from 'crypto';
15
+ /**
16
+ * Injectable UserContext for FuryStack HTTP Api
17
+ */
18
+ let HttpUserContext = class HttpUserContext {
19
+ constructor() {
20
+ this.getUserStore = () => this.authentication.getUserStore(this.storeManager);
21
+ this.getSessionStore = () => this.authentication.getSessionStore(this.storeManager);
22
+ this.getUserByName = async (userName) => {
23
+ const userStore = this.getUserStore();
24
+ const users = await userStore.find({ filter: { username: { $eq: userName } }, top: 2 });
25
+ if (users.length !== 1) {
26
+ throw new UnauthenticatedError();
27
+ }
28
+ return users[0];
29
+ };
30
+ this.getSessionById = async (sessionId) => {
31
+ const sessionStore = this.getSessionStore();
32
+ const sessions = await sessionStore.find({ filter: { sessionId: { $eq: sessionId } }, top: 2 });
33
+ if (sessions.length !== 1) {
34
+ throw new UnauthenticatedError();
35
+ }
36
+ return sessions[0];
37
+ };
38
+ }
39
+ /**
40
+ * @param request The request to be authenticated
41
+ * @returns if the current user is authenticated
42
+ */
43
+ async isAuthenticated(request) {
44
+ try {
45
+ const currentUser = await this.getCurrentUser(request);
46
+ return currentUser !== null;
47
+ }
48
+ catch (error) {
49
+ return false;
50
+ }
51
+ }
52
+ /**
53
+ * Returns if the current user can be authorized with ALL of the specified roles
54
+ * @param request The request to be authenticated
55
+ * @param roles The list of roles to authorize
56
+ * @returns a boolean value that indicates if the user is authenticated
57
+ */
58
+ async isAuthorized(request, ...roles) {
59
+ const currentUser = await this.getCurrentUser(request);
60
+ for (const role of roles) {
61
+ if (!currentUser || !currentUser.roles.some((c) => c === role)) {
62
+ return false;
63
+ }
64
+ }
65
+ return true;
66
+ }
67
+ /**
68
+ * Checks if the system contains a user with the provided name and password, throws an error otherwise
69
+ * @param userName The username
70
+ * @param password The password
71
+ * @returns the authenticated User
72
+ */
73
+ async authenticateUser(userName, password) {
74
+ const result = await this.authenticator.checkPasswordForUser(userName, password);
75
+ if (!result.isValid) {
76
+ throw new UnauthenticatedError();
77
+ }
78
+ const user = await this.getUserByName(userName);
79
+ if (!user) {
80
+ throw new UnauthenticatedError();
81
+ }
82
+ return user;
83
+ }
84
+ async getCurrentUser(request) {
85
+ if (!this.user) {
86
+ this.user = await this.authenticateRequest(request);
87
+ return this.user;
88
+ }
89
+ return this.user;
90
+ }
91
+ getSessionIdFromRequest(request) {
92
+ if (request.headers.cookie) {
93
+ const cookies = request.headers.cookie
94
+ .toString()
95
+ .split(';')
96
+ .filter((val) => val.length > 0)
97
+ .map((val) => {
98
+ const [name, value] = val.split('=');
99
+ return { name: name.trim(), value: value.trim() };
100
+ });
101
+ const sessionCookie = cookies.find((c) => c.name === this.authentication.cookieName);
102
+ if (sessionCookie) {
103
+ return sessionCookie.value;
104
+ }
105
+ }
106
+ return null;
107
+ }
108
+ async authenticateRequest(request) {
109
+ // Basic auth
110
+ if (this.authentication.enableBasicAuth && request.headers.authorization) {
111
+ const authData = Buffer.from(request.headers.authorization.toString().split(' ')[1], 'base64');
112
+ const [userName, password] = authData.toString().split(':');
113
+ return await this.authenticateUser(userName, password);
114
+ }
115
+ // Cookie auth
116
+ const sessionId = this.getSessionIdFromRequest(request);
117
+ if (sessionId) {
118
+ const session = await this.getSessionById(sessionId);
119
+ if (session) {
120
+ const user = await this.getUserByName(session.username);
121
+ if (user) {
122
+ return user;
123
+ }
124
+ }
125
+ }
126
+ throw new UnauthenticatedError();
127
+ }
128
+ /**
129
+ * Creates and sets up a cookie-based session for the provided user
130
+ * @param user The user to create a session for
131
+ * @param serverResponse A serverResponse to set the cookie
132
+ * @returns the current User
133
+ */
134
+ async cookieLogin(user, serverResponse) {
135
+ const sessionId = randomBytes(32).toString('hex');
136
+ await this.getSessionStore().add({ sessionId, username: user.username });
137
+ serverResponse.setHeader('Set-Cookie', `${this.authentication.cookieName}=${sessionId}; Path=/; HttpOnly`);
138
+ this.user = user;
139
+ return user;
140
+ }
141
+ async cookieLogout(request, response) {
142
+ const sessionId = this.getSessionIdFromRequest(request);
143
+ response.setHeader('Set-Cookie', `${this.authentication.cookieName}=; Path=/; HttpOnly`);
144
+ this.user = undefined;
145
+ if (sessionId) {
146
+ const sessionStore = this.getSessionStore();
147
+ const sessions = await sessionStore.find({ filter: { sessionId: { $eq: sessionId } } });
148
+ await this.getSessionStore().remove(...sessions.map((s) => s[sessionStore.primaryKey]));
149
+ }
150
+ }
151
+ };
152
+ __decorate([
153
+ Injected(HttpAuthenticationSettings),
154
+ __metadata("design:type", HttpAuthenticationSettings)
155
+ ], HttpUserContext.prototype, "authentication", void 0);
156
+ __decorate([
157
+ Injected(StoreManager),
158
+ __metadata("design:type", StoreManager)
159
+ ], HttpUserContext.prototype, "storeManager", void 0);
160
+ __decorate([
161
+ Injected(PasswordAuthenticator),
162
+ __metadata("design:type", PasswordAuthenticator)
163
+ ], HttpUserContext.prototype, "authenticator", void 0);
164
+ HttpUserContext = __decorate([
165
+ Injectable({ lifetime: 'scoped' })
166
+ ], HttpUserContext);
167
+ export { HttpUserContext };
168
+ //# sourceMappingURL=http-user-context.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"http-user-context.js","sourceRoot":"","sources":["../src/http-user-context.ts"],"names":[],"mappings":";;;;;;;;;AAEA,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAA;AAC9C,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAA;AACxD,OAAO,EAAE,0BAA0B,EAAE,MAAM,mCAAmC,CAAA;AAE9E,OAAO,EAAE,qBAAqB,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAA;AACjF,OAAO,EAAE,WAAW,EAAE,MAAM,QAAQ,CAAA;AAEpC;;GAEG;AAEH,IAAa,eAAe,GAA5B,MAAa,eAAe;IAA5B;QACS,iBAAY,GAAG,GAAG,EAAE,CAAC,IAAI,CAAC,cAAc,CAAC,YAAY,CAAC,IAAI,CAAC,YAAY,CAAC,CAAA;QAExE,oBAAe,GAAG,GAAG,EAAE,CAAC,IAAI,CAAC,cAAc,CAAC,eAAe,CAAC,IAAI,CAAC,YAAY,CAAC,CAAA;QAE7E,kBAAa,GAAG,KAAK,EAAE,QAAgB,EAAE,EAAE;YACjD,MAAM,SAAS,GAAG,IAAI,CAAC,YAAY,EAAE,CAAA;YACrC,MAAM,KAAK,GAAG,MAAM,SAAS,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,EAAE,QAAQ,EAAE,EAAE,GAAG,EAAE,QAAQ,EAAE,EAAE,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC,CAAA;YACvF,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE;gBACtB,MAAM,IAAI,oBAAoB,EAAE,CAAA;aACjC;YACD,OAAO,KAAK,CAAC,CAAC,CAAC,CAAA;QACjB,CAAC,CAAA;QAEO,mBAAc,GAAG,KAAK,EAAE,SAAiB,EAAE,EAAE;YACnD,MAAM,YAAY,GAAG,IAAI,CAAC,eAAe,EAAE,CAAA;YAC3C,MAAM,QAAQ,GAAG,MAAM,YAAY,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,EAAE,SAAS,EAAE,EAAE,GAAG,EAAE,SAAS,EAAE,EAAE,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC,CAAA;YAC/F,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE;gBACzB,MAAM,IAAI,oBAAoB,EAAE,CAAA;aACjC;YACD,OAAO,QAAQ,CAAC,CAAC,CAAC,CAAA;QACpB,CAAC,CAAA;IAsIH,CAAC;IAlIC;;;OAGG;IACI,KAAK,CAAC,eAAe,CAAC,OAAwB;QACnD,IAAI;YACF,MAAM,WAAW,GAAG,MAAM,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,CAAA;YACtD,OAAO,WAAW,KAAK,IAAI,CAAA;SAC5B;QAAC,OAAO,KAAK,EAAE;YACd,OAAO,KAAK,CAAA;SACb;IACH,CAAC;IAED;;;;;OAKG;IACI,KAAK,CAAC,YAAY,CAAC,OAAwB,EAAE,GAAG,KAAe;QACpE,MAAM,WAAW,GAAG,MAAM,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,CAAA;QACtD,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE;YACxB,IAAI,CAAC,WAAW,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,IAAI,CAAC,EAAE;gBAC9D,OAAO,KAAK,CAAA;aACb;SACF;QACD,OAAO,IAAI,CAAA;IACb,CAAC;IAED;;;;;OAKG;IACI,KAAK,CAAC,gBAAgB,CAAC,QAAgB,EAAE,QAAgB;QAC9D,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,aAAa,CAAC,oBAAoB,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAA;QAEhF,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE;YACnB,MAAM,IAAI,oBAAoB,EAAE,CAAA;SACjC;QACD,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAA;QAC/C,IAAI,CAAC,IAAI,EAAE;YACT,MAAM,IAAI,oBAAoB,EAAE,CAAA;SACjC;QACD,OAAO,IAAI,CAAA;IACb,CAAC;IAEM,KAAK,CAAC,cAAc,CAAC,OAAwB;QAClD,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE;YACd,IAAI,CAAC,IAAI,GAAG,MAAM,IAAI,CAAC,mBAAmB,CAAC,OAAO,CAAC,CAAA;YACnD,OAAO,IAAI,CAAC,IAAI,CAAA;SACjB;QACD,OAAO,IAAI,CAAC,IAAI,CAAA;IAClB,CAAC;IAEM,uBAAuB,CAAC,OAAwB;QACrD,IAAI,OAAO,CAAC,OAAO,CAAC,MAAM,EAAE;YAC1B,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,MAAM;iBACnC,QAAQ,EAAE;iBACV,KAAK,CAAC,GAAG,CAAC;iBACV,MAAM,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC;iBAC/B,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE;gBACX,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC,GAAG,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAA;gBACpC,OAAO,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,EAAE,KAAK,EAAE,KAAK,CAAC,IAAI,EAAE,EAAE,CAAA;YACnD,CAAC,CAAC,CAAA;YACJ,MAAM,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,cAAc,CAAC,UAAU,CAAC,CAAA;YACpF,IAAI,aAAa,EAAE;gBACjB,OAAO,aAAa,CAAC,KAAK,CAAA;aAC3B;SACF;QACD,OAAO,IAAI,CAAA;IACb,CAAC;IAEM,KAAK,CAAC,mBAAmB,CAAC,OAAwB;QACvD,aAAa;QACb,IAAI,IAAI,CAAC,cAAc,CAAC,eAAe,IAAI,OAAO,CAAC,OAAO,CAAC,aAAa,EAAE;YACxE,MAAM,QAAQ,GAAG,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,aAAa,CAAC,QAAQ,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAA;YAC9F,MAAM,CAAC,QAAQ,EAAE,QAAQ,CAAC,GAAG,QAAQ,CAAC,QAAQ,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAA;YAC3D,OAAO,MAAM,IAAI,CAAC,gBAAgB,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAA;SACvD;QAED,cAAc;QACd,MAAM,SAAS,GAAG,IAAI,CAAC,uBAAuB,CAAC,OAAO,CAAC,CAAA;QACvD,IAAI,SAAS,EAAE;YACb,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,cAAc,CAAC,SAAS,CAAC,CAAA;YACpD,IAAI,OAAO,EAAE;gBACX,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAA;gBACvD,IAAI,IAAI,EAAE;oBACR,OAAO,IAAI,CAAA;iBACZ;aACF;SACF;QAED,MAAM,IAAI,oBAAoB,EAAE,CAAA;IAClC,CAAC;IAED;;;;;OAKG;IACI,KAAK,CAAC,WAAW,CAAC,IAAU,EAAE,cAA8B;QACjE,MAAM,SAAS,GAAG,WAAW,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAA;QACjD,MAAM,IAAI,CAAC,eAAe,EAAE,CAAC,GAAG,CAAC,EAAE,SAAS,EAAE,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAA;QACxE,cAAc,CAAC,SAAS,CAAC,YAAY,EAAE,GAAG,IAAI,CAAC,cAAc,CAAC,UAAU,IAAI,SAAS,oBAAoB,CAAC,CAAA;QAC1G,IAAI,CAAC,IAAI,GAAG,IAAI,CAAA;QAChB,OAAO,IAAI,CAAA;IACb,CAAC;IAEM,KAAK,CAAC,YAAY,CAAC,OAAwB,EAAE,QAAwB;QAC1E,MAAM,SAAS,GAAG,IAAI,CAAC,uBAAuB,CAAC,OAAO,CAAC,CAAA;QACvD,QAAQ,CAAC,SAAS,CAAC,YAAY,EAAE,GAAG,IAAI,CAAC,cAAc,CAAC,UAAU,qBAAqB,CAAC,CAAA;QACxF,IAAI,CAAC,IAAI,GAAG,SAAS,CAAA;QACrB,IAAI,SAAS,EAAE;YACb,MAAM,YAAY,GAAG,IAAI,CAAC,eAAe,EAAE,CAAA;YAC3C,MAAM,QAAQ,GAAG,MAAM,YAAY,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,EAAE,SAAS,EAAE,EAAE,GAAG,EAAE,SAAS,EAAE,EAAE,EAAE,CAAC,CAAA;YACvF,MAAM,IAAI,CAAC,eAAe,EAAE,CAAC,MAAM,CAAC,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,YAAY,CAAC,UAAU,CAAC,CAAC,CAAC,CAAA;SACxF;IACH,CAAC;CAUF,CAAA;AAPiB;IADf,QAAQ,CAAC,0BAA0B,CAAC;8BACJ,0BAA0B;uDAAsB;AAGhE;IADhB,QAAQ,CAAC,YAAY,CAAC;8BACS,YAAY;qDAAA;AAG3B;IADhB,QAAQ,CAAC,qBAAqB,CAAC;8BACC,qBAAqB;sDAAA;AA1J3C,eAAe;IAD3B,UAAU,CAAC,EAAE,QAAQ,EAAE,QAAQ,EAAE,CAAC;GACtB,eAAe,CA2J3B;SA3JY,eAAe"}
@@ -0,0 +1,11 @@
1
+ import http from 'http';
2
+ import { Utils } from './utils.js';
3
+ http.IncomingMessage.prototype.readPostBody = async function () {
4
+ const utils = new Utils();
5
+ return await utils.readPostBody(this);
6
+ };
7
+ http.IncomingMessage.prototype.readPostBodyRaw = async function () {
8
+ const utils = new Utils();
9
+ return await utils.readPostBodyRaw(this);
10
+ };
11
+ //# sourceMappingURL=incoming-message-extensions.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"incoming-message-extensions.js","sourceRoot":"","sources":["../src/incoming-message-extensions.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,MAAM,CAAA;AACvB,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAA;AAUlC,IAAI,CAAC,eAAe,CAAC,SAAS,CAAC,YAAY,GAAG,KAAK;IACjD,MAAM,KAAK,GAAG,IAAI,KAAK,EAAE,CAAA;IACzB,OAAO,MAAM,KAAK,CAAC,YAAY,CAAI,IAAI,CAAC,CAAA;AAC1C,CAAC,CAAA;AAED,IAAI,CAAC,eAAe,CAAC,SAAS,CAAC,eAAe,GAAG,KAAK;IACpD,MAAM,KAAK,GAAG,IAAI,KAAK,EAAE,CAAA;IACzB,OAAO,MAAM,KAAK,CAAC,eAAe,CAAC,IAAI,CAAC,CAAA;AAC1C,CAAC,CAAA"}
package/esm/index.d.ts ADDED
@@ -0,0 +1,19 @@
1
+ export * from './helpers.js';
2
+ export * from './api-manager.js';
3
+ export * from './actions/index.js';
4
+ export * from './authenticate.js';
5
+ export * from './authorize.js';
6
+ export * from './http-authentication-settings.js';
7
+ export * from './http-user-context.js';
8
+ export * from './incoming-message-extensions.js';
9
+ export * from './server-manager.js';
10
+ export * from './server-response-extensions.js';
11
+ export * from './utils.js';
12
+ export * from './models/index.js';
13
+ export * from './endpoint-generators/index.js';
14
+ export * from './schema-validator/index.js';
15
+ export * from './request-action-implementation.js';
16
+ export * from './validate.js';
17
+ export * from './mime-types.js';
18
+ export * from './static-server-manager.js';
19
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,cAAc,CAAA;AAC5B,cAAc,kBAAkB,CAAA;AAChC,cAAc,oBAAoB,CAAA;AAClC,cAAc,mBAAmB,CAAA;AACjC,cAAc,gBAAgB,CAAA;AAC9B,cAAc,mCAAmC,CAAA;AACjD,cAAc,wBAAwB,CAAA;AACtC,cAAc,kCAAkC,CAAA;AAChD,cAAc,qBAAqB,CAAA;AACnC,cAAc,iCAAiC,CAAA;AAC/C,cAAc,YAAY,CAAA;AAC1B,cAAc,mBAAmB,CAAA;AACjC,cAAc,gCAAgC,CAAA;AAC9C,cAAc,6BAA6B,CAAA;AAC3C,cAAc,oCAAoC,CAAA;AAClD,cAAc,eAAe,CAAA;AAC7B,cAAc,iBAAiB,CAAA;AAC/B,cAAc,4BAA4B,CAAA"}
package/esm/index.js ADDED
@@ -0,0 +1,19 @@
1
+ export * from './helpers.js';
2
+ export * from './api-manager.js';
3
+ export * from './actions/index.js';
4
+ export * from './authenticate.js';
5
+ export * from './authorize.js';
6
+ export * from './http-authentication-settings.js';
7
+ export * from './http-user-context.js';
8
+ export * from './incoming-message-extensions.js';
9
+ export * from './server-manager.js';
10
+ export * from './server-response-extensions.js';
11
+ export * from './utils.js';
12
+ export * from './models/index.js';
13
+ export * from './endpoint-generators/index.js';
14
+ export * from './schema-validator/index.js';
15
+ export * from './request-action-implementation.js';
16
+ export * from './validate.js';
17
+ export * from './mime-types.js';
18
+ export * from './static-server-manager.js';
19
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,cAAc,CAAA;AAC5B,cAAc,kBAAkB,CAAA;AAChC,cAAc,oBAAoB,CAAA;AAClC,cAAc,mBAAmB,CAAA;AACjC,cAAc,gBAAgB,CAAA;AAC9B,cAAc,mCAAmC,CAAA;AACjD,cAAc,wBAAwB,CAAA;AACtC,cAAc,kCAAkC,CAAA;AAChD,cAAc,qBAAqB,CAAA;AACnC,cAAc,iCAAiC,CAAA;AAC/C,cAAc,YAAY,CAAA;AAC1B,cAAc,mBAAmB,CAAA;AACjC,cAAc,gCAAgC,CAAA;AAC9C,cAAc,6BAA6B,CAAA;AAC3C,cAAc,oCAAoC,CAAA;AAClD,cAAc,eAAe,CAAA;AAC7B,cAAc,iBAAiB,CAAA;AAC/B,cAAc,4BAA4B,CAAA"}