@porulle/core 0.63.0 → 0.65.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 (463) hide show
  1. package/dist/adapters/email-render.d.ts +18 -0
  2. package/dist/adapters/email-render.d.ts.map +1 -0
  3. package/dist/adapters/email-render.js +37 -0
  4. package/dist/auth/actor.d.ts.map +1 -1
  5. package/dist/auth/actor.js +11 -0
  6. package/dist/auth/auth-failure.d.ts +0 -2
  7. package/dist/auth/auth-failure.d.ts.map +1 -1
  8. package/dist/auth/auth-failure.js +0 -4
  9. package/dist/auth/middleware.d.ts +0 -1
  10. package/dist/auth/middleware.d.ts.map +1 -1
  11. package/dist/auth/middleware.js +7 -6
  12. package/dist/auth/permissions.d.ts +2 -0
  13. package/dist/auth/permissions.d.ts.map +1 -1
  14. package/dist/auth/permissions.js +8 -6
  15. package/dist/auth/role-authority.d.ts +0 -1
  16. package/dist/auth/role-authority.d.ts.map +1 -1
  17. package/dist/auth/role-authority.js +1 -8
  18. package/dist/auth/setup.d.ts.map +1 -1
  19. package/dist/auth/setup.js +8 -0
  20. package/dist/auth/strict-org-resolution.d.ts +8 -1
  21. package/dist/auth/strict-org-resolution.d.ts.map +1 -1
  22. package/dist/auth/strict-org-resolution.js +9 -19
  23. package/dist/auth/system-actor.d.ts +3 -2
  24. package/dist/auth/system-actor.d.ts.map +1 -1
  25. package/dist/auth/system-actor.js +3 -3
  26. package/dist/config/defaults.d.ts.map +1 -1
  27. package/dist/config/defaults.js +3 -20
  28. package/dist/config/define-config.d.ts +2 -2
  29. package/dist/config/define-config.d.ts.map +1 -1
  30. package/dist/config/define-config.js +3 -2
  31. package/dist/config/types.d.ts +13 -3
  32. package/dist/config/types.d.ts.map +1 -1
  33. package/dist/hooks/checkout.d.ts +2 -15
  34. package/dist/hooks/checkout.d.ts.map +1 -1
  35. package/dist/hooks/checkout.js +2 -51
  36. package/dist/index.d.ts +11 -19
  37. package/dist/index.d.ts.map +1 -1
  38. package/dist/index.js +11 -12
  39. package/dist/interfaces/rest/router.js +3 -3
  40. package/dist/interfaces/rest/routes/admin/compensation-failures.d.ts.map +1 -1
  41. package/dist/interfaces/rest/routes/admin/compensation-failures.js +5 -5
  42. package/dist/interfaces/rest/routes/admin/entity-field-definitions.js +5 -5
  43. package/dist/interfaces/rest/routes/admin/staff.d.ts.map +1 -1
  44. package/dist/interfaces/rest/routes/admin/staff.js +2 -3
  45. package/dist/interfaces/rest/routes/analytics.d.ts.map +1 -1
  46. package/dist/interfaces/rest/routes/analytics.js +2 -2
  47. package/dist/interfaces/rest/routes/carts.d.ts.map +1 -1
  48. package/dist/interfaces/rest/routes/carts.js +12 -12
  49. package/dist/interfaces/rest/routes/catalog.js +37 -37
  50. package/dist/interfaces/rest/routes/checkout.d.ts.map +1 -1
  51. package/dist/interfaces/rest/routes/checkout.js +9 -10
  52. package/dist/interfaces/rest/routes/customers.d.ts.map +1 -1
  53. package/dist/interfaces/rest/routes/customers.js +12 -12
  54. package/dist/interfaces/rest/routes/documents.d.ts.map +1 -1
  55. package/dist/interfaces/rest/routes/documents.js +9 -9
  56. package/dist/interfaces/rest/routes/inventory.d.ts.map +1 -1
  57. package/dist/interfaces/rest/routes/inventory.js +8 -8
  58. package/dist/interfaces/rest/routes/media.d.ts.map +1 -1
  59. package/dist/interfaces/rest/routes/media.js +5 -5
  60. package/dist/interfaces/rest/routes/orders.d.ts.map +1 -1
  61. package/dist/interfaces/rest/routes/orders.js +32 -32
  62. package/dist/interfaces/rest/routes/payments.d.ts.map +1 -1
  63. package/dist/interfaces/rest/routes/payments.js +2 -2
  64. package/dist/interfaces/rest/routes/pricing.d.ts.map +1 -1
  65. package/dist/interfaces/rest/routes/pricing.js +8 -8
  66. package/dist/interfaces/rest/routes/promotions.d.ts.map +1 -1
  67. package/dist/interfaces/rest/routes/promotions.js +7 -7
  68. package/dist/interfaces/rest/routes/search.d.ts.map +1 -1
  69. package/dist/interfaces/rest/routes/search.js +3 -3
  70. package/dist/interfaces/rest/routes/settings.d.ts.map +1 -1
  71. package/dist/interfaces/rest/routes/settings.js +4 -4
  72. package/dist/interfaces/rest/routes/shipping.d.ts.map +1 -1
  73. package/dist/interfaces/rest/routes/shipping.js +9 -9
  74. package/dist/interfaces/rest/routes/tax.d.ts.map +1 -1
  75. package/dist/interfaces/rest/routes/tax.js +9 -9
  76. package/dist/interfaces/rest/routes/webhooks.d.ts.map +1 -1
  77. package/dist/interfaces/rest/routes/webhooks.js +4 -4
  78. package/dist/interfaces/rest/utils.d.ts +1 -1
  79. package/dist/interfaces/rest/utils.d.ts.map +1 -1
  80. package/dist/interfaces/rest/utils.js +4 -13
  81. package/dist/jobs.d.ts +1 -0
  82. package/dist/jobs.d.ts.map +1 -1
  83. package/dist/jobs.js +1 -0
  84. package/dist/kernel/database/adapter.d.ts +9 -0
  85. package/dist/kernel/database/adapter.d.ts.map +1 -1
  86. package/dist/kernel/database/adapter.js +1 -1
  87. package/dist/kernel/database/migrate.d.ts +0 -4
  88. package/dist/kernel/database/migrate.d.ts.map +1 -1
  89. package/dist/kernel/database/migrate.js +2 -14
  90. package/dist/kernel/database/pglite-transaction.d.ts +28 -0
  91. package/dist/kernel/database/pglite-transaction.d.ts.map +1 -0
  92. package/dist/kernel/database/pglite-transaction.js +52 -0
  93. package/dist/kernel/database/tx-context.d.ts +0 -1
  94. package/dist/kernel/database/tx-context.d.ts.map +1 -1
  95. package/dist/kernel/database/tx-context.js +2 -14
  96. package/dist/kernel/database/unique-violation.d.ts +3 -0
  97. package/dist/kernel/database/unique-violation.d.ts.map +1 -0
  98. package/dist/kernel/database/unique-violation.js +9 -0
  99. package/dist/kernel/error-mapper.d.ts.map +1 -1
  100. package/dist/kernel/error-mapper.js +1 -0
  101. package/dist/kernel/errors.d.ts +12 -0
  102. package/dist/kernel/errors.d.ts.map +1 -1
  103. package/dist/kernel/errors.js +16 -0
  104. package/dist/kernel/hooks/create-context.d.ts +18 -9
  105. package/dist/kernel/hooks/create-context.d.ts.map +1 -1
  106. package/dist/kernel/hooks/create-context.js +24 -3
  107. package/dist/kernel/hooks/registry.d.ts +0 -19
  108. package/dist/kernel/hooks/registry.d.ts.map +1 -1
  109. package/dist/kernel/hooks/registry.js +0 -32
  110. package/dist/kernel/jobs/drizzle-adapter.d.ts.map +1 -1
  111. package/dist/kernel/jobs/drizzle-adapter.js +3 -10
  112. package/dist/kernel/jobs/prepare-enqueue.d.ts +20 -0
  113. package/dist/kernel/jobs/prepare-enqueue.d.ts.map +1 -0
  114. package/dist/kernel/jobs/prepare-enqueue.js +24 -0
  115. package/dist/kernel/jobs/types.d.ts +0 -4
  116. package/dist/kernel/jobs/types.d.ts.map +1 -1
  117. package/dist/kernel/jobs/types.js +0 -4
  118. package/dist/kernel/local-api.d.ts +0 -33
  119. package/dist/kernel/local-api.d.ts.map +1 -1
  120. package/dist/kernel/local-api.js +0 -36
  121. package/dist/kernel/plugin/manifest.d.ts +3 -5
  122. package/dist/kernel/plugin/manifest.d.ts.map +1 -1
  123. package/dist/modules/analytics/service.d.ts +0 -6
  124. package/dist/modules/analytics/service.d.ts.map +1 -1
  125. package/dist/modules/analytics/service.js +0 -32
  126. package/dist/modules/cart/service.d.ts.map +1 -1
  127. package/dist/modules/cart/service.js +5 -17
  128. package/dist/modules/catalog/entity-service.d.ts.map +1 -1
  129. package/dist/modules/catalog/entity-service.js +9 -17
  130. package/dist/modules/catalog/import-service.d.ts.map +1 -1
  131. package/dist/modules/catalog/import-service.js +4 -13
  132. package/dist/modules/catalog/service.d.ts +1 -81
  133. package/dist/modules/catalog/service.d.ts.map +1 -1
  134. package/dist/modules/catalog/service.js +1 -8
  135. package/dist/modules/customers/service.d.ts.map +1 -1
  136. package/dist/modules/customers/service.js +5 -17
  137. package/dist/modules/documents/render.d.ts +0 -3
  138. package/dist/modules/documents/render.d.ts.map +1 -1
  139. package/dist/modules/documents/render.js +2 -17
  140. package/dist/modules/fulfillment/service.d.ts.map +1 -1
  141. package/dist/modules/fulfillment/service.js +8 -26
  142. package/dist/modules/inventory/service.d.ts.map +1 -1
  143. package/dist/modules/inventory/service.js +3 -20
  144. package/dist/modules/media/service.d.ts.map +1 -1
  145. package/dist/modules/media/service.js +2 -10
  146. package/dist/modules/orders/quote.d.ts.map +1 -1
  147. package/dist/modules/orders/quote.js +1 -2
  148. package/dist/modules/orders/service.d.ts.map +1 -1
  149. package/dist/modules/orders/service.js +4 -17
  150. package/dist/modules/pricing/service.d.ts.map +1 -1
  151. package/dist/modules/pricing/service.js +7 -18
  152. package/dist/modules/promotions/service.d.ts.map +1 -1
  153. package/dist/modules/promotions/service.js +4 -16
  154. package/dist/modules/tax/service.d.ts +1 -3
  155. package/dist/modules/tax/service.d.ts.map +1 -1
  156. package/dist/modules/tax/service.js +16 -52
  157. package/dist/modules/webhooks/hook.d.ts.map +1 -1
  158. package/dist/modules/webhooks/hook.js +3 -2
  159. package/dist/modules/webhooks/service.d.ts.map +1 -1
  160. package/dist/modules/webhooks/service.js +1 -50
  161. package/dist/runtime/commerce.d.ts.map +1 -1
  162. package/dist/runtime/commerce.js +4 -11
  163. package/dist/runtime/kernel-modules.d.ts +38 -1799
  164. package/dist/runtime/kernel-modules.d.ts.map +1 -1
  165. package/dist/runtime/kernel-modules.js +160 -66
  166. package/dist/runtime/kernel-types.d.ts +3 -15
  167. package/dist/runtime/kernel-types.d.ts.map +1 -1
  168. package/dist/runtime/kernel-types.js +0 -10
  169. package/dist/runtime/kernel.d.ts +2 -3
  170. package/dist/runtime/kernel.d.ts.map +1 -1
  171. package/dist/runtime/kernel.js +10 -51
  172. package/dist/runtime/server.d.ts +1 -1
  173. package/dist/runtime/server.d.ts.map +1 -1
  174. package/dist/test-utils/create-pglite-adapter.d.ts.map +1 -1
  175. package/dist/test-utils/create-pglite-adapter.js +5 -62
  176. package/dist/test-utils/create-plugin-test-app.d.ts.map +1 -1
  177. package/dist/test-utils/create-plugin-test-app.js +13 -32
  178. package/dist/test-utils/rest-api-test-utils.d.ts +0 -12
  179. package/dist/test-utils/rest-api-test-utils.d.ts.map +1 -1
  180. package/dist/test-utils/rest-api-test-utils.js +3 -70
  181. package/dist/test-utils/test-actors.d.ts +9 -0
  182. package/dist/test-utils/test-actors.d.ts.map +1 -1
  183. package/dist/test-utils/test-actors.js +62 -0
  184. package/dist/testing.d.ts +1 -4
  185. package/dist/testing.d.ts.map +1 -1
  186. package/dist/testing.js +1 -4
  187. package/dist/utils/escape-html.d.ts +3 -0
  188. package/dist/utils/escape-html.d.ts.map +1 -0
  189. package/dist/utils/escape-html.js +9 -0
  190. package/dist/utils/id.d.ts +0 -1
  191. package/dist/utils/id.d.ts.map +1 -1
  192. package/dist/utils/id.js +0 -3
  193. package/dist/utils/logger.d.ts +1 -1
  194. package/dist/utils/logger.d.ts.map +1 -1
  195. package/dist/utils/logger.js +1 -1
  196. package/dist/utils/money.d.ts +13 -0
  197. package/dist/utils/money.d.ts.map +1 -0
  198. package/dist/utils/money.js +58 -0
  199. package/package.json +5 -6
  200. package/src/adapters/email-render.ts +63 -0
  201. package/src/auth/actor.ts +14 -0
  202. package/src/auth/auth-failure.ts +0 -5
  203. package/src/auth/middleware.ts +7 -6
  204. package/src/auth/permissions.ts +12 -6
  205. package/src/auth/role-authority.ts +1 -10
  206. package/src/auth/setup.ts +11 -0
  207. package/src/auth/strict-org-resolution.ts +9 -16
  208. package/src/auth/system-actor.ts +3 -3
  209. package/src/config/defaults.ts +3 -20
  210. package/src/config/define-config.ts +5 -4
  211. package/src/config/types.ts +13 -2
  212. package/src/hooks/checkout.ts +2 -86
  213. package/src/index.ts +9 -36
  214. package/src/interfaces/rest/router.ts +3 -3
  215. package/src/interfaces/rest/routes/admin/compensation-failures.ts +5 -5
  216. package/src/interfaces/rest/routes/admin/entity-field-definitions.ts +5 -5
  217. package/src/interfaces/rest/routes/admin/staff.ts +2 -3
  218. package/src/interfaces/rest/routes/analytics.ts +2 -2
  219. package/src/interfaces/rest/routes/carts.ts +12 -12
  220. package/src/interfaces/rest/routes/catalog.ts +37 -37
  221. package/src/interfaces/rest/routes/checkout.ts +8 -10
  222. package/src/interfaces/rest/routes/customers.ts +12 -12
  223. package/src/interfaces/rest/routes/documents.ts +9 -9
  224. package/src/interfaces/rest/routes/inventory.ts +8 -8
  225. package/src/interfaces/rest/routes/media.ts +5 -5
  226. package/src/interfaces/rest/routes/orders.ts +32 -32
  227. package/src/interfaces/rest/routes/payments.ts +2 -2
  228. package/src/interfaces/rest/routes/pricing.ts +8 -8
  229. package/src/interfaces/rest/routes/promotions.ts +7 -7
  230. package/src/interfaces/rest/routes/search.ts +3 -3
  231. package/src/interfaces/rest/routes/settings.ts +4 -4
  232. package/src/interfaces/rest/routes/shipping.ts +9 -9
  233. package/src/interfaces/rest/routes/tax.ts +9 -9
  234. package/src/interfaces/rest/routes/webhooks.ts +4 -4
  235. package/src/interfaces/rest/utils.ts +4 -14
  236. package/src/jobs.ts +2 -1
  237. package/src/kernel/database/adapter.ts +1 -1
  238. package/src/kernel/database/migrate.ts +2 -17
  239. package/src/kernel/database/pglite-transaction.ts +61 -0
  240. package/src/kernel/database/tx-context.ts +2 -20
  241. package/src/kernel/database/unique-violation.ts +7 -0
  242. package/src/kernel/error-mapper.ts +1 -0
  243. package/src/kernel/errors.ts +18 -0
  244. package/src/kernel/hooks/create-context.ts +38 -8
  245. package/src/kernel/hooks/registry.ts +0 -37
  246. package/src/kernel/jobs/drizzle-adapter.ts +4 -15
  247. package/src/kernel/jobs/prepare-enqueue.ts +42 -0
  248. package/src/kernel/jobs/types.ts +0 -5
  249. package/src/kernel/local-api.ts +0 -44
  250. package/src/kernel/plugin/manifest.ts +3 -5
  251. package/src/modules/analytics/service.ts +0 -36
  252. package/src/modules/cart/service.ts +6 -29
  253. package/src/modules/catalog/entity-service.ts +9 -19
  254. package/src/modules/catalog/import-service.ts +4 -11
  255. package/src/modules/catalog/service.ts +2 -286
  256. package/src/modules/customers/service.ts +6 -27
  257. package/src/modules/documents/render.ts +2 -19
  258. package/src/modules/fulfillment/service.ts +8 -27
  259. package/src/modules/inventory/service.ts +3 -21
  260. package/src/modules/media/service.ts +2 -8
  261. package/src/modules/orders/quote.ts +1 -2
  262. package/src/modules/orders/service.ts +5 -30
  263. package/src/modules/pricing/service.ts +12 -30
  264. package/src/modules/promotions/service.ts +5 -28
  265. package/src/modules/tax/service.ts +20 -48
  266. package/src/modules/webhooks/hook.ts +3 -2
  267. package/src/modules/webhooks/service.ts +1 -42
  268. package/src/runtime/commerce.ts +4 -11
  269. package/src/runtime/kernel-modules.ts +191 -67
  270. package/src/runtime/kernel-types.ts +3 -26
  271. package/src/runtime/kernel.ts +11 -66
  272. package/src/runtime/server.ts +1 -3
  273. package/src/test-utils/create-pglite-adapter.ts +5 -67
  274. package/src/test-utils/create-plugin-test-app.ts +13 -52
  275. package/src/test-utils/rest-api-test-utils.ts +3 -70
  276. package/src/test-utils/test-actors.ts +66 -0
  277. package/src/testing.ts +1 -3
  278. package/src/utils/escape-html.ts +9 -0
  279. package/src/utils/id.ts +0 -4
  280. package/src/utils/logger.ts +1 -1
  281. package/src/utils/money.ts +62 -0
  282. package/dist/auth/access.d.ts +0 -101
  283. package/dist/auth/access.d.ts.map +0 -1
  284. package/dist/auth/access.js +0 -128
  285. package/dist/generated/plugin-manifest.d.ts +0 -51
  286. package/dist/generated/plugin-manifest.d.ts.map +0 -1
  287. package/dist/generated/plugin-manifest.js +0 -21
  288. package/dist/kernel/factory/repository-factory.d.ts +0 -71
  289. package/dist/kernel/factory/repository-factory.d.ts.map +0 -1
  290. package/dist/kernel/factory/repository-factory.js +0 -138
  291. package/dist/kernel/http-error.d.ts +0 -30
  292. package/dist/kernel/http-error.d.ts.map +0 -1
  293. package/dist/kernel/http-error.js +0 -35
  294. package/dist/kernel/jobs/builtin-job-tasks.d.ts +0 -3
  295. package/dist/kernel/jobs/builtin-job-tasks.d.ts.map +0 -1
  296. package/dist/kernel/jobs/builtin-job-tasks.js +0 -6
  297. package/dist/kernel/module/define.d.ts +0 -21
  298. package/dist/kernel/module/define.d.ts.map +0 -1
  299. package/dist/kernel/module/define.js +0 -3
  300. package/dist/kernel/module/index.d.ts +0 -4
  301. package/dist/kernel/module/index.d.ts.map +0 -1
  302. package/dist/kernel/module/index.js +0 -2
  303. package/dist/kernel/module/topo-sort.d.ts +0 -7
  304. package/dist/kernel/module/topo-sort.d.ts.map +0 -1
  305. package/dist/kernel/module/topo-sort.js +0 -89
  306. package/dist/kernel/query/executor.d.ts +0 -21
  307. package/dist/kernel/query/executor.d.ts.map +0 -1
  308. package/dist/kernel/query/executor.js +0 -128
  309. package/dist/kernel/query/registry.d.ts +0 -33
  310. package/dist/kernel/query/registry.d.ts.map +0 -1
  311. package/dist/kernel/query/registry.js +0 -20
  312. package/dist/kernel/service-registry.d.ts +0 -109
  313. package/dist/kernel/service-registry.d.ts.map +0 -1
  314. package/dist/kernel/service-registry.js +0 -26
  315. package/dist/modules/analytics/hooks.d.ts +0 -13
  316. package/dist/modules/analytics/hooks.d.ts.map +0 -1
  317. package/dist/modules/analytics/hooks.js +0 -12
  318. package/dist/modules/analytics/module.d.ts +0 -3
  319. package/dist/modules/analytics/module.d.ts.map +0 -1
  320. package/dist/modules/analytics/module.js +0 -24
  321. package/dist/modules/analytics/repository/index.d.ts +0 -5
  322. package/dist/modules/analytics/repository/index.d.ts.map +0 -1
  323. package/dist/modules/analytics/repository/index.js +0 -1
  324. package/dist/modules/audit/index.d.ts +0 -2
  325. package/dist/modules/audit/index.d.ts.map +0 -1
  326. package/dist/modules/audit/index.js +0 -1
  327. package/dist/modules/audit/module.d.ts +0 -180
  328. package/dist/modules/audit/module.d.ts.map +0 -1
  329. package/dist/modules/audit/module.js +0 -8
  330. package/dist/modules/cart/access.d.ts +0 -11
  331. package/dist/modules/cart/access.d.ts.map +0 -1
  332. package/dist/modules/cart/access.js +0 -18
  333. package/dist/modules/cart/module.d.ts +0 -14
  334. package/dist/modules/cart/module.d.ts.map +0 -1
  335. package/dist/modules/cart/module.js +0 -17
  336. package/dist/modules/catalog/module.d.ts +0 -26
  337. package/dist/modules/catalog/module.d.ts.map +0 -1
  338. package/dist/modules/catalog/module.js +0 -33
  339. package/dist/modules/customers/index.d.ts +0 -2
  340. package/dist/modules/customers/index.d.ts.map +0 -1
  341. package/dist/modules/customers/index.js +0 -1
  342. package/dist/modules/customers/module.d.ts +0 -563
  343. package/dist/modules/customers/module.d.ts.map +0 -1
  344. package/dist/modules/customers/module.js +0 -20
  345. package/dist/modules/documents/module.d.ts +0 -7
  346. package/dist/modules/documents/module.d.ts.map +0 -1
  347. package/dist/modules/documents/module.js +0 -13
  348. package/dist/modules/fulfillment/module.d.ts +0 -13
  349. package/dist/modules/fulfillment/module.d.ts.map +0 -1
  350. package/dist/modules/fulfillment/module.js +0 -23
  351. package/dist/modules/inventory/module.d.ts +0 -13
  352. package/dist/modules/inventory/module.d.ts.map +0 -1
  353. package/dist/modules/inventory/module.js +0 -20
  354. package/dist/modules/media/index.d.ts +0 -2
  355. package/dist/modules/media/index.d.ts.map +0 -1
  356. package/dist/modules/media/index.js +0 -1
  357. package/dist/modules/media/module.d.ts +0 -360
  358. package/dist/modules/media/module.d.ts.map +0 -1
  359. package/dist/modules/media/module.js +0 -24
  360. package/dist/modules/orders/module.d.ts +0 -25
  361. package/dist/modules/orders/module.d.ts.map +0 -1
  362. package/dist/modules/orders/module.js +0 -33
  363. package/dist/modules/organization/index.d.ts +0 -2
  364. package/dist/modules/organization/index.d.ts.map +0 -1
  365. package/dist/modules/organization/index.js +0 -1
  366. package/dist/modules/organization/module.d.ts +0 -205
  367. package/dist/modules/organization/module.d.ts.map +0 -1
  368. package/dist/modules/organization/module.js +0 -8
  369. package/dist/modules/payments/module.d.ts +0 -3
  370. package/dist/modules/payments/module.d.ts.map +0 -1
  371. package/dist/modules/payments/module.js +0 -7
  372. package/dist/modules/payments/repository/index.d.ts +0 -5
  373. package/dist/modules/payments/repository/index.d.ts.map +0 -1
  374. package/dist/modules/payments/repository/index.js +0 -1
  375. package/dist/modules/pricing/index.d.ts +0 -2
  376. package/dist/modules/pricing/index.d.ts.map +0 -1
  377. package/dist/modules/pricing/index.js +0 -1
  378. package/dist/modules/pricing/module.d.ts +0 -14
  379. package/dist/modules/pricing/module.d.ts.map +0 -1
  380. package/dist/modules/pricing/module.js +0 -17
  381. package/dist/modules/promotions/module.d.ts +0 -14
  382. package/dist/modules/promotions/module.d.ts.map +0 -1
  383. package/dist/modules/promotions/module.js +0 -19
  384. package/dist/modules/search/module.d.ts +0 -8
  385. package/dist/modules/search/module.d.ts.map +0 -1
  386. package/dist/modules/search/module.js +0 -22
  387. package/dist/modules/search/repository/index.d.ts +0 -5
  388. package/dist/modules/search/repository/index.d.ts.map +0 -1
  389. package/dist/modules/search/repository/index.js +0 -1
  390. package/dist/modules/settings/module.d.ts +0 -6
  391. package/dist/modules/settings/module.d.ts.map +0 -1
  392. package/dist/modules/settings/module.js +0 -12
  393. package/dist/modules/shipping/module.d.ts +0 -12
  394. package/dist/modules/shipping/module.d.ts.map +0 -1
  395. package/dist/modules/shipping/module.js +0 -14
  396. package/dist/modules/tax/module.d.ts +0 -7
  397. package/dist/modules/tax/module.d.ts.map +0 -1
  398. package/dist/modules/tax/module.js +0 -13
  399. package/dist/modules/webhooks/index.d.ts +0 -2
  400. package/dist/modules/webhooks/index.d.ts.map +0 -1
  401. package/dist/modules/webhooks/index.js +0 -1
  402. package/dist/modules/webhooks/module.d.ts +0 -403
  403. package/dist/modules/webhooks/module.d.ts.map +0 -1
  404. package/dist/modules/webhooks/module.js +0 -16
  405. package/dist/test-utils/create-repository-test-harness.d.ts +0 -8
  406. package/dist/test-utils/create-repository-test-harness.d.ts.map +0 -1
  407. package/dist/test-utils/create-repository-test-harness.js +0 -7
  408. package/dist/test-utils/create-test-plugin-context.d.ts +0 -38
  409. package/dist/test-utils/create-test-plugin-context.d.ts.map +0 -1
  410. package/dist/test-utils/create-test-plugin-context.js +0 -39
  411. package/dist/test-utils/typed-hooks.d.ts +0 -44
  412. package/dist/test-utils/typed-hooks.d.ts.map +0 -1
  413. package/dist/test-utils/typed-hooks.js +0 -36
  414. package/dist/types/commerce-types.d.ts +0 -34
  415. package/dist/types/commerce-types.d.ts.map +0 -1
  416. package/dist/types/commerce-types.js +0 -1
  417. package/src/auth/access.ts +0 -187
  418. package/src/generated/plugin-capabilities.d.ts +0 -21
  419. package/src/generated/plugin-manifest.ts +0 -24
  420. package/src/generated/plugin-repositories.d.ts +0 -21
  421. package/src/kernel/factory/repository-factory.ts +0 -244
  422. package/src/kernel/http-error.ts +0 -44
  423. package/src/kernel/jobs/builtin-job-tasks.ts +0 -17
  424. package/src/kernel/module/define.ts +0 -36
  425. package/src/kernel/module/index.ts +0 -3
  426. package/src/kernel/module/topo-sort.ts +0 -99
  427. package/src/kernel/query/executor.ts +0 -184
  428. package/src/kernel/query/registry.ts +0 -46
  429. package/src/kernel/service-registry.ts +0 -76
  430. package/src/modules/analytics/hooks.ts +0 -11
  431. package/src/modules/analytics/module.ts +0 -35
  432. package/src/modules/analytics/repository/index.ts +0 -5
  433. package/src/modules/audit/index.ts +0 -1
  434. package/src/modules/audit/module.ts +0 -11
  435. package/src/modules/cart/access.ts +0 -27
  436. package/src/modules/cart/module.ts +0 -32
  437. package/src/modules/catalog/module.ts +0 -80
  438. package/src/modules/customers/index.ts +0 -1
  439. package/src/modules/customers/module.ts +0 -29
  440. package/src/modules/documents/module.ts +0 -21
  441. package/src/modules/fulfillment/module.ts +0 -44
  442. package/src/modules/inventory/module.ts +0 -37
  443. package/src/modules/media/index.ts +0 -1
  444. package/src/modules/media/module.ts +0 -27
  445. package/src/modules/orders/module.ts +0 -67
  446. package/src/modules/organization/index.ts +0 -1
  447. package/src/modules/organization/module.ts +0 -11
  448. package/src/modules/payments/module.ts +0 -14
  449. package/src/modules/payments/repository/index.ts +0 -5
  450. package/src/modules/pricing/index.ts +0 -1
  451. package/src/modules/pricing/module.ts +0 -32
  452. package/src/modules/promotions/module.ts +0 -34
  453. package/src/modules/search/module.ts +0 -32
  454. package/src/modules/search/repository/index.ts +0 -5
  455. package/src/modules/settings/module.ts +0 -20
  456. package/src/modules/shipping/module.ts +0 -27
  457. package/src/modules/tax/module.ts +0 -21
  458. package/src/modules/webhooks/index.ts +0 -1
  459. package/src/modules/webhooks/module.ts +0 -24
  460. package/src/test-utils/create-repository-test-harness.ts +0 -16
  461. package/src/test-utils/create-test-plugin-context.ts +0 -66
  462. package/src/test-utils/typed-hooks.ts +0 -55
  463. package/src/types/commerce-types.ts +0 -34
