@furystack/rest-service 13.0.0 → 14.1.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 (311) hide show
  1. package/CHANGELOG.md +124 -0
  2. package/README.md +47 -28
  3. package/esm/actions/error-action.d.ts +7 -2
  4. package/esm/actions/error-action.d.ts.map +1 -1
  5. package/esm/actions/error-action.js +7 -2
  6. package/esm/actions/error-action.js.map +1 -1
  7. package/esm/actions/get-current-user.d.ts +1 -4
  8. package/esm/actions/get-current-user.d.ts.map +1 -1
  9. package/esm/actions/get-current-user.js +1 -4
  10. package/esm/actions/get-current-user.js.map +1 -1
  11. package/esm/actions/get-current-user.spec.js +10 -6
  12. package/esm/actions/get-current-user.spec.js.map +1 -1
  13. package/esm/actions/is-authenticated.d.ts +3 -4
  14. package/esm/actions/is-authenticated.d.ts.map +1 -1
  15. package/esm/actions/is-authenticated.js +3 -4
  16. package/esm/actions/is-authenticated.js.map +1 -1
  17. package/esm/actions/is-authenticated.spec.js +10 -6
  18. package/esm/actions/is-authenticated.spec.js.map +1 -1
  19. package/esm/actions/logout-action.spec.js +11 -9
  20. package/esm/actions/logout-action.spec.js.map +1 -1
  21. package/esm/actions/logout.d.ts +2 -6
  22. package/esm/actions/logout.d.ts.map +1 -1
  23. package/esm/actions/logout.js +3 -7
  24. package/esm/actions/logout.js.map +1 -1
  25. package/esm/actions/not-found-action.d.ts +1 -3
  26. package/esm/actions/not-found-action.d.ts.map +1 -1
  27. package/esm/actions/not-found-action.js +1 -3
  28. package/esm/actions/not-found-action.js.map +1 -1
  29. package/esm/actions/password-login-action.d.ts +5 -12
  30. package/esm/actions/password-login-action.d.ts.map +1 -1
  31. package/esm/actions/password-login-action.js +6 -13
  32. package/esm/actions/password-login-action.js.map +1 -1
  33. package/esm/actions/password-login-action.spec.js +23 -28
  34. package/esm/actions/password-login-action.spec.js.map +1 -1
  35. package/esm/authenticate.d.ts +5 -11
  36. package/esm/authenticate.d.ts.map +1 -1
  37. package/esm/authenticate.js +6 -12
  38. package/esm/authenticate.js.map +1 -1
  39. package/esm/authenticate.spec.js +41 -33
  40. package/esm/authenticate.spec.js.map +1 -1
  41. package/esm/authentication-providers/authentication-provider.d.ts +17 -0
  42. package/esm/authentication-providers/authentication-provider.d.ts.map +1 -1
  43. package/esm/authentication-providers/basic-auth-provider.d.ts +7 -0
  44. package/esm/authentication-providers/basic-auth-provider.d.ts.map +1 -1
  45. package/esm/authentication-providers/basic-auth-provider.js +7 -0
  46. package/esm/authentication-providers/basic-auth-provider.js.map +1 -1
  47. package/esm/authentication-providers/cookie-auth-provider.d.ts.map +1 -1
  48. package/esm/authentication-providers/cookie-auth-provider.js +8 -0
  49. package/esm/authentication-providers/cookie-auth-provider.js.map +1 -1
  50. package/esm/authorize.d.ts +5 -17
  51. package/esm/authorize.d.ts.map +1 -1
  52. package/esm/authorize.js +5 -17
  53. package/esm/authorize.js.map +1 -1
  54. package/esm/authorize.spec.js +34 -29
  55. package/esm/authorize.spec.js.map +1 -1
  56. package/esm/endpoint-generators/create-delete-endpoint.d.ts +6 -11
  57. package/esm/endpoint-generators/create-delete-endpoint.d.ts.map +1 -1
  58. package/esm/endpoint-generators/create-delete-endpoint.js +7 -11
  59. package/esm/endpoint-generators/create-delete-endpoint.js.map +1 -1
  60. package/esm/endpoint-generators/create-delete-endpoint.spec.js +14 -21
  61. package/esm/endpoint-generators/create-delete-endpoint.spec.js.map +1 -1
  62. package/esm/endpoint-generators/create-get-collection-endpoint.d.ts +11 -11
  63. package/esm/endpoint-generators/create-get-collection-endpoint.d.ts.map +1 -1
  64. package/esm/endpoint-generators/create-get-collection-endpoint.js +13 -12
  65. package/esm/endpoint-generators/create-get-collection-endpoint.js.map +1 -1
  66. package/esm/endpoint-generators/create-get-collection-endpoint.spec.js +43 -70
  67. package/esm/endpoint-generators/create-get-collection-endpoint.spec.js.map +1 -1
  68. package/esm/endpoint-generators/create-get-entity-endpoint.d.ts +6 -11
  69. package/esm/endpoint-generators/create-get-entity-endpoint.d.ts.map +1 -1
  70. package/esm/endpoint-generators/create-get-entity-endpoint.js +7 -11
  71. package/esm/endpoint-generators/create-get-entity-endpoint.js.map +1 -1
  72. package/esm/endpoint-generators/create-get-entity-endpoint.spec.js +16 -33
  73. package/esm/endpoint-generators/create-get-entity-endpoint.spec.js.map +1 -1
  74. package/esm/endpoint-generators/create-get-openapi-document-action.d.ts +1 -1
  75. package/esm/endpoint-generators/create-get-openapi-document-action.d.ts.map +1 -1
  76. package/esm/endpoint-generators/create-get-openapi-document-action.js +1 -1
  77. package/esm/endpoint-generators/create-get-openapi-document-action.js.map +1 -1
  78. package/esm/endpoint-generators/create-get-schema-action.d.ts +1 -1
  79. package/esm/endpoint-generators/create-get-schema-action.d.ts.map +1 -1
  80. package/esm/endpoint-generators/create-get-schema-action.js.map +1 -1
  81. package/esm/endpoint-generators/create-patch-endpoint.d.ts +7 -13
  82. package/esm/endpoint-generators/create-patch-endpoint.d.ts.map +1 -1
  83. package/esm/endpoint-generators/create-patch-endpoint.js +8 -13
  84. package/esm/endpoint-generators/create-patch-endpoint.js.map +1 -1
  85. package/esm/endpoint-generators/create-patch-endpoint.spec.js +10 -17
  86. package/esm/endpoint-generators/create-patch-endpoint.spec.js.map +1 -1
  87. package/esm/endpoint-generators/create-post-endpoint.d.ts +7 -13
  88. package/esm/endpoint-generators/create-post-endpoint.d.ts.map +1 -1
  89. package/esm/endpoint-generators/create-post-endpoint.js +8 -13
  90. package/esm/endpoint-generators/create-post-endpoint.js.map +1 -1
  91. package/esm/endpoint-generators/create-post-endpoint.spec.js +41 -14
  92. package/esm/endpoint-generators/create-post-endpoint.spec.js.map +1 -1
  93. package/esm/endpoint-generators/utils.d.ts +17 -2
  94. package/esm/endpoint-generators/utils.d.ts.map +1 -1
  95. package/esm/endpoint-generators/utils.js +33 -20
  96. package/esm/endpoint-generators/utils.js.map +1 -1
  97. package/esm/get-schema-from-api.d.ts +1 -1
  98. package/esm/get-schema-from-api.d.ts.map +1 -1
  99. package/esm/get-schema-from-api.js +1 -0
  100. package/esm/get-schema-from-api.js.map +1 -1
  101. package/esm/get-schema-from-api.spec.js.map +1 -1
  102. package/esm/helpers.d.ts +54 -88
  103. package/esm/helpers.d.ts.map +1 -1
  104. package/esm/helpers.js +90 -92
  105. package/esm/helpers.js.map +1 -1
  106. package/esm/helpers.spec.d.ts +2 -1
  107. package/esm/helpers.spec.d.ts.map +1 -1
  108. package/esm/helpers.spec.js +41 -38
  109. package/esm/helpers.spec.js.map +1 -1
  110. package/esm/http-authentication-settings.d.ts +56 -12
  111. package/esm/http-authentication-settings.d.ts.map +1 -1
  112. package/esm/http-authentication-settings.js +27 -29
  113. package/esm/http-authentication-settings.js.map +1 -1
  114. package/esm/http-server-pool.d.ts +64 -0
  115. package/esm/http-server-pool.d.ts.map +1 -0
  116. package/esm/http-server-pool.js +95 -0
  117. package/esm/http-server-pool.js.map +1 -0
  118. package/esm/http-server-pool.spec.d.ts +2 -0
  119. package/esm/http-server-pool.spec.d.ts.map +1 -0
  120. package/esm/http-server-pool.spec.js +193 -0
  121. package/esm/http-server-pool.spec.js.map +1 -0
  122. package/esm/http-user-context.d.ts +34 -44
  123. package/esm/http-user-context.d.ts.map +1 -1
  124. package/esm/http-user-context.js +75 -95
  125. package/esm/http-user-context.js.map +1 -1
  126. package/esm/http-user-context.spec.d.ts +8 -2
  127. package/esm/http-user-context.spec.d.ts.map +1 -1
  128. package/esm/http-user-context.spec.js +226 -332
  129. package/esm/http-user-context.spec.js.map +1 -1
  130. package/esm/identity-cache-keys.d.ts +28 -0
  131. package/esm/identity-cache-keys.d.ts.map +1 -0
  132. package/esm/identity-cache-keys.js +13 -0
  133. package/esm/identity-cache-keys.js.map +1 -0
  134. package/esm/identity-cache-keys.spec.d.ts +2 -0
  135. package/esm/identity-cache-keys.spec.d.ts.map +1 -0
  136. package/esm/identity-cache-keys.spec.js +21 -0
  137. package/esm/identity-cache-keys.spec.js.map +1 -0
  138. package/esm/identity-event-bus.d.ts +102 -0
  139. package/esm/identity-event-bus.d.ts.map +1 -0
  140. package/esm/identity-event-bus.js +151 -0
  141. package/esm/identity-event-bus.js.map +1 -0
  142. package/esm/identity-event-bus.spec.d.ts +2 -0
  143. package/esm/identity-event-bus.spec.d.ts.map +1 -0
  144. package/esm/identity-event-bus.spec.js +392 -0
  145. package/esm/identity-event-bus.spec.js.map +1 -0
  146. package/esm/index.d.ts +9 -4
  147. package/esm/index.d.ts.map +1 -1
  148. package/esm/index.js +9 -4
  149. package/esm/index.js.map +1 -1
  150. package/esm/login-response-strategy.d.ts +11 -10
  151. package/esm/login-response-strategy.d.ts.map +1 -1
  152. package/esm/login-response-strategy.js +7 -6
  153. package/esm/login-response-strategy.js.map +1 -1
  154. package/esm/login-response-strategy.spec.js +25 -29
  155. package/esm/login-response-strategy.spec.js.map +1 -1
  156. package/esm/openapi/generate-openapi-document.spec.js.map +1 -1
  157. package/esm/proxy-manager.spec.js +152 -176
  158. package/esm/proxy-manager.spec.js.map +1 -1
  159. package/esm/proxy-runtime.d.ts +27 -0
  160. package/esm/proxy-runtime.d.ts.map +1 -0
  161. package/esm/proxy-runtime.js +45 -0
  162. package/esm/proxy-runtime.js.map +1 -0
  163. package/esm/proxy-runtime.spec.d.ts +2 -0
  164. package/esm/proxy-runtime.spec.d.ts.map +1 -0
  165. package/esm/proxy-runtime.spec.js +39 -0
  166. package/esm/proxy-runtime.spec.js.map +1 -0
  167. package/esm/request-action-implementation.d.ts +25 -0
  168. package/esm/request-action-implementation.d.ts.map +1 -1
  169. package/esm/request-action-implementation.js +9 -0
  170. package/esm/request-action-implementation.js.map +1 -1
  171. package/esm/rest-api-runtime.d.ts +76 -0
  172. package/esm/rest-api-runtime.d.ts.map +1 -0
  173. package/esm/rest-api-runtime.js +131 -0
  174. package/esm/rest-api-runtime.js.map +1 -0
  175. package/esm/rest-api-runtime.spec.d.ts +2 -0
  176. package/esm/rest-api-runtime.spec.d.ts.map +1 -0
  177. package/esm/rest-api-runtime.spec.js +58 -0
  178. package/esm/rest-api-runtime.spec.js.map +1 -0
  179. package/esm/rest-service.integration.spec.d.ts +1 -1
  180. package/esm/rest-service.integration.spec.d.ts.map +1 -1
  181. package/esm/rest-service.integration.spec.js +57 -80
  182. package/esm/rest-service.integration.spec.js.map +1 -1
  183. package/esm/rest.integration.test.js +26 -84
  184. package/esm/rest.integration.test.js.map +1 -1
  185. package/esm/server-telemetry.d.ts +49 -0
  186. package/esm/server-telemetry.d.ts.map +1 -0
  187. package/esm/server-telemetry.js +25 -0
  188. package/esm/server-telemetry.js.map +1 -0
  189. package/esm/server-telemetry.spec.d.ts +2 -0
  190. package/esm/server-telemetry.spec.d.ts.map +1 -0
  191. package/esm/server-telemetry.spec.js +52 -0
  192. package/esm/server-telemetry.spec.js.map +1 -0
  193. package/esm/static-server-manager.spec.js +60 -125
  194. package/esm/static-server-manager.spec.js.map +1 -1
  195. package/esm/static-site-runtime.d.ts +21 -0
  196. package/esm/static-site-runtime.d.ts.map +1 -0
  197. package/esm/static-site-runtime.js +48 -0
  198. package/esm/static-site-runtime.js.map +1 -0
  199. package/esm/static-site-runtime.spec.d.ts +2 -0
  200. package/esm/static-site-runtime.spec.d.ts.map +1 -0
  201. package/esm/static-site-runtime.spec.js +30 -0
  202. package/esm/static-site-runtime.spec.js.map +1 -0
  203. package/esm/user-resolution-cache.d.ts +65 -0
  204. package/esm/user-resolution-cache.d.ts.map +1 -0
  205. package/esm/user-resolution-cache.js +101 -0
  206. package/esm/user-resolution-cache.js.map +1 -0
  207. package/esm/user-resolution-cache.spec.d.ts +2 -0
  208. package/esm/user-resolution-cache.spec.d.ts.map +1 -0
  209. package/esm/user-resolution-cache.spec.js +220 -0
  210. package/esm/user-resolution-cache.spec.js.map +1 -0
  211. package/esm/user-store.d.ts +39 -0
  212. package/esm/user-store.d.ts.map +1 -0
  213. package/esm/user-store.js +62 -0
  214. package/esm/user-store.js.map +1 -0
  215. package/esm/user-store.spec.d.ts +2 -0
  216. package/esm/user-store.spec.d.ts.map +1 -0
  217. package/esm/user-store.spec.js +72 -0
  218. package/esm/user-store.spec.js.map +1 -0
  219. package/esm/validate.d.ts +13 -12
  220. package/esm/validate.d.ts.map +1 -1
  221. package/esm/validate.integration.spec.js +27 -28
  222. package/esm/validate.integration.spec.js.map +1 -1
  223. package/esm/validate.js +12 -0
  224. package/esm/validate.js.map +1 -1
  225. package/package.json +14 -12
  226. package/src/actions/error-action.ts +7 -3
  227. package/src/actions/get-current-user.spec.ts +11 -10
  228. package/src/actions/get-current-user.ts +1 -4
  229. package/src/actions/is-authenticated.spec.ts +12 -7
  230. package/src/actions/is-authenticated.ts +3 -4
  231. package/src/actions/logout-action.spec.ts +12 -12
  232. package/src/actions/logout.ts +3 -7
  233. package/src/actions/not-found-action.ts +1 -3
  234. package/src/actions/password-login-action.spec.ts +30 -30
  235. package/src/actions/password-login-action.ts +6 -13
  236. package/src/authenticate.spec.ts +45 -51
  237. package/src/authenticate.ts +6 -12
  238. package/src/authentication-providers/authentication-provider.ts +17 -0
  239. package/src/authentication-providers/basic-auth-provider.ts +7 -0
  240. package/src/authentication-providers/cookie-auth-provider.ts +8 -0
  241. package/src/authorize.spec.ts +37 -39
  242. package/src/authorize.ts +6 -17
  243. package/src/endpoint-generators/create-delete-endpoint.spec.ts +16 -24
  244. package/src/endpoint-generators/create-delete-endpoint.ts +11 -17
  245. package/src/endpoint-generators/create-get-collection-endpoint.spec.ts +45 -78
  246. package/src/endpoint-generators/create-get-collection-endpoint.ts +17 -19
  247. package/src/endpoint-generators/create-get-entity-endpoint.spec.ts +17 -33
  248. package/src/endpoint-generators/create-get-entity-endpoint.ts +11 -17
  249. package/src/endpoint-generators/create-get-openapi-document-action.ts +2 -2
  250. package/src/endpoint-generators/create-get-schema-action.ts +1 -1
  251. package/src/endpoint-generators/create-patch-endpoint.spec.ts +11 -18
  252. package/src/endpoint-generators/create-patch-endpoint.ts +12 -23
  253. package/src/endpoint-generators/create-post-endpoint.spec.ts +45 -14
  254. package/src/endpoint-generators/create-post-endpoint.ts +13 -23
  255. package/src/endpoint-generators/utils.ts +36 -28
  256. package/src/get-schema-from-api.spec.ts +1 -1
  257. package/src/get-schema-from-api.ts +2 -1
  258. package/src/helpers.spec.ts +51 -41
  259. package/src/helpers.ts +140 -109
  260. package/src/http-authentication-settings.ts +78 -24
  261. package/src/http-server-pool.spec.ts +220 -0
  262. package/src/http-server-pool.ts +169 -0
  263. package/src/http-user-context.spec.ts +246 -378
  264. package/src/http-user-context.ts +122 -92
  265. package/src/identity-cache-keys.spec.ts +24 -0
  266. package/src/identity-cache-keys.ts +31 -0
  267. package/src/identity-event-bus.spec.ts +285 -0
  268. package/src/identity-event-bus.ts +230 -0
  269. package/src/index.ts +9 -4
  270. package/src/login-response-strategy.spec.ts +32 -31
  271. package/src/login-response-strategy.ts +14 -12
  272. package/src/openapi/generate-openapi-document.spec.ts +2 -2
  273. package/src/proxy-manager.spec.ts +158 -188
  274. package/src/proxy-runtime.spec.ts +50 -0
  275. package/src/proxy-runtime.ts +75 -0
  276. package/src/request-action-implementation.ts +25 -0
  277. package/src/rest-api-runtime.spec.ts +77 -0
  278. package/src/rest-api-runtime.ts +204 -0
  279. package/src/rest-service.integration.spec.ts +65 -85
  280. package/src/rest.integration.test.ts +27 -87
  281. package/src/server-telemetry.spec.ts +56 -0
  282. package/src/server-telemetry.ts +43 -0
  283. package/src/static-server-manager.spec.ts +63 -151
  284. package/src/static-site-runtime.spec.ts +39 -0
  285. package/src/static-site-runtime.ts +75 -0
  286. package/src/user-resolution-cache.spec.ts +241 -0
  287. package/src/user-resolution-cache.ts +164 -0
  288. package/src/user-store.spec.ts +86 -0
  289. package/src/user-store.ts +69 -0
  290. package/src/validate.integration.spec.ts +40 -35
  291. package/src/validate.ts +14 -12
  292. package/esm/api-manager.d.ts +0 -104
  293. package/esm/api-manager.d.ts.map +0 -1
  294. package/esm/api-manager.js +0 -179
  295. package/esm/api-manager.js.map +0 -1
  296. package/esm/proxy-manager.d.ts +0 -53
  297. package/esm/proxy-manager.d.ts.map +0 -1
  298. package/esm/proxy-manager.js +0 -84
  299. package/esm/proxy-manager.js.map +0 -1
  300. package/esm/server-manager.d.ts +0 -48
  301. package/esm/server-manager.d.ts.map +0 -1
  302. package/esm/server-manager.js +0 -100
  303. package/esm/server-manager.js.map +0 -1
  304. package/esm/static-server-manager.d.ts +0 -19
  305. package/esm/static-server-manager.d.ts.map +0 -1
  306. package/esm/static-server-manager.js +0 -65
  307. package/esm/static-server-manager.js.map +0 -1
  308. package/src/api-manager.ts +0 -304
  309. package/src/proxy-manager.ts +0 -102
  310. package/src/server-manager.ts +0 -135
  311. package/src/static-server-manager.ts +0 -90
