@furystack/rest-service 12.3.5 → 14.0.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 (252) hide show
  1. package/CHANGELOG.md +55 -0
  2. package/README.md +47 -28
  3. package/esm/actions/get-current-user.spec.js +10 -6
  4. package/esm/actions/get-current-user.spec.js.map +1 -1
  5. package/esm/actions/index.d.ts +0 -1
  6. package/esm/actions/index.d.ts.map +1 -1
  7. package/esm/actions/index.js +0 -1
  8. package/esm/actions/index.js.map +1 -1
  9. package/esm/actions/is-authenticated.spec.js +10 -6
  10. package/esm/actions/is-authenticated.spec.js.map +1 -1
  11. package/esm/actions/logout-action.spec.js +11 -9
  12. package/esm/actions/logout-action.spec.js.map +1 -1
  13. package/esm/actions/logout.js +1 -1
  14. package/esm/actions/logout.js.map +1 -1
  15. package/esm/actions/password-login-action.js +1 -1
  16. package/esm/actions/password-login-action.js.map +1 -1
  17. package/esm/actions/password-login-action.spec.js +23 -28
  18. package/esm/actions/password-login-action.spec.js.map +1 -1
  19. package/esm/authenticate.js +1 -1
  20. package/esm/authenticate.js.map +1 -1
  21. package/esm/authenticate.spec.js +41 -33
  22. package/esm/authenticate.spec.js.map +1 -1
  23. package/esm/authorize.spec.js +34 -29
  24. package/esm/authorize.spec.js.map +1 -1
  25. package/esm/endpoint-generators/create-delete-endpoint.d.ts +6 -11
  26. package/esm/endpoint-generators/create-delete-endpoint.d.ts.map +1 -1
  27. package/esm/endpoint-generators/create-delete-endpoint.js +7 -11
  28. package/esm/endpoint-generators/create-delete-endpoint.js.map +1 -1
  29. package/esm/endpoint-generators/create-delete-endpoint.spec.js +14 -21
  30. package/esm/endpoint-generators/create-delete-endpoint.spec.js.map +1 -1
  31. package/esm/endpoint-generators/create-get-collection-endpoint.d.ts +11 -11
  32. package/esm/endpoint-generators/create-get-collection-endpoint.d.ts.map +1 -1
  33. package/esm/endpoint-generators/create-get-collection-endpoint.js +13 -12
  34. package/esm/endpoint-generators/create-get-collection-endpoint.js.map +1 -1
  35. package/esm/endpoint-generators/create-get-collection-endpoint.spec.js +43 -70
  36. package/esm/endpoint-generators/create-get-collection-endpoint.spec.js.map +1 -1
  37. package/esm/endpoint-generators/create-get-entity-endpoint.d.ts +6 -11
  38. package/esm/endpoint-generators/create-get-entity-endpoint.d.ts.map +1 -1
  39. package/esm/endpoint-generators/create-get-entity-endpoint.js +7 -11
  40. package/esm/endpoint-generators/create-get-entity-endpoint.js.map +1 -1
  41. package/esm/endpoint-generators/create-get-entity-endpoint.spec.js +16 -33
  42. package/esm/endpoint-generators/create-get-entity-endpoint.spec.js.map +1 -1
  43. package/esm/endpoint-generators/create-get-openapi-document-action.d.ts +1 -15
  44. package/esm/endpoint-generators/create-get-openapi-document-action.d.ts.map +1 -1
  45. package/esm/endpoint-generators/create-get-openapi-document-action.js +1 -24
  46. package/esm/endpoint-generators/create-get-openapi-document-action.js.map +1 -1
  47. package/esm/endpoint-generators/create-get-schema-action.d.ts +1 -1
  48. package/esm/endpoint-generators/create-get-schema-action.d.ts.map +1 -1
  49. package/esm/endpoint-generators/create-get-schema-action.js.map +1 -1
  50. package/esm/endpoint-generators/create-patch-endpoint.d.ts +7 -13
  51. package/esm/endpoint-generators/create-patch-endpoint.d.ts.map +1 -1
  52. package/esm/endpoint-generators/create-patch-endpoint.js +8 -13
  53. package/esm/endpoint-generators/create-patch-endpoint.js.map +1 -1
  54. package/esm/endpoint-generators/create-patch-endpoint.spec.js +10 -17
  55. package/esm/endpoint-generators/create-patch-endpoint.spec.js.map +1 -1
  56. package/esm/endpoint-generators/create-post-endpoint.d.ts +7 -13
  57. package/esm/endpoint-generators/create-post-endpoint.d.ts.map +1 -1
  58. package/esm/endpoint-generators/create-post-endpoint.js +8 -13
  59. package/esm/endpoint-generators/create-post-endpoint.js.map +1 -1
  60. package/esm/endpoint-generators/create-post-endpoint.spec.js +41 -14
  61. package/esm/endpoint-generators/create-post-endpoint.spec.js.map +1 -1
  62. package/esm/endpoint-generators/utils.d.ts +17 -2
  63. package/esm/endpoint-generators/utils.d.ts.map +1 -1
  64. package/esm/endpoint-generators/utils.js +33 -20
  65. package/esm/endpoint-generators/utils.js.map +1 -1
  66. package/esm/endpoint-generators/with-schema-and-openapi-action.d.ts +0 -2
  67. package/esm/endpoint-generators/with-schema-and-openapi-action.d.ts.map +1 -1
  68. package/esm/get-schema-from-api.d.ts +1 -1
  69. package/esm/get-schema-from-api.d.ts.map +1 -1
  70. package/esm/get-schema-from-api.spec.js.map +1 -1
  71. package/esm/helpers.d.ts +53 -87
  72. package/esm/helpers.d.ts.map +1 -1
  73. package/esm/helpers.js +91 -92
  74. package/esm/helpers.js.map +1 -1
  75. package/esm/helpers.spec.d.ts +2 -1
  76. package/esm/helpers.spec.d.ts.map +1 -1
  77. package/esm/helpers.spec.js +41 -38
  78. package/esm/helpers.spec.js.map +1 -1
  79. package/esm/http-authentication-settings.d.ts +35 -12
  80. package/esm/http-authentication-settings.d.ts.map +1 -1
  81. package/esm/http-authentication-settings.js +21 -29
  82. package/esm/http-authentication-settings.js.map +1 -1
  83. package/esm/http-server-pool.d.ts +64 -0
  84. package/esm/http-server-pool.d.ts.map +1 -0
  85. package/esm/http-server-pool.js +95 -0
  86. package/esm/http-server-pool.js.map +1 -0
  87. package/esm/http-server-pool.spec.d.ts +2 -0
  88. package/esm/http-server-pool.spec.d.ts.map +1 -0
  89. package/esm/http-server-pool.spec.js +193 -0
  90. package/esm/http-server-pool.spec.js.map +1 -0
  91. package/esm/http-user-context.d.ts +31 -44
  92. package/esm/http-user-context.d.ts.map +1 -1
  93. package/esm/http-user-context.js +76 -95
  94. package/esm/http-user-context.js.map +1 -1
  95. package/esm/http-user-context.spec.d.ts +8 -2
  96. package/esm/http-user-context.spec.d.ts.map +1 -1
  97. package/esm/http-user-context.spec.js +189 -337
  98. package/esm/http-user-context.spec.js.map +1 -1
  99. package/esm/index.d.ts +6 -4
  100. package/esm/index.d.ts.map +1 -1
  101. package/esm/index.js +6 -4
  102. package/esm/index.js.map +1 -1
  103. package/esm/login-response-strategy.d.ts +11 -10
  104. package/esm/login-response-strategy.d.ts.map +1 -1
  105. package/esm/login-response-strategy.js +7 -6
  106. package/esm/login-response-strategy.js.map +1 -1
  107. package/esm/login-response-strategy.spec.js +25 -29
  108. package/esm/login-response-strategy.spec.js.map +1 -1
  109. package/esm/openapi/generate-openapi-document.d.ts +0 -8
  110. package/esm/openapi/generate-openapi-document.d.ts.map +1 -1
  111. package/esm/openapi/generate-openapi-document.js +0 -2
  112. package/esm/openapi/generate-openapi-document.js.map +1 -1
  113. package/esm/proxy-manager.spec.js +152 -176
  114. package/esm/proxy-manager.spec.js.map +1 -1
  115. package/esm/proxy-runtime.d.ts +27 -0
  116. package/esm/proxy-runtime.d.ts.map +1 -0
  117. package/esm/proxy-runtime.js +45 -0
  118. package/esm/proxy-runtime.js.map +1 -0
  119. package/esm/proxy-runtime.spec.d.ts +2 -0
  120. package/esm/proxy-runtime.spec.d.ts.map +1 -0
  121. package/esm/proxy-runtime.spec.js +39 -0
  122. package/esm/proxy-runtime.spec.js.map +1 -0
  123. package/esm/rest-api-runtime.d.ts +76 -0
  124. package/esm/rest-api-runtime.d.ts.map +1 -0
  125. package/esm/rest-api-runtime.js +131 -0
  126. package/esm/rest-api-runtime.js.map +1 -0
  127. package/esm/rest-api-runtime.spec.d.ts +2 -0
  128. package/esm/rest-api-runtime.spec.d.ts.map +1 -0
  129. package/esm/rest-api-runtime.spec.js +58 -0
  130. package/esm/rest-api-runtime.spec.js.map +1 -0
  131. package/esm/rest-service.integration.spec.d.ts +1 -1
  132. package/esm/rest-service.integration.spec.d.ts.map +1 -1
  133. package/esm/rest-service.integration.spec.js +60 -82
  134. package/esm/rest-service.integration.spec.js.map +1 -1
  135. package/esm/rest.integration.test.js +26 -84
  136. package/esm/rest.integration.test.js.map +1 -1
  137. package/esm/server-telemetry.d.ts +57 -0
  138. package/esm/server-telemetry.d.ts.map +1 -0
  139. package/esm/server-telemetry.js +26 -0
  140. package/esm/server-telemetry.js.map +1 -0
  141. package/esm/server-telemetry.spec.d.ts +2 -0
  142. package/esm/server-telemetry.spec.d.ts.map +1 -0
  143. package/esm/server-telemetry.spec.js +52 -0
  144. package/esm/server-telemetry.spec.js.map +1 -0
  145. package/esm/static-server-manager.spec.js +60 -125
  146. package/esm/static-server-manager.spec.js.map +1 -1
  147. package/esm/static-site-runtime.d.ts +21 -0
  148. package/esm/static-site-runtime.d.ts.map +1 -0
  149. package/esm/static-site-runtime.js +48 -0
  150. package/esm/static-site-runtime.js.map +1 -0
  151. package/esm/static-site-runtime.spec.d.ts +2 -0
  152. package/esm/static-site-runtime.spec.d.ts.map +1 -0
  153. package/esm/static-site-runtime.spec.js +30 -0
  154. package/esm/static-site-runtime.spec.js.map +1 -0
  155. package/esm/user-store.d.ts +39 -0
  156. package/esm/user-store.d.ts.map +1 -0
  157. package/esm/user-store.js +62 -0
  158. package/esm/user-store.js.map +1 -0
  159. package/esm/user-store.spec.d.ts +2 -0
  160. package/esm/user-store.spec.d.ts.map +1 -0
  161. package/esm/user-store.spec.js +72 -0
  162. package/esm/user-store.spec.js.map +1 -0
  163. package/esm/validate.integration.spec.js +26 -83
  164. package/esm/validate.integration.spec.js.map +1 -1
  165. package/package.json +8 -8
  166. package/src/actions/get-current-user.spec.ts +11 -10
  167. package/src/actions/index.ts +0 -1
  168. package/src/actions/is-authenticated.spec.ts +12 -7
  169. package/src/actions/logout-action.spec.ts +12 -12
  170. package/src/actions/logout.ts +1 -1
  171. package/src/actions/password-login-action.spec.ts +30 -30
  172. package/src/actions/password-login-action.ts +1 -1
  173. package/src/authenticate.spec.ts +45 -51
  174. package/src/authenticate.ts +1 -1
  175. package/src/authorize.spec.ts +37 -39
  176. package/src/endpoint-generators/create-delete-endpoint.spec.ts +16 -24
  177. package/src/endpoint-generators/create-delete-endpoint.ts +11 -17
  178. package/src/endpoint-generators/create-get-collection-endpoint.spec.ts +45 -78
  179. package/src/endpoint-generators/create-get-collection-endpoint.ts +17 -19
  180. package/src/endpoint-generators/create-get-entity-endpoint.spec.ts +17 -33
  181. package/src/endpoint-generators/create-get-entity-endpoint.ts +11 -17
  182. package/src/endpoint-generators/create-get-openapi-document-action.ts +2 -38
  183. package/src/endpoint-generators/create-get-schema-action.ts +1 -1
  184. package/src/endpoint-generators/create-patch-endpoint.spec.ts +11 -18
  185. package/src/endpoint-generators/create-patch-endpoint.ts +12 -23
  186. package/src/endpoint-generators/create-post-endpoint.spec.ts +45 -14
  187. package/src/endpoint-generators/create-post-endpoint.ts +13 -23
  188. package/src/endpoint-generators/utils.ts +36 -28
  189. package/src/endpoint-generators/with-schema-and-openapi-action.ts +0 -3
  190. package/src/get-schema-from-api.spec.ts +1 -1
  191. package/src/get-schema-from-api.ts +1 -1
  192. package/src/helpers.spec.ts +51 -41
  193. package/src/helpers.ts +140 -109
  194. package/src/http-authentication-settings.ts +51 -25
  195. package/src/http-server-pool.spec.ts +220 -0
  196. package/src/http-server-pool.ts +169 -0
  197. package/src/http-user-context.spec.ts +203 -383
  198. package/src/http-user-context.ts +114 -91
  199. package/src/index.ts +6 -4
  200. package/src/login-response-strategy.spec.ts +32 -31
  201. package/src/login-response-strategy.ts +13 -12
  202. package/src/openapi/generate-openapi-document.ts +0 -3
  203. package/src/proxy-manager.spec.ts +152 -182
  204. package/src/proxy-runtime.spec.ts +50 -0
  205. package/src/proxy-runtime.ts +75 -0
  206. package/src/rest-api-runtime.spec.ts +77 -0
  207. package/src/rest-api-runtime.ts +204 -0
  208. package/src/rest-service.integration.spec.ts +68 -87
  209. package/src/rest.integration.test.ts +27 -87
  210. package/src/server-telemetry.spec.ts +56 -0
  211. package/src/server-telemetry.ts +51 -0
  212. package/src/static-server-manager.spec.ts +63 -151
  213. package/src/static-site-runtime.spec.ts +39 -0
  214. package/src/static-site-runtime.ts +75 -0
  215. package/src/user-store.spec.ts +86 -0
  216. package/src/user-store.ts +68 -0
  217. package/src/validate.integration.spec.ts +39 -97
  218. package/esm/actions/login-action.spec.d.ts +0 -2
  219. package/esm/actions/login-action.spec.d.ts.map +0 -1
  220. package/esm/actions/login-action.spec.js +0 -34
  221. package/esm/actions/login-action.spec.js.map +0 -1
  222. package/esm/actions/login.d.ts +0 -19
  223. package/esm/actions/login.d.ts.map +0 -1
  224. package/esm/actions/login.js +0 -27
  225. package/esm/actions/login.js.map +0 -1
  226. package/esm/api-manager.d.ts +0 -104
  227. package/esm/api-manager.d.ts.map +0 -1
  228. package/esm/api-manager.js +0 -180
  229. package/esm/api-manager.js.map +0 -1
  230. package/esm/proxy-manager.d.ts +0 -53
  231. package/esm/proxy-manager.d.ts.map +0 -1
  232. package/esm/proxy-manager.js +0 -84
  233. package/esm/proxy-manager.js.map +0 -1
  234. package/esm/server-manager.d.ts +0 -48
  235. package/esm/server-manager.d.ts.map +0 -1
  236. package/esm/server-manager.js +0 -100
  237. package/esm/server-manager.js.map +0 -1
  238. package/esm/static-server-manager.d.ts +0 -19
  239. package/esm/static-server-manager.d.ts.map +0 -1
  240. package/esm/static-server-manager.js +0 -65
  241. package/esm/static-server-manager.js.map +0 -1
  242. package/esm/swagger/generate-swagger-json.spec.d.ts +0 -2
  243. package/esm/swagger/generate-swagger-json.spec.d.ts.map +0 -1
  244. package/esm/swagger/generate-swagger-json.spec.js +0 -215
  245. package/esm/swagger/generate-swagger-json.spec.js.map +0 -1
  246. package/src/actions/login-action.spec.ts +0 -42
  247. package/src/actions/login.ts +0 -32
  248. package/src/api-manager.ts +0 -308
  249. package/src/proxy-manager.ts +0 -102
  250. package/src/server-manager.ts +0 -135
  251. package/src/static-server-manager.ts +0 -90
  252. package/src/swagger/generate-swagger-json.spec.ts +0 -250
