@unifiedcommerce/core 0.4.2 → 0.4.4

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 (563) hide show
  1. package/dist/interfaces/rest/index.d.ts.map +1 -1
  2. package/dist/interfaces/rest/index.js +4 -17
  3. package/dist/runtime/server.d.ts.map +1 -1
  4. package/dist/runtime/server.js +33 -0
  5. package/package.json +1 -1
  6. package/src/interfaces/rest/index.ts +4 -18
  7. package/src/runtime/server.ts +33 -0
  8. package/dist/adapters/console-email.d.ts +0 -23
  9. package/dist/adapters/console-email.d.ts.map +0 -1
  10. package/dist/adapters/console-email.js +0 -38
  11. package/dist/auth/access.d.ts +0 -101
  12. package/dist/auth/access.d.ts.map +0 -1
  13. package/dist/auth/access.js +0 -128
  14. package/dist/auth/auth-schema.d.ts +0 -1475
  15. package/dist/auth/auth-schema.d.ts.map +0 -1
  16. package/dist/auth/auth-schema.js +0 -124
  17. package/dist/auth/middleware.d.ts +0 -5
  18. package/dist/auth/middleware.d.ts.map +0 -1
  19. package/dist/auth/middleware.js +0 -141
  20. package/dist/auth/org.d.ts +0 -22
  21. package/dist/auth/org.d.ts.map +0 -1
  22. package/dist/auth/org.js +0 -36
  23. package/dist/auth/permissions.d.ts +0 -4
  24. package/dist/auth/permissions.d.ts.map +0 -1
  25. package/dist/auth/permissions.js +0 -24
  26. package/dist/auth/setup.d.ts +0 -29
  27. package/dist/auth/setup.d.ts.map +0 -1
  28. package/dist/auth/setup.js +0 -117
  29. package/dist/auth/system-actor.d.ts +0 -7
  30. package/dist/auth/system-actor.d.ts.map +0 -1
  31. package/dist/auth/system-actor.js +0 -17
  32. package/dist/auth/types.d.ts +0 -11
  33. package/dist/auth/types.d.ts.map +0 -1
  34. package/dist/auth/types.js +0 -1
  35. package/dist/config/defaults.d.ts +0 -3
  36. package/dist/config/defaults.d.ts.map +0 -1
  37. package/dist/config/defaults.js +0 -80
  38. package/dist/config/define-config.d.ts +0 -9
  39. package/dist/config/define-config.d.ts.map +0 -1
  40. package/dist/config/define-config.js +0 -44
  41. package/dist/config/types.d.ts +0 -327
  42. package/dist/config/types.d.ts.map +0 -1
  43. package/dist/config/types.js +0 -1
  44. package/dist/generated/plugin-manifest.d.ts +0 -48
  45. package/dist/generated/plugin-manifest.d.ts.map +0 -1
  46. package/dist/generated/plugin-manifest.js +0 -20
  47. package/dist/hooks/checkout-completion.d.ts +0 -58
  48. package/dist/hooks/checkout-completion.d.ts.map +0 -1
  49. package/dist/hooks/checkout-completion.js +0 -137
  50. package/dist/hooks/checkout.d.ts +0 -99
  51. package/dist/hooks/checkout.d.ts.map +0 -1
  52. package/dist/hooks/checkout.js +0 -317
  53. package/dist/hooks/order-emails.d.ts +0 -16
  54. package/dist/hooks/order-emails.d.ts.map +0 -1
  55. package/dist/hooks/order-emails.js +0 -44
  56. package/dist/index.d.ts +0 -77
  57. package/dist/index.d.ts.map +0 -1
  58. package/dist/index.js +0 -45
  59. package/dist/interfaces/mcp/agent-prompt.d.ts +0 -16
  60. package/dist/interfaces/mcp/agent-prompt.d.ts.map +0 -1
  61. package/dist/interfaces/mcp/agent-prompt.js +0 -172
  62. package/dist/interfaces/mcp/context-enrichment.d.ts +0 -39
  63. package/dist/interfaces/mcp/context-enrichment.d.ts.map +0 -1
  64. package/dist/interfaces/mcp/context-enrichment.js +0 -119
  65. package/dist/interfaces/mcp/server.d.ts +0 -5
  66. package/dist/interfaces/mcp/server.d.ts.map +0 -1
  67. package/dist/interfaces/mcp/server.js +0 -30
  68. package/dist/interfaces/mcp/tool-builder.d.ts +0 -120
  69. package/dist/interfaces/mcp/tool-builder.d.ts.map +0 -1
  70. package/dist/interfaces/mcp/tool-builder.js +0 -224
  71. package/dist/interfaces/mcp/tools/analytics.d.ts +0 -42
  72. package/dist/interfaces/mcp/tools/analytics.d.ts.map +0 -1
  73. package/dist/interfaces/mcp/tools/analytics.js +0 -70
  74. package/dist/interfaces/mcp/tools/cart.d.ts +0 -14
  75. package/dist/interfaces/mcp/tools/cart.d.ts.map +0 -1
  76. package/dist/interfaces/mcp/tools/cart.js +0 -47
  77. package/dist/interfaces/mcp/tools/catalog.d.ts +0 -53
  78. package/dist/interfaces/mcp/tools/catalog.d.ts.map +0 -1
  79. package/dist/interfaces/mcp/tools/catalog.js +0 -284
  80. package/dist/interfaces/mcp/tools/index.d.ts +0 -3
  81. package/dist/interfaces/mcp/tools/index.d.ts.map +0 -1
  82. package/dist/interfaces/mcp/tools/index.js +0 -20
  83. package/dist/interfaces/mcp/tools/inventory.d.ts +0 -27
  84. package/dist/interfaces/mcp/tools/inventory.d.ts.map +0 -1
  85. package/dist/interfaces/mcp/tools/inventory.js +0 -143
  86. package/dist/interfaces/mcp/tools/orders.d.ts +0 -18
  87. package/dist/interfaces/mcp/tools/orders.d.ts.map +0 -1
  88. package/dist/interfaces/mcp/tools/orders.js +0 -82
  89. package/dist/interfaces/mcp/tools/pricing.d.ts +0 -29
  90. package/dist/interfaces/mcp/tools/pricing.d.ts.map +0 -1
  91. package/dist/interfaces/mcp/tools/pricing.js +0 -90
  92. package/dist/interfaces/mcp/tools/promotions.d.ts +0 -44
  93. package/dist/interfaces/mcp/tools/promotions.d.ts.map +0 -1
  94. package/dist/interfaces/mcp/tools/promotions.js +0 -109
  95. package/dist/interfaces/mcp/tools/registry.d.ts +0 -32
  96. package/dist/interfaces/mcp/tools/registry.d.ts.map +0 -1
  97. package/dist/interfaces/mcp/tools/registry.js +0 -55
  98. package/dist/interfaces/mcp/tools/search.d.ts +0 -14
  99. package/dist/interfaces/mcp/tools/search.d.ts.map +0 -1
  100. package/dist/interfaces/mcp/tools/search.js +0 -39
  101. package/dist/interfaces/mcp/tools/webhooks.d.ts +0 -15
  102. package/dist/interfaces/mcp/tools/webhooks.d.ts.map +0 -1
  103. package/dist/interfaces/mcp/tools/webhooks.js +0 -48
  104. package/dist/interfaces/mcp/transport.d.ts +0 -20
  105. package/dist/interfaces/mcp/transport.d.ts.map +0 -1
  106. package/dist/interfaces/mcp/transport.js +0 -99
  107. package/dist/interfaces/rest/customer-portal.d.ts +0 -5
  108. package/dist/interfaces/rest/customer-portal.d.ts.map +0 -1
  109. package/dist/interfaces/rest/customer-portal.js +0 -206
  110. package/dist/interfaces/rest/router.d.ts +0 -164
  111. package/dist/interfaces/rest/router.d.ts.map +0 -1
  112. package/dist/interfaces/rest/router.js +0 -259
  113. package/dist/interfaces/rest/routes/admin-jobs.d.ts +0 -5
  114. package/dist/interfaces/rest/routes/admin-jobs.d.ts.map +0 -1
  115. package/dist/interfaces/rest/routes/admin-jobs.js +0 -48
  116. package/dist/interfaces/rest/routes/audit.d.ts +0 -5
  117. package/dist/interfaces/rest/routes/audit.d.ts.map +0 -1
  118. package/dist/interfaces/rest/routes/audit.js +0 -43
  119. package/dist/interfaces/rest/routes/carts.d.ts +0 -5
  120. package/dist/interfaces/rest/routes/carts.d.ts.map +0 -1
  121. package/dist/interfaces/rest/routes/carts.js +0 -55
  122. package/dist/interfaces/rest/routes/catalog.d.ts +0 -5
  123. package/dist/interfaces/rest/routes/catalog.d.ts.map +0 -1
  124. package/dist/interfaces/rest/routes/catalog.js +0 -256
  125. package/dist/interfaces/rest/routes/checkout.d.ts +0 -5
  126. package/dist/interfaces/rest/routes/checkout.d.ts.map +0 -1
  127. package/dist/interfaces/rest/routes/checkout.js +0 -216
  128. package/dist/interfaces/rest/routes/customers.d.ts +0 -5
  129. package/dist/interfaces/rest/routes/customers.d.ts.map +0 -1
  130. package/dist/interfaces/rest/routes/customers.js +0 -74
  131. package/dist/interfaces/rest/routes/entity-aliases.d.ts +0 -18
  132. package/dist/interfaces/rest/routes/entity-aliases.d.ts.map +0 -1
  133. package/dist/interfaces/rest/routes/entity-aliases.js +0 -39
  134. package/dist/interfaces/rest/routes/inventory.d.ts +0 -5
  135. package/dist/interfaces/rest/routes/inventory.d.ts.map +0 -1
  136. package/dist/interfaces/rest/routes/inventory.js +0 -72
  137. package/dist/interfaces/rest/routes/media.d.ts +0 -5
  138. package/dist/interfaces/rest/routes/media.d.ts.map +0 -1
  139. package/dist/interfaces/rest/routes/media.js +0 -65
  140. package/dist/interfaces/rest/routes/orders.d.ts +0 -5
  141. package/dist/interfaces/rest/routes/orders.d.ts.map +0 -1
  142. package/dist/interfaces/rest/routes/orders.js +0 -64
  143. package/dist/interfaces/rest/routes/payments.d.ts +0 -5
  144. package/dist/interfaces/rest/routes/payments.d.ts.map +0 -1
  145. package/dist/interfaces/rest/routes/payments.js +0 -45
  146. package/dist/interfaces/rest/routes/pricing.d.ts +0 -5
  147. package/dist/interfaces/rest/routes/pricing.d.ts.map +0 -1
  148. package/dist/interfaces/rest/routes/pricing.js +0 -48
  149. package/dist/interfaces/rest/routes/promotions.d.ts +0 -5
  150. package/dist/interfaces/rest/routes/promotions.d.ts.map +0 -1
  151. package/dist/interfaces/rest/routes/promotions.js +0 -76
  152. package/dist/interfaces/rest/routes/search.d.ts +0 -5
  153. package/dist/interfaces/rest/routes/search.d.ts.map +0 -1
  154. package/dist/interfaces/rest/routes/search.js +0 -60
  155. package/dist/interfaces/rest/routes/webhooks.d.ts +0 -5
  156. package/dist/interfaces/rest/routes/webhooks.d.ts.map +0 -1
  157. package/dist/interfaces/rest/routes/webhooks.js +0 -39
  158. package/dist/interfaces/rest/schemas/admin-jobs.d.ts +0 -327
  159. package/dist/interfaces/rest/schemas/admin-jobs.d.ts.map +0 -1
  160. package/dist/interfaces/rest/schemas/admin-jobs.js +0 -37
  161. package/dist/interfaces/rest/schemas/audit.d.ts +0 -59
  162. package/dist/interfaces/rest/schemas/audit.d.ts.map +0 -1
  163. package/dist/interfaces/rest/schemas/audit.js +0 -43
  164. package/dist/interfaces/rest/schemas/carts.d.ts +0 -1456
  165. package/dist/interfaces/rest/schemas/carts.d.ts.map +0 -1
  166. package/dist/interfaces/rest/schemas/carts.js +0 -109
  167. package/dist/interfaces/rest/schemas/catalog.d.ts +0 -5452
  168. package/dist/interfaces/rest/schemas/catalog.d.ts.map +0 -1
  169. package/dist/interfaces/rest/schemas/catalog.js +0 -397
  170. package/dist/interfaces/rest/schemas/checkout.d.ts +0 -160
  171. package/dist/interfaces/rest/schemas/checkout.d.ts.map +0 -1
  172. package/dist/interfaces/rest/schemas/checkout.js +0 -60
  173. package/dist/interfaces/rest/schemas/customer-portal.d.ts +0 -2203
  174. package/dist/interfaces/rest/schemas/customer-portal.d.ts.map +0 -1
  175. package/dist/interfaces/rest/schemas/customer-portal.js +0 -177
  176. package/dist/interfaces/rest/schemas/customers.d.ts +0 -422
  177. package/dist/interfaces/rest/schemas/customers.d.ts.map +0 -1
  178. package/dist/interfaces/rest/schemas/customers.js +0 -150
  179. package/dist/interfaces/rest/schemas/inventory.d.ts +0 -561
  180. package/dist/interfaces/rest/schemas/inventory.d.ts.map +0 -1
  181. package/dist/interfaces/rest/schemas/inventory.js +0 -148
  182. package/dist/interfaces/rest/schemas/media.d.ts +0 -303
  183. package/dist/interfaces/rest/schemas/media.d.ts.map +0 -1
  184. package/dist/interfaces/rest/schemas/media.js +0 -69
  185. package/dist/interfaces/rest/schemas/orders.d.ts +0 -1792
  186. package/dist/interfaces/rest/schemas/orders.d.ts.map +0 -1
  187. package/dist/interfaces/rest/schemas/orders.js +0 -93
  188. package/dist/interfaces/rest/schemas/pricing.d.ts +0 -256
  189. package/dist/interfaces/rest/schemas/pricing.d.ts.map +0 -1
  190. package/dist/interfaces/rest/schemas/pricing.js +0 -72
  191. package/dist/interfaces/rest/schemas/promotions.d.ts +0 -363
  192. package/dist/interfaces/rest/schemas/promotions.d.ts.map +0 -1
  193. package/dist/interfaces/rest/schemas/promotions.js +0 -98
  194. package/dist/interfaces/rest/schemas/responses.d.ts +0 -4086
  195. package/dist/interfaces/rest/schemas/responses.d.ts.map +0 -1
  196. package/dist/interfaces/rest/schemas/responses.js +0 -74
  197. package/dist/interfaces/rest/schemas/search.d.ts +0 -247
  198. package/dist/interfaces/rest/schemas/search.d.ts.map +0 -1
  199. package/dist/interfaces/rest/schemas/search.js +0 -55
  200. package/dist/interfaces/rest/schemas/shared.d.ts +0 -95
  201. package/dist/interfaces/rest/schemas/shared.d.ts.map +0 -1
  202. package/dist/interfaces/rest/schemas/shared.js +0 -51
  203. package/dist/interfaces/rest/schemas/webhooks.d.ts +0 -221
  204. package/dist/interfaces/rest/schemas/webhooks.d.ts.map +0 -1
  205. package/dist/interfaces/rest/schemas/webhooks.js +0 -62
  206. package/dist/interfaces/rest/utils.d.ts +0 -45
  207. package/dist/interfaces/rest/utils.d.ts.map +0 -1
  208. package/dist/interfaces/rest/utils.js +0 -71
  209. package/dist/interfaces/rest/webhook-router.d.ts +0 -41
  210. package/dist/interfaces/rest/webhook-router.d.ts.map +0 -1
  211. package/dist/interfaces/rest/webhook-router.js +0 -36
  212. package/dist/kernel/compensation/executor.d.ts +0 -21
  213. package/dist/kernel/compensation/executor.d.ts.map +0 -1
  214. package/dist/kernel/compensation/executor.js +0 -36
  215. package/dist/kernel/compensation/types.d.ts +0 -25
  216. package/dist/kernel/compensation/types.d.ts.map +0 -1
  217. package/dist/kernel/compensation/types.js +0 -1
  218. package/dist/kernel/database/adapter.d.ts +0 -18
  219. package/dist/kernel/database/adapter.d.ts.map +0 -1
  220. package/dist/kernel/database/adapter.js +0 -3
  221. package/dist/kernel/database/drizzle-db.d.ts +0 -49
  222. package/dist/kernel/database/drizzle-db.d.ts.map +0 -1
  223. package/dist/kernel/database/drizzle-db.js +0 -20
  224. package/dist/kernel/database/migrate.d.ts +0 -38
  225. package/dist/kernel/database/migrate.d.ts.map +0 -1
  226. package/dist/kernel/database/migrate.js +0 -61
  227. package/dist/kernel/database/plugin-types.d.ts +0 -32
  228. package/dist/kernel/database/plugin-types.d.ts.map +0 -1
  229. package/dist/kernel/database/plugin-types.js +0 -10
  230. package/dist/kernel/database/schema.d.ts +0 -24
  231. package/dist/kernel/database/schema.d.ts.map +0 -1
  232. package/dist/kernel/database/schema.js +0 -36
  233. package/dist/kernel/database/scoped-db.d.ts +0 -20
  234. package/dist/kernel/database/scoped-db.d.ts.map +0 -1
  235. package/dist/kernel/database/scoped-db.js +0 -62
  236. package/dist/kernel/database/tx-context.d.ts +0 -15
  237. package/dist/kernel/database/tx-context.d.ts.map +0 -1
  238. package/dist/kernel/database/tx-context.js +0 -19
  239. package/dist/kernel/error-mapper.d.ts +0 -3
  240. package/dist/kernel/error-mapper.d.ts.map +0 -1
  241. package/dist/kernel/error-mapper.js +0 -12
  242. package/dist/kernel/errors.d.ts +0 -38
  243. package/dist/kernel/errors.d.ts.map +0 -1
  244. package/dist/kernel/errors.js +0 -69
  245. package/dist/kernel/factory/repository-factory.d.ts +0 -71
  246. package/dist/kernel/factory/repository-factory.d.ts.map +0 -1
  247. package/dist/kernel/factory/repository-factory.js +0 -138
  248. package/dist/kernel/hooks/create-context.d.ts +0 -25
  249. package/dist/kernel/hooks/create-context.d.ts.map +0 -1
  250. package/dist/kernel/hooks/create-context.js +0 -22
  251. package/dist/kernel/hooks/executor.d.ts +0 -12
  252. package/dist/kernel/hooks/executor.d.ts.map +0 -1
  253. package/dist/kernel/hooks/executor.js +0 -50
  254. package/dist/kernel/hooks/registry.d.ts +0 -28
  255. package/dist/kernel/hooks/registry.d.ts.map +0 -1
  256. package/dist/kernel/hooks/registry.js +0 -58
  257. package/dist/kernel/hooks/types.d.ts +0 -37
  258. package/dist/kernel/hooks/types.d.ts.map +0 -1
  259. package/dist/kernel/hooks/types.js +0 -1
  260. package/dist/kernel/http-error.d.ts +0 -30
  261. package/dist/kernel/http-error.d.ts.map +0 -1
  262. package/dist/kernel/http-error.js +0 -35
  263. package/dist/kernel/jobs/adapter.d.ts +0 -25
  264. package/dist/kernel/jobs/adapter.d.ts.map +0 -1
  265. package/dist/kernel/jobs/adapter.js +0 -9
  266. package/dist/kernel/jobs/drizzle-adapter.d.ts +0 -15
  267. package/dist/kernel/jobs/drizzle-adapter.d.ts.map +0 -1
  268. package/dist/kernel/jobs/drizzle-adapter.js +0 -42
  269. package/dist/kernel/jobs/runner.d.ts +0 -24
  270. package/dist/kernel/jobs/runner.d.ts.map +0 -1
  271. package/dist/kernel/jobs/runner.js +0 -114
  272. package/dist/kernel/jobs/schema.d.ts +0 -280
  273. package/dist/kernel/jobs/schema.d.ts.map +0 -1
  274. package/dist/kernel/jobs/schema.js +0 -37
  275. package/dist/kernel/jobs/types.d.ts +0 -30
  276. package/dist/kernel/jobs/types.d.ts.map +0 -1
  277. package/dist/kernel/jobs/types.js +0 -1
  278. package/dist/kernel/local-api.d.ts +0 -103
  279. package/dist/kernel/local-api.d.ts.map +0 -1
  280. package/dist/kernel/local-api.js +0 -89
  281. package/dist/kernel/plugin/manifest.d.ts +0 -90
  282. package/dist/kernel/plugin/manifest.d.ts.map +0 -1
  283. package/dist/kernel/plugin/manifest.js +0 -169
  284. package/dist/kernel/query/executor.d.ts +0 -21
  285. package/dist/kernel/query/executor.d.ts.map +0 -1
  286. package/dist/kernel/query/executor.js +0 -128
  287. package/dist/kernel/query/registry.d.ts +0 -33
  288. package/dist/kernel/query/registry.d.ts.map +0 -1
  289. package/dist/kernel/query/registry.js +0 -20
  290. package/dist/kernel/result.d.ts +0 -36
  291. package/dist/kernel/result.d.ts.map +0 -1
  292. package/dist/kernel/result.js +0 -16
  293. package/dist/kernel/schema/extra-columns.d.ts +0 -23
  294. package/dist/kernel/schema/extra-columns.d.ts.map +0 -1
  295. package/dist/kernel/schema/extra-columns.js +0 -10
  296. package/dist/kernel/service-registry.d.ts +0 -109
  297. package/dist/kernel/service-registry.d.ts.map +0 -1
  298. package/dist/kernel/service-registry.js +0 -26
  299. package/dist/kernel/service-timing.d.ts +0 -25
  300. package/dist/kernel/service-timing.d.ts.map +0 -1
  301. package/dist/kernel/service-timing.js +0 -62
  302. package/dist/kernel/state-machine/machine.d.ts +0 -24
  303. package/dist/kernel/state-machine/machine.d.ts.map +0 -1
  304. package/dist/kernel/state-machine/machine.js +0 -70
  305. package/dist/modules/analytics/drizzle-adapter.d.ts +0 -13
  306. package/dist/modules/analytics/drizzle-adapter.d.ts.map +0 -1
  307. package/dist/modules/analytics/drizzle-adapter.js +0 -358
  308. package/dist/modules/analytics/hooks.d.ts +0 -13
  309. package/dist/modules/analytics/hooks.d.ts.map +0 -1
  310. package/dist/modules/analytics/hooks.js +0 -12
  311. package/dist/modules/analytics/models.d.ts +0 -14
  312. package/dist/modules/analytics/models.d.ts.map +0 -1
  313. package/dist/modules/analytics/models.js +0 -118
  314. package/dist/modules/analytics/repository/index.d.ts +0 -5
  315. package/dist/modules/analytics/repository/index.d.ts.map +0 -1
  316. package/dist/modules/analytics/repository/index.js +0 -1
  317. package/dist/modules/analytics/service.d.ts +0 -45
  318. package/dist/modules/analytics/service.d.ts.map +0 -1
  319. package/dist/modules/analytics/service.js +0 -196
  320. package/dist/modules/analytics/types.d.ts +0 -119
  321. package/dist/modules/analytics/types.d.ts.map +0 -1
  322. package/dist/modules/analytics/types.js +0 -25
  323. package/dist/modules/audit/hooks.d.ts +0 -7
  324. package/dist/modules/audit/hooks.d.ts.map +0 -1
  325. package/dist/modules/audit/hooks.js +0 -67
  326. package/dist/modules/audit/schema.d.ts +0 -178
  327. package/dist/modules/audit/schema.d.ts.map +0 -1
  328. package/dist/modules/audit/schema.js +0 -21
  329. package/dist/modules/audit/service.d.ts +0 -38
  330. package/dist/modules/audit/service.d.ts.map +0 -1
  331. package/dist/modules/audit/service.js +0 -109
  332. package/dist/modules/cart/access.d.ts +0 -11
  333. package/dist/modules/cart/access.d.ts.map +0 -1
  334. package/dist/modules/cart/access.js +0 -18
  335. package/dist/modules/cart/matcher.d.ts +0 -20
  336. package/dist/modules/cart/matcher.d.ts.map +0 -1
  337. package/dist/modules/cart/matcher.js +0 -2
  338. package/dist/modules/cart/repository/index.d.ts +0 -45
  339. package/dist/modules/cart/repository/index.d.ts.map +0 -1
  340. package/dist/modules/cart/repository/index.js +0 -158
  341. package/dist/modules/cart/schema.d.ts +0 -359
  342. package/dist/modules/cart/schema.d.ts.map +0 -1
  343. package/dist/modules/cart/schema.js +0 -40
  344. package/dist/modules/cart/schemas.d.ts +0 -29
  345. package/dist/modules/cart/schemas.d.ts.map +0 -1
  346. package/dist/modules/cart/schemas.js +0 -14
  347. package/dist/modules/cart/service.d.ts +0 -63
  348. package/dist/modules/cart/service.d.ts.map +0 -1
  349. package/dist/modules/cart/service.js +0 -339
  350. package/dist/modules/catalog/repository/index.d.ts +0 -106
  351. package/dist/modules/catalog/repository/index.d.ts.map +0 -1
  352. package/dist/modules/catalog/repository/index.js +0 -455
  353. package/dist/modules/catalog/schema.d.ts +0 -1193
  354. package/dist/modules/catalog/schema.d.ts.map +0 -1
  355. package/dist/modules/catalog/schema.js +0 -149
  356. package/dist/modules/catalog/schemas.d.ts +0 -81
  357. package/dist/modules/catalog/schemas.d.ts.map +0 -1
  358. package/dist/modules/catalog/schemas.js +0 -62
  359. package/dist/modules/catalog/service.d.ts +0 -160
  360. package/dist/modules/catalog/service.d.ts.map +0 -1
  361. package/dist/modules/catalog/service.js +0 -759
  362. package/dist/modules/customers/repository/index.d.ts +0 -47
  363. package/dist/modules/customers/repository/index.d.ts.map +0 -1
  364. package/dist/modules/customers/repository/index.js +0 -206
  365. package/dist/modules/customers/schema.d.ts +0 -560
  366. package/dist/modules/customers/schema.d.ts.map +0 -1
  367. package/dist/modules/customers/schema.js +0 -60
  368. package/dist/modules/customers/service.d.ts +0 -27
  369. package/dist/modules/customers/service.d.ts.map +0 -1
  370. package/dist/modules/customers/service.js +0 -106
  371. package/dist/modules/fulfillment/repository/index.d.ts +0 -63
  372. package/dist/modules/fulfillment/repository/index.d.ts.map +0 -1
  373. package/dist/modules/fulfillment/repository/index.js +0 -268
  374. package/dist/modules/fulfillment/schema.d.ts +0 -655
  375. package/dist/modules/fulfillment/schema.d.ts.map +0 -1
  376. package/dist/modules/fulfillment/schema.js +0 -83
  377. package/dist/modules/fulfillment/service.d.ts +0 -58
  378. package/dist/modules/fulfillment/service.d.ts.map +0 -1
  379. package/dist/modules/fulfillment/service.js +0 -338
  380. package/dist/modules/fulfillment/types.d.ts +0 -44
  381. package/dist/modules/fulfillment/types.d.ts.map +0 -1
  382. package/dist/modules/fulfillment/types.js +0 -1
  383. package/dist/modules/inventory/repository/index.d.ts +0 -81
  384. package/dist/modules/inventory/repository/index.d.ts.map +0 -1
  385. package/dist/modules/inventory/repository/index.js +0 -310
  386. package/dist/modules/inventory/schema.d.ts +0 -570
  387. package/dist/modules/inventory/schema.d.ts.map +0 -1
  388. package/dist/modules/inventory/schema.js +0 -69
  389. package/dist/modules/inventory/schemas.d.ts +0 -31
  390. package/dist/modules/inventory/schemas.d.ts.map +0 -1
  391. package/dist/modules/inventory/schemas.js +0 -28
  392. package/dist/modules/inventory/service.d.ts +0 -69
  393. package/dist/modules/inventory/service.d.ts.map +0 -1
  394. package/dist/modules/inventory/service.js +0 -283
  395. package/dist/modules/media/adapter.d.ts +0 -16
  396. package/dist/modules/media/adapter.d.ts.map +0 -1
  397. package/dist/modules/media/adapter.js +0 -1
  398. package/dist/modules/media/repository/index.d.ts +0 -35
  399. package/dist/modules/media/repository/index.d.ts.map +0 -1
  400. package/dist/modules/media/repository/index.js +0 -176
  401. package/dist/modules/media/schema.d.ts +0 -289
  402. package/dist/modules/media/schema.d.ts.map +0 -1
  403. package/dist/modules/media/schema.js +0 -35
  404. package/dist/modules/media/service.d.ts +0 -42
  405. package/dist/modules/media/service.d.ts.map +0 -1
  406. package/dist/modules/media/service.js +0 -89
  407. package/dist/modules/orders/repository/index.d.ts +0 -48
  408. package/dist/modules/orders/repository/index.d.ts.map +0 -1
  409. package/dist/modules/orders/repository/index.js +0 -199
  410. package/dist/modules/orders/schema.d.ts +0 -672
  411. package/dist/modules/orders/schema.d.ts.map +0 -1
  412. package/dist/modules/orders/schema.js +0 -63
  413. package/dist/modules/orders/service.d.ts +0 -85
  414. package/dist/modules/orders/service.d.ts.map +0 -1
  415. package/dist/modules/orders/service.js +0 -313
  416. package/dist/modules/orders/stale-order-cleanup.d.ts +0 -27
  417. package/dist/modules/orders/stale-order-cleanup.d.ts.map +0 -1
  418. package/dist/modules/orders/stale-order-cleanup.js +0 -55
  419. package/dist/modules/organization/service.d.ts +0 -53
  420. package/dist/modules/organization/service.d.ts.map +0 -1
  421. package/dist/modules/organization/service.js +0 -151
  422. package/dist/modules/payments/adapter.d.ts +0 -42
  423. package/dist/modules/payments/adapter.d.ts.map +0 -1
  424. package/dist/modules/payments/adapter.js +0 -1
  425. package/dist/modules/payments/repository/index.d.ts +0 -5
  426. package/dist/modules/payments/repository/index.d.ts.map +0 -1
  427. package/dist/modules/payments/repository/index.js +0 -1
  428. package/dist/modules/payments/service.d.ts +0 -23
  429. package/dist/modules/payments/service.d.ts.map +0 -1
  430. package/dist/modules/payments/service.js +0 -72
  431. package/dist/modules/pricing/repository/index.d.ts +0 -34
  432. package/dist/modules/pricing/repository/index.d.ts.map +0 -1
  433. package/dist/modules/pricing/repository/index.js +0 -176
  434. package/dist/modules/pricing/schema.d.ts +0 -565
  435. package/dist/modules/pricing/schema.d.ts.map +0 -1
  436. package/dist/modules/pricing/schema.js +0 -57
  437. package/dist/modules/pricing/schemas.d.ts +0 -37
  438. package/dist/modules/pricing/schemas.d.ts.map +0 -1
  439. package/dist/modules/pricing/schemas.js +0 -30
  440. package/dist/modules/pricing/service.d.ts +0 -62
  441. package/dist/modules/pricing/service.d.ts.map +0 -1
  442. package/dist/modules/pricing/service.js +0 -308
  443. package/dist/modules/promotions/repository/index.d.ts +0 -41
  444. package/dist/modules/promotions/repository/index.d.ts.map +0 -1
  445. package/dist/modules/promotions/repository/index.js +0 -204
  446. package/dist/modules/promotions/schema.d.ts +0 -427
  447. package/dist/modules/promotions/schema.d.ts.map +0 -1
  448. package/dist/modules/promotions/schema.js +0 -52
  449. package/dist/modules/promotions/schemas.d.ts +0 -33
  450. package/dist/modules/promotions/schemas.d.ts.map +0 -1
  451. package/dist/modules/promotions/schemas.js +0 -32
  452. package/dist/modules/promotions/service.d.ts +0 -80
  453. package/dist/modules/promotions/service.d.ts.map +0 -1
  454. package/dist/modules/promotions/service.js +0 -347
  455. package/dist/modules/search/adapter.d.ts +0 -51
  456. package/dist/modules/search/adapter.d.ts.map +0 -1
  457. package/dist/modules/search/adapter.js +0 -1
  458. package/dist/modules/search/hooks.d.ts +0 -8
  459. package/dist/modules/search/hooks.d.ts.map +0 -1
  460. package/dist/modules/search/hooks.js +0 -6
  461. package/dist/modules/search/repository/index.d.ts +0 -5
  462. package/dist/modules/search/repository/index.d.ts.map +0 -1
  463. package/dist/modules/search/repository/index.js +0 -1
  464. package/dist/modules/search/service.d.ts +0 -24
  465. package/dist/modules/search/service.d.ts.map +0 -1
  466. package/dist/modules/search/service.js +0 -217
  467. package/dist/modules/shipping/calculator.d.ts +0 -42
  468. package/dist/modules/shipping/calculator.d.ts.map +0 -1
  469. package/dist/modules/shipping/calculator.js +0 -91
  470. package/dist/modules/shipping/repository/index.d.ts +0 -5
  471. package/dist/modules/shipping/repository/index.d.ts.map +0 -1
  472. package/dist/modules/shipping/repository/index.js +0 -1
  473. package/dist/modules/shipping/service.d.ts +0 -28
  474. package/dist/modules/shipping/service.d.ts.map +0 -1
  475. package/dist/modules/shipping/service.js +0 -20
  476. package/dist/modules/tax/adapter.d.ts +0 -58
  477. package/dist/modules/tax/adapter.d.ts.map +0 -1
  478. package/dist/modules/tax/adapter.js +0 -1
  479. package/dist/modules/tax/repository/index.d.ts +0 -5
  480. package/dist/modules/tax/repository/index.d.ts.map +0 -1
  481. package/dist/modules/tax/repository/index.js +0 -1
  482. package/dist/modules/tax/service.d.ts +0 -19
  483. package/dist/modules/tax/service.d.ts.map +0 -1
  484. package/dist/modules/tax/service.js +0 -34
  485. package/dist/modules/webhooks/hook.d.ts +0 -13
  486. package/dist/modules/webhooks/hook.d.ts.map +0 -1
  487. package/dist/modules/webhooks/hook.js +0 -29
  488. package/dist/modules/webhooks/repository/index.d.ts +0 -40
  489. package/dist/modules/webhooks/repository/index.d.ts.map +0 -1
  490. package/dist/modules/webhooks/repository/index.js +0 -175
  491. package/dist/modules/webhooks/schema.d.ts +0 -404
  492. package/dist/modules/webhooks/schema.d.ts.map +0 -1
  493. package/dist/modules/webhooks/schema.js +0 -40
  494. package/dist/modules/webhooks/service.d.ts +0 -23
  495. package/dist/modules/webhooks/service.d.ts.map +0 -1
  496. package/dist/modules/webhooks/service.js +0 -92
  497. package/dist/modules/webhooks/signing.d.ts +0 -2
  498. package/dist/modules/webhooks/signing.d.ts.map +0 -1
  499. package/dist/modules/webhooks/signing.js +0 -5
  500. package/dist/modules/webhooks/ssrf-guard.d.ts +0 -19
  501. package/dist/modules/webhooks/ssrf-guard.d.ts.map +0 -1
  502. package/dist/modules/webhooks/ssrf-guard.js +0 -79
  503. package/dist/modules/webhooks/tasks.d.ts +0 -16
  504. package/dist/modules/webhooks/tasks.d.ts.map +0 -1
  505. package/dist/modules/webhooks/tasks.js +0 -35
  506. package/dist/modules/webhooks/worker.d.ts +0 -21
  507. package/dist/modules/webhooks/worker.d.ts.map +0 -1
  508. package/dist/modules/webhooks/worker.js +0 -113
  509. package/dist/runtime/commerce.d.ts +0 -110
  510. package/dist/runtime/commerce.d.ts.map +0 -1
  511. package/dist/runtime/commerce.js +0 -37
  512. package/dist/runtime/kernel.d.ts +0 -71
  513. package/dist/runtime/kernel.d.ts.map +0 -1
  514. package/dist/runtime/kernel.js +0 -306
  515. package/dist/runtime/logger.d.ts +0 -11
  516. package/dist/runtime/logger.d.ts.map +0 -1
  517. package/dist/runtime/logger.js +0 -32
  518. package/dist/runtime/shutdown.d.ts +0 -15
  519. package/dist/runtime/shutdown.d.ts.map +0 -1
  520. package/dist/runtime/shutdown.js +0 -34
  521. package/dist/test-utils/create-pglite-adapter.d.ts +0 -32
  522. package/dist/test-utils/create-pglite-adapter.d.ts.map +0 -1
  523. package/dist/test-utils/create-pglite-adapter.js +0 -107
  524. package/dist/test-utils/create-plugin-test-app.d.ts +0 -50
  525. package/dist/test-utils/create-plugin-test-app.d.ts.map +0 -1
  526. package/dist/test-utils/create-plugin-test-app.js +0 -74
  527. package/dist/test-utils/create-repository-test-harness.d.ts +0 -8
  528. package/dist/test-utils/create-repository-test-harness.d.ts.map +0 -1
  529. package/dist/test-utils/create-repository-test-harness.js +0 -7
  530. package/dist/test-utils/create-test-config.d.ts +0 -18
  531. package/dist/test-utils/create-test-config.d.ts.map +0 -1
  532. package/dist/test-utils/create-test-config.js +0 -172
  533. package/dist/test-utils/create-test-kernel.d.ts +0 -3
  534. package/dist/test-utils/create-test-kernel.d.ts.map +0 -1
  535. package/dist/test-utils/create-test-kernel.js +0 -5
  536. package/dist/test-utils/create-test-plugin-context.d.ts +0 -42
  537. package/dist/test-utils/create-test-plugin-context.d.ts.map +0 -1
  538. package/dist/test-utils/create-test-plugin-context.js +0 -46
  539. package/dist/test-utils/rest-api-test-utils.d.ts +0 -64
  540. package/dist/test-utils/rest-api-test-utils.d.ts.map +0 -1
  541. package/dist/test-utils/rest-api-test-utils.js +0 -207
  542. package/dist/test-utils/test-actors.d.ts +0 -15
  543. package/dist/test-utils/test-actors.d.ts.map +0 -1
  544. package/dist/test-utils/test-actors.js +0 -57
  545. package/dist/test-utils/typed-hooks.d.ts +0 -43
  546. package/dist/test-utils/typed-hooks.d.ts.map +0 -1
  547. package/dist/test-utils/typed-hooks.js +0 -35
  548. package/dist/testing.d.ts +0 -14
  549. package/dist/testing.d.ts.map +0 -1
  550. package/dist/testing.js +0 -13
  551. package/dist/tsconfig.tsbuildinfo +0 -1
  552. package/dist/types/commerce-types.d.ts +0 -34
  553. package/dist/types/commerce-types.d.ts.map +0 -1
  554. package/dist/types/commerce-types.js +0 -1
  555. package/dist/utils/id.d.ts +0 -2
  556. package/dist/utils/id.d.ts.map +0 -1
  557. package/dist/utils/id.js +0 -3
  558. package/dist/utils/logger.d.ts +0 -3
  559. package/dist/utils/logger.d.ts.map +0 -1
  560. package/dist/utils/logger.js +0 -16
  561. package/dist/utils/pagination.d.ts +0 -11
  562. package/dist/utils/pagination.d.ts.map +0 -1
  563. package/dist/utils/pagination.js +0 -15
