@furystack/rest-service 12.3.5 → 14.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (252) hide show
  1. package/CHANGELOG.md +55 -0
  2. package/README.md +47 -28
  3. package/esm/actions/get-current-user.spec.js +10 -6
  4. package/esm/actions/get-current-user.spec.js.map +1 -1
  5. package/esm/actions/index.d.ts +0 -1
  6. package/esm/actions/index.d.ts.map +1 -1
  7. package/esm/actions/index.js +0 -1
  8. package/esm/actions/index.js.map +1 -1
  9. package/esm/actions/is-authenticated.spec.js +10 -6
  10. package/esm/actions/is-authenticated.spec.js.map +1 -1
  11. package/esm/actions/logout-action.spec.js +11 -9
  12. package/esm/actions/logout-action.spec.js.map +1 -1
  13. package/esm/actions/logout.js +1 -1
  14. package/esm/actions/logout.js.map +1 -1
  15. package/esm/actions/password-login-action.js +1 -1
  16. package/esm/actions/password-login-action.js.map +1 -1
  17. package/esm/actions/password-login-action.spec.js +23 -28
  18. package/esm/actions/password-login-action.spec.js.map +1 -1
  19. package/esm/authenticate.js +1 -1
  20. package/esm/authenticate.js.map +1 -1
  21. package/esm/authenticate.spec.js +41 -33
  22. package/esm/authenticate.spec.js.map +1 -1
  23. package/esm/authorize.spec.js +34 -29
  24. package/esm/authorize.spec.js.map +1 -1
  25. package/esm/endpoint-generators/create-delete-endpoint.d.ts +6 -11
  26. package/esm/endpoint-generators/create-delete-endpoint.d.ts.map +1 -1
  27. package/esm/endpoint-generators/create-delete-endpoint.js +7 -11
  28. package/esm/endpoint-generators/create-delete-endpoint.js.map +1 -1
  29. package/esm/endpoint-generators/create-delete-endpoint.spec.js +14 -21
  30. package/esm/endpoint-generators/create-delete-endpoint.spec.js.map +1 -1
  31. package/esm/endpoint-generators/create-get-collection-endpoint.d.ts +11 -11
  32. package/esm/endpoint-generators/create-get-collection-endpoint.d.ts.map +1 -1
  33. package/esm/endpoint-generators/create-get-collection-endpoint.js +13 -12
  34. package/esm/endpoint-generators/create-get-collection-endpoint.js.map +1 -1
  35. package/esm/endpoint-generators/create-get-collection-endpoint.spec.js +43 -70
  36. package/esm/endpoint-generators/create-get-collection-endpoint.spec.js.map +1 -1
  37. package/esm/endpoint-generators/create-get-entity-endpoint.d.ts +6 -11
  38. package/esm/endpoint-generators/create-get-entity-endpoint.d.ts.map +1 -1
  39. package/esm/endpoint-generators/create-get-entity-endpoint.js +7 -11
  40. package/esm/endpoint-generators/create-get-entity-endpoint.js.map +1 -1
  41. package/esm/endpoint-generators/create-get-entity-endpoint.spec.js +16 -33
  42. package/esm/endpoint-generators/create-get-entity-endpoint.spec.js.map +1 -1
  43. package/esm/endpoint-generators/create-get-openapi-document-action.d.ts +1 -15
  44. package/esm/endpoint-generators/create-get-openapi-document-action.d.ts.map +1 -1
  45. package/esm/endpoint-generators/create-get-openapi-document-action.js +1 -24
  46. package/esm/endpoint-generators/create-get-openapi-document-action.js.map +1 -1
  47. package/esm/endpoint-generators/create-get-schema-action.d.ts +1 -1
  48. package/esm/endpoint-generators/create-get-schema-action.d.ts.map +1 -1
  49. package/esm/endpoint-generators/create-get-schema-action.js.map +1 -1
  50. package/esm/endpoint-generators/create-patch-endpoint.d.ts +7 -13
  51. package/esm/endpoint-generators/create-patch-endpoint.d.ts.map +1 -1
  52. package/esm/endpoint-generators/create-patch-endpoint.js +8 -13
  53. package/esm/endpoint-generators/create-patch-endpoint.js.map +1 -1
  54. package/esm/endpoint-generators/create-patch-endpoint.spec.js +10 -17
  55. package/esm/endpoint-generators/create-patch-endpoint.spec.js.map +1 -1
  56. package/esm/endpoint-generators/create-post-endpoint.d.ts +7 -13
  57. package/esm/endpoint-generators/create-post-endpoint.d.ts.map +1 -1
  58. package/esm/endpoint-generators/create-post-endpoint.js +8 -13
  59. package/esm/endpoint-generators/create-post-endpoint.js.map +1 -1
  60. package/esm/endpoint-generators/create-post-endpoint.spec.js +41 -14
  61. package/esm/endpoint-generators/create-post-endpoint.spec.js.map +1 -1
  62. package/esm/endpoint-generators/utils.d.ts +17 -2
  63. package/esm/endpoint-generators/utils.d.ts.map +1 -1
  64. package/esm/endpoint-generators/utils.js +33 -20
  65. package/esm/endpoint-generators/utils.js.map +1 -1
  66. package/esm/endpoint-generators/with-schema-and-openapi-action.d.ts +0 -2
  67. package/esm/endpoint-generators/with-schema-and-openapi-action.d.ts.map +1 -1
  68. package/esm/get-schema-from-api.d.ts +1 -1
  69. package/esm/get-schema-from-api.d.ts.map +1 -1
  70. package/esm/get-schema-from-api.spec.js.map +1 -1
  71. package/esm/helpers.d.ts +53 -87
  72. package/esm/helpers.d.ts.map +1 -1
  73. package/esm/helpers.js +91 -92
  74. package/esm/helpers.js.map +1 -1
  75. package/esm/helpers.spec.d.ts +2 -1
  76. package/esm/helpers.spec.d.ts.map +1 -1
  77. package/esm/helpers.spec.js +41 -38
  78. package/esm/helpers.spec.js.map +1 -1
  79. package/esm/http-authentication-settings.d.ts +35 -12
  80. package/esm/http-authentication-settings.d.ts.map +1 -1
  81. package/esm/http-authentication-settings.js +21 -29
  82. package/esm/http-authentication-settings.js.map +1 -1
  83. package/esm/http-server-pool.d.ts +64 -0
  84. package/esm/http-server-pool.d.ts.map +1 -0
  85. package/esm/http-server-pool.js +95 -0
  86. package/esm/http-server-pool.js.map +1 -0
  87. package/esm/http-server-pool.spec.d.ts +2 -0
  88. package/esm/http-server-pool.spec.d.ts.map +1 -0
  89. package/esm/http-server-pool.spec.js +193 -0
  90. package/esm/http-server-pool.spec.js.map +1 -0
  91. package/esm/http-user-context.d.ts +31 -44
  92. package/esm/http-user-context.d.ts.map +1 -1
  93. package/esm/http-user-context.js +76 -95
  94. package/esm/http-user-context.js.map +1 -1
  95. package/esm/http-user-context.spec.d.ts +8 -2
  96. package/esm/http-user-context.spec.d.ts.map +1 -1
  97. package/esm/http-user-context.spec.js +189 -337
  98. package/esm/http-user-context.spec.js.map +1 -1
  99. package/esm/index.d.ts +6 -4
  100. package/esm/index.d.ts.map +1 -1
  101. package/esm/index.js +6 -4
  102. package/esm/index.js.map +1 -1
  103. package/esm/login-response-strategy.d.ts +11 -10
  104. package/esm/login-response-strategy.d.ts.map +1 -1
  105. package/esm/login-response-strategy.js +7 -6
  106. package/esm/login-response-strategy.js.map +1 -1
  107. package/esm/login-response-strategy.spec.js +25 -29
  108. package/esm/login-response-strategy.spec.js.map +1 -1
  109. package/esm/openapi/generate-openapi-document.d.ts +0 -8
  110. package/esm/openapi/generate-openapi-document.d.ts.map +1 -1
  111. package/esm/openapi/generate-openapi-document.js +0 -2
  112. package/esm/openapi/generate-openapi-document.js.map +1 -1
  113. package/esm/proxy-manager.spec.js +152 -176
  114. package/esm/proxy-manager.spec.js.map +1 -1
  115. package/esm/proxy-runtime.d.ts +27 -0
  116. package/esm/proxy-runtime.d.ts.map +1 -0
  117. package/esm/proxy-runtime.js +45 -0
  118. package/esm/proxy-runtime.js.map +1 -0
  119. package/esm/proxy-runtime.spec.d.ts +2 -0
  120. package/esm/proxy-runtime.spec.d.ts.map +1 -0
  121. package/esm/proxy-runtime.spec.js +39 -0
  122. package/esm/proxy-runtime.spec.js.map +1 -0
  123. package/esm/rest-api-runtime.d.ts +76 -0
  124. package/esm/rest-api-runtime.d.ts.map +1 -0
  125. package/esm/rest-api-runtime.js +131 -0
  126. package/esm/rest-api-runtime.js.map +1 -0
  127. package/esm/rest-api-runtime.spec.d.ts +2 -0
  128. package/esm/rest-api-runtime.spec.d.ts.map +1 -0
  129. package/esm/rest-api-runtime.spec.js +58 -0
  130. package/esm/rest-api-runtime.spec.js.map +1 -0
  131. package/esm/rest-service.integration.spec.d.ts +1 -1
  132. package/esm/rest-service.integration.spec.d.ts.map +1 -1
  133. package/esm/rest-service.integration.spec.js +60 -82
  134. package/esm/rest-service.integration.spec.js.map +1 -1
  135. package/esm/rest.integration.test.js +26 -84
  136. package/esm/rest.integration.test.js.map +1 -1
  137. package/esm/server-telemetry.d.ts +57 -0
  138. package/esm/server-telemetry.d.ts.map +1 -0
  139. package/esm/server-telemetry.js +26 -0
  140. package/esm/server-telemetry.js.map +1 -0
  141. package/esm/server-telemetry.spec.d.ts +2 -0
  142. package/esm/server-telemetry.spec.d.ts.map +1 -0
  143. package/esm/server-telemetry.spec.js +52 -0
  144. package/esm/server-telemetry.spec.js.map +1 -0
  145. package/esm/static-server-manager.spec.js +60 -125
  146. package/esm/static-server-manager.spec.js.map +1 -1
  147. package/esm/static-site-runtime.d.ts +21 -0
  148. package/esm/static-site-runtime.d.ts.map +1 -0
  149. package/esm/static-site-runtime.js +48 -0
  150. package/esm/static-site-runtime.js.map +1 -0
  151. package/esm/static-site-runtime.spec.d.ts +2 -0
  152. package/esm/static-site-runtime.spec.d.ts.map +1 -0
  153. package/esm/static-site-runtime.spec.js +30 -0
  154. package/esm/static-site-runtime.spec.js.map +1 -0
  155. package/esm/user-store.d.ts +39 -0
  156. package/esm/user-store.d.ts.map +1 -0
  157. package/esm/user-store.js +62 -0
  158. package/esm/user-store.js.map +1 -0
  159. package/esm/user-store.spec.d.ts +2 -0
  160. package/esm/user-store.spec.d.ts.map +1 -0
  161. package/esm/user-store.spec.js +72 -0
  162. package/esm/user-store.spec.js.map +1 -0
  163. package/esm/validate.integration.spec.js +26 -83
  164. package/esm/validate.integration.spec.js.map +1 -1
  165. package/package.json +8 -8
  166. package/src/actions/get-current-user.spec.ts +11 -10
  167. package/src/actions/index.ts +0 -1
  168. package/src/actions/is-authenticated.spec.ts +12 -7
  169. package/src/actions/logout-action.spec.ts +12 -12
  170. package/src/actions/logout.ts +1 -1
  171. package/src/actions/password-login-action.spec.ts +30 -30
  172. package/src/actions/password-login-action.ts +1 -1
  173. package/src/authenticate.spec.ts +45 -51
  174. package/src/authenticate.ts +1 -1
  175. package/src/authorize.spec.ts +37 -39
  176. package/src/endpoint-generators/create-delete-endpoint.spec.ts +16 -24
  177. package/src/endpoint-generators/create-delete-endpoint.ts +11 -17
  178. package/src/endpoint-generators/create-get-collection-endpoint.spec.ts +45 -78
  179. package/src/endpoint-generators/create-get-collection-endpoint.ts +17 -19
  180. package/src/endpoint-generators/create-get-entity-endpoint.spec.ts +17 -33
  181. package/src/endpoint-generators/create-get-entity-endpoint.ts +11 -17
  182. package/src/endpoint-generators/create-get-openapi-document-action.ts +2 -38
  183. package/src/endpoint-generators/create-get-schema-action.ts +1 -1
  184. package/src/endpoint-generators/create-patch-endpoint.spec.ts +11 -18
  185. package/src/endpoint-generators/create-patch-endpoint.ts +12 -23
  186. package/src/endpoint-generators/create-post-endpoint.spec.ts +45 -14
  187. package/src/endpoint-generators/create-post-endpoint.ts +13 -23
  188. package/src/endpoint-generators/utils.ts +36 -28
  189. package/src/endpoint-generators/with-schema-and-openapi-action.ts +0 -3
  190. package/src/get-schema-from-api.spec.ts +1 -1
  191. package/src/get-schema-from-api.ts +1 -1
  192. package/src/helpers.spec.ts +51 -41
  193. package/src/helpers.ts +140 -109
  194. package/src/http-authentication-settings.ts +51 -25
  195. package/src/http-server-pool.spec.ts +220 -0
  196. package/src/http-server-pool.ts +169 -0
  197. package/src/http-user-context.spec.ts +203 -383
  198. package/src/http-user-context.ts +114 -91
  199. package/src/index.ts +6 -4
  200. package/src/login-response-strategy.spec.ts +32 -31
  201. package/src/login-response-strategy.ts +13 -12
  202. package/src/openapi/generate-openapi-document.ts +0 -3
  203. package/src/proxy-manager.spec.ts +152 -182
  204. package/src/proxy-runtime.spec.ts +50 -0
  205. package/src/proxy-runtime.ts +75 -0
  206. package/src/rest-api-runtime.spec.ts +77 -0
  207. package/src/rest-api-runtime.ts +204 -0
  208. package/src/rest-service.integration.spec.ts +68 -87
  209. package/src/rest.integration.test.ts +27 -87
  210. package/src/server-telemetry.spec.ts +56 -0
  211. package/src/server-telemetry.ts +51 -0
  212. package/src/static-server-manager.spec.ts +63 -151
  213. package/src/static-site-runtime.spec.ts +39 -0
  214. package/src/static-site-runtime.ts +75 -0
  215. package/src/user-store.spec.ts +86 -0
  216. package/src/user-store.ts +68 -0
  217. package/src/validate.integration.spec.ts +39 -97
  218. package/esm/actions/login-action.spec.d.ts +0 -2
  219. package/esm/actions/login-action.spec.d.ts.map +0 -1
  220. package/esm/actions/login-action.spec.js +0 -34
  221. package/esm/actions/login-action.spec.js.map +0 -1
  222. package/esm/actions/login.d.ts +0 -19
  223. package/esm/actions/login.d.ts.map +0 -1
  224. package/esm/actions/login.js +0 -27
  225. package/esm/actions/login.js.map +0 -1
  226. package/esm/api-manager.d.ts +0 -104
  227. package/esm/api-manager.d.ts.map +0 -1
  228. package/esm/api-manager.js +0 -180
  229. package/esm/api-manager.js.map +0 -1
  230. package/esm/proxy-manager.d.ts +0 -53
  231. package/esm/proxy-manager.d.ts.map +0 -1
  232. package/esm/proxy-manager.js +0 -84
  233. package/esm/proxy-manager.js.map +0 -1
  234. package/esm/server-manager.d.ts +0 -48
  235. package/esm/server-manager.d.ts.map +0 -1
  236. package/esm/server-manager.js +0 -100
  237. package/esm/server-manager.js.map +0 -1
  238. package/esm/static-server-manager.d.ts +0 -19
  239. package/esm/static-server-manager.d.ts.map +0 -1
  240. package/esm/static-server-manager.js +0 -65
  241. package/esm/static-server-manager.js.map +0 -1
  242. package/esm/swagger/generate-swagger-json.spec.d.ts +0 -2
  243. package/esm/swagger/generate-swagger-json.spec.d.ts.map +0 -1
  244. package/esm/swagger/generate-swagger-json.spec.js +0 -215
  245. package/esm/swagger/generate-swagger-json.spec.js.map +0 -1
  246. package/src/actions/login-action.spec.ts +0 -42
  247. package/src/actions/login.ts +0 -32
  248. package/src/api-manager.ts +0 -308
  249. package/src/proxy-manager.ts +0 -102
  250. package/src/server-manager.ts +0 -135
  251. package/src/static-server-manager.ts +0 -90
  252. package/src/swagger/generate-swagger-json.spec.ts +0 -250
