@endora-commerce/platform 0.100.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 (657) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +58 -0
  3. package/dist/cli/dispatch.d.ts +146 -0
  4. package/dist/cli/dispatch.d.ts.map +1 -0
  5. package/dist/cli/dispatch.js +259 -0
  6. package/dist/cli/dispatch.js.map +1 -0
  7. package/dist/cli/index.d.ts +58 -0
  8. package/dist/cli/index.d.ts.map +1 -0
  9. package/dist/cli/index.js +58 -0
  10. package/dist/cli/index.js.map +1 -0
  11. package/dist/cli/module-commands.d.ts +118 -0
  12. package/dist/cli/module-commands.d.ts.map +1 -0
  13. package/dist/cli/module-commands.js +120 -0
  14. package/dist/cli/module-commands.js.map +1 -0
  15. package/dist/commands/actor.d.ts +19 -0
  16. package/dist/commands/actor.d.ts.map +1 -0
  17. package/dist/commands/actor.js +45 -0
  18. package/dist/commands/actor.js.map +1 -0
  19. package/dist/commands/audit-from-context.d.ts +24 -0
  20. package/dist/commands/audit-from-context.d.ts.map +1 -0
  21. package/dist/commands/audit-from-context.js +28 -0
  22. package/dist/commands/audit-from-context.js.map +1 -0
  23. package/dist/commands/command-bus.d.ts +40 -0
  24. package/dist/commands/command-bus.d.ts.map +1 -0
  25. package/dist/commands/command-bus.js +46 -0
  26. package/dist/commands/command-bus.js.map +1 -0
  27. package/dist/commands/command.d.ts +76 -0
  28. package/dist/commands/command.d.ts.map +1 -0
  29. package/dist/commands/command.js +2 -0
  30. package/dist/commands/command.js.map +1 -0
  31. package/dist/commands/index.d.ts +65 -0
  32. package/dist/commands/index.d.ts.map +1 -0
  33. package/dist/commands/index.js +57 -0
  34. package/dist/commands/index.js.map +1 -0
  35. package/dist/commands/reversible.d.ts +66 -0
  36. package/dist/commands/reversible.d.ts.map +1 -0
  37. package/dist/commands/reversible.js +41 -0
  38. package/dist/commands/reversible.js.map +1 -0
  39. package/dist/composition/compose-app.d.ts +305 -0
  40. package/dist/composition/compose-app.d.ts.map +1 -0
  41. package/dist/composition/compose-app.js +939 -0
  42. package/dist/composition/compose-app.js.map +1 -0
  43. package/dist/composition/index.d.ts +92 -0
  44. package/dist/composition/index.d.ts.map +1 -0
  45. package/dist/composition/index.js +175 -0
  46. package/dist/composition/index.js.map +1 -0
  47. package/dist/composition/newsletter-token-secret.d.ts +19 -0
  48. package/dist/composition/newsletter-token-secret.d.ts.map +1 -0
  49. package/dist/composition/newsletter-token-secret.js +24 -0
  50. package/dist/composition/newsletter-token-secret.js.map +1 -0
  51. package/dist/composition/process-runs-workers.d.ts +17 -0
  52. package/dist/composition/process-runs-workers.d.ts.map +1 -0
  53. package/dist/composition/process-runs-workers.js +19 -0
  54. package/dist/composition/process-runs-workers.js.map +1 -0
  55. package/dist/db/baseline-migration-inventory.d.ts +15 -0
  56. package/dist/db/baseline-migration-inventory.d.ts.map +1 -0
  57. package/dist/db/baseline-migration-inventory.js +115 -0
  58. package/dist/db/baseline-migration-inventory.js.map +1 -0
  59. package/dist/db/configured-entities.d.ts +74 -0
  60. package/dist/db/configured-entities.d.ts.map +1 -0
  61. package/dist/db/configured-entities.js +20 -0
  62. package/dist/db/configured-entities.js.map +1 -0
  63. package/dist/db/configured-migrations.d.ts +199 -0
  64. package/dist/db/configured-migrations.d.ts.map +1 -0
  65. package/dist/db/configured-migrations.js +181 -0
  66. package/dist/db/configured-migrations.js.map +1 -0
  67. package/dist/db/index.d.ts +54 -0
  68. package/dist/db/index.d.ts.map +1 -0
  69. package/dist/db/index.js +54 -0
  70. package/dist/db/index.js.map +1 -0
  71. package/dist/db/migrate.d.ts +21 -0
  72. package/dist/db/migrate.d.ts.map +1 -0
  73. package/dist/db/migrate.js +48 -0
  74. package/dist/db/migrate.js.map +1 -0
  75. package/dist/db/migration-order.d.ts +159 -0
  76. package/dist/db/migration-order.d.ts.map +1 -0
  77. package/dist/db/migration-order.js +273 -0
  78. package/dist/db/migration-order.js.map +1 -0
  79. package/dist/db/mikro-orm.config.d.ts +51 -0
  80. package/dist/db/mikro-orm.config.d.ts.map +1 -0
  81. package/dist/db/mikro-orm.config.js +64 -0
  82. package/dist/db/mikro-orm.config.js.map +1 -0
  83. package/dist/db/orm.d.ts +40 -0
  84. package/dist/db/orm.d.ts.map +1 -0
  85. package/dist/db/orm.js +25 -0
  86. package/dist/db/orm.js.map +1 -0
  87. package/dist/db/platform-schema.d.ts +102 -0
  88. package/dist/db/platform-schema.d.ts.map +1 -0
  89. package/dist/db/platform-schema.js +79 -0
  90. package/dist/db/platform-schema.js.map +1 -0
  91. package/dist/db/pluralizing-naming-strategy.d.ts +16 -0
  92. package/dist/db/pluralizing-naming-strategy.d.ts.map +1 -0
  93. package/dist/db/pluralizing-naming-strategy.js +66 -0
  94. package/dist/db/pluralizing-naming-strategy.js.map +1 -0
  95. package/dist/demo/guard.d.ts +101 -0
  96. package/dist/demo/guard.d.ts.map +1 -0
  97. package/dist/demo/guard.js +168 -0
  98. package/dist/demo/guard.js.map +1 -0
  99. package/dist/demo/host-command.d.ts +133 -0
  100. package/dist/demo/host-command.d.ts.map +1 -0
  101. package/dist/demo/host-command.js +113 -0
  102. package/dist/demo/host-command.js.map +1 -0
  103. package/dist/demo/index.d.ts +82 -0
  104. package/dist/demo/index.d.ts.map +1 -0
  105. package/dist/demo/index.js +82 -0
  106. package/dist/demo/index.js.map +1 -0
  107. package/dist/demo/packages.d.ts +67 -0
  108. package/dist/demo/packages.d.ts.map +1 -0
  109. package/dist/demo/packages.js +132 -0
  110. package/dist/demo/packages.js.map +1 -0
  111. package/dist/demo/plan.d.ts +111 -0
  112. package/dist/demo/plan.d.ts.map +1 -0
  113. package/dist/demo/plan.js +74 -0
  114. package/dist/demo/plan.js.map +1 -0
  115. package/dist/demo/report.d.ts +17 -0
  116. package/dist/demo/report.d.ts.map +1 -0
  117. package/dist/demo/report.js +85 -0
  118. package/dist/demo/report.js.map +1 -0
  119. package/dist/demo/runner.d.ts +207 -0
  120. package/dist/demo/runner.d.ts.map +1 -0
  121. package/dist/demo/runner.js +169 -0
  122. package/dist/demo/runner.js.map +1 -0
  123. package/dist/demo/scope.d.ts +44 -0
  124. package/dist/demo/scope.d.ts.map +1 -0
  125. package/dist/demo/scope.js +44 -0
  126. package/dist/demo/scope.js.map +1 -0
  127. package/dist/env/index.d.ts +68 -0
  128. package/dist/env/index.d.ts.map +1 -0
  129. package/dist/env/index.js +427 -0
  130. package/dist/env/index.js.map +1 -0
  131. package/dist/events/bus.d.ts +29 -0
  132. package/dist/events/bus.d.ts.map +1 -0
  133. package/dist/events/bus.js +67 -0
  134. package/dist/events/bus.js.map +1 -0
  135. package/dist/events/index.d.ts +19 -0
  136. package/dist/events/index.d.ts.map +1 -0
  137. package/dist/events/index.js +19 -0
  138. package/dist/events/index.js.map +1 -0
  139. package/dist/http/cursor.d.ts +10 -0
  140. package/dist/http/cursor.d.ts.map +1 -0
  141. package/dist/http/cursor.js +20 -0
  142. package/dist/http/cursor.js.map +1 -0
  143. package/dist/http/error-envelope.d.ts +127 -0
  144. package/dist/http/error-envelope.d.ts.map +1 -0
  145. package/dist/http/error-envelope.js +402 -0
  146. package/dist/http/error-envelope.js.map +1 -0
  147. package/dist/http/health.d.ts +88 -0
  148. package/dist/http/health.d.ts.map +1 -0
  149. package/dist/http/health.js +77 -0
  150. package/dist/http/health.js.map +1 -0
  151. package/dist/http/index.d.ts +50 -0
  152. package/dist/http/index.d.ts.map +1 -0
  153. package/dist/http/index.js +50 -0
  154. package/dist/http/index.js.map +1 -0
  155. package/dist/http/interceptors/dispatch.d.ts +14 -0
  156. package/dist/http/interceptors/dispatch.d.ts.map +1 -0
  157. package/dist/http/interceptors/dispatch.js +113 -0
  158. package/dist/http/interceptors/dispatch.js.map +1 -0
  159. package/dist/http/interceptors/index.d.ts +6 -0
  160. package/dist/http/interceptors/index.d.ts.map +1 -0
  161. package/dist/http/interceptors/index.js +5 -0
  162. package/dist/http/interceptors/index.js.map +1 -0
  163. package/dist/http/interceptors/registry.d.ts +44 -0
  164. package/dist/http/interceptors/registry.d.ts.map +1 -0
  165. package/dist/http/interceptors/registry.js +123 -0
  166. package/dist/http/interceptors/registry.js.map +1 -0
  167. package/dist/http/interceptors/route-table.d.ts +33 -0
  168. package/dist/http/interceptors/route-table.d.ts.map +1 -0
  169. package/dist/http/interceptors/route-table.js +39 -0
  170. package/dist/http/interceptors/route-table.js.map +1 -0
  171. package/dist/http/interceptors/types.d.ts +101 -0
  172. package/dist/http/interceptors/types.d.ts.map +1 -0
  173. package/dist/http/interceptors/types.js +2 -0
  174. package/dist/http/interceptors/types.js.map +1 -0
  175. package/dist/http/interceptors/validation.d.ts +22 -0
  176. package/dist/http/interceptors/validation.d.ts.map +1 -0
  177. package/dist/http/interceptors/validation.js +39 -0
  178. package/dist/http/interceptors/validation.js.map +1 -0
  179. package/dist/http/logger.d.ts +9 -0
  180. package/dist/http/logger.d.ts.map +1 -0
  181. package/dist/http/logger.js +25 -0
  182. package/dist/http/logger.js.map +1 -0
  183. package/dist/http/openapi.d.ts +21 -0
  184. package/dist/http/openapi.d.ts.map +1 -0
  185. package/dist/http/openapi.js +114 -0
  186. package/dist/http/openapi.js.map +1 -0
  187. package/dist/http/product-audience.d.ts +78 -0
  188. package/dist/http/product-audience.d.ts.map +1 -0
  189. package/dist/http/product-audience.js +92 -0
  190. package/dist/http/product-audience.js.map +1 -0
  191. package/dist/http/request-actor.d.ts +82 -0
  192. package/dist/http/request-actor.d.ts.map +1 -0
  193. package/dist/http/request-actor.js +2 -0
  194. package/dist/http/request-actor.js.map +1 -0
  195. package/dist/http/server.d.ts +60 -0
  196. package/dist/http/server.d.ts.map +1 -0
  197. package/dist/http/server.js +117 -0
  198. package/dist/http/server.js.map +1 -0
  199. package/dist/http/storefront-revalidator.d.ts +29 -0
  200. package/dist/http/storefront-revalidator.d.ts.map +1 -0
  201. package/dist/http/storefront-revalidator.js +34 -0
  202. package/dist/http/storefront-revalidator.js.map +1 -0
  203. package/dist/http/test-actor-carrier.d.ts +28 -0
  204. package/dist/http/test-actor-carrier.d.ts.map +1 -0
  205. package/dist/http/test-actor-carrier.js +10 -0
  206. package/dist/http/test-actor-carrier.js.map +1 -0
  207. package/dist/http/trusted-proxy.d.ts +48 -0
  208. package/dist/http/trusted-proxy.d.ts.map +1 -0
  209. package/dist/http/trusted-proxy.js +136 -0
  210. package/dist/http/trusted-proxy.js.map +1 -0
  211. package/dist/kernel/audit/audit-log-entry.entity.d.ts +33 -0
  212. package/dist/kernel/audit/audit-log-entry.entity.d.ts.map +1 -0
  213. package/dist/kernel/audit/audit-log-entry.entity.js +102 -0
  214. package/dist/kernel/audit/audit-log-entry.entity.js.map +1 -0
  215. package/dist/kernel/audit/audit-log-service.d.ts +63 -0
  216. package/dist/kernel/audit/audit-log-service.d.ts.map +1 -0
  217. package/dist/kernel/audit/audit-log-service.js +107 -0
  218. package/dist/kernel/audit/audit-log-service.js.map +1 -0
  219. package/dist/kernel/cache/in-process-cache-registry.d.ts +93 -0
  220. package/dist/kernel/cache/in-process-cache-registry.d.ts.map +1 -0
  221. package/dist/kernel/cache/in-process-cache-registry.js +78 -0
  222. package/dist/kernel/cache/in-process-cache-registry.js.map +1 -0
  223. package/dist/kernel/cache/shared-drop-marks.d.ts +39 -0
  224. package/dist/kernel/cache/shared-drop-marks.d.ts.map +1 -0
  225. package/dist/kernel/cache/shared-drop-marks.js +68 -0
  226. package/dist/kernel/cache/shared-drop-marks.js.map +1 -0
  227. package/dist/kernel/compose.d.ts +234 -0
  228. package/dist/kernel/compose.d.ts.map +1 -0
  229. package/dist/kernel/compose.js +279 -0
  230. package/dist/kernel/compose.js.map +1 -0
  231. package/dist/kernel/container.d.ts +95 -0
  232. package/dist/kernel/container.d.ts.map +1 -0
  233. package/dist/kernel/container.js +90 -0
  234. package/dist/kernel/container.js.map +1 -0
  235. package/dist/kernel/contribution-sinks.d.ts +106 -0
  236. package/dist/kernel/contribution-sinks.d.ts.map +1 -0
  237. package/dist/kernel/contribution-sinks.js +153 -0
  238. package/dist/kernel/contribution-sinks.js.map +1 -0
  239. package/dist/kernel/crypto/password-hasher.d.ts +3 -0
  240. package/dist/kernel/crypto/password-hasher.d.ts.map +1 -0
  241. package/dist/kernel/crypto/password-hasher.js +44 -0
  242. package/dist/kernel/crypto/password-hasher.js.map +1 -0
  243. package/dist/kernel/i18n/error-envelope-options.d.ts +56 -0
  244. package/dist/kernel/i18n/error-envelope-options.d.ts.map +1 -0
  245. package/dist/kernel/i18n/error-envelope-options.js +46 -0
  246. package/dist/kernel/i18n/error-envelope-options.js.map +1 -0
  247. package/dist/kernel/i18n/error-translation.d.ts +144 -0
  248. package/dist/kernel/i18n/error-translation.d.ts.map +1 -0
  249. package/dist/kernel/i18n/error-translation.js +84 -0
  250. package/dist/kernel/i18n/error-translation.js.map +1 -0
  251. package/dist/kernel/i18n/request-language.d.ts +80 -0
  252. package/dist/kernel/i18n/request-language.d.ts.map +1 -0
  253. package/dist/kernel/i18n/request-language.js +168 -0
  254. package/dist/kernel/i18n/request-language.js.map +1 -0
  255. package/dist/kernel/index.d.ts +142 -0
  256. package/dist/kernel/index.d.ts.map +1 -0
  257. package/dist/kernel/index.js +160 -0
  258. package/dist/kernel/index.js.map +1 -0
  259. package/dist/kernel/lazy-port.d.ts +59 -0
  260. package/dist/kernel/lazy-port.d.ts.map +1 -0
  261. package/dist/kernel/lazy-port.js +78 -0
  262. package/dist/kernel/lazy-port.js.map +1 -0
  263. package/dist/kernel/lifecycle/activation-resolver.d.ts +63 -0
  264. package/dist/kernel/lifecycle/activation-resolver.d.ts.map +1 -0
  265. package/dist/kernel/lifecycle/activation-resolver.js +70 -0
  266. package/dist/kernel/lifecycle/activation-resolver.js.map +1 -0
  267. package/dist/kernel/lifecycle/capability-registry.d.ts +145 -0
  268. package/dist/kernel/lifecycle/capability-registry.d.ts.map +1 -0
  269. package/dist/kernel/lifecycle/capability-registry.js +170 -0
  270. package/dist/kernel/lifecycle/capability-registry.js.map +1 -0
  271. package/dist/kernel/lifecycle/effective-state.d.ts +126 -0
  272. package/dist/kernel/lifecycle/effective-state.d.ts.map +1 -0
  273. package/dist/kernel/lifecycle/effective-state.js +111 -0
  274. package/dist/kernel/lifecycle/effective-state.js.map +1 -0
  275. package/dist/kernel/lifecycle/module-registration.entity.d.ts +57 -0
  276. package/dist/kernel/lifecycle/module-registration.entity.d.ts.map +1 -0
  277. package/dist/kernel/lifecycle/module-registration.entity.js +111 -0
  278. package/dist/kernel/lifecycle/module-registration.entity.js.map +1 -0
  279. package/dist/kernel/lifecycle/plugin-helpers.d.ts +165 -0
  280. package/dist/kernel/lifecycle/plugin-helpers.d.ts.map +1 -0
  281. package/dist/kernel/lifecycle/plugin-helpers.js +395 -0
  282. package/dist/kernel/lifecycle/plugin-helpers.js.map +1 -0
  283. package/dist/kernel/lifecycle/registry-cache.d.ts +318 -0
  284. package/dist/kernel/lifecycle/registry-cache.d.ts.map +1 -0
  285. package/dist/kernel/lifecycle/registry-cache.js +509 -0
  286. package/dist/kernel/lifecycle/registry-cache.js.map +1 -0
  287. package/dist/kernel/lifecycle/required-modules.d.ts +137 -0
  288. package/dist/kernel/lifecycle/required-modules.d.ts.map +1 -0
  289. package/dist/kernel/lifecycle/required-modules.js +80 -0
  290. package/dist/kernel/lifecycle/required-modules.js.map +1 -0
  291. package/dist/kernel/lifecycle/unique-module-ids.d.ts +58 -0
  292. package/dist/kernel/lifecycle/unique-module-ids.d.ts.map +1 -0
  293. package/dist/kernel/lifecycle/unique-module-ids.js +82 -0
  294. package/dist/kernel/lifecycle/unique-module-ids.js.map +1 -0
  295. package/dist/kernel/logging.d.ts +116 -0
  296. package/dist/kernel/logging.d.ts.map +1 -0
  297. package/dist/kernel/logging.js +71 -0
  298. package/dist/kernel/logging.js.map +1 -0
  299. package/dist/kernel/module-context.d.ts +563 -0
  300. package/dist/kernel/module-context.d.ts.map +1 -0
  301. package/dist/kernel/module-context.js +670 -0
  302. package/dist/kernel/module-context.js.map +1 -0
  303. package/dist/kernel/ports/audit.d.ts +115 -0
  304. package/dist/kernel/ports/audit.d.ts.map +1 -0
  305. package/dist/kernel/ports/audit.js +2 -0
  306. package/dist/kernel/ports/audit.js.map +1 -0
  307. package/dist/kernel/ports/organizations.d.ts +56 -0
  308. package/dist/kernel/ports/organizations.d.ts.map +1 -0
  309. package/dist/kernel/ports/organizations.js +2 -0
  310. package/dist/kernel/ports/organizations.js.map +1 -0
  311. package/dist/kernel/ports/provide.d.ts +14 -0
  312. package/dist/kernel/ports/provide.d.ts.map +1 -0
  313. package/dist/kernel/ports/provide.js +50 -0
  314. package/dist/kernel/ports/provide.js.map +1 -0
  315. package/dist/kernel/ports/require-admin.d.ts +61 -0
  316. package/dist/kernel/ports/require-admin.d.ts.map +1 -0
  317. package/dist/kernel/ports/require-admin.js +2 -0
  318. package/dist/kernel/ports/require-admin.js.map +1 -0
  319. package/dist/kernel/ports/require-customer.d.ts +17 -0
  320. package/dist/kernel/ports/require-customer.d.ts.map +1 -0
  321. package/dist/kernel/ports/require-customer.js +2 -0
  322. package/dist/kernel/ports/require-customer.js.map +1 -0
  323. package/dist/kernel/ports/sales-channel.d.ts +84 -0
  324. package/dist/kernel/ports/sales-channel.d.ts.map +1 -0
  325. package/dist/kernel/ports/sales-channel.js +2 -0
  326. package/dist/kernel/ports/sales-channel.js.map +1 -0
  327. package/dist/kernel/ports/settings.d.ts +59 -0
  328. package/dist/kernel/ports/settings.d.ts.map +1 -0
  329. package/dist/kernel/ports/settings.js +2 -0
  330. package/dist/kernel/ports/settings.js.map +1 -0
  331. package/dist/kernel/public-api-base-url.d.ts +98 -0
  332. package/dist/kernel/public-api-base-url.d.ts.map +1 -0
  333. package/dist/kernel/public-api-base-url.js +144 -0
  334. package/dist/kernel/public-api-base-url.js.map +1 -0
  335. package/dist/kernel/request-scope-hook.d.ts +63 -0
  336. package/dist/kernel/request-scope-hook.d.ts.map +1 -0
  337. package/dist/kernel/request-scope-hook.js +67 -0
  338. package/dist/kernel/request-scope-hook.js.map +1 -0
  339. package/dist/kernel/sales-channels/channel-bridge-registry.d.ts +109 -0
  340. package/dist/kernel/sales-channels/channel-bridge-registry.d.ts.map +1 -0
  341. package/dist/kernel/sales-channels/channel-bridge-registry.js +75 -0
  342. package/dist/kernel/sales-channels/channel-bridge-registry.js.map +1 -0
  343. package/dist/kernel/sales-channels/compose.d.ts +69 -0
  344. package/dist/kernel/sales-channels/compose.d.ts.map +1 -0
  345. package/dist/kernel/sales-channels/compose.js +43 -0
  346. package/dist/kernel/sales-channels/compose.js.map +1 -0
  347. package/dist/kernel/sales-channels/default-channel-reconciler.d.ts +66 -0
  348. package/dist/kernel/sales-channels/default-channel-reconciler.d.ts.map +1 -0
  349. package/dist/kernel/sales-channels/default-channel-reconciler.js +91 -0
  350. package/dist/kernel/sales-channels/default-channel-reconciler.js.map +1 -0
  351. package/dist/kernel/sales-channels/no-system-default-channel.error.d.ts +28 -0
  352. package/dist/kernel/sales-channels/no-system-default-channel.error.d.ts.map +1 -0
  353. package/dist/kernel/sales-channels/no-system-default-channel.error.js +33 -0
  354. package/dist/kernel/sales-channels/no-system-default-channel.error.js.map +1 -0
  355. package/dist/kernel/sales-channels/request-channel-assortment.d.ts +72 -0
  356. package/dist/kernel/sales-channels/request-channel-assortment.d.ts.map +1 -0
  357. package/dist/kernel/sales-channels/request-channel-assortment.js +83 -0
  358. package/dist/kernel/sales-channels/request-channel-assortment.js.map +1 -0
  359. package/dist/kernel/sales-channels/sales-channel-membership.service.d.ts +157 -0
  360. package/dist/kernel/sales-channels/sales-channel-membership.service.d.ts.map +1 -0
  361. package/dist/kernel/sales-channels/sales-channel-membership.service.js +302 -0
  362. package/dist/kernel/sales-channels/sales-channel-membership.service.js.map +1 -0
  363. package/dist/kernel/sales-channels/sales-channel-resolver.middleware.d.ts +76 -0
  364. package/dist/kernel/sales-channels/sales-channel-resolver.middleware.d.ts.map +1 -0
  365. package/dist/kernel/sales-channels/sales-channel-resolver.middleware.js +184 -0
  366. package/dist/kernel/sales-channels/sales-channel-resolver.middleware.js.map +1 -0
  367. package/dist/kernel/sales-channels/sales-channel-resolver.service.d.ts +82 -0
  368. package/dist/kernel/sales-channels/sales-channel-resolver.service.d.ts.map +1 -0
  369. package/dist/kernel/sales-channels/sales-channel-resolver.service.js +126 -0
  370. package/dist/kernel/sales-channels/sales-channel-resolver.service.js.map +1 -0
  371. package/dist/kernel/sales-channels/sales-channel.entity.d.ts +50 -0
  372. package/dist/kernel/sales-channels/sales-channel.entity.d.ts.map +1 -0
  373. package/dist/kernel/sales-channels/sales-channel.entity.js +132 -0
  374. package/dist/kernel/sales-channels/sales-channel.entity.js.map +1 -0
  375. package/dist/kernel/sales-channels/sales-channels-cache.d.ts +170 -0
  376. package/dist/kernel/sales-channels/sales-channels-cache.d.ts.map +1 -0
  377. package/dist/kernel/sales-channels/sales-channels-cache.js +243 -0
  378. package/dist/kernel/sales-channels/sales-channels-cache.js.map +1 -0
  379. package/dist/kernel/scope.d.ts +153 -0
  380. package/dist/kernel/scope.d.ts.map +1 -0
  381. package/dist/kernel/scope.js +172 -0
  382. package/dist/kernel/scope.js.map +1 -0
  383. package/dist/kernel/settings/compose.d.ts +49 -0
  384. package/dist/kernel/settings/compose.d.ts.map +1 -0
  385. package/dist/kernel/settings/compose.js +21 -0
  386. package/dist/kernel/settings/compose.js.map +1 -0
  387. package/dist/kernel/settings/manifest-reconciler.d.ts +78 -0
  388. package/dist/kernel/settings/manifest-reconciler.d.ts.map +1 -0
  389. package/dist/kernel/settings/manifest-reconciler.js +343 -0
  390. package/dist/kernel/settings/manifest-reconciler.js.map +1 -0
  391. package/dist/kernel/settings/secret-value-codec.d.ts +52 -0
  392. package/dist/kernel/settings/secret-value-codec.d.ts.map +1 -0
  393. package/dist/kernel/settings/secret-value-codec.js +102 -0
  394. package/dist/kernel/settings/secret-value-codec.js.map +1 -0
  395. package/dist/kernel/settings/setting-group.entity.d.ts +25 -0
  396. package/dist/kernel/settings/setting-group.entity.d.ts.map +1 -0
  397. package/dist/kernel/settings/setting-group.entity.js +79 -0
  398. package/dist/kernel/settings/setting-group.entity.js.map +1 -0
  399. package/dist/kernel/settings/setting-value.entity.d.ts +23 -0
  400. package/dist/kernel/settings/setting-value.entity.d.ts.map +1 -0
  401. package/dist/kernel/settings/setting-value.entity.js +66 -0
  402. package/dist/kernel/settings/setting-value.entity.js.map +1 -0
  403. package/dist/kernel/settings/setting.entity.d.ts +56 -0
  404. package/dist/kernel/settings/setting.entity.d.ts.map +1 -0
  405. package/dist/kernel/settings/setting.entity.js +147 -0
  406. package/dist/kernel/settings/setting.entity.js.map +1 -0
  407. package/dist/kernel/settings/settings-cache.d.ts +158 -0
  408. package/dist/kernel/settings/settings-cache.d.ts.map +1 -0
  409. package/dist/kernel/settings/settings-cache.js +253 -0
  410. package/dist/kernel/settings/settings-cache.js.map +1 -0
  411. package/dist/kernel/settings/settings.service.d.ts +142 -0
  412. package/dist/kernel/settings/settings.service.d.ts.map +1 -0
  413. package/dist/kernel/settings/settings.service.js +294 -0
  414. package/dist/kernel/settings/settings.service.js.map +1 -0
  415. package/dist/lifecycle/backend.d.ts +51 -0
  416. package/dist/lifecycle/backend.d.ts.map +1 -0
  417. package/dist/lifecycle/backend.js +40 -0
  418. package/dist/lifecycle/backend.js.map +1 -0
  419. package/dist/lifecycle/commands/activation.commands.d.ts +97 -0
  420. package/dist/lifecycle/commands/activation.commands.d.ts.map +1 -0
  421. package/dist/lifecycle/commands/activation.commands.js +142 -0
  422. package/dist/lifecycle/commands/activation.commands.js.map +1 -0
  423. package/dist/lifecycle/commands/disable.d.ts +3 -0
  424. package/dist/lifecycle/commands/disable.d.ts.map +1 -0
  425. package/dist/lifecycle/commands/disable.js +126 -0
  426. package/dist/lifecycle/commands/disable.js.map +1 -0
  427. package/dist/lifecycle/commands/enable.d.ts +3 -0
  428. package/dist/lifecycle/commands/enable.d.ts.map +1 -0
  429. package/dist/lifecycle/commands/enable.js +102 -0
  430. package/dist/lifecycle/commands/enable.js.map +1 -0
  431. package/dist/lifecycle/commands/install.d.ts +3 -0
  432. package/dist/lifecycle/commands/install.d.ts.map +1 -0
  433. package/dist/lifecycle/commands/install.js +263 -0
  434. package/dist/lifecycle/commands/install.js.map +1 -0
  435. package/dist/lifecycle/commands/operator-entry.d.ts +104 -0
  436. package/dist/lifecycle/commands/operator-entry.d.ts.map +1 -0
  437. package/dist/lifecycle/commands/operator-entry.js +127 -0
  438. package/dist/lifecycle/commands/operator-entry.js.map +1 -0
  439. package/dist/lifecycle/commands/operator-runtime.d.ts +147 -0
  440. package/dist/lifecycle/commands/operator-runtime.d.ts.map +1 -0
  441. package/dist/lifecycle/commands/operator-runtime.js +40 -0
  442. package/dist/lifecycle/commands/operator-runtime.js.map +1 -0
  443. package/dist/lifecycle/commands/status.d.ts +3 -0
  444. package/dist/lifecycle/commands/status.d.ts.map +1 -0
  445. package/dist/lifecycle/commands/status.js +108 -0
  446. package/dist/lifecycle/commands/status.js.map +1 -0
  447. package/dist/lifecycle/commands/uninstall.d.ts +3 -0
  448. package/dist/lifecycle/commands/uninstall.d.ts.map +1 -0
  449. package/dist/lifecycle/commands/uninstall.js +223 -0
  450. package/dist/lifecycle/commands/uninstall.js.map +1 -0
  451. package/dist/lifecycle/divergence-declaration.d.ts +74 -0
  452. package/dist/lifecycle/divergence-declaration.d.ts.map +1 -0
  453. package/dist/lifecycle/divergence-declaration.js +92 -0
  454. package/dist/lifecycle/divergence-declaration.js.map +1 -0
  455. package/dist/lifecycle/i18n/en.json +4 -0
  456. package/dist/lifecycle/i18n/pl.json +4 -0
  457. package/dist/lifecycle/index.d.ts +110 -0
  458. package/dist/lifecycle/index.d.ts.map +1 -0
  459. package/dist/lifecycle/index.js +189 -0
  460. package/dist/lifecycle/index.js.map +1 -0
  461. package/dist/lifecycle/manifest-registry.d.ts +244 -0
  462. package/dist/lifecycle/manifest-registry.d.ts.map +1 -0
  463. package/dist/lifecycle/manifest-registry.js +223 -0
  464. package/dist/lifecycle/manifest-registry.js.map +1 -0
  465. package/dist/lifecycle/manifest.d.ts +166 -0
  466. package/dist/lifecycle/manifest.d.ts.map +1 -0
  467. package/dist/lifecycle/manifest.js +121 -0
  468. package/dist/lifecycle/manifest.js.map +1 -0
  469. package/dist/lifecycle/plugin.d.ts +56 -0
  470. package/dist/lifecycle/plugin.d.ts.map +1 -0
  471. package/dist/lifecycle/plugin.js +59 -0
  472. package/dist/lifecycle/plugin.js.map +1 -0
  473. package/dist/lifecycle/resident.d.ts +16 -0
  474. package/dist/lifecycle/resident.d.ts.map +1 -0
  475. package/dist/lifecycle/resident.js +59 -0
  476. package/dist/lifecycle/resident.js.map +1 -0
  477. package/dist/lifecycle/routes.admin.d.ts +57 -0
  478. package/dist/lifecycle/routes.admin.d.ts.map +1 -0
  479. package/dist/lifecycle/routes.admin.js +162 -0
  480. package/dist/lifecycle/routes.admin.js.map +1 -0
  481. package/dist/lifecycle/routes.storefront.d.ts +26 -0
  482. package/dist/lifecycle/routes.storefront.d.ts.map +1 -0
  483. package/dist/lifecycle/routes.storefront.js +36 -0
  484. package/dist/lifecycle/routes.storefront.js.map +1 -0
  485. package/dist/lifecycle/services/deactivation-ledger.d.ts +216 -0
  486. package/dist/lifecycle/services/deactivation-ledger.d.ts.map +1 -0
  487. package/dist/lifecycle/services/deactivation-ledger.js +171 -0
  488. package/dist/lifecycle/services/deactivation-ledger.js.map +1 -0
  489. package/dist/lifecycle/services/dep-graph.d.ts +119 -0
  490. package/dist/lifecycle/services/dep-graph.d.ts.map +1 -0
  491. package/dist/lifecycle/services/dep-graph.js +334 -0
  492. package/dist/lifecycle/services/dep-graph.js.map +1 -0
  493. package/dist/lifecycle/services/gating-graph.d.ts +164 -0
  494. package/dist/lifecycle/services/gating-graph.d.ts.map +1 -0
  495. package/dist/lifecycle/services/gating-graph.js +203 -0
  496. package/dist/lifecycle/services/gating-graph.js.map +1 -0
  497. package/dist/lifecycle/services/lock.d.ts +27 -0
  498. package/dist/lifecycle/services/lock.d.ts.map +1 -0
  499. package/dist/lifecycle/services/lock.js +82 -0
  500. package/dist/lifecycle/services/lock.js.map +1 -0
  501. package/dist/lifecycle/services/manifest-loader.d.ts +125 -0
  502. package/dist/lifecycle/services/manifest-loader.d.ts.map +1 -0
  503. package/dist/lifecycle/services/manifest-loader.js +210 -0
  504. package/dist/lifecycle/services/manifest-loader.js.map +1 -0
  505. package/dist/lifecycle/services/migration-ownership.d.ts +36 -0
  506. package/dist/lifecycle/services/migration-ownership.d.ts.map +1 -0
  507. package/dist/lifecycle/services/migration-ownership.js +15 -0
  508. package/dist/lifecycle/services/migration-ownership.js.map +1 -0
  509. package/dist/lifecycle/services/module-id-claims.d.ts +38 -0
  510. package/dist/lifecycle/services/module-id-claims.d.ts.map +1 -0
  511. package/dist/lifecycle/services/module-id-claims.js +123 -0
  512. package/dist/lifecycle/services/module-id-claims.js.map +1 -0
  513. package/dist/lifecycle/services/module-origin.d.ts +55 -0
  514. package/dist/lifecycle/services/module-origin.d.ts.map +1 -0
  515. package/dist/lifecycle/services/module-origin.js +47 -0
  516. package/dist/lifecycle/services/module-origin.js.map +1 -0
  517. package/dist/lifecycle/services/orchestrator.d.ts +235 -0
  518. package/dist/lifecycle/services/orchestrator.d.ts.map +1 -0
  519. package/dist/lifecycle/services/orchestrator.js +954 -0
  520. package/dist/lifecycle/services/orchestrator.js.map +1 -0
  521. package/dist/lifecycle/services/presence-load.d.ts +281 -0
  522. package/dist/lifecycle/services/presence-load.d.ts.map +1 -0
  523. package/dist/lifecycle/services/presence-load.js +437 -0
  524. package/dist/lifecycle/services/presence-load.js.map +1 -0
  525. package/dist/lifecycle/services/static-registry.d.ts +47 -0
  526. package/dist/lifecycle/services/static-registry.d.ts.map +1 -0
  527. package/dist/lifecycle/services/static-registry.js +41 -0
  528. package/dist/lifecycle/services/static-registry.js.map +1 -0
  529. package/dist/migrations/20260424T165847_core_foundation_init.d.ts +25 -0
  530. package/dist/migrations/20260424T165847_core_foundation_init.d.ts.map +1 -0
  531. package/dist/migrations/20260424T165847_core_foundation_init.js +238 -0
  532. package/dist/migrations/20260424T165847_core_foundation_init.js.map +1 -0
  533. package/dist/migrations/20260425T050720_core_commerce_init.d.ts +19 -0
  534. package/dist/migrations/20260425T050720_core_commerce_init.d.ts.map +1 -0
  535. package/dist/migrations/20260425T050720_core_commerce_init.js +200 -0
  536. package/dist/migrations/20260425T050720_core_commerce_init.js.map +1 -0
  537. package/dist/migrations/20260430T101450_core_settings_init.d.ts +25 -0
  538. package/dist/migrations/20260430T101450_core_settings_init.d.ts.map +1 -0
  539. package/dist/migrations/20260430T101450_core_settings_init.js +113 -0
  540. package/dist/migrations/20260430T101450_core_settings_init.js.map +1 -0
  541. package/dist/migrations/20260430T170044_core_sales_channels_promote.d.ts +67 -0
  542. package/dist/migrations/20260430T170044_core_sales_channels_promote.d.ts.map +1 -0
  543. package/dist/migrations/20260430T170044_core_sales_channels_promote.js +101 -0
  544. package/dist/migrations/20260430T170044_core_sales_channels_promote.js.map +1 -0
  545. package/dist/migrations/20260506T200657_core_module_lifecycle_init.d.ts +21 -0
  546. package/dist/migrations/20260506T200657_core_module_lifecycle_init.d.ts.map +1 -0
  547. package/dist/migrations/20260506T200657_core_module_lifecycle_init.js +41 -0
  548. package/dist/migrations/20260506T200657_core_module_lifecycle_init.js.map +1 -0
  549. package/dist/migrations/20260514T111329_core_settings_global_value.d.ts +30 -0
  550. package/dist/migrations/20260514T111329_core_settings_global_value.d.ts.map +1 -0
  551. package/dist/migrations/20260514T111329_core_settings_global_value.js +34 -0
  552. package/dist/migrations/20260514T111329_core_settings_global_value.js.map +1 -0
  553. package/dist/migrations/20260611T140411_core_settings_secret_value_type.d.ts +26 -0
  554. package/dist/migrations/20260611T140411_core_settings_secret_value_type.d.ts.map +1 -0
  555. package/dist/migrations/20260611T140411_core_settings_secret_value_type.js +63 -0
  556. package/dist/migrations/20260611T140411_core_settings_secret_value_type.js.map +1 -0
  557. package/dist/migrations/20260611T140419_core_settings_enum_options.d.ts +19 -0
  558. package/dist/migrations/20260611T140419_core_settings_enum_options.d.ts.map +1 -0
  559. package/dist/migrations/20260611T140419_core_settings_enum_options.js +23 -0
  560. package/dist/migrations/20260611T140419_core_settings_enum_options.js.map +1 -0
  561. package/dist/migrations/20260629T090100_core_settings_hidden_flag.d.ts +20 -0
  562. package/dist/migrations/20260629T090100_core_settings_hidden_flag.d.ts.map +1 -0
  563. package/dist/migrations/20260629T090100_core_settings_hidden_flag.js +24 -0
  564. package/dist/migrations/20260629T090100_core_settings_hidden_flag.js.map +1 -0
  565. package/dist/migrations/20260717T134752_core_tenant_scope_indexes.d.ts +27 -0
  566. package/dist/migrations/20260717T134752_core_tenant_scope_indexes.d.ts.map +1 -0
  567. package/dist/migrations/20260717T134752_core_tenant_scope_indexes.js +32 -0
  568. package/dist/migrations/20260717T134752_core_tenant_scope_indexes.js.map +1 -0
  569. package/dist/migrations/20260721T011510_core_settings_credential_ref_value_type.d.ts +24 -0
  570. package/dist/migrations/20260721T011510_core_settings_credential_ref_value_type.d.ts.map +1 -0
  571. package/dist/migrations/20260721T011510_core_settings_credential_ref_value_type.js +57 -0
  572. package/dist/migrations/20260721T011510_core_settings_credential_ref_value_type.js.map +1 -0
  573. package/dist/migrations/20260816T203339_core_retire_core_activation_settings.d.ts +39 -0
  574. package/dist/migrations/20260816T203339_core_retire_core_activation_settings.d.ts.map +1 -0
  575. package/dist/migrations/20260816T203339_core_retire_core_activation_settings.js +59 -0
  576. package/dist/migrations/20260816T203339_core_retire_core_activation_settings.js.map +1 -0
  577. package/dist/migrations/20260919T101500_core_module_registrations_boot_converged.d.ts +34 -0
  578. package/dist/migrations/20260919T101500_core_module_registrations_boot_converged.d.ts.map +1 -0
  579. package/dist/migrations/20260919T101500_core_module_registrations_boot_converged.js +38 -0
  580. package/dist/migrations/20260919T101500_core_module_registrations_boot_converged.js.map +1 -0
  581. package/dist/migrations/baseline-migrations.generated.d.ts +2 -0
  582. package/dist/migrations/baseline-migrations.generated.d.ts.map +1 -0
  583. package/dist/migrations/baseline-migrations.generated.js +136 -0
  584. package/dist/migrations/baseline-migrations.generated.js.map +1 -0
  585. package/dist/migrations/index.d.ts +62 -0
  586. package/dist/migrations/index.d.ts.map +1 -0
  587. package/dist/migrations/index.js +75 -0
  588. package/dist/migrations/index.js.map +1 -0
  589. package/dist/overlay/deployment-roots.d.ts +37 -0
  590. package/dist/overlay/deployment-roots.d.ts.map +1 -0
  591. package/dist/overlay/deployment-roots.js +90 -0
  592. package/dist/overlay/deployment-roots.js.map +1 -0
  593. package/dist/overlay/index.d.ts +62 -0
  594. package/dist/overlay/index.d.ts.map +1 -0
  595. package/dist/overlay/index.js +62 -0
  596. package/dist/overlay/index.js.map +1 -0
  597. package/dist/overlay/overlay-runtime.d.ts +173 -0
  598. package/dist/overlay/overlay-runtime.d.ts.map +1 -0
  599. package/dist/overlay/overlay-runtime.js +281 -0
  600. package/dist/overlay/overlay-runtime.js.map +1 -0
  601. package/dist/overlay/resolve-overlay.d.ts +41 -0
  602. package/dist/overlay/resolve-overlay.d.ts.map +1 -0
  603. package/dist/overlay/resolve-overlay.js +72 -0
  604. package/dist/overlay/resolve-overlay.js.map +1 -0
  605. package/dist/packages/index.d.ts +57 -0
  606. package/dist/packages/index.d.ts.map +1 -0
  607. package/dist/packages/index.js +57 -0
  608. package/dist/packages/index.js.map +1 -0
  609. package/dist/packages/installed-packages.d.ts +79 -0
  610. package/dist/packages/installed-packages.d.ts.map +1 -0
  611. package/dist/packages/installed-packages.js +312 -0
  612. package/dist/packages/installed-packages.js.map +1 -0
  613. package/dist/packages/package-entity-lookup.d.ts +120 -0
  614. package/dist/packages/package-entity-lookup.d.ts.map +1 -0
  615. package/dist/packages/package-entity-lookup.js +17 -0
  616. package/dist/packages/package-entity-lookup.js.map +1 -0
  617. package/dist/packages/package-runtime.d.ts +177 -0
  618. package/dist/packages/package-runtime.d.ts.map +1 -0
  619. package/dist/packages/package-runtime.js +386 -0
  620. package/dist/packages/package-runtime.js.map +1 -0
  621. package/dist/tenancy/derived-scope.d.ts +43 -0
  622. package/dist/tenancy/derived-scope.d.ts.map +1 -0
  623. package/dist/tenancy/derived-scope.js +76 -0
  624. package/dist/tenancy/derived-scope.js.map +1 -0
  625. package/dist/tenancy/escape-hatch.d.ts +30 -0
  626. package/dist/tenancy/escape-hatch.d.ts.map +1 -0
  627. package/dist/tenancy/escape-hatch.js +50 -0
  628. package/dist/tenancy/escape-hatch.js.map +1 -0
  629. package/dist/tenancy/filters.d.ts +87 -0
  630. package/dist/tenancy/filters.d.ts.map +1 -0
  631. package/dist/tenancy/filters.js +126 -0
  632. package/dist/tenancy/filters.js.map +1 -0
  633. package/dist/tenancy/index.d.ts +63 -0
  634. package/dist/tenancy/index.d.ts.map +1 -0
  635. package/dist/tenancy/index.js +61 -0
  636. package/dist/tenancy/index.js.map +1 -0
  637. package/dist/tenancy/org-scoped.decorator.d.ts +150 -0
  638. package/dist/tenancy/org-scoped.decorator.d.ts.map +1 -0
  639. package/dist/tenancy/org-scoped.decorator.js +339 -0
  640. package/dist/tenancy/org-scoped.decorator.js.map +1 -0
  641. package/dist/tenancy/org-write-guard.d.ts +106 -0
  642. package/dist/tenancy/org-write-guard.d.ts.map +1 -0
  643. package/dist/tenancy/org-write-guard.js +141 -0
  644. package/dist/tenancy/org-write-guard.js.map +1 -0
  645. package/dist/tenancy/resolve-tenant-context.d.ts +91 -0
  646. package/dist/tenancy/resolve-tenant-context.d.ts.map +1 -0
  647. package/dist/tenancy/resolve-tenant-context.js +85 -0
  648. package/dist/tenancy/resolve-tenant-context.js.map +1 -0
  649. package/dist/tenancy/scoped-em.d.ts +10 -0
  650. package/dist/tenancy/scoped-em.d.ts.map +1 -0
  651. package/dist/tenancy/scoped-em.js +11 -0
  652. package/dist/tenancy/scoped-em.js.map +1 -0
  653. package/dist/tenancy/tenant-context.d.ts +154 -0
  654. package/dist/tenancy/tenant-context.d.ts.map +1 -0
  655. package/dist/tenancy/tenant-context.js +109 -0
  656. package/dist/tenancy/tenant-context.js.map +1 -0
  657. package/package.json +123 -0
