@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,69 @@
1
+ import type { EntityManager } from '@mikro-orm/postgresql';
2
+ import type { FastifyInstance } from 'fastify';
3
+ import type { Redis } from 'ioredis';
4
+ import type { EventBus } from '../../events/bus.js';
5
+ import type { AuditPort } from '../ports/audit.js';
6
+ import { SalesChannelsCache } from './sales-channels-cache.js';
7
+ import { SalesChannelResolverService } from './sales-channel-resolver.service.js';
8
+ import { SalesChannelMembershipService } from './sales-channel-membership.service.js';
9
+ import { type ChannelBridgeRegistry } from './channel-bridge-registry.js';
10
+ /**
11
+ * The sales-channel resolution machinery, composed as kernel infrastructure
12
+ * rather than as part of the `sales_channels` module (feature 072, T110).
13
+ *
14
+ * The split follows what the code already was after T019 moved these files
15
+ * into `kernel/`: resolving which channel a request belongs to is something
16
+ * every channel-scoped read depends on (Principle XII), and it has to keep
17
+ * working whether or not an operator wants the channel *administration*
18
+ * screens. Gating the middleware behind the module would mean switching
19
+ * `sales_channels` off leaves every storefront request with no resolved
20
+ * channel — not a smaller platform, a broken one.
21
+ *
22
+ * So the module keeps what is genuinely its own — the admin CRUD service, its
23
+ * routes, its migrations and its settings — and this function composes the
24
+ * rest for a composition root.
25
+ */
26
+ export interface SalesChannelsKernelOptions {
27
+ readonly emFactory: () => EntityManager;
28
+ readonly eventBus: EventBus;
29
+ readonly redis: Redis;
30
+ readonly auditLogService?: AuditPort;
31
+ /**
32
+ * The bridge registry the owning modules contribute into (feature 120,
33
+ * FR-015). Defaults to the process-level one, which is what every
34
+ * composition root in this repository uses; a caller supplies its own only
35
+ * to compose an isolated platform.
36
+ */
37
+ readonly bridgeRegistry?: ChannelBridgeRegistry;
38
+ /**
39
+ * Forwarded to the resolver middleware. Defaults to `false` so admin routes
40
+ * keep working without `X-Sales-Channel`.
41
+ */
42
+ readonly strictAdmin?: boolean;
43
+ }
44
+ export interface SalesChannelsKernel {
45
+ readonly cache: SalesChannelsCache;
46
+ readonly resolver: SalesChannelResolverService;
47
+ readonly membershipService: SalesChannelMembershipService;
48
+ /**
49
+ * The channel-bridge contribution registry (feature 120, FR-015).
50
+ *
51
+ * A composition root contributes it to the container as
52
+ * `salesChannelBridgeRegistry`, which is the name each owning module resolves
53
+ * from its boot hook to declare the one bridge it owns. The platform holds no
54
+ * map of its own: a member no module registered refuses rather than reaching
55
+ * a relation an instance that omits that module does not have.
56
+ */
57
+ readonly bridgeRegistry: ChannelBridgeRegistry;
58
+ /**
59
+ * Withdraws this process's cache from the operator-facing clear. Released
60
+ * for tests; in production it lives until process exit.
61
+ */
62
+ readonly cacheRegistration: {
63
+ readonly dispose: () => void;
64
+ };
65
+ /** The resolver middleware, mounted by the root and never module-gated. */
66
+ readonly plugin: (app: FastifyInstance) => Promise<void>;
67
+ }
68
+ export declare function composeSalesChannelsKernel(options: SalesChannelsKernelOptions): SalesChannelsKernel;
69
+ //# sourceMappingURL=compose.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"compose.d.ts","sourceRoot":"","sources":["../../../src/kernel/sales-channels/compose.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAC3D,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,SAAS,CAAC;AAC/C,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,SAAS,CAAC;AACrC,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAEnD,OAAO,EAEL,kBAAkB,EACnB,MAAM,2BAA2B,CAAC;AACnC,OAAO,EAAE,2BAA2B,EAAE,MAAM,qCAAqC,CAAC;AAClF,OAAO,EAAE,6BAA6B,EAAE,MAAM,uCAAuC,CAAC;AACtF,OAAO,EAAkB,KAAK,qBAAqB,EAAE,MAAM,8BAA8B,CAAC;AAG1F;;;;;;;;;;;;;;;GAeG;AACH,MAAM,WAAW,0BAA0B;IACzC,QAAQ,CAAC,SAAS,EAAE,MAAM,aAAa,CAAC;IACxC,QAAQ,CAAC,QAAQ,EAAE,QAAQ,CAAC;IAC5B,QAAQ,CAAC,KAAK,EAAE,KAAK,CAAC;IACtB,QAAQ,CAAC,eAAe,CAAC,EAAE,SAAS,CAAC;IACrC;;;;;OAKG;IACH,QAAQ,CAAC,cAAc,CAAC,EAAE,qBAAqB,CAAC;IAChD;;;OAGG;IACH,QAAQ,CAAC,WAAW,CAAC,EAAE,OAAO,CAAC;CAChC;AAED,MAAM,WAAW,mBAAmB;IAClC,QAAQ,CAAC,KAAK,EAAE,kBAAkB,CAAC;IACnC,QAAQ,CAAC,QAAQ,EAAE,2BAA2B,CAAC;IAC/C,QAAQ,CAAC,iBAAiB,EAAE,6BAA6B,CAAC;IAC1D;;;;;;;;OAQG;IACH,QAAQ,CAAC,cAAc,EAAE,qBAAqB,CAAC;IAC/C;;;OAGG;IACH,QAAQ,CAAC,iBAAiB,EAAE;QAAE,QAAQ,CAAC,OAAO,EAAE,MAAM,IAAI,CAAA;KAAE,CAAC;IAC7D,2EAA2E;IAC3E,QAAQ,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,eAAe,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;CAC1D;AAED,wBAAgB,0BAA0B,CACxC,OAAO,EAAE,0BAA0B,GAClC,mBAAmB,CAyCrB"}
@@ -0,0 +1,43 @@
1
+ import { inProcessCaches } from '../cache/in-process-cache-registry.js';
2
+ import { SALES_CHANNELS_CACHE_NAMESPACE, SalesChannelsCache, } from './sales-channels-cache.js';
3
+ import { SalesChannelResolverService } from './sales-channel-resolver.service.js';
4
+ import { SalesChannelMembershipService } from './sales-channel-membership.service.js';
5
+ import { channelBridges } from './channel-bridge-registry.js';
6
+ import { registerSalesChannelResolverMiddleware } from './sales-channel-resolver.middleware.js';
7
+ export function composeSalesChannelsKernel(options) {
8
+ const cache = new SalesChannelsCache(options.redis);
9
+ const resolver = new SalesChannelResolverService(options.emFactory, cache);
10
+ const bridgeRegistry = options.bridgeRegistry ?? channelBridges;
11
+ const membershipService = new SalesChannelMembershipService(options.emFactory, options.eventBus, options.auditLogService, bridgeRegistry);
12
+ /**
13
+ * The one thing composing the cache still has to *do*: announce it to the
14
+ * operator-facing "clear cache" action (issue #33). The clear runs in this
15
+ * process and has to reach the object that owns both layers, or it drops the
16
+ * Redis keys while every warm process keeps serving — and re-pinning — the
17
+ * channel it had already resolved.
18
+ *
19
+ * It used to ride on `attachSalesChannelsCacheInvalidator`, which also
20
+ * subscribed to `sales_channels.identity_changed` and
21
+ * `sales_channels.lifecycle_changed`. Those subscriptions are gone (D-93);
22
+ * the registration is not, because it never had anything to do with the bus.
23
+ */
24
+ const unregister = inProcessCaches.register(SALES_CHANNELS_CACHE_NAMESPACE, cache);
25
+ return {
26
+ cache,
27
+ resolver,
28
+ membershipService,
29
+ bridgeRegistry,
30
+ cacheRegistration: { dispose: unregister },
31
+ plugin: async (app) => {
32
+ await registerSalesChannelResolverMiddleware(app, {
33
+ resolver,
34
+ ...(options.strictAdmin !== undefined ? { strictAdmin: options.strictAdmin } : {}),
35
+ // Feature 062 — audit sink for bound-key channel-mismatch refusals.
36
+ ...(options.auditLogService !== undefined
37
+ ? { auditLogService: options.auditLogService }
38
+ : {}),
39
+ });
40
+ },
41
+ };
42
+ }
43
+ //# sourceMappingURL=compose.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"compose.js","sourceRoot":"","sources":["../../../src/kernel/sales-channels/compose.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,eAAe,EAAE,MAAM,uCAAuC,CAAC;AACxE,OAAO,EACL,8BAA8B,EAC9B,kBAAkB,GACnB,MAAM,2BAA2B,CAAC;AACnC,OAAO,EAAE,2BAA2B,EAAE,MAAM,qCAAqC,CAAC;AAClF,OAAO,EAAE,6BAA6B,EAAE,MAAM,uCAAuC,CAAC;AACtF,OAAO,EAAE,cAAc,EAA8B,MAAM,8BAA8B,CAAC;AAC1F,OAAO,EAAE,sCAAsC,EAAE,MAAM,wCAAwC,CAAC;AA4DhG,MAAM,UAAU,0BAA0B,CACxC,OAAmC;IAEnC,MAAM,KAAK,GAAG,IAAI,kBAAkB,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;IACpD,MAAM,QAAQ,GAAG,IAAI,2BAA2B,CAAC,OAAO,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC;IAC3E,MAAM,cAAc,GAAG,OAAO,CAAC,cAAc,IAAI,cAAc,CAAC;IAChE,MAAM,iBAAiB,GAAG,IAAI,6BAA6B,CACzD,OAAO,CAAC,SAAS,EACjB,OAAO,CAAC,QAAQ,EAChB,OAAO,CAAC,eAAe,EACvB,cAAc,CACf,CAAC;IACF;;;;;;;;;;;OAWG;IACH,MAAM,UAAU,GAAG,eAAe,CAAC,QAAQ,CAAC,8BAA8B,EAAE,KAAK,CAAC,CAAC;IAEnF,OAAO;QACL,KAAK;QACL,QAAQ;QACR,iBAAiB;QACjB,cAAc;QACd,iBAAiB,EAAE,EAAE,OAAO,EAAE,UAAU,EAAE;QAC1C,MAAM,EAAE,KAAK,EAAE,GAAG,EAAE,EAAE;YACpB,MAAM,sCAAsC,CAAC,GAAG,EAAE;gBAChD,QAAQ;gBACR,GAAG,CAAC,OAAO,CAAC,WAAW,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,OAAO,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBAClF,oEAAoE;gBACpE,GAAG,CAAC,OAAO,CAAC,eAAe,KAAK,SAAS;oBACvC,CAAC,CAAC,EAAE,eAAe,EAAE,OAAO,CAAC,eAAe,EAAE;oBAC9C,CAAC,CAAC,EAAE,CAAC;aACR,CAAC,CAAC;QACL,CAAC;KACF,CAAC;AACJ,CAAC"}
@@ -0,0 +1,66 @@
1
+ import type { EntityManager } from '@mikro-orm/postgresql';
2
+ import type { AuditPort } from '../ports/audit.js';
3
+ import { SalesChannel } from './sales-channel.entity.js';
4
+ /**
5
+ * DefaultChannelReconciler — feature 005 / T013.
6
+ *
7
+ * Boot-time idempotent guarantee that the platform has exactly one
8
+ * `system_default = true` Sales Channel (FR-002, research R-4). The
9
+ * partial unique index on `system_default` (migration 025) prevents two
10
+ * winners; this service handles the "zero winners" case across all
11
+ * possible startup states.
12
+ *
13
+ * Decision tree (run on every backend boot):
14
+ *
15
+ * 1. Zero rows in `sales_channels`
16
+ * → INSERT a fresh `Default` row with `system_default = true`,
17
+ * sourced from env var `DEFAULT_SALES_CHANNEL_CODE` (default
18
+ * `default`). Audit `lifecycle.changed{op:'system-default-promoted'}`.
19
+ *
20
+ * 2. ≥1 rows AND none has `system_default = true`
21
+ * → Promote the lexically-first row by `code` (with a tie-break
22
+ * toward `code = 'default'`). This handles the upgrade-from-002
23
+ * case where the seed inserted a channel before this feature
24
+ * existed. Audit the promotion.
25
+ *
26
+ * 3. Exactly one row has `system_default = true`
27
+ * → No-op. Idempotent re-runs land here.
28
+ *
29
+ * The reconciler NEVER DEMOTES an already-promoted row, never deletes,
30
+ * and never edits identity. A platform that finds itself with multiple
31
+ * system-default rows (only possible if the partial unique index is
32
+ * missing, e.g. on a partially-migrated DB) leaves the rows alone and
33
+ * emits a critical warning so the operator can intervene — see
34
+ * {@link DefaultChannelReconciliationResult.warning}.
35
+ */
36
+ export interface DefaultChannelReconciliationResult {
37
+ /** Action taken in this run. */
38
+ action: 'inserted' | 'promoted' | 'no_change' | 'warning';
39
+ /** The system-default channel after reconciliation, when known. */
40
+ systemDefault?: SalesChannel;
41
+ /** Operator-actionable warning text when the partial unique index is missing or multiple defaults are observed. */
42
+ warning?: string;
43
+ }
44
+ export interface DefaultChannelReconcilerOptions {
45
+ /**
46
+ * Used by tests whose `languages` / `currencies` seed differs from the
47
+ * `en` / `EUR` fallbacks. Production always uses the env-driven
48
+ * fallbacks (research R-4); these overrides are not exposed in
49
+ * `composition.ts`.
50
+ */
51
+ bootstrapDefaults?: {
52
+ code?: string;
53
+ language?: string;
54
+ currency?: string;
55
+ };
56
+ }
57
+ export declare class DefaultChannelReconciler {
58
+ private readonly emFactory;
59
+ private readonly auditLogService?;
60
+ private readonly options;
61
+ constructor(emFactory: () => EntityManager, auditLogService?: AuditPort | undefined, options?: DefaultChannelReconcilerOptions);
62
+ run(): Promise<DefaultChannelReconciliationResult>;
63
+ private insertDefault;
64
+ private audit;
65
+ }
66
+ //# sourceMappingURL=default-channel-reconciler.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"default-channel-reconciler.d.ts","sourceRoot":"","sources":["../../../src/kernel/sales-channels/default-channel-reconciler.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAC3D,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAEnD,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AAEzD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+BG;AAEH,MAAM,WAAW,kCAAkC;IACjD,gCAAgC;IAChC,MAAM,EAAE,UAAU,GAAG,UAAU,GAAG,WAAW,GAAG,SAAS,CAAC;IAC1D,mEAAmE;IACnE,aAAa,CAAC,EAAE,YAAY,CAAC;IAC7B,mHAAmH;IACnH,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAMD,MAAM,WAAW,+BAA+B;IAC9C;;;;;OAKG;IACH,iBAAiB,CAAC,EAAE;QAClB,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;KACnB,CAAC;CACH;AAED,qBAAa,wBAAwB;IAEjC,OAAO,CAAC,QAAQ,CAAC,SAAS;IAC1B,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAC;IACjC,OAAO,CAAC,QAAQ,CAAC,OAAO;gBAFP,SAAS,EAAE,MAAM,aAAa,EAC9B,eAAe,CAAC,EAAE,SAAS,YAAA,EAC3B,OAAO,GAAE,+BAAoC;IAG1D,GAAG,IAAI,OAAO,CAAC,kCAAkC,CAAC;YAoD1C,aAAa;YAmCb,KAAK;CAUpB"}
@@ -0,0 +1,91 @@
1
+ import { SALES_CHANNEL_AUDIT_ACTIONS } from '@endora-commerce/contracts';
2
+ import { SalesChannel } from './sales-channel.entity.js';
3
+ const DEFAULT_CODE_FALLBACK = 'default';
4
+ const DEFAULT_LANGUAGE_FALLBACK = 'en';
5
+ const DEFAULT_CURRENCY_FALLBACK = 'EUR';
6
+ export class DefaultChannelReconciler {
7
+ emFactory;
8
+ auditLogService;
9
+ options;
10
+ constructor(emFactory, auditLogService, options = {}) {
11
+ this.emFactory = emFactory;
12
+ this.auditLogService = auditLogService;
13
+ this.options = options;
14
+ }
15
+ async run() {
16
+ const em = this.emFactory();
17
+ const all = await em.find(SalesChannel, {});
18
+ // Branch 1 — empty table. Insert Default.
19
+ if (all.length === 0) {
20
+ const inserted = await this.insertDefault(em);
21
+ return { action: 'inserted', systemDefault: inserted };
22
+ }
23
+ const defaults = all.filter((c) => c.systemDefault);
24
+ // Branch 3 — exactly one already promoted: no-op.
25
+ if (defaults.length === 1) {
26
+ return { action: 'no_change', systemDefault: defaults[0] };
27
+ }
28
+ // Branch warning — multiple defaults observed (only possible if the
29
+ // partial unique index is missing). Leave them alone, emit a warning.
30
+ if (defaults.length > 1) {
31
+ return {
32
+ action: 'warning',
33
+ warning: `[sales_channels] expected at most one row with system_default = true, ` +
34
+ `observed ${defaults.length}. The partial unique index ` +
35
+ `"sales_channels_one_system_default" is likely missing or migration 025 ` +
36
+ `has not been applied. Manual intervention is required.`,
37
+ };
38
+ }
39
+ // Branch 2 — no defaults. Promote the lexically-first row, tie-breaking
40
+ // toward `code = 'default'`.
41
+ const candidates = [...all].sort((a, b) => {
42
+ const aIsDefault = a.code === DEFAULT_CODE_FALLBACK ? 0 : 1;
43
+ const bIsDefault = b.code === DEFAULT_CODE_FALLBACK ? 0 : 1;
44
+ if (aIsDefault !== bIsDefault)
45
+ return aIsDefault - bIsDefault;
46
+ return a.code.localeCompare(b.code);
47
+ });
48
+ const winner = candidates[0];
49
+ winner.systemDefault = true;
50
+ winner.version += 1;
51
+ await em.persistAndFlush(winner);
52
+ await this.audit(winner.id, 'system-default-promoted', `boot-time reconciler promoted "${winner.code}" to system default`);
53
+ return { action: 'promoted', systemDefault: winner };
54
+ }
55
+ async insertDefault(em) {
56
+ const code = this.options.bootstrapDefaults?.code ??
57
+ process.env['DEFAULT_SALES_CHANNEL_CODE'] ??
58
+ DEFAULT_CODE_FALLBACK;
59
+ const language = this.options.bootstrapDefaults?.language ?? DEFAULT_LANGUAGE_FALLBACK;
60
+ const currency = this.options.bootstrapDefaults?.currency ?? DEFAULT_CURRENCY_FALLBACK;
61
+ const channel = em.create(SalesChannel, {
62
+ code,
63
+ name: { en: 'Default' },
64
+ languages: [language],
65
+ defaultLanguage: language,
66
+ currencies: [currency],
67
+ defaultCurrency: currency,
68
+ active: true,
69
+ systemDefault: true,
70
+ version: 1,
71
+ // Legacy columns preserved for one release (research R-12).
72
+ isPublic: false,
73
+ status: 'active',
74
+ });
75
+ await em.persistAndFlush(channel);
76
+ await this.audit(channel.id, 'system-default-promoted', `boot-time reconciler inserted fresh "${code}" as system default`);
77
+ return channel;
78
+ }
79
+ async audit(channelId, op, reason) {
80
+ if (!this.auditLogService)
81
+ return;
82
+ await this.auditLogService.record({
83
+ actorAdminUserId: null,
84
+ action: SALES_CHANNEL_AUDIT_ACTIONS.LIFECYCLE_CHANGED,
85
+ objectType: 'sales_channel',
86
+ objectId: channelId,
87
+ stateAfter: { op, reason },
88
+ });
89
+ }
90
+ }
91
+ //# sourceMappingURL=default-channel-reconciler.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"default-channel-reconciler.js","sourceRoot":"","sources":["../../../src/kernel/sales-channels/default-channel-reconciler.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,28 @@
1
+ import { HttpError } from '../../http/error-envelope.js';
2
+ /**
3
+ * The platform has no sales channel holding `system_default` (feature 072,
4
+ * D-47 / D-48).
5
+ *
6
+ * This is a **platform fault, not a caller error**, and it is unreachable on a
7
+ * booted deployment: the boot reconciler
8
+ * (`kernel/sales-channels/default-channel-reconciler.ts`) inserts or promotes a
9
+ * default on every serving path, a partial unique index forbids a second one,
10
+ * and `SalesChannelsService` refuses every delete, deactivate and `active:false`
11
+ * that would take the flag away. The only way to observe it is to read a
12
+ * channel before composition has run the reconciler.
13
+ *
14
+ * It exists so that state has **one** spelling. Before D-48 it had four — a
15
+ * `'default'` channel code where an id was wanted, a nil UUID, a `randomUUID()`
16
+ * persisted into an order, and a silent switch to the platform-wide settings
17
+ * tier — because `getSystemDefault()` returned `null` and every author had to
18
+ * invent a value for a branch that cannot be taken.
19
+ *
20
+ * 500 `INTERNAL` is deliberate and matches what the resolver middleware already
21
+ * answered on this condition: no request can be blamed for it and no client can
22
+ * retry into a fix. The one surface that *renders* the condition rather than
23
+ * failing on it is `/sales-channels` (D-51); every consumer propagates.
24
+ */
25
+ export declare class NoSystemDefaultChannel extends HttpError {
26
+ constructor();
27
+ }
28
+ //# sourceMappingURL=no-system-default-channel.error.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"no-system-default-channel.error.d.ts","sourceRoot":"","sources":["../../../src/kernel/sales-channels/no-system-default-channel.error.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,MAAM,8BAA8B,CAAC;AAEzD;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,qBAAa,sBAAuB,SAAQ,SAAS;;CAUpD"}
@@ -0,0 +1,33 @@
1
+ import { ERROR_CODES } from '@endora-commerce/contracts';
2
+ import { HttpError } from '../../http/error-envelope.js';
3
+ /**
4
+ * The platform has no sales channel holding `system_default` (feature 072,
5
+ * D-47 / D-48).
6
+ *
7
+ * This is a **platform fault, not a caller error**, and it is unreachable on a
8
+ * booted deployment: the boot reconciler
9
+ * (`kernel/sales-channels/default-channel-reconciler.ts`) inserts or promotes a
10
+ * default on every serving path, a partial unique index forbids a second one,
11
+ * and `SalesChannelsService` refuses every delete, deactivate and `active:false`
12
+ * that would take the flag away. The only way to observe it is to read a
13
+ * channel before composition has run the reconciler.
14
+ *
15
+ * It exists so that state has **one** spelling. Before D-48 it had four — a
16
+ * `'default'` channel code where an id was wanted, a nil UUID, a `randomUUID()`
17
+ * persisted into an order, and a silent switch to the platform-wide settings
18
+ * tier — because `getSystemDefault()` returned `null` and every author had to
19
+ * invent a value for a branch that cannot be taken.
20
+ *
21
+ * 500 `INTERNAL` is deliberate and matches what the resolver middleware already
22
+ * answered on this condition: no request can be blamed for it and no client can
23
+ * retry into a fix. The one surface that *renders* the condition rather than
24
+ * failing on it is `/sales-channels` (D-51); every consumer propagates.
25
+ */
26
+ export class NoSystemDefaultChannel extends HttpError {
27
+ constructor() {
28
+ super(500, ERROR_CODES.INTERNAL, 'No sales channel holds the system-default flag; the boot-time default-channel ' +
29
+ 'reconciler has not run or could not repair the registry.');
30
+ this.name = 'NoSystemDefaultChannel';
31
+ }
32
+ }
33
+ //# sourceMappingURL=no-system-default-channel.error.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"no-system-default-channel.error.js","sourceRoot":"","sources":["../../../src/kernel/sales-channels/no-system-default-channel.error.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAC;AACzD,OAAO,EAAE,SAAS,EAAE,MAAM,8BAA8B,CAAC;AAEzD;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,MAAM,OAAO,sBAAuB,SAAQ,SAAS;IACnD;QACE,KAAK,CACH,GAAG,EACH,WAAW,CAAC,QAAQ,EACpB,gFAAgF;YAC9E,0DAA0D,CAC7D,CAAC;QACF,IAAI,CAAC,IAAI,GAAG,wBAAwB,CAAC;IACvC,CAAC;CACF"}
@@ -0,0 +1,72 @@
1
+ import type { SalesChannelMembershipPort } from '../ports/sales-channel.js';
2
+ /**
3
+ * The assortment gate the **product acquisition seams** owe (issue #259,
4
+ * Constitution XII).
5
+ *
6
+ * ## What was wrong
7
+ *
8
+ * Issue #227 taught every buyer-facing product path to ask
9
+ * `isProductVisibleTo(product, audience)`, and that predicate says in writing
10
+ * that it is *not* the channel answer — the channel is "a second filter every
11
+ * buyer-facing path owes on top of this one". The view side pays it: a listing
12
+ * page and a product detail both narrow to
13
+ * `sales_channel_products` before they answer. The **acquisition** side did
14
+ * not. A product published on one channel only was still reachable by id and by
15
+ * SKU through cart add, comparison add, a quote-request line, a saved list and
16
+ * a pasted quick-order SKU list — every one of them holding an identifier the
17
+ * caller supplied, and every one of them applying the audience filter and no
18
+ * channel test at all.
19
+ *
20
+ * ## Why this is not folded into `isProductVisibleTo`
21
+ *
22
+ * Owner ruling, 2026-08-21. The channel is a property of the **request**, not
23
+ * of the viewer's relationship to the product: `isProductVisibleTo(product,
24
+ * audience)` answers "may this audience see this product at all", and it is
25
+ * pure, synchronous and shared by two SQL restatements with derived parity
26
+ * tests. Folding an asynchronous membership read into it would merge two
27
+ * questions, change a published contract shape and rewrite every parity test to
28
+ * answer for a dimension neither SQL site has. The two filters stay separate
29
+ * and every seam applies both.
30
+ *
31
+ * ## `null` is a real answer, and it is not "no channel"
32
+ *
33
+ * The resolver middleware runs as an `onRequest` hook on every `/api/v1/*` path
34
+ * and falls back to the system-default channel, so **inside a request there is
35
+ * always a channel** — including an anonymous one, including an admin one. The
36
+ * scope slot is empty only where there is no request at all: a CLI entry point,
37
+ * a BullMQ worker, a seed, a fixture calling the service directly. There, the
38
+ * honest answer is that this acquisition is happening on no channel, so there
39
+ * is nothing to narrow against — and {@link productIdsInRequestChannel} says so
40
+ * with `null` rather than with an empty set or with a channel it made up.
41
+ *
42
+ * Narrowing against the system-default channel instead would be the fabrication
43
+ * D-47…D-51 drained under four spellings (`'default'`, the nil UUID, the empty
44
+ * string, `randomUUID()`): it would refuse an operator's own action because a
45
+ * channel nobody named happens not to publish the row. The return type is what
46
+ * keeps the two apart — `ReadonlySet` and `null` are different types, so a
47
+ * caller cannot mistake "the channel publishes none of these" for "there was no
48
+ * channel to ask about", which is the mistake an empty set invites. It is the
49
+ * same shape, and for the same reason, as `allowedIdsFor(): Promise<string[] |
50
+ * null>`.
51
+ *
52
+ * ## The read itself
53
+ *
54
+ * Through {@link SalesChannelMembershipPort.filterEntityIdsInChannel} — the
55
+ * sanctioned bridge accessor (Constitution XII), the same one
56
+ * `catalog.filterByChannel` narrows a listing page with. No statement against
57
+ * `sales_channel_products` is written here; `check:module-boundary`'s SQL
58
+ * predicate would be right to report one.
59
+ */
60
+ export declare function productIdsInRequestChannel(membership: SalesChannelMembershipPort, productIds: readonly string[]): Promise<ReadonlySet<string> | null>;
61
+ /**
62
+ * `true` when the request's channel does **not** publish `productId` — the
63
+ * single-product spelling of {@link productIdsInRequestChannel}, for the seams
64
+ * that acquire one product at a time.
65
+ *
66
+ * Reads as the refusal it guards (`if (await outOfRequestChannel(…)) throw`),
67
+ * which is what keeps the `null` arm from being written as a silent `true` at
68
+ * five call sites: outside a request there is no channel to be out of, so the
69
+ * answer is `false` and the seam proceeds on the audience filter alone.
70
+ */
71
+ export declare function outOfRequestChannel(membership: SalesChannelMembershipPort, productId: string): Promise<boolean>;
72
+ //# sourceMappingURL=request-channel-assortment.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"request-channel-assortment.d.ts","sourceRoot":"","sources":["../../../src/kernel/sales-channels/request-channel-assortment.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,0BAA0B,EAAE,MAAM,2BAA2B,CAAC;AAG5E;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAyDG;AACH,wBAAsB,0BAA0B,CAC9C,UAAU,EAAE,0BAA0B,EACtC,UAAU,EAAE,SAAS,MAAM,EAAE,GAC5B,OAAO,CAAC,WAAW,CAAC,MAAM,CAAC,GAAG,IAAI,CAAC,CAUrC;AAED;;;;;;;;;GASG;AACH,wBAAsB,mBAAmB,CACvC,UAAU,EAAE,0BAA0B,EACtC,SAAS,EAAE,MAAM,GAChB,OAAO,CAAC,OAAO,CAAC,CAGlB"}
@@ -0,0 +1,83 @@
1
+ import { currentSalesChannel } from './sales-channel-resolver.middleware.js';
2
+ /**
3
+ * The assortment gate the **product acquisition seams** owe (issue #259,
4
+ * Constitution XII).
5
+ *
6
+ * ## What was wrong
7
+ *
8
+ * Issue #227 taught every buyer-facing product path to ask
9
+ * `isProductVisibleTo(product, audience)`, and that predicate says in writing
10
+ * that it is *not* the channel answer — the channel is "a second filter every
11
+ * buyer-facing path owes on top of this one". The view side pays it: a listing
12
+ * page and a product detail both narrow to
13
+ * `sales_channel_products` before they answer. The **acquisition** side did
14
+ * not. A product published on one channel only was still reachable by id and by
15
+ * SKU through cart add, comparison add, a quote-request line, a saved list and
16
+ * a pasted quick-order SKU list — every one of them holding an identifier the
17
+ * caller supplied, and every one of them applying the audience filter and no
18
+ * channel test at all.
19
+ *
20
+ * ## Why this is not folded into `isProductVisibleTo`
21
+ *
22
+ * Owner ruling, 2026-08-21. The channel is a property of the **request**, not
23
+ * of the viewer's relationship to the product: `isProductVisibleTo(product,
24
+ * audience)` answers "may this audience see this product at all", and it is
25
+ * pure, synchronous and shared by two SQL restatements with derived parity
26
+ * tests. Folding an asynchronous membership read into it would merge two
27
+ * questions, change a published contract shape and rewrite every parity test to
28
+ * answer for a dimension neither SQL site has. The two filters stay separate
29
+ * and every seam applies both.
30
+ *
31
+ * ## `null` is a real answer, and it is not "no channel"
32
+ *
33
+ * The resolver middleware runs as an `onRequest` hook on every `/api/v1/*` path
34
+ * and falls back to the system-default channel, so **inside a request there is
35
+ * always a channel** — including an anonymous one, including an admin one. The
36
+ * scope slot is empty only where there is no request at all: a CLI entry point,
37
+ * a BullMQ worker, a seed, a fixture calling the service directly. There, the
38
+ * honest answer is that this acquisition is happening on no channel, so there
39
+ * is nothing to narrow against — and {@link productIdsInRequestChannel} says so
40
+ * with `null` rather than with an empty set or with a channel it made up.
41
+ *
42
+ * Narrowing against the system-default channel instead would be the fabrication
43
+ * D-47…D-51 drained under four spellings (`'default'`, the nil UUID, the empty
44
+ * string, `randomUUID()`): it would refuse an operator's own action because a
45
+ * channel nobody named happens not to publish the row. The return type is what
46
+ * keeps the two apart — `ReadonlySet` and `null` are different types, so a
47
+ * caller cannot mistake "the channel publishes none of these" for "there was no
48
+ * channel to ask about", which is the mistake an empty set invites. It is the
49
+ * same shape, and for the same reason, as `allowedIdsFor(): Promise<string[] |
50
+ * null>`.
51
+ *
52
+ * ## The read itself
53
+ *
54
+ * Through {@link SalesChannelMembershipPort.filterEntityIdsInChannel} — the
55
+ * sanctioned bridge accessor (Constitution XII), the same one
56
+ * `catalog.filterByChannel` narrows a listing page with. No statement against
57
+ * `sales_channel_products` is written here; `check:module-boundary`'s SQL
58
+ * predicate would be right to report one.
59
+ */
60
+ export async function productIdsInRequestChannel(membership, productIds) {
61
+ const channel = currentSalesChannel();
62
+ if (!channel)
63
+ return null;
64
+ if (productIds.length === 0)
65
+ return new Set();
66
+ const published = await membership.filterEntityIdsInChannel(channel.id, 'product', Array.from(new Set(productIds)));
67
+ return new Set(published);
68
+ }
69
+ /**
70
+ * `true` when the request's channel does **not** publish `productId` — the
71
+ * single-product spelling of {@link productIdsInRequestChannel}, for the seams
72
+ * that acquire one product at a time.
73
+ *
74
+ * Reads as the refusal it guards (`if (await outOfRequestChannel(…)) throw`),
75
+ * which is what keeps the `null` arm from being written as a silent `true` at
76
+ * five call sites: outside a request there is no channel to be out of, so the
77
+ * answer is `false` and the seam proceeds on the audience filter alone.
78
+ */
79
+ export async function outOfRequestChannel(membership, productId) {
80
+ const published = await productIdsInRequestChannel(membership, [productId]);
81
+ return published !== null && !published.has(productId);
82
+ }
83
+ //# sourceMappingURL=request-channel-assortment.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"request-channel-assortment.js","sourceRoot":"","sources":["../../../src/kernel/sales-channels/request-channel-assortment.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,mBAAmB,EAAE,MAAM,wCAAwC,CAAC;AAE7E;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAyDG;AACH,MAAM,CAAC,KAAK,UAAU,0BAA0B,CAC9C,UAAsC,EACtC,UAA6B;IAE7B,MAAM,OAAO,GAAG,mBAAmB,EAAE,CAAC;IACtC,IAAI,CAAC,OAAO;QAAE,OAAO,IAAI,CAAC;IAC1B,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,IAAI,GAAG,EAAU,CAAC;IACtD,MAAM,SAAS,GAAG,MAAM,UAAU,CAAC,wBAAwB,CACzD,OAAO,CAAC,EAAE,EACV,SAAS,EACT,KAAK,CAAC,IAAI,CAAC,IAAI,GAAG,CAAC,UAAU,CAAC,CAAC,CAChC,CAAC;IACF,OAAO,IAAI,GAAG,CAAC,SAAS,CAAC,CAAC;AAC5B,CAAC;AAED;;;;;;;;;GASG;AACH,MAAM,CAAC,KAAK,UAAU,mBAAmB,CACvC,UAAsC,EACtC,SAAiB;IAEjB,MAAM,SAAS,GAAG,MAAM,0BAA0B,CAAC,UAAU,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC;IAC5E,OAAO,SAAS,KAAK,IAAI,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;AACzD,CAAC"}