@@ -1,20 +1,13 @@
1
1
  import type { CommerceConfig } from "../config/types.js";
2
2
 
3
- let _bootStrictOrgResolution = false;
4
-
5
- export function setBootStrictOrgResolution(strict: boolean): void {
6
- _bootStrictOrgResolution = strict;
7
- }
8
-
3
+ /**
4
+ * Whether a request with no actor must fail rather than resolve to a default
5
+ * organization. Fail closed by default: without an actor there is no tenant,
6
+ * and silently resolving to a default organization served one merchant's data
7
+ * to unauthenticated callers on every unguarded or allowlisted read path.
8
+ * Single-tenant deployments that relied on that fallback opt out explicitly
9
+ * with `auth.strictOrgResolution: false` or `STRICT_ORG_RESOLUTION=false`.
10
+ */
9
11
  export function isStrictOrgResolution(config?: CommerceConfig | null): boolean {
10
- // Fail closed by default. Without an actor there is no tenant, and silently
11
- // resolving to a default organization served one merchant's data to
12
- // unauthenticated callers on every unguarded or allowlisted read path.
13
- // Single-tenant deployments that relied on that fallback opt out explicitly.
14
- if (config?.auth?.strictOrgResolution === false) return false;
15
- if (process.env.STRICT_ORG_RESOLUTION === "false") return false;
16
- if (config?.auth?.strictOrgResolution === true) return true;
17
- if (process.env.STRICT_ORG_RESOLUTION === "true") return true;
18
- if ((config === undefined || config === null) && _bootStrictOrgResolution) return true;
19
- return true;
12
+ return config?.auth?.strictOrgResolution !== false && process.env.STRICT_ORG_RESOLUTION !== "false";
20
13
  }
