@rockster/core 0.0.4 → 0.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 (309) hide show
  1. package/access/access.module.js +3 -7
  2. package/access/access.module.js.map +1 -1
  3. package/access/constants.d.ts +2 -0
  4. package/access/constants.js +6 -0
  5. package/access/constants.js.map +1 -0
  6. package/access/controllers/controllers.d.ts +2 -1
  7. package/access/controllers/controllers.js +3 -1
  8. package/access/controllers/controllers.js.map +1 -1
  9. package/access/controllers/scope-access-profile.controller.d.ts +17 -0
  10. package/access/controllers/scope-access-profile.controller.js +111 -0
  11. package/access/controllers/scope-access-profile.controller.js.map +1 -0
  12. package/access/controllers/scope-group-user.controller.d.ts +11 -4
  13. package/access/controllers/scope-group-user.controller.js +57 -9
  14. package/access/controllers/scope-group-user.controller.js.map +1 -1
  15. package/access/controllers/scope-group.controller.d.ts +8 -5
  16. package/access/controllers/scope-group.controller.js +66 -12
  17. package/access/controllers/scope-group.controller.js.map +1 -1
  18. package/access/controllers/scope-owner.controller.d.ts +3 -2
  19. package/access/controllers/scope-owner.controller.js +18 -4
  20. package/access/controllers/scope-owner.controller.js.map +1 -1
  21. package/access/controllers/scope-user.controller.d.ts +2 -2
  22. package/access/controllers/scope-user.controller.js +19 -5
  23. package/access/controllers/scope-user.controller.js.map +1 -1
  24. package/access/decorators/context-params.decorator.d.ts +2 -0
  25. package/access/decorators/context-params.decorator.js +13 -0
  26. package/access/decorators/context-params.decorator.js.map +1 -0
  27. package/access/decorators/index.d.ts +2 -0
  28. package/access/decorators/index.js +19 -0
  29. package/access/decorators/index.js.map +1 -0
  30. package/access/decorators/scope-context-id-resolver.decorator.d.ts +10 -0
  31. package/access/decorators/scope-context-id-resolver.decorator.js +22 -0
  32. package/access/decorators/scope-context-id-resolver.decorator.js.map +1 -0
  33. package/access/entities/entities.d.ts +3 -1
  34. package/access/entities/entities.js +4 -0
  35. package/access/entities/entities.js.map +1 -1
  36. package/access/entities/index.d.ts +2 -0
  37. package/access/entities/index.js +2 -0
  38. package/access/entities/index.js.map +1 -1
  39. package/access/entities/scope-access-profile-key.d.ts +6 -0
  40. package/access/entities/scope-access-profile-key.js +40 -0
  41. package/access/entities/scope-access-profile-key.js.map +1 -0
  42. package/access/entities/scope-access-profile.d.ts +6 -0
  43. package/access/entities/scope-access-profile.js +37 -0
  44. package/access/entities/scope-access-profile.js.map +1 -0
  45. package/access/entities/scope-group.d.ts +3 -0
  46. package/access/entities/scope-group.js +16 -0
  47. package/access/entities/scope-group.js.map +1 -1
  48. package/access/functions/assert-context-admin-access.d.ts +15 -0
  49. package/access/functions/assert-context-admin-access.js +62 -0
  50. package/access/functions/assert-context-admin-access.js.map +1 -0
  51. package/access/functions/assert-master-or-owner.d.ts +9 -0
  52. package/access/functions/assert-master-or-owner.js +40 -0
  53. package/access/functions/assert-master-or-owner.js.map +1 -0
  54. package/access/functions/assert-scope-action-access.d.ts +32 -0
  55. package/access/functions/assert-scope-action-access.js +189 -0
  56. package/access/functions/assert-scope-action-access.js.map +1 -0
  57. package/access/functions/build-scope-resolver-initial-data.d.ts +4 -0
  58. package/access/functions/build-scope-resolver-initial-data.js +17 -0
  59. package/access/functions/build-scope-resolver-initial-data.js.map +1 -0
  60. package/access/functions/describe-action-scope.d.ts +9 -0
  61. package/access/functions/describe-action-scope.js +27 -0
  62. package/access/functions/describe-action-scope.js.map +1 -0
  63. package/access/functions/index.d.ts +5 -0
  64. package/access/functions/index.js +5 -0
  65. package/access/functions/index.js.map +1 -1
  66. package/access/functions/init-scope-service-executors.d.ts +3 -0
  67. package/access/functions/init-scope-service-executors.js +38 -0
  68. package/access/functions/init-scope-service-executors.js.map +1 -0
  69. package/access/functions/normalize-scope-keys.d.ts +4 -0
  70. package/access/functions/normalize-scope-keys.js +17 -0
  71. package/access/functions/normalize-scope-keys.js.map +1 -0
  72. package/access/functions/register-scope.d.ts +16 -5
  73. package/access/functions/register-scope.js +57 -45
  74. package/access/functions/register-scope.js.map +1 -1
  75. package/access/functions/resolve-scope-context-id.d.ts +9 -0
  76. package/access/functions/resolve-scope-context-id.js +71 -0
  77. package/access/functions/resolve-scope-context-id.js.map +1 -0
  78. package/access/functions/warn-if-public.d.ts +12 -0
  79. package/access/functions/warn-if-public.js +20 -0
  80. package/access/functions/warn-if-public.js.map +1 -0
  81. package/access/index.d.ts +2 -0
  82. package/access/index.js +2 -0
  83. package/access/index.js.map +1 -1
  84. package/access/interfaces/index.d.ts +1 -0
  85. package/access/interfaces/index.js +1 -0
  86. package/access/interfaces/index.js.map +1 -1
  87. package/access/interfaces/resolve-scope-context-id.d.ts +21 -0
  88. package/access/interfaces/resolve-scope-context-id.js +3 -0
  89. package/access/interfaces/resolve-scope-context-id.js.map +1 -0
  90. package/access/interfaces/scope-service-registry.d.ts +16 -1
  91. package/access/interfaces/scope-service.d.ts +6 -7
  92. package/access/models/scope-access-profile-keys-update.d.ts +5 -0
  93. package/access/models/scope-access-profile-keys-update.js +27 -0
  94. package/access/models/scope-access-profile-keys-update.js.map +1 -0
  95. package/access/models/scope-group-apply-access-profile.d.ts +6 -0
  96. package/access/models/scope-group-apply-access-profile.js +32 -0
  97. package/access/models/scope-group-apply-access-profile.js.map +1 -0
  98. package/access/models/scope-user-mapped.d.ts +1 -0
  99. package/access/models/scope-user-mapped.js +6 -0
  100. package/access/models/scope-user-mapped.js.map +1 -1
  101. package/access/models/scope-user.js +4 -2
  102. package/access/models/scope-user.js.map +1 -1
  103. package/access/queries/scope-access-profile.query.d.ts +1 -0
  104. package/access/queries/scope-access-profile.query.js +10 -0
  105. package/access/queries/scope-access-profile.query.js.map +1 -0
  106. package/access/queries/scope-group.query.js +9 -2
  107. package/access/queries/scope-group.query.js.map +1 -1
  108. package/access/services/index.d.ts +1 -0
  109. package/access/services/index.js +1 -0
  110. package/access/services/index.js.map +1 -1
  111. package/access/services/scope-access-profile.service.d.ts +13 -0
  112. package/access/services/scope-access-profile.service.js +75 -0
  113. package/access/services/scope-access-profile.service.js.map +1 -0
  114. package/access/services/scope-access.service.js +4 -2
  115. package/access/services/scope-access.service.js.map +1 -1
  116. package/access/services/scope-group-user.service.js +2 -2
  117. package/access/services/scope-group-user.service.js.map +1 -1
  118. package/access/services/scope-group.service.d.ts +10 -0
  119. package/access/services/scope-group.service.js +38 -1
  120. package/access/services/scope-group.service.js.map +1 -1
  121. package/access/services/scope-owner.service.d.ts +3 -0
  122. package/access/services/scope-owner.service.js +26 -1
  123. package/access/services/scope-owner.service.js.map +1 -1
  124. package/command/services/post-action-builder.js +19 -17
  125. package/command/services/post-action-builder.js.map +1 -1
  126. package/command/services/remove-action-builder.js +30 -22
  127. package/command/services/remove-action-builder.js.map +1 -1
  128. package/controllers/interfaces/controller-property.d.ts +7 -1
  129. package/controllers/services/default-action-builder.js +12 -30
  130. package/controllers/services/default-action-builder.js.map +1 -1
  131. package/controllers/services/restful-action-builder.js +25 -1
  132. package/controllers/services/restful-action-builder.js.map +1 -1
  133. package/core/contexts/request-context.d.ts +5 -0
  134. package/core/contexts/request-context.js +6 -0
  135. package/core/contexts/request-context.js.map +1 -0
  136. package/core/core.controller.js +6 -1
  137. package/core/core.controller.js.map +1 -1
  138. package/core/interfaces/action-docs.d.ts +15 -0
  139. package/core/interfaces/request-context.d.ts +5 -0
  140. package/core/services/request-router.js +2 -1
  141. package/core/services/request-router.js.map +1 -1
  142. package/database/database.controller.d.ts +1 -3
  143. package/database/database.controller.js +1 -5
  144. package/database/database.controller.js.map +1 -1
  145. package/database/decorators/protect-entity.decorator.d.ts +1 -0
  146. package/database/decorators/protect-entity.decorator.js +2 -3
  147. package/database/decorators/protect-entity.decorator.js.map +1 -1
  148. package/database/decorators/protected-entity.decorator.d.ts +1 -0
  149. package/database/decorators/protected-entity.decorator.js +2 -16
  150. package/database/decorators/protected-entity.decorator.js.map +1 -1
  151. package/database/functions/inject-repository-handle.js +4 -3
  152. package/database/functions/inject-repository-handle.js.map +1 -1
  153. package/database/interfaces/entity-object.d.ts +0 -6
  154. package/database/interfaces/index.d.ts +0 -1
  155. package/database/interfaces/index.js +0 -1
  156. package/database/interfaces/index.js.map +1 -1
  157. package/database/interfaces/repository.d.ts +8 -8
  158. package/docs/docs.module.js +3 -1
  159. package/docs/docs.module.js.map +1 -1
  160. package/docs/migrations/1747584000000-CreateDocsTables.d.ts +5 -0
  161. package/docs/migrations/1747584000000-CreateDocsTables.js +90 -0
  162. package/docs/migrations/1747584000000-CreateDocsTables.js.map +1 -0
  163. package/docs/migrations/migrations.d.ts +2 -0
  164. package/docs/migrations/migrations.js +8 -0
  165. package/docs/migrations/migrations.js.map +1 -0
  166. package/global.d.ts +2 -0
  167. package/global.js +1 -0
  168. package/global.js.map +1 -1
  169. package/index.d.ts +2 -1
  170. package/index.js +2 -1
  171. package/index.js.map +1 -1
  172. package/jobs/jobs.controller.d.ts +2 -0
  173. package/jobs/jobs.controller.js +20 -16
  174. package/jobs/jobs.controller.js.map +1 -1
  175. package/package.json +70 -70
  176. package/query/functions/add-join.js +2 -13
  177. package/query/functions/add-join.js.map +1 -1
  178. package/query/functions/create-query-builder.js +0 -10
  179. package/query/functions/create-query-builder.js.map +1 -1
  180. package/query/functions/execute-query.js +34 -0
  181. package/query/functions/execute-query.js.map +1 -1
  182. package/query/functions/load-properties.js +73 -5
  183. package/query/functions/load-properties.js.map +1 -1
  184. package/query/services/query-action-builder.js +12 -18
  185. package/query/services/query-action-builder.js.map +1 -1
  186. package/remote-logs/dtos/index.d.ts +2 -0
  187. package/remote-logs/dtos/index.js +19 -0
  188. package/remote-logs/dtos/index.js.map +1 -0
  189. package/remote-logs/dtos/remote-log-hooks.dto.d.ts +72 -0
  190. package/remote-logs/dtos/remote-log-hooks.dto.js +280 -0
  191. package/remote-logs/dtos/remote-log-hooks.dto.js.map +1 -0
  192. package/remote-logs/dtos/remote-log-search.dto.d.ts +34 -0
  193. package/remote-logs/dtos/remote-log-search.dto.js +146 -0
  194. package/remote-logs/dtos/remote-log-search.dto.js.map +1 -0
  195. package/remote-logs/environment.d.ts +4 -0
  196. package/remote-logs/environment.js +5 -0
  197. package/remote-logs/environment.js.map +1 -0
  198. package/remote-logs/index.d.ts +3 -0
  199. package/remote-logs/index.js +20 -0
  200. package/remote-logs/index.js.map +1 -0
  201. package/remote-logs/interfaces/index.d.ts +1 -0
  202. package/remote-logs/interfaces/index.js +18 -0
  203. package/remote-logs/interfaces/index.js.map +1 -0
  204. package/remote-logs/interfaces/remote-logs-module-options.d.ts +8 -0
  205. package/remote-logs/interfaces/remote-logs-module-options.js +3 -0
  206. package/remote-logs/interfaces/remote-logs-module-options.js.map +1 -0
  207. package/remote-logs/remote-logs-hooks.controller.d.ts +60 -0
  208. package/remote-logs/remote-logs-hooks.controller.js +331 -0
  209. package/remote-logs/remote-logs-hooks.controller.js.map +1 -0
  210. package/remote-logs/remote-logs.controller.d.ts +8 -0
  211. package/remote-logs/remote-logs.controller.js +41 -0
  212. package/remote-logs/remote-logs.controller.js.map +1 -0
  213. package/remote-logs/remote-logs.module.d.ts +12 -0
  214. package/remote-logs/remote-logs.module.js +107 -0
  215. package/remote-logs/remote-logs.module.js.map +1 -0
  216. package/remote-logs/services/opensearch.service.d.ts +13 -0
  217. package/remote-logs/services/opensearch.service.js +167 -0
  218. package/remote-logs/services/opensearch.service.js.map +1 -0
  219. package/security/auth.controller.js +4 -4
  220. package/security/auth.controller.js.map +1 -1
  221. package/security/functions/add-protected.d.ts +2 -2
  222. package/security/functions/add-protected.js +8 -5
  223. package/security/functions/add-protected.js.map +1 -1
  224. package/security/functions/create-authentication-interceptor.d.ts +44 -0
  225. package/security/functions/create-authentication-interceptor.js +114 -0
  226. package/security/functions/create-authentication-interceptor.js.map +1 -0
  227. package/security/functions/find-auth-context.d.ts +1 -2
  228. package/security/functions/find-auth-context.js +6 -11
  229. package/security/functions/find-auth-context.js.map +1 -1
  230. package/security/index.d.ts +1 -0
  231. package/security/index.js +1 -0
  232. package/security/index.js.map +1 -1
  233. package/security/interfaces/authorization-schema.d.ts +3 -1
  234. package/security/services/authorization.service.d.ts +5 -3
  235. package/security/services/authorization.service.js +56 -37
  236. package/security/services/authorization.service.js.map +1 -1
  237. package/storage/services/routes.service.js +1 -1
  238. package/storage/services/routes.service.js.map +1 -1
  239. package/tasks/constants.d.ts +3 -0
  240. package/tasks/constants.js +2 -1
  241. package/tasks/constants.js.map +1 -1
  242. package/tasks/controllers/task.controller.d.ts +3 -2
  243. package/tasks/controllers/task.controller.js +11 -40
  244. package/tasks/controllers/task.controller.js.map +1 -1
  245. package/tasks/decorators/index.d.ts +1 -0
  246. package/tasks/decorators/index.js +1 -0
  247. package/tasks/decorators/index.js.map +1 -1
  248. package/tasks/decorators/task-payload.decorator.d.ts +1 -0
  249. package/tasks/decorators/task-payload.decorator.js +12 -0
  250. package/tasks/decorators/task-payload.decorator.js.map +1 -0
  251. package/tasks/decorators/task.decorator.js +3 -0
  252. package/tasks/decorators/task.decorator.js.map +1 -1
  253. package/tasks/functions/compile-all-task-post-hooks.d.ts +1 -0
  254. package/tasks/functions/compile-all-task-post-hooks.js +27 -0
  255. package/tasks/functions/compile-all-task-post-hooks.js.map +1 -0
  256. package/tasks/functions/compile-task-hook-handle.d.ts +6 -0
  257. package/tasks/functions/compile-task-hook-handle.js +67 -0
  258. package/tasks/functions/compile-task-hook-handle.js.map +1 -0
  259. package/tasks/functions/create-task-hook.d.ts +9 -0
  260. package/tasks/functions/create-task-hook.js +13 -0
  261. package/tasks/functions/create-task-hook.js.map +1 -0
  262. package/tasks/functions/create-task-message-post.js +2 -0
  263. package/tasks/functions/create-task-message-post.js.map +1 -1
  264. package/tasks/functions/register-task-post-hook-interceptors.d.ts +3 -0
  265. package/tasks/functions/register-task-post-hook-interceptors.js +86 -0
  266. package/tasks/functions/register-task-post-hook-interceptors.js.map +1 -0
  267. package/tasks/functions/run-task-post-hooks.d.ts +11 -0
  268. package/tasks/functions/run-task-post-hooks.js +18 -0
  269. package/tasks/functions/run-task-post-hooks.js.map +1 -0
  270. package/tasks/functions/task-message-operations.d.ts +18 -0
  271. package/tasks/functions/task-message-operations.js +100 -0
  272. package/tasks/functions/task-message-operations.js.map +1 -0
  273. package/tasks/functions/validate-task-payload.d.ts +2 -0
  274. package/tasks/functions/validate-task-payload.js +19 -0
  275. package/tasks/functions/validate-task-payload.js.map +1 -0
  276. package/tasks/hook-constants.d.ts +2 -0
  277. package/tasks/hook-constants.js +6 -0
  278. package/tasks/hook-constants.js.map +1 -0
  279. package/tasks/index.d.ts +3 -0
  280. package/tasks/index.js +3 -0
  281. package/tasks/index.js.map +1 -1
  282. package/tasks/interfaces/compiled-task-post-hooks.d.ts +17 -0
  283. package/tasks/interfaces/compiled-task-post-hooks.js +3 -0
  284. package/tasks/interfaces/compiled-task-post-hooks.js.map +1 -0
  285. package/tasks/interfaces/index.d.ts +3 -0
  286. package/tasks/interfaces/index.js +3 -0
  287. package/tasks/interfaces/index.js.map +1 -1
  288. package/tasks/interfaces/task-hook.d.ts +16 -0
  289. package/tasks/interfaces/task-hook.js +8 -0
  290. package/tasks/interfaces/task-hook.js.map +1 -0
  291. package/tasks/interfaces/task-object.d.ts +4 -0
  292. package/tasks/interfaces/task-post-hook.d.ts +2 -0
  293. package/{database/interfaces/protector.js → tasks/interfaces/task-post-hook.js} +1 -1
  294. package/tasks/interfaces/task-post-hook.js.map +1 -0
  295. package/tasks/interfaces/task-settings.d.ts +5 -0
  296. package/tasks/services/task-runner.service.d.ts +24 -3
  297. package/tasks/services/task-runner.service.js +66 -28
  298. package/tasks/services/task-runner.service.js.map +1 -1
  299. package/database/functions/use-protector.d.ts +0 -2
  300. package/database/functions/use-protector.js +0 -11
  301. package/database/functions/use-protector.js.map +0 -1
  302. package/database/interfaces/protector.d.ts +0 -51
  303. package/database/interfaces/protector.js.map +0 -1
  304. package/database/services/protect-builder.d.ts +0 -60
  305. package/database/services/protect-builder.js +0 -524
  306. package/database/services/protect-builder.js.map +0 -1
  307. package/security/functions/add-protect.d.ts +0 -2
  308. package/security/functions/add-protect.js +0 -11
  309. package/security/functions/add-protect.js.map +0 -1
