@unifiedcommerce/core 0.0.1

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 (749) 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 +1383 -0
  8. package/dist/auth/auth-schema.d.ts.map +1 -0
  9. package/dist/auth/auth-schema.js +117 -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 +91 -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/pos.d.ts +3 -0
  20. package/dist/auth/pos.d.ts.map +1 -0
  21. package/dist/auth/pos.js +62 -0
  22. package/dist/auth/setup.d.ts +31 -0
  23. package/dist/auth/setup.d.ts.map +1 -0
  24. package/dist/auth/setup.js +106 -0
  25. package/dist/auth/system-actor.d.ts +7 -0
  26. package/dist/auth/system-actor.d.ts.map +1 -0
  27. package/dist/auth/system-actor.js +17 -0
  28. package/dist/auth/types.d.ts +11 -0
  29. package/dist/auth/types.d.ts.map +1 -0
  30. package/dist/auth/types.js +1 -0
  31. package/dist/config/defaults.d.ts +3 -0
  32. package/dist/config/defaults.d.ts.map +1 -0
  33. package/dist/config/defaults.js +80 -0
  34. package/dist/config/define-config.d.ts +9 -0
  35. package/dist/config/define-config.d.ts.map +1 -0
  36. package/dist/config/define-config.js +44 -0
  37. package/dist/config/types.d.ts +299 -0
  38. package/dist/config/types.d.ts.map +1 -0
  39. package/dist/config/types.js +1 -0
  40. package/dist/generated/plugin-manifest.d.ts +48 -0
  41. package/dist/generated/plugin-manifest.d.ts.map +1 -0
  42. package/dist/generated/plugin-manifest.js +20 -0
  43. package/dist/hooks/checkout-completion.d.ts +58 -0
  44. package/dist/hooks/checkout-completion.d.ts.map +1 -0
  45. package/dist/hooks/checkout-completion.js +137 -0
  46. package/dist/hooks/checkout.d.ts +99 -0
  47. package/dist/hooks/checkout.d.ts.map +1 -0
  48. package/dist/hooks/checkout.js +317 -0
  49. package/dist/hooks/order-emails.d.ts +16 -0
  50. package/dist/hooks/order-emails.d.ts.map +1 -0
  51. package/dist/hooks/order-emails.js +44 -0
  52. package/dist/index.d.ts +82 -0
  53. package/dist/index.d.ts.map +1 -0
  54. package/dist/index.js +13381 -0
  55. package/dist/index.js.map +156 -0
  56. package/dist/interfaces/graphql/index.d.ts +4 -0
  57. package/dist/interfaces/graphql/index.d.ts.map +1 -0
  58. package/dist/interfaces/graphql/index.js +415 -0
  59. package/dist/interfaces/mcp/agent-prompt.d.ts +16 -0
  60. package/dist/interfaces/mcp/agent-prompt.d.ts.map +1 -0
  61. package/dist/interfaces/mcp/agent-prompt.js +172 -0
  62. package/dist/interfaces/mcp/context-enrichment.d.ts +39 -0
  63. package/dist/interfaces/mcp/context-enrichment.d.ts.map +1 -0
  64. package/dist/interfaces/mcp/context-enrichment.js +119 -0
  65. package/dist/interfaces/mcp/server.d.ts +7 -0
  66. package/dist/interfaces/mcp/server.d.ts.map +1 -0
  67. package/dist/interfaces/mcp/server.js +515 -0
  68. package/dist/interfaces/mcp/transport.d.ts +5 -0
  69. package/dist/interfaces/mcp/transport.d.ts.map +1 -0
  70. package/dist/interfaces/mcp/transport.js +52 -0
  71. package/dist/interfaces/rest/customer-portal.d.ts +5 -0
  72. package/dist/interfaces/rest/customer-portal.d.ts.map +1 -0
  73. package/dist/interfaces/rest/customer-portal.js +206 -0
  74. package/dist/interfaces/rest/index.d.ts +5 -0
  75. package/dist/interfaces/rest/index.d.ts.map +1 -0
  76. package/dist/interfaces/rest/index.js +68 -0
  77. package/dist/interfaces/rest/router.d.ts +164 -0
  78. package/dist/interfaces/rest/router.d.ts.map +1 -0
  79. package/dist/interfaces/rest/router.js +259 -0
  80. package/dist/interfaces/rest/routes/admin-jobs.d.ts +5 -0
  81. package/dist/interfaces/rest/routes/admin-jobs.d.ts.map +1 -0
  82. package/dist/interfaces/rest/routes/admin-jobs.js +48 -0
  83. package/dist/interfaces/rest/routes/audit.d.ts +5 -0
  84. package/dist/interfaces/rest/routes/audit.d.ts.map +1 -0
  85. package/dist/interfaces/rest/routes/audit.js +43 -0
  86. package/dist/interfaces/rest/routes/carts.d.ts +5 -0
  87. package/dist/interfaces/rest/routes/carts.d.ts.map +1 -0
  88. package/dist/interfaces/rest/routes/carts.js +55 -0
  89. package/dist/interfaces/rest/routes/catalog.d.ts +5 -0
  90. package/dist/interfaces/rest/routes/catalog.d.ts.map +1 -0
  91. package/dist/interfaces/rest/routes/catalog.js +256 -0
  92. package/dist/interfaces/rest/routes/checkout.d.ts +5 -0
  93. package/dist/interfaces/rest/routes/checkout.d.ts.map +1 -0
  94. package/dist/interfaces/rest/routes/checkout.js +216 -0
  95. package/dist/interfaces/rest/routes/inventory.d.ts +5 -0
  96. package/dist/interfaces/rest/routes/inventory.d.ts.map +1 -0
  97. package/dist/interfaces/rest/routes/inventory.js +59 -0
  98. package/dist/interfaces/rest/routes/media.d.ts +5 -0
  99. package/dist/interfaces/rest/routes/media.d.ts.map +1 -0
  100. package/dist/interfaces/rest/routes/media.js +65 -0
  101. package/dist/interfaces/rest/routes/orders.d.ts +5 -0
  102. package/dist/interfaces/rest/routes/orders.d.ts.map +1 -0
  103. package/dist/interfaces/rest/routes/orders.js +64 -0
  104. package/dist/interfaces/rest/routes/payments.d.ts +5 -0
  105. package/dist/interfaces/rest/routes/payments.d.ts.map +1 -0
  106. package/dist/interfaces/rest/routes/payments.js +45 -0
  107. package/dist/interfaces/rest/routes/pricing.d.ts +5 -0
  108. package/dist/interfaces/rest/routes/pricing.d.ts.map +1 -0
  109. package/dist/interfaces/rest/routes/pricing.js +48 -0
  110. package/dist/interfaces/rest/routes/promotions.d.ts +5 -0
  111. package/dist/interfaces/rest/routes/promotions.d.ts.map +1 -0
  112. package/dist/interfaces/rest/routes/promotions.js +75 -0
  113. package/dist/interfaces/rest/routes/search.d.ts +5 -0
  114. package/dist/interfaces/rest/routes/search.d.ts.map +1 -0
  115. package/dist/interfaces/rest/routes/search.js +60 -0
  116. package/dist/interfaces/rest/routes/webhooks.d.ts +5 -0
  117. package/dist/interfaces/rest/routes/webhooks.d.ts.map +1 -0
  118. package/dist/interfaces/rest/routes/webhooks.js +39 -0
  119. package/dist/interfaces/rest/schemas/admin-jobs.d.ts +327 -0
  120. package/dist/interfaces/rest/schemas/admin-jobs.d.ts.map +1 -0
  121. package/dist/interfaces/rest/schemas/admin-jobs.js +37 -0
  122. package/dist/interfaces/rest/schemas/audit.d.ts +59 -0
  123. package/dist/interfaces/rest/schemas/audit.d.ts.map +1 -0
  124. package/dist/interfaces/rest/schemas/audit.js +43 -0
  125. package/dist/interfaces/rest/schemas/carts.d.ts +1446 -0
  126. package/dist/interfaces/rest/schemas/carts.d.ts.map +1 -0
  127. package/dist/interfaces/rest/schemas/carts.js +109 -0
  128. package/dist/interfaces/rest/schemas/catalog.d.ts +5416 -0
  129. package/dist/interfaces/rest/schemas/catalog.d.ts.map +1 -0
  130. package/dist/interfaces/rest/schemas/catalog.js +397 -0
  131. package/dist/interfaces/rest/schemas/checkout.d.ts +160 -0
  132. package/dist/interfaces/rest/schemas/checkout.d.ts.map +1 -0
  133. package/dist/interfaces/rest/schemas/checkout.js +60 -0
  134. package/dist/interfaces/rest/schemas/customer-portal.d.ts +2197 -0
  135. package/dist/interfaces/rest/schemas/customer-portal.d.ts.map +1 -0
  136. package/dist/interfaces/rest/schemas/customer-portal.js +177 -0
  137. package/dist/interfaces/rest/schemas/inventory.d.ts +469 -0
  138. package/dist/interfaces/rest/schemas/inventory.d.ts.map +1 -0
  139. package/dist/interfaces/rest/schemas/inventory.js +128 -0
  140. package/dist/interfaces/rest/schemas/media.d.ts +303 -0
  141. package/dist/interfaces/rest/schemas/media.d.ts.map +1 -0
  142. package/dist/interfaces/rest/schemas/media.js +69 -0
  143. package/dist/interfaces/rest/schemas/orders.d.ts +1782 -0
  144. package/dist/interfaces/rest/schemas/orders.d.ts.map +1 -0
  145. package/dist/interfaces/rest/schemas/orders.js +93 -0
  146. package/dist/interfaces/rest/schemas/pricing.d.ts +256 -0
  147. package/dist/interfaces/rest/schemas/pricing.d.ts.map +1 -0
  148. package/dist/interfaces/rest/schemas/pricing.js +72 -0
  149. package/dist/interfaces/rest/schemas/promotions.d.ts +363 -0
  150. package/dist/interfaces/rest/schemas/promotions.d.ts.map +1 -0
  151. package/dist/interfaces/rest/schemas/promotions.js +98 -0
  152. package/dist/interfaces/rest/schemas/responses.d.ts +4062 -0
  153. package/dist/interfaces/rest/schemas/responses.d.ts.map +1 -0
  154. package/dist/interfaces/rest/schemas/responses.js +63 -0
  155. package/dist/interfaces/rest/schemas/search.d.ts +245 -0
  156. package/dist/interfaces/rest/schemas/search.d.ts.map +1 -0
  157. package/dist/interfaces/rest/schemas/search.js +55 -0
  158. package/dist/interfaces/rest/schemas/shared.d.ts +95 -0
  159. package/dist/interfaces/rest/schemas/shared.d.ts.map +1 -0
  160. package/dist/interfaces/rest/schemas/shared.js +51 -0
  161. package/dist/interfaces/rest/schemas/webhooks.d.ts +221 -0
  162. package/dist/interfaces/rest/schemas/webhooks.d.ts.map +1 -0
  163. package/dist/interfaces/rest/schemas/webhooks.js +62 -0
  164. package/dist/interfaces/rest/utils.d.ts +45 -0
  165. package/dist/interfaces/rest/utils.d.ts.map +1 -0
  166. package/dist/interfaces/rest/utils.js +71 -0
  167. package/dist/interfaces/rest/webhook-router.d.ts +41 -0
  168. package/dist/interfaces/rest/webhook-router.d.ts.map +1 -0
  169. package/dist/interfaces/rest/webhook-router.js +36 -0
  170. package/dist/kernel/compensation/executor.d.ts +21 -0
  171. package/dist/kernel/compensation/executor.d.ts.map +1 -0
  172. package/dist/kernel/compensation/executor.js +36 -0
  173. package/dist/kernel/compensation/types.d.ts +25 -0
  174. package/dist/kernel/compensation/types.d.ts.map +1 -0
  175. package/dist/kernel/compensation/types.js +1 -0
  176. package/dist/kernel/database/adapter.d.ts +10 -0
  177. package/dist/kernel/database/adapter.d.ts.map +1 -0
  178. package/dist/kernel/database/adapter.js +3 -0
  179. package/dist/kernel/database/drizzle-db.d.ts +49 -0
  180. package/dist/kernel/database/drizzle-db.d.ts.map +1 -0
  181. package/dist/kernel/database/drizzle-db.js +20 -0
  182. package/dist/kernel/database/migrate.d.ts +38 -0
  183. package/dist/kernel/database/migrate.d.ts.map +1 -0
  184. package/dist/kernel/database/migrate.js +61 -0
  185. package/dist/kernel/database/plugin-types.d.ts +32 -0
  186. package/dist/kernel/database/plugin-types.d.ts.map +1 -0
  187. package/dist/kernel/database/plugin-types.js +10 -0
  188. package/dist/kernel/database/schema.d.ts +24 -0
  189. package/dist/kernel/database/schema.d.ts.map +1 -0
  190. package/dist/kernel/database/schema.js +36 -0
  191. package/dist/kernel/database/scoped-db.d.ts +20 -0
  192. package/dist/kernel/database/scoped-db.d.ts.map +1 -0
  193. package/dist/kernel/database/scoped-db.js +62 -0
  194. package/dist/kernel/database/tx-context.d.ts +15 -0
  195. package/dist/kernel/database/tx-context.d.ts.map +1 -0
  196. package/dist/kernel/database/tx-context.js +19 -0
  197. package/dist/kernel/error-mapper.d.ts +3 -0
  198. package/dist/kernel/error-mapper.d.ts.map +1 -0
  199. package/dist/kernel/error-mapper.js +12 -0
  200. package/dist/kernel/errors.d.ts +38 -0
  201. package/dist/kernel/errors.d.ts.map +1 -0
  202. package/dist/kernel/errors.js +69 -0
  203. package/dist/kernel/factory/in-memory-repository-factory.d.ts +20 -0
  204. package/dist/kernel/factory/in-memory-repository-factory.d.ts.map +1 -0
  205. package/dist/kernel/factory/in-memory-repository-factory.js +83 -0
  206. package/dist/kernel/factory/repository-factory.d.ts +71 -0
  207. package/dist/kernel/factory/repository-factory.d.ts.map +1 -0
  208. package/dist/kernel/factory/repository-factory.js +136 -0
  209. package/dist/kernel/hooks/create-context.d.ts +25 -0
  210. package/dist/kernel/hooks/create-context.d.ts.map +1 -0
  211. package/dist/kernel/hooks/create-context.js +22 -0
  212. package/dist/kernel/hooks/executor.d.ts +12 -0
  213. package/dist/kernel/hooks/executor.d.ts.map +1 -0
  214. package/dist/kernel/hooks/executor.js +50 -0
  215. package/dist/kernel/hooks/registry.d.ts +28 -0
  216. package/dist/kernel/hooks/registry.d.ts.map +1 -0
  217. package/dist/kernel/hooks/registry.js +58 -0
  218. package/dist/kernel/hooks/types.d.ts +37 -0
  219. package/dist/kernel/hooks/types.d.ts.map +1 -0
  220. package/dist/kernel/hooks/types.js +1 -0
  221. package/dist/kernel/http-error.d.ts +30 -0
  222. package/dist/kernel/http-error.d.ts.map +1 -0
  223. package/dist/kernel/http-error.js +35 -0
  224. package/dist/kernel/jobs/adapter.d.ts +25 -0
  225. package/dist/kernel/jobs/adapter.d.ts.map +1 -0
  226. package/dist/kernel/jobs/adapter.js +9 -0
  227. package/dist/kernel/jobs/drizzle-adapter.d.ts +15 -0
  228. package/dist/kernel/jobs/drizzle-adapter.d.ts.map +1 -0
  229. package/dist/kernel/jobs/drizzle-adapter.js +42 -0
  230. package/dist/kernel/jobs/runner.d.ts +24 -0
  231. package/dist/kernel/jobs/runner.d.ts.map +1 -0
  232. package/dist/kernel/jobs/runner.js +114 -0
  233. package/dist/kernel/jobs/schema.d.ts +280 -0
  234. package/dist/kernel/jobs/schema.d.ts.map +1 -0
  235. package/dist/kernel/jobs/schema.js +37 -0
  236. package/dist/kernel/jobs/types.d.ts +30 -0
  237. package/dist/kernel/jobs/types.d.ts.map +1 -0
  238. package/dist/kernel/jobs/types.js +1 -0
  239. package/dist/kernel/local-api.d.ts +103 -0
  240. package/dist/kernel/local-api.d.ts.map +1 -0
  241. package/dist/kernel/local-api.js +87 -0
  242. package/dist/kernel/plugin/capability-registry.d.ts +9 -0
  243. package/dist/kernel/plugin/capability-registry.d.ts.map +1 -0
  244. package/dist/kernel/plugin/capability-registry.js +28 -0
  245. package/dist/kernel/plugin/dependency-graph.d.ts +6 -0
  246. package/dist/kernel/plugin/dependency-graph.d.ts.map +1 -0
  247. package/dist/kernel/plugin/dependency-graph.js +55 -0
  248. package/dist/kernel/plugin/manifest.d.ts +90 -0
  249. package/dist/kernel/plugin/manifest.d.ts.map +1 -0
  250. package/dist/kernel/plugin/manifest.js +140 -0
  251. package/dist/kernel/query/executor.d.ts +21 -0
  252. package/dist/kernel/query/executor.d.ts.map +1 -0
  253. package/dist/kernel/query/executor.js +128 -0
  254. package/dist/kernel/query/registry.d.ts +33 -0
  255. package/dist/kernel/query/registry.d.ts.map +1 -0
  256. package/dist/kernel/query/registry.js +20 -0
  257. package/dist/kernel/result.d.ts +36 -0
  258. package/dist/kernel/result.d.ts.map +1 -0
  259. package/dist/kernel/result.js +16 -0
  260. package/dist/kernel/schema/extra-columns.d.ts +23 -0
  261. package/dist/kernel/schema/extra-columns.d.ts.map +1 -0
  262. package/dist/kernel/schema/extra-columns.js +10 -0
  263. package/dist/kernel/service-registry.d.ts +109 -0
  264. package/dist/kernel/service-registry.d.ts.map +1 -0
  265. package/dist/kernel/service-registry.js +26 -0
  266. package/dist/kernel/service-timing.d.ts +25 -0
  267. package/dist/kernel/service-timing.d.ts.map +1 -0
  268. package/dist/kernel/service-timing.js +62 -0
  269. package/dist/kernel/state-machine/machine.d.ts +24 -0
  270. package/dist/kernel/state-machine/machine.d.ts.map +1 -0
  271. package/dist/kernel/state-machine/machine.js +70 -0
  272. package/dist/modules/analytics/cubes.d.ts +19 -0
  273. package/dist/modules/analytics/cubes.d.ts.map +1 -0
  274. package/dist/modules/analytics/cubes.js +187 -0
  275. package/dist/modules/analytics/drizzle-adapter.d.ts +13 -0
  276. package/dist/modules/analytics/drizzle-adapter.d.ts.map +1 -0
  277. package/dist/modules/analytics/drizzle-adapter.js +358 -0
  278. package/dist/modules/analytics/hooks.d.ts +13 -0
  279. package/dist/modules/analytics/hooks.d.ts.map +1 -0
  280. package/dist/modules/analytics/hooks.js +12 -0
  281. package/dist/modules/analytics/models.d.ts +14 -0
  282. package/dist/modules/analytics/models.d.ts.map +1 -0
  283. package/dist/modules/analytics/models.js +118 -0
  284. package/dist/modules/analytics/repository/index.d.ts +5 -0
  285. package/dist/modules/analytics/repository/index.d.ts.map +1 -0
  286. package/dist/modules/analytics/repository/index.js +1 -0
  287. package/dist/modules/analytics/service.d.ts +45 -0
  288. package/dist/modules/analytics/service.d.ts.map +1 -0
  289. package/dist/modules/analytics/service.js +196 -0
  290. package/dist/modules/analytics/types.d.ts +119 -0
  291. package/dist/modules/analytics/types.d.ts.map +1 -0
  292. package/dist/modules/analytics/types.js +25 -0
  293. package/dist/modules/audit/hooks.d.ts +7 -0
  294. package/dist/modules/audit/hooks.d.ts.map +1 -0
  295. package/dist/modules/audit/hooks.js +67 -0
  296. package/dist/modules/audit/schema.d.ts +178 -0
  297. package/dist/modules/audit/schema.d.ts.map +1 -0
  298. package/dist/modules/audit/schema.js +21 -0
  299. package/dist/modules/audit/service.d.ts +38 -0
  300. package/dist/modules/audit/service.d.ts.map +1 -0
  301. package/dist/modules/audit/service.js +109 -0
  302. package/dist/modules/cart/access.d.ts +11 -0
  303. package/dist/modules/cart/access.d.ts.map +1 -0
  304. package/dist/modules/cart/access.js +18 -0
  305. package/dist/modules/cart/matcher.d.ts +20 -0
  306. package/dist/modules/cart/matcher.d.ts.map +1 -0
  307. package/dist/modules/cart/matcher.js +2 -0
  308. package/dist/modules/cart/repository/in-memory.d.ts +30 -0
  309. package/dist/modules/cart/repository/in-memory.d.ts.map +1 -0
  310. package/dist/modules/cart/repository/in-memory.js +159 -0
  311. package/dist/modules/cart/repository/index.d.ts +45 -0
  312. package/dist/modules/cart/repository/index.d.ts.map +1 -0
  313. package/dist/modules/cart/repository/index.js +158 -0
  314. package/dist/modules/cart/schema.d.ts +359 -0
  315. package/dist/modules/cart/schema.d.ts.map +1 -0
  316. package/dist/modules/cart/schema.js +40 -0
  317. package/dist/modules/cart/schemas.d.ts +29 -0
  318. package/dist/modules/cart/schemas.d.ts.map +1 -0
  319. package/dist/modules/cart/schemas.js +14 -0
  320. package/dist/modules/cart/service.d.ts +63 -0
  321. package/dist/modules/cart/service.d.ts.map +1 -0
  322. package/dist/modules/cart/service.js +339 -0
  323. package/dist/modules/catalog/repository/in-memory.d.ts +82 -0
  324. package/dist/modules/catalog/repository/in-memory.d.ts.map +1 -0
  325. package/dist/modules/catalog/repository/in-memory.js +444 -0
  326. package/dist/modules/catalog/repository/index.d.ts +106 -0
  327. package/dist/modules/catalog/repository/index.d.ts.map +1 -0
  328. package/dist/modules/catalog/repository/index.js +455 -0
  329. package/dist/modules/catalog/schema.d.ts +1193 -0
  330. package/dist/modules/catalog/schema.d.ts.map +1 -0
  331. package/dist/modules/catalog/schema.js +149 -0
  332. package/dist/modules/catalog/schemas.d.ts +81 -0
  333. package/dist/modules/catalog/schemas.d.ts.map +1 -0
  334. package/dist/modules/catalog/schemas.js +62 -0
  335. package/dist/modules/catalog/service.d.ts +160 -0
  336. package/dist/modules/catalog/service.d.ts.map +1 -0
  337. package/dist/modules/catalog/service.js +759 -0
  338. package/dist/modules/customers/repository/in-memory.d.ts +37 -0
  339. package/dist/modules/customers/repository/in-memory.d.ts.map +1 -0
  340. package/dist/modules/customers/repository/in-memory.js +278 -0
  341. package/dist/modules/customers/repository/index.d.ts +47 -0
  342. package/dist/modules/customers/repository/index.d.ts.map +1 -0
  343. package/dist/modules/customers/repository/index.js +206 -0
  344. package/dist/modules/customers/schema.d.ts +560 -0
  345. package/dist/modules/customers/schema.d.ts.map +1 -0
  346. package/dist/modules/customers/schema.js +60 -0
  347. package/dist/modules/customers/service.d.ts +25 -0
  348. package/dist/modules/customers/service.d.ts.map +1 -0
  349. package/dist/modules/customers/service.js +91 -0
  350. package/dist/modules/fulfillment/repository/in-memory.d.ts +53 -0
  351. package/dist/modules/fulfillment/repository/in-memory.d.ts.map +1 -0
  352. package/dist/modules/fulfillment/repository/in-memory.js +327 -0
  353. package/dist/modules/fulfillment/repository/index.d.ts +63 -0
  354. package/dist/modules/fulfillment/repository/index.d.ts.map +1 -0
  355. package/dist/modules/fulfillment/repository/index.js +268 -0
  356. package/dist/modules/fulfillment/schema.d.ts +655 -0
  357. package/dist/modules/fulfillment/schema.d.ts.map +1 -0
  358. package/dist/modules/fulfillment/schema.js +83 -0
  359. package/dist/modules/fulfillment/service.d.ts +58 -0
  360. package/dist/modules/fulfillment/service.d.ts.map +1 -0
  361. package/dist/modules/fulfillment/service.js +338 -0
  362. package/dist/modules/fulfillment/types.d.ts +44 -0
  363. package/dist/modules/fulfillment/types.d.ts.map +1 -0
  364. package/dist/modules/fulfillment/types.js +1 -0
  365. package/dist/modules/inventory/repository/in-memory.d.ts +51 -0
  366. package/dist/modules/inventory/repository/in-memory.d.ts.map +1 -0
  367. package/dist/modules/inventory/repository/in-memory.js +281 -0
  368. package/dist/modules/inventory/repository/index.d.ts +81 -0
  369. package/dist/modules/inventory/repository/index.d.ts.map +1 -0
  370. package/dist/modules/inventory/repository/index.js +310 -0
  371. package/dist/modules/inventory/schema.d.ts +570 -0
  372. package/dist/modules/inventory/schema.d.ts.map +1 -0
  373. package/dist/modules/inventory/schema.js +69 -0
  374. package/dist/modules/inventory/schemas.d.ts +31 -0
  375. package/dist/modules/inventory/schemas.d.ts.map +1 -0
  376. package/dist/modules/inventory/schemas.js +28 -0
  377. package/dist/modules/inventory/service.d.ts +65 -0
  378. package/dist/modules/inventory/service.d.ts.map +1 -0
  379. package/dist/modules/inventory/service.js +271 -0
  380. package/dist/modules/media/adapter.d.ts +16 -0
  381. package/dist/modules/media/adapter.d.ts.map +1 -0
  382. package/dist/modules/media/adapter.js +1 -0
  383. package/dist/modules/media/repository/in-memory.d.ts +26 -0
  384. package/dist/modules/media/repository/in-memory.d.ts.map +1 -0
  385. package/dist/modules/media/repository/in-memory.js +145 -0
  386. package/dist/modules/media/repository/index.d.ts +35 -0
  387. package/dist/modules/media/repository/index.d.ts.map +1 -0
  388. package/dist/modules/media/repository/index.js +176 -0
  389. package/dist/modules/media/schema.d.ts +289 -0
  390. package/dist/modules/media/schema.d.ts.map +1 -0
  391. package/dist/modules/media/schema.js +35 -0
  392. package/dist/modules/media/service.d.ts +42 -0
  393. package/dist/modules/media/service.d.ts.map +1 -0
  394. package/dist/modules/media/service.js +89 -0
  395. package/dist/modules/orders/repository/in-memory.d.ts +40 -0
  396. package/dist/modules/orders/repository/in-memory.d.ts.map +1 -0
  397. package/dist/modules/orders/repository/in-memory.js +245 -0
  398. package/dist/modules/orders/repository/index.d.ts +48 -0
  399. package/dist/modules/orders/repository/index.d.ts.map +1 -0
  400. package/dist/modules/orders/repository/index.js +199 -0
  401. package/dist/modules/orders/schema.d.ts +672 -0
  402. package/dist/modules/orders/schema.d.ts.map +1 -0
  403. package/dist/modules/orders/schema.js +63 -0
  404. package/dist/modules/orders/service.d.ts +85 -0
  405. package/dist/modules/orders/service.d.ts.map +1 -0
  406. package/dist/modules/orders/service.js +313 -0
  407. package/dist/modules/orders/stale-order-cleanup.d.ts +27 -0
  408. package/dist/modules/orders/stale-order-cleanup.d.ts.map +1 -0
  409. package/dist/modules/orders/stale-order-cleanup.js +55 -0
  410. package/dist/modules/organization/service.d.ts +53 -0
  411. package/dist/modules/organization/service.d.ts.map +1 -0
  412. package/dist/modules/organization/service.js +151 -0
  413. package/dist/modules/payments/adapter.d.ts +42 -0
  414. package/dist/modules/payments/adapter.d.ts.map +1 -0
  415. package/dist/modules/payments/adapter.js +1 -0
  416. package/dist/modules/payments/repository/index.d.ts +5 -0
  417. package/dist/modules/payments/repository/index.d.ts.map +1 -0
  418. package/dist/modules/payments/repository/index.js +1 -0
  419. package/dist/modules/payments/service.d.ts +23 -0
  420. package/dist/modules/payments/service.d.ts.map +1 -0
  421. package/dist/modules/payments/service.js +72 -0
  422. package/dist/modules/pricing/repository/in-memory.d.ts +25 -0
  423. package/dist/modules/pricing/repository/in-memory.d.ts.map +1 -0
  424. package/dist/modules/pricing/repository/in-memory.js +288 -0
  425. package/dist/modules/pricing/repository/index.d.ts +34 -0
  426. package/dist/modules/pricing/repository/index.d.ts.map +1 -0
  427. package/dist/modules/pricing/repository/index.js +176 -0
  428. package/dist/modules/pricing/schema.d.ts +565 -0
  429. package/dist/modules/pricing/schema.d.ts.map +1 -0
  430. package/dist/modules/pricing/schema.js +57 -0
  431. package/dist/modules/pricing/schemas.d.ts +37 -0
  432. package/dist/modules/pricing/schemas.d.ts.map +1 -0
  433. package/dist/modules/pricing/schemas.js +30 -0
  434. package/dist/modules/pricing/service.d.ts +62 -0
  435. package/dist/modules/pricing/service.d.ts.map +1 -0
  436. package/dist/modules/pricing/service.js +308 -0
  437. package/dist/modules/promotions/repository/in-memory.d.ts +32 -0
  438. package/dist/modules/promotions/repository/in-memory.d.ts.map +1 -0
  439. package/dist/modules/promotions/repository/in-memory.js +227 -0
  440. package/dist/modules/promotions/repository/index.d.ts +41 -0
  441. package/dist/modules/promotions/repository/index.d.ts.map +1 -0
  442. package/dist/modules/promotions/repository/index.js +204 -0
  443. package/dist/modules/promotions/schema.d.ts +427 -0
  444. package/dist/modules/promotions/schema.d.ts.map +1 -0
  445. package/dist/modules/promotions/schema.js +52 -0
  446. package/dist/modules/promotions/schemas.d.ts +33 -0
  447. package/dist/modules/promotions/schemas.d.ts.map +1 -0
  448. package/dist/modules/promotions/schemas.js +32 -0
  449. package/dist/modules/promotions/service.d.ts +80 -0
  450. package/dist/modules/promotions/service.d.ts.map +1 -0
  451. package/dist/modules/promotions/service.js +347 -0
  452. package/dist/modules/search/adapter.d.ts +51 -0
  453. package/dist/modules/search/adapter.d.ts.map +1 -0
  454. package/dist/modules/search/adapter.js +1 -0
  455. package/dist/modules/search/hooks.d.ts +8 -0
  456. package/dist/modules/search/hooks.d.ts.map +1 -0
  457. package/dist/modules/search/hooks.js +6 -0
  458. package/dist/modules/search/repository/index.d.ts +5 -0
  459. package/dist/modules/search/repository/index.d.ts.map +1 -0
  460. package/dist/modules/search/repository/index.js +1 -0
  461. package/dist/modules/search/service.d.ts +24 -0
  462. package/dist/modules/search/service.d.ts.map +1 -0
  463. package/dist/modules/search/service.js +217 -0
  464. package/dist/modules/shipping/calculator.d.ts +42 -0
  465. package/dist/modules/shipping/calculator.d.ts.map +1 -0
  466. package/dist/modules/shipping/calculator.js +91 -0
  467. package/dist/modules/shipping/repository/index.d.ts +5 -0
  468. package/dist/modules/shipping/repository/index.d.ts.map +1 -0
  469. package/dist/modules/shipping/repository/index.js +1 -0
  470. package/dist/modules/shipping/service.d.ts +28 -0
  471. package/dist/modules/shipping/service.d.ts.map +1 -0
  472. package/dist/modules/shipping/service.js +20 -0
  473. package/dist/modules/tax/adapter.d.ts +58 -0
  474. package/dist/modules/tax/adapter.d.ts.map +1 -0
  475. package/dist/modules/tax/adapter.js +1 -0
  476. package/dist/modules/tax/repository/index.d.ts +5 -0
  477. package/dist/modules/tax/repository/index.d.ts.map +1 -0
  478. package/dist/modules/tax/repository/index.js +1 -0
  479. package/dist/modules/tax/service.d.ts +19 -0
  480. package/dist/modules/tax/service.d.ts.map +1 -0
  481. package/dist/modules/tax/service.js +34 -0
  482. package/dist/modules/webhooks/hook.d.ts +13 -0
  483. package/dist/modules/webhooks/hook.d.ts.map +1 -0
  484. package/dist/modules/webhooks/hook.js +29 -0
  485. package/dist/modules/webhooks/repository/in-memory.d.ts +31 -0
  486. package/dist/modules/webhooks/repository/in-memory.d.ts.map +1 -0
  487. package/dist/modules/webhooks/repository/in-memory.js +187 -0
  488. package/dist/modules/webhooks/repository/index.d.ts +40 -0
  489. package/dist/modules/webhooks/repository/index.d.ts.map +1 -0
  490. package/dist/modules/webhooks/repository/index.js +175 -0
  491. package/dist/modules/webhooks/schema.d.ts +404 -0
  492. package/dist/modules/webhooks/schema.d.ts.map +1 -0
  493. package/dist/modules/webhooks/schema.js +40 -0
  494. package/dist/modules/webhooks/service.d.ts +23 -0
  495. package/dist/modules/webhooks/service.d.ts.map +1 -0
  496. package/dist/modules/webhooks/service.js +92 -0
  497. package/dist/modules/webhooks/signing.d.ts +2 -0
  498. package/dist/modules/webhooks/signing.d.ts.map +1 -0
  499. package/dist/modules/webhooks/signing.js +5 -0
  500. package/dist/modules/webhooks/ssrf-guard.d.ts +19 -0
  501. package/dist/modules/webhooks/ssrf-guard.d.ts.map +1 -0
  502. package/dist/modules/webhooks/ssrf-guard.js +79 -0
  503. package/dist/modules/webhooks/tasks.d.ts +16 -0
  504. package/dist/modules/webhooks/tasks.d.ts.map +1 -0
  505. package/dist/modules/webhooks/tasks.js +35 -0
  506. package/dist/modules/webhooks/worker.d.ts +21 -0
  507. package/dist/modules/webhooks/worker.d.ts.map +1 -0
  508. package/dist/modules/webhooks/worker.js +113 -0
  509. package/dist/runtime/commerce.d.ts +110 -0
  510. package/dist/runtime/commerce.d.ts.map +1 -0
  511. package/dist/runtime/commerce.js +37 -0
  512. package/dist/runtime/kernel.d.ts +72 -0
  513. package/dist/runtime/kernel.d.ts.map +1 -0
  514. package/dist/runtime/kernel.js +298 -0
  515. package/dist/runtime/logger.d.ts +11 -0
  516. package/dist/runtime/logger.d.ts.map +1 -0
  517. package/dist/runtime/logger.js +32 -0
  518. package/dist/runtime/server.d.ts +28 -0
  519. package/dist/runtime/server.d.ts.map +1 -0
  520. package/dist/runtime/server.js +277 -0
  521. package/dist/runtime/shutdown.d.ts +15 -0
  522. package/dist/runtime/shutdown.d.ts.map +1 -0
  523. package/dist/runtime/shutdown.js +34 -0
  524. package/dist/runtime/state-manager.d.ts +14 -0
  525. package/dist/runtime/state-manager.d.ts.map +1 -0
  526. package/dist/runtime/state-manager.js +84 -0
  527. package/dist/runtime/state-repository.d.ts +13 -0
  528. package/dist/runtime/state-repository.d.ts.map +1 -0
  529. package/dist/runtime/state-repository.js +160 -0
  530. package/dist/runtime/state.d.ts +382 -0
  531. package/dist/runtime/state.d.ts.map +1 -0
  532. package/dist/runtime/state.js +37 -0
  533. package/dist/runtime/store.d.ts +382 -0
  534. package/dist/runtime/store.d.ts.map +1 -0
  535. package/dist/runtime/store.js +37 -0
  536. package/dist/test-utils/create-pglite-adapter.d.ts +32 -0
  537. package/dist/test-utils/create-pglite-adapter.d.ts.map +1 -0
  538. package/dist/test-utils/create-pglite-adapter.js +106 -0
  539. package/dist/test-utils/create-plugin-test-app.d.ts +50 -0
  540. package/dist/test-utils/create-plugin-test-app.d.ts.map +1 -0
  541. package/dist/test-utils/create-plugin-test-app.js +74 -0
  542. package/dist/test-utils/create-repository-test-harness.d.ts +8 -0
  543. package/dist/test-utils/create-repository-test-harness.d.ts.map +1 -0
  544. package/dist/test-utils/create-repository-test-harness.js +7 -0
  545. package/dist/test-utils/create-test-config.d.ts +18 -0
  546. package/dist/test-utils/create-test-config.d.ts.map +1 -0
  547. package/dist/test-utils/create-test-config.js +174 -0
  548. package/dist/test-utils/create-test-kernel.d.ts +3 -0
  549. package/dist/test-utils/create-test-kernel.d.ts.map +1 -0
  550. package/dist/test-utils/create-test-kernel.js +5 -0
  551. package/dist/test-utils/create-test-plugin-context.d.ts +42 -0
  552. package/dist/test-utils/create-test-plugin-context.d.ts.map +1 -0
  553. package/dist/test-utils/create-test-plugin-context.js +46 -0
  554. package/dist/test-utils/rest-api-test-utils.d.ts +64 -0
  555. package/dist/test-utils/rest-api-test-utils.d.ts.map +1 -0
  556. package/dist/test-utils/rest-api-test-utils.js +207 -0
  557. package/dist/test-utils/test-actors.d.ts +15 -0
  558. package/dist/test-utils/test-actors.d.ts.map +1 -0
  559. package/dist/test-utils/test-actors.js +57 -0
  560. package/dist/test-utils/typed-hooks.d.ts +43 -0
  561. package/dist/test-utils/typed-hooks.d.ts.map +1 -0
  562. package/dist/test-utils/typed-hooks.js +35 -0
  563. package/dist/tsconfig.tsbuildinfo +1 -0
  564. package/dist/types/commerce-types.d.ts +34 -0
  565. package/dist/types/commerce-types.d.ts.map +1 -0
  566. package/dist/types/commerce-types.js +1 -0
  567. package/dist/utils/id.d.ts +2 -0
  568. package/dist/utils/id.d.ts.map +1 -0
  569. package/dist/utils/id.js +3 -0
  570. package/dist/utils/logger.d.ts +3 -0
  571. package/dist/utils/logger.d.ts.map +1 -0
  572. package/dist/utils/logger.js +16 -0
  573. package/dist/utils/pagination.d.ts +11 -0
  574. package/dist/utils/pagination.d.ts.map +1 -0
  575. package/dist/utils/pagination.js +15 -0
  576. package/package.json +63 -0
  577. package/src/adapters/console-email.ts +43 -0
  578. package/src/auth/access.ts +187 -0
  579. package/src/auth/auth-schema.ts +131 -0
  580. package/src/auth/middleware.ts +115 -0
  581. package/src/auth/org.ts +41 -0
  582. package/src/auth/permissions.ts +28 -0
  583. package/src/auth/setup.ts +160 -0
  584. package/src/auth/system-actor.ts +19 -0
  585. package/src/auth/types.ts +10 -0
  586. package/src/config/defaults.ts +82 -0
  587. package/src/config/define-config.ts +53 -0
  588. package/src/config/types.ts +299 -0
  589. package/src/generated/plugin-capabilities.d.ts +20 -0
  590. package/src/generated/plugin-manifest.ts +23 -0
  591. package/src/generated/plugin-repositories.d.ts +20 -0
  592. package/src/hooks/checkout-completion.ts +262 -0
  593. package/src/hooks/checkout.ts +677 -0
  594. package/src/hooks/order-emails.ts +62 -0
  595. package/src/index.ts +214 -0
  596. package/src/interfaces/mcp/agent-prompt.ts +174 -0
  597. package/src/interfaces/mcp/context-enrichment.ts +177 -0
  598. package/src/interfaces/mcp/server.ts +617 -0
  599. package/src/interfaces/mcp/transport.ts +68 -0
  600. package/src/interfaces/rest/customer-portal.ts +299 -0
  601. package/src/interfaces/rest/index.ts +74 -0
  602. package/src/interfaces/rest/router.ts +334 -0
  603. package/src/interfaces/rest/routes/admin-jobs.ts +58 -0
  604. package/src/interfaces/rest/routes/audit.ts +50 -0
  605. package/src/interfaces/rest/routes/carts.ts +89 -0
  606. package/src/interfaces/rest/routes/catalog.ts +493 -0
  607. package/src/interfaces/rest/routes/checkout.ts +283 -0
  608. package/src/interfaces/rest/routes/inventory.ts +70 -0
  609. package/src/interfaces/rest/routes/media.ts +86 -0
  610. package/src/interfaces/rest/routes/orders.ts +78 -0
  611. package/src/interfaces/rest/routes/payments.ts +60 -0
  612. package/src/interfaces/rest/routes/pricing.ts +57 -0
  613. package/src/interfaces/rest/routes/promotions.ts +92 -0
  614. package/src/interfaces/rest/routes/search.ts +71 -0
  615. package/src/interfaces/rest/routes/webhooks.ts +46 -0
  616. package/src/interfaces/rest/schemas/admin-jobs.ts +40 -0
  617. package/src/interfaces/rest/schemas/audit.ts +46 -0
  618. package/src/interfaces/rest/schemas/carts.ts +125 -0
  619. package/src/interfaces/rest/schemas/catalog.ts +450 -0
  620. package/src/interfaces/rest/schemas/checkout.ts +66 -0
  621. package/src/interfaces/rest/schemas/customer-portal.ts +195 -0
  622. package/src/interfaces/rest/schemas/inventory.ts +138 -0
  623. package/src/interfaces/rest/schemas/media.ts +75 -0
  624. package/src/interfaces/rest/schemas/orders.ts +104 -0
  625. package/src/interfaces/rest/schemas/pricing.ts +80 -0
  626. package/src/interfaces/rest/schemas/promotions.ts +110 -0
  627. package/src/interfaces/rest/schemas/responses.ts +85 -0
  628. package/src/interfaces/rest/schemas/search.ts +58 -0
  629. package/src/interfaces/rest/schemas/shared.ts +62 -0
  630. package/src/interfaces/rest/schemas/webhooks.ts +68 -0
  631. package/src/interfaces/rest/utils.ts +104 -0
  632. package/src/interfaces/rest/webhook-router.ts +50 -0
  633. package/src/kernel/compensation/executor.ts +61 -0
  634. package/src/kernel/compensation/types.ts +26 -0
  635. package/src/kernel/database/adapter.ts +13 -0
  636. package/src/kernel/database/drizzle-db.ts +56 -0
  637. package/src/kernel/database/migrate.ts +76 -0
  638. package/src/kernel/database/plugin-types.ts +34 -0
  639. package/src/kernel/database/schema.ts +49 -0
  640. package/src/kernel/database/scoped-db.ts +68 -0
  641. package/src/kernel/database/tx-context.ts +46 -0
  642. package/src/kernel/error-mapper.ts +15 -0
  643. package/src/kernel/errors.ts +89 -0
  644. package/src/kernel/factory/repository-factory.ts +242 -0
  645. package/src/kernel/hooks/create-context.ts +43 -0
  646. package/src/kernel/hooks/executor.ts +88 -0
  647. package/src/kernel/hooks/registry.ts +74 -0
  648. package/src/kernel/hooks/types.ts +52 -0
  649. package/src/kernel/http-error.ts +44 -0
  650. package/src/kernel/jobs/adapter.ts +36 -0
  651. package/src/kernel/jobs/drizzle-adapter.ts +58 -0
  652. package/src/kernel/jobs/runner.ts +153 -0
  653. package/src/kernel/jobs/schema.ts +46 -0
  654. package/src/kernel/jobs/types.ts +30 -0
  655. package/src/kernel/local-api.ts +185 -0
  656. package/src/kernel/plugin/manifest.ts +253 -0
  657. package/src/kernel/query/executor.ts +184 -0
  658. package/src/kernel/query/registry.ts +46 -0
  659. package/src/kernel/result.ts +33 -0
  660. package/src/kernel/schema/extra-columns.ts +37 -0
  661. package/src/kernel/service-registry.ts +76 -0
  662. package/src/kernel/service-timing.ts +89 -0
  663. package/src/kernel/state-machine/machine.ts +101 -0
  664. package/src/modules/analytics/drizzle-adapter.ts +426 -0
  665. package/src/modules/analytics/hooks.ts +11 -0
  666. package/src/modules/analytics/models.ts +125 -0
  667. package/src/modules/analytics/repository/index.ts +6 -0
  668. package/src/modules/analytics/service.ts +245 -0
  669. package/src/modules/analytics/types.ts +180 -0
  670. package/src/modules/audit/hooks.ts +78 -0
  671. package/src/modules/audit/schema.ts +33 -0
  672. package/src/modules/audit/service.ts +151 -0
  673. package/src/modules/cart/access.ts +27 -0
  674. package/src/modules/cart/matcher.ts +26 -0
  675. package/src/modules/cart/repository/index.ts +234 -0
  676. package/src/modules/cart/schema.ts +42 -0
  677. package/src/modules/cart/schemas.ts +38 -0
  678. package/src/modules/cart/service.ts +541 -0
  679. package/src/modules/catalog/repository/index.ts +772 -0
  680. package/src/modules/catalog/schema.ts +203 -0
  681. package/src/modules/catalog/schemas.ts +104 -0
  682. package/src/modules/catalog/service.ts +1544 -0
  683. package/src/modules/customers/repository/index.ts +327 -0
  684. package/src/modules/customers/schema.ts +64 -0
  685. package/src/modules/customers/service.ts +171 -0
  686. package/src/modules/fulfillment/repository/index.ts +426 -0
  687. package/src/modules/fulfillment/schema.ts +101 -0
  688. package/src/modules/fulfillment/service.ts +555 -0
  689. package/src/modules/fulfillment/types.ts +59 -0
  690. package/src/modules/inventory/repository/index.ts +509 -0
  691. package/src/modules/inventory/schema.ts +94 -0
  692. package/src/modules/inventory/schemas.ts +38 -0
  693. package/src/modules/inventory/service.ts +490 -0
  694. package/src/modules/media/adapter.ts +17 -0
  695. package/src/modules/media/repository/index.ts +274 -0
  696. package/src/modules/media/schema.ts +41 -0
  697. package/src/modules/media/service.ts +151 -0
  698. package/src/modules/orders/repository/index.ts +287 -0
  699. package/src/modules/orders/schema.ts +66 -0
  700. package/src/modules/orders/service.ts +619 -0
  701. package/src/modules/orders/stale-order-cleanup.ts +76 -0
  702. package/src/modules/organization/service.ts +191 -0
  703. package/src/modules/payments/adapter.ts +47 -0
  704. package/src/modules/payments/repository/index.ts +6 -0
  705. package/src/modules/payments/service.ts +107 -0
  706. package/src/modules/pricing/repository/index.ts +291 -0
  707. package/src/modules/pricing/schema.ts +71 -0
  708. package/src/modules/pricing/schemas.ts +38 -0
  709. package/src/modules/pricing/service.ts +494 -0
  710. package/src/modules/promotions/repository/index.ts +325 -0
  711. package/src/modules/promotions/schema.ts +62 -0
  712. package/src/modules/promotions/schemas.ts +38 -0
  713. package/src/modules/promotions/service.ts +598 -0
  714. package/src/modules/search/adapter.ts +57 -0
  715. package/src/modules/search/hooks.ts +12 -0
  716. package/src/modules/search/repository/index.ts +6 -0
  717. package/src/modules/search/service.ts +315 -0
  718. package/src/modules/shipping/calculator.ts +188 -0
  719. package/src/modules/shipping/repository/index.ts +6 -0
  720. package/src/modules/shipping/service.ts +51 -0
  721. package/src/modules/tax/adapter.ts +60 -0
  722. package/src/modules/tax/repository/index.ts +6 -0
  723. package/src/modules/tax/service.ts +53 -0
  724. package/src/modules/webhooks/hook.ts +34 -0
  725. package/src/modules/webhooks/repository/index.ts +278 -0
  726. package/src/modules/webhooks/schema.ts +56 -0
  727. package/src/modules/webhooks/service.ts +117 -0
  728. package/src/modules/webhooks/signing.ts +6 -0
  729. package/src/modules/webhooks/ssrf-guard.ts +71 -0
  730. package/src/modules/webhooks/tasks.ts +52 -0
  731. package/src/modules/webhooks/worker.ts +134 -0
  732. package/src/runtime/commerce.ts +145 -0
  733. package/src/runtime/kernel.ts +419 -0
  734. package/src/runtime/logger.ts +36 -0
  735. package/src/runtime/server.ts +345 -0
  736. package/src/runtime/shutdown.ts +43 -0
  737. package/src/test-utils/create-pglite-adapter.ts +129 -0
  738. package/src/test-utils/create-plugin-test-app.ts +128 -0
  739. package/src/test-utils/create-repository-test-harness.ts +16 -0
  740. package/src/test-utils/create-test-config.ts +190 -0
  741. package/src/test-utils/create-test-kernel.ts +7 -0
  742. package/src/test-utils/create-test-plugin-context.ts +75 -0
  743. package/src/test-utils/rest-api-test-utils.ts +265 -0
  744. package/src/test-utils/test-actors.ts +62 -0
  745. package/src/test-utils/typed-hooks.ts +54 -0
  746. package/src/types/commerce-types.ts +34 -0
  747. package/src/utils/id.ts +3 -0
  748. package/src/utils/logger.ts +18 -0
  749. package/src/utils/pagination.ts +22 -0