@@ -1,11 +1,11 @@
1
1
  import type { Actor } from "./types.js";
2
- import { DEFAULT_ORG_ID } from "./org.js";
3
2
 
4
3
  /**
5
4
  * Creates a system actor for internal operations (webhooks, jobs, compensation chains).
6
- * System actors have full permissions and are scoped to a specific organization.
5
+ * System actors have full permissions, so the organization they act in is
6
+ * always named by the caller — there is no default tenant to fall back to.
7
7
  */
8
- export function createSystemActor(orgId: string = DEFAULT_ORG_ID): Actor {
8
+ export function createSystemActor(orgId: string): Actor {
9
9
  return {
10
10
  type: "api_key",
11
11
  userId: "system:internal",
@@ -1,4 +1,5 @@
1
1
  import type { CommerceConfig } from "./types.js";
2
+ import { DEFAULT_CUSTOMER_PERMISSIONS } from "../auth/actor.js";
2
3
 
3
4
  export const defaultConfig: Partial<CommerceConfig> = {
4
5
  version: "0.0.1",
@@ -44,28 +45,10 @@ export const defaultConfig: Partial<CommerceConfig> = {
44
45
  ],
45
46
  },
46
47
  customer: {
47
- permissions: [
48
- "catalog:read",
49
- "cart:create",
50
- "cart:read",
51
- "cart:update",
52
- "orders:create",
53
- "orders:read:own",
54
- "customers:read:self",
55
- "customers:update:self",
56
- ],
48
+ permissions: [...DEFAULT_CUSTOMER_PERMISSIONS],
57
49
  },
58
50
  },
59
- customerPermissions: [
60
- "catalog:read",
61
- "cart:create",
62
- "cart:read",
63
- "cart:update",
64
- "orders:create",
65
- "orders:read:own",
66
- "customers:read:self",
67
- "customers:update:self",
68
- ],
51
+ customerPermissions: [...DEFAULT_CUSTOMER_PERMISSIONS],
69
52
  },
70
53
  cart: {
71
54
  ttlMinutes: 60 * 24 * 7,
@@ -1,7 +1,8 @@
1
1
  import { defaultConfig } from "./defaults.js";
2
- import type { CommerceConfig, DefineConfigInput } from "./types.js";
2
+ import type { CommerceConfig } from "./types.js";
3
3
  import type { TaskDefinition } from "../kernel/jobs/types.js";
4
- import { defaultKernelJobTasks } from "../kernel/jobs/builtin-job-tasks.js";
4
+ import { staleJobReaperTask } from "../kernel/jobs/reaper.js";
5
+ import { webhookDeliveryTask } from "../modules/webhooks/tasks.js";
5
6
  import { _resetRegisteredPlugins } from "../kernel/plugin/manifest.js";
6
7
  import { noopStorageAdapter } from "../modules/media/noop-adapter.js";
7
8
 
@@ -14,7 +15,7 @@ function mergeBuiltinJobTasks(
14
15
  ): NonNullable<CommerceConfig["jobs"]> {
15
16
  const userTasks = jobs?.tasks ?? [];
16
17
  const bySlug = new Map<string, TaskDefinition>();
17
- for (const t of defaultKernelJobTasks) {
18
+ for (const t of [webhookDeliveryTask, staleJobReaperTask] as TaskDefinition[]) {
18
19
  bySlug.set(t.slug, t);
19
20
  }
20
21
  for (const t of userTasks) {
@@ -56,7 +57,7 @@ function merge<T extends object>(base: T, next: Partial<T>): T {
56
57
  * 4. Freezing the result to prevent runtime mutation
57
58
  */
58
59
  export async function defineConfig(
59
- input: DefineConfigInput,
60
+ input: CommerceConfig,
60
61
  ): Promise<CommerceConfig> {
61
62
  let config = merge(defaultConfig as CommerceConfig, input);
62
63
 
@@ -165,6 +165,17 @@ export interface AuthConfig {
165
165
  customerPermissions?: string[];
166
166
  /** Origins allowed for CSRF protection (Better Auth `trustedOrigins`). */
167
167
  trustedOrigins?: string[];
168
+ /**
169
+ * Request headers the auth rate limiter reads the client IP from, in order (Better Auth
170
+ * `advanced.ipAddress.ipAddressHeaders`). Unset keeps Better Auth's default: `x-forwarded-for`, one value.
171
+ *
172
+ * On Cloudflare Workers set `["cf-connecting-ip"]`. An internet request to a Worker carries no
173
+ * `x-forwarded-for`, so under the default every caller has NO IP and shares one per-path bucket — one
174
+ * client flooding sign-in throttles everyone's. Cloudflare sets `cf-connecting-ip` and overwrites any
175
+ * client-sent value; over a service binding only the calling Worker can set it, so that Worker must
176
+ * forward a verified client IP or nothing.
177
+ */
178
+ ipAddressHeaders?: string[];
168
179
  /**
169
180
  * Predefined API key scopes. Each scope defines a named permission set
170
181
  * that can be used with `bunx @porulle/cli api-key create --scope <name>`.
@@ -431,7 +442,6 @@ export interface CommerceConfig {
431
442
  version?: string;
432
443
  database: {
433
444
  provider: "postgresql";
434
- options?: Record<string, unknown>;
435
445
  };
436
446
  databaseAdapter?: DatabaseAdapter;
437
447
  auth?: AuthConfig;
@@ -559,7 +569,6 @@ export interface CommerceConfig {
559
569
  };
560
570
  }
561
571
 
562
- export interface DefineConfigInput extends CommerceConfig {}
563
572
 
564
573
  export interface AuthSessionLike {
565
574
  user: {
@@ -567,6 +576,8 @@ export interface AuthSessionLike {
567
576
  email?: string | null;
568
577
  name?: string | null;
569
578
  vendorId?: string | null;
579
+ /** Set by Better Auth's twoFactor plugin once the user has enrolled. */
580
+ twoFactorEnabled?: boolean | null;
570
581
  };
571
582
  session: {
572
583
  activeOrganizationId?: string | null;
@@ -573,93 +573,9 @@ export const authorizePayment: BeforeHook<CheckoutData> = async ({
573
573
  return data;
574
574
  };
575
575
 
576
- export const capturePayment: AfterHook<OrderResult> = async ({ context }) => {
577
- const payments = context.services.payments as {
578
- capture(paymentIntentId: string, amount?: number, paymentMethodId?: string): Promise<unknown>;
579
- };
580
- const paymentIntentId = context.context.paymentIntentId as string | undefined;
581
- const paymentMethodId = context.context.paymentMethodId as string | undefined;
582
- if (!paymentIntentId) return;
583
- await payments.capture(paymentIntentId, undefined, paymentMethodId);
584
- };
585
-
586
- export const reserveInventory: AfterHook<OrderResult> = async ({ result, context }) => {
587
- const inventory = context.services.inventory as {
588
- reserve(input: {
589
- entityId: string;
590
- variantId?: string;
591
- quantity: number;
592
- orderId: string;
593
- performedBy: string;
594
- }, actor?: unknown): Promise<unknown>;
595
- };
596
- for (const lineItem of result.lineItems ?? []) {
597
- await inventory.reserve(
598
- {
599
- entityId: lineItem.entityId,
600
- ...(lineItem.variantId != null ? { variantId: lineItem.variantId } : {}),
601
- quantity: lineItem.quantity,
602
- orderId: result.id,
603
- performedBy: context.actor?.userId ?? "system",
604
- },
605
- context.actor,
606
- );
607
- }
608
- };
609
-
610
- export const initiateFulfillment: AfterHook<OrderResult> = async ({
611
- result,
612
- context,
613
- }) => {
614
- const fulfillment = context.services.fulfillment as {
615
- fulfillOrder(orderId: string, actor?: unknown): Promise<unknown>;
616
- };
617
- await fulfillment.fulfillOrder(result.id, context.actor);
618
- };
619
-
620
- export const sendConfirmation: AfterHook<OrderResult> = async ({ result, context }) => {
621
- const customers = context.services.customers as {
622
- getByUserId(
623
- userId: string,
624
- actor?: unknown,
625
- ): Promise<{ ok: boolean; value?: { email?: string } }>;
626
- };
627
- const email = context.services.email as
628
- | {
629
- send(input: {
630
- template: string;
631
- to: string;
632
- data?: Record<string, unknown>;
633
- }): Promise<void>;
634
- }
635
- | undefined;
636
-
637
- if (!result.customerId || !email?.send) return;
638
- const customer = await customers.getByUserId(result.customerId, context.actor);
639
- if (!customer.ok || !customer.value?.email) return;
640
-
641
- await email.send({
642
- template: "order-confirmation",
643
- to: customer.value.email,
644
- data: { order: result },
645
- });
646
- };
647
-
648
- /**
649
- * Analytics event recording — intentional no-op.
650
- *
651
- * The DrizzleAnalyticsAdapter queries source tables (orders, inventory)
652
- * directly via SQL, so no separate event recording is needed. The export
653
- * is preserved for backwards compatibility with checkout route imports.
654
- */
655
- export const recordAnalyticsEvent: AfterHook<OrderResult> = async () => {
656
- // No-op: source tables ARE the analytics events.
657
- };
658
-
659
576
  /**
660
- * Replaces the separate capturePayment and reserveInventory AfterHooks
661
- * with a single compensation chain that can roll back completed steps
662
- * if any step fails.
577
+ * Completes a placed order as one compensation chain that can roll back
578
+ * completed steps if any step fails.
663
579
  *
664
580
  * Order of steps:
665
581
  * 1. Reserve inventory — if this fails, no money is charged
package/src/index.ts CHANGED
@@ -53,17 +53,6 @@ export {
53
53
  isUnauthenticatedActor,
54
54
  requireUserId,
55
55
  } from "./auth/permissions.js";
56
- export type { AccessResult, AccessContext, AccessFn, WhereClause } from "./auth/access.js";
57
- export {
58
- accessOR,
59
- accessAND,
60
- conditional,
61
- isAdmin,
62
- isAuthenticated,
63
- isDocumentOwner,
64
- publicAccess,
65
- denyAll,
66
- } from "./auth/access.js";
67
56
 
68
57
  export { HookRegistry } from "./kernel/hooks/registry.js";
69
58
  export type {
@@ -89,6 +78,7 @@ export type {
89
78
  } from "./kernel/jobs/adapter.js";
90
79
  export { NullJobsAdapter } from "./kernel/jobs/adapter.js";
91
80
  export { DrizzleJobsAdapter } from "./kernel/jobs/drizzle-adapter.js";
81
+ export { prepareEnqueue, type PreparedEnqueue } from "./kernel/jobs/prepare-enqueue.js";
92
82
  export { runPendingJobs } from "./kernel/jobs/runner.js";
93
83
  export type { RunPendingJobsArgs } from "./kernel/jobs/runner.js";
94
84
  export type {
@@ -102,7 +92,7 @@ export type {
102
92
  JobProcessingOrderField,
103
93
  JobProcessingOrderRecord,
104
94
  } from "./kernel/jobs/types.js";
105
- export { BUILTIN_JOB_TASK_SLUGS, TaskNonRetryableError } from "./kernel/jobs/types.js";
95
+ export { TaskNonRetryableError } from "./kernel/jobs/types.js";
106
96
  export { createPassThroughTaskStep } from "./kernel/jobs/step.js";
107
97
  export {
108
98
  staleJobReaperTask,
@@ -111,7 +101,7 @@ export {
111
101
  getJobsReaperIntervalMs,
112
102
  } from "./kernel/jobs/reaper.js";
113
103
 
114
- export { createLocalAPI, LocalAPI } from "./kernel/local-api.js";
104
+ export { createLocalAPI } from "./kernel/local-api.js";
115
105
  export type { CommerceLocalAPI, LocalAPIOptions } from "./kernel/local-api.js";
116
106
  export { createCommerce } from "./runtime/commerce.js";
117
107
  export type { CommerceInstance } from "./runtime/commerce.js";
@@ -127,10 +117,6 @@ export type {
127
117
  export type { Result, PluginResult, PluginResultErr } from "./kernel/result.js";
128
118
  export { Ok, Err, PluginErr } from "./kernel/result.js";
129
119
  export type { PluginDb, PluginTxFn } from "./kernel/database/plugin-types.js";
130
- export type { ServiceRegistry } from "./kernel/service-registry.js";
131
- export { defineModule } from "./kernel/module/index.js";
132
- export type { AppModule, ModuleDeps, ServiceMap } from "./kernel/module/index.js";
133
- export { toHttpError, type HttpErrorResponse } from "./kernel/http-error.js";
134
120
  export { withTiming } from "./kernel/service-timing.js";
135
121
 
136
122
  export {
@@ -139,6 +125,7 @@ export {
139
125
  CommerceForbiddenError,
140
126
  CommerceUnauthorizedError,
141
127
  CommerceReauthRequiredError,
128
+ CommerceTwoFactorRequiredError,
142
129
  CommerceConflictError,
143
130
  CommerceInvalidTransitionError,
144
131
  OrgResolutionError,
@@ -213,6 +200,8 @@ export type {
213
200
  SearchSuggestParams,
214
201
  } from "./modules/search/adapter.js";
215
202
  export type { DatabaseAdapter } from "./kernel/database/adapter.js";
203
+ export { normalizeExecuteShape } from "./kernel/database/adapter.js";
204
+ export { createPGliteTransaction, type PGliteExec } from "./kernel/database/pglite-transaction.js";
216
205
  export { isValidFieldPath, validateFieldPath } from "./modules/catalog/ownership.js";
217
206
  export type { FieldPath, FieldOwner } from "./modules/catalog/ownership.js";
218
207
  export type {
@@ -240,7 +229,6 @@ export type {
240
229
  } from "./kernel/database/tx-context.js";
241
230
  export {
242
231
  createTxContext,
243
- reuseOrCreateTxContext,
244
232
  withTransaction,
245
233
  isWriteContextTransactional,
246
234
  resolveWriteContextHookContext,
@@ -258,11 +246,13 @@ export type {
258
246
  export {
259
247
  getSchema,
260
248
  buildSchema,
261
- getTableNames,
262
249
  getSchemaFiles,
263
250
  pushSchema,
264
251
  } from "./kernel/database/migrate.js";
265
252
  export { consoleEmailAdapter } from "./adapters/console-email.js";
253
+ export { renderEmail, type EmailData, type EmailTemplateMap, type RenderEmailOptions } from "./adapters/email-render.js";
254
+ export { escapeHtml } from "./utils/escape-html.js";
255
+ export { currencyExponent, formatAmount, toMinorUnits } from "./utils/money.js";
266
256
 
267
257
  export { promotionTypeEnum, type PromotionType } from "./modules/promotions/schemas.js";
268
258
 
@@ -278,28 +268,11 @@ export type {
278
268
  Step,
279
269
  } from "./kernel/compensation/types.js";
280
270
 
281
- export { createRepository } from "./kernel/factory/repository-factory.js";
282
- export type {
283
- BaseRepository,
284
- SoftDeletableRepository,
285
- RepositoryFor,
286
- Filters,
287
- FindOptions,
288
- } from "./kernel/factory/repository-factory.js";
289
271
 
290
272
  export type { CartItemMatcher } from "./modules/cart/matcher.js";
291
273
  export { defaultCartItemMatcher } from "./modules/cart/matcher.js";
292
- export { canAccessCart } from "./modules/cart/access.js";
293
274
 
294
- export { QueryRegistry } from "./kernel/query/registry.js";
295
- export { executeQuery } from "./kernel/query/executor.js";
296
- export type {
297
- RelationDefinition,
298
- EntityDefinition,
299
- } from "./kernel/query/registry.js";
300
- export type { QueryInput, QueryResult } from "./kernel/query/executor.js";
301
275
 
302
- export type { CommerceModuleTypes } from "./types/commerce-types.js";
303
276
 
304
277
  export { staleOrderCleanupTask } from "./modules/orders/stale-order-cleanup.js";
305
278
  export {
@@ -28,7 +28,7 @@
28
28
 
29
29
  import { createRoute, z } from "@hono/zod-openapi";
30
30
  import { ErrorSchema } from "./schemas/shared.js";
31
- import { mapErrorToResponse, mapErrorToStatus, markRoutePermissionGuard } from "./utils.js";
31
+ import { errorBody, mapErrorToStatus, markRoutePermissionGuard } from "./utils.js";
32
32
  import type { CommerceConfig } from "../../config/types.js";
33
33
  import type { PluginRouteRegistration } from "../../kernel/plugin/manifest.js";
34
34
  import { createScopedDb } from "../../kernel/database/scoped-db.js";
@@ -302,11 +302,11 @@ class RouteChain {
302
302
  } catch (error: unknown) {
303
303
  try {
304
304
  return ctx.json(
305
- mapErrorToResponse(error),
305
+ errorBody(error),
306
306
  mapErrorToStatus(error) as number,
307
307
  );
308
308
  } catch {
309
- // Fallback if mapErrorToResponse/mapErrorToStatus themselves throw
309
+ // Fallback if errorBody/mapErrorToStatus themselves throw
310
310
  return ctx.json(
311
311
  { error: { code: "INTERNAL_ERROR", message: "An unexpected error occurred." } },
312
312
  500,
@@ -9,7 +9,7 @@ import {
9
9
  listCompensationFailuresRoute,
10
10
  resolveCompensationFailureRoute,
11
11
  } from "../../schemas/compensation-failures.js";
12
- import { type AppEnv, mapErrorToResponse, mapErrorToStatus, requirePerm } from "../../utils.js";
12
+ import { type AppEnv, errorBody, mapErrorToStatus, requirePerm } from "../../utils.js";
13
13
 
14
14
  function toIso(d: Date | null | undefined): string | null {
15
15
  if (d == null) return null;
@@ -78,7 +78,7 @@ export function compensationFailureAdminRoutes(kernel: Kernel) {
78
78
  const resolvedParsed = parseResolvedFilter(c.req.query("resolved"));
79
79
  if (!resolvedParsed.ok) {
80
80
  return c.json(
81
- mapErrorToResponse(
81
+ errorBody(
82
82
  new CommerceValidationError(
83
83
  'Query "resolved" must be true, false, or all.',
84
84
  ),
@@ -105,7 +105,7 @@ export function compensationFailureAdminRoutes(kernel: Kernel) {
105
105
  : {}),
106
106
  });
107
107
  if (!listed.ok) {
108
- return c.json(mapErrorToResponse(listed.error), mapErrorToStatus(listed.error));
108
+ return c.json(errorBody(listed.error), mapErrorToStatus(listed.error));
109
109
  }
110
110
  return c.json({
111
111
  items: listed.value.items.map(digestFailure),
@@ -125,7 +125,7 @@ export function compensationFailureAdminRoutes(kernel: Kernel) {
125
125
 
126
126
  const found = await kernel.services.compensationFailures.findById(id);
127
127
  if (!found.ok) {
128
- return c.json(mapErrorToResponse(found.error), mapErrorToStatus(found.error));
128
+ return c.json(errorBody(found.error), mapErrorToStatus(found.error));
129
129
  }
130
130
  const row = found.value;
131
131
  if (!row) {
@@ -154,7 +154,7 @@ export function compensationFailureAdminRoutes(kernel: Kernel) {
154
154
  ...(body.notes !== undefined ? { notes: body.notes } : {}),
155
155
  });
156
156
  if (!resolved.ok) {
157
- return c.json(mapErrorToResponse(resolved.error), mapErrorToStatus(resolved.error));
157
+ return c.json(errorBody(resolved.error), mapErrorToStatus(resolved.error));
158
158
  }
159
159
  return c.json({ failure: digestFailure(resolved.value) });
160
160
  });
@@ -12,7 +12,7 @@ import {
12
12
  } from "../../schemas/admin-entity-field-definitions.js";
13
13
  import {
14
14
  type AppEnv,
15
- mapErrorToResponse,
15
+ errorBody,
16
16
  mapErrorToStatus,
17
17
  requirePerm,
18
18
  } from "../../utils.js";
@@ -35,7 +35,7 @@ export function adminEntityFieldDefinitionRoutes(kernel: Kernel) {
35
35
  );
36
36
  if (!result.ok)
37
37
  return c.json(
38
- mapErrorToResponse(result.error),
38
+ errorBody(result.error),
39
39
  mapErrorToStatus(result.error),
40
40
  );
41
41
  return c.json({ data: result.value }, 201);
@@ -50,7 +50,7 @@ export function adminEntityFieldDefinitionRoutes(kernel: Kernel) {
50
50
  );
51
51
  if (!result.ok)
52
52
  return c.json(
53
- mapErrorToResponse(result.error),
53
+ errorBody(result.error),
54
54
  mapErrorToStatus(result.error),
55
55
  );
56
56
  return c.json({ data: result.value });
@@ -65,7 +65,7 @@ export function adminEntityFieldDefinitionRoutes(kernel: Kernel) {
65
65
  );
66
66
  if (!result.ok)
67
67
  return c.json(
68
- mapErrorToResponse(result.error),
68
+ errorBody(result.error),
69
69
  mapErrorToStatus(result.error),
70
70
  );
71
71
  return c.json({ data: result.value });
@@ -79,7 +79,7 @@ export function adminEntityFieldDefinitionRoutes(kernel: Kernel) {
79
79
  );
80
80
  if (!result.ok)
81
81
  return c.json(
82
- mapErrorToResponse(result.error),
82
+ errorBody(result.error),
83
83
  mapErrorToStatus(result.error),
84
84
  );
85
85
  return c.json({ data: result.value });
@@ -5,7 +5,6 @@ import type { CommerceConfig } from "../../../../config/types.js";
5
5
  import type { DrizzleDatabase } from "../../../../kernel/database/drizzle-db.js";
6
6
  import { member, user, invitation } from "../../../../auth/auth-schema.js";
7
7
  import { resolveOrgIdForCommerce } from "../../../../auth/org.js";
8
- import { makeId } from "../../../../utils/id.js";
9
8
  import {
10
9
  listStaffRoute,
11
10
  createStaffRoute,
@@ -200,7 +199,7 @@ export function adminStaffRoutes(kernel: Kernel) {
200
199
  const rows = await db
201
200
  .insert(member)
202
201
  .values({
203
- id: makeId(),
202
+ id: crypto.randomUUID(),
204
203
  organizationId: orgId,
205
204
  userId: body.userId,
206
205
  role: body.role,
@@ -221,7 +220,7 @@ export function adminStaffRoutes(kernel: Kernel) {
221
220
  const rows = await db
222
221
  .insert(invitation)
223
222
  .values({
224
- id: makeId(),
223
+ id: crypto.randomUUID(),
225
224
  organizationId: orgId,
226
225
  email: body.email,
227
226
  role: body.role,
@@ -1,7 +1,7 @@
1
1
  import { OpenAPIHono } from "@hono/zod-openapi";
2
2
  import type { Kernel } from "../../../runtime/kernel.js";
3
3
  import { getReportRoute, listReportsRoute } from "../schemas/analytics.js";
4
- import { type AppEnv, mapErrorToResponse, mapErrorToStatus, requirePerm } from "../utils.js";
4
+ import { type AppEnv, errorBody, mapErrorToStatus, requirePerm } from "../utils.js";
5
5
 
6
6
  export function analyticsRoutes(kernel: Kernel) {
7
7
  const router = new OpenAPIHono<AppEnv>();
@@ -25,7 +25,7 @@ export function analyticsRoutes(kernel: Kernel) {
25
25
  },
26
26
  c.get("actor"),
27
27
  );
28
- if (!result.ok) return c.json(mapErrorToResponse(result.error), mapErrorToStatus(result.error));
28
+ if (!result.ok) return c.json(errorBody(result.error), mapErrorToStatus(result.error));
29
29
  return c.json({ data: result.value });
30
30
  });
31
31
 
@@ -2,7 +2,7 @@ import { OpenAPIHono } from "@hono/zod-openapi";
2
2
  import type { Kernel } from "../../../runtime/kernel.js";
3
3
  import type { CreateCartInput, AddCartItemInput } from "../../../modules/cart/schemas.js";
4
4
  import { createCartRoute, addCartItemRoute, updateCartItemQuantityRoute, getCartRoute, removeCartItemRoute, listCartsRoute, recoverCartRoute } from "../schemas/carts.js";
5
- import { type AppEnv, mapErrorToResponse, mapErrorToStatus, parsePagination, requireMethodPerm, requirePerm } from "../utils.js";
5
+ import { type AppEnv, errorBody, mapErrorToStatus, parsePagination, requireMethodPerm, requirePerm } from "../utils.js";
6
6
 
7
7
  export function cartRoutes(kernel: Kernel) {
8
8
  const router = new OpenAPIHono<AppEnv>();
@@ -21,7 +21,7 @@ export function cartRoutes(kernel: Kernel) {
21
21
  const result = await kernel.services.cart.create(c.req.valid("json") as CreateCartInput, actor);
22
22
  if (!result.ok)
23
23
  return c.json(
24
- mapErrorToResponse(result.error),
24
+ errorBody(result.error),
25
25
  mapErrorToStatus(result.error),
26
26
  );
27
27
  return c.json({ data: result.value }, 201);
@@ -57,7 +57,7 @@ export function cartRoutes(kernel: Kernel) {
57
57
  );
58
58
  if (!result.ok)
59
59
  return c.json(
60
- mapErrorToResponse(result.error),
60
+ errorBody(result.error),
61
61
  mapErrorToStatus(result.error),
62
62
  );
63
63
  return c.json({
@@ -71,7 +71,7 @@ export function cartRoutes(kernel: Kernel) {
71
71
  const result = await kernel.services.cart.recover(c.req.param("id"), c.get("actor"));
72
72
  if (!result.ok)
73
73
  return c.json(
74
- mapErrorToResponse(result.error),
74
+ errorBody(result.error),
75
75
  mapErrorToStatus(result.error),
76
76
  );
77
77
  return c.json({ data: result.value });
@@ -80,7 +80,7 @@ export function cartRoutes(kernel: Kernel) {
80
80
  // @ts-expect-error -- openapi handler union return type
81
81
  router.openapi(getCartRoute, async (c) => {
82
82
  const actor = c.get("actor");
83
- const secretHeader = c.req.header("x-cart-secret") ?? c.req.header("X-Cart-Secret");
83
+ const secretHeader = c.req.header("x-cart-secret");
84
84
  const result = await kernel.services.cart.getById(
85
85
  c.req.param("id"),
86
86
  actor,
@@ -89,7 +89,7 @@ export function cartRoutes(kernel: Kernel) {
89
89
  );
90
90
  if (!result.ok)
91
91
  return c.json(
92
- mapErrorToResponse(result.error),
92
+ errorBody(result.error),
93
93
  mapErrorToStatus(result.error),
94
94
  );
95
95
  return c.json({ data: result.value });
@@ -99,7 +99,7 @@ export function cartRoutes(kernel: Kernel) {
99
99
  // returns union responses (201 | 400 | 422). The route definition documents the
100
100
  // contract; the handler returns dynamic status.
101
101
  router.openapi(addCartItemRoute, async (c) => {
102
- const secret = c.req.header("x-cart-secret") ?? c.req.header("X-Cart-Secret") ?? undefined;
102
+ const secret = c.req.header("x-cart-secret") ?? undefined;
103
103
  const result = await kernel.services.cart.addItem(
104
104
  { ...c.req.valid("json"), cartId: c.req.param("id") } as AddCartItemInput,
105
105
  c.get("actor"),
@@ -108,7 +108,7 @@ export function cartRoutes(kernel: Kernel) {
108
108
  );
109
109
  if (!result.ok)
110
110
  return c.json(
111
- mapErrorToResponse(result.error),
111
+ errorBody(result.error),
112
112
  mapErrorToStatus(result.error),
113
113
  );
114
114
  return c.json({ data: result.value }, 201);
@@ -119,7 +119,7 @@ export function cartRoutes(kernel: Kernel) {
119
119
  // contract; the handler returns dynamic status.
120
120
  router.openapi(updateCartItemQuantityRoute, async (c) => {
121
121
  const body = c.req.valid("json");
122
- const secret = c.req.header("x-cart-secret") ?? c.req.header("X-Cart-Secret") ?? undefined;
122
+ const secret = c.req.header("x-cart-secret") ?? undefined;
123
123
  const result = await kernel.services.cart.updateQuantity(
124
124
  {
125
125
  cartId: c.req.param("id"),
@@ -132,7 +132,7 @@ export function cartRoutes(kernel: Kernel) {
132
132
  );
133
133
  if (!result.ok)
134
134
  return c.json(
135
- mapErrorToResponse(result.error),
135
+ errorBody(result.error),
136
136
  mapErrorToStatus(result.error),
137
137
  );
138
138
  return c.json({ data: result.value });
@@ -140,7 +140,7 @@ export function cartRoutes(kernel: Kernel) {
140
140
 
141
141
  // @ts-expect-error -- openapi handler union return type
142
142
  router.openapi(removeCartItemRoute, async (c) => {
143
- const secret = c.req.header("x-cart-secret") ?? c.req.header("X-Cart-Secret") ?? undefined;
143
+ const secret = c.req.header("x-cart-secret") ?? undefined;
144
144
  const result = await kernel.services.cart.removeItem(
145
145
  c.req.param("id"),
146
146
  c.req.param("itemId"),
@@ -150,7 +150,7 @@ export function cartRoutes(kernel: Kernel) {
150
150
  );
151
151
  if (!result.ok)
152
152
  return c.json(
153
- mapErrorToResponse(result.error),
153
+ errorBody(result.error),
154
154
  mapErrorToStatus(result.error),
155
155
  );
156
156
  return c.json({ data: { deleted: true } });