@@ -0,0 +1,32 @@
1
+ import { Dictionary } from "@rockster/common";
2
+ import { PropertyNote } from "@rockster/class-memory";
3
+ import { IControllerProperty } from "../../controllers/interfaces/controller-property";
4
+ import { PendingAction } from "../../core/interfaces/pending-action";
5
+ import { IRequestContext } from "../../core/interfaces/request-context";
6
+ export type ScopeActionKeySlot = "query" | "create" | "modify" | "remove" | "default";
7
+ /**
8
+ * Enforces scope authorization for an action slot.
9
+ *
10
+ * A slot may carry one OR many keys ("a door with several locks"): the user must
11
+ * satisfy EVERY key (AND). Keys may belong to different scope contexts — each
12
+ * key resolves its own context id. Being the owner of a context satisfies that
13
+ * context's keys. Context-id / owner / user-key lookups are memoized within the
14
+ * call so keys sharing a context don't hit the DB twice; resolvers may also
15
+ * cache loaded data on `context.scopeStore` for the handler to reuse.
16
+ *
17
+ * Invoke it either with a `pending` action (default / query / post / remove
18
+ * builders) or with an explicit `requestPayload` (restful @Get/@Post… routes).
19
+ */
20
+ export declare function assertScopeActionAccess(options: {
21
+ property: PropertyNote<IControllerProperty>;
22
+ slot: ScopeActionKeySlot;
23
+ context: IRequestContext;
24
+ /** Action flow: payload + annotations are read from the pending action. */
25
+ pending?: PendingAction;
26
+ /** Restful flow: payload provided explicitly (e.g. merged route params). */
27
+ requestPayload?: unknown;
28
+ annotations?: Dictionary<unknown>;
29
+ postType?: "create" | "modify";
30
+ /** Entity id for modify/remove when it is not the request body itself. */
31
+ entityId?: string;
32
+ }): Promise<void>;
@@ -0,0 +1,189 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.assertScopeActionAccess = assertScopeActionAccess;
4
+ const common_1 = require("@rockster/common");
5
+ const get_is_owner_1 = require("./get-is-owner");
6
+ const get_user_keys_1 = require("./get-user-keys");
7
+ const resolve_scope_context_id_1 = require("./resolve-scope-context-id");
8
+ const env_1 = require("../env");
9
+ function resolveRemoveIdValue(requestPayload) {
10
+ if (requestPayload == null) {
11
+ return undefined;
12
+ }
13
+ if (typeof requestPayload === "string" || typeof requestPayload === "number") {
14
+ return String(requestPayload);
15
+ }
16
+ if (typeof requestPayload === "object") {
17
+ const record = requestPayload;
18
+ const id = record.id ?? record.Id;
19
+ if (id != null && String(id).trim() !== "") {
20
+ return String(id);
21
+ }
22
+ }
23
+ return undefined;
24
+ }
25
+ function slotToActionKind(slot) {
26
+ if (slot === "query") {
27
+ return "query";
28
+ }
29
+ if (slot === "create" || slot === "modify") {
30
+ return "post";
31
+ }
32
+ if (slot === "remove") {
33
+ return "remove";
34
+ }
35
+ return "default";
36
+ }
37
+ /**
38
+ * Enforces scope authorization for an action slot.
39
+ *
40
+ * A slot may carry one OR many keys ("a door with several locks"): the user must
41
+ * satisfy EVERY key (AND). Keys may belong to different scope contexts — each
42
+ * key resolves its own context id. Being the owner of a context satisfies that
43
+ * context's keys. Context-id / owner / user-key lookups are memoized within the
44
+ * call so keys sharing a context don't hit the DB twice; resolvers may also
45
+ * cache loaded data on `context.scopeStore` for the handler to reuse.
46
+ *
47
+ * Invoke it either with a `pending` action (default / query / post / remove
48
+ * builders) or with an explicit `requestPayload` (restful @Get/@Post… routes).
49
+ */
50
+ async function assertScopeActionAccess(options) {
51
+ const { property, slot, context, pending, postType, entityId } = options;
52
+ const keys = property.keys?.get(slot);
53
+ if (!keys || keys.length === 0) {
54
+ return;
55
+ }
56
+ const userId = context.session?.userId;
57
+ if (!userId) {
58
+ throw new common_1.UnauthorizedError();
59
+ }
60
+ const requestPayload = pending
61
+ ? context.request[pending.requestRef]
62
+ : options.requestPayload;
63
+ const annotations = pending?.annotations ?? options.annotations;
64
+ const actionKind = slotToActionKind(slot);
65
+ const idValue = entityId
66
+ ?? (actionKind === "remove"
67
+ ? resolveRemoveIdValue(requestPayload)
68
+ : undefined);
69
+ // Per-request store: resolvers may stash loaded data here so later resolvers
70
+ // (and the handler) reuse it instead of querying the DB again.
71
+ const store = (context.scopeStore ?? (context.scopeStore = new Map()));
72
+ // Per-call memo so several keys on the same context resolve/lookup only once.
73
+ const contextIdCache = new Map();
74
+ const ownerCache = new Map();
75
+ const userKeysCache = new Map();
76
+ const rootContextIdCache = new Map();
77
+ const missing = [];
78
+ for (const key of keys) {
79
+ const resolverCacheKey = `${key.contextName}|${key.resolverHandler ?? ""}`;
80
+ let contextId;
81
+ if (contextIdCache.has(resolverCacheKey)) {
82
+ contextId = contextIdCache.get(resolverCacheKey);
83
+ }
84
+ else {
85
+ contextId = await (0, resolve_scope_context_id_1.resolveScopeContextId)({
86
+ contextName: key.contextName,
87
+ requestPayload,
88
+ actionKind,
89
+ postType,
90
+ idValue,
91
+ entityTarget: property.data,
92
+ entityManager: context.entityManager,
93
+ withId: key.withId,
94
+ resolverHandler: key.resolverHandler,
95
+ requestContext: context,
96
+ pendingAnnotations: annotations,
97
+ store,
98
+ });
99
+ contextIdCache.set(resolverCacheKey, contextId);
100
+ }
101
+ if (key.withId && (contextId == null || contextId.trim() === "")) {
102
+ throw new common_1.ForbiddenError({
103
+ message: `Context id is required for [${key.contextName}]`,
104
+ });
105
+ }
106
+ const ownerCacheKey = `${key.contextName}|${contextId ?? ""}`;
107
+ let isOwner;
108
+ if (ownerCache.has(ownerCacheKey)) {
109
+ isOwner = ownerCache.get(ownerCacheKey);
110
+ }
111
+ else {
112
+ isOwner = await (0, get_is_owner_1.getIsOwner)(key.contextName, userId, contextId);
113
+ ownerCache.set(ownerCacheKey, isOwner);
114
+ }
115
+ if (isOwner) {
116
+ continue;
117
+ }
118
+ const userKeysCacheKey = contextId ?? "";
119
+ let userKeys;
120
+ if (userKeysCache.has(userKeysCacheKey)) {
121
+ userKeys = userKeysCache.get(userKeysCacheKey);
122
+ }
123
+ else {
124
+ userKeys = contextId
125
+ ? await (0, get_user_keys_1.getUserKeys)(userId, contextId)
126
+ : await (0, get_user_keys_1.getUserKeys)(userId);
127
+ userKeysCache.set(userKeysCacheKey, userKeys);
128
+ }
129
+ // Direct grant.
130
+ if (userKeys.includes(key.name)) {
131
+ continue;
132
+ }
133
+ const registry = env_1.env.scopeServiceRegistry.get(key.contextName);
134
+ // Context admin: holds this context's admin key → may do anything here.
135
+ if (registry?.adminKey && userKeys.includes(registry.adminKey)) {
136
+ continue;
137
+ }
138
+ // Platform master: holds the master key at the hierarchy ROOT → may do
139
+ // anything in any descendant scope. The root context is resolved from the
140
+ // same request (the root scope's resolver derives e.g. the workspace from
141
+ // the project/account being acted upon).
142
+ let rootContextId;
143
+ let masterKey;
144
+ if (registry?.root) {
145
+ rootContextId = contextId;
146
+ masterKey = registry.masterKey;
147
+ }
148
+ else if (registry?.rootScope) {
149
+ masterKey = env_1.env.scopeServiceRegistry.get(registry.rootScope)?.masterKey;
150
+ if (rootContextIdCache.has(registry.rootScope)) {
151
+ rootContextId = rootContextIdCache.get(registry.rootScope);
152
+ }
153
+ else {
154
+ rootContextId = await (0, resolve_scope_context_id_1.resolveScopeContextId)({
155
+ contextName: registry.rootScope,
156
+ requestPayload,
157
+ actionKind,
158
+ postType,
159
+ idValue,
160
+ entityTarget: property.data,
161
+ entityManager: context.entityManager,
162
+ withId: true,
163
+ requestContext: context,
164
+ pendingAnnotations: annotations,
165
+ store,
166
+ });
167
+ rootContextIdCache.set(registry.rootScope, rootContextId);
168
+ }
169
+ }
170
+ if (masterKey && rootContextId) {
171
+ let rootKeys = userKeysCache.get(rootContextId);
172
+ if (!rootKeys) {
173
+ rootKeys = await (0, get_user_keys_1.getUserKeys)(userId, rootContextId);
174
+ userKeysCache.set(rootContextId, rootKeys);
175
+ }
176
+ if (rootKeys.includes(masterKey)) {
177
+ continue;
178
+ }
179
+ }
180
+ missing.push(key.name);
181
+ }
182
+ if (missing.length > 0) {
183
+ throw new common_1.ForbiddenError({
184
+ message: "Action require permissions to execute",
185
+ requirements: missing,
186
+ });
187
+ }
188
+ }
189
+ //# sourceMappingURL=assert-scope-action-access.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"assert-scope-action-access.js","sourceRoot":"./","sources":["access/functions/assert-scope-action-access.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ import { Dictionary } from "@rockster/common";
2
+ import { IRequestContext } from "../../core/interfaces/request-context";
3
+ import { IResolveScopeContextIdParams } from "../interfaces/resolve-scope-context-id";
4
+ export declare function buildScopeResolverInitialData(params: IResolveScopeContextIdParams, requestContext?: IRequestContext, pendingAnnotations?: Dictionary<unknown>): Dictionary<unknown>;
@@ -0,0 +1,17 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.buildScopeResolverInitialData = buildScopeResolverInitialData;
4
+ const constants_1 = require("../../command/constants");
5
+ const constants_2 = require("../../controllers/constants");
6
+ const constants_3 = require("../../query/constants");
7
+ const constants_4 = require("../constants");
8
+ function buildScopeResolverInitialData(params, requestContext, pendingAnnotations) {
9
+ return {
10
+ [constants_4.SCOPE_CONTEXT_PARAMS_KEY]: params,
11
+ [constants_2.REQUEST_CONTEXT_KEY]: requestContext,
12
+ [constants_3.QUERY_CONTENT_KEY]: pendingAnnotations?.[constants_3.QUERY_CONTENT_KEY],
13
+ [constants_1.POST_CONTENT_KEY]: pendingAnnotations?.[constants_1.POST_CONTENT_KEY],
14
+ [constants_1.REMOVE_CONTENT_KEY]: pendingAnnotations?.[constants_1.REMOVE_CONTENT_KEY],
15
+ };
16
+ }
17
+ //# sourceMappingURL=build-scope-resolver-initial-data.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"build-scope-resolver-initial-data.js","sourceRoot":"./","sources":["access/functions/build-scope-resolver-initial-data.ts"],"names":[],"mappings":";;AAQA,sEAYC;AAnBD,uDAA+E;AAC/E,2DAAkE;AAClE,qDAA0D;AAE1D,4CAAwD;AAGxD,SAAgB,6BAA6B,CAC1C,MAAoC,EACpC,cAAgC,EAChC,kBAAwC;IAExC,OAAO;QACJ,CAAC,oCAAwB,CAAC,EAAE,MAAM;QAClC,CAAC,+BAAmB,CAAC,EAAE,cAAc;QACrC,CAAC,6BAAiB,CAAC,EAAE,kBAAkB,EAAE,CAAC,6BAAiB,CAAC;QAC5D,CAAC,4BAAgB,CAAC,EAAE,kBAAkB,EAAE,CAAC,4BAAgB,CAAC;QAC1D,CAAC,8BAAkB,CAAC,EAAE,kBAAkB,EAAE,CAAC,8BAAkB,CAAC;KAChE,CAAC;AACL,CAAC"}
@@ -0,0 +1,9 @@
1
+ import { PropertyNote } from "@rockster/class-memory";
2
+ import { IControllerProperty } from "../../controllers/interfaces/controller-property";
3
+ import { IActionDocsScopeKey } from "../../core/interfaces/action-docs";
4
+ /**
5
+ * Flattens an action's scope keys (`Map<slot, IScopeKey[]>`) into a flat list
6
+ * for the generated docs/SDK, so consumers can see exactly which key(s) — and
7
+ * in which context — an endpoint requires. Empty list = login only.
8
+ */
9
+ export declare function describeActionScopeKeys(property: PropertyNote<IControllerProperty>): IActionDocsScopeKey[];
@@ -0,0 +1,27 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.describeActionScopeKeys = describeActionScopeKeys;
4
+ /**
5
+ * Flattens an action's scope keys (`Map<slot, IScopeKey[]>`) into a flat list
6
+ * for the generated docs/SDK, so consumers can see exactly which key(s) — and
7
+ * in which context — an endpoint requires. Empty list = login only.
8
+ */
9
+ function describeActionScopeKeys(property) {
10
+ const result = [];
11
+ const keys = property.keys;
12
+ if (!keys) {
13
+ return result;
14
+ }
15
+ for (const [slot, slotKeys] of keys.entries()) {
16
+ for (const key of (slotKeys ?? [])) {
17
+ result.push({
18
+ slot,
19
+ contextName: key.contextName,
20
+ name: key.name,
21
+ resolverHandler: key.resolverHandler,
22
+ });
23
+ }
24
+ }
25
+ return result;
26
+ }
27
+ //# sourceMappingURL=describe-action-scope.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"describe-action-scope.js","sourceRoot":"./","sources":["access/functions/describe-action-scope.ts"],"names":[],"mappings":";;AAUA,0DAqBC;AA1BD;;;;GAIG;AACH,SAAgB,uBAAuB,CACpC,QAA2C;IAE3C,MAAM,MAAM,GAA0B,EAAE,CAAC;IACzC,MAAM,IAAI,GAAG,QAAQ,CAAC,IAAI,CAAC;IAC3B,IAAI,CAAC,IAAI,EAAE,CAAC;QACT,OAAO,MAAM,CAAC;IACjB,CAAC;IAED,KAAK,MAAM,CAAC,IAAI,EAAE,QAAQ,CAAC,IAAI,IAAI,CAAC,OAAO,EAAE,EAAE,CAAC;QAC7C,KAAK,MAAM,GAAG,IAAI,CAAC,QAAQ,IAAI,EAAE,CAAgB,EAAE,CAAC;YACjD,MAAM,CAAC,IAAI,CAAC;gBACT,IAAI;gBACJ,WAAW,EAAE,GAAG,CAAC,WAAW;gBAC5B,IAAI,EAAE,GAAG,CAAC,IAAI;gBACd,eAAe,EAAE,GAAG,CAAC,eAAe;aACtC,CAAC,CAAC;QACN,CAAC;IACJ,CAAC;IAED,OAAO,MAAM,CAAC;AACjB,CAAC"}
@@ -1,3 +1,8 @@
1
1
  export * from './get-context-id-service';
