@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,52 +1,46 @@
1
- import { InMemoryStore, User, addStore } from '@furystack/core';
1
+ import { InMemoryStore, User as UserModel } from '@furystack/core';
2
2
  import { getPort } from '@furystack/core/port-generator';
3
- import { Injector } from '@furystack/inject';
4
- import { getRepository } from '@furystack/repository';
5
- import { PasswordCredential, PasswordResetToken, usePasswordPolicy } from '@furystack/security';
3
+ import { createInjector } from '@furystack/inject';
4
+ import { PasswordCredential, PasswordCredentialStore, PasswordResetToken, PasswordResetTokenStore, usePasswordPolicy, } from '@furystack/security';
6
5
  import { usingAsync } from '@furystack/utils';
7
6
  import { describe, expect, it } from 'vitest';
8
- import { ApiManager } from './api-manager.js';
9
7
  import { useHttpAuthentication, useProxy, useRestService, useStaticFiles } from './helpers.js';
10
8
  import { HttpAuthenticationSettings } from './http-authentication-settings.js';
9
+ import { HttpServerPoolToken } from './http-server-pool.js';
11
10
  import { DefaultSession } from './models/default-session.js';
12
- import { ProxyManager } from './proxy-manager.js';
13
- import { StaticServerManager } from './static-server-manager.js';
11
+ import { SessionStore, UserStore } from './user-store.js';
14
12
  const setupAuthStores = (i) => {
15
- addStore(i, new InMemoryStore({ model: User, primaryKey: 'username' }))
16
- .addStore(new InMemoryStore({ model: DefaultSession, primaryKey: 'sessionId' }))
17
- .addStore(new InMemoryStore({ model: PasswordCredential, primaryKey: 'userName' }))
18
- .addStore(new InMemoryStore({ model: PasswordResetToken, primaryKey: 'token' }));
19
- const repo = getRepository(i);
20
- repo.createDataSet(User, 'username');
21
- repo.createDataSet(DefaultSession, 'sessionId');
22
- repo.createDataSet(PasswordCredential, 'userName');
23
- repo.createDataSet(PasswordResetToken, 'token');
13
+ i.bind(UserStore, () => new InMemoryStore({ model: UserModel, primaryKey: 'username' }));
14
+ i.bind(SessionStore, () => new InMemoryStore({ model: DefaultSession, primaryKey: 'sessionId' }));
15
+ i.bind(PasswordCredentialStore, () => new InMemoryStore({ model: PasswordCredential, primaryKey: 'userName' }));
16
+ i.bind(PasswordResetTokenStore, () => new InMemoryStore({ model: PasswordResetToken, primaryKey: 'token' }));
24
17
  usePasswordPolicy(i);
25
18
  };
