@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,386 @@
1
+ // Installed extension packages — the composition half (feature 080, T031).
2
+ //
3
+ // `loadPackageModuleEntries` is the sibling of `loadOverlayModuleEntries`
4
+ // (`src/overlay/overlay-runtime.ts`) and the second caller of the seam !716
5
+ // built: a composition root appends what it returns to the one
6
+ // `composeModules([...MODULES, ...overlay, ...packages], …)` call, so an
7
+ // installed package receives an ordinary `ModuleContext` and reaches every seam
8
+ // a core module reaches. There is no second registration pass, no second
9
+ // contribution window and no second `runBootHooks()` (D-45).
10
+ //
11
+ // **Discovered at runtime, and the committed registries stay bare core**
12
+ // (D-119, confirmed as D-155). D-104's predicate decides it, and it yields
13
+ // three consistent answers rather than two: an artefact is committed when its
14
+ // content is a fact about *the tree*, and resolved at runtime when it is a fact
15
+ // about *the process*. A workspace-member module package is a fact about the
16
+ // tree (D-149). Which deployment a process is, is a fact about the process
17
+ // (D-104). Which packages are installed in an instance's `node_modules` is a
18
+ // fact about the process too — so it is discovered here, and
19
+ // `composition.generated.ts`, `manifest-index.generated.ts` and both `db/`
20
+ // registries stay a walk of the shared core tree.
21
+ //
22
+ // What discovery can and cannot see is written out in `installed-packages.ts`;
23
+ // read that header before assuming this finds a linked directory (it does not).
24
+ //
25
+ // ## Two things it deliberately does not do
26
+ //
27
+ // 1. **It does not mark a package `overlay: true`.** That flag exempts a
28
+ // module from the rule that it may decorate only what it registered (issue
29
+ // #203), and an overlay module earns it from the root it was found under:
30
+ // the deployment authored the module and owns the decision. A package is a
31
+ // third party. **D-156 rules it**, and the answer is the one this file
32
+ // ships: a package's `ctx.di.decorate` over a registration it does not own
33
+ // is refused like any core module's. The load-bearing half of that ruling
34
+ // is about the mechanism — `ModuleEntry.overlay` is a per-module boolean
35
+ // and the condition it feeds is name-unscoped, so setting it from an
36
+ // instance's declaration would hand a stranger `commandBus` and
37
+ // `auditLogService` along with whatever it asked for. Any future grant is
38
+ // keyed by (package, registration name) and refused outright for a name no
39
+ // module owns; it is never this flag.
40
+ // 2. **It reads a package's schema; it does not configure one.** T033 added
41
+ // `packageSchemaContributionsUnder` at the bottom of this file: it resolves
42
+ // `./migrations` and `./backend` and reads them into registry entries and
43
+ // entity classes. Merging those into the execution order and into the ORM
44
+ // configuration is `src/db/configured-migrations.ts` and
45
+ // `src/db/configured-entities.ts` — so the merge has exactly one
46
+ // implementation, and this file still knows nothing about a database.
47
+ import { createRequire } from 'node:module';
48
+ import { dirname, join } from 'node:path';
49
+ import { pathToFileURL } from 'node:url';
50
+ import { nodeModulesRootsFor, scanNodeModulesRoots, } from './installed-packages.js';
51
+ import { assertNoModuleIdCollisions, } from '../lifecycle/services/module-id-claims.js';
52
+ /**
53
+ * The scan, memoised per root list.
54
+ *
55
+ * An instance's `node_modules` does not change while the platform runs, and
56
+ * both `resolvedManifestEntries()` and `loadPackageModuleEntries()` ask the
57
+ * same question during one boot. Keyed by the roots so a test driving explicit
58
+ * roots never reads another test's answer.
59
+ *
60
+ * There is deliberately no reset seam: a fixture that needs a fresh scan writes
61
+ * itself under a fresh root, which is what a test asking a different question
62
+ * has to do anyway.
63
+ */
64
+ const scans = new Map();
65
+ function scan(roots) {
66
+ // `\0` because it is the one byte a POSIX path cannot contain, so no two
67
+ // distinct root lists can key the same entry. Written as the **escape**, not
68
+ // as the byte: a raw NUL makes git classify the file as binary, and every
69
+ // diff of it renders as `Binary files differ` — the artefact that would show
70
+ // the byte is the one the byte switches off (issues #182, #190).
71
+ const key = roots.join('\0');
72
+ const cached = scans.get(key);
73
+ if (cached)
74
+ return cached;
75
+ const fresh = scanNodeModulesRoots(roots);
76
+ scans.set(key, fresh);
77
+ return fresh;
78
+ }
79
+ /**
80
+ * The module-id claims of every installed module package under `roots`.
81
+ *
82
+ * Exported so the *overlay* seams can be held to one collision rule over one
83
+ * claimed set (feature 103, FR-004) without a second enumeration of what is
84
+ * installed: the scan below is memoised per root list, so asking here costs a
85
+ * map lookup on a boot that has already asked.
86
+ */
87
+ export function installedPackageModuleIdClaims(roots) {
88
+ return claimsFor(scan(roots).packages);
89
+ }
90
+ function claimsFor(packages) {
91
+ return packages.map((installed) => ({
92
+ id: installed.id,
93
+ origin: 'package',
94
+ claimedBy: installed.manifestPath,
95
+ name: installed.name,
96
+ }));
97
+ }
98
+ /**
99
+ * Resolve one of the package's `exports` subpaths, the way anything in the
100
+ * instance would.
101
+ *
102
+ * Rooted at the directory that *holds* the `node_modules` the package was found
103
+ * under, so Node's own resolver — `exports` map, conditions and all — answers
104
+ * rather than a hand-rolled read of the map. `null` means the package publishes
105
+ * no such subpath, which for `./backend` is an ordinary answer (an admin- or
106
+ * storefront-only module).
107
+ */
108
+ function resolveSubpath(installed, subpath) {
109
+ const require = createRequire(join(dirname(installed.foundUnder), 'noop.js'));
110
+ const specifier = subpath === '.' ? installed.name : `${installed.name}/${subpath}`;
111
+ try {
112
+ return require.resolve(specifier);
113
+ }
114
+ catch {
115
+ // Narrow by construction: the only thing inside the `try` is a resolution,
116
+ // and a resolution either finds a path or the package does not publish one.
117
+ // Nothing here can reach a port, so nothing here can swallow a
118
+ // `ModuleDisabledError`.
119
+ return null;
120
+ }
121
+ }
122
+ async function importSubpath(installed, subpath) {
123
+ const resolved = resolveSubpath(installed, subpath);
124
+ if (resolved === null)
125
+ return null;
126
+ return (await import(pathToFileURL(resolved).href));
127
+ }
128
+ function manifestFrom(module) {
129
+ const named = module['manifest'];
130
+ if (named !== undefined)
131
+ return named;
132
+ const fallback = module['default'];
133
+ return fallback === undefined ? undefined : fallback;
134
+ }
135
+ /**
136
+ * Read one package's root export and check that it agrees with `package.json`.
137
+ *
138
+ * The id is taken from `endora.id`, because that is the field the platform can
139
+ * read without importing anything — which is what lets discovery refuse a
140
+ * collision before a stranger's code has run. The manifest carries the id too,
141
+ * and a disagreement is refused rather than silently resolved: whichever half
142
+ * the reader believed, the other one is what some part of the platform would
143
+ * have used.
144
+ */
145
+ async function manifestEntryFor(installed) {
146
+ const module = await importSubpath(installed, '.');
147
+ if (module === null) {
148
+ throw new Error(`[packages] ${installed.name} declares endora.id "${installed.id}" but publishes no root ` +
149
+ `export, so it has no manifest. A module package's "." export is its manifest ` +
150
+ `(specs/071-modular-packaging/contracts/module-manifest.md). Resolved from ` +
151
+ `${installed.manifestPath}.`);
152
+ }
153
+ const manifest = manifestFrom(module);
154
+ if (manifest === undefined) {
155
+ throw new Error(`[packages] the root export of ${installed.name} exports no "manifest", so the module has ` +
156
+ `no version and no declarations to compose it under. Resolved from ` +
157
+ `${installed.manifestPath}.`);
158
+ }
159
+ if (manifest.id !== installed.id) {
160
+ throw new Error(`[packages] ${installed.name} disagrees with itself about its module id: its package.json ` +
161
+ `says endora.id "${installed.id}" and its manifest says "${manifest.id}". The two name ` +
162
+ `the same thing and the platform reads both — package.json before anything is imported, ` +
163
+ `the manifest for everything afterwards — so a disagreement makes the module's identity ` +
164
+ `depend on which half a caller looked at. Fix it at ${installed.manifestPath}.`);
165
+ }
166
+ // `exactOptionalPropertyTypes`: an absent key is not `{ hook: undefined }`,
167
+ // and the lifecycle asks `entry.installHook !== undefined`.
168
+ const installHook = module['installHook'];
169
+ const uninstallHook = module['uninstallHook'];
170
+ const lifecycleParticipant = module['lifecycleParticipant'];
171
+ const cliCommands = module['cliCommands'];
172
+ const recentActivity = module['recentActivity'];
173
+ return {
174
+ id: installed.id,
175
+ manifest,
176
+ filePath: installed.manifestPath,
177
+ packageName: installed.name,
178
+ ...(installHook ? { installHook } : {}),
179
+ ...(uninstallHook ? { uninstallHook } : {}),
180
+ ...(lifecycleParticipant ? { lifecycleParticipant } : {}),
181
+ ...(cliCommands ? { cliCommands } : {}),
182
+ ...(recentActivity ? { recentActivity } : {}),
183
+ };
184
+ }
185
+ /**
186
+ * The manifests of every installed module package, refusing an id two of them
187
+ * claim.
188
+ *
189
+ * A package with no `./backend` export still appears here: an admin- or
190
+ * storefront-only module has permissions, an activation control and i18n
191
+ * bundles, and dropping the manifest would take all three with it.
192
+ */
193
+ export async function packageModuleManifestsUnder(roots) {
194
+ const found = scan(roots);
195
+ assertNoModuleIdCollisions(claimsFor(found.packages));
196
+ const out = [];
197
+ for (const installed of found.packages) {
198
+ const entry = await manifestEntryFor(installed);
199
+ if (entry !== null)
200
+ out.push(entry);
201
+ }
202
+ return out;
203
+ }
204
+ /** {@link packageModuleManifestsUnder} over the roots this platform reads. */
205
+ export async function discoverPackageModuleManifests(env = process.env) {
206
+ return packageModuleManifestsUnder(nodeModulesRootsFor(env));
207
+ }
208
+ /**
209
+ * The composer entries of every installed module package, against explicit
210
+ * roots.
211
+ *
212
+ * Exported so the loader can be driven over a fixture instance that enters at
213
+ * the top of the analysis — a `node_modules` tree on disk, enumerated,
214
+ * `exports`-resolved and imported by the same code the deployment path runs —
215
+ * rather than by handing the last function a pre-built entry (issue #130).
216
+ */
217
+ export async function packageModuleEntriesUnder(roots) {
218
+ const found = scan(roots);
219
+ assertNoModuleIdCollisions(claimsFor(found.packages));
220
+ const entries = [];
221
+ for (const installed of found.packages) {
222
+ const backend = await importSubpath(installed, 'backend');
223
+ // No `./backend` export at all is an ordinary answer and is skipped, the
224
+ // same way an overlay directory with no `backend.ts` is. A `./backend` that
225
+ // resolves and exports no `registerModule` is a different thing and is
226
+ // refused: skipping it composes nothing, and the first symptom is a 404
227
+ // nobody connects to this file.
228
+ if (backend === null)
229
+ continue;
230
+ const registerModule = backend['registerModule'];
231
+ if (typeof registerModule !== 'function') {
232
+ throw new Error(`[packages] the "./backend" export of ${installed.name} exports no 'registerModule'. ` +
233
+ `A module package's backend entry point is what composes it ` +
234
+ `(specs/071-modular-packaging/contracts/module-manifest.md); remove the export if the ` +
235
+ `package has no server half. It is not composed as written, and a module that composes ` +
236
+ `nothing is a 404 with no error behind it. Resolved from ${installed.manifestPath}.`);
237
+ }
238
+ const manifestEntry = await manifestEntryFor(installed);
239
+ if (manifestEntry === null)
240
+ continue;
241
+ entries.push({
242
+ id: installed.id,
243
+ version: manifestEntry.manifest.version,
244
+ registerModule: registerModule,
245
+ // No `overlay: true`. See this file's header — a package is a stranger,
246
+ // and the decoration exemption is the deployment's alone until something
247
+ // rules otherwise.
248
+ //
249
+ // `installedPackage: true` is the mirror image of that flag and is set
250
+ // from where this loader found the package, never from anything the
251
+ // package declares: it is what makes the kernel refuse a *deployment's*
252
+ // overlay wrapping a registration this package owns (D-176 Q3). Until the
253
+ // decoration drain landed, that case was refused by accident — the root
254
+ // composes overlays before packages, so the name was not in the container
255
+ // yet — and the drain would otherwise have granted a capability the owner
256
+ // declined.
257
+ installedPackage: true,
258
+ });
259
+ }
260
+ return entries;
261
+ }
262
+ /**
263
+ * Every installed module package this platform composes.
264
+ *
265
+ * Empty for an instance that installed none, which is every developer checkout
266
+ * and every test run — and empty is the whole story there: the composition is
267
+ * byte-for-byte what it was before this loader existed.
268
+ */
269
+ export async function loadPackageModuleEntries(env = process.env) {
270
+ return packageModuleEntriesUnder(nodeModulesRootsFor(env));
271
+ }
272
+ function isConstructor(value) {
273
+ return typeof value === 'function';
274
+ }
275
+ /**
276
+ * Read a package's `./migrations` export into registry entries.
277
+ *
278
+ * Two published shapes are accepted, because the contract's wording ("exports
279
+ * the migration class array") and the acceptance fixture disagree about which
280
+ * one it means: a bare array of migration classes, and an array of
281
+ * `{ name, class }` — MikroORM's own `MigrationObject` shape. Anything else is
282
+ * **refused rather than skipped**: a migration the host silently drops is a
283
+ * table that never gets created, and the first symptom is a query error nobody
284
+ * connects to this file.
285
+ *
286
+ * The name is always `cls.name`. A declared `name` that disagrees with it is
287
+ * refused for the reason `mikro_orm_migrations` gives: the class name is what
288
+ * is persisted, so the host would record one string and revert by another.
289
+ */
290
+ function migrationEntriesFrom(installed, exported) {
291
+ const declared = exported['migrations'] ?? exported['default'];
292
+ if (!Array.isArray(declared)) {
293
+ throw new Error(`[packages] the "./migrations" export of ${installed.name} exports no 'migrations' array. ` +
294
+ `A module package's migrations entry point is the array of its migration classes ` +
295
+ `(specs/071-modular-packaging/contracts/module-manifest.md); drop the export if the ` +
296
+ `package ships no schema. Resolved from ${installed.manifestPath}.`);
297
+ }
298
+ return declared.map((entry, index) => {
299
+ const candidate = isConstructor(entry)
300
+ ? entry
301
+ : entry?.class;
302
+ if (!isConstructor(candidate)) {
303
+ throw new Error(`[packages] entry ${index} of the "./migrations" export of ${installed.name} is neither ` +
304
+ `a migration class nor a { name, class } pair. Resolved from ${installed.manifestPath}.`);
305
+ }
306
+ const declaredName = isConstructor(entry)
307
+ ? undefined
308
+ : entry.name;
309
+ if (typeof declaredName === 'string' && declaredName !== candidate.name) {
310
+ throw new Error(`[packages] the "./migrations" export of ${installed.name} declares migration ` +
311
+ `"${declaredName}" for a class named "${candidate.name}". mikro_orm_migrations ` +
312
+ `persists the class name, so the host would record one string and revert by another. ` +
313
+ `Resolved from ${installed.manifestPath}.`);
314
+ }
315
+ return {
316
+ moduleId: installed.id,
317
+ cls: candidate,
318
+ // Never omitted and never 'core'. The baseline block is a claim about
319
+ // *our* history (`migration-order.ts`), and an entry that lies about its
320
+ // origin joins a frozen prefix it has no business in.
321
+ origin: 'external',
322
+ };
323
+ });
324
+ }
325
+ /** Read a package's `./backend` export for the entity classes it declares. */
326
+ function entityClassesFrom(installed, exported) {
327
+ const declared = exported['entities'];
328
+ if (declared === undefined)
329
+ return [];
330
+ if (!Array.isArray(declared)) {
331
+ throw new Error(`[packages] the "./backend" export of ${installed.name} exports 'entities' that is not an ` +
332
+ `array. It is the list of entity classes the host's ORM registers. Resolved from ` +
333
+ `${installed.manifestPath}.`);
334
+ }
335
+ return declared.map((entry, index) => {
336
+ if (!isConstructor(entry)) {
337
+ throw new Error(`[packages] entry ${index} of the 'entities' export of ${installed.name} is not a class. ` +
338
+ `Resolved from ${installed.manifestPath}.`);
339
+ }
340
+ return entry;
341
+ });
342
+ }
343
+ /**
344
+ * Every installed package's schema contribution, against explicit roots.
345
+ *
346
+ * Exported so a test can drive it over a `node_modules` tree on disk — the same
347
+ * entry point the deployment path takes, enumerated, `exports`-resolved and
348
+ * imported by the same code — rather than by handing a downstream function a
349
+ * pre-built entry (issue #130).
350
+ */
351
+ export async function packageSchemaContributionsUnder(roots) {
352
+ const found = scan(roots);
353
+ assertNoModuleIdCollisions(claimsFor(found.packages));
354
+ const out = [];
355
+ for (const installed of found.packages) {
356
+ const migrationsEntry = resolveSubpath(installed, 'migrations');
357
+ const migrations = migrationsEntry === null
358
+ ? []
359
+ : migrationEntriesFrom(installed, (await import(pathToFileURL(migrationsEntry).href)));
360
+ const backend = await importSubpath(installed, 'backend');
361
+ // The root export again — the same dynamic import the composer path makes,
362
+ // so the ESM cache answers it and this costs no second read.
363
+ const manifestEntry = await manifestEntryFor(installed);
364
+ out.push({
365
+ id: installed.id,
366
+ packageName: installed.name,
367
+ version: installed.version,
368
+ migrationsDirectory: migrationsEntry === null ? null : dirname(migrationsEntry),
369
+ migrations,
370
+ entities: backend === null ? [] : entityClassesFrom(installed, backend),
371
+ dependencies: manifestEntry?.manifest.dependencies ?? [],
372
+ });
373
+ }
374
+ return out;
375
+ }
376
+ /**
377
+ * {@link packageSchemaContributionsUnder} over the roots this platform reads.
378
+ *
379
+ * Empty for an instance that installed no module package — every developer
380
+ * checkout and every test run — and empty means the ORM configuration is what
381
+ * it was before a package could ship schema at all.
382
+ */
383
+ export async function discoverPackageSchema(env = process.env) {
384
+ return packageSchemaContributionsUnder(nodeModulesRootsFor(env));
385
+ }
386
+ //# sourceMappingURL=package-runtime.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"package-runtime.js","sourceRoot":"","sources":["../../src/packages/package-runtime.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,43 @@
1
+ import { type TenantContext } from './tenant-context.js';
2
+ /**
3
+ * Derived-scope helpers for entities with no direct tenant column
4
+ * (feature 050, research.md §R7):
5
+ * - transitively-scoped (e.g. Invoice → Order.organizationId), and
6
+ * - rule-scoped (e.g. price_lists targeted via applicationRule),
7
+ * whose admin queries must intersect the actor's org scope explicitly because the
8
+ * automatic column filter cannot reach them.
9
+ */
10
+ /** The org restriction implied by the ambient context, as a discriminated union. */
11
+ export type OrgConstraint = {
12
+ readonly kind: 'all';
13
+ } | {
14
+ readonly kind: 'single';
15
+ readonly organizationId: string | null;
16
+ } | {
17
+ readonly kind: 'set';
18
+ readonly organizationIds: readonly string[];
19
+ };
20
+ /** Compute the org constraint from a context (defaults to the ambient one). */
21
+ export declare function orgConstraintFor(ctx?: TenantContext | undefined): OrgConstraint;
22
+ /**
23
+ * Build a MikroORM `where` fragment that constrains an organization-id field to
24
+ * the ambient scope, for transitively/rule-scoped entities. `field` is the path
25
+ * to the org id (e.g. `'order.organizationId'` for Invoice, or `'organizationId'`).
26
+ * Returns `{}` (no restriction) for platform-admin / system scope.
27
+ */
28
+ export declare function orgScopeWhere(field: string, ctx?: TenantContext): Record<string, unknown>;
29
+ /**
30
+ * Whether the ambient scope may act on `organizationId`. Platform-admin/system
31
+ * see all; a single-org actor only their org; a scoped admin only assigned orgs.
32
+ * Use to gate writes (inserts) that the column filter cannot reach — respond
33
+ * indistinguishably from "not found" (FR-008) when this returns false.
34
+ */
35
+ export declare function isOrgInScope(organizationId: string, ctx?: TenantContext): boolean;
36
+ /**
37
+ * For rule-scoped entities (price_lists): given the set of organizations a rule
38
+ * targets, decide whether the ambient scope may see it. Platform-admin/system
39
+ * see everything; a scoped admin sees a rule only if it targets at least one of
40
+ * their assigned orgs (or targets no org at all — a channel/global rule).
41
+ */
42
+ export declare function ruleVisibleForScope(ruleTargetOrgIds: readonly string[], ctx?: TenantContext): boolean;
43
+ //# sourceMappingURL=derived-scope.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"derived-scope.d.ts","sourceRoot":"","sources":["../../src/tenancy/derived-scope.ts"],"names":[],"mappings":"AAAA,OAAO,EAA+C,KAAK,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAEtG;;;;;;;GAOG;AAEH,oFAAoF;AACpF,MAAM,MAAM,aAAa,GACrB;IAAE,QAAQ,CAAC,IAAI,EAAE,KAAK,CAAA;CAAE,GACxB;IAAE,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC;IAAC,QAAQ,CAAC,cAAc,EAAE,MAAM,GAAG,IAAI,CAAA;CAAE,GACnE;IAAE,QAAQ,CAAC,IAAI,EAAE,KAAK,CAAC;IAAC,QAAQ,CAAC,eAAe,EAAE,SAAS,MAAM,EAAE,CAAA;CAAE,CAAC;AAE1E,+EAA+E;AAC/E,wBAAgB,gBAAgB,CAAC,GAAG,GAAE,aAAa,GAAG,SAA8B,GAAG,aAAa,CAgBnG;AAED;;;;;GAKG;AACH,wBAAgB,aAAa,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,CAAC,EAAE,aAAa,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAUzF;AAED;;;;;GAKG;AACH,wBAAgB,YAAY,CAAC,cAAc,EAAE,MAAM,EAAE,GAAG,CAAC,EAAE,aAAa,GAAG,OAAO,CAUjF;AAED;;;;;GAKG;AACH,wBAAgB,mBAAmB,CAAC,gBAAgB,EAAE,SAAS,MAAM,EAAE,EAAE,GAAG,CAAC,EAAE,aAAa,GAAG,OAAO,CAarG"}
@@ -0,0 +1,76 @@
1
+ import { getTenantContext, MissingTenantContextError } from './tenant-context.js';
2
+ /** Compute the org constraint from a context (defaults to the ambient one). */
3
+ export function orgConstraintFor(ctx = getTenantContext()) {
4
+ if (!ctx)
5
+ throw new MissingTenantContextError('derived-scope');
6
+ switch (ctx.mode) {
7
+ case 'all':
8
+ case 'system':
9
+ return { kind: 'all' };
10
+ case 'single-org':
11
+ // Null since D-178 only where `TenantContext`'s optional field is unset:
12
+ // a signed-in customer always carries an organisation, because
13
+ // `customer_accounts.organization_id` is `NOT NULL`. See
14
+ // `orgFilterCond`'s note in `filters.ts` — same coalesce, same reason it
15
+ // has no reachable caller.
16
+ return { kind: 'single', organizationId: ctx.organizationId ?? null };
17
+ case 'allowed-set':
18
+ return { kind: 'set', organizationIds: ctx.allowedOrganizationIds ?? [] };
19
+ }
20
+ }
21
+ /**
22
+ * Build a MikroORM `where` fragment that constrains an organization-id field to
23
+ * the ambient scope, for transitively/rule-scoped entities. `field` is the path
24
+ * to the org id (e.g. `'order.organizationId'` for Invoice, or `'organizationId'`).
25
+ * Returns `{}` (no restriction) for platform-admin / system scope.
26
+ */
27
+ export function orgScopeWhere(field, ctx) {
28
+ const constraint = orgConstraintFor(ctx);
29
+ switch (constraint.kind) {
30
+ case 'all':
31
+ return {};
32
+ case 'single':
33
+ return { [field]: constraint.organizationId };
34
+ case 'set':
35
+ return { [field]: { $in: [...constraint.organizationIds] } };
36
+ }
37
+ }
38
+ /**
39
+ * Whether the ambient scope may act on `organizationId`. Platform-admin/system
40
+ * see all; a single-org actor only their org; a scoped admin only assigned orgs.
41
+ * Use to gate writes (inserts) that the column filter cannot reach — respond
42
+ * indistinguishably from "not found" (FR-008) when this returns false.
43
+ */
44
+ export function isOrgInScope(organizationId, ctx) {
45
+ const constraint = orgConstraintFor(ctx);
46
+ switch (constraint.kind) {
47
+ case 'all':
48
+ return true;
49
+ case 'single':
50
+ return constraint.organizationId === organizationId;
51
+ case 'set':
52
+ return constraint.organizationIds.includes(organizationId);
53
+ }
54
+ }
55
+ /**
56
+ * For rule-scoped entities (price_lists): given the set of organizations a rule
57
+ * targets, decide whether the ambient scope may see it. Platform-admin/system
58
+ * see everything; a scoped admin sees a rule only if it targets at least one of
59
+ * their assigned orgs (or targets no org at all — a channel/global rule).
60
+ */
61
+ export function ruleVisibleForScope(ruleTargetOrgIds, ctx) {
62
+ const constraint = orgConstraintFor(ctx);
63
+ switch (constraint.kind) {
64
+ case 'all':
65
+ return true;
66
+ case 'single':
67
+ return ruleTargetOrgIds.length === 0 || (constraint.organizationId != null && ruleTargetOrgIds.includes(constraint.organizationId));
68
+ case 'set': {
69
+ if (ruleTargetOrgIds.length === 0)
70
+ return true;
71
+ const allowed = new Set(constraint.organizationIds);
72
+ return ruleTargetOrgIds.some((id) => allowed.has(id));
73
+ }
74
+ }
75
+ }
76
+ //# sourceMappingURL=derived-scope.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"derived-scope.js","sourceRoot":"","sources":["../../src/tenancy/derived-scope.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,yBAAyB,EAAsB,MAAM,qBAAqB,CAAC;AAiBtG,+EAA+E;AAC/E,MAAM,UAAU,gBAAgB,CAAC,MAAiC,gBAAgB,EAAE;IAClF,IAAI,CAAC,GAAG;QAAE,MAAM,IAAI,yBAAyB,CAAC,eAAe,CAAC,CAAC;IAC/D,QAAQ,GAAG,CAAC,IAAI,EAAE,CAAC;QACjB,KAAK,KAAK,CAAC;QACX,KAAK,QAAQ;YACX,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC;QACzB,KAAK,YAAY;YACf,yEAAyE;YACzE,+DAA+D;YAC/D,yDAAyD;YACzD,yEAAyE;YACzE,2BAA2B;YAC3B,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,cAAc,EAAE,GAAG,CAAC,cAAc,IAAI,IAAI,EAAE,CAAC;QACxE,KAAK,aAAa;YAChB,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,eAAe,EAAE,GAAG,CAAC,sBAAsB,IAAI,EAAE,EAAE,CAAC;IAC9E,CAAC;AACH,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,aAAa,CAAC,KAAa,EAAE,GAAmB;IAC9D,MAAM,UAAU,GAAG,gBAAgB,CAAC,GAAG,CAAC,CAAC;IACzC,QAAQ,UAAU,CAAC,IAAI,EAAE,CAAC;QACxB,KAAK,KAAK;YACR,OAAO,EAAE,CAAC;QACZ,KAAK,QAAQ;YACX,OAAO,EAAE,CAAC,KAAK,CAAC,EAAE,UAAU,CAAC,cAAc,EAAE,CAAC;QAChD,KAAK,KAAK;YACR,OAAO,EAAE,CAAC,KAAK,CAAC,EAAE,EAAE,GAAG,EAAE,CAAC,GAAG,UAAU,CAAC,eAAe,CAAC,EAAE,EAAE,CAAC;IACjE,CAAC;AACH,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,YAAY,CAAC,cAAsB,EAAE,GAAmB;IACtE,MAAM,UAAU,GAAG,gBAAgB,CAAC,GAAG,CAAC,CAAC;IACzC,QAAQ,UAAU,CAAC,IAAI,EAAE,CAAC;QACxB,KAAK,KAAK;YACR,OAAO,IAAI,CAAC;QACd,KAAK,QAAQ;YACX,OAAO,UAAU,CAAC,cAAc,KAAK,cAAc,CAAC;QACtD,KAAK,KAAK;YACR,OAAO,UAAU,CAAC,eAAe,CAAC,QAAQ,CAAC,cAAc,CAAC,CAAC;IAC/D,CAAC;AACH,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,mBAAmB,CAAC,gBAAmC,EAAE,GAAmB;IAC1F,MAAM,UAAU,GAAG,gBAAgB,CAAC,GAAG,CAAC,CAAC;IACzC,QAAQ,UAAU,CAAC,IAAI,EAAE,CAAC;QACxB,KAAK,KAAK;YACR,OAAO,IAAI,CAAC;QACd,KAAK,QAAQ;YACX,OAAO,gBAAgB,CAAC,MAAM,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,cAAc,IAAI,IAAI,IAAI,gBAAgB,CAAC,QAAQ,CAAC,UAAU,CAAC,cAAc,CAAC,CAAC,CAAC;QACtI,KAAK,KAAK,CAAC,CAAC,CAAC;YACX,IAAI,gBAAgB,CAAC,MAAM,KAAK,CAAC;gBAAE,OAAO,IAAI,CAAC;YAC/C,MAAM,OAAO,GAAG,IAAI,GAAG,CAAC,UAAU,CAAC,eAAe,CAAC,CAAC;YACpD,OAAO,gBAAgB,CAAC,IAAI,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;QACxD,CAAC;IACH,CAAC;AACH,CAAC"}
@@ -0,0 +1,30 @@
1
+ /**
2
+ * The ONLY sanctioned way to cross organizations (feature 050, FR-005 / FR-013).
3
+ *
4
+ * `withSystemScope` / `withOrgScope` are the single greppable tokens for
5
+ * scope-widening; the CI check forbids any other means (raw `setFilterParams`
6
+ * / `disableFilter` outside this layer). Every call requires a non-empty
7
+ * `reason` and emits one audit record so cross-org access is observable.
8
+ */
9
+ export interface EscapeHatchAuditRecord {
10
+ readonly scope: 'system' | 'org';
11
+ readonly reason: string;
12
+ readonly organizationId?: string;
13
+ }
14
+ export type EscapeHatchAuditSink = (record: EscapeHatchAuditRecord) => void;
15
+ /** Wire the escape hatch to a real audit sink (e.g. AuditLogService). */
16
+ export declare function setEscapeHatchAuditSink(sink: EscapeHatchAuditSink): void;
17
+ /**
18
+ * Emit one escape-hatch audit record without entering a context.
19
+ *
20
+ * The kernel's `enterSystemScope` (feature 072) *starts* an execution that
21
+ * crosses organisations, where `withSystemScope` widens one that already exists.
22
+ * Both are cross-org access and both have to be observable, so the entry point
23
+ * reports through the same sink instead of growing a second, quieter one.
24
+ */
25
+ export declare function recordEscapeHatchAudit(record: EscapeHatchAuditRecord): void;
26
+ /** Run `fn` crossing ALL organizations (reporting, reconciliation, migrations). */
27
+ export declare function withSystemScope<T>(reason: string, fn: () => Promise<T>): Promise<T>;
28
+ /** Run `fn` pinned to a single organization (e.g. a per-org background job). */
29
+ export declare function withOrgScope<T>(organizationId: string, reason: string, fn: () => Promise<T>): Promise<T>;
30
+ //# sourceMappingURL=escape-hatch.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"escape-hatch.d.ts","sourceRoot":"","sources":["../../src/tenancy/escape-hatch.ts"],"names":[],"mappings":"AAGA;;;;;;;GAOG;AAEH,MAAM,WAAW,sBAAsB;IACrC,QAAQ,CAAC,KAAK,EAAE,QAAQ,GAAG,KAAK,CAAC;IACjC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,cAAc,CAAC,EAAE,MAAM,CAAC;CAClC;AAED,MAAM,MAAM,oBAAoB,GAAG,CAAC,MAAM,EAAE,sBAAsB,KAAK,IAAI,CAAC;AAmB5E,yEAAyE;AACzE,wBAAgB,uBAAuB,CAAC,IAAI,EAAE,oBAAoB,GAAG,IAAI,CAExE;AAQD;;;;;;;GAOG;AACH,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,sBAAsB,GAAG,IAAI,CAG3E;AAED,mFAAmF;AACnF,wBAAgB,eAAe,CAAC,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAInF;AAED,gFAAgF;AAChF,wBAAgB,YAAY,CAAC,CAAC,EAAE,cAAc,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAIxG"}
@@ -0,0 +1,50 @@
1
+ import { runWithTenantContext } from './tenant-context.js';
2
+ import { systemTenantContext, orgPinnedTenantContext } from './resolve-tenant-context.js';
3
+ /**
4
+ * Default sink: one structured line on **stderr**. Composition may replace it
5
+ * with one that writes to AuditLogService (FR-013).
6
+ *
7
+ * stderr and not stdout, since feature 072 (T035): the CLI scripts now open
8
+ * their scope through `enterSystemScope`, which reports here, and several of
9
+ * them (`module:install --json` and friends) treat stdout as a machine-readable
10
+ * data channel. An audit line printed there is not a log entry, it is corrupt
11
+ * output. Nothing consumes this on stdout — in the server both streams land in
12
+ * the same log.
13
+ */
14
+ let auditSink = (record) => {
15
+ process.stderr.write(`${JSON.stringify({ level: 'info', msg: 'tenant.escape_hatch', ...record })}\n`);
16
+ };
17
+ /** Wire the escape hatch to a real audit sink (e.g. AuditLogService). */
18
+ export function setEscapeHatchAuditSink(sink) {
19
+ auditSink = sink;
20
+ }
21
+ function requireReason(reason) {
22
+ if (!reason || reason.trim().length === 0) {
23
+ throw new Error('withSystemScope/withOrgScope requires a non-empty reason (feature 050, FR-005).');
24
+ }
25
+ }
26
+ /**
27
+ * Emit one escape-hatch audit record without entering a context.
28
+ *
29
+ * The kernel's `enterSystemScope` (feature 072) *starts* an execution that
30
+ * crosses organisations, where `withSystemScope` widens one that already exists.
31
+ * Both are cross-org access and both have to be observable, so the entry point
32
+ * reports through the same sink instead of growing a second, quieter one.
33
+ */
34
+ export function recordEscapeHatchAudit(record) {
35
+ requireReason(record.reason);
36
+ auditSink(record);
37
+ }
38
+ /** Run `fn` crossing ALL organizations (reporting, reconciliation, migrations). */
39
+ export function withSystemScope(reason, fn) {
40
+ requireReason(reason);
41
+ auditSink({ scope: 'system', reason });
42
+ return runWithTenantContext(systemTenantContext(reason), fn);
43
+ }
44
+ /** Run `fn` pinned to a single organization (e.g. a per-org background job). */
45
+ export function withOrgScope(organizationId, reason, fn) {
46
+ requireReason(reason);
47
+ auditSink({ scope: 'org', reason, organizationId });
48
+ return runWithTenantContext(orgPinnedTenantContext(organizationId, reason), fn);
49
+ }
50
+ //# sourceMappingURL=escape-hatch.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"escape-hatch.js","sourceRoot":"","sources":["../../src/tenancy/escape-hatch.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AAC3D,OAAO,EAAE,mBAAmB,EAAE,sBAAsB,EAAE,MAAM,6BAA6B,CAAC;AAmB1F;;;;;;;;;;GAUG;AACH,IAAI,SAAS,GAAyB,CAAC,MAAM,EAAE,EAAE;IAC/C,OAAO,CAAC,MAAM,CAAC,KAAK,CAClB,GAAG,IAAI,CAAC,SAAS,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,qBAAqB,EAAE,GAAG,MAAM,EAAE,CAAC,IAAI,CAChF,CAAC;AACJ,CAAC,CAAC;AAEF,yEAAyE;AACzE,MAAM,UAAU,uBAAuB,CAAC,IAA0B;IAChE,SAAS,GAAG,IAAI,CAAC;AACnB,CAAC;AAED,SAAS,aAAa,CAAC,MAAc;IACnC,IAAI,CAAC,MAAM,IAAI,MAAM,CAAC,IAAI,EAAE,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC1C,MAAM,IAAI,KAAK,CAAC,iFAAiF,CAAC,CAAC;IACrG,CAAC;AACH,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,sBAAsB,CAAC,MAA8B;IACnE,aAAa,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IAC7B,SAAS,CAAC,MAAM,CAAC,CAAC;AACpB,CAAC;AAED,mFAAmF;AACnF,MAAM,UAAU,eAAe,CAAI,MAAc,EAAE,EAAoB;IACrE,aAAa,CAAC,MAAM,CAAC,CAAC;IACtB,SAAS,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,EAAE,CAAC,CAAC;IACvC,OAAO,oBAAoB,CAAC,mBAAmB,CAAC,MAAM,CAAC,EAAE,EAAE,CAAC,CAAC;AAC/D,CAAC;AAED,gFAAgF;AAChF,MAAM,UAAU,YAAY,CAAI,cAAsB,EAAE,MAAc,EAAE,EAAoB;IAC1F,aAAa,CAAC,MAAM,CAAC,CAAC;IACtB,SAAS,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,cAAc,EAAE,CAAC,CAAC;IACpD,OAAO,oBAAoB,CAAC,sBAAsB,CAAC,cAAc,EAAE,MAAM,CAAC,EAAE,EAAE,CAAC,CAAC;AAClF,CAAC"}