2
2
  export * from './get-user-keys';
3
3
  export * from './register-scope';
4
+ export * from './normalize-scope-keys';
5
+ export * from './resolve-scope-context-id';
6
+ export * from './assert-scope-action-access';
7
+ export * from './init-scope-service-executors';
8
+ export * from './build-scope-resolver-initial-data';
@@ -17,4 +17,9 @@ Object.defineProperty(exports, "__esModule", { value: true });
17
17
  __exportStar(require("./get-context-id-service"), exports);
18
18
  __exportStar(require("./get-user-keys"), exports);
19
19
  __exportStar(require("./register-scope"), exports);
20
+ __exportStar(require("./normalize-scope-keys"), exports);
21
+ __exportStar(require("./resolve-scope-context-id"), exports);
22
+ __exportStar(require("./assert-scope-action-access"), exports);
23
+ __exportStar(require("./init-scope-service-executors"), exports);
24
+ __exportStar(require("./build-scope-resolver-initial-data"), exports);
20
25
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"./","sources":["access/functions/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,2DAAyC;AACzC,kDAAgC;AAChC,mDAAiC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"./","sources":["access/functions/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,2DAAyC;AACzC,kDAAgC;AAChC,mDAAiC;AACjC,yDAAuC;AACvC,6DAA2C;AAC3C,+DAA6C;AAC7C,iEAA+C;AAC/C,sEAAoD"}
@@ -0,0 +1,3 @@
1
+ import { Instantiable } from "@rockster/common";
2
+ export declare const DEFAULT_SCOPE_CONTEXT_RESOLVER = "resolveContextId";
3
+ export declare function initScopeServiceExecutors(contextName: string, Service: Instantiable): Promise<void>;
@@ -0,0 +1,38 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.DEFAULT_SCOPE_CONTEXT_RESOLVER = void 0;
4
+ exports.initScopeServiceExecutors = initScopeServiceExecutors;
5
+ const class_injector_1 = require("@rockster/class-injector");
6
+ const logger_1 = require("@rockster/logger");
7
+ const env_1 = require("../env");
8
+ exports.DEFAULT_SCOPE_CONTEXT_RESOLVER = "resolveContextId";
9
+ async function initScopeServiceExecutors(contextName, Service) {
10
+ const registry = env_1.env.scopeServiceRegistry.get(contextName);
11
+ if (!registry) {
12
+ return;
13
+ }
14
+ const logger = new logger_1.Logger("Access");
15
+ if (registry.withId === false) {
16
+ registry.instance = await (0, class_injector_1.createInstance)(Service);
17
+ registry.resolvers = {};
18
+ logger.log(`[${Service.name}] initialized (scope without context id)`);
19
+ return;
20
+ }
21
+ const { instance, executors } = await (0, class_injector_1.createExecutors)(Service);
22
+ if (!executors[exports.DEFAULT_SCOPE_CONTEXT_RESOLVER]) {
23
+ logger.throw(new Error(`[${Service.name}] "${exports.DEFAULT_SCOPE_CONTEXT_RESOLVER}" must be decorated with @ScopeContextIdResolver({ default: true })`));
24
+ }
25
+ const resolverMethods = classInjector
26
+ .storage
27
+ .getProperties(Service)
28
+ .filter((property) => property.scopeContextIdResolver);
29
+ for (const property of resolverMethods) {
30
+ if (!executors[property.propertyKey]) {
31
+ logger.throw(new Error(`[${Service.name}] @ScopeContextIdResolver on "${property.propertyKey}" is not executable — check parameter injection decorators`));
32
+ }
33
+ }
34
+ registry.instance = instance;
35
+ registry.resolvers = executors;
36
+ logger.log(`[${Service.name}] scope resolvers initialized`);
37
+ }
38
+ //# sourceMappingURL=init-scope-service-executors.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"init-scope-service-executors.js","sourceRoot":"./","sources":["access/functions/init-scope-service-executors.ts"],"names":[],"mappings":";;;AASA,8DA0CC;AAnDD,6DAA2E;AAG3E,6CAA0C;AAC1C,gCAA6B;AAGhB,QAAA,8BAA8B,GAAG,kBAAkB,CAAC;AAE1D,KAAK,UAAU,yBAAyB,CAC5C,WAAmB,EACnB,OAAqB;IAErB,MAAM,QAAQ,GAAG,SAAG,CAAC,oBAAoB,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;IAC3D,IAAI,CAAC,QAAQ,EAAE,CAAC;QACb,OAAO;IACV,CAAC;IAED,MAAM,MAAM,GAAG,IAAI,eAAM,CAAC,QAAQ,CAAC,CAAC;IAEpC,IAAI,QAAQ,CAAC,MAAM,KAAK,KAAK,EAAE,CAAC;QAC7B,QAAQ,CAAC,QAAQ,GAAG,MAAM,IAAA,+BAAc,EAAC,OAAO,CAAkB,CAAC;QACnE,QAAQ,CAAC,SAAS,GAAG,EAAE,CAAC;QACxB,MAAM,CAAC,GAAG,CAAC,IAAI,OAAO,CAAC,IAAI,0CAA0C,CAAC,CAAC;QACvE,OAAO;IACV,CAAC;IAED,MAAM,EAAE,QAAQ,EAAE,SAAS,EAAE,GAAG,MAAM,IAAA,gCAAe,EAAC,OAAO,CAAC,CAAC;IAE/D,IAAI,CAAC,SAAS,CAAC,sCAA8B,CAAC,EAAE,CAAC;QAC9C,MAAM,CAAC,KAAK,CAAC,IAAI,KAAK,CACnB,IAAI,OAAO,CAAC,IAAI,MAAM,sCAA8B,qEAAqE,CAC3H,CAAC,CAAC;IACN,CAAC;IAED,MAAM,eAAe,GAAG,aAAa;SACjC,OAAO;SACP,aAAa,CAAC,OAAO,CAAC;SACtB,MAAM,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,QAAQ,CAAC,sBAAsB,CAAC,CAAC;IAE1D,KAAK,MAAM,QAAQ,IAAI,eAAe,EAAE,CAAC;QACtC,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,WAAW,CAAC,EAAE,CAAC;YACpC,MAAM,CAAC,KAAK,CAAC,IAAI,KAAK,CACnB,IAAI,OAAO,CAAC,IAAI,iCAAiC,QAAQ,CAAC,WAAW,4DAA4D,CACnI,CAAC,CAAC;QACN,CAAC;IACJ,CAAC;IAED,QAAQ,CAAC,QAAQ,GAAG,QAAyB,CAAC;IAC9C,QAAQ,CAAC,SAAS,GAAG,SAAqC,CAAC;IAC3D,MAAM,CAAC,GAAG,CAAC,IAAI,OAAO,CAAC,IAAI,+BAA+B,CAAC,CAAC;AAC/D,CAAC"}
@@ -0,0 +1,4 @@
1
+ export declare function normalizeScopeKeys(keys: string[]): string[];
2
+ export declare function filterScopeAccessRows<T extends {
3
+ key?: string | null;
4
+ }>(rows: T[]): T[];
@@ -0,0 +1,17 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.normalizeScopeKeys = normalizeScopeKeys;
4
+ exports.filterScopeAccessRows = filterScopeAccessRows;
5
+ function normalizeScopeKeys(keys) {
6
+ const unique = new Set();
7
+ for (const key of keys) {
8
+ if (typeof key === "string" && key.trim() !== "") {
9
+ unique.add(key);
10
+ }
11
+ }
12
+ return [...unique];
13
+ }
14
+ function filterScopeAccessRows(rows) {
15
+ return rows.filter((row) => typeof row.key === "string" && row.key.trim() !== "");
16
+ }
17
+ //# sourceMappingURL=normalize-scope-keys.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"normalize-scope-keys.js","sourceRoot":"./","sources":["access/functions/normalize-scope-keys.ts"],"names":[],"mappings":";;AAAA,gDAUC;AAED,sDAOC;AAnBD,SAAgB,kBAAkB,CAAC,IAAc;IAC9C,MAAM,MAAM,GAAG,IAAI,GAAG,EAAU,CAAC;IAEjC,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;QACtB,IAAI,OAAO,GAAG,KAAK,QAAQ,IAAI,GAAG,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC;YAChD,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QACnB,CAAC;IACJ,CAAC;IAED,OAAO,CAAC,GAAG,MAAM,CAAC,CAAC;AACtB,CAAC;AAED,SAAgB,qBAAqB,CAClC,IAAS;IAET,OAAO,IAAI,CAAC,MAAM,CACf,CAAC,GAAG,EAA8B,EAAE,CACjC,OAAO,GAAG,CAAC,GAAG,KAAK,QAAQ,IAAI,GAAG,CAAC,GAAG,CAAC,IAAI,EAAE,KAAK,EAAE,CACzD,CAAC;AACL,CAAC"}
@@ -1,8 +1,19 @@
1
1
  import { Instantiable } from "@rockster/common";
2
2
  import { IScopeService } from "../interfaces/scope-service";
3
- export declare function registerScope(contextName: string, Service: Instantiable<IScopeService<any>>, withId?: boolean): {
4
- ActionKey: (key: string) => MethodDecorator;
5
- QueryActionKey: (key: string) => (target: any, propertyKey: any) => void;
6
- CreateActionKey: (key: string) => MethodDecorator;
7
- ModifyActionKey: (key: string) => MethodDecorator;
3
+ export type RegisterScopeOptions = {
4
+ /** This scope is the hierarchy root (e.g. workspace). */
5
+ root?: boolean;
6
+ /** Context name of the root scope this scope descends from. */
7
+ rootScope?: string;
8
+ /** Master key (set on the root) — grants everything in all descendants. */
9
+ masterKey?: string;
10
+ /** Admin key — grants everything within this context. */
11
+ adminKey?: string;
12
+ };
13
+ export declare function registerScope<T extends IScopeService>(contextName: string, Service: Instantiable<T>, withId?: boolean, options?: RegisterScopeOptions): {
14
+ ActionKey: (key: string | string[], resolverHandler?: keyof T & string) => MethodDecorator;
15
+ QueryActionKey: (key: string | string[], resolverHandler?: keyof T & string) => MethodDecorator;
16
+ CreateActionKey: (key: string | string[], resolverHandler?: keyof T & string) => MethodDecorator;
17
+ ModifyActionKey: (key: string | string[], resolverHandler?: keyof T & string) => MethodDecorator;
18
+ RemoveActionKey: (key: string | string[], resolverHandler?: keyof T & string) => MethodDecorator;
8
19
  };
@@ -2,79 +2,91 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.registerScope = registerScope;
4
4
  const env_1 = require("../env");
5
- function registerScope(contextName, Service, withId) {
5
+ function registerScope(contextName, Service, withId, options) {
6
6
  const keys = [];
7
7
  env_1.env.scopesKeys.set(contextName, keys);
8
8
  if (Service) {
9
9
  env_1.env.scopeServiceRegistry.set(contextName, {
10
- Service: Service
10
+ Service: Service,
11
+ withId: withId !== false,
12
+ root: options?.root,
13
+ rootScope: options?.rootScope,
14
+ masterKey: options?.masterKey,
15
+ adminKey: options?.adminKey,
11
16
  });
12
17
  }
18
+ // Master/admin keys are grantable like any other key — list them in the catalog.
19
+ if (options?.adminKey) {
20
+ keys.push({ contextName, name: options.adminKey });
21
+ }
22
+ if (options?.root && options?.masterKey) {
23
+ keys.push({ contextName, name: options.masterKey });
24
+ }
13
25
  const getProperty = (target, propertyKey) => {
14
26
  const property = core
15
27
  .storage
16
28
  .createProperty(target, propertyKey);
17
- if (!property.keys)
29
+ if (!property.keys) {
18
30
  property.keys = new Map();
31
+ }
19
32
  return property;
20
33
  };
34
+ /**
35
+ * Registers one OR many keys on a slot.
36
+ *
37
+ * Concept: "a key opens a door". Some endpoints are a door with several
38
+ * locks — pass an array and ALL keys become required (AND). Stacking the
39
+ * same-slot decorator also accumulates, so a slot may even combine keys from
40
+ * different scope contexts. The resolver handler is shared by the keys set in
41
+ * the same call.
42
+ */
43
+ const setScopeKey = (property, slot, key, type, resolverHandler) => {
44
+ const names = Array.isArray(key) ? key : [key];
45
+ const slotKeys = property.keys.get(slot) ?? [];
46
+ for (const name of names) {
47
+ keys.push({
48
+ contextName: contextName,
49
+ name: name,
50
+ type,
51
+ });
52
+ slotKeys.push({
53
+ contextName: contextName,
54
+ name: name,
55
+ withId: withId,
56
+ resolverHandler: resolverHandler,
57
+ });
58
+ }
59
+ property.keys.set(slot, slotKeys);
60
+ };
21
61
  return {
22
- ActionKey: function (key) {
62
+ ActionKey: function (key, resolverHandler) {
63
+ return function (target, propertyKey) {
64
+ const property = getProperty(target, propertyKey);
65
+ setScopeKey(property, "default", key, undefined, resolverHandler);
66
+ };
67
+ },
68
+ QueryActionKey: function (key, resolverHandler) {
23
69
  return function (target, propertyKey) {
24
- keys.push({
25
- contextName: contextName,
26
- name: key
27
- });
28
70
  const property = getProperty(target, propertyKey);
29
- property.keys.set('default', {
30
- contextName: contextName,
31
- name: key,
32
- withId: withId
33
- });
71
+ setScopeKey(property, "query", key, undefined, resolverHandler);
34
72
  };
35
73
  },
36
- QueryActionKey: function (key) {
74
+ CreateActionKey: function (key, resolverHandler) {
37
75
  return function (target, propertyKey) {
38
- keys.push({
39
- contextName: contextName,
40
- name: key
41
- });
42
76
  const property = getProperty(target, propertyKey);
43
- property.keys.set('query', {
44
- contextName: contextName,
45
- name: key,
46
- withId: withId
47
- });
77
+ setScopeKey(property, "create", key, "create", resolverHandler);
48
78
  };
49
79
  },
50
- CreateActionKey: function (key) {
80
+ ModifyActionKey: function (key, resolverHandler) {
51
81
  return function (target, propertyKey) {
52
- keys.push({
53
- contextName: contextName,
54
- type: 'create',
55
- name: key
56
- });
57
82
  const property = getProperty(target, propertyKey);
58
- property.keys.set('create', {
59
- contextName: contextName,
60
- name: key,
61
- withId: withId
62
- });
83
+ setScopeKey(property, "modify", key, "modify", resolverHandler);
63
84
  };
64
85
  },
65
- ModifyActionKey: function (key) {
86
+ RemoveActionKey: function (key, resolverHandler) {
66
87
  return function (target, propertyKey) {
67
- keys.push({
68
- contextName: contextName,
69
- type: 'modify',
70
- name: key
71
- });
72
88
  const property = getProperty(target, propertyKey);
73
- property.keys.set('modify', {
74
- contextName: contextName,
75
- name: key,
76
- withId: withId
77
- });
89
+ setScopeKey(property, "remove", key, "remove", resolverHandler);
78
90
  };
79
91
  },
80
92
  };
@@ -1 +1 @@
1
- {"version":3,"file":"register-scope.js","sourceRoot":"./","sources":["access/functions/register-scope.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"register-scope.js","sourceRoot":"./","sources":["access/functions/register-scope.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ import { Dictionary } from "@rockster/common";
2
+ import { IRequestContext } from "../../core/interfaces/request-context";
3
+ import { IResolveScopeContextIdParams } from "../interfaces/resolve-scope-context-id";
4
+ export type ResolveScopeContextIdParams = IResolveScopeContextIdParams & {
5
+ resolverHandler?: string;
6
+ requestContext?: IRequestContext;
7
+ pendingAnnotations?: Dictionary<unknown>;
8
+ };
9
+ export declare function resolveScopeContextId(params: ResolveScopeContextIdParams): Promise<string | undefined>;