26
- describe('Injector extensions', () => {
19
+ describe('rest-service setup helpers', () => {
27
20
  describe('useHttpAuthentication', () => {
28
- it('Should set up HTTP Authentication', async () => {
29
- await usingAsync(new Injector(), async (i) => {
21
+ it('binds HttpAuthenticationSettings on the injector', async () => {
22
+ await usingAsync(createInjector(), async (i) => {
30
23
  setupAuthStores(i);
31
24
  useHttpAuthentication(i);
32
- expect(i.cachedSingletons.get(HttpAuthenticationSettings)).toBeDefined();
25
+ const settings = i.get(HttpAuthenticationSettings);
26
+ expect(settings).toBeDefined();
33
27
  });
34
28
  });
35
- it('Should register basic-auth and cookie-auth providers by default', async () => {
36
- await usingAsync(new Injector(), async (i) => {
29
+ it('registers basic-auth and cookie-auth providers by default', async () => {
30
+ await usingAsync(createInjector(), async (i) => {
37
31
  setupAuthStores(i);
38
32
  useHttpAuthentication(i);
39
- const settings = i.getInstance(HttpAuthenticationSettings);
33
+ const settings = i.get(HttpAuthenticationSettings);
40
34
  const providerNames = settings.authenticationProviders.map((p) => p.name);
41
35
  expect(providerNames).toContain('basic-auth');
42
36
  expect(providerNames).toContain('cookie-auth');
43
37
  });
44
38
  });
45
- it('Should not register basic-auth provider when disabled', async () => {
46
- await usingAsync(new Injector(), async (i) => {
39
+ it('omits the basic-auth provider when enableBasicAuth is false', async () => {
40
+ await usingAsync(createInjector(), async (i) => {
47
41
  setupAuthStores(i);
48
42
  useHttpAuthentication(i, { enableBasicAuth: false });
49
- const settings = i.getInstance(HttpAuthenticationSettings);
43
+ const settings = i.get(HttpAuthenticationSettings);
50
44
  const providerNames = settings.authenticationProviders.map((p) => p.name);
51
45
  expect(providerNames).not.toContain('basic-auth');
52
46
  expect(providerNames).toContain('cookie-auth');
@@ -54,35 +48,44 @@ describe('Injector extensions', () => {
54
48
  });
55
49
  });
56
50
  describe('useRestService()', () => {
57
- it('Should set up a REST service', async () => {
58
- await usingAsync(new Injector(), async (i) => {
51
+ it('acquires a pooled HTTP server and attaches a serverApi', async () => {
52
+ await usingAsync(createInjector(), async (i) => {
59
53
  const port = getPort();
60
- await useRestService({ injector: i, api: {}, root: '/', port });
61
- expect(i.cachedSingletons.get(ApiManager)).toBeDefined();
54
+ const serverApi = await useRestService({ injector: i, api: {}, root: '/', port });
55
+ expect(serverApi).toBeDefined();
56
+ const pool = i.get(HttpServerPoolToken);
57
+ const record = await pool.acquire({ port });
58
+ expect(record.apis).toContain(serverApi);
62
59
  });
63
60
  });
64
61
  });
65
62
  describe('useStaticFiles()', () => {
66
- it('Should set up a static file server', async () => {
67
- await usingAsync(new Injector(), async (i) => {
63
+ it('attaches a static-file serverApi to the pooled HTTP server', async () => {
64
+ await usingAsync(createInjector(), async (i) => {
68
65
  const port = getPort();
69
- await useStaticFiles({ injector: i, baseUrl: '/', path: '.', port });
70
- expect(i.cachedSingletons.get(StaticServerManager)).toBeDefined();
66
+ const serverApi = await useStaticFiles({ injector: i, baseUrl: '/', path: '.', port });
67
+ expect(serverApi).toBeDefined();
68
+ const pool = i.get(HttpServerPoolToken);
69
+ const record = await pool.acquire({ port });
70
+ expect(record.apis).toContain(serverApi);
71
71
  });
72
72
  });
73
73
  });
74
74
  describe('useProxy()', () => {
75
- it('Should set up a proxy server', async () => {
76
- await usingAsync(new Injector(), async (i) => {
75
+ it('attaches a proxy serverApi to the pooled HTTP server', async () => {
76
+ await usingAsync(createInjector(), async (i) => {
77
77
  const sourcePort = getPort();
78
78
  const targetPort = getPort();
79
- await useProxy({
79
+ const serverApi = await useProxy({
80
80
  injector: i,
81
81
  sourceBaseUrl: '/api',
82
82
  targetBaseUrl: `http://localhost:${targetPort}`,
83
83
  sourcePort,
84
84
  });
85
- expect(i.cachedSingletons.get(ProxyManager)).toBeDefined();
85
+ expect(serverApi).toBeDefined();
86
+ const pool = i.get(HttpServerPoolToken);
87
+ const record = await pool.acquire({ port: sourcePort });
88
+ expect(record.apis).toContain(serverApi);
86
89
  });
87
90
  });
88
91
  });
@@ -1 +1 @@
1
- {"version":3,"file":"helpers.spec.js","sourceRoot":"","sources":["../src/helpers.spec.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"helpers.spec.js","sourceRoot":"","sources":["../src/helpers.spec.ts"],"names":[],"mappings":"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"}
@@ -1,22 +1,66 @@
1
- import { User } from '@furystack/core';
2
- import type { Constructable, Injector } from '@furystack/inject';
1
+ import type { User } from '@furystack/core';
2
+ import { type Token } from '@furystack/inject';
3
+ import type { DataSetToken } from '@furystack/repository';
3
4
  import type { AuthenticationProvider } from './authentication-providers/authentication-provider.js';
4
- import { DefaultSession } from './models/default-session.js';
5
+ import type { DefaultSession } from './models/default-session.js';
5
6
  /**
6
- * Authentication settings object for FuryStack HTTP Api
7
+ * HTTP-authentication settings — rebound by {@link useHttpAuthentication}
8
+ * during application setup and consumed by {@link HttpUserContext},
9
+ * cookie-login strategies and OpenAPI generators.
10
+ *
11
+ * `userDataSet` / `sessionDataSet` are token references — consumers resolve
12
+ * them through the injector at the appropriate scope. `authenticationProviders`
13
+ * is an ordered list walked by {@link HttpUserContext} on every
14
+ * unauthenticated request.
7
15
  */
8
- export declare class HttpAuthenticationSettings<TUser extends User, TSession extends DefaultSession> {
9
- model: Constructable<TUser>;
10
- getUserDataSet: (injector: Injector) => import("@furystack/repository").DataSet<TUser, "username" & keyof TUser, import("@furystack/core").WithOptionalId<TUser, "username" & keyof TUser>>;
11
- sessionModel: Constructable<TSession>;
12
- getSessionDataSet: (injector: Injector) => import("@furystack/repository").DataSet<TSession, "sessionId" & keyof TSession, import("@furystack/core").WithOptionalId<TSession, "sessionId" & keyof TSession>>;
16
+ export interface HttpAuthenticationSettings {
17
+ /** Data set token for user lookups. */
18
+ userDataSet: DataSetToken<User, 'username'>;
19
+ /** Data set token for session lookups. */
20
+ sessionDataSet: DataSetToken<DefaultSession, 'sessionId'>;
21
+ /** Cookie name used by the built-in cookie-auth provider. */
13
22
  cookieName: string;
23
+ /** Whether the built-in Basic Auth provider is installed by {@link useHttpAuthentication}. */
14
24
  enableBasicAuth: boolean;
15
25
  /**
16
- * Ordered list of authentication providers. Populated by {@link useHttpAuthentication}
17
- * and extended by `useJwtAuthentication()` or other auth plugins.
18
- * Safe to mutate only during setup, before the first request is served.
26
+ * Ordered list of authentication providers. Populated during
27
+ * {@link useHttpAuthentication} and extended by plugins such as
28
+ * `useJwtAuthentication`.
19
29
  */
20
30
  authenticationProviders: AuthenticationProvider[];
31
+ /**
32
+ * TTL applied to the user-resolution cache. Every authenticated request
33
+ * runs at most one provider chain walk per cache key per TTL window;
34
+ * subsequent calls within the window return the cached `User`.
35
+ *
36
+ * Bounds the staleness window for out-of-band identity changes
37
+ * (session invalidation on a sibling instance, role mutation in storage,
38
+ * etc.) when the application is deployed across multiple nodes.
39
+ *
40
+ * Set to `0` to disable caching entirely. When omitted, the default
41
+ * {@link DEFAULT_USER_CACHE_TTL_MS} is used by `UserResolutionCache`.
42
+ */
43
+ userCacheTtlMs?: number;
44
+ /**
45
+ * Maximum number of entries in the user-resolution cache before LRU
46
+ * eviction kicks in. When omitted, the default
47
+ * {@link DEFAULT_USER_CACHE_CAPACITY} is used by `UserResolutionCache`.
48
+ */
49
+ userCacheCapacity?: number;
21
50
  }
51
+ /** Default TTL applied to the user-resolution cache (30 seconds). */
52
+ export declare const DEFAULT_USER_CACHE_TTL_MS = 30000;
53
+ /** Default LRU capacity ceiling for the user-resolution cache. */
54
+ export declare const DEFAULT_USER_CACHE_CAPACITY = 10000;
55
+ /**
56
+ * Returns a fresh copy of the default {@link HttpAuthenticationSettings}.
57
+ * Used as the starting point inside {@link useHttpAuthentication}.
58
+ */
59
+ export declare const defaultHttpAuthenticationSettings: () => HttpAuthenticationSettings;
60
+ /**
61
+ * DI token carrying the current {@link HttpAuthenticationSettings}. Rebind
62
+ * via {@link useHttpAuthentication} (preferred) or directly through
63
+ * {@link Injector.bind} for advanced scenarios.
64
+ */
65
+ export declare const HttpAuthenticationSettings: Token<HttpAuthenticationSettings, 'singleton'>;
22
66
  //# sourceMappingURL=http-authentication-settings.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"http-authentication-settings.d.ts","sourceRoot":"","sources":["../src/http-authentication-settings.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,iBAAiB,CAAA;AACtC,OAAO,KAAK,EAAE,aAAa,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAA;AAGhE,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,uDAAuD,CAAA;AACnG,OAAO,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAA;AAE5D;;GAEG;AACH,qBACa,0BAA0B,CAAC,KAAK,SAAS,IAAI,EAAE,QAAQ,SAAS,cAAc;IAClF,KAAK,EAAE,aAAa,CAAC,KAAK,CAAC,CAA+B;IAE1D,cAAc,GAAI,UAAU,QAAQ,yJACkC;IAEtE,YAAY,EAAE,aAAa,CAAC,QAAQ,CAAC,CAA4C;IAEjF,iBAAiB,GAAI,UAAU,QAAQ,uKAC2C;IAElF,UAAU,SAAQ;IAClB,eAAe,UAAO;IAE7B;;;;OAIG;IACI,uBAAuB,EAAE,sBAAsB,EAAE,CAAK;CAC9D"}
1
+ {"version":3,"file":"http-authentication-settings.d.ts","sourceRoot":"","sources":["../src/http-authentication-settings.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,iBAAiB,CAAA;AAE3C,OAAO,EAAiB,KAAK,KAAK,EAAE,MAAM,mBAAmB,CAAA;AAC7D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAA;AACzD,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,uDAAuD,CAAA;AAGnG,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAA;AAGjE;;;;;;;;;GASG;AACH,MAAM,WAAW,0BAA0B;IACzC,uCAAuC;IACvC,WAAW,EAAE,YAAY,CAAC,IAAI,EAAE,UAAU,CAAC,CAAA;IAC3C,0CAA0C;IAC1C,cAAc,EAAE,YAAY,CAAC,cAAc,EAAE,WAAW,CAAC,CAAA;IACzD,6DAA6D;IAC7D,UAAU,EAAE,MAAM,CAAA;IAClB,8FAA8F;IAC9F,eAAe,EAAE,OAAO,CAAA;IACxB;;;;OAIG;IACH,uBAAuB,EAAE,sBAAsB,EAAE,CAAA;IACjD;;;;;;;;;;;OAWG;IACH,cAAc,CAAC,EAAE,MAAM,CAAA;IACvB;;;;OAIG;IACH,iBAAiB,CAAC,EAAE,MAAM,CAAA;CAC3B;AAED,qEAAqE;AACrE,eAAO,MAAM,yBAAyB,QAAS,CAAA;AAE/C,kEAAkE;AAClE,eAAO,MAAM,2BAA2B,QAAS,CAAA;AAEjD;;;GAGG;AACH,eAAO,MAAM,iCAAiC,QAAO,0BAQnD,CAAA;AAEF;;;;GAIG;AACH,eAAO,MAAM,0BAA0B,EAAE,KAAK,CAAC,0BAA0B,EAAE,WAAW,CAIpF,CAAA"}
@@ -1,32 +1,30 @@
1
- var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
2
- var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
3
- if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
4
- else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
5
- return c > 3 && r && Object.defineProperty(target, key, r), r;
6
- };
7
- import { User } from '@furystack/core';
8
- import { Injectable } from '@furystack/inject';
9
- import { getDataSetFor } from '@furystack/repository';
10
- import { DefaultSession } from './models/default-session.js';
1
+ import { defineService } from '@furystack/inject';
2
+ import { SessionDataSet, UserDataSet } from './user-store.js';
3
+ /** Default TTL applied to the user-resolution cache (30 seconds). */
4
+ export const DEFAULT_USER_CACHE_TTL_MS = 30_000;
5
+ /** Default LRU capacity ceiling for the user-resolution cache. */
6
+ export const DEFAULT_USER_CACHE_CAPACITY = 10_000;
11
7
  /**
12
- * Authentication settings object for FuryStack HTTP Api
8
+ * Returns a fresh copy of the default {@link HttpAuthenticationSettings}.
9
+ * Used as the starting point inside {@link useHttpAuthentication}.
13
10
  */
14
- let HttpAuthenticationSettings = class HttpAuthenticationSettings {
15
- model = User;
16
- getUserDataSet = (injector) => getDataSetFor(injector, this.model, 'username');
17
- sessionModel = DefaultSession;
18
- getSessionDataSet = (injector) => getDataSetFor(injector, this.sessionModel, 'sessionId');
19
- cookieName = 'fss';
20
- enableBasicAuth = true;
21
- /**
22
- * Ordered list of authentication providers. Populated by {@link useHttpAuthentication}
23
- * and extended by `useJwtAuthentication()` or other auth plugins.
24
- * Safe to mutate only during setup, before the first request is served.
25
- */
26
- authenticationProviders = [];
27
- };
28
- HttpAuthenticationSettings = __decorate([
29
- Injectable({ lifetime: 'singleton' })
30
- ], HttpAuthenticationSettings);
31
- export { HttpAuthenticationSettings };
11
+ export const defaultHttpAuthenticationSettings = () => ({
12
+ userDataSet: UserDataSet,
13
+ sessionDataSet: SessionDataSet,
14
+ cookieName: 'fss',
15
+ enableBasicAuth: true,
16
+ authenticationProviders: [],
17
+ userCacheTtlMs: DEFAULT_USER_CACHE_TTL_MS,
18
+ userCacheCapacity: DEFAULT_USER_CACHE_CAPACITY,
19
+ });
20
+ /**
21
+ * DI token carrying the current {@link HttpAuthenticationSettings}. Rebind
22
+ * via {@link useHttpAuthentication} (preferred) or directly through
23
+ * {@link Injector.bind} for advanced scenarios.
24
+ */
25
+ export const HttpAuthenticationSettings = defineService({
26
+ name: 'furystack/rest-service/HttpAuthenticationSettings',
27
+ lifetime: 'singleton',
28
+ factory: () => defaultHttpAuthenticationSettings(),
29
+ });
32
30
  //# sourceMappingURL=http-authentication-settings.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"http-authentication-settings.js","sourceRoot":"","sources":["../src/http-authentication-settings.ts"],"names":[],"mappings":";;;;;;AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,iBAAiB,CAAA;AAEtC,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAA;AAC9C,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAA;AAErD,OAAO,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAA;AAE5D;;GAEG;AAEI,IAAM,0BAA0B,GAAhC,MAAM,0BAA0B;IAC9B,KAAK,GAAyB,IAA4B,CAAA;IAE1D,cAAc,GAAG,CAAC,QAAkB,EAAE,EAAE,CAC7C,aAAa,CAAC,QAAQ,EAAE,IAAI,CAAC,KAAK,EAAE,UAAsC,CAAC,CAAA;IAEtE,YAAY,GAA4B,cAAyC,CAAA;IAEjF,iBAAiB,GAAG,CAAC,QAAkB,EAAE,EAAE,CAChD,aAAa,CAAC,QAAQ,EAAE,IAAI,CAAC,YAAY,EAAE,WAA2C,CAAC,CAAA;IAElF,UAAU,GAAG,KAAK,CAAA;IAClB,eAAe,GAAG,IAAI,CAAA;IAE7B;;;;OAIG;IACI,uBAAuB,GAA6B,EAAE,CAAA;CAC9D,CAAA;AApBY,0BAA0B;IADtC,UAAU,CAAC,EAAE,QAAQ,EAAE,WAAW,EAAE,CAAC;GACzB,0BAA0B,CAoBtC"}
1
+ {"version":3,"file":"http-authentication-settings.js","sourceRoot":"","sources":["../src/http-authentication-settings.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,aAAa,EAAc,MAAM,mBAAmB,CAAA;AAM7D,OAAO,EAAE,cAAc,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAA;AAgD7D,qEAAqE;AACrE,MAAM,CAAC,MAAM,yBAAyB,GAAG,MAAM,CAAA;AAE/C,kEAAkE;AAClE,MAAM,CAAC,MAAM,2BAA2B,GAAG,MAAM,CAAA;AAEjD;;;GAGG;AACH,MAAM,CAAC,MAAM,iCAAiC,GAAG,GAA+B,EAAE,CAAC,CAAC;IAClF,WAAW,EAAE,WAAW;IACxB,cAAc,EAAE,cAAc;IAC9B,UAAU,EAAE,KAAK;IACjB,eAAe,EAAE,IAAI;IACrB,uBAAuB,EAAE,EAAE;IAC3B,cAAc,EAAE,yBAAyB;IACzC,iBAAiB,EAAE,2BAA2B;CAC/C,CAAC,CAAA;AAEF;;;;GAIG;AACH,MAAM,CAAC,MAAM,0BAA0B,GAAmD,aAAa,CAAC;IACtG,IAAI,EAAE,mDAAmD;IACzD,QAAQ,EAAE,WAAW;IACrB,OAAO,EAAE,GAAG,EAAE,CAAC,iCAAiC,EAAE;CACnD,CAAC,CAAA"}
@@ -0,0 +1,64 @@
1
+ import { type Token } from '@furystack/inject';
2
+ import type { IncomingMessage, Server, ServerResponse } from 'http';
3
+ import type { Duplex } from 'stream';
4
+ /**
5
+ * Options accepted by {@link HttpServerPool.acquire}.
6
+ */
7
+ export interface ServerOptions {
8
+ hostName?: string;
9
+ port: number;
10
+ }
11
+ /** Payload passed to every {@link ServerApi.onRequest} invocation. */
12
+ export interface OnRequest {
13
+ req: IncomingMessage;
14
+ res: ServerResponse;
15
+ }
16
+ /** Payload passed to every {@link ServerApi.onUpgrade} invocation. */
17
+ export interface OnUpgrade {
18
+ req: IncomingMessage;
19
+ socket: Duplex;
20
+ head: Buffer;
21
+ }
22
+ /**
23
+ * Contract every server-side consumer (REST, static sites, proxies,
24
+ * websockets) implements. Pushed into {@link ServerRecord.apis} by
25
+ * `useRestService` / `useStaticFiles` / `useProxy` / websocket wiring.
26
+ */
27
+ export interface ServerApi {
28
+ shouldExec: (options: OnRequest) => boolean;
29
+ onRequest: (options: OnRequest) => Promise<void>;
30
+ onUpgrade?: (options: OnUpgrade) => Promise<void>;
31
+ }
32
+ /**
33
+ * Shared-port registry entry. Multiple {@link ServerApi}s attached to the
34
+ * same `port`/`hostName` share a single `http.Server` via the pool and
35
+ * dispatch to the first matching `shouldExec`.
36
+ */
37
+ export interface ServerRecord {
38
+ server: Server;
39
+ apis: ServerApi[];
40
+ }
41
+ export declare const DEFAULT_HOST = "localhost";
42
+ /**
43
+ * Public surface of the {@link HttpServerPoolToken}. Acquires shared
44
+ * `http.Server` instances keyed by url. Consumers push their
45
+ * {@link ServerApi}s onto the returned record's `apis` array.
46
+ *
47
+ * Internal to the rest-service package — application code interacts with
48
+ * the pool indirectly through `useRestService` / `useStaticFiles` /
49
+ * `useProxy`.
50
+ */
51
+ export interface HttpServerPool {
52
+ /**
53
+ * Returns the {@link ServerRecord} for the given options, opening a new
54
+ * `http.Server` on first request and returning the cached instance on
55
+ * subsequent requests to the same url.
56
+ */
57
+ acquire(options: ServerOptions): Promise<ServerRecord>;
58
+ }
59
+ /**
60
+ * DI token for the {@link HttpServerPool}. Scoped so each test / application
61
+ * scope has its own set of HTTP servers and sockets.
62
+ */
63
+ export declare const HttpServerPoolToken: Token<HttpServerPool, 'scoped'>;
64
+ //# sourceMappingURL=http-server-pool.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"http-server-pool.d.ts","sourceRoot":"","sources":["../src/http-server-pool.ts"],"names":[],"mappings":"AAAA,OAAO,EAAiB,KAAK,KAAK,EAAE,MAAM,mBAAmB,CAAA;AAC7D,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,MAAM,CAAA;AAGnE,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAA;AAGpC;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,IAAI,EAAE,MAAM,CAAA;CACb;AAED,sEAAsE;AACtE,MAAM,WAAW,SAAS;IACxB,GAAG,EAAE,eAAe,CAAA;IACpB,GAAG,EAAE,cAAc,CAAA;CACpB;AAED,sEAAsE;AACtE,MAAM,WAAW,SAAS;IACxB,GAAG,EAAE,eAAe,CAAA;IACpB,MAAM,EAAE,MAAM,CAAA;IACd,IAAI,EAAE,MAAM,CAAA;CACb;AAED;;;;GAIG;AACH,MAAM,WAAW,SAAS;IACxB,UAAU,EAAE,CAAC,OAAO,EAAE,SAAS,KAAK,OAAO,CAAA;IAC3C,SAAS,EAAE,CAAC,OAAO,EAAE,SAAS,KAAK,OAAO,CAAC,IAAI,CAAC,CAAA;IAChD,SAAS,CAAC,EAAE,CAAC,OAAO,EAAE,SAAS,KAAK,OAAO,CAAC,IAAI,CAAC,CAAA;CAClD;AAED;;;;GAIG;AACH,MAAM,WAAW,YAAY;IAC3B,MAAM,EAAE,MAAM,CAAA;IACd,IAAI,EAAE,SAAS,EAAE,CAAA;CAClB;AAED,eAAO,MAAM,YAAY,cAAc,CAAA;AAIvC;;;;;;;;GAQG;AACH,MAAM,WAAW,cAAc;IAC7B;;;;OAIG;IACH,OAAO,CAAC,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,YAAY,CAAC,CAAA;CACvD;AAED;;;GAGG;AACH,eAAO,MAAM,mBAAmB,EAAE,KAAK,CAAC,cAAc,EAAE,QAAQ,CA6F9D,CAAA"}
@@ -0,0 +1,95 @@
1
+ import { defineService } from '@furystack/inject';
2
+ import { createServer } from 'http';
3
+ import { ServerTelemetryToken } from './server-telemetry.js';
4
+ export const DEFAULT_HOST = 'localhost';
5
+ const buildHostUrl = (options) => `http://${options.hostName ?? DEFAULT_HOST}:${options.port}`;
6
+ /**
7
+ * DI token for the {@link HttpServerPool}. Scoped so each test / application
8
+ * scope has its own set of HTTP servers and sockets.
9
+ */
10
+ export const HttpServerPoolToken = defineService({
11
+ name: 'furystack/rest-service/HttpServerPool',
12
+ lifetime: 'scoped',
13
+ factory: ({ inject, onDispose }) => {
14
+ const telemetry = inject(ServerTelemetryToken);
15
+ const servers = new Map();
16
+ const pendingCreates = new Map();
17
+ const openedSockets = new Set();
18
+ const trackConnection = (socket) => {
19
+ openedSockets.add(socket);
20
+ socket.once('close', () => openedSockets.delete(socket));
21
+ };
22
+ const createRecord = async (url, options) => {
23
+ const apis = [];
24
+ const server = createServer((req, res) => {
25
+ const apiMatch = apis.find((api) => api.shouldExec({ req, res }));
26
+ if (apiMatch) {
27
+ apiMatch.onRequest({ req, res }).catch((error) => {
28
+ telemetry.emit('onRequestFailed', [error, req, res]);
29
+ });
30
+ return;
31
+ }
32
+ res.destroy();
33
+ });
34
+ server.on('upgrade', (req, socket, head) => {
35
+ const apiMatch = apis.find((api) => api.shouldExec({ req, res: {} }));
36
+ if (apiMatch?.onUpgrade) {
37
+ apiMatch.onUpgrade({ req, socket, head }).catch((error) => {
38
+ telemetry.emit('onRequestFailed', [error, req, {}]);
39
+ socket.destroy();
40
+ });
41
+ return;
42
+ }
43
+ socket.destroy();
44
+ });
45
+ server.on('connection', trackConnection);
46
+ try {
47
+ await new Promise((resolve, reject) => {
48
+ server.on('listening', () => resolve());
49
+ server.on('error', (err) => reject(err));
50
+ server.listen(options.port, options.hostName);
51
+ });
52
+ const record = { server, apis };
53
+ servers.set(url, record);
54
+ telemetry.emit('onServerListening', { url, port: options.port, hostName: options.hostName });
55
+ return record;
56
+ }
57
+ finally {
58
+ pendingCreates.delete(url);
59
+ }
60
+ };
61
+ onDispose(async () => {
62
+ await Promise.allSettled([...pendingCreates.values()]);
63
+ openedSockets.forEach((socket) => socket.destroy());
64
+ await Promise.allSettled([...servers.entries()].map(([url, record]) => new Promise((resolve, reject) => {
65
+ record.server.close((err) => {
66
+ if (err) {
67
+ reject(err);
68
+ return;
69
+ }
70
+ telemetry.emit('onServerClosed', { url });
71
+ resolve();
72
+ });
73
+ record.server.off('connection', trackConnection);
74
+ })));
75
+ servers.clear();
76
+ });
77
+ return {
78
+ acquire: async (options) => {
79
+ const url = buildHostUrl(options);
80
+ const existing = servers.get(url);
81
+ if (existing) {
82
+ return existing;
83
+ }
84
+ const pending = pendingCreates.get(url);
85
+ if (pending) {
86
+ return pending;
87
+ }
88
+ const createPromise = createRecord(url, options);
89
+ pendingCreates.set(url, createPromise);
90
+ return createPromise;
91
+ },
92
+ };
93
+ },
94
+ });
95
+ //# sourceMappingURL=http-server-pool.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"http-server-pool.js","sourceRoot":"","sources":["../src/http-server-pool.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=http-server-pool.spec.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"http-server-pool.spec.d.ts","sourceRoot":"","sources":["../src/http-server-pool.spec.ts"],"names":[],"mappings":""}