@@ -0,0 +1,91 @@
1
+ import type { TenantContext } from './tenant-context.js';
2
+ /**
3
+ * Actor → TenantContext derivation (feature 050, FR-002 / data-model §1).
4
+ *
5
+ * The context is computed server-side from the already-authenticated actor and
6
+ * (for scoped admins) their assignment set. It is never taken from request
7
+ * inputs. Kept as a pure function so it is trivially unit-testable.
8
+ *
9
+ * ## `TenantActorInput` is **not** `@endora-commerce/contracts`' `Actor`, and
10
+ * that survived T118b deliberately
11
+ *
12
+ * T118b collapsed three of the platform's four actor restatements — the two
13
+ * `*ActorSlice` interfaces and `product-audience.ts`' inline cast — because each
14
+ * existed for one reason, that D-52/D-53 forbade the platform an import of the
15
+ * module declaring the shape, and that reason is gone: the shape is
16
+ * `@endora-commerce/contracts`' and the `FastifyRequest` augmentation is
17
+ * `../http/request-actor.ts`'.
18
+ *
19
+ * This one is not that. It is the **input** of a derivation, not a reading of
20
+ * `request.actor`, and it differs from `Actor` in three ways that are the
21
+ * function's whole subject:
22
+ *
23
+ * - {@link CustomerActorInput.rollupSubtreeOrganizationIds} is **server-derived**
24
+ * — the caller resolves the buyer's org subtree and passes it. Putting it on
25
+ * `Actor` would put a capability decision on the request's identity, which is
26
+ * exactly what "never taken from request inputs" refuses.
27
+ * - {@link ApiKeyActorInput} carries the binding and drops `scopes` and
28
+ * `salesChannelId`: scope is a route gate's question and the channel is the
29
+ * sales-channel resolver's, and neither reaches a tenant context.
30
+ * - There is **no anonymous kind**. Anonymous traffic gets no tenant context;
31
+ * the mapping's caller answers it before calling, and a fourth member here
32
+ * would be a case this function has no answer for.
33
+ *
34
+ * So the two shapes agree on the fields they share and are different types on
35
+ * purpose. The caller that bridges them is the deployment's `buildTenantContext`.
36
+ */
37
+ export interface CustomerActorInput {
38
+ readonly kind: 'customer';
39
+ readonly customerAccountId: string;
40
+ readonly organizationId: string | null;
41
+ readonly impersonatorAdminUserId?: string | null;
42
+ /**
43
+ * Feature 056 (US2) — roll-up widening for a customer actor. When the customer
44
+ * holds the `organizations:rollup` capability, the server passes the actor's
45
+ * org subtree here (`[theirOrg, ...descendants]`), and the context resolves to
46
+ * an `allowed-set` instead of `single-org` (FR-004/FR-005). When absent/empty,
47
+ * the customer stays `single-org` (flat behavior preserved).
48
+ *
49
+ * NB: there is no customer-facing capability source wired in production today
50
+ * (admin permissions do not attach to customer accounts), so production
51
+ * customer contexts stay `single-org`; the roll-up path for scoped actors is
52
+ * derived at the admin scope-builder seam (`resolveAdminOrdersScope` /
53
+ * `resolveModerationActor`) via the subtree-aware `SalesRepAssignmentService`.
54
+ * This field keeps the derivation server-side (Principle XI) and ready for a
55
+ * future customer-capability source.
56
+ */
57
+ readonly rollupSubtreeOrganizationIds?: readonly string[];
58
+ }
59
+ export interface AdminActorInput {
60
+ readonly kind: 'admin';
61
+ readonly adminUserId: string;
62
+ }
63
+ /**
64
+ * Feature 062 — an api-key actor. A BOUND key (organizationId present) pins the
65
+ * request to its organization + designated service customer account with a
66
+ * first-class `api_key` actor for audit attribution. An UNBOUND key keeps the
67
+ * legacy trusted system scope (its only mounted surface is the global-entity
68
+ * PIM read/write path — research §R5).
69
+ */
70
+ export interface ApiKeyActorInput {
71
+ readonly kind: 'api_key';
72
+ readonly apiKeyId: string;
73
+ readonly organizationId?: string | null;
74
+ readonly customerAccountId?: string | null;
75
+ }
76
+ export type TenantActorInput = CustomerActorInput | AdminActorInput | ApiKeyActorInput;
77
+ /**
78
+ * A scoped admin's reach. `allowAll: true` ⇒ platform admin (no restriction).
79
+ * Otherwise the admin is confined to `allowedOrganizationIds`. Mirrors the
80
+ * shape already produced by `resolveAdminOrdersScope` in composition.ts.
81
+ */
82
+ export interface AdminScopeInput {
83
+ readonly allowAll: boolean;
84
+ readonly allowedOrganizationIds?: readonly string[];
85
+ }
86
+ export declare function resolveTenantContext(actor: TenantActorInput, adminScope?: AdminScopeInput): TenantContext;
87
+ /** Context for platform-internal work (workers, migrations, escape hatch). */
88
+ export declare function systemTenantContext(reason: string): TenantContext;
89
+ /** Context pinned to a single organization (per-org jobs via the escape hatch). */
90
+ export declare function orgPinnedTenantContext(organizationId: string, reason: string): TenantContext;
91
+ //# sourceMappingURL=resolve-tenant-context.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"resolve-tenant-context.d.ts","sourceRoot":"","sources":["../../src/tenancy/resolve-tenant-context.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAsB,MAAM,qBAAqB,CAAC;AAE7E;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkCG;AAEH,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,IAAI,EAAE,UAAU,CAAC;IAC1B,QAAQ,CAAC,iBAAiB,EAAE,MAAM,CAAC;IACnC,QAAQ,CAAC,cAAc,EAAE,MAAM,GAAG,IAAI,CAAC;IACvC,QAAQ,CAAC,uBAAuB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACjD;;;;;;;;;;;;;;OAcG;IACH,QAAQ,CAAC,4BAA4B,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;CAC3D;AAED,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC;IACvB,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;CAC9B;AAED;;;;;;GAMG;AACH,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,IAAI,EAAE,SAAS,CAAC;IACzB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,cAAc,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACxC,QAAQ,CAAC,iBAAiB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CAC5C;AAED,MAAM,MAAM,gBAAgB,GAAG,kBAAkB,GAAG,eAAe,GAAG,gBAAgB,CAAC;AAEvF;;;;GAIG;AACH,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC;IAC3B,QAAQ,CAAC,sBAAsB,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;CACrD;AAED,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,gBAAgB,EAAE,UAAU,CAAC,EAAE,eAAe,GAAG,aAAa,CA6DzG;AAcD,8EAA8E;AAC9E,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,MAAM,GAAG,aAAa,CAEjE;AAED,mFAAmF;AACnF,wBAAgB,sBAAsB,CAAC,cAAc,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,aAAa,CAO5F"}
@@ -0,0 +1,85 @@
1
+ export function resolveTenantContext(actor, adminScope) {
2
+ if (actor.kind === 'customer') {
3
+ // Feature 056 — a roll-up-enabled customer widens from single-org to the
4
+ // subtree allowed-set (server-derived). Absent/empty ⇒ single-org (flat).
5
+ if (actor.rollupSubtreeOrganizationIds && actor.rollupSubtreeOrganizationIds.length > 0) {
6
+ return {
7
+ mode: 'allowed-set',
8
+ allowedOrganizationIds: [...actor.rollupSubtreeOrganizationIds],
9
+ notices: newScopeNotices(),
10
+ customerAccountId: actor.customerAccountId,
11
+ actor: { kind: 'customer', id: actor.customerAccountId },
12
+ ...(actor.impersonatorAdminUserId
13
+ ? {
14
+ impersonation: {
15
+ realAdminUserId: actor.impersonatorAdminUserId,
16
+ impersonatedCustomerAccountId: actor.customerAccountId,
17
+ },
18
+ }
19
+ : {}),
20
+ };
21
+ }
22
+ return {
23
+ mode: 'single-org',
24
+ organizationId: actor.organizationId,
25
+ customerAccountId: actor.customerAccountId,
26
+ actor: { kind: 'customer', id: actor.customerAccountId },
27
+ ...(actor.impersonatorAdminUserId
28
+ ? {
29
+ impersonation: {
30
+ realAdminUserId: actor.impersonatorAdminUserId,
31
+ impersonatedCustomerAccountId: actor.customerAccountId,
32
+ },
33
+ }
34
+ : {}),
35
+ };
36
+ }
37
+ // Feature 062 — api-key actor: bound ⇒ single-org pinned to the binding;
38
+ // unbound ⇒ trusted system scope (unchanged legacy behavior, FR-020).
39
+ if (actor.kind === 'api_key') {
40
+ if (actor.organizationId) {
41
+ return {
42
+ mode: 'single-org',
43
+ organizationId: actor.organizationId,
44
+ customerAccountId: actor.customerAccountId ?? null,
45
+ actor: { kind: 'api_key', id: actor.apiKeyId },
46
+ };
47
+ }
48
+ return systemTenantContext('actor:api_key');
49
+ }
50
+ // Admin actor.
51
+ if (!adminScope || adminScope.allowAll) {
52
+ return { mode: 'all', actor: { kind: 'admin', id: actor.adminUserId } };
53
+ }
54
+ return {
55
+ mode: 'allowed-set',
56
+ allowedOrganizationIds: adminScope.allowedOrganizationIds ?? [],
57
+ notices: newScopeNotices(),
58
+ actor: { kind: 'admin', id: actor.adminUserId },
59
+ };
60
+ }
61
+ /**
62
+ * A fresh observation sink for one execution (feature 087). Attached to the two
63
+ * `allowed-set` branches above and to nothing else: `all` and `system` refuse
64
+ * nothing, and `single-org` refuses per row rather than per table, so neither
65
+ * has an emptiness to explain. One object per call, so a context can never
66
+ * carry another request's observation — `resolveTenantContext` is called once
67
+ * per request by the host's scope hook.
68
+ */
69
+ function newScopeNotices() {
70
+ return { organizationAttributionRefused: false };
71
+ }
72
+ /** Context for platform-internal work (workers, migrations, escape hatch). */
73
+ export function systemTenantContext(reason) {
74
+ return { mode: 'system', actor: { kind: 'system' }, reason };
75
+ }
76
+ /** Context pinned to a single organization (per-org jobs via the escape hatch). */
77
+ export function orgPinnedTenantContext(organizationId, reason) {
78
+ return {
79
+ mode: 'single-org',
80
+ organizationId,
81
+ actor: { kind: 'system' },
82
+ reason,
83
+ };
84
+ }
85
+ //# sourceMappingURL=resolve-tenant-context.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"resolve-tenant-context.js","sourceRoot":"","sources":["../../src/tenancy/resolve-tenant-context.ts"],"names":[],"mappings":"AA4FA,MAAM,UAAU,oBAAoB,CAAC,KAAuB,EAAE,UAA4B;IACxF,IAAI,KAAK,CAAC,IAAI,KAAK,UAAU,EAAE,CAAC;QAC9B,yEAAyE;QACzE,0EAA0E;QAC1E,IAAI,KAAK,CAAC,4BAA4B,IAAI,KAAK,CAAC,4BAA4B,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACxF,OAAO;gBACL,IAAI,EAAE,aAAa;gBACnB,sBAAsB,EAAE,CAAC,GAAG,KAAK,CAAC,4BAA4B,CAAC;gBAC/D,OAAO,EAAE,eAAe,EAAE;gBAC1B,iBAAiB,EAAE,KAAK,CAAC,iBAAiB;gBAC1C,KAAK,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE,EAAE,EAAE,KAAK,CAAC,iBAAiB,EAAE;gBACxD,GAAG,CAAC,KAAK,CAAC,uBAAuB;oBAC/B,CAAC,CAAC;wBACE,aAAa,EAAE;4BACb,eAAe,EAAE,KAAK,CAAC,uBAAuB;4BAC9C,6BAA6B,EAAE,KAAK,CAAC,iBAAiB;yBACvD;qBACF;oBACH,CAAC,CAAC,EAAE,CAAC;aACR,CAAC;QACJ,CAAC;QACD,OAAO;YACL,IAAI,EAAE,YAAY;YAClB,cAAc,EAAE,KAAK,CAAC,cAAc;YACpC,iBAAiB,EAAE,KAAK,CAAC,iBAAiB;YAC1C,KAAK,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE,EAAE,EAAE,KAAK,CAAC,iBAAiB,EAAE;YACxD,GAAG,CAAC,KAAK,CAAC,uBAAuB;gBAC/B,CAAC,CAAC;oBACE,aAAa,EAAE;wBACb,eAAe,EAAE,KAAK,CAAC,uBAAuB;wBAC9C,6BAA6B,EAAE,KAAK,CAAC,iBAAiB;qBACvD;iBACF;gBACH,CAAC,CAAC,EAAE,CAAC;SACR,CAAC;IACJ,CAAC;IAED,yEAAyE;IACzE,sEAAsE;IACtE,IAAI,KAAK,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;QAC7B,IAAI,KAAK,CAAC,cAAc,EAAE,CAAC;YACzB,OAAO;gBACL,IAAI,EAAE,YAAY;gBAClB,cAAc,EAAE,KAAK,CAAC,cAAc;gBACpC,iBAAiB,EAAE,KAAK,CAAC,iBAAiB,IAAI,IAAI;gBAClD,KAAK,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,EAAE,EAAE,KAAK,CAAC,QAAQ,EAAE;aAC/C,CAAC;QACJ,CAAC;QACD,OAAO,mBAAmB,CAAC,eAAe,CAAC,CAAC;IAC9C,CAAC;IAED,eAAe;IACf,IAAI,CAAC,UAAU,IAAI,UAAU,CAAC,QAAQ,EAAE,CAAC;QACvC,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE,EAAE,KAAK,CAAC,WAAW,EAAE,EAAE,CAAC;IAC1E,CAAC;IACD,OAAO;QACL,IAAI,EAAE,aAAa;QACnB,sBAAsB,EAAE,UAAU,CAAC,sBAAsB,IAAI,EAAE;QAC/D,OAAO,EAAE,eAAe,EAAE;QAC1B,KAAK,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE,EAAE,KAAK,CAAC,WAAW,EAAE;KAChD,CAAC;AACJ,CAAC;AAED;;;;;;;GAOG;AACH,SAAS,eAAe;IACtB,OAAO,EAAE,8BAA8B,EAAE,KAAK,EAAE,CAAC;AACnD,CAAC;AAED,8EAA8E;AAC9E,MAAM,UAAU,mBAAmB,CAAC,MAAc;IAChD,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE,MAAM,EAAE,CAAC;AAC/D,CAAC;AAED,mFAAmF;AACnF,MAAM,UAAU,sBAAsB,CAAC,cAAsB,EAAE,MAAc;IAC3E,OAAO;QACL,IAAI,EAAE,YAAY;QAClB,cAAc;QACd,KAAK,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;QACzB,MAAM;KACP,CAAC;AACJ,CAAC"}
@@ -0,0 +1,10 @@
1
+ import type { EntityManager, MikroORM } from '@mikro-orm/postgresql';
2
+ /**
3
+ * EM fork used across composition.ts (feature 050). The tenant filters read the
4
+ * ambient TenantContext from AsyncLocalStorage at query time (see filters.ts),
5
+ * so no per-fork `setFilterParams` is required — a plain fork already carries the
6
+ * guard. This wrapper is retained as the single, named injection seam so the
7
+ * intent is explicit at call sites and future per-fork wiring has one home.
8
+ */
9
+ export declare function forkScopedEm(orm: MikroORM): EntityManager;
10
+ //# sourceMappingURL=scoped-em.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scoped-em.d.ts","sourceRoot":"","sources":["../../src/tenancy/scoped-em.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AAErE;;;;;;GAMG;AACH,wBAAgB,YAAY,CAAC,GAAG,EAAE,QAAQ,GAAG,aAAa,CAEzD"}
@@ -0,0 +1,11 @@
1
+ /**
2
+ * EM fork used across composition.ts (feature 050). The tenant filters read the
3
+ * ambient TenantContext from AsyncLocalStorage at query time (see filters.ts),
4
+ * so no per-fork `setFilterParams` is required — a plain fork already carries the
5
+ * guard. This wrapper is retained as the single, named injection seam so the
6
+ * intent is explicit at call sites and future per-fork wiring has one home.
7
+ */
8
+ export function forkScopedEm(orm) {
9
+ return orm.em.fork();
10
+ }
11
+ //# sourceMappingURL=scoped-em.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scoped-em.js","sourceRoot":"","sources":["../../src/tenancy/scoped-em.ts"],"names":[],"mappings":"AAEA;;;;;;GAMG;AACH,MAAM,UAAU,YAAY,CAAC,GAAa;IACxC,OAAO,GAAG,CAAC,EAAE,CAAC,IAAI,EAAmB,CAAC;AACxC,CAAC"}
@@ -0,0 +1,154 @@
1
+ /**
2
+ * Systemic Organization Tenant Scoping (feature 050).
3
+ *
4
+ * The ambient `TenantContext` is the single source of truth for "which tenant
5
+ * is this async execution allowed to see?". It is derived server-side from the
6
+ * authenticated actor (never from request inputs) and read by the MikroORM
7
+ * filter's `cond` thunk **when a query is built** (`filters.ts`) — never stamped
8
+ * onto an EntityManager. `forkScopedEm` is a bare `orm.em.fork()`; a manager
9
+ * therefore carries no tenancy of its own, and the same fork yields different
10
+ * rows under different ambient contexts (feature 072, T038).
11
+ *
12
+ * Modes:
13
+ * - `single-org` — a customer (or an org-pinned job); confined to one org.
14
+ * - `allowed-set` — a scoped sales-rep admin; confined to an assigned set.
15
+ * - `all` — a platform admin; no org restriction (still explicit).
16
+ * - `system` — worker / migration / escape hatch; crosses all orgs.
17
+ *
18
+ * Fail-closed: a query against a tenant-scoped entity with NO ambient context
19
+ * raises `MissingTenantContextError` (see `filters.ts`) — it never returns
20
+ * unscoped rows.
21
+ */
22
+ export type TenantScopeMode = 'single-org' | 'allowed-set' | 'all' | 'system';
23
+ export interface TenantActor {
24
+ /** `api_key` (feature 062) = a bound distributor key acting as the tenant principal. */
25
+ readonly kind: 'customer' | 'admin' | 'system' | 'api_key';
26
+ readonly id?: string;
27
+ }
28
+ export interface TenantImpersonation {
29
+ readonly realAdminUserId: string;
30
+ readonly impersonatedCustomerAccountId: string;
31
+ }
32
+ /**
33
+ * What the tenant guard **did** to this execution, as opposed to what it was
34
+ * allowed to do (feature 087, owner decision of 2026-08-29).
35
+ *
36
+ * A predicate that refuses every row of a table is correct and silent, and the
37
+ * two properties are in tension: the caller receives an empty result and cannot
38
+ * tell "your reach excludes all of these" from "there are none". The filter is
39
+ * the only thing that knows which it meant, so it records it here and the host
40
+ * discloses it on the response envelope (`kernel/request-scope-hook.ts`).
41
+ *
42
+ * Mutable, and deliberately so: one object per request, created beside the
43
+ * context it hangs off, written by the filter as queries run and read once the
44
+ * handler has answered. It is an observation of this execution, never an input
45
+ * to a decision — nothing in the guard reads it, so a stale or missing sink can
46
+ * widen no authority.
47
+ */
48
+ export interface TenantScopeNotices {
49
+ /**
50
+ * Set when the `customerAccount` filter answered its `allowed-set` arm with
51
+ * the match-nothing predicate, i.e. the filtered entity carries no
52
+ * organization column of its own. See `customerFilterCond`.
53
+ */
54
+ organizationAttributionRefused: boolean;
55
+ }
56
+ export interface TenantContext {
57
+ readonly mode: TenantScopeMode;
58
+ /** Present for `single-org`. */
59
+ readonly organizationId?: string | null;
60
+ /** Present for `allowed-set`. */
61
+ readonly allowedOrganizationIds?: readonly string[];
62
+ /** Present for customer actors — drives the `customerAccount` filter. */
63
+ readonly customerAccountId?: string | null;
64
+ readonly actor: TenantActor;
65
+ readonly impersonation?: TenantImpersonation;
66
+ /** Required for `system` scope entered via the escape hatch. */
67
+ readonly reason?: string;
68
+ /**
69
+ * Per-request observation sink. Attached by `resolveTenantContext` to the
70
+ * contexts whose predicates can refuse wholesale (`allowed-set`), absent
71
+ * everywhere else — a mode that never refuses has nothing to disclose.
72
+ */
73
+ readonly notices?: TenantScopeNotices;
74
+ }
75
+ /**
76
+ * Record that the ambient execution was refused a whole table for want of an
77
+ * organization column. A context with no sink (every mode but `allowed-set`,
78
+ * and any context a caller built by hand) drops the observation, which is the
79
+ * right failure: the disclosure goes missing, never the refusal.
80
+ */
81
+ export declare function noteOrganizationAttributionRefusal(ctx: TenantContext): void;
82
+ /**
83
+ * Thrown when a tenant-scoped entity is queried with no ambient context. This is
84
+ * the fail-closed guarantee: forgetting to establish a context surfaces as a loud
85
+ * error, never a silent cross-tenant read.
86
+ */
87
+ export declare class MissingTenantContextError extends Error {
88
+ constructor(detail?: string);
89
+ }
90
+ /**
91
+ * Thrown when a write carries an `organizationId` the ambient scope may not act
92
+ * on (D-260/A). It sits beside {@link MissingTenantContextError} because the two
93
+ * are one guarantee failing in the two directions the data layer has: that one
94
+ * is "no scope was established", this one is "a scope was established and this
95
+ * row is outside it".
96
+ *
97
+ * **It names no organization** — neither the one the write carried nor the set
98
+ * the actor holds. The refusal reaches a caller that supplied the id, so
99
+ * "outside your scope" tells it nothing it did not already know, while echoing
100
+ * the *set* would put the actor's reach into a log and an HTTP body. The entity
101
+ * class is carried because a flush-time refusal is otherwise undiagnosable: the
102
+ * stack frame belongs to MikroORM's unit of work and names no caller.
103
+ *
104
+ * Thrown by `org-write-guard.ts`; mapped to `403 FORBIDDEN` in
105
+ * `http/error-envelope.ts`, which explains there why 403 and not 404.
106
+ */
107
+ export declare class OrgWriteOutOfScopeError extends Error {
108
+ /** The entity class whose write was refused. Never the organization id. */
109
+ readonly entityName: string;
110
+ constructor(entityName: string);
111
+ }
112
+ /** The ambient context for the current async execution, or `undefined` if none is set. */
113
+ export declare function getTenantContext(): TenantContext | undefined;
114
+ /** Run `fn` with `ctx` as the ambient context for its entire async subtree. */
115
+ export declare function runWithTenantContext<T>(ctx: TenantContext, fn: () => Promise<T>): Promise<T>;
116
+ /**
117
+ * Set the ambient context for the current async execution. NOTE: when called
118
+ * inside an *async* Fastify hook this does not propagate to the route handler
119
+ * (the handler resumes in the hook's parent async context). Prefer
120
+ * `runInTenantContext` in the request pipeline; keep this only for synchronous
121
+ * top-level entrypoints (e.g. a worker process bootstrap).
122
+ */
123
+ export declare function enterTenantContext(ctx: TenantContext): void;
124
+ /**
125
+ * Establish `ctx` for the remainder of a Fastify request via the callback-style
126
+ * hook pattern: `addHook('onRequest', (req, reply, done) => runInTenantContext(ctx, done))`.
127
+ * Fastify invokes the next hook/handler synchronously inside `callback`, so the
128
+ * store propagates across the handler's awaited continuations. This is the
129
+ * reliable AsyncLocalStorage-with-Fastify pattern (cf. @fastify/request-context).
130
+ */
131
+ export declare function runInTenantContext(ctx: TenantContext, callback: () => void): void;
132
+ /**
133
+ * Run `fn` with NO ambient context (fail-closed testing / explicit clears).
134
+ *
135
+ * **`storage.run(undefined, fn)`, never `storage.exit(fn)`.** On the
136
+ * pre-`AsyncContextFrame` runtime — which is every Node before 24, and this
137
+ * repository's floor is 22.17 — `exit` is `disable(); try { fn() } finally
138
+ * { enable() }`: a *synchronous* try/finally around a callback that may be
139
+ * `async`. Where the caller's context was installed with `enterWith` and `fn`
140
+ * opens a nested `run()` of its own, the re-enable resurfaces the caller's
141
+ * store and everything after that point reads it, so the "no context" this
142
+ * function promises silently ends partway through. Node 24 made
143
+ * `AsyncContextFrame` the default and `exit` frame-scoped, which is why the
144
+ * defect was invisible on a developer's machine and red in CI for as long as it
145
+ * stood (`test/unit/seeds/seed-scope.test.ts`,
146
+ * `packages/platform/src/kernel/lifecycle/registry-cache-scope.test.ts`).
147
+ *
148
+ * Running with `undefined` as the store is the same observable contract —
149
+ * `getStore()` answers `undefined`, and the caller's context is restored on
150
+ * both return and throw — and it is a real frame, so it holds across `await`
151
+ * on both runtimes. Verified on 22.17 and on 26.
152
+ */
153
+ export declare function runWithoutTenantContext<T>(fn: () => T): T;
154
+ //# sourceMappingURL=tenant-context.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tenant-context.d.ts","sourceRoot":"","sources":["../../src/tenancy/tenant-context.ts"],"names":[],"mappings":"AAEA;;;;;;;;;;;;;;;;;;;;GAoBG;AAEH,MAAM,MAAM,eAAe,GAAG,YAAY,GAAG,aAAa,GAAG,KAAK,GAAG,QAAQ,CAAC;AAE9E,MAAM,WAAW,WAAW;IAC1B,wFAAwF;IACxF,QAAQ,CAAC,IAAI,EAAE,UAAU,GAAG,OAAO,GAAG,QAAQ,GAAG,SAAS,CAAC;IAC3D,QAAQ,CAAC,EAAE,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,mBAAmB;IAClC,QAAQ,CAAC,eAAe,EAAE,MAAM,CAAC;IACjC,QAAQ,CAAC,6BAA6B,EAAE,MAAM,CAAC;CAChD;AAED;;;;;;;;;;;;;;;GAeG;AACH,MAAM,WAAW,kBAAkB;IACjC;;;;OAIG;IACH,8BAA8B,EAAE,OAAO,CAAC;CACzC;AAED,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,IAAI,EAAE,eAAe,CAAC;IAC/B,gCAAgC;IAChC,QAAQ,CAAC,cAAc,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACxC,iCAAiC;IACjC,QAAQ,CAAC,sBAAsB,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IACpD,yEAAyE;IACzE,QAAQ,CAAC,iBAAiB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3C,QAAQ,CAAC,KAAK,EAAE,WAAW,CAAC;IAC5B,QAAQ,CAAC,aAAa,CAAC,EAAE,mBAAmB,CAAC;IAC7C,gEAAgE;IAChE,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IACzB;;;;OAIG;IACH,QAAQ,CAAC,OAAO,CAAC,EAAE,kBAAkB,CAAC;CACvC;AAED;;;;;GAKG;AACH,wBAAgB,kCAAkC,CAAC,GAAG,EAAE,aAAa,GAAG,IAAI,CAE3E;AAED;;;;GAIG;AACH,qBAAa,yBAA0B,SAAQ,KAAK;gBACtC,MAAM,CAAC,EAAE,MAAM;CAQ5B;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,qBAAa,uBAAwB,SAAQ,KAAK;IAChD,2EAA2E;IAC3E,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;gBAEhB,UAAU,EAAE,MAAM;CAS/B;AASD,0FAA0F;AAC1F,wBAAgB,gBAAgB,IAAI,aAAa,GAAG,SAAS,CAE5D;AAED,+EAA+E;AAC/E,wBAAgB,oBAAoB,CAAC,CAAC,EAAE,GAAG,EAAE,aAAa,EAAE,EAAE,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAE5F;AAED;;;;;;GAMG;AACH,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,aAAa,GAAG,IAAI,CAE3D;AAED;;;;;;GAMG;AACH,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,aAAa,EAAE,QAAQ,EAAE,MAAM,IAAI,GAAG,IAAI,CAEjF;AAED;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,wBAAgB,uBAAuB,CAAC,CAAC,EAAE,EAAE,EAAE,MAAM,CAAC,GAAG,CAAC,CAEzD"}
@@ -0,0 +1,109 @@
1
+ import { AsyncLocalStorage } from 'async_hooks';
2
+ /**
3
+ * Record that the ambient execution was refused a whole table for want of an
4
+ * organization column. A context with no sink (every mode but `allowed-set`,
5
+ * and any context a caller built by hand) drops the observation, which is the
6
+ * right failure: the disclosure goes missing, never the refusal.
7
+ */
8
+ export function noteOrganizationAttributionRefusal(ctx) {
9
+ if (ctx.notices)
10
+ ctx.notices.organizationAttributionRefused = true;
11
+ }
12
+ /**
13
+ * Thrown when a tenant-scoped entity is queried with no ambient context. This is
14
+ * the fail-closed guarantee: forgetting to establish a context surfaces as a loud
15
+ * error, never a silent cross-tenant read.
16
+ */
17
+ export class MissingTenantContextError extends Error {
18
+ constructor(detail) {
19
+ super(`No tenant context is active for a tenant-scoped query.${detail ? ` (${detail})` : ''} Establish one via the request pipeline, or opt out explicitly with withSystemScope()/withOrgScope().`);
20
+ this.name = 'MissingTenantContextError';
21
+ }
22
+ }
23
+ /**
24
+ * Thrown when a write carries an `organizationId` the ambient scope may not act
25
+ * on (D-260/A). It sits beside {@link MissingTenantContextError} because the two
26
+ * are one guarantee failing in the two directions the data layer has: that one
27
+ * is "no scope was established", this one is "a scope was established and this
28
+ * row is outside it".
29
+ *
30
+ * **It names no organization** — neither the one the write carried nor the set
31
+ * the actor holds. The refusal reaches a caller that supplied the id, so
32
+ * "outside your scope" tells it nothing it did not already know, while echoing
33
+ * the *set* would put the actor's reach into a log and an HTTP body. The entity
34
+ * class is carried because a flush-time refusal is otherwise undiagnosable: the
35
+ * stack frame belongs to MikroORM's unit of work and names no caller.
36
+ *
37
+ * Thrown by `org-write-guard.ts`; mapped to `403 FORBIDDEN` in
38
+ * `http/error-envelope.ts`, which explains there why 403 and not 404.
39
+ */
40
+ export class OrgWriteOutOfScopeError extends Error {
41
+ /** The entity class whose write was refused. Never the organization id. */
42
+ entityName;
43
+ constructor(entityName) {
44
+ super(`A write to ${entityName} carries an organization outside the active tenant scope ` +
45
+ '(feature 050 FR-003, D-260/A). Writing for another organization needs an explicit ' +
46
+ 'widening — withSystemScope() / withOrgScope() — or it is a scope defect.');
47
+ this.name = 'OrgWriteOutOfScopeError';
48
+ this.entityName = entityName;
49
+ }
50
+ }
51
+ /**
52
+ * The store is `TenantContext | undefined` rather than `TenantContext` so that
53
+ * `runWithoutTenantContext` can express "no context" as a value it *runs* with
54
+ * — see the note on that function for why it may not use `exit()`.
55
+ */
56
+ const storage = new AsyncLocalStorage();
57
+ /** The ambient context for the current async execution, or `undefined` if none is set. */
58
+ export function getTenantContext() {
59
+ return storage.getStore();
60
+ }
61
+ /** Run `fn` with `ctx` as the ambient context for its entire async subtree. */
62
+ export function runWithTenantContext(ctx, fn) {
63
+ return storage.run(ctx, fn);
64
+ }
65
+ /**
66
+ * Set the ambient context for the current async execution. NOTE: when called
67
+ * inside an *async* Fastify hook this does not propagate to the route handler
68
+ * (the handler resumes in the hook's parent async context). Prefer
69
+ * `runInTenantContext` in the request pipeline; keep this only for synchronous
70
+ * top-level entrypoints (e.g. a worker process bootstrap).
71
+ */
72
+ export function enterTenantContext(ctx) {
73
+ storage.enterWith(ctx);
74
+ }
75
+ /**
76
+ * Establish `ctx` for the remainder of a Fastify request via the callback-style
77
+ * hook pattern: `addHook('onRequest', (req, reply, done) => runInTenantContext(ctx, done))`.
78
+ * Fastify invokes the next hook/handler synchronously inside `callback`, so the
79
+ * store propagates across the handler's awaited continuations. This is the
80
+ * reliable AsyncLocalStorage-with-Fastify pattern (cf. @fastify/request-context).
81
+ */
82
+ export function runInTenantContext(ctx, callback) {
83
+ storage.run(ctx, callback);
84
+ }
85
+ /**
86
+ * Run `fn` with NO ambient context (fail-closed testing / explicit clears).
87
+ *
88
+ * **`storage.run(undefined, fn)`, never `storage.exit(fn)`.** On the
89
+ * pre-`AsyncContextFrame` runtime — which is every Node before 24, and this
90
+ * repository's floor is 22.17 — `exit` is `disable(); try { fn() } finally
91
+ * { enable() }`: a *synchronous* try/finally around a callback that may be
92
+ * `async`. Where the caller's context was installed with `enterWith` and `fn`
93
+ * opens a nested `run()` of its own, the re-enable resurfaces the caller's
94
+ * store and everything after that point reads it, so the "no context" this
95
+ * function promises silently ends partway through. Node 24 made
96
+ * `AsyncContextFrame` the default and `exit` frame-scoped, which is why the
97
+ * defect was invisible on a developer's machine and red in CI for as long as it
98
+ * stood (`test/unit/seeds/seed-scope.test.ts`,
99
+ * `packages/platform/src/kernel/lifecycle/registry-cache-scope.test.ts`).
100
+ *
101
+ * Running with `undefined` as the store is the same observable contract —
102
+ * `getStore()` answers `undefined`, and the caller's context is restored on
103
+ * both return and throw — and it is a real frame, so it holds across `await`
104
+ * on both runtimes. Verified on 22.17 and on 26.
105
+ */
106
+ export function runWithoutTenantContext(fn) {
107
+ return storage.run(undefined, fn);
108
+ }
109
+ //# sourceMappingURL=tenant-context.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tenant-context.js","sourceRoot":"","sources":["../../src/tenancy/tenant-context.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAkFhD;;;;;GAKG;AACH,MAAM,UAAU,kCAAkC,CAAC,GAAkB;IACnE,IAAI,GAAG,CAAC,OAAO;QAAE,GAAG,CAAC,OAAO,CAAC,8BAA8B,GAAG,IAAI,CAAC;AACrE,CAAC;AAED;;;;GAIG;AACH,MAAM,OAAO,yBAA0B,SAAQ,KAAK;IAClD,YAAY,MAAe;QACzB,KAAK,CACH,yDACE,MAAM,CAAC,CAAC,CAAC,KAAK,MAAM,GAAG,CAAC,CAAC,CAAC,EAC5B,uGAAuG,CACxG,CAAC;QACF,IAAI,CAAC,IAAI,GAAG,2BAA2B,CAAC;IAC1C,CAAC;CACF;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,MAAM,OAAO,uBAAwB,SAAQ,KAAK;IAChD,2EAA2E;IAClE,UAAU,CAAS;IAE5B,YAAY,UAAkB;QAC5B,KAAK,CACH,cAAc,UAAU,2DAA2D;YACjF,oFAAoF;YACpF,0EAA0E,CAC7E,CAAC;QACF,IAAI,CAAC,IAAI,GAAG,yBAAyB,CAAC;QACtC,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC;IAC/B,CAAC;CACF;AAED;;;;GAIG;AACH,MAAM,OAAO,GAAG,IAAI,iBAAiB,EAA6B,CAAC;AAEnE,0FAA0F;AAC1F,MAAM,UAAU,gBAAgB;IAC9B,OAAO,OAAO,CAAC,QAAQ,EAAE,CAAC;AAC5B,CAAC;AAED,+EAA+E;AAC/E,MAAM,UAAU,oBAAoB,CAAI,GAAkB,EAAE,EAAoB;IAC9E,OAAO,OAAO,CAAC,GAAG,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;AAC9B,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,kBAAkB,CAAC,GAAkB;IACnD,OAAO,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;AACzB,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,kBAAkB,CAAC,GAAkB,EAAE,QAAoB;IACzE,OAAO,CAAC,GAAG,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC;AAC7B,CAAC;AAED;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,MAAM,UAAU,uBAAuB,CAAI,EAAW;IACpD,OAAO,OAAO,CAAC,GAAG,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC;AACpC,CAAC"}
package/package.json ADDED
@@ -0,0 +1,123 @@
1
+ {
2
+ "name": "@endora-commerce/platform",
3
+ "version": "0.100.0",
4
+ "type": "module",
5
+ "sideEffects": false,
6
+ "endora": {
7
+ "type": "platform"
8
+ },
9
+ "description": "The host package (feature 080, T042a). Publishes the surface an installed extension package compiles against: five enumerated subpaths, one per platform directory that has published API. No root export and no wildcard (D-160.7). The remaining subpaths are host-internal and no module may name any of them (D-160.14) — how many that is is not written here, `HOST_INTERNAL_SUBPATHS` in packages/cli/src/lib/platform-surface.ts carries one reason per member and this sentence read 'three' over six of them: ./composition, the host composition surface; ./db, the ORM configuration, the migration ordering and the bootstrap (specs/110-instance-repository/, T116); ./migrations, the platform's own twelve migrations and the frozen historical prefix an execution order is computed from (specs/110-instance-repository/, R1.5); ./lifecycle, the operator surface that drives the platform presence axis (specs/115-lifecycle-container-move/, D115-4); ./env, the environment inputs the host reads; ./packages, installed extension-package discovery; ./overlay, the loader that composes a deployment's client-only modules (specs/110-instance-repository/, T113 and T114); ./cli, the host's side of a module-declared operator command (T117); and ./demo, the demo-data guard, plan, runner and report (feature 113, T119b).",
10
+ "license": "MIT",
11
+ "repository": {
12
+ "type": "git",
13
+ "url": "git+https://github.com/endora-commerce/endora-commerce.git",
14
+ "directory": "packages/platform"
15
+ },
16
+ "publishConfig": {
17
+ "access": "public"
18
+ },
19
+ "exports": {
20
+ "./kernel": {
21
+ "types": "./dist/kernel/index.d.ts",
22
+ "default": "./dist/kernel/index.js"
23
+ },
24
+ "./http": {
25
+ "types": "./dist/http/index.d.ts",
26
+ "default": "./dist/http/index.js"
27
+ },
28
+ "./tenancy": {
29
+ "types": "./dist/tenancy/index.d.ts",
30
+ "default": "./dist/tenancy/index.js"
31
+ },
32
+ "./commands": {
33
+ "types": "./dist/commands/index.d.ts",
34
+ "default": "./dist/commands/index.js"
35
+ },
36
+ "./events": {
37
+ "types": "./dist/events/index.d.ts",
38
+ "default": "./dist/events/index.js"
39
+ },
40
+ "./composition": {
41
+ "types": "./dist/composition/index.d.ts",
42
+ "default": "./dist/composition/index.js"
43
+ },
44
+ "./db": {
45
+ "types": "./dist/db/index.d.ts",
46
+ "default": "./dist/db/index.js"
47
+ },
48
+ "./migrations": {
49
+ "types": "./dist/migrations/index.d.ts",
50
+ "default": "./dist/migrations/index.js"
51
+ },
52
+ "./lifecycle": {
53
+ "types": "./dist/lifecycle/index.d.ts",
54
+ "default": "./dist/lifecycle/index.js"
55
+ },
56
+ "./env": {
57
+ "types": "./dist/env/index.d.ts",
58
+ "default": "./dist/env/index.js"
59
+ },
60
+ "./packages": {
61
+ "types": "./dist/packages/index.d.ts",
62
+ "default": "./dist/packages/index.js"
63
+ },
64
+ "./overlay": {
65
+ "types": "./dist/overlay/index.d.ts",
66
+ "default": "./dist/overlay/index.js"
67
+ },
68
+ "./cli": {
69
+ "types": "./dist/cli/index.d.ts",
70
+ "default": "./dist/cli/index.js"
71
+ },
72
+ "./demo": {
73
+ "types": "./dist/demo/index.d.ts",
74
+ "default": "./dist/demo/index.js"
75
+ },
76
+ "./package.json": "./package.json"
77
+ },
78
+ "files": [
79
+ "dist"
80
+ ],
81
+ "engines": {
82
+ "node": ">=22.18.0"
83
+ },
84
+ "dependencies": {
85
+ "@asteasolutions/zod-to-openapi": "^8.5.0",
86
+ "@fastify/cookie": "^11.0.2",
87
+ "@fastify/cors": "^11.2.0",
88
+ "@fastify/helmet": "^13.0.2",
89
+ "@fastify/rate-limit": "^10.3.0",
90
+ "@fastify/type-provider-zod": "^1.0.0",
91
+ "argon2": "^0.44.0",
92
+ "awilix": "^13.0.5",
93
+ "bullmq": "^5.76.1",
94
+ "fastify-plugin": "^5.1.0",
95
+ "ioredis": "^5.10.1",
96
+ "openapi-types": "^12.1.3",
97
+ "pino": "^10.3.1",
98
+ "@endora-commerce/contracts": "0.100.0"
99
+ },
100
+ "peerDependencies": {
101
+ "@mikro-orm/core": "^6",
102
+ "@mikro-orm/migrations": "^6",
103
+ "@mikro-orm/postgresql": "^6",
104
+ "fastify": "^5",
105
+ "zod": "^4"
106
+ },
107
+ "devDependencies": {
108
+ "@mikro-orm/core": "^6.6.13",
109
+ "@mikro-orm/migrations": "^6.6.13",
110
+ "@mikro-orm/postgresql": "^6.6.13",
111
+ "@types/node": "^22.9.0",
112
+ "fastify": "^5.12.5",
113
+ "typescript": "^5.9.3",
114
+ "vitest": "^4.1.11",
115
+ "zod": "^4.2.0"
116
+ },
117
+ "scripts": {
118
+ "build": "tsc -p tsconfig.build.json && node ../../scripts/copy-package-assets.mjs --src src --out dist",
119
+ "typecheck": "tsc -p tsconfig.json && tsc -p tsconfig.test.json",
120
+ "lint": "eslint src",
121
+ "test": "vitest run"
122
+ }
123
+ }