@@ -1,38 +1,31 @@
1
1
  import { getPort } from '@furystack/core/port-generator';
2
- import { Injector } from '@furystack/inject';
3
- import { getDataSetFor } from '@furystack/repository';
2
+ import { createInjector } from '@furystack/inject';
4
3
  import { usingAsync } from '@furystack/utils';
5
4
  import { describe, expect, it } from 'vitest';
6
5
  import { useRestService } from '../helpers.js';
7
6
  import { createPatchEndpoint } from './create-patch-endpoint.js';
8
- import { MockClass, setupContext } from './utils.js';
7
+ import { MockDataSet, setupContext } from './utils.js';
9
8
  describe('createPatchEndpoint', () => {
10
- it('Should update the entity and report the success', async () => {
11
- await usingAsync(new Injector(), async (i) => {
9
+ it('updates the entity and responds 200', async () => {
10
+ await usingAsync(createInjector(), async (i) => {
12
11
  setupContext(i);
13
12
  const port = getPort();
14
13
  await useRestService({
15
14
  injector: i,
16
15
  root: '/api',
17
16
  port,
18
- api: {
19
- PATCH: {
20
- '/:id': createPatchEndpoint({ model: MockClass, primaryKey: 'id' }),
21
- },
22
- },
17
+ api: { PATCH: { '/:id': createPatchEndpoint(MockDataSet) } },
23
18
  });
24
- await getDataSetFor(i, MockClass, 'id').add(i, { id: 'mock', value: 'mock' });
25
- const countBeforeDelete = await getDataSetFor(i, MockClass, 'id').count(i);
26
- expect(countBeforeDelete).toBe(1);
19
+ const dataSet = i.get(MockDataSet);
20
+ await dataSet.add(i, { id: 'mock', value: 'mock' });
21
+ expect(await dataSet.count(i)).toBe(1);
27
22
  const response = await fetch(`http://127.0.0.1:${port}/api/mock`, {
28
23
  method: 'PATCH',
29
24
  body: JSON.stringify({ value: 'updated' }),
30
25
  });
31
26
  expect(response.status).toBe(200);
32
- const body = (await response.json());
33
- expect(body).toEqual({});
34
- const updated = await getDataSetFor(i, MockClass, 'id').get(i, 'mock');
35
- expect(updated?.value).toBe('updated');
27
+ expect(await response.json()).toEqual({});
28
+ expect((await dataSet.get(i, 'mock'))?.value).toBe('updated');
36
29
  });
37
30
  });
38
31
  });
@@ -1 +1 @@
1
- {"version":3,"file":"create-patch-endpoint.spec.js","sourceRoot":"","sources":["../../src/endpoint-generators/create-patch-endpoint.spec.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,gCAAgC,CAAA;AACxD,OAAO,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAA;AAC5C,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAA;AAErD,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAA;AAC7C,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAA;AAC7C,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAA;AAC9C,OAAO,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAA;AAChE,OAAO,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,YAAY,CAAA;AAEpD,QAAQ,CAAC,qBAAqB,EAAE,GAAG,EAAE;IACnC,EAAE,CAAC,iDAAiD,EAAE,KAAK,IAAI,EAAE;QAC/D,MAAM,UAAU,CAAC,IAAI,QAAQ,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE;YAC3C,YAAY,CAAC,CAAC,CAAC,CAAA;YACf,MAAM,IAAI,GAAG,OAAO,EAAE,CAAA;YACtB,MAAM,cAAc,CAAwD;gBAC1E,QAAQ,EAAE,CAAC;gBACX,IAAI,EAAE,MAAM;gBACZ,IAAI;gBACJ,GAAG,EAAE;oBACH,KAAK,EAAE;wBACL,MAAM,EAAE,mBAAmB,CAAC,EAAE,KAAK,EAAE,SAAS,EAAE,UAAU,EAAE,IAAI,EAAE,CAAC;qBACpE;iBACF;aACF,CAAC,CAAA;YACF,MAAM,aAAa,CAAC,CAAC,EAAE,SAAS,EAAE,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CAAA;YAE7E,MAAM,iBAAiB,GAAG,MAAM,aAAa,CAAC,CAAC,EAAE,SAAS,EAAE,IAAI,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAA;YAC1E,MAAM,CAAC,iBAAiB,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;YAEjC,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,oBAAoB,IAAI,WAAW,EAAE;gBAChE,MAAM,EAAE,OAAO;gBACf,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC;aAC3C,CAAC,CAAA;YACF,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;YACjC,MAAM,IAAI,GAAG,CAAC,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAsB,CAAA;YACzD,MAAM,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,CAAA;YACxB,MAAM,OAAO,GAAG,MAAM,aAAa,CAAC,CAAC,EAAE,SAAS,EAAE,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,MAAM,CAAC,CAAA;YACtE,MAAM,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAA;QACxC,CAAC,CAAC,CAAA;IACJ,CAAC,CAAC,CAAA;AACJ,CAAC,CAAC,CAAA"}
1
+ {"version":3,"file":"create-patch-endpoint.spec.js","sourceRoot":"","sources":["../../src/endpoint-generators/create-patch-endpoint.spec.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,gCAAgC,CAAA;AACxD,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAA;AAElD,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAA;AAC7C,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAA;AAC7C,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAA;AAC9C,OAAO,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAA;AAEhE,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,YAAY,CAAA;AAEtD,QAAQ,CAAC,qBAAqB,EAAE,GAAG,EAAE;IACnC,EAAE,CAAC,qCAAqC,EAAE,KAAK,IAAI,EAAE;QACnD,MAAM,UAAU,CAAC,cAAc,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE;YAC7C,YAAY,CAAC,CAAC,CAAC,CAAA;YACf,MAAM,IAAI,GAAG,OAAO,EAAE,CAAA;YACtB,MAAM,cAAc,CAAwD;gBAC1E,QAAQ,EAAE,CAAC;gBACX,IAAI,EAAE,MAAM;gBACZ,IAAI;gBACJ,GAAG,EAAE,EAAE,KAAK,EAAE,EAAE,MAAM,EAAE,mBAAmB,CAAC,WAAW,CAAC,EAAE,EAAE;aAC7D,CAAC,CAAA;YACF,MAAM,OAAO,GAAG,CAAC,CAAC,GAAG,CAAC,WAAW,CAAC,CAAA;YAClC,MAAM,OAAO,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CAAA;YACnD,MAAM,CAAC,MAAM,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;YAEtC,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,oBAAoB,IAAI,WAAW,EAAE;gBAChE,MAAM,EAAE,OAAO;gBACf,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC;aAC3C,CAAC,CAAA;YACF,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;YACjC,MAAM,CAAC,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,CAAA;YACzC,MAAM,CAAC,CAAC,MAAM,OAAO,CAAC,GAAG,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAA;QAC/D,CAAC,CAAC,CAAA;IACJ,CAAC,CAAC,CAAA;AACJ,CAAC,CAAC,CAAA"}
@@ -1,17 +1,11 @@
1
- import type { Constructable } from '@furystack/inject';
2
- import type { PostEndpoint } from '@furystack/rest';
3
- import '@furystack/repository';
4
- import type { RequestAction } from '../request-action-implementation.js';
5
1
  import type { WithOptionalId } from '@furystack/core';
2
+ import type { DataSetToken } from '@furystack/repository';
3
+ import type { PostEndpoint } from '@furystack/rest';
4
+ import { type RequestAction } from '../request-action-implementation.js';
6
5
  /**
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
6
+ * Creates a POST endpoint that inserts a new entity into the DataSet
7
+ * resolved from `dataSet`. Returns `201 Created` on success; throws a
8
+ * `RequestError(404)` when the underlying store returns no created entity.
12
9
  */
13
- export declare const createPostEndpoint: <T extends object, TPrimaryKey extends keyof T, TWritableData = WithOptionalId<T, TPrimaryKey>>(options: {
14
- model: Constructable<T>;
15
- primaryKey: TPrimaryKey;
16
- }) => RequestAction<PostEndpoint<T, TPrimaryKey, TWritableData>>;
10
+ export declare const createPostEndpoint: <T extends object, TPrimaryKey extends keyof T, TWritableData = WithOptionalId<T, TPrimaryKey>>(dataSet: DataSetToken<T, TPrimaryKey, TWritableData>) => RequestAction<PostEndpoint<T, TPrimaryKey, TWritableData>>;
17
11
  //# sourceMappingURL=create-post-endpoint.d.ts.map
@@ -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,KAAK,EAAE,aAAa,EAAE,MAAM,qCAAqC,CAAA;AAExE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAA;AAGrD;;;;;;GAMG;AACH,eAAO,MAAM,kBAAkB,GAC7B,CAAC,SAAS,MAAM,EAChB,WAAW,SAAS,MAAM,CAAC,EAC3B,aAAa,GAAG,cAAc,CAAC,CAAC,EAAE,WAAW,CAAC,EAC9C,SAAS;IACT,KAAK,EAAE,aAAa,CAAC,CAAC,CAAC,CAAA;IACvB,UAAU,EAAE,WAAW,CAAA;CACxB,+DAeA,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,cAAc,EAAE,MAAM,iBAAiB,CAAA;AACrD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAA;AACzD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAA;AAGnD,OAAO,EAAc,KAAK,aAAa,EAAE,MAAM,qCAAqC,CAAA;AAEpF;;;;GAIG;AACH,eAAO,MAAM,kBAAkB,GAC7B,CAAC,SAAS,MAAM,EAChB,WAAW,SAAS,MAAM,CAAC,EAC3B,aAAa,GAAG,cAAc,CAAC,CAAC,EAAE,WAAW,CAAC,EAE9C,SAAS,YAAY,CAAC,CAAC,EAAE,WAAW,EAAE,aAAa,CAAC,KACnD,aAAa,CAAC,YAAY,CAAC,CAAC,EAAE,WAAW,EAAE,aAAa,CAAC,CAU3D,CAAA"}
@@ -1,25 +1,20 @@
1
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
2
  import { readPostBody } from '../read-post-body.js';
3
+ import { JsonResult } from '../request-action-implementation.js';
6
4
  /**
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
5
+ * Creates a POST endpoint that inserts a new entity into the DataSet
6
+ * resolved from `dataSet`. Returns `201 Created` on success; throws a
7
+ * `RequestError(404)` when the underlying store returns no created entity.
12
8
  */
13
- export const createPostEndpoint = (options) => {
14
- const endpoint = async ({ injector, request }) => {
15
- const dataSet = getRepository(injector).getDataSetFor(options.model, options.primaryKey);
9
+ export const createPostEndpoint = (dataSet) => {
10
+ return async ({ injector, request }) => {
11
+ const ds = injector.get(dataSet);
16
12
  const entityToCreate = await readPostBody(request);
17
- const { created } = await dataSet.add(injector, entityToCreate);
13
+ const { created } = await ds.add(injector, entityToCreate);
18
14
  if (!created || !created.length) {
19
15
  throw new RequestError('Entity not found', 404);
20
16
  }
21
17
  return JsonResult(created[0], 201);
22
18
  };
23
- return endpoint;
24
19
  };
25
20
  //# sourceMappingURL=create-post-endpoint.js.map
@@ -1 +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;AAE9B,OAAO,EAAE,UAAU,EAAE,MAAM,qCAAqC,CAAA;AAEhE,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAA;AACrD,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAA;AACnD;;;;;;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,YAAY,CAAgB,OAAO,CAAC,CAAA;QACjE,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,CAAC;YAChC,MAAM,IAAI,YAAY,CAAC,kBAAkB,EAAE,GAAG,CAAC,CAAA;QACjD,CAAC;QACD,OAAO,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAA;IACpC,CAAC,CAAA;IACD,OAAO,QAAQ,CAAA;AACjB,CAAC,CAAA"}
1
+ {"version":3,"file":"create-post-endpoint.js","sourceRoot":"","sources":["../../src/endpoint-generators/create-post-endpoint.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAA;AAC9C,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAA;AACnD,OAAO,EAAE,UAAU,EAAsB,MAAM,qCAAqC,CAAA;AAEpF;;;;GAIG;AACH,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAKhC,OAAoD,EACQ,EAAE;IAC9D,OAAO,KAAK,EAAE,EAAE,QAAQ,EAAE,OAAO,EAAE,EAAE,EAAE;QACrC,MAAM,EAAE,GAAG,QAAQ,CAAC,GAAG,CAAC,OAAO,CAAC,CAAA;QAChC,MAAM,cAAc,GAAG,MAAM,YAAY,CAAgB,OAAO,CAAC,CAAA;QACjE,MAAM,EAAE,OAAO,EAAE,GAAG,MAAM,EAAE,CAAC,GAAG,CAAC,QAAQ,EAAE,cAAc,CAAC,CAAA;QAC1D,IAAI,CAAC,OAAO,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC;YAChC,MAAM,IAAI,YAAY,CAAC,kBAAkB,EAAE,GAAG,CAAC,CAAA;QACjD,CAAC;QACD,OAAO,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAA;IACpC,CAAC,CAAA;AACH,CAAC,CAAA"}
@@ -1,25 +1,20 @@
1
1
  import { getPort } from '@furystack/core/port-generator';
2
- import { Injector } from '@furystack/inject';
3
- import { getDataSetFor } from '@furystack/repository';
2
+ import { createInjector } from '@furystack/inject';
4
3
  import { usingAsync } from '@furystack/utils';
5
4
  import { describe, expect, it } from 'vitest';
6
5
  import { useRestService } from '../helpers.js';
7
6
  import { createPostEndpoint } from './create-post-endpoint.js';
8
- import { MockClass, setupContext } from './utils.js';
7
+ import { MockDataSet, MockStore, setupContext } from './utils.js';
9
8
  describe('createPostEndpoint', () => {
10
- it('Should create the entity and report the success', async () => {
11
- await usingAsync(new Injector(), async (i) => {
9
+ it('creates the entity and responds 201', async () => {
10
+ await usingAsync(createInjector(), async (i) => {
12
11
  setupContext(i);
13
12
  const port = getPort();
14
13
  await useRestService({
15
14
  injector: i,
16
15
  root: '/api',
17
16
  port,
18
- api: {
19
- POST: {
20
- '/': createPostEndpoint({ model: MockClass, primaryKey: 'id' }),
21
- },
22
- },
17
+ api: { POST: { '/': createPostEndpoint(MockDataSet) } },
23
18
  });
24
19
  const entityToPost = { id: 'mock', value: 'posted' };
25
20
  const response = await fetch(`http://127.0.0.1:${port}/api`, {
@@ -27,10 +22,42 @@ describe('createPostEndpoint', () => {
27
22
  body: JSON.stringify(entityToPost),
28
23
  });
29
24
  expect(response.status).toBe(201);
30
- const body = (await response.json());
31
- expect(body).toEqual(entityToPost);
32
- const posted = await getDataSetFor(i, MockClass, 'id').get(i, entityToPost.id);
33
- expect(posted?.value).toBe('posted');
25
+ expect(await response.json()).toEqual(entityToPost);
26
+ expect((await i.get(MockDataSet).get(i, entityToPost.id))?.value).toBe('posted');
27
+ });
28
+ });
29
+ it('responds 404 when the underlying data set returned no created entity', async () => {
30
+ await usingAsync(createInjector(), async (i) => {
31
+ setupContext(i);
32
+ // Swap the dataset binding for a stub whose `add` comes back empty --
33
+ // this is the only way to exercise the `!created.length` branch.
34
+ i.bind(MockDataSet, () => ({ add: async () => ({ created: [] }) }));
35
+ const port = getPort();
36
+ await useRestService({
37
+ injector: i,
38
+ root: '/api',
39
+ port,
40
+ api: { POST: { '/': createPostEndpoint(MockDataSet) } },
41
+ });
42
+ const response = await fetch(`http://127.0.0.1:${port}/api`, {
43
+ method: 'POST',
44
+ body: JSON.stringify({ id: 'mock', value: 'x' }),
45
+ });
46
+ expect(response.status).toBe(404);
47
+ expect(await response.json()).toEqual({ message: 'Entity not found' });
48
+ });
49
+ });
50
+ });
51
+ describe('endpoint-generators/utils', () => {
52
+ it('MockStore throws from its default factory when setupContext was not called', async () => {
53
+ await usingAsync(createInjector(), async (i) => {
54
+ expect(() => i.get(MockStore)).toThrow(/MockStore is not configured/);
55
+ });
56
+ });
57
+ it('setupContext binds MockStore in-memory so the default factory is bypassed', async () => {
58
+ await usingAsync(createInjector(), async (i) => {
59
+ setupContext(i);
60
+ expect(i.get(MockStore)).toBeDefined();
34
61
  });
35
62
  });
36
63
  });
@@ -1 +1 @@
1
- {"version":3,"file":"create-post-endpoint.spec.js","sourceRoot":"","sources":["../../src/endpoint-generators/create-post-endpoint.spec.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,gCAAgC,CAAA;AACxD,OAAO,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAA;AAC5C,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAA;AAErD,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAA;AAC7C,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAA;AAC7C,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAA;AAC9C,OAAO,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAA;AAC9D,OAAO,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,YAAY,CAAA;AAEpD,QAAQ,CAAC,oBAAoB,EAAE,GAAG,EAAE;IAClC,EAAE,CAAC,iDAAiD,EAAE,KAAK,IAAI,EAAE;QAC/D,MAAM,UAAU,CAAC,IAAI,QAAQ,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE;YAC3C,YAAY,CAAC,CAAC,CAAC,CAAA;YACf,MAAM,IAAI,GAAG,OAAO,EAAE,CAAA;YACtB,MAAM,cAAc,CAAmD;gBACrE,QAAQ,EAAE,CAAC;gBACX,IAAI,EAAE,MAAM;gBACZ,IAAI;gBACJ,GAAG,EAAE;oBACH,IAAI,EAAE;wBACJ,GAAG,EAAE,kBAAkB,CAAC,EAAE,KAAK,EAAE,SAAS,EAAE,UAAU,EAAE,IAAI,EAAE,CAAC;qBAChE;iBACF;aACF,CAAC,CAAA;YACF,MAAM,YAAY,GAAG,EAAE,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAA;YACpD,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,oBAAoB,IAAI,MAAM,EAAE;gBAC3D,MAAM,EAAE,MAAM;gBACd,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,YAAY,CAAC;aACnC,CAAC,CAAA;YACF,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;YACjC,MAAM,IAAI,GAAG,CAAC,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAkC,CAAA;YACrE,MAAM,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,YAAY,CAAC,CAAA;YAClC,MAAM,MAAM,GAAG,MAAM,aAAa,CAAC,CAAC,EAAE,SAAS,EAAE,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,YAAY,CAAC,EAAE,CAAC,CAAA;YAC9E,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAA;QACtC,CAAC,CAAC,CAAA;IACJ,CAAC,CAAC,CAAA;AACJ,CAAC,CAAC,CAAA"}
1
+ {"version":3,"file":"create-post-endpoint.spec.js","sourceRoot":"","sources":["../../src/endpoint-generators/create-post-endpoint.spec.ts"],"names":[],"mappings":"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"}
@@ -1,9 +1,24 @@
1
1
  import type { Injector } from '@furystack/inject';
2
- import '@furystack/repository';
3
- import '../helpers.js';
2
+ /**
3
+ * Mock entity used by endpoint-generator specs.
4
+ */
4
5
  export declare class MockClass {
5
6
  id: string;
6
7
  value: string;
7
8
  }
9
+ /**
10
+ * Store token for {@link MockClass}. The default factory throws so each spec
11
+ * explicitly opts into an in-memory backing via `setupContext`.
12
+ */
13
+ export declare const MockStore: import("@furystack/core").StoreToken<MockClass, "id">;
14
+ /**
15
+ * Data set token over {@link MockStore}.
16
+ */
17
+ export declare const MockDataSet: import("@furystack/repository").DataSetToken<MockClass, "id", import("@furystack/core").WithOptionalId<MockClass, "id">>;
18
+ /**
19
+ * Binds in-memory implementations of {@link UserStore}, {@link SessionStore}
20
+ * and {@link MockStore} on the provided injector. Endpoint-generator specs
21
+ * and integration tests call this at setup time.
22
+ */
8
23
  export declare const setupContext: (i: Injector) => void;
9
24
  //# sourceMappingURL=utils.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../src/endpoint-generators/utils.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAA;AAGjD,OAAO,uBAAuB,CAAA;AAC9B,OAAO,eAAe,CAAA;AAGtB,qBAAa,SAAS;IACZ,EAAE,EAAE,MAAM,CAAA;IACV,KAAK,EAAE,MAAM,CAAA;CACtB;AAED,eAAO,MAAM,YAAY,GAAI,GAAG,QAAQ,SAwBvC,CAAA"}
1
+ {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../src/endpoint-generators/utils.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAA;AAKjD;;GAEG;AACH,qBAAa,SAAS;IACZ,EAAE,EAAE,MAAM,CAAA;IACV,KAAK,EAAE,MAAM,CAAA;CACtB;AAED;;;GAGG;AACH,eAAO,MAAM,SAAS,uDAOpB,CAAA;AAEF;;GAEG;AACH,eAAO,MAAM,WAAW,0HAGtB,CAAA;AAEF;;;;GAIG;AACH,eAAO,MAAM,YAAY,GAAI,GAAG,QAAQ,KAAG,IAI1C,CAAA"}
@@ -1,26 +1,39 @@
1
- import { addStore, InMemoryStore, User } from '@furystack/core';
1
+ import { defineStore, InMemoryStore, User } from '@furystack/core';
2
+ import { defineDataSet } from '@furystack/repository';
2
3
  import { DefaultSession } from '../models/default-session.js';
3
- import '@furystack/repository';
4
- import '../helpers.js';
5
- import { getRepository } from '@furystack/repository';
4
+ import { SessionStore, UserStore } from '../user-store.js';
5
+ /**
6
+ * Mock entity used by endpoint-generator specs.
7
+ */
6
8
  export class MockClass {
7
9
  }
10
+ /**
11
+ * Store token for {@link MockClass}. The default factory throws so each spec
12
+ * explicitly opts into an in-memory backing via `setupContext`.
13
+ */
14
+ export const MockStore = defineStore({
15
+ name: 'test/MockStore',
16
+ model: MockClass,
17
+ primaryKey: 'id',
18
+ factory: () => {
19
+ throw new Error('MockStore is not configured in this injector');
20
+ },
21
+ });
22
+ /**
23
+ * Data set token over {@link MockStore}.
24
+ */
25
+ export const MockDataSet = defineDataSet({
26
+ name: 'test/MockDataSet',
27
+ store: MockStore,
28
+ });
29
+ /**
30
+ * Binds in-memory implementations of {@link UserStore}, {@link SessionStore}
31
+ * and {@link MockStore} on the provided injector. Endpoint-generator specs
32
+ * and integration tests call this at setup time.
33
+ */
8
34
  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)
22
- .createDataSet(MockClass, 'id')
23
- .createDataSet(User, 'username')
24
- .createDataSet(DefaultSession, 'sessionId');
35
+ i.bind(UserStore, () => new InMemoryStore({ model: User, primaryKey: 'username' }));
36
+ i.bind(SessionStore, () => new InMemoryStore({ model: DefaultSession, primaryKey: 'sessionId' }));
37
+ i.bind(MockStore, () => new InMemoryStore({ model: MockClass, primaryKey: 'id' }));
25
38
  };
26
39
  //# sourceMappingURL=utils.js.map
@@ -1 +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,eAAe,CAAA;AACtB,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;SACb,aAAa,CAAC,SAAS,EAAE,IAAI,CAAC;SAC9B,aAAa,CAAC,IAAI,EAAE,UAAU,CAAC;SAC/B,aAAa,CAAC,cAAc,EAAE,WAAW,CAAC,CAAA;AAC/C,CAAC,CAAA"}
1
+ {"version":3,"file":"utils.js","sourceRoot":"","sources":["../../src/endpoint-generators/utils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,aAAa,EAAE,IAAI,EAAE,MAAM,iBAAiB,CAAA;AAElE,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAA;AACrD,OAAO,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAA;AAC7D,OAAO,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAA;AAE1D;;GAEG;AACH,MAAM,OAAO,SAAS;CAGrB;AAED;;;GAGG;AACH,MAAM,CAAC,MAAM,SAAS,GAAG,WAAW,CAAC;IACnC,IAAI,EAAE,gBAAgB;IACtB,KAAK,EAAE,SAAS;IAChB,UAAU,EAAE,IAAI;IAChB,OAAO,EAAE,GAAG,EAAE;QACZ,MAAM,IAAI,KAAK,CAAC,8CAA8C,CAAC,CAAA;IACjE,CAAC;CACF,CAAC,CAAA;AAEF;;GAEG;AACH,MAAM,CAAC,MAAM,WAAW,GAAG,aAAa,CAAC;IACvC,IAAI,EAAE,kBAAkB;IACxB,KAAK,EAAE,SAAS;CACjB,CAAC,CAAA;AAEF;;;;GAIG;AACH,MAAM,CAAC,MAAM,YAAY,GAAG,CAAC,CAAW,EAAQ,EAAE;IAChD,CAAC,CAAC,IAAI,CAAC,SAAS,EAAE,GAAG,EAAE,CAAC,IAAI,aAAa,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,UAAU,EAAE,UAAU,EAAE,CAAC,CAAC,CAAA;IACnF,CAAC,CAAC,IAAI,CAAC,YAAY,EAAE,GAAG,EAAE,CAAC,IAAI,aAAa,CAAC,EAAE,KAAK,EAAE,cAAc,EAAE,UAAU,EAAE,WAAW,EAAE,CAAC,CAAC,CAAA;IACjG,CAAC,CAAC,IAAI,CAAC,SAAS,EAAE,GAAG,EAAE,CAAC,IAAI,aAAa,CAAC,EAAE,KAAK,EAAE,SAAS,EAAE,UAAU,EAAE,IAAI,EAAE,CAAC,CAAC,CAAA;AACpF,CAAC,CAAA"}
@@ -18,6 +18,4 @@ export type WithSchemaAndOpenApiAction<T extends RestApi> = T & {
18
18
  };
19
19
  };
20
20
  };
21
- /** @deprecated Use WithSchemaAndOpenApiAction instead */
22
- export type WithSchemaAndSwaggerAction<T extends RestApi> = WithSchemaAndOpenApiAction<T>;
23
21
  //# sourceMappingURL=with-schema-and-openapi-action.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"with-schema-and-openapi-action.d.ts","sourceRoot":"","sources":["../../src/endpoint-generators/with-schema-and-openapi-action.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,eAAe,EAAE,OAAO,EAAE,MAAM,iBAAiB,CAAA;AAElF;;GAEG;AACH,MAAM,MAAM,0BAA0B,CAAC,CAAC,SAAS,OAAO,IAAI,CAAC,GAAG;IAC9D,GAAG,EAAE;QACH,SAAS,EAAE;YAAE,MAAM,EAAE,iBAAiB,CAAC,CAAC,CAAC,CAAC;YAAC,OAAO,EAAE;gBAAE,MAAM,EAAE,yBAAyB,CAAA;aAAE,CAAA;SAAE,CAAA;QAC3F,eAAe,EAAE;YAAE,MAAM,EAAE,eAAe,CAAC;YAAC,OAAO,EAAE;gBAAE,MAAM,EAAE,kBAAkB,CAAA;aAAE,CAAA;SAAE,CAAA;KACtF,CAAA;CACF,CAAA;AAED,yDAAyD;AACzD,MAAM,MAAM,0BAA0B,CAAC,CAAC,SAAS,OAAO,IAAI,0BAA0B,CAAC,CAAC,CAAC,CAAA"}
1
+ {"version":3,"file":"with-schema-and-openapi-action.d.ts","sourceRoot":"","sources":["../../src/endpoint-generators/with-schema-and-openapi-action.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,eAAe,EAAE,OAAO,EAAE,MAAM,iBAAiB,CAAA;AAElF;;GAEG;AACH,MAAM,MAAM,0BAA0B,CAAC,CAAC,SAAS,OAAO,IAAI,CAAC,GAAG;IAC9D,GAAG,EAAE;QACH,SAAS,EAAE;YAAE,MAAM,EAAE,iBAAiB,CAAC,CAAC,CAAC,CAAC;YAAC,OAAO,EAAE;gBAAE,MAAM,EAAE,yBAAyB,CAAA;aAAE,CAAA;SAAE,CAAA;QAC3F,eAAe,EAAE;YAAE,MAAM,EAAE,eAAe,CAAC;YAAC,OAAO,EAAE;gBAAE,MAAM,EAAE,kBAAkB,CAAA;aAAE,CAAA;SAAE,CAAA;KACtF,CAAA;CACF,CAAA"}
@@ -1,5 +1,5 @@
1
1
  import type { ApiEndpointSchema, RestApi, Schema } from '@furystack/rest';
2
- import type { RestApiImplementation } from './api-manager.js';
2
+ import type { RestApiImplementation } from './rest-api-runtime.js';
3
3
  export declare const defaultSchema: Schema;
4
4
  export declare const getSchemaFromApi: <T extends RestApiImplementation<RestApi>>({ api, name, description, version, }: {
5
5
  api: T;
@@ -1 +1 @@
1
- {"version":3,"file":"get-schema-from-api.d.ts","sourceRoot":"","sources":["../src/get-schema-from-api.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAyB,iBAAiB,EAAU,OAAO,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAA;AACxG,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,kBAAkB,CAAA;AAG7D,eAAO,MAAM,aAAa,EAAE,MA2B3B,CAAA;AAcD,eAAO,MAAM,gBAAgB,GAAI,CAAC,SAAS,qBAAqB,CAAC,OAAO,CAAC,EAAE,sCAKxE;IACD,GAAG,EAAE,CAAC,CAAA;IACN,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,OAAO,CAAC,EAAE,MAAM,CAAA;CACjB,KAAG,iBAuBH,CAAA"}
1
+ {"version":3,"file":"get-schema-from-api.d.ts","sourceRoot":"","sources":["../src/get-schema-from-api.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAyB,iBAAiB,EAAU,OAAO,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAA;AAExG,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,uBAAuB,CAAA;AAElE,eAAO,MAAM,aAAa,EAAE,MA2B3B,CAAA;AAcD,eAAO,MAAM,gBAAgB,GAAI,CAAC,SAAS,qBAAqB,CAAC,OAAO,CAAC,EAAE,sCAKxE;IACD,GAAG,EAAE,CAAC,CAAA;IACN,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,OAAO,CAAC,EAAE,MAAM,CAAA;CACjB,KAAG,iBAuBH,CAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"get-schema-from-api.spec.js","sourceRoot":"","sources":["../src/get-schema-from-api.spec.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAA;AAE7C,OAAO,EAAE,aAAa,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAA;AAC1E,OAAO,EAAE,UAAU,EAAsB,MAAM,oCAAoC,CAAA;AACnF,OAAO,gBAAgB,MAAM,yCAAyC,CAAC,OAAO,IAAI,EAAE,MAAM,EAAE,CAAA;AAC5F,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAA;AAExC,MAAM,aAAa,GAAuB,KAAK,IAAI,EAAE;IACnD,OAAO,UAAU,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAA;AACtC,CAAC,CAAA;AAED,QAAQ,CAAC,kBAAkB,EAAE,GAAG,EAAE;IAChC,EAAE,CAAC,+CAA+C,EAAE,GAAG,EAAE;QACvD,MAAM,GAAG,GAAG;YACV,GAAG,EAAE;gBACH,UAAU,EAAE,aAAa;aAC1B;SAC4C,CAAA;QAE/C,MAAM,MAAM,GAAG,gBAAgB,CAAC;YAC9B,GAAG,EAAE,GAAG;YACR,IAAI,EAAE,UAAU;YAChB,WAAW,EAAE,sBAAsB;YACnC,OAAO,EAAE,OAAO;SACjB,CAAC,CAAA;QACF,MAAM,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC;YACrB,IAAI,EAAE,UAAU;YAChB,WAAW,EAAE,sBAAsB;YACnC,OAAO,EAAE,OAAO;YAChB,SAAS,EAAE;gBACT,GAAG,EAAE;oBACH,UAAU,EAAE;wBACV,eAAe,EAAE,KAAK;wBACtB,IAAI,EAAE,UAAU;wBAChB,MAAM,EAAE,aAAa;wBACrB,UAAU,EAAE,SAAS;qBACtB;iBACF;aACF;SACF,CAAC,CAAA;IACJ,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,uDAAuD,EAAE,GAAG,EAAE;QAC/D,MAAM,GAAG,GAAG;YACV,GAAG,EAAE;gBACH,iBAAiB,EAAE,QAAQ,CAAC;oBAC1B,MAAM,EAAE,gBAAgB;oBACxB,UAAU,EAAE,eAAe;iBAC5B,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC,UAAU,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC;aAC9C;SAC4C,CAAA;QAE/C,MAAM,MAAM,GAAG,gBAAgB,CAAC;YAC9B,GAAG,EAAE,GAAG;YACR,IAAI,EAAE,UAAU;YAChB,WAAW,EAAE,sBAAsB;YACnC,OAAO,EAAE,OAAO;SACjB,CAAC,CAAA;QACF,MAAM,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC;YACrB,IAAI,EAAE,UAAU;YAChB,WAAW,EAAE,sBAAsB;YACnC,OAAO,EAAE,OAAO;YAChB,SAAS,EAAE;gBACT,GAAG,EAAE;oBACH,iBAAiB,EAAE;wBACjB,eAAe,EAAE,KAAK;wBACtB,IAAI,EAAE,iBAAiB;wBACvB,MAAM,EAAE,gBAAgB;wBACxB,UAAU,EAAE,eAAe;qBAC5B;iBACF;aACF;SACF,CAAC,CAAA;IACJ,CAAC,CAAC,CAAA;AACJ,CAAC,CAAC,CAAA"}
1
+ {"version":3,"file":"get-schema-from-api.spec.js","sourceRoot":"","sources":["../src/get-schema-from-api.spec.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAA;AAC7C,OAAO,EAAE,aAAa,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAA;AAE1E,OAAO,EAAE,UAAU,EAAsB,MAAM,oCAAoC,CAAA;AACnF,OAAO,gBAAgB,MAAM,yCAAyC,CAAC,OAAO,IAAI,EAAE,MAAM,EAAE,CAAA;AAC5F,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAA;AAExC,MAAM,aAAa,GAAuB,KAAK,IAAI,EAAE;IACnD,OAAO,UAAU,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAA;AACtC,CAAC,CAAA;AAED,QAAQ,CAAC,kBAAkB,EAAE,GAAG,EAAE;IAChC,EAAE,CAAC,+CAA+C,EAAE,GAAG,EAAE;QACvD,MAAM,GAAG,GAAG;YACV,GAAG,EAAE;gBACH,UAAU,EAAE,aAAa;aAC1B;SAC4C,CAAA;QAE/C,MAAM,MAAM,GAAG,gBAAgB,CAAC;YAC9B,GAAG,EAAE,GAAG;YACR,IAAI,EAAE,UAAU;YAChB,WAAW,EAAE,sBAAsB;YACnC,OAAO,EAAE,OAAO;SACjB,CAAC,CAAA;QACF,MAAM,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC;YACrB,IAAI,EAAE,UAAU;YAChB,WAAW,EAAE,sBAAsB;YACnC,OAAO,EAAE,OAAO;YAChB,SAAS,EAAE;gBACT,GAAG,EAAE;oBACH,UAAU,EAAE;wBACV,eAAe,EAAE,KAAK;wBACtB,IAAI,EAAE,UAAU;wBAChB,MAAM,EAAE,aAAa;wBACrB,UAAU,EAAE,SAAS;qBACtB;iBACF;aACF;SACF,CAAC,CAAA;IACJ,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,uDAAuD,EAAE,GAAG,EAAE;QAC/D,MAAM,GAAG,GAAG;YACV,GAAG,EAAE;gBACH,iBAAiB,EAAE,QAAQ,CAAC;oBAC1B,MAAM,EAAE,gBAAgB;oBACxB,UAAU,EAAE,eAAe;iBAC5B,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC,UAAU,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC;aAC9C;SAC4C,CAAA;QAE/C,MAAM,MAAM,GAAG,gBAAgB,CAAC;YAC9B,GAAG,EAAE,GAAG;YACR,IAAI,EAAE,UAAU;YAChB,WAAW,EAAE,sBAAsB;YACnC,OAAO,EAAE,OAAO;SACjB,CAAC,CAAA;QACF,MAAM,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC;YACrB,IAAI,EAAE,UAAU;YAChB,WAAW,EAAE,sBAAsB;YACnC,OAAO,EAAE,OAAO;YAChB,SAAS,EAAE;gBACT,GAAG,EAAE;oBACH,iBAAiB,EAAE;wBACjB,eAAe,EAAE,KAAK;wBACtB,IAAI,EAAE,iBAAiB;wBACvB,MAAM,EAAE,gBAAgB;wBACxB,UAAU,EAAE,eAAe;qBAC5B;iBACF;aACF;SACF,CAAC,CAAA;IACJ,CAAC,CAAC,CAAA;AACJ,CAAC,CAAC,CAAA"}
package/esm/helpers.d.ts CHANGED
@@ -1,105 +1,71 @@
1
- import type { User } from '@furystack/core';
2
1
  import type { Injector } from '@furystack/inject';
3
2
  import type { RestApi } from '@furystack/rest';
4
- import type { ImplementApiOptions } from './api-manager.js';
5
3
  import { HttpAuthenticationSettings } from './http-authentication-settings.js';
6
- import type { DefaultSession } from './models/default-session.js';
7
- import type { ProxyOptions } from './proxy-manager.js';
8
- import type { StaticServerOptions } from './static-server-manager.js';
4
+ import { type ServerApi } from './http-server-pool.js';
5
+ import type { CorsOptions } from './models/cors-options.js';
6
+ import { type ProxyOptions } from './proxy-runtime.js';
7
+ import { type RestApiImplementation } from './rest-api-runtime.js';
8
+ import { type StaticServerOptions } from './static-site-runtime.js';
9
9
  /**
10
- * Sets up the @furystack/rest-service with the provided settings
11
- * @param api The API implementation details
12
- * @returns a promise that resolves when the API is added to the server
10
+ * Options accepted by {@link useRestService}. Mirrors the pre-migration
11
+ * shape, minus fields that have moved to tokens.
13
12
  */
14
- export declare const useRestService: <T extends RestApi>(api: ImplementApiOptions<T>) => Promise<{
15
- shouldExec: (msg: import("./server-manager.js").OnRequest) => boolean;
16
- onRequest: (msg: import("./server-manager.js").OnRequest) => Promise<void>;
17
- }>;
13
+ export interface ImplementApiOptions<T extends RestApi> {
14
+ /** The structure of the implemented API. */
15
+ api: RestApiImplementation<T>;
16
+ /** Injector used to resolve request-scoped services and to acquire the HTTP server. */
17
+ injector: Injector;
18
+ /** Optional host name; defaults to `localhost`. */
19
+ hostName?: string;
20
+ /** Root path prepended to every API route. */
21
+ root: string;
22
+ /** Port the API should listen on. */
23
+ port: number;
24
+ /** Optional CORS configuration applied to every matched request. */
25
+ cors?: CorsOptions;
26
+ /** Optional query-string deserialiser override. */
27
+ deserializeQueryParams?: (param: string) => Record<string, unknown>;
28
+ /** When `true`, adds `GET /schema` and `GET /openapi.json` endpoints. */
29
+ enableGetSchema?: boolean;
30
+ /** OpenAPI display name. */
31
+ name?: string;
32
+ /** OpenAPI description. */
33
+ description?: string;
34
+ /** OpenAPI version. */
35
+ version?: string;
36
+ }
18
37
  /**
19
- * Sets up the HTTP Authentication with pluggable providers.
38
+ * Acquires a pooled HTTP server, compiles the user-supplied API definition
39
+ * and attaches a {@link ServerApi} that dispatches matching requests.
20
40
  *
21
- * Registers Basic Auth (if enabled) and Cookie Auth as built-in providers,
22
- * then appends any custom providers passed via settings.
41
+ * Public contract is unchanged from the pre-migration release; internally
42
+ * everything goes through the functional tokens.
43
+ */
44
+ export declare const useRestService: <T extends RestApi>(options: ImplementApiOptions<T>) => Promise<ServerApi>;
45
+ /**
46
+ * Installs HTTP authentication on the given injector: builds the provider
47
+ * chain (Basic + Cookie by default), appends any caller-provided providers
48
+ * and rebinds {@link HttpAuthenticationSettings}.
23
49
  *
24
- * @param injector The Injector instance
25
- * @param settings Settings for HTTP Authentication
50
+ * Prerequisite: {@link UserStore} and {@link SessionStore} must be bound to
51
+ * persistent implementations before calling this helper, since the Basic
52
+ * and Cookie providers need to read users and sessions immediately.
26
53
  */
27
- export declare const useHttpAuthentication: <TUser extends User, TSession extends DefaultSession>(injector: Injector, settings?: Partial<HttpAuthenticationSettings<TUser, TSession>>) => void;
54
+ export declare const useHttpAuthentication: (injector: Injector, overrides?: Partial<HttpAuthenticationSettings>) => void;
28
55
  /**
29
- * Sets up a static file server
30
- * @param options The settings for the static file server
31
- * @param options.injector The Injector instance
32
- * @param options.settings Settings for the static file server
33
- * @returns a promise that resolves when the server is ready
56
+ * Attaches a static-file {@link ServerApi} to the pooled HTTP server
57
+ * identified by `options.port`/`options.hostName`.
34
58
  */
35
59
  export declare const useStaticFiles: (options: {
36
60
  injector: Injector;
37
- } & StaticServerOptions) => Promise<void>;
61
+ } & StaticServerOptions) => Promise<ServerApi>;
38
62
  /**
39
- * Sets up a proxy server that forwards HTTP requests from a source URL to a target URL.
40
- *
41
- * The proxy acts as an intermediary, forwarding requests and responses while allowing
42
- * transformation of headers, cookies, and paths. It returns 502 Bad Gateway on errors
43
- * and emits 'onProxyFailed' events for monitoring.
44
- *
45
- * WebSocket connections can also be proxied by setting `enableWebsockets: true`, allowing
46
- * bidirectional real-time communication through the proxy.
47
- *
48
- * @param options The settings for the proxy server
49
- * @param options.injector The Injector instance
50
- * @param options.sourceBaseUrl The base URL path to match for proxying (e.g., '/api', '/old').
51
- * Can be specified with or without a trailing slash.
52
- * @param options.targetBaseUrl The target server URL (must be a valid HTTP/HTTPS URL)
53
- * @param options.pathRewrite Optional function to rewrite the path before forwarding.
54
- * Receives the path after sourceBaseUrl, including leading slash and query string.
55
- * Example: for 'GET /api/users?active=true' with sourceBaseUrl='/api',
56
- * pathRewrite receives '/users?active=true'
57
- * @param options.sourceHostName The hostname for the source server (optional, defaults to all interfaces)
58
- * @param options.sourcePort The port for the source server
59
- * @param options.headers Optional function to transform request headers.
60
- * **Note**: Receives headers AFTER filtering hop-by-hop headers
61
- * (Connection, Keep-Alive, Transfer-Encoding, Upgrade, etc.) for security
62
- * and protocol compliance. The proxy automatically adds X-Forwarded-* headers.
63
- * This transformation applies to both HTTP and WebSocket requests.
64
- * @param options.cookies Optional function to transform request cookies (array of cookie strings)
65
- * @param options.responseCookies Optional function to transform response Set-Cookie headers
66
- * @param options.timeout Optional timeout in milliseconds for proxy requests (default: 30000).
67
- * If exceeded, the request is aborted and 502 is returned.
68
- * Applies to both HTTP and WebSocket upgrade requests.
69
- * @param options.enableWebsockets Optional flag to enable WebSocket proxying (default: false).
70
- * When enabled, WebSocket upgrade requests will be forwarded to the target.
71
- * @returns a promise that resolves when the proxy is set up
72
- * @example
73
- * ```ts
74
- * // Basic HTTP proxy with timeout
75
- * await useProxy({
76
- * injector,
77
- * sourceBaseUrl: '/api',
78
- * targetBaseUrl: 'https://api.example.com',
79
- * sourcePort: 3000,
80
- * timeout: 5000,
81
- * })
82
- *
83
- * // Proxy with WebSocket support
84
- * await useProxy({
85
- * injector,
86
- * sourceBaseUrl: '/ws',
87
- * targetBaseUrl: 'https://ws.example.com',
88
- * sourcePort: 3000,
89
- * enableWebsockets: true,
90
- * })
91
- *
92
- * // Proxy with error monitoring (HTTP and WebSocket)
93
- * const proxyManager = injector.getInstance(ProxyManager)
94
- * proxyManager.subscribe('onProxyFailed', ({ from, to, error }) => {
95
- * console.error(`HTTP Proxy failed: ${from} -> ${to}`, error)
96
- * })
97
- * proxyManager.subscribe('onWebSocketProxyFailed', ({ from, to, error }) => {
98
- * console.error(`WebSocket Proxy failed: ${from} -> ${to}`, error)
99
- * })
100
- * ```
63
+ * Attaches a proxy {@link ServerApi} that forwards HTTP (and optionally
64
+ * WebSocket) traffic from `options.sourceBaseUrl` to `options.targetBaseUrl`.
65
+ * Emits `onProxyFailed` and `onWebSocketProxyFailed` events into the shared
66
+ * {@link ServerTelemetryToken} — subscribe there for observability.
101
67
  */
102
68
  export declare const useProxy: (options: {
103
69
  injector: Injector;
104
- } & ProxyOptions) => Promise<void>;
70
+ } & ProxyOptions) => Promise<ServerApi>;
105
71
  //# sourceMappingURL=helpers.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"helpers.d.ts","sourceRoot":"","sources":["../src/helpers.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,iBAAiB,CAAA;AAE3C,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAA;AACjD,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,iBAAiB,CAAA;AAI9C,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAA;AAM3D,OAAO,EAAE,0BAA0B,EAAE,MAAM,mCAAmC,CAAA;AAC9E,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAA;AACjE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAA;AAEtD,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAA;AAGrE;;;;GAIG;AACH,eAAO,MAAM,cAAc,GAAU,CAAC,SAAS,OAAO,EAAE,KAAK,mBAAmB,CAAC,CAAC,CAAC;;;EACpB,CAAA;AAE/D;;;;;;;;GAQG;AACH,eAAO,MAAM,qBAAqB,GAAI,KAAK,SAAS,IAAI,EAAE,QAAQ,SAAS,cAAc,EACvF,UAAU,QAAQ,EAClB,WAAW,OAAO,CAAC,0BAA0B,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC,SAiChE,CAAA;AAED;;;;;;GAMG;AACH,eAAO,MAAM,cAAc,GAAI,SAAS;IAAE,QAAQ,EAAE,QAAQ,CAAA;CAAE,GAAG,mBAAmB,kBAGnF,CAAA;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+DG;AACH,eAAO,MAAM,QAAQ,GAAI,SAAS;IAAE,QAAQ,EAAE,QAAQ,CAAA;CAAE,GAAG,YAAY,kBAGtE,CAAA"}
1
+ {"version":3,"file":"helpers.d.ts","sourceRoot":"","sources":["../src/helpers.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAA;AAEjD,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,iBAAiB,CAAA;AAS9C,OAAO,EAAqC,0BAA0B,EAAE,MAAM,mCAAmC,CAAA;AACjH,OAAO,EAAuB,KAAK,SAAS,EAAE,MAAM,uBAAuB,CAAA;AAE3E,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAA;AAC3D,OAAO,EAAuB,KAAK,YAAY,EAAE,MAAM,oBAAoB,CAAA;AAC3E,OAAO,EAAgC,KAAK,qBAAqB,EAAqB,MAAM,uBAAuB,CAAA;AAEnH,OAAO,EAA4B,KAAK,mBAAmB,EAAE,MAAM,0BAA0B,CAAA;AAE7F;;;GAGG;AACH,MAAM,WAAW,mBAAmB,CAAC,CAAC,SAAS,OAAO;IACpD,4CAA4C;IAC5C,GAAG,EAAE,qBAAqB,CAAC,CAAC,CAAC,CAAA;IAC7B,uFAAuF;IACvF,QAAQ,EAAE,QAAQ,CAAA;IAClB,mDAAmD;IACnD,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,8CAA8C;IAC9C,IAAI,EAAE,MAAM,CAAA;IACZ,qCAAqC;IACrC,IAAI,EAAE,MAAM,CAAA;IACZ,oEAAoE;IACpE,IAAI,CAAC,EAAE,WAAW,CAAA;IAClB,mDAAmD;IACnD,sBAAsB,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;IACnE,yEAAyE;IACzE,eAAe,CAAC,EAAE,OAAO,CAAA;IACzB,4BAA4B;IAC5B,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,2BAA2B;IAC3B,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,uBAAuB;IACvB,OAAO,CAAC,EAAE,MAAM,CAAA;CACjB;AAED;;;;;;GAMG;AACH,eAAO,MAAM,cAAc,GAAU,CAAC,SAAS,OAAO,EAAE,SAAS,mBAAmB,CAAC,CAAC,CAAC,KAAG,OAAO,CAAC,SAAS,CAwD1G,CAAA;AAED;;;;;;;;GAQG;AACH,eAAO,MAAM,qBAAqB,GAAI,UAAU,QAAQ,EAAE,YAAY,OAAO,CAAC,0BAA0B,CAAC,KAAG,IA+B3G,CAAA;AAED;;;GAGG;AACH,eAAO,MAAM,cAAc,GAAU,SAAS;IAAE,QAAQ,EAAE,QAAQ,CAAA;CAAE,GAAG,mBAAmB,KAAG,OAAO,CAAC,SAAS,CAO7G,CAAA;AAED;;;;;GAKG;AACH,eAAO,MAAM,QAAQ,GAAU,SAAS;IAAE,QAAQ,EAAE,QAAQ,CAAA;CAAE,GAAG,YAAY,KAAG,OAAO,CAAC,SAAS,CAQhG,CAAA"}