@@ -1,206 +0,0 @@
1
- import { OpenAPIHono } from "@hono/zod-openapi";
2
- import { assertPermission } from "../../auth/permissions.js";
3
- import { getProfileRoute, listAddressesRoute, listCustomerOrdersRoute, getCustomerOrderRoute, getOrderTrackingRoute, getOrderDownloadsRoute, listCoursesRoute, deleteAddressRoute, reorderRoute, updateProfileRoute, createAddressRoute, } from "./schemas/customer-portal.js";
4
- import { isUUID, mapErrorToStatus } from "./utils.js";
5
- export function createCustomerPortalRoutes(kernel) {
6
- const router = new OpenAPIHono();
7
- router.use("*", async (c, next) => {
8
- if (!c.get("actor")) {
9
- return c.json({ error: { code: "FORBIDDEN", message: "Authentication required." } }, 401);
10
- }
11
- await next();
12
- });
13
- /**
14
- * Resolves an actor whose userId is the customer profile UUID (not the Better Auth user ID).
15
- * Required so that `assertOwnership(actor, order.customerId)` compares UUIDs correctly,
16
- * since orders.customer_id stores the customer profile UUID, not the Better Auth string ID.
17
- */
18
- async function resolveCustomerActor(actor) {
19
- const customer = await kernel.services.customers.getByUserId(actor.userId, actor);
20
- if (!customer.ok)
21
- return null;
22
- return { ...actor, userId: customer.value.id };
23
- }
24
- // @ts-expect-error -- openapi handler union return type
25
- router.openapi(getProfileRoute, async (c) => {
26
- const actor = c.get("actor");
27
- const customer = await kernel.services.customers.getByUserId(actor.userId, actor);
28
- if (!customer.ok)
29
- return c.json({ error: customer.error }, 404);
30
- return c.json({ data: customer.value });
31
- });
32
- // @ts-expect-error -- openapi handler union return type
33
- router.openapi(updateProfileRoute, async (c) => {
34
- const actor = c.get("actor");
35
- assertPermission(actor, "customers:update:self");
36
- const result = await kernel.services.customers.updateByUserId(actor.userId, c.req.valid("json"), actor);
37
- if (!result.ok)
38
- return c.json({ error: result.error }, 422);
39
- return c.json({ data: result.value });
40
- });
41
- router.openapi(listAddressesRoute, async (c) => {
42
- const actor = c.get("actor");
43
- const addresses = await kernel.services.customers.getAddresses(actor.userId, actor);
44
- return c.json({ data: addresses.ok ? addresses.value : [] });
45
- });
46
- // @ts-expect-error -- openapi handler union return type
47
- router.openapi(createAddressRoute, async (c) => {
48
- const actor = c.get("actor");
49
- const result = await kernel.services.customers.addAddress(actor.userId, c.req.valid("json"), actor);
50
- if (!result.ok)
51
- return c.json({ error: result.error }, 422);
52
- return c.json({ data: result.value }, 201);
53
- });
54
- // @ts-expect-error -- openapi handler union return type
55
- router.openapi(deleteAddressRoute, async (c) => {
56
- const actor = c.get("actor");
57
- const result = await kernel.services.customers.deleteAddress(actor.userId, c.req.param("id"), actor);
58
- if (!result.ok)
59
- return c.json({ error: result.error }, 404);
60
- return c.json({ data: { deleted: true } });
61
- });
62
- // @ts-expect-error -- openapi handler union return type
63
- router.openapi(listCustomerOrdersRoute, async (c) => {
64
- const actor = c.get("actor");
65
- const status = c.req.query("status");
66
- // Resolve customer profile UUID from Better Auth userId
67
- const customerResult = await kernel.services.customers.getByUserId(actor.userId, actor);
68
- if (!customerResult.ok)
69
- return c.json({ data: [], meta: { total: 0, page: 1, limit: 20, totalPages: 0 } });
70
- const result = await kernel.services.orders.listByCustomer(customerResult.value.id, {
71
- page: Number.parseInt(c.req.query("page") ?? "1", 10),
72
- limit: Number.parseInt(c.req.query("limit") ?? "20", 10),
73
- ...(status !== undefined ? { status } : {}),
74
- });
75
- if (!result.ok)
76
- return c.json({ error: result.error }, 500);
77
- return c.json({ data: result.value.items, meta: result.value.pagination });
78
- });
79
- // @ts-expect-error -- openapi handler union return type
80
- router.openapi(getCustomerOrderRoute, async (c) => {
81
- const actor = c.get("actor");
82
- const id = c.req.param("idOrNumber");
83
- const customerActor = await resolveCustomerActor(actor);
84
- if (!customerActor)
85
- return c.json({ error: { code: "NOT_FOUND", message: "Customer profile not found." } }, 404);
86
- const result = isUUID(id)
87
- ? await kernel.services.orders.getById(id, customerActor)
88
- : await kernel.services.orders.getByNumber(id, customerActor);
89
- if (!result.ok)
90
- return c.json({ error: result.error }, mapErrorToStatus(result.error));
91
- return c.json({ data: result.value });
92
- });
93
- // @ts-expect-error -- openapi handler union return type
94
- router.openapi(getOrderTrackingRoute, async (c) => {
95
- const actor = c.get("actor");
96
- const id = c.req.param("idOrNumber");
97
- const customerActor = await resolveCustomerActor(actor);
98
- if (!customerActor)
99
- return c.json({ error: { code: "NOT_FOUND", message: "Customer profile not found." } }, 404);
100
- const orderResult = isUUID(id)
101
- ? await kernel.services.orders.getById(id, customerActor)
102
- : await kernel.services.orders.getByNumber(id, customerActor);
103
- if (!orderResult.ok) {
104
- return c.json({ error: orderResult.error }, mapErrorToStatus(orderResult.error));
105
- }
106
- const fulfillments = await kernel.services.fulfillment.getByOrderId(orderResult.value.id);
107
- if (!fulfillments.ok)
108
- return c.json({ error: fulfillments.error }, 500);
109
- return c.json({
110
- data: fulfillments.value.map((item) => ({
111
- fulfillmentId: item.id,
112
- status: item.status,
113
- carrier: item.carrier ?? null,
114
- trackingNumber: item.trackingNumber ?? null,
115
- trackingUrl: item.trackingUrl ?? null,
116
- estimatedDelivery: item.estimatedDelivery ?? null,
117
- shippedAt: item.shippedAt ?? null,
118
- deliveredAt: item.deliveredAt ?? null,
119
- lineItems: item.lineItems,
120
- })),
121
- });
122
- });
123
- // @ts-expect-error -- openapi handler union return type
124
- router.openapi(getOrderDownloadsRoute, async (c) => {
125
- const actor = c.get("actor");
126
- const customerActor = await resolveCustomerActor(actor);
127
- if (!customerActor)
128
- return c.json({ error: { code: "NOT_FOUND", message: "Customer profile not found." } }, 404);
129
- const orderResult = await kernel.services.orders.getById(c.req.param("orderId"), customerActor);
130
- if (!orderResult.ok) {
131
- return c.json({ error: orderResult.error }, mapErrorToStatus(orderResult.error));
132
- }
133
- const digitalItems = orderResult.value.lineItems.filter((lineItem) => lineItem.entityType === "digitalDownload");
134
- const downloads = await Promise.all(digitalItems.map(async (lineItem) => {
135
- const result = await kernel.services.fulfillment.getDownloadUrl(orderResult.value.id, lineItem.id, actor.userId, actor);
136
- return {
137
- lineItemId: lineItem.id,
138
- title: lineItem.title,
139
- downloadUrl: result.ok ? result.value.url : null,
140
- downloadsRemaining: result.ok ? result.value.remaining : 0,
141
- expiresAt: result.ok ? result.value.expiresAt : null,
142
- };
143
- }));
144
- return c.json({ data: downloads });
145
- });
146
- // @ts-expect-error -- openapi handler union return type
147
- router.openapi(listCoursesRoute, async (c) => {
148
- const actor = c.get("actor");
149
- const result = await kernel.services.fulfillment.getDigitalAccess(actor.userId, "course");
150
- if (!result.ok)
151
- return c.json({ error: result.error }, 500);
152
- return c.json({
153
- data: result.value.map((item) => ({
154
- entityId: item.entityId,
155
- title: item.title,
156
- accessGrantedAt: item.grantedAt,
157
- accessExpiresAt: item.expiresAt,
158
- isActive: item.isActive,
159
- orderId: item.orderId,
160
- })),
161
- });
162
- });
163
- // @ts-expect-error -- openapi handler union return type
164
- router.openapi(reorderRoute, async (c) => {
165
- const actor = c.get("actor");
166
- const customerActor = await resolveCustomerActor(actor);
167
- if (!customerActor)
168
- return c.json({ error: { code: "NOT_FOUND", message: "Customer profile not found." } }, 404);
169
- const orderResult = await kernel.services.orders.getById(c.req.param("orderId"), customerActor);
170
- if (!orderResult.ok) {
171
- return c.json({ error: orderResult.error }, mapErrorToStatus(orderResult.error));
172
- }
173
- const cartResult = await kernel.services.cart.create({
174
- customerId: actor.userId,
175
- currency: orderResult.value.currency,
176
- }, actor);
177
- if (!cartResult.ok)
178
- return c.json({ error: cartResult.error }, 500);
179
- const addResults = await Promise.all(orderResult.value.lineItems.map((lineItem) => kernel.services.cart.addItem({
180
- cartId: cartResult.value.id,
181
- entityId: lineItem.entityId,
182
- quantity: lineItem.quantity,
183
- unitPriceSnapshot: lineItem.unitPrice,
184
- currency: orderResult.value.currency,
185
- ...(lineItem.variantId != null
186
- ? { variantId: lineItem.variantId }
187
- : {}),
188
- }, actor)));
189
- const failures = addResults
190
- .map((item, index) => item.ok
191
- ? null
192
- : {
193
- item: orderResult.value.lineItems[index]?.title ?? "unknown",
194
- reason: item.error.message,
195
- })
196
- .filter(Boolean);
197
- return c.json({
198
- data: {
199
- cartId: cartResult.value.id,
200
- itemsAdded: addResults.filter((item) => item.ok).length,
201
- itemsFailed: failures,
202
- },
203
- }, 201);
204
- });
205
- return router;
206
- }
@@ -1,164 +0,0 @@
1
- /**
2
- * Type-safe route builder for UnifiedCommerce plugins.
3
- *
4
- * Wraps @hono/zod-openapi's createRoute() with sensible defaults:
5
- * - /api prefix prepended automatically
6
- * - Error responses (400, 401, 403, 404, 422) injected
7
- * - Path params auto-detected from {id} patterns
8
- * - POST defaults to 201, others to 200
9
- * - .auth() enforces login, .permission() enforces specific scope
10
- * - Handler receives { input, params, query, actor, services, db, logger }
11
- * - Return value auto-wrapped in { data: result }
12
- * - Errors auto-caught and mapped to { error: { code, message } }
13
- *
14
- * @example
15
- * ```typescript
16
- * import { router, z } from "@unifiedcommerce/core";
17
- *
18
- * const vendors = router("Vendors", "/marketplace/vendors");
19
- *
20
- * vendors.get("/").summary("List").auth().handler(async ({ actor, services }) => {
21
- * return services.vendor.list();
22
- * });
23
- *
24
- * vendors.post("/").summary("Create").permission("marketplace:admin").input(Schema)
25
- * .handler(async ({ input, services }) => services.vendor.create(input));
26
- * ```
27
- */
28
- import { z } from "@hono/zod-openapi";
29
- import type { PluginRouteRegistration } from "../../kernel/plugin/manifest.js";
30
- export interface RouteHandlerContext {
31
- /** Validated request body (from .input()). Undefined if no .input() was called. */
32
- input: unknown;
33
- /** Validated query parameters (from .query()). Empty object if no .query(). */
34
- query: Record<string, unknown>;
35
- /** Path parameters, auto-extracted from {id} segments. */
36
- params: Record<string, string>;
37
- /** Authenticated actor. Guaranteed non-null if .auth() or .permission() was called. */
38
- actor: {
39
- userId: string;
40
- role: string;
41
- permissions: string[];
42
- vendorId?: string | null;
43
- [key: string]: unknown;
44
- } | null;
45
- /** Resolved organization ID. Derived from actor.organizationId, falls back to DEFAULT_ORG_ID. */
46
- orgId: string;
47
- /** Kernel services (orders, cart, inventory, etc.) */
48
- services: Record<string, unknown>;
49
- /** Drizzle database instance */
50
- db: unknown;
51
- /** Per-request structured logger */
52
- logger: unknown;
53
- /** Request ID */
54
- requestId: string;
55
- /** Raw Hono context (escape hatch) */
56
- raw: unknown;
57
- }
58
- declare class RouteChain {
59
- private method;
60
- private fullPath;
61
- private tag;
62
- private routesList;
63
- private pluginCtx?;
64
- private _summary;
65
- private _description;
66
- private _input;
67
- private _query;
68
- private _params;
69
- private _requireAuth;
70
- private _requiredPermission;
71
- constructor(method: string, fullPath: string, tag: string, routesList: PluginRouteRegistration[], pluginCtx?: {
72
- services: Record<string, unknown>;
73
- db: unknown;
74
- } | undefined);
75
- /** Set the OpenAPI summary for this route. */
76
- summary(text: string): this;
77
- /** Set the OpenAPI description for this route. */
78
- description(text: string): this;
79
- /** Set the request body schema. Only for POST/PATCH/PUT. */
80
- input(schema: z.ZodType): this;
81
- /** Set the query parameter schema. */
82
- query(schema: z.ZodType): this;
83
- /** Override the auto-detected path parameter schema. */
84
- params(schema: z.ZodType): this;
85
- /**
86
- * Require authentication. The handler's `actor` is guaranteed non-null.
87
- * Returns 401 if the request has no authenticated actor.
88
- */
89
- auth(): this;
90
- /**
91
- * Require a specific permission scope. Implies .auth().
92
- * Returns 401 if not authenticated, 403 if the actor lacks the permission.
93
- *
94
- * Permission scopes should be declared in the plugin's `permissions` manifest.
95
- * The wildcard `*:*` always passes.
96
- *
97
- * @example
98
- * ```typescript
99
- * vendors.post("/").permission("marketplace:admin").handler(...)
100
- * wishlist.post("/").permission("wishlist:write").handler(...)
101
- * ```
102
- */
103
- permission(scope: string): this;
104
- /**
105
- * Register the handler for this route.
106
- *
107
- * The handler receives a context object with typed input, params, query,
108
- * actor, services, and db. Return data is auto-wrapped in { data: result }.
109
- * Thrown errors are auto-caught and mapped to { error: { code, message } }.
110
- */
111
- handler(fn: (ctx: RouteHandlerContext) => Promise<unknown>): void;
112
- }
113
- declare class RouterImpl {
114
- private tag;
115
- private _routes;
116
- private _prefix;
117
- private _pluginCtx;
118
- constructor(tag: string, prefix: string, pluginCtx?: {
119
- services?: Record<string, unknown>;
120
- database?: {
121
- db: unknown;
122
- };
123
- });
124
- /** @internal — used by RouteChain to wire plugin context into handlers */
125
- get pluginContext(): {
126
- services: Record<string, unknown>;
127
- db: unknown;
128
- } | undefined;
129
- private resolvePath;
130
- get(path: string): RouteChain;
131
- post(path: string): RouteChain;
132
- patch(path: string): RouteChain;
133
- delete(path: string): RouteChain;
134
- put(path: string): RouteChain;
135
- /** Returns all registered routes as PluginRouteRegistration[] */
136
- routes(): PluginRouteRegistration[];
137
- }
138
- /**
139
- * Create a typed route group for plugin routes.
140
- *
141
- * @param tag — OpenAPI tag for Swagger UI grouping
142
- * @param prefix — Path prefix without /api (e.g., "/marketplace/vendors"). /api is prepended automatically.
143
- * @param ctx — Optional PluginContext. When provided, handler receives { services, db } from the plugin.
144
- *
145
- * @example
146
- * ```typescript
147
- * // In plugin routes callback:
148
- * routes: (ctx) => {
149
- * const r = router("Vendors", "/marketplace/vendors", ctx);
150
- * r.get("/").summary("List").handler(async ({ services }) => {
151
- * return (services as VendorServices).vendor.list();
152
- * });
153
- * return r.routes();
154
- * }
155
- * ```
156
- */
157
- export declare function router(tag: string, prefix: string, ctx?: {
158
- services?: Record<string, unknown>;
159
- database?: {
160
- db: unknown;
161
- };
162
- }): RouterImpl;
163
- export {};
164
- //# sourceMappingURL=router.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"router.d.ts","sourceRoot":"","sources":["../../../src/interfaces/rest/router.ts"],"names":[],"mappings":"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"}
@@ -1,259 +0,0 @@
1
- /**
2
- * Type-safe route builder for UnifiedCommerce plugins.
3
- *
4
- * Wraps @hono/zod-openapi's createRoute() with sensible defaults:
5
- * - /api prefix prepended automatically
6
- * - Error responses (400, 401, 403, 404, 422) injected
7
- * - Path params auto-detected from {id} patterns
8
- * - POST defaults to 201, others to 200
9
- * - .auth() enforces login, .permission() enforces specific scope
10
- * - Handler receives { input, params, query, actor, services, db, logger }
11
- * - Return value auto-wrapped in { data: result }
12
- * - Errors auto-caught and mapped to { error: { code, message } }
13
- *
14
- * @example
15
- * ```typescript
16
- * import { router, z } from "@unifiedcommerce/core";
17
- *
18
- * const vendors = router("Vendors", "/marketplace/vendors");
19
- *
20
- * vendors.get("/").summary("List").auth().handler(async ({ actor, services }) => {
21
- * return services.vendor.list();
22
- * });
23
- *
24
- * vendors.post("/").summary("Create").permission("marketplace:admin").input(Schema)
25
- * .handler(async ({ input, services }) => services.vendor.create(input));
26
- * ```
27
- */
28
- import { createRoute, z } from "@hono/zod-openapi";
29
- import { ErrorSchema } from "./schemas/shared.js";
30
- import { mapErrorToResponse, mapErrorToStatus } from "./utils.js";
31
- import { createScopedDb } from "../../kernel/database/scoped-db.js";
32
- import { resolveOrgId } from "../../auth/org.js";
33
- // ─── Shared OpenAPI Error Responses ──────────────────────────────────────────
34
- const errorResponses = {
35
- 400: { content: { "application/json": { schema: ErrorSchema } }, description: "Bad request." },
36
- 401: { content: { "application/json": { schema: ErrorSchema } }, description: "Unauthorized." },
37
- 403: { content: { "application/json": { schema: ErrorSchema } }, description: "Forbidden." },
38
- 404: { content: { "application/json": { schema: ErrorSchema } }, description: "Not found." },
39
- 422: { content: { "application/json": { schema: ErrorSchema } }, description: "Validation error." },
40
- };
41
- function wrapJson(schema) {
42
- return { content: { "application/json": { schema } }, description: "Success" };
43
- }
44
- function extractPathParams(path) {
45
- return [...path.matchAll(/\{(\w+)\}/g)].map((m) => m[1]);
46
- }
47
- // ─── Route Chain ─────────────────────────────────────────────────────────────
48
- class RouteChain {
49
- method;
50
- fullPath;
51
- tag;
52
- routesList;
53
- pluginCtx;
54
- _summary = "";
55
- _description = "";
56
- _input;
57
- _query;
58
- _params;
59
- _requireAuth = false;
60
- _requiredPermission;
61
- constructor(method, fullPath, tag, routesList, pluginCtx) {
62
- this.method = method;
63
- this.fullPath = fullPath;
64
- this.tag = tag;
65
- this.routesList = routesList;
66
- this.pluginCtx = pluginCtx;
67
- const paramNames = extractPathParams(fullPath);
68
- if (paramNames.length > 0) {
69
- this._params = z.object(Object.fromEntries(paramNames.map((n) => [n, z.uuid()])));
70
- }
71
- }
72
- /** Set the OpenAPI summary for this route. */
73
- summary(text) { this._summary = text; return this; }
74
- /** Set the OpenAPI description for this route. */
75
- description(text) { this._description = text; return this; }
76
- /** Set the request body schema. Only for POST/PATCH/PUT. */
77
- input(schema) { this._input = schema; return this; }
78
- /** Set the query parameter schema. */
79
- query(schema) { this._query = schema; return this; }
80
- /** Override the auto-detected path parameter schema. */
81
- params(schema) { this._params = schema; return this; }
82
- /**
83
- * Require authentication. The handler's `actor` is guaranteed non-null.
84
- * Returns 401 if the request has no authenticated actor.
85
- */
86
- auth() { this._requireAuth = true; return this; }
87
- /**
88
- * Require a specific permission scope. Implies .auth().
89
- * Returns 401 if not authenticated, 403 if the actor lacks the permission.
90
- *
91
- * Permission scopes should be declared in the plugin's `permissions` manifest.
92
- * The wildcard `*:*` always passes.
93
- *
94
- * @example
95
- * ```typescript
96
- * vendors.post("/").permission("marketplace:admin").handler(...)
97
- * wishlist.post("/").permission("wishlist:write").handler(...)
98
- * ```
99
- */
100
- permission(scope) {
101
- this._requireAuth = true;
102
- this._requiredPermission = scope;
103
- return this;
104
- }
105
- /**
106
- * Register the handler for this route.
107
- *
108
- * The handler receives a context object with typed input, params, query,
109
- * actor, services, and db. Return data is auto-wrapped in { data: result }.
110
- * Thrown errors are auto-caught and mapped to { error: { code, message } }.
111
- */
112
- handler(fn) {
113
- const request = {};
114
- if (this._input)
115
- request.body = { ...wrapJson(this._input), required: true };
116
- if (this._query)
117
- request.query = this._query;
118
- if (this._params)
119
- request.params = this._params;
120
- const status = this.method === "post" ? 201 : 200;
121
- const routeConfig = createRoute({
122
- method: this.method,
123
- path: this.fullPath,
124
- tags: [this.tag],
125
- summary: this._summary,
126
- ...(this._description ? { description: this._description } : {}),
127
- ...(Object.keys(request).length > 0 ? { request } : {}),
128
- responses: {
129
- [status]: wrapJson(z.object({ data: z.any() })),
130
- ...errorResponses,
131
- },
132
- });
133
- const inputSchema = this._input;
134
- const querySchema = this._query;
135
- const pathParams = extractPathParams(this.fullPath);
136
- const successStatus = status;
137
- const requireAuth = this._requireAuth;
138
- const requiredPermission = this._requiredPermission;
139
- const pluginCtx = this.pluginCtx;
140
- const honoHandler = async (c) => {
141
- const ctx = c;
142
- try {
143
- // ─── Auth + Permission Check ─────────────────────────────────
144
- // .permission() implies .auth() — both are enforced here.
145
- // Order: auth first (401), then permission (403).
146
- const actor = ctx.get("actor");
147
- if ((requireAuth || requiredPermission) && !actor) {
148
- return ctx.json({ error: { code: "UNAUTHORIZED", message: "Authentication required." } }, 401);
149
- }
150
- if (requiredPermission) {
151
- const perms = actor?.permissions ?? [];
152
- if (!perms.includes(requiredPermission) && !perms.includes("*:*")) {
153
- return ctx.json({
154
- error: { code: "FORBIDDEN", message: `Permission '${requiredPermission}' is required.` },
155
- }, 403);
156
- }
157
- }
158
- // ─── Extract context ─────────────────────────────────────────
159
- const params = {};
160
- for (const name of pathParams) {
161
- params[name] = ctx.req.param(name);
162
- }
163
- // Use plugin context if provided (plugin routes), fallback to kernel on Hono context (core routes)
164
- const kernel = pluginCtx ?? ctx.get("kernel");
165
- // Scope the database to the actor's organization.
166
- // Plugin route handlers receive a db that auto-filters queries
167
- // and auto-stamps inserts with the actor's organizationId.
168
- const rawDb = kernel?.db;
169
- const orgId = resolveOrgId(actor);
170
- const scopedDb = rawDb ? createScopedDb(rawDb, orgId) : rawDb;
171
- const handlerCtx = {
172
- input: inputSchema ? ctx.req.valid("json") : undefined,
173
- query: querySchema ? ctx.req.valid("query") : {},
174
- params,
175
- actor,
176
- orgId,
177
- services: kernel?.services ?? {},
178
- db: scopedDb,
179
- logger: ctx.get("logger"),
180
- requestId: ctx.get("requestId") ?? "",
181
- raw: c,
182
- };
183
- const result = await fn(handlerCtx);
184
- if (result === undefined || result === null) {
185
- return ctx.json({ data: null }, successStatus);
186
- }
187
- return ctx.json({ data: result }, successStatus);
188
- }
189
- catch (error) {
190
- try {
191
- return ctx.json(mapErrorToResponse(error), mapErrorToStatus(error));
192
- }
193
- catch {
194
- // Fallback if mapErrorToResponse/mapErrorToStatus themselves throw
195
- return ctx.json({ error: { code: "INTERNAL_ERROR", message: "An unexpected error occurred." } }, 500);
196
- }
197
- }
198
- };
199
- this.routesList.push({ openapi: routeConfig, handler: honoHandler });
200
- }
201
- }
202
- // ─── Router ──────────────────────────────────────────────────────────────────
203
- class RouterImpl {
204
- tag;
205
- _routes = [];
206
- _prefix;
207
- _pluginCtx;
208
- constructor(tag, prefix, pluginCtx) {
209
- this.tag = tag;
210
- // Normalize: ensure /api prefix, strip trailing slash
211
- let p = prefix.startsWith("/api") ? prefix : `/api${prefix}`;
212
- p = p.replace(/\/+$/, ""); // remove trailing slashes
213
- this._prefix = p;
214
- // If plugin context is provided, wire services + db for handler access
215
- if (pluginCtx) {
216
- this._pluginCtx = {
217
- services: pluginCtx.services ?? {},
218
- db: pluginCtx.database?.db,
219
- };
220
- }
221
- }
222
- /** @internal — used by RouteChain to wire plugin context into handlers */
223
- get pluginContext() { return this._pluginCtx; }
224
- resolvePath(path) {
225
- // "/" means "the resource root" → just the prefix, no trailing slash
226
- if (path === "/")
227
- return this._prefix;
228
- return (this._prefix + path).replace(/\/\/+/g, "/");
229
- }
230
- get(path) { return new RouteChain("get", this.resolvePath(path), this.tag, this._routes, this._pluginCtx); }
231
- post(path) { return new RouteChain("post", this.resolvePath(path), this.tag, this._routes, this._pluginCtx); }
232
- patch(path) { return new RouteChain("patch", this.resolvePath(path), this.tag, this._routes, this._pluginCtx); }
233
- delete(path) { return new RouteChain("delete", this.resolvePath(path), this.tag, this._routes, this._pluginCtx); }
234
- put(path) { return new RouteChain("put", this.resolvePath(path), this.tag, this._routes, this._pluginCtx); }
235
- /** Returns all registered routes as PluginRouteRegistration[] */
236
- routes() { return this._routes; }
237
- }
238
- /**
239
- * Create a typed route group for plugin routes.
240
- *
241
- * @param tag — OpenAPI tag for Swagger UI grouping
242
- * @param prefix — Path prefix without /api (e.g., "/marketplace/vendors"). /api is prepended automatically.
243
- * @param ctx — Optional PluginContext. When provided, handler receives { services, db } from the plugin.
244
- *
245
- * @example
246
- * ```typescript
247
- * // In plugin routes callback:
248
- * routes: (ctx) => {
249
- * const r = router("Vendors", "/marketplace/vendors", ctx);
250
- * r.get("/").summary("List").handler(async ({ services }) => {
251
- * return (services as VendorServices).vendor.list();
252
- * });
253
- * return r.routes();
254
- * }
255
- * ```
256
- */
257
- export function router(tag, prefix, ctx) {
258
- return new RouterImpl(tag, prefix, ctx);
259
- }
@@ -1,5 +0,0 @@
1
- import { OpenAPIHono } from "@hono/zod-openapi";
2
- import type { Kernel } from "../../../runtime/kernel.js";
3
- import { type AppEnv } from "../utils.js";
4
- export declare function adminJobRoutes(kernel: Kernel): OpenAPIHono<AppEnv, {}, "/">;
5
- //# sourceMappingURL=admin-jobs.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"admin-jobs.d.ts","sourceRoot":"","sources":["../../../../src/interfaces/rest/routes/admin-jobs.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAGhD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,4BAA4B,CAAC;AAGzD,OAAO,EAAE,KAAK,MAAM,EAAe,MAAM,aAAa,CAAC;AAKvD,wBAAgB,cAAc,CAAC,MAAM,EAAE,MAAM,gCA8C5C"}