@unifiedcommerce/core 0.4.4 → 0.4.5

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 (556) hide show
  1. package/dist/adapters/console-email.d.ts +23 -0
  2. package/dist/adapters/console-email.d.ts.map +1 -0
  3. package/dist/adapters/console-email.js +38 -0
  4. package/dist/auth/access.d.ts +101 -0
  5. package/dist/auth/access.d.ts.map +1 -0
  6. package/dist/auth/access.js +128 -0
  7. package/dist/auth/auth-schema.d.ts +1475 -0
  8. package/dist/auth/auth-schema.d.ts.map +1 -0
  9. package/dist/auth/auth-schema.js +124 -0
  10. package/dist/auth/middleware.d.ts +5 -0
  11. package/dist/auth/middleware.d.ts.map +1 -0
  12. package/dist/auth/middleware.js +141 -0
  13. package/dist/auth/org.d.ts +22 -0
  14. package/dist/auth/org.d.ts.map +1 -0
  15. package/dist/auth/org.js +36 -0
  16. package/dist/auth/permissions.d.ts +4 -0
  17. package/dist/auth/permissions.d.ts.map +1 -0
  18. package/dist/auth/permissions.js +24 -0
  19. package/dist/auth/setup.d.ts +29 -0
  20. package/dist/auth/setup.d.ts.map +1 -0
  21. package/dist/auth/setup.js +117 -0
  22. package/dist/auth/system-actor.d.ts +7 -0
  23. package/dist/auth/system-actor.d.ts.map +1 -0
  24. package/dist/auth/system-actor.js +17 -0
  25. package/dist/auth/types.d.ts +11 -0
  26. package/dist/auth/types.d.ts.map +1 -0
  27. package/dist/auth/types.js +1 -0
  28. package/dist/config/defaults.d.ts +3 -0
  29. package/dist/config/defaults.d.ts.map +1 -0
  30. package/dist/config/defaults.js +80 -0
  31. package/dist/config/define-config.d.ts +9 -0
  32. package/dist/config/define-config.d.ts.map +1 -0
  33. package/dist/config/define-config.js +44 -0
  34. package/dist/config/types.d.ts +327 -0
  35. package/dist/config/types.d.ts.map +1 -0
  36. package/dist/config/types.js +1 -0
  37. package/dist/generated/plugin-manifest.d.ts +48 -0
  38. package/dist/generated/plugin-manifest.d.ts.map +1 -0
  39. package/dist/generated/plugin-manifest.js +20 -0
  40. package/dist/hooks/checkout-completion.d.ts +58 -0
  41. package/dist/hooks/checkout-completion.d.ts.map +1 -0
  42. package/dist/hooks/checkout-completion.js +137 -0
  43. package/dist/hooks/checkout.d.ts +99 -0
  44. package/dist/hooks/checkout.d.ts.map +1 -0
  45. package/dist/hooks/checkout.js +317 -0
  46. package/dist/hooks/order-emails.d.ts +16 -0
  47. package/dist/hooks/order-emails.d.ts.map +1 -0
  48. package/dist/hooks/order-emails.js +44 -0
  49. package/dist/index.d.ts +77 -0
  50. package/dist/index.d.ts.map +1 -0
  51. package/dist/index.js +45 -0
  52. package/dist/interfaces/mcp/agent-prompt.d.ts +16 -0
  53. package/dist/interfaces/mcp/agent-prompt.d.ts.map +1 -0
  54. package/dist/interfaces/mcp/agent-prompt.js +172 -0
  55. package/dist/interfaces/mcp/context-enrichment.d.ts +39 -0
  56. package/dist/interfaces/mcp/context-enrichment.d.ts.map +1 -0
  57. package/dist/interfaces/mcp/context-enrichment.js +119 -0
  58. package/dist/interfaces/mcp/server.d.ts +5 -0
  59. package/dist/interfaces/mcp/server.d.ts.map +1 -0
  60. package/dist/interfaces/mcp/server.js +30 -0
  61. package/dist/interfaces/mcp/tool-builder.d.ts +120 -0
  62. package/dist/interfaces/mcp/tool-builder.d.ts.map +1 -0
  63. package/dist/interfaces/mcp/tool-builder.js +224 -0
  64. package/dist/interfaces/mcp/tools/analytics.d.ts +42 -0
  65. package/dist/interfaces/mcp/tools/analytics.d.ts.map +1 -0
  66. package/dist/interfaces/mcp/tools/analytics.js +70 -0
  67. package/dist/interfaces/mcp/tools/cart.d.ts +14 -0
  68. package/dist/interfaces/mcp/tools/cart.d.ts.map +1 -0
  69. package/dist/interfaces/mcp/tools/cart.js +47 -0
  70. package/dist/interfaces/mcp/tools/catalog.d.ts +53 -0
  71. package/dist/interfaces/mcp/tools/catalog.d.ts.map +1 -0
  72. package/dist/interfaces/mcp/tools/catalog.js +284 -0
  73. package/dist/interfaces/mcp/tools/index.d.ts +3 -0
  74. package/dist/interfaces/mcp/tools/index.d.ts.map +1 -0
  75. package/dist/interfaces/mcp/tools/index.js +20 -0
  76. package/dist/interfaces/mcp/tools/inventory.d.ts +27 -0
  77. package/dist/interfaces/mcp/tools/inventory.d.ts.map +1 -0
  78. package/dist/interfaces/mcp/tools/inventory.js +143 -0
  79. package/dist/interfaces/mcp/tools/orders.d.ts +18 -0
  80. package/dist/interfaces/mcp/tools/orders.d.ts.map +1 -0
  81. package/dist/interfaces/mcp/tools/orders.js +82 -0
  82. package/dist/interfaces/mcp/tools/pricing.d.ts +29 -0
  83. package/dist/interfaces/mcp/tools/pricing.d.ts.map +1 -0
  84. package/dist/interfaces/mcp/tools/pricing.js +90 -0
  85. package/dist/interfaces/mcp/tools/promotions.d.ts +44 -0
  86. package/dist/interfaces/mcp/tools/promotions.d.ts.map +1 -0
  87. package/dist/interfaces/mcp/tools/promotions.js +109 -0
  88. package/dist/interfaces/mcp/tools/registry.d.ts +32 -0
  89. package/dist/interfaces/mcp/tools/registry.d.ts.map +1 -0
  90. package/dist/interfaces/mcp/tools/registry.js +55 -0
  91. package/dist/interfaces/mcp/tools/search.d.ts +14 -0
  92. package/dist/interfaces/mcp/tools/search.d.ts.map +1 -0
  93. package/dist/interfaces/mcp/tools/search.js +39 -0
  94. package/dist/interfaces/mcp/tools/webhooks.d.ts +15 -0
  95. package/dist/interfaces/mcp/tools/webhooks.d.ts.map +1 -0
  96. package/dist/interfaces/mcp/tools/webhooks.js +48 -0
  97. package/dist/interfaces/mcp/transport.d.ts +20 -0
  98. package/dist/interfaces/mcp/transport.d.ts.map +1 -0
  99. package/dist/interfaces/mcp/transport.js +99 -0
  100. package/dist/interfaces/rest/customer-portal.d.ts +5 -0
  101. package/dist/interfaces/rest/customer-portal.d.ts.map +1 -0
  102. package/dist/interfaces/rest/customer-portal.js +206 -0
  103. package/dist/interfaces/rest/router.d.ts +164 -0
  104. package/dist/interfaces/rest/router.d.ts.map +1 -0
  105. package/dist/interfaces/rest/router.js +259 -0
  106. package/dist/interfaces/rest/routes/admin-jobs.d.ts +5 -0
  107. package/dist/interfaces/rest/routes/admin-jobs.d.ts.map +1 -0
  108. package/dist/interfaces/rest/routes/admin-jobs.js +48 -0
  109. package/dist/interfaces/rest/routes/audit.d.ts +5 -0
  110. package/dist/interfaces/rest/routes/audit.d.ts.map +1 -0
  111. package/dist/interfaces/rest/routes/audit.js +43 -0
  112. package/dist/interfaces/rest/routes/carts.d.ts +5 -0
  113. package/dist/interfaces/rest/routes/carts.d.ts.map +1 -0
  114. package/dist/interfaces/rest/routes/carts.js +55 -0
  115. package/dist/interfaces/rest/routes/catalog.d.ts +5 -0
  116. package/dist/interfaces/rest/routes/catalog.d.ts.map +1 -0
  117. package/dist/interfaces/rest/routes/catalog.js +256 -0
  118. package/dist/interfaces/rest/routes/checkout.d.ts +5 -0
  119. package/dist/interfaces/rest/routes/checkout.d.ts.map +1 -0
  120. package/dist/interfaces/rest/routes/checkout.js +216 -0
  121. package/dist/interfaces/rest/routes/customers.d.ts +5 -0
  122. package/dist/interfaces/rest/routes/customers.d.ts.map +1 -0
  123. package/dist/interfaces/rest/routes/customers.js +74 -0
  124. package/dist/interfaces/rest/routes/entity-aliases.d.ts +18 -0
  125. package/dist/interfaces/rest/routes/entity-aliases.d.ts.map +1 -0
  126. package/dist/interfaces/rest/routes/entity-aliases.js +39 -0
  127. package/dist/interfaces/rest/routes/inventory.d.ts +5 -0
  128. package/dist/interfaces/rest/routes/inventory.d.ts.map +1 -0
  129. package/dist/interfaces/rest/routes/inventory.js +72 -0
  130. package/dist/interfaces/rest/routes/media.d.ts +5 -0
  131. package/dist/interfaces/rest/routes/media.d.ts.map +1 -0
  132. package/dist/interfaces/rest/routes/media.js +65 -0
  133. package/dist/interfaces/rest/routes/orders.d.ts +5 -0
  134. package/dist/interfaces/rest/routes/orders.d.ts.map +1 -0
  135. package/dist/interfaces/rest/routes/orders.js +64 -0
  136. package/dist/interfaces/rest/routes/payments.d.ts +5 -0
  137. package/dist/interfaces/rest/routes/payments.d.ts.map +1 -0
  138. package/dist/interfaces/rest/routes/payments.js +45 -0
  139. package/dist/interfaces/rest/routes/pricing.d.ts +5 -0
  140. package/dist/interfaces/rest/routes/pricing.d.ts.map +1 -0
  141. package/dist/interfaces/rest/routes/pricing.js +48 -0
  142. package/dist/interfaces/rest/routes/promotions.d.ts +5 -0
  143. package/dist/interfaces/rest/routes/promotions.d.ts.map +1 -0
  144. package/dist/interfaces/rest/routes/promotions.js +76 -0
  145. package/dist/interfaces/rest/routes/search.d.ts +5 -0
  146. package/dist/interfaces/rest/routes/search.d.ts.map +1 -0
  147. package/dist/interfaces/rest/routes/search.js +60 -0
  148. package/dist/interfaces/rest/routes/webhooks.d.ts +5 -0
  149. package/dist/interfaces/rest/routes/webhooks.d.ts.map +1 -0
  150. package/dist/interfaces/rest/routes/webhooks.js +39 -0
  151. package/dist/interfaces/rest/schemas/admin-jobs.d.ts +327 -0
  152. package/dist/interfaces/rest/schemas/admin-jobs.d.ts.map +1 -0
  153. package/dist/interfaces/rest/schemas/admin-jobs.js +37 -0
  154. package/dist/interfaces/rest/schemas/audit.d.ts +59 -0
  155. package/dist/interfaces/rest/schemas/audit.d.ts.map +1 -0
  156. package/dist/interfaces/rest/schemas/audit.js +43 -0
  157. package/dist/interfaces/rest/schemas/carts.d.ts +1456 -0
  158. package/dist/interfaces/rest/schemas/carts.d.ts.map +1 -0
  159. package/dist/interfaces/rest/schemas/carts.js +109 -0
  160. package/dist/interfaces/rest/schemas/catalog.d.ts +5452 -0
  161. package/dist/interfaces/rest/schemas/catalog.d.ts.map +1 -0
  162. package/dist/interfaces/rest/schemas/catalog.js +397 -0
  163. package/dist/interfaces/rest/schemas/checkout.d.ts +160 -0
  164. package/dist/interfaces/rest/schemas/checkout.d.ts.map +1 -0
  165. package/dist/interfaces/rest/schemas/checkout.js +60 -0
  166. package/dist/interfaces/rest/schemas/customer-portal.d.ts +2203 -0
  167. package/dist/interfaces/rest/schemas/customer-portal.d.ts.map +1 -0
  168. package/dist/interfaces/rest/schemas/customer-portal.js +177 -0
  169. package/dist/interfaces/rest/schemas/customers.d.ts +422 -0
  170. package/dist/interfaces/rest/schemas/customers.d.ts.map +1 -0
  171. package/dist/interfaces/rest/schemas/customers.js +150 -0
  172. package/dist/interfaces/rest/schemas/inventory.d.ts +561 -0
  173. package/dist/interfaces/rest/schemas/inventory.d.ts.map +1 -0
  174. package/dist/interfaces/rest/schemas/inventory.js +148 -0
  175. package/dist/interfaces/rest/schemas/media.d.ts +303 -0
  176. package/dist/interfaces/rest/schemas/media.d.ts.map +1 -0
  177. package/dist/interfaces/rest/schemas/media.js +69 -0
  178. package/dist/interfaces/rest/schemas/orders.d.ts +1792 -0
  179. package/dist/interfaces/rest/schemas/orders.d.ts.map +1 -0
  180. package/dist/interfaces/rest/schemas/orders.js +93 -0
  181. package/dist/interfaces/rest/schemas/pricing.d.ts +256 -0
  182. package/dist/interfaces/rest/schemas/pricing.d.ts.map +1 -0
  183. package/dist/interfaces/rest/schemas/pricing.js +72 -0
  184. package/dist/interfaces/rest/schemas/promotions.d.ts +363 -0
  185. package/dist/interfaces/rest/schemas/promotions.d.ts.map +1 -0
  186. package/dist/interfaces/rest/schemas/promotions.js +98 -0
  187. package/dist/interfaces/rest/schemas/responses.d.ts +4086 -0
  188. package/dist/interfaces/rest/schemas/responses.d.ts.map +1 -0
  189. package/dist/interfaces/rest/schemas/responses.js +74 -0
  190. package/dist/interfaces/rest/schemas/search.d.ts +247 -0
  191. package/dist/interfaces/rest/schemas/search.d.ts.map +1 -0
  192. package/dist/interfaces/rest/schemas/search.js +55 -0
  193. package/dist/interfaces/rest/schemas/shared.d.ts +95 -0
  194. package/dist/interfaces/rest/schemas/shared.d.ts.map +1 -0
  195. package/dist/interfaces/rest/schemas/shared.js +51 -0
  196. package/dist/interfaces/rest/schemas/webhooks.d.ts +221 -0
  197. package/dist/interfaces/rest/schemas/webhooks.d.ts.map +1 -0
  198. package/dist/interfaces/rest/schemas/webhooks.js +62 -0
  199. package/dist/interfaces/rest/utils.d.ts +45 -0
  200. package/dist/interfaces/rest/utils.d.ts.map +1 -0
  201. package/dist/interfaces/rest/utils.js +71 -0
  202. package/dist/interfaces/rest/webhook-router.d.ts +41 -0
  203. package/dist/interfaces/rest/webhook-router.d.ts.map +1 -0
  204. package/dist/interfaces/rest/webhook-router.js +36 -0
  205. package/dist/kernel/compensation/executor.d.ts +21 -0
  206. package/dist/kernel/compensation/executor.d.ts.map +1 -0
  207. package/dist/kernel/compensation/executor.js +36 -0
  208. package/dist/kernel/compensation/types.d.ts +25 -0
  209. package/dist/kernel/compensation/types.d.ts.map +1 -0
  210. package/dist/kernel/compensation/types.js +1 -0
  211. package/dist/kernel/database/adapter.d.ts +18 -0
  212. package/dist/kernel/database/adapter.d.ts.map +1 -0
  213. package/dist/kernel/database/adapter.js +3 -0
  214. package/dist/kernel/database/drizzle-db.d.ts +49 -0
  215. package/dist/kernel/database/drizzle-db.d.ts.map +1 -0
  216. package/dist/kernel/database/drizzle-db.js +20 -0
  217. package/dist/kernel/database/migrate.d.ts +38 -0
  218. package/dist/kernel/database/migrate.d.ts.map +1 -0
  219. package/dist/kernel/database/migrate.js +61 -0
  220. package/dist/kernel/database/plugin-types.d.ts +32 -0
  221. package/dist/kernel/database/plugin-types.d.ts.map +1 -0
  222. package/dist/kernel/database/plugin-types.js +10 -0
  223. package/dist/kernel/database/schema.d.ts +24 -0
  224. package/dist/kernel/database/schema.d.ts.map +1 -0
  225. package/dist/kernel/database/schema.js +36 -0
  226. package/dist/kernel/database/scoped-db.d.ts +20 -0
  227. package/dist/kernel/database/scoped-db.d.ts.map +1 -0
  228. package/dist/kernel/database/scoped-db.js +62 -0
  229. package/dist/kernel/database/tx-context.d.ts +15 -0
  230. package/dist/kernel/database/tx-context.d.ts.map +1 -0
  231. package/dist/kernel/database/tx-context.js +19 -0
  232. package/dist/kernel/error-mapper.d.ts +3 -0
  233. package/dist/kernel/error-mapper.d.ts.map +1 -0
  234. package/dist/kernel/error-mapper.js +12 -0
  235. package/dist/kernel/errors.d.ts +38 -0
  236. package/dist/kernel/errors.d.ts.map +1 -0
  237. package/dist/kernel/errors.js +69 -0
  238. package/dist/kernel/factory/repository-factory.d.ts +71 -0
  239. package/dist/kernel/factory/repository-factory.d.ts.map +1 -0
  240. package/dist/kernel/factory/repository-factory.js +138 -0
  241. package/dist/kernel/hooks/create-context.d.ts +25 -0
  242. package/dist/kernel/hooks/create-context.d.ts.map +1 -0
  243. package/dist/kernel/hooks/create-context.js +22 -0
  244. package/dist/kernel/hooks/executor.d.ts +12 -0
  245. package/dist/kernel/hooks/executor.d.ts.map +1 -0
  246. package/dist/kernel/hooks/executor.js +50 -0
  247. package/dist/kernel/hooks/registry.d.ts +28 -0
  248. package/dist/kernel/hooks/registry.d.ts.map +1 -0
  249. package/dist/kernel/hooks/registry.js +58 -0
  250. package/dist/kernel/hooks/types.d.ts +37 -0
  251. package/dist/kernel/hooks/types.d.ts.map +1 -0
  252. package/dist/kernel/hooks/types.js +1 -0
  253. package/dist/kernel/http-error.d.ts +30 -0
  254. package/dist/kernel/http-error.d.ts.map +1 -0
  255. package/dist/kernel/http-error.js +35 -0
  256. package/dist/kernel/jobs/adapter.d.ts +25 -0
  257. package/dist/kernel/jobs/adapter.d.ts.map +1 -0
  258. package/dist/kernel/jobs/adapter.js +9 -0
  259. package/dist/kernel/jobs/drizzle-adapter.d.ts +15 -0
  260. package/dist/kernel/jobs/drizzle-adapter.d.ts.map +1 -0
  261. package/dist/kernel/jobs/drizzle-adapter.js +42 -0
  262. package/dist/kernel/jobs/runner.d.ts +24 -0
  263. package/dist/kernel/jobs/runner.d.ts.map +1 -0
  264. package/dist/kernel/jobs/runner.js +114 -0
  265. package/dist/kernel/jobs/schema.d.ts +280 -0
  266. package/dist/kernel/jobs/schema.d.ts.map +1 -0
  267. package/dist/kernel/jobs/schema.js +37 -0
  268. package/dist/kernel/jobs/types.d.ts +30 -0
  269. package/dist/kernel/jobs/types.d.ts.map +1 -0
  270. package/dist/kernel/jobs/types.js +1 -0
  271. package/dist/kernel/local-api.d.ts +103 -0
  272. package/dist/kernel/local-api.d.ts.map +1 -0
  273. package/dist/kernel/local-api.js +89 -0
  274. package/dist/kernel/plugin/manifest.d.ts +90 -0
  275. package/dist/kernel/plugin/manifest.d.ts.map +1 -0
  276. package/dist/kernel/plugin/manifest.js +169 -0
  277. package/dist/kernel/query/executor.d.ts +21 -0
  278. package/dist/kernel/query/executor.d.ts.map +1 -0
  279. package/dist/kernel/query/executor.js +128 -0
  280. package/dist/kernel/query/registry.d.ts +33 -0
  281. package/dist/kernel/query/registry.d.ts.map +1 -0
  282. package/dist/kernel/query/registry.js +20 -0
  283. package/dist/kernel/result.d.ts +36 -0
  284. package/dist/kernel/result.d.ts.map +1 -0
  285. package/dist/kernel/result.js +16 -0
  286. package/dist/kernel/schema/extra-columns.d.ts +23 -0
  287. package/dist/kernel/schema/extra-columns.d.ts.map +1 -0
  288. package/dist/kernel/schema/extra-columns.js +10 -0
  289. package/dist/kernel/service-registry.d.ts +109 -0
  290. package/dist/kernel/service-registry.d.ts.map +1 -0
  291. package/dist/kernel/service-registry.js +26 -0
  292. package/dist/kernel/service-timing.d.ts +25 -0
  293. package/dist/kernel/service-timing.d.ts.map +1 -0
  294. package/dist/kernel/service-timing.js +62 -0
  295. package/dist/kernel/state-machine/machine.d.ts +24 -0
  296. package/dist/kernel/state-machine/machine.d.ts.map +1 -0
  297. package/dist/kernel/state-machine/machine.js +70 -0
  298. package/dist/modules/analytics/drizzle-adapter.d.ts +13 -0
  299. package/dist/modules/analytics/drizzle-adapter.d.ts.map +1 -0
  300. package/dist/modules/analytics/drizzle-adapter.js +358 -0
  301. package/dist/modules/analytics/hooks.d.ts +13 -0
  302. package/dist/modules/analytics/hooks.d.ts.map +1 -0
  303. package/dist/modules/analytics/hooks.js +12 -0
  304. package/dist/modules/analytics/models.d.ts +14 -0
  305. package/dist/modules/analytics/models.d.ts.map +1 -0
  306. package/dist/modules/analytics/models.js +118 -0
  307. package/dist/modules/analytics/repository/index.d.ts +5 -0
  308. package/dist/modules/analytics/repository/index.d.ts.map +1 -0
  309. package/dist/modules/analytics/repository/index.js +1 -0
  310. package/dist/modules/analytics/service.d.ts +45 -0
  311. package/dist/modules/analytics/service.d.ts.map +1 -0
  312. package/dist/modules/analytics/service.js +196 -0
  313. package/dist/modules/analytics/types.d.ts +119 -0
  314. package/dist/modules/analytics/types.d.ts.map +1 -0
  315. package/dist/modules/analytics/types.js +25 -0
  316. package/dist/modules/audit/hooks.d.ts +7 -0
  317. package/dist/modules/audit/hooks.d.ts.map +1 -0
  318. package/dist/modules/audit/hooks.js +67 -0
  319. package/dist/modules/audit/schema.d.ts +178 -0
  320. package/dist/modules/audit/schema.d.ts.map +1 -0
  321. package/dist/modules/audit/schema.js +21 -0
  322. package/dist/modules/audit/service.d.ts +38 -0
  323. package/dist/modules/audit/service.d.ts.map +1 -0
  324. package/dist/modules/audit/service.js +109 -0
  325. package/dist/modules/cart/access.d.ts +11 -0
  326. package/dist/modules/cart/access.d.ts.map +1 -0
  327. package/dist/modules/cart/access.js +18 -0
  328. package/dist/modules/cart/matcher.d.ts +20 -0
  329. package/dist/modules/cart/matcher.d.ts.map +1 -0
  330. package/dist/modules/cart/matcher.js +2 -0
  331. package/dist/modules/cart/repository/index.d.ts +45 -0
  332. package/dist/modules/cart/repository/index.d.ts.map +1 -0
  333. package/dist/modules/cart/repository/index.js +158 -0
  334. package/dist/modules/cart/schema.d.ts +359 -0
  335. package/dist/modules/cart/schema.d.ts.map +1 -0
  336. package/dist/modules/cart/schema.js +40 -0
  337. package/dist/modules/cart/schemas.d.ts +29 -0
  338. package/dist/modules/cart/schemas.d.ts.map +1 -0
  339. package/dist/modules/cart/schemas.js +14 -0
  340. package/dist/modules/cart/service.d.ts +63 -0
  341. package/dist/modules/cart/service.d.ts.map +1 -0
  342. package/dist/modules/cart/service.js +339 -0
  343. package/dist/modules/catalog/repository/index.d.ts +106 -0
  344. package/dist/modules/catalog/repository/index.d.ts.map +1 -0
  345. package/dist/modules/catalog/repository/index.js +455 -0
  346. package/dist/modules/catalog/schema.d.ts +1193 -0
  347. package/dist/modules/catalog/schema.d.ts.map +1 -0
  348. package/dist/modules/catalog/schema.js +149 -0
  349. package/dist/modules/catalog/schemas.d.ts +81 -0
  350. package/dist/modules/catalog/schemas.d.ts.map +1 -0
  351. package/dist/modules/catalog/schemas.js +62 -0
  352. package/dist/modules/catalog/service.d.ts +160 -0
  353. package/dist/modules/catalog/service.d.ts.map +1 -0
  354. package/dist/modules/catalog/service.js +759 -0
  355. package/dist/modules/customers/repository/index.d.ts +47 -0
  356. package/dist/modules/customers/repository/index.d.ts.map +1 -0
  357. package/dist/modules/customers/repository/index.js +206 -0
  358. package/dist/modules/customers/schema.d.ts +560 -0
  359. package/dist/modules/customers/schema.d.ts.map +1 -0
  360. package/dist/modules/customers/schema.js +60 -0
  361. package/dist/modules/customers/service.d.ts +27 -0
  362. package/dist/modules/customers/service.d.ts.map +1 -0
  363. package/dist/modules/customers/service.js +106 -0
  364. package/dist/modules/fulfillment/repository/index.d.ts +63 -0
  365. package/dist/modules/fulfillment/repository/index.d.ts.map +1 -0
  366. package/dist/modules/fulfillment/repository/index.js +268 -0
  367. package/dist/modules/fulfillment/schema.d.ts +655 -0
  368. package/dist/modules/fulfillment/schema.d.ts.map +1 -0
  369. package/dist/modules/fulfillment/schema.js +83 -0
  370. package/dist/modules/fulfillment/service.d.ts +58 -0
  371. package/dist/modules/fulfillment/service.d.ts.map +1 -0
  372. package/dist/modules/fulfillment/service.js +338 -0
  373. package/dist/modules/fulfillment/types.d.ts +44 -0
  374. package/dist/modules/fulfillment/types.d.ts.map +1 -0
  375. package/dist/modules/fulfillment/types.js +1 -0
  376. package/dist/modules/inventory/repository/index.d.ts +81 -0
  377. package/dist/modules/inventory/repository/index.d.ts.map +1 -0
  378. package/dist/modules/inventory/repository/index.js +310 -0
  379. package/dist/modules/inventory/schema.d.ts +570 -0
  380. package/dist/modules/inventory/schema.d.ts.map +1 -0
  381. package/dist/modules/inventory/schema.js +69 -0
  382. package/dist/modules/inventory/schemas.d.ts +31 -0
  383. package/dist/modules/inventory/schemas.d.ts.map +1 -0
  384. package/dist/modules/inventory/schemas.js +28 -0
  385. package/dist/modules/inventory/service.d.ts +69 -0
  386. package/dist/modules/inventory/service.d.ts.map +1 -0
  387. package/dist/modules/inventory/service.js +283 -0
  388. package/dist/modules/media/adapter.d.ts +16 -0
  389. package/dist/modules/media/adapter.d.ts.map +1 -0
  390. package/dist/modules/media/adapter.js +1 -0
  391. package/dist/modules/media/repository/index.d.ts +35 -0
  392. package/dist/modules/media/repository/index.d.ts.map +1 -0
  393. package/dist/modules/media/repository/index.js +176 -0
  394. package/dist/modules/media/schema.d.ts +289 -0
  395. package/dist/modules/media/schema.d.ts.map +1 -0
  396. package/dist/modules/media/schema.js +35 -0
  397. package/dist/modules/media/service.d.ts +42 -0
  398. package/dist/modules/media/service.d.ts.map +1 -0
  399. package/dist/modules/media/service.js +89 -0
  400. package/dist/modules/orders/repository/index.d.ts +48 -0
  401. package/dist/modules/orders/repository/index.d.ts.map +1 -0
  402. package/dist/modules/orders/repository/index.js +199 -0
  403. package/dist/modules/orders/schema.d.ts +672 -0
  404. package/dist/modules/orders/schema.d.ts.map +1 -0
  405. package/dist/modules/orders/schema.js +63 -0
  406. package/dist/modules/orders/service.d.ts +85 -0
  407. package/dist/modules/orders/service.d.ts.map +1 -0
  408. package/dist/modules/orders/service.js +313 -0
  409. package/dist/modules/orders/stale-order-cleanup.d.ts +27 -0
  410. package/dist/modules/orders/stale-order-cleanup.d.ts.map +1 -0
  411. package/dist/modules/orders/stale-order-cleanup.js +55 -0
  412. package/dist/modules/organization/service.d.ts +53 -0
  413. package/dist/modules/organization/service.d.ts.map +1 -0
  414. package/dist/modules/organization/service.js +151 -0
  415. package/dist/modules/payments/adapter.d.ts +42 -0
  416. package/dist/modules/payments/adapter.d.ts.map +1 -0
  417. package/dist/modules/payments/adapter.js +1 -0
  418. package/dist/modules/payments/repository/index.d.ts +5 -0
  419. package/dist/modules/payments/repository/index.d.ts.map +1 -0
  420. package/dist/modules/payments/repository/index.js +1 -0
  421. package/dist/modules/payments/service.d.ts +23 -0
  422. package/dist/modules/payments/service.d.ts.map +1 -0
  423. package/dist/modules/payments/service.js +72 -0
  424. package/dist/modules/pricing/repository/index.d.ts +34 -0
  425. package/dist/modules/pricing/repository/index.d.ts.map +1 -0
  426. package/dist/modules/pricing/repository/index.js +176 -0
  427. package/dist/modules/pricing/schema.d.ts +565 -0
  428. package/dist/modules/pricing/schema.d.ts.map +1 -0
  429. package/dist/modules/pricing/schema.js +57 -0
  430. package/dist/modules/pricing/schemas.d.ts +37 -0
  431. package/dist/modules/pricing/schemas.d.ts.map +1 -0
  432. package/dist/modules/pricing/schemas.js +30 -0
  433. package/dist/modules/pricing/service.d.ts +62 -0
  434. package/dist/modules/pricing/service.d.ts.map +1 -0
  435. package/dist/modules/pricing/service.js +308 -0
  436. package/dist/modules/promotions/repository/index.d.ts +41 -0
  437. package/dist/modules/promotions/repository/index.d.ts.map +1 -0
  438. package/dist/modules/promotions/repository/index.js +204 -0
  439. package/dist/modules/promotions/schema.d.ts +427 -0
  440. package/dist/modules/promotions/schema.d.ts.map +1 -0
  441. package/dist/modules/promotions/schema.js +52 -0
  442. package/dist/modules/promotions/schemas.d.ts +33 -0
  443. package/dist/modules/promotions/schemas.d.ts.map +1 -0
  444. package/dist/modules/promotions/schemas.js +32 -0
  445. package/dist/modules/promotions/service.d.ts +80 -0
  446. package/dist/modules/promotions/service.d.ts.map +1 -0
  447. package/dist/modules/promotions/service.js +347 -0
  448. package/dist/modules/search/adapter.d.ts +51 -0
  449. package/dist/modules/search/adapter.d.ts.map +1 -0
  450. package/dist/modules/search/adapter.js +1 -0
  451. package/dist/modules/search/hooks.d.ts +8 -0
  452. package/dist/modules/search/hooks.d.ts.map +1 -0
  453. package/dist/modules/search/hooks.js +6 -0
  454. package/dist/modules/search/repository/index.d.ts +5 -0
  455. package/dist/modules/search/repository/index.d.ts.map +1 -0
  456. package/dist/modules/search/repository/index.js +1 -0
  457. package/dist/modules/search/service.d.ts +24 -0
  458. package/dist/modules/search/service.d.ts.map +1 -0
  459. package/dist/modules/search/service.js +217 -0
  460. package/dist/modules/shipping/calculator.d.ts +42 -0
  461. package/dist/modules/shipping/calculator.d.ts.map +1 -0
  462. package/dist/modules/shipping/calculator.js +91 -0
  463. package/dist/modules/shipping/repository/index.d.ts +5 -0
  464. package/dist/modules/shipping/repository/index.d.ts.map +1 -0
  465. package/dist/modules/shipping/repository/index.js +1 -0
  466. package/dist/modules/shipping/service.d.ts +28 -0
  467. package/dist/modules/shipping/service.d.ts.map +1 -0
  468. package/dist/modules/shipping/service.js +20 -0
  469. package/dist/modules/tax/adapter.d.ts +58 -0
  470. package/dist/modules/tax/adapter.d.ts.map +1 -0
  471. package/dist/modules/tax/adapter.js +1 -0
  472. package/dist/modules/tax/repository/index.d.ts +5 -0
  473. package/dist/modules/tax/repository/index.d.ts.map +1 -0
  474. package/dist/modules/tax/repository/index.js +1 -0
  475. package/dist/modules/tax/service.d.ts +19 -0
  476. package/dist/modules/tax/service.d.ts.map +1 -0
  477. package/dist/modules/tax/service.js +34 -0
  478. package/dist/modules/webhooks/hook.d.ts +13 -0
  479. package/dist/modules/webhooks/hook.d.ts.map +1 -0
  480. package/dist/modules/webhooks/hook.js +29 -0
  481. package/dist/modules/webhooks/repository/index.d.ts +40 -0
  482. package/dist/modules/webhooks/repository/index.d.ts.map +1 -0
  483. package/dist/modules/webhooks/repository/index.js +175 -0
  484. package/dist/modules/webhooks/schema.d.ts +404 -0
  485. package/dist/modules/webhooks/schema.d.ts.map +1 -0
  486. package/dist/modules/webhooks/schema.js +40 -0
  487. package/dist/modules/webhooks/service.d.ts +23 -0
  488. package/dist/modules/webhooks/service.d.ts.map +1 -0
  489. package/dist/modules/webhooks/service.js +92 -0
  490. package/dist/modules/webhooks/signing.d.ts +2 -0
  491. package/dist/modules/webhooks/signing.d.ts.map +1 -0
  492. package/dist/modules/webhooks/signing.js +5 -0
  493. package/dist/modules/webhooks/ssrf-guard.d.ts +19 -0
  494. package/dist/modules/webhooks/ssrf-guard.d.ts.map +1 -0
  495. package/dist/modules/webhooks/ssrf-guard.js +79 -0
  496. package/dist/modules/webhooks/tasks.d.ts +16 -0
  497. package/dist/modules/webhooks/tasks.d.ts.map +1 -0
  498. package/dist/modules/webhooks/tasks.js +35 -0
  499. package/dist/modules/webhooks/worker.d.ts +21 -0
  500. package/dist/modules/webhooks/worker.d.ts.map +1 -0
  501. package/dist/modules/webhooks/worker.js +113 -0
  502. package/dist/runtime/commerce.d.ts +110 -0
  503. package/dist/runtime/commerce.d.ts.map +1 -0
  504. package/dist/runtime/commerce.js +37 -0
  505. package/dist/runtime/kernel.d.ts +71 -0
  506. package/dist/runtime/kernel.d.ts.map +1 -0
  507. package/dist/runtime/kernel.js +306 -0
  508. package/dist/runtime/logger.d.ts +11 -0
  509. package/dist/runtime/logger.d.ts.map +1 -0
  510. package/dist/runtime/logger.js +32 -0
  511. package/dist/runtime/shutdown.d.ts +15 -0
  512. package/dist/runtime/shutdown.d.ts.map +1 -0
  513. package/dist/runtime/shutdown.js +34 -0
  514. package/dist/test-utils/create-pglite-adapter.d.ts +32 -0
  515. package/dist/test-utils/create-pglite-adapter.d.ts.map +1 -0
  516. package/dist/test-utils/create-pglite-adapter.js +107 -0
  517. package/dist/test-utils/create-plugin-test-app.d.ts +50 -0
  518. package/dist/test-utils/create-plugin-test-app.d.ts.map +1 -0
  519. package/dist/test-utils/create-plugin-test-app.js +74 -0
  520. package/dist/test-utils/create-repository-test-harness.d.ts +8 -0
  521. package/dist/test-utils/create-repository-test-harness.d.ts.map +1 -0
  522. package/dist/test-utils/create-repository-test-harness.js +7 -0
  523. package/dist/test-utils/create-test-config.d.ts +18 -0
  524. package/dist/test-utils/create-test-config.d.ts.map +1 -0
  525. package/dist/test-utils/create-test-config.js +172 -0
  526. package/dist/test-utils/create-test-kernel.d.ts +3 -0
  527. package/dist/test-utils/create-test-kernel.d.ts.map +1 -0
  528. package/dist/test-utils/create-test-kernel.js +5 -0
  529. package/dist/test-utils/create-test-plugin-context.d.ts +42 -0
  530. package/dist/test-utils/create-test-plugin-context.d.ts.map +1 -0
  531. package/dist/test-utils/create-test-plugin-context.js +46 -0
  532. package/dist/test-utils/rest-api-test-utils.d.ts +64 -0
  533. package/dist/test-utils/rest-api-test-utils.d.ts.map +1 -0
  534. package/dist/test-utils/rest-api-test-utils.js +207 -0
  535. package/dist/test-utils/test-actors.d.ts +15 -0
  536. package/dist/test-utils/test-actors.d.ts.map +1 -0
  537. package/dist/test-utils/test-actors.js +57 -0
  538. package/dist/test-utils/typed-hooks.d.ts +43 -0
  539. package/dist/test-utils/typed-hooks.d.ts.map +1 -0
  540. package/dist/test-utils/typed-hooks.js +35 -0
  541. package/dist/testing.d.ts +14 -0
  542. package/dist/testing.d.ts.map +1 -0
  543. package/dist/testing.js +13 -0
  544. package/dist/types/commerce-types.d.ts +34 -0
  545. package/dist/types/commerce-types.d.ts.map +1 -0
  546. package/dist/types/commerce-types.js +1 -0
  547. package/dist/utils/id.d.ts +2 -0
  548. package/dist/utils/id.d.ts.map +1 -0
  549. package/dist/utils/id.js +3 -0
  550. package/dist/utils/logger.d.ts +3 -0
  551. package/dist/utils/logger.d.ts.map +1 -0
  552. package/dist/utils/logger.js +16 -0
  553. package/dist/utils/pagination.d.ts +11 -0
  554. package/dist/utils/pagination.d.ts.map +1 -0
  555. package/dist/utils/pagination.js +15 -0
  556. package/package.json +1 -1