@@ -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"}
@@ -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,iBAwBH,CAAA"}
@@ -42,6 +42,7 @@ export const getSchemaFromApi = ({ api, name = 'FuryStack API', description = 'A
42
42
  if (!endpoints[methodKey]) {
43
43
  endpoints[methodKey] = {};
44
44
  }
45
+ // eslint-disable-next-line @typescript-eslint/no-unnecessary-type-assertion -- false positive: TS narrows `endpointList` to a union the iterator can't index without this cast
45
46
  Object.entries(endpointList).forEach(([url, requestAction]) => {
46
47
  if (method && url && requestAction) {
47
48
  endpoints[methodKey][url] = getDefinitionFromAction(url, requestAction);
@@ -1 +1 @@
1
- {"version":3,"file":"get-schema-from-api.js","sourceRoot":"","sources":["../src/get-schema-from-api.ts"],"names":[],"mappings":"AAIA,MAAM,CAAC,MAAM,aAAa,GAAW;IACnC,WAAW,EAAE;QACX,OAAO,EAAE;YACP,IAAI,EAAE,QAAQ;YACd,UAAU,EAAE;gBACV,OAAO,EAAE;oBACP,IAAI,EAAE,QAAQ;oBACd,oBAAoB,EAAE,IAAI;iBAC3B;gBACD,KAAK,EAAE;oBACL,IAAI,EAAE,QAAQ;oBACd,oBAAoB,EAAE,IAAI;iBAC3B;gBACD,IAAI,EAAE;oBACJ,IAAI,EAAE,QAAQ;oBACd,oBAAoB,EAAE,IAAI;iBAC3B;gBACD,GAAG,EAAE;oBACH,IAAI,EAAE,QAAQ;oBACd,oBAAoB,EAAE,IAAI;iBAC3B;aACF;YACD,QAAQ,EAAE,EAAE;YACZ,WAAW,EAAE,kCAAkC;YAC/C,oBAAoB,EAAE,IAAI;SAC3B;KACF;CACF,CAAA;AAED,MAAM,iBAAiB,GAAG,SAAS,CAAA;AAEnC,MAAM,uBAAuB,GAAG,CAAC,IAAY,EAAE,MAA0C,EAAyB,EAAE;IAClH,OAAO;QACL,IAAI;QACJ,MAAM,EAAE,QAAQ,IAAI,MAAM,IAAI,OAAO,MAAM,CAAC,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,aAAa;QAC/F,UAAU,EAAE,YAAY,IAAI,MAAM,IAAI,OAAO,MAAM,CAAC,UAAU,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,iBAAiB;QACnH,eAAe,EACb,iBAAiB,IAAI,MAAM,IAAI,OAAO,MAAM,CAAC,eAAe,KAAK,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,eAAe,CAAC,CAAC,CAAC,KAAK;KAC9G,CAAA;AACH,CAAC,CAAA;AAED,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAA2C,EACzE,GAAG,EACH,IAAI,GAAG,eAAe,EACtB,WAAW,GAAG,uDAAuD,EACrE,OAAO,GAAG,OAAO,GAMlB,EAAqB,EAAE;IACtB,MAAM,SAAS,GAAmC,EAAE,CAAA;IAEpD,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,EAAE,YAAY,CAAC,EAAE,EAAE;QACrD,MAAM,SAAS,GAAG,MAAgB,CAAA;QAClC,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,EAAE,CAAC;YAC1B,SAAS,CAAC,SAAS,CAAC,GAAG,EAAE,CAAA;QAC3B,CAAC;QACD,MAAM,CAAC,OAAO,CAAC,YAAkE,CAAC,CAAC,OAAO,CACxF,CAAC,CAAC,GAAG,EAAE,aAAa,CAAC,EAAE,EAAE;YACvB,IAAI,MAAM,IAAI,GAAG,IAAI,aAAa,EAAE,CAAC;gBACnC,SAAS,CAAC,SAAS,CAAE,CAAC,GAAG,CAAC,GAAG,uBAAuB,CAAC,GAAG,EAAE,aAAa,CAAC,CAAA;YAC1E,CAAC;QACH,CAAC,CACF,CAAA;IACH,CAAC,CAAC,CAAA;IAEF,OAAO;QACL,IAAI;QACJ,WAAW;QACX,OAAO;QACP,SAAS;KACV,CAAA;AACH,CAAC,CAAA"}
1
+ {"version":3,"file":"get-schema-from-api.js","sourceRoot":"","sources":["../src/get-schema-from-api.ts"],"names":[],"mappings":"AAIA,MAAM,CAAC,MAAM,aAAa,GAAW;IACnC,WAAW,EAAE;QACX,OAAO,EAAE;YACP,IAAI,EAAE,QAAQ;YACd,UAAU,EAAE;gBACV,OAAO,EAAE;oBACP,IAAI,EAAE,QAAQ;oBACd,oBAAoB,EAAE,IAAI;iBAC3B;gBACD,KAAK,EAAE;oBACL,IAAI,EAAE,QAAQ;oBACd,oBAAoB,EAAE,IAAI;iBAC3B;gBACD,IAAI,EAAE;oBACJ,IAAI,EAAE,QAAQ;oBACd,oBAAoB,EAAE,IAAI;iBAC3B;gBACD,GAAG,EAAE;oBACH,IAAI,EAAE,QAAQ;oBACd,oBAAoB,EAAE,IAAI;iBAC3B;aACF;YACD,QAAQ,EAAE,EAAE;YACZ,WAAW,EAAE,kCAAkC;YAC/C,oBAAoB,EAAE,IAAI;SAC3B;KACF;CACF,CAAA;AAED,MAAM,iBAAiB,GAAG,SAAS,CAAA;AAEnC,MAAM,uBAAuB,GAAG,CAAC,IAAY,EAAE,MAA0C,EAAyB,EAAE;IAClH,OAAO;QACL,IAAI;QACJ,MAAM,EAAE,QAAQ,IAAI,MAAM,IAAI,OAAO,MAAM,CAAC,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,aAAa;QAC/F,UAAU,EAAE,YAAY,IAAI,MAAM,IAAI,OAAO,MAAM,CAAC,UAAU,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,iBAAiB;QACnH,eAAe,EACb,iBAAiB,IAAI,MAAM,IAAI,OAAO,MAAM,CAAC,eAAe,KAAK,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,eAAe,CAAC,CAAC,CAAC,KAAK;KAC9G,CAAA;AACH,CAAC,CAAA;AAED,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAA2C,EACzE,GAAG,EACH,IAAI,GAAG,eAAe,EACtB,WAAW,GAAG,uDAAuD,EACrE,OAAO,GAAG,OAAO,GAMlB,EAAqB,EAAE;IACtB,MAAM,SAAS,GAAmC,EAAE,CAAA;IAEpD,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,EAAE,YAAY,CAAC,EAAE,EAAE;QACrD,MAAM,SAAS,GAAG,MAAgB,CAAA;QAClC,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,EAAE,CAAC;YAC1B,SAAS,CAAC,SAAS,CAAC,GAAG,EAAE,CAAA;QAC3B,CAAC;QACD,+KAA+K;QAC/K,MAAM,CAAC,OAAO,CAAC,YAAkE,CAAC,CAAC,OAAO,CACxF,CAAC,CAAC,GAAG,EAAE,aAAa,CAAC,EAAE,EAAE;YACvB,IAAI,MAAM,IAAI,GAAG,IAAI,aAAa,EAAE,CAAC;gBACnC,SAAS,CAAC,SAAS,CAAE,CAAC,GAAG,CAAC,GAAG,uBAAuB,CAAC,GAAG,EAAE,aAAa,CAAC,CAAA;YAC1E,CAAC;QACH,CAAC,CACF,CAAA;IACH,CAAC,CAAC,CAAA;IAEF,OAAO;QACL,IAAI;QACJ,WAAW;QACX,OAAO;QACP,SAAS;KACV,CAAA;AACH,CAAC,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}. Cross-cutting concerns
11
+ * (authentication, telemetry) have moved to DI tokens — they are not
12
+ * configured here.
13
13
  */
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
- }>;
14
+ export interface ImplementApiOptions<T extends RestApi> {
15
+ /** The structure of the implemented API. */
16
+ api: RestApiImplementation<T>;
17
+ /** Injector used to resolve request-scoped services and to acquire the HTTP server. */
18
+ injector: Injector;
19
+ /** Optional host name; defaults to `localhost`. */
20
+ hostName?: string;
21
+ /** Root path prepended to every API route. */
22
+ root: string;
23
+ /** Port the API should listen on. */
24
+ port: number;
25
+ /** Optional CORS configuration applied to every matched request. */
26
+ cors?: CorsOptions;
27
+ /** Optional query-string deserialiser override. */
28
+ deserializeQueryParams?: (param: string) => Record<string, unknown>;
29
+ /** When `true`, adds `GET /schema` and `GET /openapi.json` endpoints. */
30
+ enableGetSchema?: boolean;
31
+ /** OpenAPI display name. */
32
+ name?: string;
33
+ /** OpenAPI description. */
34
+ description?: string;
35
+ /** OpenAPI version. */
36
+ version?: string;
37
+ }
18
38
  /**
19
- * Sets up the HTTP Authentication with pluggable providers.
20
- *
21
- * Registers Basic Auth (if enabled) and Cookie Auth as built-in providers,
22
- * then appends any custom providers passed via settings.
39
+ * Acquires a pooled HTTP server (creating one if needed), compiles `api`
40
+ * and attaches a {@link ServerApi} that dispatches matching requests.
41
+ * Multiple `useRestService` calls on the same `port` + `hostName` share a
42
+ * single underlying HTTP server.
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;AACjD,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;AAG7F;;;;GAIG;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;;;;;GAKG;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"}
package/esm/helpers.js CHANGED
@@ -1,119 +1,117 @@
1
1
  import { useSystemIdentityContext } from '@furystack/core';
2
2
  import { PasswordAuthenticator } from '@furystack/security';
3
- import { ApiManager } from './api-manager.js';
3
+ import { PathHelper } from '@furystack/utils';
4
4
  import { createBasicAuthProvider } from './authentication-providers/basic-auth-provider.js';
5
5
  import { createCookieAuthProvider } from './authentication-providers/cookie-auth-provider.js';
6
6
  import { authenticateUserWithDataSet, findSessionById, findUserByName } from './authentication-providers/helpers.js';
7
- import { HttpAuthenticationSettings } from './http-authentication-settings.js';
8
- import { ProxyManager } from './proxy-manager.js';
9
- import { StaticServerManager } from './static-server-manager.js';
7
+ import { CreateGetOpenApiDocumentAction } from './endpoint-generators/create-get-openapi-document-action.js';
8
+ import { CreateGetSchemaAction } from './endpoint-generators/create-get-schema-action.js';
9
+ import { defaultHttpAuthenticationSettings, HttpAuthenticationSettings } from './http-authentication-settings.js';
10
+ import { HttpServerPoolToken } from './http-server-pool.js';
11
+ import { HttpUserContext } from './http-user-context.js';
12
+ import { buildProxyServerApi } from './proxy-runtime.js';
13
+ import { compileApi, onRestApiMessage, shouldExecRequest } from './rest-api-runtime.js';
14
+ import { ServerTelemetryToken } from './server-telemetry.js';
15
+ import { buildStaticSiteServerApi } from './static-site-runtime.js';
10
16
  /**
11
- * Sets up the @furystack/rest-service with the provided settings
12
- * @param api The API implementation details
13
- * @returns a promise that resolves when the API is added to the server
17
+ * Acquires a pooled HTTP server (creating one if needed), compiles `api`
18
+ * and attaches a {@link ServerApi} that dispatches matching requests.
19
+ * Multiple `useRestService` calls on the same `port` + `hostName` share a
20
+ * single underlying HTTP server.
14
21
  */
15
- export const useRestService = async (api) => await api.injector.getInstance(ApiManager).addApi({ ...api });
22
+ export const useRestService = async (options) => {
23
+ const { injector, api, hostName, port, root, cors, deserializeQueryParams, enableGetSchema, name, description, version, } = options;
24
+ const extendedApi = enableGetSchema
25
+ ? {
26
+ ...api,
27
+ GET: {
28
+ ...api.GET,
29
+ '/schema': CreateGetSchemaAction(api, name, description, version),
30
+ '/openapi.json': CreateGetOpenApiDocumentAction(api, name, description, version),
31
+ },
32
+ }
33
+ : api;
34
+ const supportedMethods = Object.keys(extendedApi);
35
+ const rootApiPath = PathHelper.normalize(root);
36
+ const compiledApi = compileApi(extendedApi, root);
37
+ const serverApi = {
38
+ shouldExec: ({ req }) => shouldExecRequest({
39
+ method: req.method?.toUpperCase(),
40
+ url: PathHelper.normalize(req.url || ''),
41
+ rootApiPath,
42
+ supportedMethods,
43
+ }),
44
+ onRequest: (msg) => onRestApiMessage({
45
+ ...msg,
46
+ compiledApi,
47
+ rootApiPath,
48
+ port,
49
+ supportedMethods,
50
+ cors,
51
+ injector,
52
+ hostName,
53
+ deserializeQueryParams,
54
+ }),
55
+ };
56
+ const pool = injector.get(HttpServerPoolToken);
57
+ const record = await pool.acquire({ port, hostName });
58
+ record.apis.push(serverApi);
59
+ return serverApi;
60
+ };
16
61
  /**
17
- * Sets up the HTTP Authentication with pluggable providers.
18
- *
19
- * Registers Basic Auth (if enabled) and Cookie Auth as built-in providers,
20
- * then appends any custom providers passed via settings.
62
+ * Installs HTTP authentication on the given injector: builds the provider
63
+ * chain (Basic + Cookie by default), appends any caller-provided providers
64
+ * and rebinds {@link HttpAuthenticationSettings}.
21
65
  *
22
- * @param injector The Injector instance
23
- * @param settings Settings for HTTP Authentication
66
+ * Prerequisite: {@link UserStore} and {@link SessionStore} must be bound to
67
+ * persistent implementations before calling this helper, since the Basic
68
+ * and Cookie providers need to read users and sessions immediately.
24
69
  */
25
- export const useHttpAuthentication = (injector, settings) => {
26
- const mergedSettings = Object.assign(new HttpAuthenticationSettings(), settings);
70
+ export const useHttpAuthentication = (injector, overrides) => {
71
+ const mergedSettings = {
72
+ ...defaultHttpAuthenticationSettings(),
73
+ ...overrides,
74
+ };
27
75
  const systemInjector = useSystemIdentityContext({ injector, username: 'useHttpAuthentication' });
28
- const passwordAuthenticator = injector.getInstance(PasswordAuthenticator);
29
- const userDataSet = mergedSettings.getUserDataSet(systemInjector);
30
- const sessionDataSet = mergedSettings.getSessionDataSet(systemInjector);
76
+ const passwordAuthenticator = injector.get(PasswordAuthenticator);
77
+ const userDataSet = systemInjector.get(mergedSettings.userDataSet);
78
+ const sessionDataSet = systemInjector.get(mergedSettings.sessionDataSet);
31
79
  const providers = [];
32
80
  if (mergedSettings.enableBasicAuth) {
33
81
  providers.push(createBasicAuthProvider((username, password) => authenticateUserWithDataSet(passwordAuthenticator, userDataSet, systemInjector, username, password)));
34
82
  }
35
83
  providers.push(createCookieAuthProvider(mergedSettings.cookieName, (sessionId) => findSessionById(sessionDataSet, systemInjector, sessionId), (username) => findUserByName(userDataSet, systemInjector, username)));
36
- providers.push(...(settings?.authenticationProviders ?? []));
84
+ providers.push(...(overrides?.authenticationProviders ?? []));
37
85
  mergedSettings.authenticationProviders = providers;
38
- injector.setExplicitInstance(mergedSettings, HttpAuthenticationSettings);
86
+ injector.bind(HttpAuthenticationSettings, () => mergedSettings);
87
+ injector.invalidate(HttpAuthenticationSettings);
88
+ injector.invalidate(HttpUserContext);
39
89
  };
40
90
  /**
41
- * Sets up a static file server
42
- * @param options The settings for the static file server
43
- * @param options.injector The Injector instance
44
- * @param options.settings Settings for the static file server
45
- * @returns a promise that resolves when the server is ready
91
+ * Attaches a static-file {@link ServerApi} to the pooled HTTP server
92
+ * identified by `options.port`/`options.hostName`.
46
93
  */
47
- export const useStaticFiles = (options) => {
94
+ export const useStaticFiles = async (options) => {
48
95
  const { injector, ...settings } = options;
49
- return injector.getInstance(StaticServerManager).addStaticSite(settings);
96
+ const pool = injector.get(HttpServerPoolToken);
97
+ const record = await pool.acquire({ port: settings.port, hostName: settings.hostName });
98
+ const serverApi = buildStaticSiteServerApi(settings);
99
+ record.apis.push(serverApi);
100
+ return serverApi;
50
101
  };
51
102
  /**
52
- * Sets up a proxy server that forwards HTTP requests from a source URL to a target URL.
53
- *
54
- * The proxy acts as an intermediary, forwarding requests and responses while allowing
55
- * transformation of headers, cookies, and paths. It returns 502 Bad Gateway on errors
56
- * and emits 'onProxyFailed' events for monitoring.
57
- *
58
- * WebSocket connections can also be proxied by setting `enableWebsockets: true`, allowing
59
- * bidirectional real-time communication through the proxy.
60
- *
61
- * @param options The settings for the proxy server
62
- * @param options.injector The Injector instance
63
- * @param options.sourceBaseUrl The base URL path to match for proxying (e.g., '/api', '/old').
64
- * Can be specified with or without a trailing slash.
65
- * @param options.targetBaseUrl The target server URL (must be a valid HTTP/HTTPS URL)
66
- * @param options.pathRewrite Optional function to rewrite the path before forwarding.
67
- * Receives the path after sourceBaseUrl, including leading slash and query string.
68
- * Example: for 'GET /api/users?active=true' with sourceBaseUrl='/api',
69
- * pathRewrite receives '/users?active=true'
70
- * @param options.sourceHostName The hostname for the source server (optional, defaults to all interfaces)
71
- * @param options.sourcePort The port for the source server
72
- * @param options.headers Optional function to transform request headers.
73
- * **Note**: Receives headers AFTER filtering hop-by-hop headers
74
- * (Connection, Keep-Alive, Transfer-Encoding, Upgrade, etc.) for security
75
- * and protocol compliance. The proxy automatically adds X-Forwarded-* headers.
76
- * This transformation applies to both HTTP and WebSocket requests.
77
- * @param options.cookies Optional function to transform request cookies (array of cookie strings)
78
- * @param options.responseCookies Optional function to transform response Set-Cookie headers
79
- * @param options.timeout Optional timeout in milliseconds for proxy requests (default: 30000).
80
- * If exceeded, the request is aborted and 502 is returned.
81
- * Applies to both HTTP and WebSocket upgrade requests.
82
- * @param options.enableWebsockets Optional flag to enable WebSocket proxying (default: false).
83
- * When enabled, WebSocket upgrade requests will be forwarded to the target.
84
- * @returns a promise that resolves when the proxy is set up
85
- * @example
86
- * ```ts
87
- * // Basic HTTP proxy with timeout
88
- * await useProxy({
89
- * injector,
90
- * sourceBaseUrl: '/api',
91
- * targetBaseUrl: 'https://api.example.com',
92
- * sourcePort: 3000,
93
- * timeout: 5000,
94
- * })
95
- *
96
- * // Proxy with WebSocket support
97
- * await useProxy({
98
- * injector,
99
- * sourceBaseUrl: '/ws',
100
- * targetBaseUrl: 'https://ws.example.com',
101
- * sourcePort: 3000,
102
- * enableWebsockets: true,
103
- * })
104
- *
105
- * // Proxy with error monitoring (HTTP and WebSocket)
106
- * const proxyManager = injector.getInstance(ProxyManager)
107
- * proxyManager.subscribe('onProxyFailed', ({ from, to, error }) => {
108
- * console.error(`HTTP Proxy failed: ${from} -> ${to}`, error)
109
- * })
110
- * proxyManager.subscribe('onWebSocketProxyFailed', ({ from, to, error }) => {
111
- * console.error(`WebSocket Proxy failed: ${from} -> ${to}`, error)
112
- * })
113
- * ```
103
+ * Attaches a proxy {@link ServerApi} that forwards HTTP (and optionally
104
+ * WebSocket) traffic from `options.sourceBaseUrl` to `options.targetBaseUrl`.
105
+ * Emits `onProxyFailed` and `onWebSocketProxyFailed` events into the shared
106
+ * {@link ServerTelemetryToken} — subscribe there for observability.
114
107
  */
115
- export const useProxy = (options) => {
108
+ export const useProxy = async (options) => {
116
109
  const { injector, ...settings } = options;
117
- return injector.getInstance(ProxyManager).addProxy(settings);
110
+ const telemetry = injector.get(ServerTelemetryToken);
111
+ const pool = injector.get(HttpServerPoolToken);
112
+ const record = await pool.acquire({ port: settings.sourcePort, hostName: settings.sourceHostName });
113
+ const serverApi = buildProxyServerApi(settings, telemetry);
114
+ record.apis.push(serverApi);
115
+ return serverApi;
118
116
  };
119
117
  //# sourceMappingURL=helpers.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"helpers.js","sourceRoot":"","sources":["../src/helpers.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,wBAAwB,EAAE,MAAM,iBAAiB,CAAA;AAI1D,OAAO,EAAE,qBAAqB,EAAE,MAAM,qBAAqB,CAAA;AAG3D,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAA;AAE7C,OAAO,EAAE,uBAAuB,EAAE,MAAM,mDAAmD,CAAA;AAC3F,OAAO,EAAE,wBAAwB,EAAE,MAAM,oDAAoD,CAAA;AAC7F,OAAO,EAAE,2BAA2B,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,uCAAuC,CAAA;AACpH,OAAO,EAAE,0BAA0B,EAAE,MAAM,mCAAmC,CAAA;AAG9E,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAA;AAEjD,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;;;;;;;;GAQG;AACH,MAAM,CAAC,MAAM,qBAAqB,GAAG,CACnC,QAAkB,EAClB,QAA+D,EAC/D,EAAE;IACF,MAAM,cAAc,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,0BAA0B,EAAmB,EAAE,QAAQ,CAAC,CAAA;IACjG,MAAM,cAAc,GAAG,wBAAwB,CAAC,EAAE,QAAQ,EAAE,QAAQ,EAAE,uBAAuB,EAAE,CAAC,CAAA;IAChG,MAAM,qBAAqB,GAAG,QAAQ,CAAC,WAAW,CAAC,qBAAqB,CAAC,CAAA;IACzE,MAAM,WAAW,GAAG,cAAc,CAAC,cAAc,CAAC,cAAc,CAAyC,CAAA;IACzG,MAAM,cAAc,GAAG,cAAc,CAAC,iBAAiB,CAAC,cAAc,CAGrE,CAAA;IAED,MAAM,SAAS,GAA6B,EAAE,CAAA;IAE9C,IAAI,cAAc,CAAC,eAAe,EAAE,CAAC;QACnC,SAAS,CAAC,IAAI,CACZ,uBAAuB,CAAC,CAAC,QAAQ,EAAE,QAAQ,EAAE,EAAE,CAC7C,2BAA2B,CAAC,qBAAqB,EAAE,WAAW,EAAE,cAAc,EAAE,QAAQ,EAAE,QAAQ,CAAC,CACpG,CACF,CAAA;IACH,CAAC;IAED,SAAS,CAAC,IAAI,CACZ,wBAAwB,CACtB,cAAc,CAAC,UAAU,EACzB,CAAC,SAAS,EAAE,EAAE,CAAC,eAAe,CAAC,cAAc,EAAE,cAAc,EAAE,SAAS,CAAC,EACzE,CAAC,QAAQ,EAAE,EAAE,CAAC,cAAc,CAAC,WAAW,EAAE,cAAc,EAAE,QAAQ,CAAC,CACpE,CACF,CAAA;IAED,SAAS,CAAC,IAAI,CAAC,GAAG,CAAC,QAAQ,EAAE,uBAAuB,IAAI,EAAE,CAAC,CAAC,CAAA;IAC5D,cAAc,CAAC,uBAAuB,GAAG,SAAS,CAAA;IAElD,QAAQ,CAAC,mBAAmB,CAAC,cAAc,EAAE,0BAA0B,CAAC,CAAA;AAC1E,CAAC,CAAA;AAED;;;;;;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;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+DG;AACH,MAAM,CAAC,MAAM,QAAQ,GAAG,CAAC,OAA8C,EAAE,EAAE;IACzE,MAAM,EAAE,QAAQ,EAAE,GAAG,QAAQ,EAAE,GAAG,OAAO,CAAA;IACzC,OAAO,QAAQ,CAAC,WAAW,CAAC,YAAY,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAA;AAC9D,CAAC,CAAA"}
1
+ {"version":3,"file":"helpers.js","sourceRoot":"","sources":["../src/helpers.ts"],"names":[],"mappings":"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"}
@@ -1,2 +1,3 @@
1
- export {};
1
+ import type { User } from '@furystack/core';
2
+ export type { User };
2
3
  //# sourceMappingURL=helpers.spec.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"helpers.spec.d.ts","sourceRoot":"","sources":["../src/helpers.spec.ts"],"names":[],"mappings":""}
1
+ {"version":3,"file":"helpers.spec.d.ts","sourceRoot":"","sources":["../src/helpers.spec.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,iBAAiB,CAAA;AA4G3C,YAAY,EAAE,IAAI,EAAE,CAAA"}