@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,343 @@
1
+ import { ModuleSettingsManifestSchema, valueSchemaForType, } from '@endora-commerce/contracts';
2
+ import { SettingGroup } from './setting-group.entity.js';
3
+ import { Setting } from './setting.entity.js';
4
+ import { SalesChannel } from '../sales-channels/sales-channel.entity.js';
5
+ /**
6
+ * Manifest reconciler — feature 004 / US1 (T023).
7
+ *
8
+ * Walks a list of {@link ModuleSettingsManifest}s and ensures the database
9
+ * contains every declared group and setting. Idempotent: re-running adds only
10
+ * missing rows; never overwrites administrator-chosen `setting_values`. Boot
11
+ * sync NEVER deletes — only `modules:uninstall` removes entries (R-1).
12
+ *
13
+ * Errors:
14
+ * - {@link ManifestSchemaInvalid} — Zod parse failed.
15
+ * - {@link SettingCodeConflict} / {@link GroupCodeConflict} — code owned by
16
+ * a different module.
17
+ * - {@link BreakingChangeRejected} — `valueType` or `defaultValue` changed
18
+ * for an existing code (without `--force`).
19
+ */
20
+ export class ManifestSchemaInvalid extends Error {
21
+ issues;
22
+ name = 'ManifestSchemaInvalid';
23
+ constructor(issues) {
24
+ super('Module settings manifest failed Zod validation.');
25
+ this.issues = issues;
26
+ }
27
+ }
28
+ export class SettingCodeConflict extends Error {
29
+ code;
30
+ existingOwnerModule;
31
+ attemptedOwnerModule;
32
+ name = 'SettingCodeConflict';
33
+ constructor(code, existingOwnerModule, attemptedOwnerModule) {
34
+ super(`Setting "${code}" is already owned by module "${existingOwnerModule}"; ` +
35
+ `module "${attemptedOwnerModule}" cannot redeclare it.`);
36
+ this.code = code;
37
+ this.existingOwnerModule = existingOwnerModule;
38
+ this.attemptedOwnerModule = attemptedOwnerModule;
39
+ }
40
+ }
41
+ export class GroupCodeConflict extends Error {
42
+ code;
43
+ existingOwnerModule;
44
+ attemptedOwnerModule;
45
+ name = 'GroupCodeConflict';
46
+ constructor(code, existingOwnerModule, attemptedOwnerModule) {
47
+ super(`Setting group "${code}" is already owned by module "${existingOwnerModule}"; ` +
48
+ `module "${attemptedOwnerModule}" cannot redeclare it.`);
49
+ this.code = code;
50
+ this.existingOwnerModule = existingOwnerModule;
51
+ this.attemptedOwnerModule = attemptedOwnerModule;
52
+ }
53
+ }
54
+ export class BreakingChangeRejected extends Error {
55
+ settingCode;
56
+ field;
57
+ previous;
58
+ attempted;
59
+ name = 'BreakingChangeRejected';
60
+ constructor(settingCode, field, previous, attempted) {
61
+ super(`Setting "${settingCode}" cannot change ${field} from ${JSON.stringify(previous)} ` +
62
+ `to ${JSON.stringify(attempted)} without --force; existing per-channel values may ` +
63
+ 'become invalid.');
64
+ this.settingCode = settingCode;
65
+ this.field = field;
66
+ this.previous = previous;
67
+ this.attempted = attempted;
68
+ }
69
+ }
70
+ async function loadChannelLookup(em) {
71
+ const channels = await em.find(SalesChannel, {});
72
+ return { byCode: new Map(channels.map((c) => [c.code, c])) };
73
+ }
74
+ function isJsonEqual(a, b) {
75
+ // jsonb columns deserialize to plain JS values; this is sufficient for the
76
+ // scalar / array / object payloads we accept as setting values.
77
+ return JSON.stringify(a) === JSON.stringify(b);
78
+ }
79
+ export class ManifestReconciler {
80
+ em;
81
+ constructor(em) {
82
+ this.em = em;
83
+ }
84
+ /**
85
+ * Apply the supplied manifests to the database.
86
+ *
87
+ * Within one apply() the manifests are processed in order; later manifests
88
+ * see earlier ones' groups, but ownership conflicts ALWAYS abort the whole
89
+ * batch — partial commits are rolled back via the surrounding transaction.
90
+ */
91
+ async apply(manifests, options = {}) {
92
+ // command-coverage-ignore: idempotent lifecycle reconciler/seed — a system-
93
+ // invariant repair, not an operator-initiated audited write.
94
+ // (1) Validate every manifest before touching the DB.
95
+ const parsed = manifests.map((m) => {
96
+ const result = ModuleSettingsManifestSchema.safeParse(m);
97
+ if (!result.success)
98
+ throw new ManifestSchemaInvalid(result.error.issues);
99
+ return result.data;
100
+ });
101
+ // (1a) Validate each setting's defaultValue against its declared valueType.
102
+ for (const m of parsed) {
103
+ for (const s of m.settings) {
104
+ const schema = valueSchemaForType(s.valueType);
105
+ const r = schema.safeParse(s.defaultValue);
106
+ if (!r.success) {
107
+ throw new ManifestSchemaInvalid({
108
+ moduleCode: m.moduleCode,
109
+ settingCode: s.code,
110
+ field: 'defaultValue',
111
+ issues: r.error.issues,
112
+ });
113
+ }
114
+ }
115
+ }
116
+ const channels = await loadChannelLookup(this.em);
117
+ const perModule = [];
118
+ let totalAddedGroups = 0;
119
+ let totalAddedSettings = 0;
120
+ for (const manifest of parsed) {
121
+ const result = await this.applyOne(manifest, channels, options);
122
+ perModule.push(result);
123
+ totalAddedGroups += result.addedGroups;
124
+ totalAddedSettings += result.addedSettings;
125
+ }
126
+ if (!options.dryRun) {
127
+ await this.em.flush();
128
+ }
129
+ return { perModule, totalAddedGroups, totalAddedSettings };
130
+ }
131
+ async applyOne(manifest, channels, options) {
132
+ // command-coverage-ignore: idempotent boot reconcile of one module's settings
133
+ // manifest — a system-invariant repair, not an operator-initiated audited write.
134
+ const moduleCode = manifest.moduleCode;
135
+ let addedGroups = 0;
136
+ let updatedGroups = 0;
137
+ let addedSettings = 0;
138
+ let updatedSettings = 0;
139
+ // Groups first.
140
+ for (const entry of manifest.groups) {
141
+ const existing = await this.em.findOne(SettingGroup, { code: entry.code }, { populate: ['salesChannels'] });
142
+ if (existing) {
143
+ if (existing.ownerModule !== moduleCode) {
144
+ throw new GroupCodeConflict(entry.code, existing.ownerModule, moduleCode);
145
+ }
146
+ let changed = false;
147
+ if (existing.name !== entry.name) {
148
+ existing.name = entry.name;
149
+ changed = true;
150
+ }
151
+ // Additive scope reconciliation only (R-1): never remove existing rows.
152
+ if (entry.salesChannelCodes && entry.salesChannelCodes.length > 0) {
153
+ for (const code of entry.salesChannelCodes) {
154
+ const channel = channels.byCode.get(code);
155
+ if (!channel)
156
+ continue; // tolerate absent channels — logged at WARN by caller
157
+ if (!existing.salesChannels.getItems().some((c) => c.id === channel.id)) {
158
+ existing.salesChannels.add(channel);
159
+ changed = true;
160
+ }
161
+ }
162
+ }
163
+ if (changed)
164
+ updatedGroups += 1;
165
+ }
166
+ else {
167
+ const group = this.em.create(SettingGroup, {
168
+ code: entry.code,
169
+ name: entry.name,
170
+ ownerModule: moduleCode,
171
+ isSystemProtected: entry.isSystemProtected ?? false,
172
+ });
173
+ if (entry.salesChannelCodes && entry.salesChannelCodes.length > 0) {
174
+ for (const code of entry.salesChannelCodes) {
175
+ const channel = channels.byCode.get(code);
176
+ if (channel)
177
+ group.salesChannels.add(channel);
178
+ }
179
+ }
180
+ this.em.persist(group);
181
+ addedGroups += 1;
182
+ }
183
+ }
184
+ // Settings second (so groupCode lookups can resolve).
185
+ for (const entry of manifest.settings) {
186
+ const groupCode = entry.groupCode ?? 'general';
187
+ const group = await this.em.findOne(SettingGroup, { code: groupCode });
188
+ if (!group) {
189
+ throw new ManifestSchemaInvalid({
190
+ moduleCode,
191
+ settingCode: entry.code,
192
+ field: 'groupCode',
193
+ issue: `Group "${groupCode}" is not declared by any manifest in this batch and is not pre-existing in the database.`,
194
+ });
195
+ }
196
+ const existing = await this.em.findOne(Setting, { code: entry.code }, { populate: ['salesChannels', 'group'] });
197
+ if (existing) {
198
+ if (existing.ownerModule !== moduleCode) {
199
+ throw new SettingCodeConflict(entry.code, existing.ownerModule, moduleCode);
200
+ }
201
+ const valueType = entry.valueType;
202
+ // `string` → `secret` is the ONE sanctioned non-breaking valueType
203
+ // upgrade (feature 043): the write schema is unchanged (plain
204
+ // string), stored plaintext values keep resolving through the
205
+ // codec's legacy passthrough and are re-encrypted on the next
206
+ // write. Auto-applying it here lets pre-043 rows (or test
207
+ // databases reseeded out of band) self-heal at boot instead of
208
+ // failing the whole reconciliation.
209
+ const isSanctionedSecretUpgrade = existing.valueType === 'string' && valueType === 'secret';
210
+ if (isSanctionedSecretUpgrade) {
211
+ existing.valueType = valueType;
212
+ }
213
+ else if (existing.valueType !== valueType && !options.force) {
214
+ throw new BreakingChangeRejected(entry.code, 'valueType', existing.valueType, valueType);
215
+ }
216
+ // A **declared** default migration (feature 078, D-95.3 move 4). A
217
+ // `defaultValue` change is breaking because it silently alters
218
+ // behaviour for every deployment that never overrode the value — but a
219
+ // module that names the exact prior value it supersedes has said which
220
+ // change is intended and how far it reaches. A stored default equal to
221
+ // one of those is moved forward; anything else, including an operator's
222
+ // own choice that happens to differ, still throws. Same shape and same
223
+ // self-healing argument as `isSanctionedSecretUpgrade` above; without
224
+ // it a shipped default can never change, because no composition root
225
+ // passes `force` at boot.
226
+ const isDeclaredDefaultMigration = !isJsonEqual(existing.defaultValue, entry.defaultValue) &&
227
+ (entry.previousDefaultValues ?? []).some((previous) => isJsonEqual(existing.defaultValue, previous));
228
+ if (!isJsonEqual(existing.defaultValue, entry.defaultValue) &&
229
+ !isDeclaredDefaultMigration &&
230
+ !options.force) {
231
+ throw new BreakingChangeRejected(entry.code, 'defaultValue', existing.defaultValue, entry.defaultValue);
232
+ }
233
+ let changed = false;
234
+ if (isDeclaredDefaultMigration) {
235
+ existing.defaultValue = entry.defaultValue;
236
+ changed = true;
237
+ }
238
+ if (existing.name !== entry.name) {
239
+ existing.name = entry.name;
240
+ changed = true;
241
+ }
242
+ const desc = entry.description ?? null;
243
+ if ((existing.description ?? null) !== desc) {
244
+ existing.description = desc;
245
+ changed = true;
246
+ }
247
+ if (existing.group.id !== group.id) {
248
+ existing.group = group;
249
+ changed = true;
250
+ }
251
+ // enumOptions is manifest-driven config (not admin data): keep it in
252
+ // sync with the manifest on every reconciliation.
253
+ const nextEnumOptions = entry.enumOptions ?? null;
254
+ if (!isJsonEqual(existing.enumOptions ?? null, nextEnumOptions)) {
255
+ existing.enumOptions = nextEnumOptions;
256
+ changed = true;
257
+ }
258
+ // configurationType is manifest-driven config (feature 058) — keep it
259
+ // in sync with the manifest on every reconciliation.
260
+ const nextConfigurationType = entry.configurationType ?? null;
261
+ if ((existing.configurationType ?? null) !== nextConfigurationType) {
262
+ existing.configurationType = nextConfigurationType;
263
+ changed = true;
264
+ }
265
+ // hidden is manifest-driven config — keep it in sync on every run.
266
+ const nextHidden = entry.hidden ?? false;
267
+ if (existing.hidden !== nextHidden) {
268
+ existing.hidden = nextHidden;
269
+ changed = true;
270
+ }
271
+ if (options.force) {
272
+ if (existing.valueType !== valueType) {
273
+ existing.valueType = valueType;
274
+ changed = true;
275
+ }
276
+ if (!isJsonEqual(existing.defaultValue, entry.defaultValue)) {
277
+ existing.defaultValue = entry.defaultValue;
278
+ changed = true;
279
+ }
280
+ }
281
+ // Additive scope reconciliation.
282
+ if (entry.salesChannelCodes && entry.salesChannelCodes.length > 0) {
283
+ for (const code of entry.salesChannelCodes) {
284
+ const channel = channels.byCode.get(code);
285
+ if (!channel)
286
+ continue;
287
+ if (!existing.salesChannels.getItems().some((c) => c.id === channel.id)) {
288
+ existing.salesChannels.add(channel);
289
+ changed = true;
290
+ }
291
+ }
292
+ }
293
+ if (changed)
294
+ updatedSettings += 1;
295
+ }
296
+ else {
297
+ const setting = this.em.create(Setting, {
298
+ code: entry.code,
299
+ name: entry.name,
300
+ group,
301
+ valueType: entry.valueType,
302
+ defaultValue: entry.defaultValue,
303
+ ownerModule: moduleCode,
304
+ description: entry.description ?? null,
305
+ enumOptions: entry.enumOptions ?? null,
306
+ configurationType: entry.configurationType ?? null,
307
+ hidden: entry.hidden ?? false,
308
+ });
309
+ if (entry.salesChannelCodes && entry.salesChannelCodes.length > 0) {
310
+ for (const code of entry.salesChannelCodes) {
311
+ const channel = channels.byCode.get(code);
312
+ if (channel)
313
+ setting.salesChannels.add(channel);
314
+ }
315
+ }
316
+ this.em.persist(setting);
317
+ addedSettings += 1;
318
+ }
319
+ }
320
+ // Detect orphans for warning purposes — rows owned by this module that the
321
+ // current manifest no longer claims. The reconciler does NOT remove them.
322
+ const ownedSettings = await this.em.find(Setting, { ownerModule: moduleCode });
323
+ const declaredSettingCodes = new Set(manifest.settings.map((s) => s.code));
324
+ const orphanSettings = ownedSettings
325
+ .filter((s) => !declaredSettingCodes.has(s.code))
326
+ .map((s) => s.code);
327
+ const ownedGroups = await this.em.find(SettingGroup, { ownerModule: moduleCode });
328
+ const declaredGroupCodes = new Set(manifest.groups.map((g) => g.code));
329
+ const orphanGroups = ownedGroups
330
+ .filter((g) => !declaredGroupCodes.has(g.code))
331
+ .map((g) => g.code);
332
+ return {
333
+ moduleCode,
334
+ addedGroups,
335
+ updatedGroups,
336
+ addedSettings,
337
+ updatedSettings,
338
+ orphanGroups,
339
+ orphanSettings,
340
+ };
341
+ }
342
+ }
343
+ //# sourceMappingURL=manifest-reconciler.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"manifest-reconciler.js","sourceRoot":"","sources":["../../../src/kernel/settings/manifest-reconciler.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,52 @@
1
+ /**
2
+ * Secret-value codec for the Settings `secret` value type (feature 043,
3
+ * FR-021 / research §R10).
4
+ *
5
+ * Written values are AES-256-GCM-encrypted into a JSON envelope stored in the
6
+ * existing JSONB value columns; the 32-byte key comes from the
7
+ * `SETTINGS_SECRET_ENCRYPTION_KEY` env var (base64), mirroring the MFA
8
+ * module's key format. The codec is deliberately settings-local: importing
9
+ * mfa's module-private SecretCipher would couple the two modules
10
+ * (Principle I), and ~50 LOC of duplication is the constitution-preferred
11
+ * trade (Principle IV).
12
+ *
13
+ * Legacy tolerance: values stored as plain strings (pre-043 secrets such as
14
+ * `search.llm.embedder_api_key`) are returned as-is on read and re-encrypted
15
+ * on the next write. There is NO plaintext fallback on write — encrypting
16
+ * without a key throws {@link SecretKeyMissing}.
17
+ */
18
+ declare const ALGORITHM = "aes-256-gcm";
19
+ export interface SecretEnvelope {
20
+ v: 1;
21
+ alg: typeof ALGORITHM;
22
+ iv: string;
23
+ ct: string;
24
+ tag: string;
25
+ }
26
+ export declare class SecretKeyMissing extends Error {
27
+ readonly name = "SecretKeyMissing";
28
+ readonly code: "SETTING_SECRET_KEY_MISSING";
29
+ constructor();
30
+ }
31
+ /**
32
+ * The encryption key is present but not a valid AES-256 key (must decode to
33
+ * exactly 32 bytes). Carries the same error code as {@link SecretKeyMissing} so
34
+ * callers surface a clear 5xx instead of a bare "Internal server error".
35
+ */
36
+ export declare class SecretKeyInvalid extends Error {
37
+ readonly name = "SecretKeyInvalid";
38
+ readonly code: "SETTING_SECRET_KEY_MISSING";
39
+ constructor(actualBytes: number);
40
+ }
41
+ export declare function isSecretEnvelope(value: unknown): value is SecretEnvelope;
42
+ export declare function encryptSecretValue(plaintext: string, keyBase64: string | undefined): SecretEnvelope;
43
+ /**
44
+ * Resolve a stored secret value to its plaintext. Plain strings are legacy
45
+ * pre-encryption values and pass through unchanged; envelopes require the key
46
+ * and an intact auth tag.
47
+ */
48
+ export declare function decryptSecretValue(stored: unknown, keyBase64: string | undefined): string;
49
+ /** A secret counts as "set" when it is an envelope or a non-empty legacy string. */
50
+ export declare function secretValueIsSet(stored: unknown): boolean;
51
+ export {};
52
+ //# sourceMappingURL=secret-value-codec.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"secret-value-codec.d.ts","sourceRoot":"","sources":["../../../src/kernel/settings/secret-value-codec.ts"],"names":[],"mappings":"AAEA;;;;;;;;;;;;;;;;GAgBG;AAEH,QAAA,MAAM,SAAS,gBAAgB,CAAC;AAIhC,MAAM,WAAW,cAAc;IAC7B,CAAC,EAAE,CAAC,CAAC;IACL,GAAG,EAAE,OAAO,SAAS,CAAC;IACtB,EAAE,EAAE,MAAM,CAAC;IACX,EAAE,EAAE,MAAM,CAAC;IACX,GAAG,EAAE,MAAM,CAAC;CACb;AAED,qBAAa,gBAAiB,SAAQ,KAAK;IACzC,SAAkB,IAAI,sBAAsB;IAC5C,QAAQ,CAAC,IAAI,EAAG,4BAA4B,CAAU;;CAMvD;AAED;;;;GAIG;AACH,qBAAa,gBAAiB,SAAQ,KAAK;IACzC,SAAkB,IAAI,sBAAsB;IAC5C,QAAQ,CAAC,IAAI,EAAG,4BAA4B,CAAU;gBAC1C,WAAW,EAAE,MAAM;CAMhC;AAUD,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,cAAc,CAUxE;AAED,wBAAgB,kBAAkB,CAChC,SAAS,EAAE,MAAM,EACjB,SAAS,EAAE,MAAM,GAAG,SAAS,GAC5B,cAAc,CAahB;AAED;;;;GAIG;AACH,wBAAgB,kBAAkB,CAChC,MAAM,EAAE,OAAO,EACf,SAAS,EAAE,MAAM,GAAG,SAAS,GAC5B,MAAM,CAcR;AAED,oFAAoF;AACpF,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,OAAO,GAAG,OAAO,CAGzD"}
@@ -0,0 +1,102 @@
1
+ import { createCipheriv, createDecipheriv, randomBytes } from 'crypto';
2
+ /**
3
+ * Secret-value codec for the Settings `secret` value type (feature 043,
4
+ * FR-021 / research §R10).
5
+ *
6
+ * Written values are AES-256-GCM-encrypted into a JSON envelope stored in the
7
+ * existing JSONB value columns; the 32-byte key comes from the
8
+ * `SETTINGS_SECRET_ENCRYPTION_KEY` env var (base64), mirroring the MFA
9
+ * module's key format. The codec is deliberately settings-local: importing
10
+ * mfa's module-private SecretCipher would couple the two modules
11
+ * (Principle I), and ~50 LOC of duplication is the constitution-preferred
12
+ * trade (Principle IV).
13
+ *
14
+ * Legacy tolerance: values stored as plain strings (pre-043 secrets such as
15
+ * `search.llm.embedder_api_key`) are returned as-is on read and re-encrypted
16
+ * on the next write. There is NO plaintext fallback on write — encrypting
17
+ * without a key throws {@link SecretKeyMissing}.
18
+ */
19
+ const ALGORITHM = 'aes-256-gcm';
20
+ const IV_LENGTH = 12;
21
+ const KEY_LENGTH = 32;
22
+ export class SecretKeyMissing extends Error {
23
+ name = 'SecretKeyMissing';
24
+ code = 'SETTING_SECRET_KEY_MISSING';
25
+ constructor() {
26
+ super('SETTINGS_SECRET_ENCRYPTION_KEY is not configured — secret settings cannot be processed.');
27
+ }
28
+ }
29
+ /**
30
+ * The encryption key is present but not a valid AES-256 key (must decode to
31
+ * exactly 32 bytes). Carries the same error code as {@link SecretKeyMissing} so
32
+ * callers surface a clear 5xx instead of a bare "Internal server error".
33
+ */
34
+ export class SecretKeyInvalid extends Error {
35
+ name = 'SecretKeyInvalid';
36
+ code = 'SETTING_SECRET_KEY_MISSING';
37
+ constructor(actualBytes) {
38
+ super(`SETTINGS_SECRET_ENCRYPTION_KEY is misconfigured — it must decode to ${KEY_LENGTH} bytes ` +
39
+ `(got ${actualBytes}). Set it to 32 random bytes, base64-encoded (e.g. \`openssl rand -base64 32\`).`);
40
+ }
41
+ }
42
+ function keyBuffer(keyBase64) {
43
+ const key = Buffer.from(keyBase64, 'base64');
44
+ if (key.length !== KEY_LENGTH) {
45
+ throw new SecretKeyInvalid(key.length);
46
+ }
47
+ return key;
48
+ }
49
+ export function isSecretEnvelope(value) {
50
+ if (typeof value !== 'object' || value === null)
51
+ return false;
52
+ const v = value;
53
+ return (v['v'] === 1 &&
54
+ v['alg'] === ALGORITHM &&
55
+ typeof v['iv'] === 'string' &&
56
+ typeof v['ct'] === 'string' &&
57
+ typeof v['tag'] === 'string');
58
+ }
59
+ export function encryptSecretValue(plaintext, keyBase64) {
60
+ if (!keyBase64)
61
+ throw new SecretKeyMissing();
62
+ const key = keyBuffer(keyBase64);
63
+ const iv = randomBytes(IV_LENGTH);
64
+ const cipher = createCipheriv(ALGORITHM, key, iv);
65
+ const ct = Buffer.concat([cipher.update(plaintext, 'utf8'), cipher.final()]);
66
+ return {
67
+ v: 1,
68
+ alg: ALGORITHM,
69
+ iv: iv.toString('base64'),
70
+ ct: ct.toString('base64'),
71
+ tag: cipher.getAuthTag().toString('base64'),
72
+ };
73
+ }
74
+ /**
75
+ * Resolve a stored secret value to its plaintext. Plain strings are legacy
76
+ * pre-encryption values and pass through unchanged; envelopes require the key
77
+ * and an intact auth tag.
78
+ */
79
+ export function decryptSecretValue(stored, keyBase64) {
80
+ if (typeof stored === 'string')
81
+ return stored;
82
+ if (!isSecretEnvelope(stored)) {
83
+ throw new Error('Stored secret value is neither a string nor a v1 secret envelope.');
84
+ }
85
+ if (!keyBase64)
86
+ throw new SecretKeyMissing();
87
+ const key = keyBuffer(keyBase64);
88
+ const decipher = createDecipheriv(ALGORITHM, key, Buffer.from(stored.iv, 'base64'));
89
+ decipher.setAuthTag(Buffer.from(stored.tag, 'base64'));
90
+ const plaintext = Buffer.concat([
91
+ decipher.update(Buffer.from(stored.ct, 'base64')),
92
+ decipher.final(),
93
+ ]);
94
+ return plaintext.toString('utf8');
95
+ }
96
+ /** A secret counts as "set" when it is an envelope or a non-empty legacy string. */
97
+ export function secretValueIsSet(stored) {
98
+ if (isSecretEnvelope(stored))
99
+ return true;
100
+ return typeof stored === 'string' && stored.length > 0;
101
+ }
102
+ //# sourceMappingURL=secret-value-codec.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"secret-value-codec.js","sourceRoot":"","sources":["../../../src/kernel/settings/secret-value-codec.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,25 @@
1
+ import { Collection, OptionalProps } from '@mikro-orm/core';
2
+ import { SalesChannel } from '../sales-channels/sales-channel.entity.js';
3
+ /**
4
+ * SettingGroup — feature 004 / data-model.md.
5
+ *
6
+ * Logical section under which Settings are listed in Admin UI. The built-in
7
+ * `general` group has `isSystemProtected = true` and is rejected by the
8
+ * service layer when an operator tries to delete it.
9
+ */
10
+ export declare class SettingGroup {
11
+ [OptionalProps]?: 'id' | 'createdAt' | 'updatedAt' | 'isSystemProtected';
12
+ id: string;
13
+ code: string;
14
+ name: string;
15
+ isSystemProtected: boolean;
16
+ ownerModule: string;
17
+ /**
18
+ * Sales-channel scope. Empty collection ⇒ "applies to all sales channels"
19
+ * (FR-004 / R-5). Backed by the `setting_group_sales_channels` join table.
20
+ */
21
+ salesChannels: Collection<SalesChannel, object>;
22
+ createdAt: Date;
23
+ updatedAt: Date;
24
+ }
25
+ //# sourceMappingURL=setting-group.entity.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"setting-group.entity.d.ts","sourceRoot":"","sources":["../../../src/kernel/settings/setting-group.entity.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,UAAU,EAIV,aAAa,EAId,MAAM,iBAAiB,CAAC;AAGzB,OAAO,EAAE,YAAY,EAAE,MAAM,2CAA2C,CAAC;AAEzE;;;;;;GAMG;AACH,qBAEa,YAAY;IACvB,CAAC,aAAa,CAAC,CAAC,EAAE,IAAI,GAAG,WAAW,GAAG,WAAW,GAAG,mBAAmB,CAAC;IAGzE,EAAE,EAAE,MAAM,CAAgB;IAI1B,IAAI,EAAG,MAAM,CAAC;IAGd,IAAI,EAAG,MAAM,CAAC;IAGd,iBAAiB,EAAE,OAAO,CAAS;IAInC,WAAW,EAAG,MAAM,CAAC;IAErB;;;OAGG;IAMH,aAAa,mCAAsC;IAGnD,SAAS,EAAE,IAAI,CAAc;IAG7B,SAAS,EAAE,IAAI,CAAc;CAC9B"}
@@ -0,0 +1,79 @@
1
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
2
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
3
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
4
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
5
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
6
+ };
7
+ var __metadata = (this && this.__metadata) || function (k, v) {
8
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
9
+ };
10
+ import { Collection, Entity, Index, ManyToMany, OptionalProps, PrimaryKey, Property, Unique, } from '@mikro-orm/core';
11
+ import { GlobalEntity } from '../../tenancy/org-scoped.decorator.js';
12
+ import { randomUUID } from 'crypto';
13
+ import { SalesChannel } from '../sales-channels/sales-channel.entity.js';
14
+ /**
15
+ * SettingGroup — feature 004 / data-model.md.
16
+ *
17
+ * Logical section under which Settings are listed in Admin UI. The built-in
18
+ * `general` group has `isSystemProtected = true` and is rejected by the
19
+ * service layer when an operator tries to delete it.
20
+ */
21
+ let SettingGroup = class SettingGroup {
22
+ [OptionalProps];
23
+ id = randomUUID();
24
+ code;
25
+ name;
26
+ isSystemProtected = false;
27
+ ownerModule;
28
+ /**
29
+ * Sales-channel scope. Empty collection ⇒ "applies to all sales channels"
30
+ * (FR-004 / R-5). Backed by the `setting_group_sales_channels` join table.
31
+ */
32
+ salesChannels = new Collection(this);
33
+ createdAt = new Date();
34
+ updatedAt = new Date();
35
+ };
36
+ __decorate([
37
+ PrimaryKey({ type: 'uuid' }),
38
+ __metadata("design:type", String)
39
+ ], SettingGroup.prototype, "id", void 0);
40
+ __decorate([
41
+ Property({ type: 'string', length: 120 }),
42
+ Unique(),
43
+ __metadata("design:type", String)
44
+ ], SettingGroup.prototype, "code", void 0);
45
+ __decorate([
46
+ Property({ type: 'string', length: 200 }),
47
+ __metadata("design:type", String)
48
+ ], SettingGroup.prototype, "name", void 0);
49
+ __decorate([
50
+ Property({ type: 'boolean', fieldName: 'is_system_protected' }),
51
+ __metadata("design:type", Boolean)
52
+ ], SettingGroup.prototype, "isSystemProtected", void 0);
53
+ __decorate([
54
+ Property({ type: 'string', length: 120, fieldName: 'owner_module' }),
55
+ Index(),
56
+ __metadata("design:type", String)
57
+ ], SettingGroup.prototype, "ownerModule", void 0);
58
+ __decorate([
59
+ ManyToMany(() => SalesChannel, undefined, {
60
+ pivotTable: 'setting_group_sales_channels',
61
+ joinColumn: 'setting_group_id',
62
+ inverseJoinColumn: 'sales_channel_id',
63
+ }),
64
+ __metadata("design:type", Object)
65
+ ], SettingGroup.prototype, "salesChannels", void 0);
66
+ __decorate([
67
+ Property({ type: 'datetime', onCreate: () => new Date(), fieldName: 'created_at' }),
68
+ __metadata("design:type", Date)
69
+ ], SettingGroup.prototype, "createdAt", void 0);
70
+ __decorate([
71
+ Property({ type: 'datetime', onUpdate: () => new Date(), fieldName: 'updated_at' }),
72
+ __metadata("design:type", Date)
73
+ ], SettingGroup.prototype, "updatedAt", void 0);
74
+ SettingGroup = __decorate([
75
+ GlobalEntity(),
76
+ Entity({ tableName: 'setting_groups' })
77
+ ], SettingGroup);
78
+ export { SettingGroup };
79
+ //# sourceMappingURL=setting-group.entity.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"setting-group.entity.js","sourceRoot":"","sources":["../../../src/kernel/settings/setting-group.entity.ts"],"names":[],"mappings":";;;;;;;;;AAAA,OAAO,EACL,UAAU,EACV,MAAM,EACN,KAAK,EACL,UAAU,EACV,aAAa,EACb,UAAU,EACV,QAAQ,EACR,MAAM,GACP,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAAE,YAAY,EAAE,MAAM,uCAAuC,CAAC;AACrE,OAAO,EAAE,UAAU,EAAE,MAAM,QAAQ,CAAC;AACpC,OAAO,EAAE,YAAY,EAAE,MAAM,2CAA2C,CAAC;AAEzE;;;;;;GAMG;AAGI,IAAM,YAAY,GAAlB,MAAM,YAAY;IACvB,CAAC,aAAa,CAAC,CAA0D;IAGzE,EAAE,GAAW,UAAU,EAAE,CAAC;IAI1B,IAAI,CAAU;IAGd,IAAI,CAAU;IAGd,iBAAiB,GAAY,KAAK,CAAC;IAInC,WAAW,CAAU;IAErB;;;OAGG;IAMH,aAAa,GAAG,IAAI,UAAU,CAAe,IAAI,CAAC,CAAC;IAGnD,SAAS,GAAS,IAAI,IAAI,EAAE,CAAC;IAG7B,SAAS,GAAS,IAAI,IAAI,EAAE,CAAC;CAC9B,CAAA;AAhCC;IADC,UAAU,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;;wCACH;AAI1B;IAFC,QAAQ,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC;IACzC,MAAM,EAAE;;0CACK;AAGd;IADC,QAAQ,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC;;0CAC5B;AAGd;IADC,QAAQ,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,SAAS,EAAE,qBAAqB,EAAE,CAAC;;uDAC7B;AAInC;IAFC,QAAQ,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,GAAG,EAAE,SAAS,EAAE,cAAc,EAAE,CAAC;IACpE,KAAK,EAAE;;iDACa;AAWrB;IALC,UAAU,CAAC,GAAG,EAAE,CAAC,YAAY,EAAE,SAAS,EAAE;QACzC,UAAU,EAAE,8BAA8B;QAC1C,UAAU,EAAE,kBAAkB;QAC9B,iBAAiB,EAAE,kBAAkB;KACtC,CAAC;;mDACiD;AAGnD;IADC,QAAQ,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE,QAAQ,EAAE,GAAG,EAAE,CAAC,IAAI,IAAI,EAAE,EAAE,SAAS,EAAE,YAAY,EAAE,CAAC;8BACzE,IAAI;+CAAc;AAG7B;IADC,QAAQ,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE,QAAQ,EAAE,GAAG,EAAE,CAAC,IAAI,IAAI,EAAE,EAAE,SAAS,EAAE,YAAY,EAAE,CAAC;8BACzE,IAAI;+CAAc;AAnClB,YAAY;IAFxB,YAAY,EAAE;IACd,MAAM,CAAC,EAAE,SAAS,EAAE,gBAAgB,EAAE,CAAC;GAC3B,YAAY,CAoCxB"}