@@ -0,0 +1,87 @@
1
+ // ─── Implementation ─────────────────────────────────────────────────────────
2
+ const SERVICE_METHOD_CACHE = new WeakMap();
3
+ /**
4
+ * Create a proxy-based local API over kernel services.
5
+ * Every service method gets `actor` and `txCtx` auto-injected.
6
+ */
7
+ export function createLocalAPI(kernel, options = {}) {
8
+ const actor = options.actor ?? null;
9
+ const txCtx = options.tx != null
10
+ ? {
11
+ tx: options.tx,
12
+ actor,
13
+ requestId: options.requestId ?? crypto.randomUUID(),
14
+ }
15
+ : undefined;
16
+ // Top-level proxy: intercept service access (e.g., api.catalog, api.giftCards)
17
+ return new Proxy(kernel.services, {
18
+ get(target, serviceName) {
19
+ const service = target[serviceName];
20
+ // Non-object services (e.g., email config) — return as-is
21
+ if (service == null || typeof service !== "object") {
22
+ return service;
23
+ }
24
+ // Method-level proxy: intercept method calls on the service
25
+ return new Proxy(service, {
26
+ get(svcTarget, methodName) {
27
+ const method = svcTarget[methodName];
28
+ if (typeof method !== "function") {
29
+ return method;
30
+ }
31
+ // Check cache to avoid re-creating wrapper functions
32
+ let methodCache = SERVICE_METHOD_CACHE.get(svcTarget);
33
+ if (!methodCache) {
34
+ methodCache = new Map();
35
+ SERVICE_METHOD_CACHE.set(svcTarget, methodCache);
36
+ }
37
+ const cacheKey = `${methodName}:${actor?.userId ?? "null"}`;
38
+ let cached = methodCache.get(cacheKey);
39
+ if (cached)
40
+ return cached;
41
+ // Create wrapped method that auto-injects actor + txCtx
42
+ cached = (...args) => {
43
+ return method.call(svcTarget, ...args, actor, txCtx);
44
+ };
45
+ methodCache.set(cacheKey, cached);
46
+ return cached;
47
+ },
48
+ });
49
+ },
50
+ });
51
+ }
52
+ // ─── Legacy Class API (backward compat) ─────────────────────────────────────
53
+ /**
54
+ * @deprecated Use `createLocalAPI(kernel, { actor, tx })` instead.
55
+ * Kept for backward compatibility with existing hook code.
56
+ */
57
+ export class LocalAPI {
58
+ _proxy;
59
+ constructor(ctx, kernel) {
60
+ this._proxy = createLocalAPI(kernel, {
61
+ actor: ctx.actor,
62
+ tx: ctx.tx,
63
+ requestId: ctx.requestId,
64
+ });
65
+ }
66
+ get orders() { return this._proxy.orders; }
67
+ get catalog() { return this._proxy.catalog; }
68
+ get cart() { return this._proxy.cart; }
69
+ get inventory() { return this._proxy.inventory; }
70
+ get customers() { return this._proxy.customers; }
71
+ get pricing() { return this._proxy.pricing; }
72
+ get promotions() { return this._proxy.promotions; }
73
+ get media() { return this._proxy.media; }
74
+ get shipping() { return this._proxy.shipping; }
75
+ get search() { return this._proxy.search; }
76
+ get webhooks() { return this._proxy.webhooks; }
77
+ get fulfillment() { return this._proxy.fulfillment; }
78
+ get payments() { return this._proxy.payments; }
79
+ get analytics() { return this._proxy.analytics; }
80
+ get tax() { return this._proxy.tax; }
81
+ get audit() { return this._proxy.audit; }
82
+ get organization() { return this._proxy.organization; }
83
+ /** Access any service (including plugins) by name */
84
+ service(name) {
85
+ return this._proxy[name];
86
+ }
87
+ }
@@ -0,0 +1,9 @@
1
+ import type { CommercePluginManifest } from "./manifest";
2
+ export type CapabilityHandler = unknown;
3
+ export declare class PluginCapabilityRegistry {
4
+ private registry;
5
+ register(manifest: CommercePluginManifest, capabilities: Record<string, CapabilityHandler>): void;
6
+ get<TCapability = unknown>(key: string): TCapability | undefined;
7
+ list(): string[];
8
+ }
9
+ //# sourceMappingURL=capability-registry.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"capability-registry.d.ts","sourceRoot":"","sources":["../../../src/kernel/plugin/capability-registry.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,YAAY,CAAC;AAEzD,MAAM,MAAM,iBAAiB,GAAG,OAAO,CAAC;AAUxC,qBAAa,wBAAwB;IACnC,OAAO,CAAC,QAAQ,CAAwC;IAExD,QAAQ,CACN,QAAQ,EAAE,sBAAsB,EAChC,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,iBAAiB,CAAC,GAC9C,IAAI;IAeP,GAAG,CAAC,WAAW,GAAG,OAAO,EAAE,GAAG,EAAE,MAAM,GAAG,WAAW,GAAG,SAAS;IAIhE,IAAI,IAAI,MAAM,EAAE;CAGjB"}
@@ -0,0 +1,28 @@
1
+ function majorVersion(version) {
2
+ const parsed = Number.parseInt(version.split(".")[0] ?? "1", 10);
3
+ if (Number.isNaN(parsed) || parsed < 0) {
4
+ return "1";
5
+ }
6
+ return String(parsed);
7
+ }
8
+ export class PluginCapabilityRegistry {
9
+ registry = new Map();
10
+ register(manifest, capabilities) {
11
+ const major = majorVersion(manifest.version);
12
+ for (const [name, handler] of Object.entries(capabilities)) {
13
+ const normalized = name.includes("/")
14
+ ? name
15
+ : `${manifest.id}/${name}@${major}`;
16
+ if (this.registry.has(normalized)) {
17
+ throw new Error(`Capability key collision: \"${normalized}\".`);
18
+ }
19
+ this.registry.set(normalized, handler);
20
+ }
21
+ }
22
+ get(key) {
23
+ return this.registry.get(key);
24
+ }
25
+ list() {
26
+ return [...this.registry.keys()].sort();
27
+ }
28
+ }
@@ -0,0 +1,6 @@
1
+ import type { CommercePluginManifest } from "./manifest";
2
+ export declare class PluginDependencyError extends Error {
3
+ constructor(message: string);
4
+ }
5
+ export declare function resolvePluginInitializationOrder(manifests: CommercePluginManifest[]): CommercePluginManifest[];
6
+ //# sourceMappingURL=dependency-graph.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dependency-graph.d.ts","sourceRoot":"","sources":["../../../src/kernel/plugin/dependency-graph.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,YAAY,CAAC;AAEzD,qBAAa,qBAAsB,SAAQ,KAAK;gBAClC,OAAO,EAAE,MAAM;CAI5B;AAED,wBAAgB,gCAAgC,CAC9C,SAAS,EAAE,sBAAsB,EAAE,GAClC,sBAAsB,EAAE,CA6D1B"}
@@ -0,0 +1,55 @@
1
+ export class PluginDependencyError extends Error {
2
+ constructor(message) {
3
+ super(message);
4
+ this.name = "PluginDependencyError";
5
+ }
6
+ }
7
+ export function resolvePluginInitializationOrder(manifests) {
8
+ const byId = new Map();
9
+ for (const manifest of manifests) {
10
+ if (byId.has(manifest.id)) {
11
+ throw new PluginDependencyError(`Duplicate plugin id \"${manifest.id}\".`);
12
+ }
13
+ byId.set(manifest.id, manifest);
14
+ }
15
+ const indegree = new Map();
16
+ const edges = new Map();
17
+ for (const manifest of manifests) {
18
+ indegree.set(manifest.id, 0);
19
+ edges.set(manifest.id, []);
20
+ }
21
+ for (const manifest of manifests) {
22
+ for (const dependency of manifest.dependsOn ?? []) {
23
+ if (!byId.has(dependency)) {
24
+ throw new PluginDependencyError(`Plugin \"${manifest.id}\" depends on missing plugin \"${dependency}\".`);
25
+ }
26
+ edges.get(dependency).push(manifest.id);
27
+ indegree.set(manifest.id, (indegree.get(manifest.id) ?? 0) + 1);
28
+ }
29
+ }
30
+ const queue = [...indegree.entries()]
31
+ .filter(([, degree]) => degree === 0)
32
+ .map(([pluginId]) => pluginId)
33
+ .sort();
34
+ const ordered = [];
35
+ while (queue.length > 0) {
36
+ const pluginId = queue.shift();
37
+ ordered.push(byId.get(pluginId));
38
+ for (const child of edges.get(pluginId) ?? []) {
39
+ const next = (indegree.get(child) ?? 0) - 1;
40
+ indegree.set(child, next);
41
+ if (next === 0) {
42
+ queue.push(child);
43
+ queue.sort();
44
+ }
45
+ }
46
+ }
47
+ if (ordered.length !== manifests.length) {
48
+ const stuck = [...indegree.entries()]
49
+ .filter(([, degree]) => degree > 0)
50
+ .map(([id]) => id)
51
+ .sort();
52
+ throw new PluginDependencyError(`Plugin dependency cycle detected among: ${stuck.join(", ")}.`);
53
+ }
54
+ return ordered;
55
+ }
@@ -0,0 +1,90 @@
1
+ import type { RouteConfig } from "@hono/zod-openapi";
2
+ import type { PgDatabase, PgQueryResultHKT } from "drizzle-orm/pg-core";
3
+ import type { CommerceConfig, CommercePlugin, MCPTool } from "../../config/types";
4
+ export interface PluginLogger {
5
+ info(message: string, data?: unknown): void;
6
+ warn(message: string, data?: unknown): void;
7
+ error(message: string, data?: unknown): void;
8
+ }
9
+ /**
10
+ * Plugin route registration. Supports two modes:
11
+ *
12
+ * 1. Legacy: { method, path, handler } — works, but invisible to OpenAPI spec.
13
+ * 2. OpenAPI: { openapi, handler } — validated by Zod, appears in /api/doc.
14
+ *
15
+ * Use mode 2 for any route that accepts a request body or returns structured data.
16
+ * Mode 1 is acceptable for simple routes (health checks, redirects, file serving).
17
+ */
18
+ export type PluginRouteRegistration = {
19
+ method: string;
20
+ path: string;
21
+ handler: (...args: unknown[]) => unknown;
22
+ } | {
23
+ openapi: RouteConfig;
24
+ handler: (...args: unknown[]) => unknown;
25
+ };
26
+ export interface PluginHookRegistration {
27
+ key: string;
28
+ handler: (...args: unknown[]) => unknown;
29
+ }
30
+ export interface PluginContext {
31
+ config: CommerceConfig;
32
+ services: Record<string, unknown>;
33
+ database: {
34
+ /** Drizzle database instance — use for queries, inserts, updates, deletes */
35
+ db: PgDatabase<PgQueryResultHKT, Record<string, unknown>>;
36
+ transaction<T>(fn: (tx: PgDatabase<PgQueryResultHKT, Record<string, unknown>>) => Promise<T>): Promise<T>;
37
+ };
38
+ logger: PluginLogger;
39
+ }
40
+ /**
41
+ * Permission scope declared by a plugin.
42
+ * Collected at boot time and available via GET /api/admin/permissions.
43
+ */
44
+ export interface PluginPermission {
45
+ /** Permission scope string, e.g., "wishlist:write", "marketplace:admin" */
46
+ scope: string;
47
+ /** Human-readable description for admin UIs */
48
+ description: string;
49
+ }
50
+ export interface CommercePluginManifest {
51
+ id: string;
52
+ version: string;
53
+ /**
54
+ * IDs of plugins that must be registered before this one.
55
+ * If any required plugin is missing at registration time,
56
+ * defineCommercePlugin will throw with a clear message.
57
+ */
58
+ requires?: string[];
59
+ /**
60
+ * Permission scopes this plugin introduces.
61
+ * Used by admin UIs to build role editors, and validated at boot time
62
+ * against .permission() calls in routes.
63
+ */
64
+ permissions?: PluginPermission[];
65
+ /**
66
+ * Returns Drizzle `pgTable` objects that this plugin needs.
67
+ * These are collected into `config.customSchemas[]` and merged with core
68
+ * schema by `buildSchema(config)`. Each key becomes a named export in the
69
+ * merged schema; names must not collide with core table exports.
70
+ */
71
+ schema?: () => Record<string, unknown>;
72
+ hooks?: () => PluginHookRegistration[];
73
+ routes?: (ctx: PluginContext) => PluginRouteRegistration[];
74
+ mcpTools?: (ctx: PluginContext) => MCPTool[];
75
+ analyticsModels?: () => unknown[];
76
+ }
77
+ export declare const _registeredPlugins: Set<string>;
78
+ /** @internal — called by defineConfig() before applying plugins */
79
+ export declare function _resetRegisteredPlugins(): void;
80
+ /**
81
+ * Converts a plugin manifest into a config transform function.
82
+ *
83
+ * - `schema` → pushed into `config.customSchemas`
84
+ * - `hooks` → merged into `config.hooks` flat map
85
+ * - `routes` → chained onto `config.routes` (evaluated at boot with kernel)
86
+ * - `mcpTools` → chained onto `config.mcpTools` (evaluated at boot with kernel)
87
+ * - `analyticsModels` → pushed into `config.analytics.models`
88
+ */
89
+ export declare function defineCommercePlugin(manifest: CommercePluginManifest): CommercePlugin;
90
+ //# sourceMappingURL=manifest.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"manifest.d.ts","sourceRoot":"","sources":["../../../src/kernel/plugin/manifest.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAe,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAClE,OAAO,KAAK,EAAE,UAAU,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AACxE,OAAO,KAAK,EACV,cAAc,EACd,cAAc,EACd,OAAO,EACR,MAAM,oBAAoB,CAAC;AAI5B,MAAM,WAAW,YAAY;IAC3B,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,OAAO,GAAG,IAAI,CAAC;IAC5C,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,OAAO,GAAG,IAAI,CAAC;IAC5C,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,OAAO,GAAG,IAAI,CAAC;CAC9C;AAID;;;;;;;;GAQG;AACH,MAAM,MAAM,uBAAuB,GAC/B;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,OAAO,CAAA;CAAE,GAC1E;IAAE,OAAO,EAAE,WAAW,CAAC;IAAC,OAAO,EAAE,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,OAAO,CAAA;CAAE,CAAC;AAEvE,MAAM,WAAW,sBAAsB;IACrC,GAAG,EAAE,MAAM,CAAC;IACZ,OAAO,EAAE,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,OAAO,CAAC;CAC1C;AAID,MAAM,WAAW,aAAa;IAC5B,MAAM,EAAE,cAAc,CAAC;IACvB,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAClC,QAAQ,EAAE;QACR,6EAA6E;QAC7E,EAAE,EAAE,UAAU,CAAC,gBAAgB,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;QAC1D,WAAW,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,UAAU,CAAC,gBAAgB,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,KAAK,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;KAC3G,CAAC;IACF,MAAM,EAAE,YAAY,CAAC;CACtB;AAID;;;GAGG;AACH,MAAM,WAAW,gBAAgB;IAC/B,2EAA2E;IAC3E,KAAK,EAAE,MAAM,CAAC;IACd,+CAA+C;IAC/C,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,sBAAsB;IACrC,EAAE,EAAE,MAAM,CAAC;IACX,OAAO,EAAE,MAAM,CAAC;IAChB;;;;OAIG;IACH,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;IACpB;;;;OAIG;IACH,WAAW,CAAC,EAAE,gBAAgB,EAAE,CAAC;IACjC;;;;;OAKG;IACH,MAAM,CAAC,EAAE,MAAM,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACvC,KAAK,CAAC,EAAE,MAAM,sBAAsB,EAAE,CAAC;IACvC,MAAM,CAAC,EAAE,CAAC,GAAG,EAAE,aAAa,KAAK,uBAAuB,EAAE,CAAC;IAC3D,QAAQ,CAAC,EAAE,CAAC,GAAG,EAAE,aAAa,KAAK,OAAO,EAAE,CAAC;IAC7C,eAAe,CAAC,EAAE,MAAM,OAAO,EAAE,CAAC;CACnC;AAKD,eAAO,MAAM,kBAAkB,aAAoB,CAAC;AAEpD,mEAAmE;AACnE,wBAAgB,uBAAuB,IAAI,IAAI,CAE9C;AAED;;;;;;;;GAQG;AACH,wBAAgB,oBAAoB,CAClC,QAAQ,EAAE,sBAAsB,GAC/B,cAAc,CA4IhB"}
@@ -0,0 +1,140 @@
1
+ // ─── Plugin Dependency Tracking ──────────────────────────────────────
2
+ // Accumulates plugin IDs as they register during defineConfig().
3
+ // Reset at the start of each defineConfig() call.
4
+ export const _registeredPlugins = new Set();
5
+ /** @internal — called by defineConfig() before applying plugins */
6
+ export function _resetRegisteredPlugins() {
7
+ _registeredPlugins.clear();
8
+ }
9
+ /**
10
+ * Converts a plugin manifest into a config transform function.
11
+ *
12
+ * - `schema` → pushed into `config.customSchemas`
13
+ * - `hooks` → merged into `config.hooks` flat map
14
+ * - `routes` → chained onto `config.routes` (evaluated at boot with kernel)
15
+ * - `mcpTools` → chained onto `config.mcpTools` (evaluated at boot with kernel)
16
+ * - `analyticsModels` → pushed into `config.analytics.models`
17
+ */
18
+ export function defineCommercePlugin(manifest) {
19
+ return (config) => {
20
+ // ── Dependency check ───────────────────────────────────────────
21
+ // In test/development, warn instead of throwing so plugins can be
22
+ // tested in isolation via createPluginTestApp() without installing
23
+ // all dependencies. In production, this is a hard error.
24
+ if (manifest.requires) {
25
+ for (const dep of manifest.requires) {
26
+ if (!_registeredPlugins.has(dep)) {
27
+ const msg = `Plugin "${manifest.id}" requires "${dep}" to be installed before it. Add ${dep}Plugin() before ${manifest.id}Plugin() in your config.plugins array.`;
28
+ if (process.env.NODE_ENV === "production") {
29
+ throw new Error(msg);
30
+ }
31
+ // Non-production: log warning but continue (allows isolated testing)
32
+ console.warn(`[plugin:${manifest.id}] WARNING: ${msg}`);
33
+ }
34
+ }
35
+ }
36
+ _registeredPlugins.add(manifest.id);
37
+ let result = { ...config };
38
+ // 1. Schema — push into customSchemas for kernel to register
39
+ if (manifest.schema) {
40
+ const schemas = manifest.schema();
41
+ result = {
42
+ ...result,
43
+ customSchemas: [...(result.customSchemas ?? []), schemas],
44
+ };
45
+ }
46
+ // 2. Hooks — merge into flat hooks map (kernel registers at boot)
47
+ if (manifest.hooks) {
48
+ const registrations = manifest.hooks();
49
+ const hookMap = {
50
+ ...(result.hooks ?? {}),
51
+ };
52
+ for (const reg of registrations) {
53
+ hookMap[reg.key] = [...(hookMap[reg.key] ?? []), reg.handler];
54
+ }
55
+ result = { ...result, hooks: hookMap };
56
+ }
57
+ // 3. Routes — chain onto config.routes (deferred: needs kernel at boot)
58
+ if (manifest.routes) {
59
+ const existingRoutes = result.routes;
60
+ const pluginRoutes = manifest.routes;
61
+ result = {
62
+ ...result,
63
+ routes: (app, kernel) => {
64
+ existingRoutes?.(app, kernel);
65
+ const k = kernel;
66
+ const regs = pluginRoutes({
67
+ config: k.config,
68
+ services: k.services,
69
+ database: k.database,
70
+ logger: k.logger,
71
+ });
72
+ for (const route of regs) {
73
+ // ── Error boundary: wrap handler with plugin context ──
74
+ const originalHandler = route.handler;
75
+ const wrappedHandler = async (...args) => {
76
+ try {
77
+ return await originalHandler(...args);
78
+ }
79
+ catch (err) {
80
+ // Try to extract logger from Hono context
81
+ const c = args[0];
82
+ const logger = c?.get?.("logger");
83
+ logger?.error?.({ err, plugin: manifest.id }, `[plugin:${manifest.id}] route handler error`);
84
+ throw err; // re-throw so global handler still catches
85
+ }
86
+ };
87
+ if ("openapi" in route) {
88
+ // OpenAPI route: validated by Zod, appears in /api/doc
89
+ // Hono type interop — OpenAPIHono.openapi() expects strict RouteConfig+Handler
90
+ // generics that can't be statically resolved for dynamic plugin routes.
91
+ // @ts-expect-error -- dynamic plugin routes cannot satisfy Hono's strict handler generics
92
+ app.openapi(route.openapi, wrappedHandler);
93
+ }
94
+ else {
95
+ // Legacy route: raw handler, invisible to OpenAPI spec
96
+ const method = route.method.toLowerCase();
97
+ const router = app;
98
+ if (method in router) {
99
+ router[method](route.path, wrappedHandler);
100
+ }
101
+ }
102
+ }
103
+ },
104
+ };
105
+ }
106
+ // 4. MCP Tools — chain onto config.mcpTools (deferred: needs kernel)
107
+ if (manifest.mcpTools) {
108
+ const existingMcpTools = result.mcpTools;
109
+ const pluginMcpTools = manifest.mcpTools;
110
+ result = {
111
+ ...result,
112
+ mcpTools: (kernel) => {
113
+ const existing = existingMcpTools?.(kernel) ?? [];
114
+ const k = kernel;
115
+ return [
116
+ ...existing,
117
+ ...pluginMcpTools({
118
+ config: k.config,
119
+ services: k.services,
120
+ database: k.database,
121
+ logger: k.logger,
122
+ }),
123
+ ];
124
+ },
125
+ };
126
+ }
127
+ // 5. Analytics models — push into config.analytics.models
128
+ if (manifest.analyticsModels) {
129
+ const models = manifest.analyticsModels();
130
+ result = {
131
+ ...result,
132
+ analytics: {
133
+ ...result.analytics,
134
+ models: [...(result.analytics?.models ?? []), ...models],
135
+ },
136
+ };
137
+ }
138
+ return result;
139
+ };
140
+ }
@@ -0,0 +1,21 @@
1
+ import type { QueryRegistry } from "./registry";
2
+ export interface QueryInput {
3
+ entity: string;
4
+ id?: string;
5
+ filters?: Record<string, unknown>;
6
+ include?: string[];
7
+ pagination?: {
8
+ limit?: number;
9
+ offset?: number;
10
+ };
11
+ }
12
+ export interface QueryResult<T = Record<string, unknown>> {
13
+ data: T[];
14
+ total?: number | undefined;
15
+ }
16
+ /**
17
+ * Executes a query against the registry, resolving includes via
18
+ * batched dataloader-style fetches (one WHERE IN per relation).
19
+ */
20
+ export declare function executeQuery<T = Record<string, unknown>>(registry: QueryRegistry, services: Record<string, unknown>, input: QueryInput): Promise<QueryResult<T>>;
21
+ //# sourceMappingURL=executor.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"executor.d.ts","sourceRoot":"","sources":["../../../src/kernel/query/executor.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,aAAa,EAGd,MAAM,YAAY,CAAC;AAEpB,MAAM,WAAW,UAAU;IACzB,MAAM,EAAE,MAAM,CAAC;IACf,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAClC,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IACnB,UAAU,CAAC,EAAE;QAAE,KAAK,CAAC,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;CAClD;AAED,MAAM,WAAW,WAAW,CAAC,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IACtD,IAAI,EAAE,CAAC,EAAE,CAAC;IACV,KAAK,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CAC5B;AAED;;;GAGG;AACH,wBAAsB,YAAY,CAAC,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC5D,QAAQ,EAAE,aAAa,EACvB,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EACjC,KAAK,EAAE,UAAU,GAChB,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAgDzB"}
@@ -0,0 +1,128 @@
1
+ import { CommerceNotFoundError } from "../errors";
2
+ /**
3
+ * Executes a query against the registry, resolving includes via
4
+ * batched dataloader-style fetches (one WHERE IN per relation).
5
+ */
6
+ export async function executeQuery(registry, services, input) {
7
+ const definition = registry.get(input.entity);
8
+ if (!definition) {
9
+ throw new CommerceNotFoundError(`No entity registered with name "${input.entity}".`);
10
+ }
11
+ const service = services[definition.service];
12
+ // 1. Fetch primary records
13
+ let rows;
14
+ let total;
15
+ if (input.id) {
16
+ const result = (await service[definition.getByIdMethod](input.id));
17
+ const value = result?.value ?? result;
18
+ rows = value != null ? [value] : [];
19
+ }
20
+ else {
21
+ const result = (await service[definition.listMethod](input.filters ?? {}, input.pagination));
22
+ const resolved = result?.value ?? result;
23
+ if (resolved && typeof resolved === "object" && "items" in resolved) {
24
+ rows = (resolved.items ?? []);
25
+ total = resolved.total;
26
+ }
27
+ else if (Array.isArray(resolved)) {
28
+ rows = resolved;
29
+ }
30
+ else {
31
+ rows = [];
32
+ }
33
+ }
34
+ // 2. Resolve includes
35
+ if (input.include?.length) {
36
+ await resolveIncludes(rows, input.include, definition, services, registry);
37
+ }
38
+ return { data: rows, total };
39
+ }
40
+ async function resolveIncludes(rows, includes, definition, services, registry) {
41
+ // Group includes by top-level segment
42
+ const topLevel = new Map();
43
+ for (const path of includes) {
44
+ const dot = path.indexOf(".");
45
+ if (dot === -1) {
46
+ if (!topLevel.has(path))
47
+ topLevel.set(path, []);
48
+ }
49
+ else {
50
+ const parent = path.substring(0, dot);
51
+ const child = path.substring(dot + 1);
52
+ const existing = topLevel.get(parent) ?? [];
53
+ existing.push(child);
54
+ topLevel.set(parent, existing);
55
+ }
56
+ }
57
+ for (const [relationName, nestedIncludes] of topLevel) {
58
+ const relation = definition.relations[relationName];
59
+ if (!relation)
60
+ continue;
61
+ const targetService = services[relation.targetService];
62
+ if (!targetService)
63
+ continue;
64
+ // Collect foreign key values (deduplicated)
65
+ const ids = [
66
+ ...new Set(rows
67
+ .map((r) => r[relation.foreignKey])
68
+ .filter((v) => v != null && typeof v === "string")),
69
+ ];
70
+ if (ids.length === 0)
71
+ continue;
72
+ // One batched query
73
+ const batchFn = targetService[relation.batchMethod];
74
+ if (!batchFn)
75
+ continue;
76
+ const relatedResult = await batchFn(ids);
77
+ const relatedRows = extractRows(relatedResult);
78
+ // Build lookup
79
+ const map = new Map();
80
+ for (const related of relatedRows) {
81
+ const rec = related;
82
+ if (relation.isList) {
83
+ const key = rec[relation.foreignKey];
84
+ if (!map.has(key))
85
+ map.set(key, []);
86
+ map.get(key).push(rec);
87
+ }
88
+ else {
89
+ map.set(rec["id"], rec);
90
+ }
91
+ }
92
+ // Attach to parent rows
93
+ for (const row of rows) {
94
+ const fkValue = row[relation.foreignKey];
95
+ if (!fkValue)
96
+ continue;
97
+ row[relation.attachAs] =
98
+ map.get(fkValue) ?? (relation.isList ? [] : null);
99
+ }
100
+ // Resolve nested includes
101
+ if (nestedIncludes.length > 0) {
102
+ const targetDef = registry.get(relation.targetService);
103
+ if (targetDef) {
104
+ const nestedRows = relation.isList
105
+ ? rows.flatMap((r) => r[relation.attachAs] ?? [])
106
+ : rows
107
+ .map((r) => r[relation.attachAs])
108
+ .filter(Boolean);
109
+ await resolveIncludes(nestedRows, nestedIncludes, targetDef, services, registry);
110
+ }
111
+ }
112
+ }
113
+ }
114
+ function extractRows(result) {
115
+ if (Array.isArray(result))
116
+ return result;
117
+ if (result && typeof result === "object") {
118
+ const r = result;
119
+ if (r.value != null) {
120
+ if (Array.isArray(r.value))
121
+ return r.value;
122
+ if (typeof r.value === "object" && "items" in r.value) {
123
+ return r.value.items;
124
+ }
125
+ }
126
+ }
127
+ return [];
128
+ }
@@ -0,0 +1,33 @@
1
+ /**
2
+ * Defines a relation from a parent entity to a related entity.
3
+ * Used by the query executor to batch-load related records.
4
+ */
5
+ export interface RelationDefinition {
6
+ foreignKey: string;
7
+ targetService: string;
8
+ batchMethod: string;
9
+ attachAs: string;
10
+ isList?: boolean;
11
+ }
12
+ /**
13
+ * Defines an entity that can be queried via kernel.query().
14
+ */
15
+ export interface EntityDefinition {
16
+ service: string;
17
+ getByIdMethod: string;
18
+ listMethod: string;
19
+ relations: Record<string, RelationDefinition>;
20
+ }
21
+ /**
22
+ * Registry of queryable entities and their relations.
23
+ * Modules register their entities at kernel boot.
24
+ * Plugins can register additional entities.
25
+ */
26
+ export declare class QueryRegistry {
27
+ private entities;
28
+ register(name: string, definition: EntityDefinition): void;
29
+ get(name: string): EntityDefinition | undefined;
30
+ has(name: string): boolean;
31
+ listEntities(): string[];
32
+ }
33
+ //# sourceMappingURL=registry.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../../../src/kernel/query/registry.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,MAAM,WAAW,kBAAkB;IACjC,UAAU,EAAE,MAAM,CAAC;IACnB,aAAa,EAAE,MAAM,CAAC;IACtB,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAED;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,OAAO,EAAE,MAAM,CAAC;IAChB,aAAa,EAAE,MAAM,CAAC;IACtB,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,kBAAkB,CAAC,CAAC;CAC/C;AAED;;;;GAIG;AACH,qBAAa,aAAa;IACxB,OAAO,CAAC,QAAQ,CAAuC;IAEvD,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,UAAU,EAAE,gBAAgB,GAAG,IAAI;IAI1D,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG,gBAAgB,GAAG,SAAS;IAI/C,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO;IAI1B,YAAY,IAAI,MAAM,EAAE;CAGzB"}
@@ -0,0 +1,20 @@
1
+ /**
2
+ * Registry of queryable entities and their relations.
3
+ * Modules register their entities at kernel boot.
4
+ * Plugins can register additional entities.
5
+ */
6
+ export class QueryRegistry {
7
+ entities = new Map();
8
+ register(name, definition) {
9
+ this.entities.set(name, definition);
10
+ }
11
+ get(name) {
12
+ return this.entities.get(name);
13
+ }
14
+ has(name) {
15
+ return this.entities.has(name);
16
+ }
17
+ listEntities() {
18
+ return [...this.entities.keys()];
19
+ }
20
+ }