@@ -0,0 +1,74 @@
1
+ /**
2
+ * One-call plugin E2E test setup.
3
+ *
4
+ * Boots a PGlite kernel (or real PG if overridden), programmatically pushes
5
+ * the merged schema (core + plugin tables) via drizzle-kit/api, mounts the
6
+ * test actor middleware on an OpenAPIHono instance, and registers all plugin
7
+ * routes --- matching the production server.ts boot sequence.
8
+ *
9
+ * Usage:
10
+ * import { createPluginTestApp, jsonHeaders, testAdminActor } from "@unifiedcommerce/core";
11
+ * const { app } = await createPluginTestApp(myPlugin());
12
+ * const res = await app.request("/api/my-route", {
13
+ * method: "POST",
14
+ * headers: jsonHeaders(testAdminActor),
15
+ * body: JSON.stringify({ ... }),
16
+ * });
17
+ * expect(res.status).toBe(201);
18
+ */
19
+ import { OpenAPIHono } from "@hono/zod-openapi";
20
+ import { createRequire } from "node:module";
21
+ import { createTestConfig } from "./create-test-config.js";
22
+ import { createKernel } from "../runtime/kernel.js";
23
+ import { buildSchema } from "../kernel/database/migrate.js";
24
+ import { ensureDefaultOrg } from "../auth/org.js";
25
+ // drizzle-kit/api uses CJS internally; createRequire provides ESM compat.
26
+ const require = createRequire(import.meta.url);
27
+ /**
28
+ * Creates a fully-wired test application for plugin E2E testing.
29
+ *
30
+ * @param plugin - The plugin under test (e.g., `appointmentPlugin()`)
31
+ * @param configOverrides - Optional config overrides. Pass `databaseAdapter`
32
+ * to use a real PostgreSQL instance instead of PGlite.
33
+ */
34
+ export async function createPluginTestApp(plugin, configOverrides = {}) {
35
+ // 1. Build config with plugin applied (PGlite auto-provisioned if no adapter)
36
+ const config = await createTestConfig({
37
+ plugins: [plugin],
38
+ ...configOverrides,
39
+ });
40
+ // 2. Boot kernel (creates core services, hook registry)
41
+ const kernel = createKernel(config);
42
+ // 3. Merge core + plugin schemas
43
+ const mergedSchema = buildSchema(config);
44
+ // 4. Programmatic schema push via drizzle-kit/api
45
+ // Diffs current DB state against pgTable definitions, generates DDL, applies it.
46
+ // On fresh PGlite: creates all tables. On existing DB: creates only missing tables.
47
+ const drizzleKit = require("drizzle-kit/api");
48
+ const { apply } = await drizzleKit.pushSchema(mergedSchema, kernel.database.db);
49
+ await apply();
50
+ // Ensure the default organization exists for plugin tests
51
+ await ensureDefaultOrg(kernel.database.db);
52
+ // 5. Create OpenAPIHono --- matching production server.ts
53
+ // Plugin routes register via manifest.ts which calls app.openapi().
54
+ const app = new OpenAPIHono();
55
+ // 6. Test actor middleware: parse x-test-actor header -> set on context
56
+ app.use("*", async (c, next) => {
57
+ const header = c.req.header("x-test-actor");
58
+ if (header) {
59
+ try {
60
+ c.set("actor", JSON.parse(header));
61
+ }
62
+ catch { /* malformed JSON --- fall through without actor */ }
63
+ }
64
+ await next();
65
+ });
66
+ // 7. Register plugin routes (deferred via config.routes)
67
+ const routes = config.routes;
68
+ routes?.(app, kernel);
69
+ return {
70
+ app,
71
+ kernel,
72
+ db: kernel.database.db,
73
+ };
74
+ }
@@ -0,0 +1,8 @@
1
+ import type { CommerceConfig } from "../config/types.js";
2
+ import { createKernel } from "../runtime/kernel.js";
3
+ export interface RepositoryTestHarness {
4
+ config: CommerceConfig;
5
+ kernel: ReturnType<typeof createKernel>;
6
+ }
7
+ export declare function createRepositoryTestHarness(overrides?: Partial<CommerceConfig>): Promise<RepositoryTestHarness>;
8
+ //# sourceMappingURL=create-repository-test-harness.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"create-repository-test-harness.d.ts","sourceRoot":"","sources":["../../src/test-utils/create-repository-test-harness.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAEzD,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAEpD,MAAM,WAAW,qBAAqB;IACpC,MAAM,EAAE,cAAc,CAAC;IACvB,MAAM,EAAE,UAAU,CAAC,OAAO,YAAY,CAAC,CAAC;CACzC;AAED,wBAAsB,2BAA2B,CAC/C,SAAS,GAAE,OAAO,CAAC,cAAc,CAAM,GACtC,OAAO,CAAC,qBAAqB,CAAC,CAIhC"}
@@ -0,0 +1,7 @@
1
+ import { createTestConfig } from "./create-test-config.js";
2
+ import { createKernel } from "../runtime/kernel.js";
3
+ export async function createRepositoryTestHarness(overrides = {}) {
4
+ const config = await createTestConfig(overrides);
5
+ const kernel = createKernel(config);
6
+ return { config, kernel };
7
+ }
@@ -0,0 +1,18 @@
1
+ import type { CommerceConfig } from "../config/types.js";
2
+ export declare function createTestConfig(overrides?: Partial<CommerceConfig>): Promise<CommerceConfig>;
3
+ /**
4
+ * Creates a test config backed by PGlite (in-memory PostgreSQL).
5
+ *
6
+ * This provides production parity for tests by using real SQL execution
7
+ * and PostgreSQL behavior while remaining fast and self-contained.
8
+ *
9
+ * @param overrides - Optional config overrides
10
+ * @returns A promise resolving to an object containing:
11
+ * - config: The CommerceConfig to pass to createKernel
12
+ * - cleanup: Async function to reset data between tests
13
+ */
14
+ export declare function createPGliteTestConfig(overrides?: Partial<CommerceConfig>): Promise<{
15
+ config: CommerceConfig;
16
+ cleanup: () => Promise<void>;
17
+ }>;
18
+ //# sourceMappingURL=create-test-config.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"create-test-config.d.ts","sourceRoot":"","sources":["../../src/test-utils/create-test-config.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAgDzD,wBAAsB,gBAAgB,CACpC,SAAS,GAAE,OAAO,CAAC,cAAc,CAAM,GACtC,OAAO,CAAC,cAAc,CAAC,CA+GzB;AAED;;;;;;;;;;GAUG;AACH,wBAAsB,sBAAsB,CAC1C,SAAS,GAAE,OAAO,CAAC,cAAc,CAAM,GACtC,OAAO,CAAC;IAAE,MAAM,EAAE,cAAc,CAAC;IAAC,OAAO,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAA;CAAE,CAAC,CAUnE"}
@@ -0,0 +1,172 @@
1
+ import { defineConfig } from "../config/define-config.js";
2
+ import { Ok } from "../kernel/result.js";
3
+ function createInMemoryStorageAdapter() {
4
+ const files = new Map();
5
+ const baseUrl = "http://localhost:3000/test-assets";
6
+ return {
7
+ providerId: "test-memory-storage",
8
+ async upload(key, data, contentType) {
9
+ const body = data instanceof ArrayBuffer
10
+ ? data
11
+ : await new Response(data).arrayBuffer();
12
+ files.set(key, { data: body, contentType });
13
+ return Ok({
14
+ key,
15
+ url: `${baseUrl}/${key}`,
16
+ contentType,
17
+ size: body.byteLength,
18
+ });
19
+ },
20
+ async getUrl(key) {
21
+ return Ok(`${baseUrl}/${key}`);
22
+ },
23
+ async getSignedUrl(key, expiresIn) {
24
+ return Ok(`${baseUrl}/${key}?expiresIn=${expiresIn}`);
25
+ },
26
+ async delete(key) {
27
+ files.delete(key);
28
+ return Ok(undefined);
29
+ },
30
+ async list(prefix) {
31
+ return Ok(Array.from(files.entries())
32
+ .filter(([key]) => key.startsWith(prefix))
33
+ .map(([key, file]) => ({
34
+ key,
35
+ url: `${baseUrl}/${key}`,
36
+ contentType: file.contentType,
37
+ size: file.data.byteLength,
38
+ })));
39
+ },
40
+ };
41
+ }
42
+ export async function createTestConfig(overrides = {}) {
43
+ // Auto-provision PGlite when no databaseAdapter is provided
44
+ if (!overrides.databaseAdapter) {
45
+ const { createPGliteTestAdapter } = await import("./create-pglite-adapter.js");
46
+ const { adapter } = await createPGliteTestAdapter();
47
+ overrides = { ...overrides, databaseAdapter: adapter };
48
+ }
49
+ return defineConfig({
50
+ version: "0.0.1-test",
51
+ storeName: "Test Store",
52
+ database: {
53
+ provider: "postgresql",
54
+ },
55
+ auth: {
56
+ requireEmailVerification: false,
57
+ apiKeys: { enabled: true, defaultPermissions: ["catalog:read"] },
58
+ posPin: { enabled: true },
59
+ roles: {
60
+ owner: { permissions: ["*:*"] },
61
+ admin: { permissions: ["*:*"] },
62
+ staff: {
63
+ permissions: [
64
+ "catalog:create",
65
+ "catalog:update",
66
+ "catalog:delete",
67
+ "catalog:read",
68
+ "inventory:adjust",
69
+ "orders:create",
70
+ "orders:read",
71
+ "orders:update",
72
+ "cart:create",
73
+ "cart:update",
74
+ "customers:update:self",
75
+ ],
76
+ },
77
+ ai_agent: {
78
+ permissions: [
79
+ "catalog:read",
80
+ "catalog:create",
81
+ "inventory:read",
82
+ "inventory:adjust",
83
+ "orders:read",
84
+ "cart:create",
85
+ "cart:update",
86
+ "mcp:access",
87
+ ],
88
+ },
89
+ },
90
+ customerPermissions: [
91
+ "catalog:read",
92
+ "cart:create",
93
+ "cart:read",
94
+ "cart:update",
95
+ "orders:create",
96
+ "orders:read:own",
97
+ "customers:read:self",
98
+ "customers:update:self",
99
+ ],
100
+ },
101
+ entities: {
102
+ product: {
103
+ fields: [
104
+ { name: "weight", type: "number" },
105
+ { name: "brand", type: "text" },
106
+ ],
107
+ variants: { enabled: true, optionTypes: ["size", "color"] },
108
+ fulfillment: "physical",
109
+ },
110
+ digitalDownload: {
111
+ fields: [{ name: "fileAssetId", type: "text" }],
112
+ variants: { enabled: false },
113
+ fulfillment: "digital-download",
114
+ },
115
+ course: {
116
+ fields: [{ name: "modules", type: "json" }],
117
+ variants: { enabled: false },
118
+ fulfillment: "digital-access",
119
+ },
120
+ },
121
+ cart: {
122
+ ttlMinutes: 5,
123
+ hooks: {},
124
+ },
125
+ checkout: {
126
+ hooks: {
127
+ beforeCreate: [],
128
+ afterCreate: [],
129
+ },
130
+ },
131
+ orders: {
132
+ hooks: {
133
+ beforeCreate: [],
134
+ afterCreate: [],
135
+ beforeStatusChange: [],
136
+ afterStatusChange: [],
137
+ },
138
+ },
139
+ inventory: {
140
+ hooks: {
141
+ afterAdjust: [],
142
+ },
143
+ },
144
+ email: {
145
+ async send() {
146
+ // no-op for tests
147
+ },
148
+ },
149
+ storage: createInMemoryStorageAdapter(),
150
+ ...overrides,
151
+ });
152
+ }
153
+ /**
154
+ * Creates a test config backed by PGlite (in-memory PostgreSQL).
155
+ *
156
+ * This provides production parity for tests by using real SQL execution
157
+ * and PostgreSQL behavior while remaining fast and self-contained.
158
+ *
159
+ * @param overrides - Optional config overrides
160
+ * @returns A promise resolving to an object containing:
161
+ * - config: The CommerceConfig to pass to createKernel
162
+ * - cleanup: Async function to reset data between tests
163
+ */
164
+ export async function createPGliteTestConfig(overrides = {}) {
165
+ const { createPGliteTestAdapter } = await import("./create-pglite-adapter.js");
166
+ const { adapter, cleanup } = await createPGliteTestAdapter();
167
+ const config = await createTestConfig({
168
+ databaseAdapter: adapter,
169
+ ...overrides,
170
+ });
171
+ return { config, cleanup };
172
+ }
@@ -0,0 +1,3 @@
1
+ import type { CommerceConfig } from "../config/types.js";
2
+ export declare function createTestKernel(overrides?: Partial<CommerceConfig>): Promise<import("../runtime/kernel.js").Kernel>;
3
+ //# sourceMappingURL=create-test-kernel.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"create-test-kernel.d.ts","sourceRoot":"","sources":["../../src/test-utils/create-test-kernel.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAIzD,wBAAsB,gBAAgB,CAAC,SAAS,GAAE,OAAO,CAAC,cAAc,CAAM,kDAE7E"}
@@ -0,0 +1,5 @@
1
+ import { createKernel } from "../runtime/kernel.js";
2
+ import { createTestConfig } from "./create-test-config.js";
3
+ export async function createTestKernel(overrides = {}) {
4
+ return createKernel(await createTestConfig(overrides));
5
+ }
@@ -0,0 +1,42 @@
1
+ import { HookRegistry } from "../kernel/hooks/registry.js";
2
+ import type { CommerceConfig, MCPTool } from "../config/types.js";
3
+ interface PluginContextShape {
4
+ hooks: HookRegistry;
5
+ config: CommerceConfig;
6
+ services: Record<string, unknown>;
7
+ routes: {
8
+ add(method: string, path: string, handler: (...args: unknown[]) => unknown): void;
9
+ };
10
+ mcp: {
11
+ registerTool(tool: MCPTool): void;
12
+ };
13
+ analytics: {
14
+ registerModel(model: unknown): void;
15
+ };
16
+ database: {
17
+ registerSchema(schema: Record<string, unknown>): void;
18
+ query: unknown;
19
+ transaction<T>(fn: (tx: unknown) => Promise<T>): Promise<T>;
20
+ };
21
+ logger: {
22
+ info(message: string, data?: unknown): void;
23
+ warn(message: string, data?: unknown): void;
24
+ error(message: string, data?: unknown): void;
25
+ };
26
+ }
27
+ export interface TestPluginContext extends PluginContextShape {
28
+ registeredRoutes: Array<{
29
+ method: string;
30
+ path: string;
31
+ handler: (...args: unknown[]) => unknown;
32
+ }>;
33
+ registeredMCPTools: MCPTool[];
34
+ registeredAnalyticsModels: unknown[];
35
+ registeredSchemas: Array<Record<string, unknown>>;
36
+ }
37
+ export declare function createTestPluginContext(options?: {
38
+ config?: Partial<CommerceConfig>;
39
+ services?: Record<string, unknown>;
40
+ }): Promise<TestPluginContext>;
41
+ export {};
42
+ //# sourceMappingURL=create-test-plugin-context.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"create-test-plugin-context.d.ts","sourceRoot":"","sources":["../../src/test-utils/create-test-plugin-context.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAC;AAG3D,OAAO,KAAK,EAAE,cAAc,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAC;AAElE,UAAU,kBAAkB;IAC1B,KAAK,EAAE,YAAY,CAAC;IACpB,MAAM,EAAE,cAAc,CAAC;IACvB,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAClC,MAAM,EAAE;QAAE,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,OAAO,GAAG,IAAI,CAAA;KAAE,CAAC;IAC9F,GAAG,EAAE;QAAE,YAAY,CAAC,IAAI,EAAE,OAAO,GAAG,IAAI,CAAA;KAAE,CAAC;IAC3C,SAAS,EAAE;QAAE,aAAa,CAAC,KAAK,EAAE,OAAO,GAAG,IAAI,CAAA;KAAE,CAAC;IACnD,QAAQ,EAAE;QACR,cAAc,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAAC;QACtD,KAAK,EAAE,OAAO,CAAC;QACf,WAAW,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,OAAO,KAAK,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;KAC7D,CAAC;IACF,MAAM,EAAE;QAAE,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,OAAO,GAAG,IAAI,CAAC;QAAC,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,OAAO,GAAG,IAAI,CAAC;QAAC,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,OAAO,GAAG,IAAI,CAAA;KAAE,CAAC;CACpJ;AAED,MAAM,WAAW,iBAAkB,SAAQ,kBAAkB;IAC3D,gBAAgB,EAAE,KAAK,CAAC;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,OAAO,CAAA;KAAE,CAAC,CAAC;IACpG,kBAAkB,EAAE,OAAO,EAAE,CAAC;IAC9B,yBAAyB,EAAE,OAAO,EAAE,CAAC;IACrC,iBAAiB,EAAE,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;CACnD;AAED,wBAAsB,uBAAuB,CAAC,OAAO,CAAC,EAAE;IACtD,MAAM,CAAC,EAAE,OAAO,CAAC,cAAc,CAAC,CAAC;IACjC,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACpC,GAAG,OAAO,CAAC,iBAAiB,CAAC,CA4C7B"}
@@ -0,0 +1,46 @@
1
+ import { HookRegistry } from "../kernel/hooks/registry.js";
2
+ import { createLogger } from "../utils/logger.js";
3
+ import { createTestConfig } from "./create-test-config.js";
4
+ export async function createTestPluginContext(options) {
5
+ const hooks = new HookRegistry();
6
+ const config = await createTestConfig(options?.config ?? {});
7
+ const services = options?.services ?? {};
8
+ const registeredRoutes = [];
9
+ const registeredMCPTools = [];
10
+ const registeredAnalyticsModels = [];
11
+ const registeredSchemas = [];
12
+ return {
13
+ hooks,
14
+ config,
15
+ services,
16
+ routes: {
17
+ add(method, path, handler) {
18
+ registeredRoutes.push({ method: method.toUpperCase(), path, handler });
19
+ },
20
+ },
21
+ mcp: {
22
+ registerTool(tool) {
23
+ registeredMCPTools.push(tool);
24
+ },
25
+ },
26
+ analytics: {
27
+ registerModel(model) {
28
+ registeredAnalyticsModels.push(model);
29
+ },
30
+ },
31
+ database: {
32
+ registerSchema(schema) {
33
+ registeredSchemas.push(schema);
34
+ },
35
+ query: {},
36
+ async transaction(fn) {
37
+ return fn({});
38
+ },
39
+ },
40
+ logger: createLogger("test-plugin-context"),
41
+ registeredRoutes,
42
+ registeredMCPTools,
43
+ registeredAnalyticsModels,
44
+ registeredSchemas,
45
+ };
46
+ }
@@ -0,0 +1,64 @@
1
+ /**
2
+ * Integration test utilities for REST API endpoints.
3
+ *
4
+ * Provides helper functions to test Hono routes with a real kernel,
5
+ * PGlite database, and authentication middleware.
6
+ */
7
+ import { Hono } from "hono";
8
+ import { createKernel } from "../runtime/kernel.js";
9
+ import type { CommerceConfig } from "../config/types.js";
10
+ import type { Actor } from "../auth/types.js";
11
+ import type { AuthInstance } from "../auth/setup.js";
12
+ type ServerEnv = {
13
+ Variables: {
14
+ auth: AuthInstance;
15
+ actor: Actor | null;
16
+ };
17
+ };
18
+ /**
19
+ * Creates a test server with PGlite-backed kernel for REST API testing.
20
+ */
21
+ export declare function createTestServer(overrides?: Partial<CommerceConfig>): Promise<{
22
+ server: Hono<ServerEnv>;
23
+ kernel: ReturnType<typeof createKernel>;
24
+ auth: AuthInstance;
25
+ cleanup: () => Promise<void>;
26
+ }>;
27
+ /**
28
+ * Helper to parse JSON response from Hono Response
29
+ */
30
+ export declare function parseJsonResponse<T = unknown>(response: Response): Promise<T>;
31
+ /**
32
+ * Common test actor with staff permissions
33
+ */
34
+ export declare const testActor: Actor;
35
+ /**
36
+ * Test actor with read-only permissions
37
+ */
38
+ export declare const readonlyActor: Actor;
39
+ /**
40
+ * Test actor with no permissions
41
+ */
42
+ export declare const noPermActor: Actor;
43
+ /**
44
+ * Helper to create a mock request with actor context
45
+ */
46
+ export declare function createMockRequest(server: Hono<ServerEnv>, options: {
47
+ method: string;
48
+ url: string;
49
+ body?: unknown;
50
+ headers?: Record<string, string>;
51
+ actor?: Actor;
52
+ }): Request;
53
+ /**
54
+ * Helper to make authenticated requests to the test server
55
+ */
56
+ export declare function makeRequest(server: Hono<ServerEnv>, options: {
57
+ method: string;
58
+ url: string;
59
+ body?: unknown;
60
+ headers?: Record<string, string>;
61
+ actor?: Actor;
62
+ }): Promise<Response>;
63
+ export {};
64
+ //# sourceMappingURL=rest-api-test-utils.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rest-api-test-utils.d.ts","sourceRoot":"","sources":["../../src/test-utils/rest-api-test-utils.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAC5B,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAOpD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AACzD,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAErD,KAAK,SAAS,GAAG;IACf,SAAS,EAAE;QACT,IAAI,EAAE,YAAY,CAAC;QACnB,KAAK,EAAE,KAAK,GAAG,IAAI,CAAC;KACrB,CAAC;CACH,CAAC;AAiDF;;GAEG;AACH,wBAAsB,gBAAgB,CACpC,SAAS,GAAE,OAAO,CAAC,cAAc,CAAM,GACtC,OAAO,CAAC;IACT,MAAM,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC;IACxB,MAAM,EAAE,UAAU,CAAC,OAAO,YAAY,CAAC,CAAC;IACxC,IAAI,EAAE,YAAY,CAAC;IACnB,OAAO,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;CAC9B,CAAC,CAqDD;AAED;;GAEG;AACH,wBAAsB,iBAAiB,CAAC,CAAC,GAAG,OAAO,EAAE,QAAQ,EAAE,QAAQ,GAAG,OAAO,CAAC,CAAC,CAAC,CAEnF;AAED;;GAEG;AACH,eAAO,MAAM,SAAS,EAAE,KA4BvB,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,aAAa,EAAE,KAS3B,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,WAAW,EAAE,KASzB,CAAC;AAEF;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,OAAO,EAAE;IAClE,MAAM,EAAE,MAAM,CAAC;IACf,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACjC,KAAK,CAAC,EAAE,KAAK,CAAC;CACf,WAwBA;AAED;;GAEG;AACH,wBAAsB,WAAW,CAC/B,MAAM,EAAE,IAAI,CAAC,SAAS,CAAC,EACvB,OAAO,EAAE;IACP,MAAM,EAAE,MAAM,CAAC;IACf,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACjC,KAAK,CAAC,EAAE,KAAK,CAAC;CACf,qBAYF"}
@@ -0,0 +1,207 @@
1
+ /**
2
+ * Integration test utilities for REST API endpoints.
3
+ *
4
+ * Provides helper functions to test Hono routes with a real kernel,
5
+ * PGlite database, and authentication middleware.
6
+ */
7
+ import { Hono } from "hono";
8
+ import { createKernel } from "../runtime/kernel.js";
9
+ import { createAuth } from "../auth/setup.js";
10
+ import { authMiddleware } from "../auth/middleware.js";
11
+ import { createRestRoutes } from "../interfaces/rest/index.js";
12
+ import { createPGliteTestConfig } from "./create-test-config.js";
13
+ import { CommerceValidationError } from "../kernel/errors.js";
14
+ import { Ok, Err } from "../kernel/result.js";
15
+ const mockPaymentAdapter = {
16
+ providerId: "test-payments",
17
+ async createPaymentIntent(params) {
18
+ return Ok({
19
+ id: "pi_test_" + Date.now(),
20
+ status: "requires_capture",
21
+ amount: params.amount,
22
+ currency: params.currency,
23
+ clientSecret: "secret_test",
24
+ });
25
+ },
26
+ async capturePayment() {
27
+ return Ok({ id: "pi_test_" + Date.now(), status: "succeeded", amountCaptured: 1000 });
28
+ },
29
+ async refundPayment() {
30
+ return Ok({ id: "re_test_" + Date.now(), status: "succeeded", amountRefunded: 1000 });
31
+ },
32
+ async cancelPaymentIntent() {
33
+ return Ok(undefined);
34
+ },
35
+ async verifyWebhook(request) {
36
+ // Extract signature from headers
37
+ const signature = request.headers.get("stripe-signature") || request.headers.get("webhook-signature");
38
+ // Extract payload from request body
39
+ let payload;
40
+ try {
41
+ payload = await request.clone().json();
42
+ }
43
+ catch {
44
+ return Err(new CommerceValidationError("Webhook payload is invalid or missing"));
45
+ }
46
+ // Simulate signature verification for production-hardened testing
47
+ // Reject invalid signatures like "invalid_signature"
48
+ if (signature === "invalid_signature") {
49
+ return Err(new CommerceValidationError("Invalid webhook signature"));
50
+ }
51
+ // Reject requests with no required fields
52
+ if (!payload || !payload.type) {
53
+ return Err(new CommerceValidationError("Webhook payload is missing required fields"));
54
+ }
55
+ return Ok({ id: "evt_test_" + Date.now(), type: String(payload.type), data: (payload.data ?? {}) });
56
+ },
57
+ };
58
+ /**
59
+ * Creates a test server with PGlite-backed kernel for REST API testing.
60
+ */
61
+ export async function createTestServer(overrides = {}) {
62
+ const { config, cleanup } = await createPGliteTestConfig({
63
+ payments: [mockPaymentAdapter],
64
+ ...overrides,
65
+ });
66
+ const kernel = createKernel(config);
67
+ const auth = createAuth(kernel.database, config);
68
+ const app = new Hono();
69
+ // Set auth in context (like createServer does)
70
+ app.use("*", async (c, next) => {
71
+ c.set("auth", auth);
72
+ await next();
73
+ });
74
+ // Test middleware: allow direct actor injection via x-test-actor header for testing
75
+ app.use("*", async (c, next) => {
76
+ const testActorHeader = c.req.header("x-test-actor");
77
+ if (testActorHeader) {
78
+ try {
79
+ const actor = JSON.parse(testActorHeader);
80
+ c.set("actor", actor);
81
+ await next();
82
+ return;
83
+ }
84
+ catch {
85
+ // Invalid JSON, continue to auth middleware
86
+ }
87
+ }
88
+ await next();
89
+ });
90
+ // Add auth middleware
91
+ app.use("*", authMiddleware(auth, config));
92
+ // Error handling middleware - catch thrown errors and convert to JSON
93
+ app.use("*", async (c, next) => {
94
+ try {
95
+ await next();
96
+ }
97
+ catch (error) {
98
+ // Import error handling utilities
99
+ const { mapErrorToResponse, mapErrorToStatus } = await import("../interfaces/rest/utils.js");
100
+ return c.json(mapErrorToResponse(error), mapErrorToStatus(error));
101
+ }
102
+ });
103
+ // Add REST routes
104
+ app.route("/api", createRestRoutes(kernel));
105
+ return { server: app, kernel, auth, cleanup };
106
+ }
107
+ /**
108
+ * Helper to parse JSON response from Hono Response
109
+ */
110
+ export async function parseJsonResponse(response) {
111
+ return response.json();
112
+ }
113
+ /**
114
+ * Common test actor with staff permissions
115
+ */
116
+ export const testActor = {
117
+ type: "user",
118
+ userId: "00000000-0000-0000-0000-000000000001",
119
+ email: "test@example.com",
120
+ name: "Test Staff",
121
+ vendorId: null,
122
+ organizationId: "org_default",
123
+ role: "staff",
124
+ permissions: [
125
+ "catalog:create",
126
+ "catalog:update",
127
+ "catalog:read",
128
+ "inventory:adjust",
129
+ "inventory:read",
130
+ "orders:create",
131
+ "orders:read",
132
+ "orders:update",
133
+ "cart:create",
134
+ "cart:update",
135
+ "cart:read",
136
+ "customers:update:self",
137
+ "webhooks:manage",
138
+ "pricing:manage",
139
+ "promotions:manage",
140
+ "promotions:read",
141
+ "audit:read",
142
+ "media:write",
143
+ ],
144
+ };
145
+ /**
146
+ * Test actor with read-only permissions
147
+ */
148
+ export const readonlyActor = {
149
+ type: "user",
150
+ userId: "00000000-0000-0000-0000-000000000002",
151
+ email: "readonly@example.com",
152
+ name: "Read Only User",
153
+ vendorId: null,
154
+ organizationId: "org_default",
155
+ role: "customer",
156
+ permissions: ["catalog:read", "cart:read", "orders:read:own"],
157
+ };
158
+ /**
159
+ * Test actor with no permissions
160
+ */
161
+ export const noPermActor = {
162
+ type: "user",
163
+ userId: "00000000-0000-0000-0000-000000000003",
164
+ email: "noperm@example.com",
165
+ name: "No Perm",
166
+ vendorId: null,
167
+ organizationId: "org_default",
168
+ role: "customer",
169
+ permissions: [],
170
+ };
171
+ /**
172
+ * Helper to create a mock request with actor context
173
+ */
174
+ export function createMockRequest(server, options) {
175
+ const url = new URL(options.url, "http://localhost");
176
+ const headers = {
177
+ "content-type": "application/json",
178
+ ...options.headers,
179
+ };
180
+ // Add actor as header for test middleware
181
+ if (options.actor) {
182
+ headers["x-test-actor"] = JSON.stringify(options.actor);
183
+ }
184
+ // Build the request
185
+ const requestInit = {
186
+ method: options.method,
187
+ headers,
188
+ };
189
+ if (options.body) {
190
+ requestInit.body = JSON.stringify(options.body);
191
+ }
192
+ const request = new Request(url, requestInit);
193
+ return request;
194
+ }
195
+ /**
196
+ * Helper to make authenticated requests to the test server
197
+ */
198
+ export async function makeRequest(server, options) {
199
+ // Create request with actor header (defaults to testActor)
200
+ const request = createMockRequest(server, {
201
+ ...options,
202
+ actor: options.actor ?? testActor,
203
+ });
204
+ // Route the request through Hono
205
+ const response = await server.fetch(request);
206
+ return response;
207
+ }