@@ -1,58 +1,66 @@
1
1
  import { IdentityContext } from '@furystack/core';
2
- import { Injector } from '@furystack/inject';
3
- import { usingAsync } from '@furystack/utils';
2
+ import { createInjector } from '@furystack/inject';
3
+ import { EventHub, usingAsync } from '@furystack/utils';
4
4
  import { describe, expect, it, vi } from 'vitest';
5
5
  import { Authenticate } from './authenticate.js';
6
- import { HttpUserContext } from './http-user-context.js';
6
+ import { HttpUserContext as HttpUserContextToken } from './http-user-context.js';
7
7
  import { EmptyResult } from './request-action-implementation.js';
8
+ const makeHttpUserContextStub = (providers) => Object.assign(new EventHub(), {
9
+ authentication: { authenticationProviders: providers },
10
+ });
8
11
  describe('Authenticate', () => {
9
12
  const response = {};
10
13
  const request = { url: 'http://google.com' };
11
- it('Should return 401 without WWW-Authenticate header when no basic-auth provider is registered', async () => {
12
- await usingAsync(new Injector(), async (i) => {
13
- const isAuthenticatedAction = vi.fn(async () => false);
14
- i.setExplicitInstance({ isAuthenticated: isAuthenticatedAction, getCurrentUser: async () => Promise.reject(new Error(':(')) }, IdentityContext);
15
- i.setExplicitInstance({
16
- authentication: { authenticationProviders: [] },
17
- }, HttpUserContext);
18
- const exampleAuthenticatedAction = vi.fn(async () => EmptyResult());
19
- const authorized = Authenticate()(exampleAuthenticatedAction);
14
+ it('returns 401 without WWW-Authenticate when no basic-auth provider is registered', async () => {
15
+ await usingAsync(createInjector(), async (i) => {
16
+ const isAuthenticated = vi.fn(async () => false);
17
+ i.bind(IdentityContext, () => ({
18
+ isAuthenticated,
19
+ getCurrentUser: () => Promise.reject(new Error(':(')),
20
+ isAuthorized: () => Promise.resolve(false),
21
+ }));
22
+ i.bind(HttpUserContextToken, () => makeHttpUserContextStub([]));
23
+ const exampleAction = vi.fn(async () => EmptyResult());
24
+ const authorized = Authenticate()(exampleAction);
20
25
  const result = await authorized({ injector: i, request, response });
21
26
  expect(result.statusCode).toBe(401);
22
27
  expect(result.chunk).toEqual({ error: 'unauthorized' });
23
28
  expect(result.headers).toEqual({ 'Content-Type': 'application/json' });
24
- expect(exampleAuthenticatedAction).not.toBeCalled();
29
+ expect(exampleAction).not.toHaveBeenCalled();
25
30
  });
26
31
  });
27
- it('Should return 401 with WWW-Authenticate: Basic header when basic-auth provider is registered', async () => {
28
- await usingAsync(new Injector(), async (i) => {
29
- const isAuthenticatedAction = vi.fn(async () => false);
30
- i.setExplicitInstance({ isAuthenticated: isAuthenticatedAction, getCurrentUser: async () => Promise.reject(new Error(':(')) }, IdentityContext);
31
- i.setExplicitInstance({
32
- authentication: {
33
- authenticationProviders: [{ name: 'basic-auth', authenticate: async () => null }],
34
- },
35
- }, HttpUserContext);
36
- const exampleAuthenticatedAction = vi.fn(async () => EmptyResult());
37
- const authorized = Authenticate()(exampleAuthenticatedAction);
32
+ it('returns 401 with WWW-Authenticate: Basic when a basic-auth provider is registered', async () => {
33
+ await usingAsync(createInjector(), async (i) => {
34
+ const isAuthenticated = vi.fn(async () => false);
35
+ i.bind(IdentityContext, () => ({
36
+ isAuthenticated,
37
+ getCurrentUser: () => Promise.reject(new Error(':(')),
38
+ isAuthorized: () => Promise.resolve(false),
39
+ }));
40
+ i.bind(HttpUserContextToken, () => makeHttpUserContextStub([{ name: 'basic-auth' }]));
41
+ const exampleAction = vi.fn(async () => EmptyResult());
42
+ const authorized = Authenticate()(exampleAction);
38
43
  const result = await authorized({ injector: i, request, response });
39
44
  expect(result.statusCode).toBe(401);
40
45
  expect(result.chunk).toEqual({ error: 'unauthorized' });
41
46
  expect(result.headers).toEqual({ 'Content-Type': 'application/json', 'WWW-Authenticate': 'Basic' });
42
- expect(exampleAuthenticatedAction).not.toBeCalled();
47
+ expect(exampleAction).not.toHaveBeenCalled();
43
48
  });
44
49
  });
45
- it('Should exec the original action if authorized', async () => {
46
- await usingAsync(new Injector(), async (i) => {
47
- const isAuthenticatedAction = vi.fn(async () => true);
48
- i.setExplicitInstance({ isAuthenticated: isAuthenticatedAction, getCurrentUser: async () => Promise.reject(new Error(':(')) }, IdentityContext);
49
- const exampleAuthenticatedAction = vi.fn(async () => EmptyResult());
50
- const authorized = Authenticate()(exampleAuthenticatedAction);
51
- const params = { injector: i, body: undefined, query: undefined, request, response };
50
+ it('invokes the wrapped action when the caller is authenticated', async () => {
51
+ await usingAsync(createInjector(), async (i) => {
52
+ i.bind(IdentityContext, () => ({
53
+ isAuthenticated: () => Promise.resolve(true),
54
+ getCurrentUser: () => Promise.reject(new Error(':(')),
55
+ isAuthorized: () => Promise.resolve(true),
56
+ }));
57
+ const exampleAction = vi.fn(async () => EmptyResult());
58
+ const authorized = Authenticate()(exampleAction);
59
+ const params = { injector: i, request, response };
52
60
  const result = await authorized(params);
53
61
  expect(result.statusCode).toBe(200);
54
62
  expect(result.chunk).toBe(undefined);
55
- expect(exampleAuthenticatedAction).toBeCalledWith(params);
63
+ expect(exampleAction).toHaveBeenCalledWith(params);
56
64
  });
57
65
  });
58
66
  });
@@ -1 +1 @@
1
- {"version":3,"file":"authenticate.spec.js","sourceRoot":"","sources":["../src/authenticate.spec.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"authenticate.spec.js","sourceRoot":"","sources":["../src/authenticate.spec.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,5 @@
1
1
  import { AuthorizationError, IdentityContext } from '@furystack/core';
2
- import { Injector } from '@furystack/inject';
2
+ import { createInjector } from '@furystack/inject';
3
3
  import { usingAsync } from '@furystack/utils';
4
4
  import { describe, expect, it, vi } from 'vitest';
5
5
  import { Authorize } from './authorize.js';
@@ -7,43 +7,48 @@ import { EmptyResult } from './request-action-implementation.js';
7
7
  describe('Authorize', () => {
8
8
  const response = {};
9
9
  const request = { url: 'http://google.com' };
10
- it('Should return 403 when failed to get current user', async () => {
11
- await usingAsync(new Injector(), async (i) => {
12
- const isAuthorizedAction = vi.fn(async () => false);
13
- i.setExplicitInstance({ isAuthorized: isAuthorizedAction, getCurrentUser: () => Promise.reject(new Error(':(')) }, IdentityContext);
14
- const exampleAuthorizedAction = vi.fn(async () => EmptyResult());
15
- const authorized = Authorize('Role1')(exampleAuthorizedAction);
10
+ it('throws AuthorizationError when the current user cannot be resolved', async () => {
11
+ await usingAsync(createInjector(), async (i) => {
12
+ const isAuthorized = vi.fn(async () => false);
13
+ i.bind(IdentityContext, () => ({
14
+ isAuthorized,
15
+ getCurrentUser: () => Promise.reject(new Error(':(')),
16
+ isAuthenticated: () => Promise.resolve(false),
17
+ }));
18
+ const exampleAction = vi.fn(async () => EmptyResult());
19
+ const authorized = Authorize('Role1')(exampleAction);
16
20
  await expect(() => authorized({ injector: i, request, response })).rejects.toThrow(AuthorizationError);
17
- expect(exampleAuthorizedAction).not.toBeCalled();
21
+ expect(exampleAction).not.toHaveBeenCalled();
18
22
  });
19
23
  });
20
- it('Should return 403 if the current user does not have the role', async () => {
21
- await usingAsync(new Injector(), async (i) => {
22
- const isAuthorizedAction = vi.fn(async () => false);
23
- i.setExplicitInstance({
24
- isAuthorized: isAuthorizedAction,
25
- getCurrentUser: async () => Promise.resolve({ username: 'a', roles: ['Role1'] }),
26
- }, IdentityContext);
27
- const exampleAuthorizedAction = vi.fn(async () => EmptyResult());
28
- const authorized = Authorize('Role2')(exampleAuthorizedAction);
24
+ it('throws AuthorizationError when the current user does not have the required role', async () => {
25
+ await usingAsync(createInjector(), async (i) => {
26
+ const isAuthorized = vi.fn(async () => false);
27
+ i.bind(IdentityContext, () => ({
28
+ isAuthorized,
29
+ getCurrentUser: () => Promise.resolve({ username: 'a', roles: ['Role1'] }),
30
+ isAuthenticated: () => Promise.resolve(true),
31
+ }));
32
+ const exampleAction = vi.fn(async () => EmptyResult());
33
+ const authorized = Authorize('Role2')(exampleAction);
29
34
  await expect(() => authorized({ injector: i, request, response })).rejects.toThrow(AuthorizationError);
30
- expect(exampleAuthorizedAction).not.toBeCalled();
35
+ expect(exampleAction).not.toHaveBeenCalled();
31
36
  });
32
37
  });
33
- it('Should exec the original action if authorized', async () => {
34
- await usingAsync(new Injector(), async (i) => {
35
- const isAuthorizedAction = vi.fn(async () => true);
36
- i.setExplicitInstance({
37
- isAuthorized: isAuthorizedAction,
38
- getCurrentUser: async () => Promise.resolve({ username: 'a', roles: ['Role1'] }),
39
- }, IdentityContext);
40
- const exampleAuthorizedAction = vi.fn(async () => EmptyResult());
41
- const authorized = Authorize('Role1')(exampleAuthorizedAction);
42
- const params = { injector: i, body: undefined, query: undefined, request, response };
38
+ it('invokes the wrapped action when the current user holds the required role', async () => {
39
+ await usingAsync(createInjector(), async (i) => {
40
+ i.bind(IdentityContext, () => ({
41
+ isAuthorized: () => Promise.resolve(true),
42
+ getCurrentUser: () => Promise.resolve({ username: 'a', roles: ['Role1'] }),
43
+ isAuthenticated: () => Promise.resolve(true),
44
+ }));
45
+ const exampleAction = vi.fn(async () => EmptyResult());
46
+ const authorized = Authorize('Role1')(exampleAction);
47
+ const params = { injector: i, request, response };
43
48
  const result = await authorized(params);
44
49
  expect(result.statusCode).toBe(200);
45
50
  expect(result.chunk).toBe(undefined);
46
- expect(exampleAuthorizedAction).toBeCalledWith(params);
51
+ expect(exampleAction).toHaveBeenCalledWith(params);
47
52
  });
48
53
  });
49
54
  });
@@ -1 +1 @@
1
- {"version":3,"file":"authorize.spec.js","sourceRoot":"","sources":["../src/authorize.spec.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"authorize.spec.js","sourceRoot":"","sources":["../src/authorize.spec.ts"],"names":[],"mappings":"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"}
@@ -1,15 +1,10 @@
1
- import type { Constructable } from '@furystack/inject';
1
+ import type { DataSetToken } from '@furystack/repository';
2
2
  import type { DeleteEndpoint } from '@furystack/rest';
3
- import type { RequestAction } from '../request-action-implementation.js';
3
+ import { type RequestAction } from '../request-action-implementation.js';
4
4
  /**
5
- * Creates a DELETE endpoint for removing entities
6
- * @param options The options for endpoint creation
7
- * @param options.model The Model class
8
- * @param options.primaryKey The field used as primary key on the model
9
- * @returns a boolean that indicates the success
5
+ * Creates a DELETE endpoint that removes the entity identified by the URL's
6
+ * `:id` parameter. Returns `204 No Content` once the removal has been
7
+ * persisted to the underlying store.
10
8
  */
11
- export declare const createDeleteEndpoint: <T extends object, TPrimaryKey extends keyof T>(options: {
12
- model: Constructable<T>;
13
- primaryKey: TPrimaryKey;
14
- }) => RequestAction<DeleteEndpoint<T, TPrimaryKey>>;
9
+ export declare const createDeleteEndpoint: <T extends object, TPrimaryKey extends keyof T>(dataSet: DataSetToken<T, TPrimaryKey>) => RequestAction<DeleteEndpoint<T, TPrimaryKey>>;
15
10
  //# sourceMappingURL=create-delete-endpoint.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"create-delete-endpoint.d.ts","sourceRoot":"","sources":["../../src/endpoint-generators/create-delete-endpoint.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAA;AACtD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAA;AACrD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,qCAAqC,CAAA;AAIxE;;;;;;GAMG;AACH,eAAO,MAAM,oBAAoB,GAAI,CAAC,SAAS,MAAM,EAAE,WAAW,SAAS,MAAM,CAAC,EAAE,SAAS;IAC3F,KAAK,EAAE,aAAa,CAAC,CAAC,CAAC,CAAA;IACvB,UAAU,EAAE,WAAW,CAAA;CACxB,kDAQA,CAAA"}
1
+ {"version":3,"file":"create-delete-endpoint.d.ts","sourceRoot":"","sources":["../../src/endpoint-generators/create-delete-endpoint.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAA;AACzD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAA;AACrD,OAAO,EAAc,KAAK,aAAa,EAAE,MAAM,qCAAqC,CAAA;AAEpF;;;;GAIG;AACH,eAAO,MAAM,oBAAoB,GAAI,CAAC,SAAS,MAAM,EAAE,WAAW,SAAS,MAAM,CAAC,EAChF,SAAS,YAAY,CAAC,CAAC,EAAE,WAAW,CAAC,KACpC,aAAa,CAAC,cAAc,CAAC,CAAC,EAAE,WAAW,CAAC,CAO9C,CAAA"}
@@ -1,19 +1,15 @@
1
1
  import { JsonResult } from '../request-action-implementation.js';
2
- import { getRepository } from '@furystack/repository';
3
2
  /**
4
- * Creates a DELETE endpoint for removing entities
5
- * @param options The options for endpoint creation
6
- * @param options.model The Model class
7
- * @param options.primaryKey The field used as primary key on the model
8
- * @returns a boolean that indicates the success
3
+ * Creates a DELETE endpoint that removes the entity identified by the URL's
4
+ * `:id` parameter. Returns `204 No Content` once the removal has been
5
+ * persisted to the underlying store.
9
6
  */
10
- export const createDeleteEndpoint = (options) => {
11
- const endpoint = async ({ injector, getUrlParams }) => {
7
+ export const createDeleteEndpoint = (dataSet) => {
8
+ return async ({ injector, getUrlParams }) => {
12
9
  const { id } = getUrlParams();
13
- const dataSet = getRepository(injector).getDataSetFor(options.model, options.primaryKey);
14
- await dataSet.remove(injector, id);
10
+ const ds = injector.get(dataSet);
11
+ await ds.remove(injector, id);
15
12
  return JsonResult({}, 204);
16
13
  };
17
- return endpoint;
18
14
  };
19
15
  //# sourceMappingURL=create-delete-endpoint.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"create-delete-endpoint.js","sourceRoot":"","sources":["../../src/endpoint-generators/create-delete-endpoint.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,UAAU,EAAE,MAAM,qCAAqC,CAAA;AAChE,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAA;AAErD;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAAgD,OAGnF,EAAE,EAAE;IACH,MAAM,QAAQ,GAAkD,KAAK,EAAE,EAAE,QAAQ,EAAE,YAAY,EAAE,EAAE,EAAE;QACnG,MAAM,EAAE,EAAE,EAAE,GAAG,YAAY,EAAE,CAAA;QAC7B,MAAM,OAAO,GAAG,aAAa,CAAC,QAAQ,CAAC,CAAC,aAAa,CAAC,OAAO,CAAC,KAAK,EAAE,OAAO,CAAC,UAAU,CAAC,CAAA;QACxF,MAAM,OAAO,CAAC,MAAM,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAA;QAClC,OAAO,UAAU,CAAC,EAAE,EAAE,GAAG,CAAC,CAAA;IAC5B,CAAC,CAAA;IACD,OAAO,QAAQ,CAAA;AACjB,CAAC,CAAA"}
1
+ {"version":3,"file":"create-delete-endpoint.js","sourceRoot":"","sources":["../../src/endpoint-generators/create-delete-endpoint.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,UAAU,EAAsB,MAAM,qCAAqC,CAAA;AAEpF;;;;GAIG;AACH,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAClC,OAAqC,EACU,EAAE;IACjD,OAAO,KAAK,EAAE,EAAE,QAAQ,EAAE,YAAY,EAAE,EAAE,EAAE;QAC1C,MAAM,EAAE,EAAE,EAAE,GAAG,YAAY,EAAE,CAAA;QAC7B,MAAM,EAAE,GAAG,QAAQ,CAAC,GAAG,CAAC,OAAO,CAAC,CAAA;QAChC,MAAM,EAAE,CAAC,MAAM,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAA;QAC7B,OAAO,UAAU,CAAC,EAAE,EAAE,GAAG,CAAC,CAAA;IAC5B,CAAC,CAAA;AACH,CAAC,CAAA"}
@@ -1,35 +1,28 @@
1
+ import { getPort } from '@furystack/core/port-generator';
2
+ import { createInjector } from '@furystack/inject';
1
3
  import { usingAsync } from '@furystack/utils';
2
- import { Injector } from '@furystack/inject';
3
- import { createDeleteEndpoint } from './create-delete-endpoint.js';
4
- import { MockClass, setupContext } from './utils.js';
4
+ import { describe, expect, it } from 'vitest';
5
5
  import { useRestService } from '../helpers.js';
6
- import { getDataSetFor } from '@furystack/repository';
7
- import { describe, it, expect } from 'vitest';
8
- import { getPort } from '@furystack/core/port-generator';
6
+ import { createDeleteEndpoint } from './create-delete-endpoint.js';
7
+ import { MockDataSet, setupContext } from './utils.js';
9
8
  describe('createDeleteEndpoint', () => {
10
- it('Should delete the entity and report the success', async () => {
11
- await usingAsync(new Injector(), async (i) => {
12
- const port = getPort();
9
+ it('deletes the entity and responds 204', async () => {
10
+ await usingAsync(createInjector(), async (i) => {
13
11
  setupContext(i);
12
+ const port = getPort();
14
13
  await useRestService({
15
14
  injector: i,
16
15
  root: '/api',
17
16
  port,
18
- api: {
19
- DELETE: {
20
- '/:id': createDeleteEndpoint({ model: MockClass, primaryKey: 'id' }),
21
- },
22
- },
17
+ api: { DELETE: { '/:id': createDeleteEndpoint(MockDataSet) } },
23
18
  });
24
- await getDataSetFor(i, MockClass, 'id').add(i, { id: 'mock', value: 'mock' });
25
- const countBeforeDelete = await getDataSetFor(i, MockClass, 'id').count(i);
26
- expect(countBeforeDelete).toBe(1);
19
+ const dataSet = i.get(MockDataSet);
20
+ await dataSet.add(i, { id: 'mock', value: 'mock' });
21
+ expect(await dataSet.count(i)).toBe(1);
27
22
  const response = await fetch(`http://127.0.0.1:${port}/api/mock`, { method: 'DELETE' });
28
23
  expect(response.status).toBe(204);
29
- const txt = await response.text();
30
- expect(txt).toBe('');
31
- const countAfterDelete = await getDataSetFor(i, MockClass, 'id').count(i);
32
- expect(countAfterDelete).toBe(0);
24
+ expect(await response.text()).toBe('');
25
+ expect(await dataSet.count(i)).toBe(0);
33
26
  });
34
27
  });
35
28
  });
@@ -1 +1 @@
1
- {"version":3,"file":"create-delete-endpoint.spec.js","sourceRoot":"","sources":["../../src/endpoint-generators/create-delete-endpoint.spec.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAA;AAC7C,OAAO,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAA;AAE5C,OAAO,EAAE,oBAAoB,EAAE,MAAM,6BAA6B,CAAA;AAClE,OAAO,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,YAAY,CAAA;AACpD,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAA;AAC9C,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAA;AACrD,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAA;AAC7C,OAAO,EAAE,OAAO,EAAE,MAAM,gCAAgC,CAAA;AAExD,QAAQ,CAAC,sBAAsB,EAAE,GAAG,EAAE;IACpC,EAAE,CAAC,iDAAiD,EAAE,KAAK,IAAI,EAAE;QAC/D,MAAM,UAAU,CAAC,IAAI,QAAQ,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE;YAC3C,MAAM,IAAI,GAAG,OAAO,EAAE,CAAA;YACtB,YAAY,CAAC,CAAC,CAAC,CAAA;YACf,MAAM,cAAc,CAA0D;gBAC5E,QAAQ,EAAE,CAAC;gBACX,IAAI,EAAE,MAAM;gBACZ,IAAI;gBACJ,GAAG,EAAE;oBACH,MAAM,EAAE;wBACN,MAAM,EAAE,oBAAoB,CAAC,EAAE,KAAK,EAAE,SAAS,EAAE,UAAU,EAAE,IAAI,EAAE,CAAC;qBACrE;iBACF;aACF,CAAC,CAAA;YACF,MAAM,aAAa,CAAC,CAAC,EAAE,SAAS,EAAE,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CAAA;YAE7E,MAAM,iBAAiB,GAAG,MAAM,aAAa,CAAC,CAAC,EAAE,SAAS,EAAE,IAAI,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAA;YAC1E,MAAM,CAAC,iBAAiB,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;YAEjC,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,oBAAoB,IAAI,WAAW,EAAE,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,CAAA;YACvF,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;YACjC,MAAM,GAAG,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAA;YACjC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;YAEpB,MAAM,gBAAgB,GAAG,MAAM,aAAa,CAAC,CAAC,EAAE,SAAS,EAAE,IAAI,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAA;YACzE,MAAM,CAAC,gBAAgB,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;QAClC,CAAC,CAAC,CAAA;IACJ,CAAC,CAAC,CAAA;AACJ,CAAC,CAAC,CAAA"}
1
+ {"version":3,"file":"create-delete-endpoint.spec.js","sourceRoot":"","sources":["../../src/endpoint-generators/create-delete-endpoint.spec.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,gCAAgC,CAAA;AACxD,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAA;AAElD,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAA;AAC7C,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAA;AAC7C,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAA;AAC9C,OAAO,EAAE,oBAAoB,EAAE,MAAM,6BAA6B,CAAA;AAElE,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,YAAY,CAAA;AAEtD,QAAQ,CAAC,sBAAsB,EAAE,GAAG,EAAE;IACpC,EAAE,CAAC,qCAAqC,EAAE,KAAK,IAAI,EAAE;QACnD,MAAM,UAAU,CAAC,cAAc,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE;YAC7C,YAAY,CAAC,CAAC,CAAC,CAAA;YACf,MAAM,IAAI,GAAG,OAAO,EAAE,CAAA;YACtB,MAAM,cAAc,CAA0D;gBAC5E,QAAQ,EAAE,CAAC;gBACX,IAAI,EAAE,MAAM;gBACZ,IAAI;gBACJ,GAAG,EAAE,EAAE,MAAM,EAAE,EAAE,MAAM,EAAE,oBAAoB,CAAC,WAAW,CAAC,EAAE,EAAE;aAC/D,CAAC,CAAA;YACF,MAAM,OAAO,GAAG,CAAC,CAAC,GAAG,CAAC,WAAW,CAAC,CAAA;YAClC,MAAM,OAAO,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CAAA;YACnD,MAAM,CAAC,MAAM,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;YAEtC,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,oBAAoB,IAAI,WAAW,EAAE,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,CAAA;YACvF,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;YACjC,MAAM,CAAC,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;YACtC,MAAM,CAAC,MAAM,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;QACxC,CAAC,CAAC,CAAA;IACJ,CAAC,CAAC,CAAA;AACJ,CAAC,CAAC,CAAA"}
@@ -1,15 +1,15 @@
1
- import type { Constructable } from '@furystack/inject';
1
+ import type { DataSetToken } from '@furystack/repository';
2
2
  import type { GetCollectionEndpoint } from '@furystack/rest';
3
- import type { RequestAction } from '../request-action-implementation.js';
3
+ import { type RequestAction } from '../request-action-implementation.js';
4
4
  /**
5
- * Creates a GetCollection endpoint for the given model. The model should have a Repository DataSet
6
- * @param options The options for endpoint creation
7
- * @param options.model The Model class
8
- * @param options.primaryKey The field used as primary key on the model
9
- * @returns The created endpoint
5
+ * Creates a GetCollection endpoint backed by the DataSet resolved from the
6
+ * provided {@link DataSetToken}. The token carries the entity model and
7
+ * primary key, so callers no longer need to pass them separately.
8
+ *
9
+ * @example
10
+ * ```ts
11
+ * const endpoint = createGetCollectionEndpoint(UserDataSet)
12
+ * ```
10
13
  */
11
- export declare const createGetCollectionEndpoint: <T, TPrimaryKey extends keyof T>(options: {
12
- model: Constructable<T>;
13
- primaryKey: TPrimaryKey;
14
- }) => RequestAction<GetCollectionEndpoint<T>>;
14
+ export declare const createGetCollectionEndpoint: <T, TPrimaryKey extends keyof T>(dataSet: DataSetToken<T, TPrimaryKey>) => RequestAction<GetCollectionEndpoint<T>>;
15
15
  //# sourceMappingURL=create-get-collection-endpoint.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"create-get-collection-endpoint.d.ts","sourceRoot":"","sources":["../../src/endpoint-generators/create-get-collection-endpoint.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAA;AACtD,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,iBAAiB,CAAA;AAC5D,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,qCAAqC,CAAA;AAIxE;;;;;;GAMG;AACH,eAAO,MAAM,2BAA2B,GAAI,CAAC,EAAE,WAAW,SAAS,MAAM,CAAC,EAAE,SAAS;IACnF,KAAK,EAAE,aAAa,CAAC,CAAC,CAAC,CAAA;IACvB,UAAU,EAAE,WAAW,CAAA;CACxB,4CAWA,CAAA"}
1
+ {"version":3,"file":"create-get-collection-endpoint.d.ts","sourceRoot":"","sources":["../../src/endpoint-generators/create-get-collection-endpoint.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAA;AACzD,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,iBAAiB,CAAA;AAC5D,OAAO,EAAc,KAAK,aAAa,EAAE,MAAM,qCAAqC,CAAA;AAEpF;;;;;;;;;GASG;AACH,eAAO,MAAM,2BAA2B,GAAI,CAAC,EAAE,WAAW,SAAS,MAAM,CAAC,EACxE,SAAS,YAAY,CAAC,CAAC,EAAE,WAAW,CAAC,KACpC,aAAa,CAAC,qBAAqB,CAAC,CAAC,CAAC,CASxC,CAAA"}
@@ -1,21 +1,22 @@
1
1
  import { JsonResult } from '../request-action-implementation.js';
2
- import { getRepository } from '@furystack/repository';
3
2
  /**
4
- * Creates a GetCollection endpoint for the given model. The model should have a Repository DataSet
5
- * @param options The options for endpoint creation
6
- * @param options.model The Model class
7
- * @param options.primaryKey The field used as primary key on the model
8
- * @returns The created endpoint
3
+ * Creates a GetCollection endpoint backed by the DataSet resolved from the
4
+ * provided {@link DataSetToken}. The token carries the entity model and
5
+ * primary key, so callers no longer need to pass them separately.
6
+ *
7
+ * @example
8
+ * ```ts
9
+ * const endpoint = createGetCollectionEndpoint(UserDataSet)
10
+ * ```
9
11
  */
10
- export const createGetCollectionEndpoint = (options) => {
11
- const endpoint = async ({ injector, getQuery }) => {
12
+ export const createGetCollectionEndpoint = (dataSet) => {
13
+ return async ({ injector, getQuery }) => {
12
14
  const { findOptions } = getQuery();
13
- const dataSet = getRepository(injector).getDataSetFor(options.model, options.primaryKey);
14
- const entriesPromise = dataSet.find(injector, findOptions || {});
15
- const countPromise = dataSet.count(injector, findOptions?.filter);
15
+ const ds = injector.get(dataSet);
16
+ const entriesPromise = ds.find(injector, findOptions || {});
17
+ const countPromise = ds.count(injector, findOptions?.filter);
16
18
  const [entries, count] = await Promise.all([entriesPromise, countPromise]);
17
19
  return JsonResult({ entries, count });
18
20
  };
19
- return endpoint;
20
21
  };
21
22
  //# sourceMappingURL=create-get-collection-endpoint.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"create-get-collection-endpoint.js","sourceRoot":"","sources":["../../src/endpoint-generators/create-get-collection-endpoint.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,UAAU,EAAE,MAAM,qCAAqC,CAAA;AAChE,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAA;AAErD;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,2BAA2B,GAAG,CAAiC,OAG3E,EAAE,EAAE;IACH,MAAM,QAAQ,GAA4C,KAAK,EAAE,EAAE,QAAQ,EAAE,QAAQ,EAAE,EAAE,EAAE;QACzF,MAAM,EAAE,WAAW,EAAE,GAAG,QAAQ,EAAE,CAAA;QAClC,MAAM,OAAO,GAAG,aAAa,CAAC,QAAQ,CAAC,CAAC,aAAa,CAAC,OAAO,CAAC,KAAK,EAAE,OAAO,CAAC,UAAU,CAAC,CAAA;QACxF,MAAM,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC,QAAQ,EAAE,WAAW,IAAI,EAAE,CAAC,CAAA;QAChE,MAAM,YAAY,GAAG,OAAO,CAAC,KAAK,CAAC,QAAQ,EAAE,WAAW,EAAE,MAAM,CAAC,CAAA;QACjE,MAAM,CAAC,OAAO,EAAE,KAAK,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC,CAAC,cAAc,EAAE,YAAY,CAAC,CAAC,CAAA;QAE1E,OAAO,UAAU,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC,CAAA;IACvC,CAAC,CAAA;IACD,OAAO,QAAQ,CAAA;AACjB,CAAC,CAAA"}
1
+ {"version":3,"file":"create-get-collection-endpoint.js","sourceRoot":"","sources":["../../src/endpoint-generators/create-get-collection-endpoint.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,UAAU,EAAsB,MAAM,qCAAqC,CAAA;AAEpF;;;;;;;;;GASG;AACH,MAAM,CAAC,MAAM,2BAA2B,GAAG,CACzC,OAAqC,EACI,EAAE;IAC3C,OAAO,KAAK,EAAE,EAAE,QAAQ,EAAE,QAAQ,EAAE,EAAE,EAAE;QACtC,MAAM,EAAE,WAAW,EAAE,GAAG,QAAQ,EAAE,CAAA;QAClC,MAAM,EAAE,GAAG,QAAQ,CAAC,GAAG,CAAC,OAAO,CAAC,CAAA;QAChC,MAAM,cAAc,GAAG,EAAE,CAAC,IAAI,CAAC,QAAQ,EAAE,WAAW,IAAI,EAAE,CAAC,CAAA;QAC3D,MAAM,YAAY,GAAG,EAAE,CAAC,KAAK,CAAC,QAAQ,EAAE,WAAW,EAAE,MAAM,CAAC,CAAA;QAC5D,MAAM,CAAC,OAAO,EAAE,KAAK,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC,CAAC,cAAc,EAAE,YAAY,CAAC,CAAC,CAAA;QAC1E,OAAO,UAAU,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC,CAAA;IACvC,CAAC,CAAA;AACH,CAAC,CAAA"}