@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,92 @@
1
+ import { resolveOrgId } from "../../auth/org.js";
2
+ import { CommerceNotFoundError, CommerceValidationError } from "../../kernel/errors.js";
3
+ import { Err, Ok } from "../../kernel/result.js";
4
+ /**
5
+ * Checks whether a URL points to a private/internal IP address.
6
+ * Blocks: loopback (127.x), link-local (169.254.x), private (10.x, 172.16-31.x, 192.168.x),
7
+ * cloud metadata (169.254.169.254, metadata.google.internal), and localhost.
8
+ */
9
+ function isPrivateUrl(urlStr) {
10
+ try {
11
+ const parsed = new URL(urlStr);
12
+ // Strip IPv6 brackets: URL.hostname returns "[::1]" not "::1"
13
+ const hostname = parsed.hostname.toLowerCase().replace(/^\[|\]$/g, "");
14
+ // Loopback (IPv4 + IPv6)
15
+ if (hostname === "localhost" || hostname === "127.0.0.1" || hostname === "::1")
16
+ return true;
17
+ if (hostname.endsWith(".localhost"))
18
+ return true;
19
+ // IPv6 loopback and link-local patterns
20
+ if (hostname.startsWith("::ffff:"))
21
+ return true; // IPv6-mapped IPv4 (e.g., ::ffff:127.0.0.1)
22
+ if (hostname.startsWith("fe80:"))
23
+ return true; // IPv6 link-local
24
+ if (hostname === "::")
25
+ return true; // Unspecified address
26
+ // Cloud metadata endpoints
27
+ if (hostname === "169.254.169.254")
28
+ return true;
29
+ if (hostname === "metadata.google.internal")
30
+ return true;
31
+ // Private IP ranges (RFC 1918 + link-local)
32
+ const parts = hostname.split(".").map(Number);
33
+ if (parts.length === 4 && parts.every((n) => !isNaN(n))) {
34
+ const [a, b] = parts;
35
+ if (a === 10)
36
+ return true;
37
+ if (a === 172 && b !== undefined && b >= 16 && b <= 31)
38
+ return true;
39
+ if (a === 192 && b === 168)
40
+ return true;
41
+ if (a === 169 && b === 254)
42
+ return true;
43
+ if (a === 127)
44
+ return true; // Full 127.0.0.0/8 range
45
+ if (a === 0)
46
+ return true;
47
+ }
48
+ return false;
49
+ }
50
+ catch {
51
+ return true; // Invalid URLs are blocked
52
+ }
53
+ }
54
+ export class WebhookService {
55
+ deps;
56
+ repo;
57
+ constructor(deps) {
58
+ this.deps = deps;
59
+ this.repo = deps.repository;
60
+ }
61
+ async createEndpoint(input, actor, ctx) {
62
+ if (isPrivateUrl(input.url)) {
63
+ return Err(new CommerceValidationError("Webhook URL must not point to a private or internal address."));
64
+ }
65
+ const orgId = resolveOrgId(actor ?? ctx?.actor ?? null);
66
+ const endpoint = await this.repo.createEndpoint({
67
+ organizationId: orgId,
68
+ url: input.url,
69
+ secret: input.secret,
70
+ events: input.events,
71
+ isActive: true,
72
+ metadata: input.metadata ?? {},
73
+ }, ctx);
74
+ return Ok(endpoint);
75
+ }
76
+ async listEndpoints(ctx) {
77
+ const endpoints = await this.repo.findAllEndpoints(ctx);
78
+ return Ok(endpoints);
79
+ }
80
+ async deleteEndpoint(id, ctx) {
81
+ const existing = await this.repo.findEndpointById(id, ctx);
82
+ if (!existing) {
83
+ return Err(new CommerceNotFoundError("Webhook endpoint not found."));
84
+ }
85
+ await this.repo.deleteEndpoint(id, ctx);
86
+ return Ok(undefined);
87
+ }
88
+ async getEndpointsForEvent(eventName, ctx) {
89
+ const endpoints = await this.repo.findEndpointsForEvent(eventName, ctx);
90
+ return Ok(endpoints);
91
+ }
92
+ }
@@ -0,0 +1,2 @@
1
+ export declare function signWebhookPayload(secret: string, payload: unknown): string;
2
+ //# sourceMappingURL=signing.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"signing.d.ts","sourceRoot":"","sources":["../../../src/modules/webhooks/signing.ts"],"names":[],"mappings":"AAEA,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,GAAG,MAAM,CAG3E"}
@@ -0,0 +1,5 @@
1
+ import { createHmac } from "node:crypto";
2
+ export function signWebhookPayload(secret, payload) {
3
+ const body = typeof payload === "string" ? payload : JSON.stringify(payload);
4
+ return createHmac("sha256", secret).update(body).digest("hex");
5
+ }
@@ -0,0 +1,19 @@
1
+ /**
2
+ * Shared SSRF prevention utilities.
3
+ *
4
+ * Used by both webhook delivery (DNS rebinding check) and connector URL
5
+ * validation (store URL check) to reject private/internal IP addresses.
6
+ */
7
+ /**
8
+ * Returns true if the given IP address falls within a private, loopback,
9
+ * link-local, or otherwise non-routable range.
10
+ */
11
+ export declare function isPrivateIp(ip: string): boolean;
12
+ /**
13
+ * Checks whether a URL string points to a private/internal IP address or
14
+ * hostname. This performs a string-level check only (no DNS resolution).
15
+ *
16
+ * For DNS rebinding protection, use `isPrivateIp` after resolving the hostname.
17
+ */
18
+ export declare function isPrivateUrl(urlStr: string): boolean;
19
+ //# sourceMappingURL=ssrf-guard.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ssrf-guard.d.ts","sourceRoot":"","sources":["../../../src/modules/webhooks/ssrf-guard.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH;;;GAGG;AACH,wBAAgB,WAAW,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAY/C;AAmBD;;;;;GAKG;AACH,wBAAgB,YAAY,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAsBpD"}
@@ -0,0 +1,79 @@
1
+ /**
2
+ * Shared SSRF prevention utilities.
3
+ *
4
+ * Used by both webhook delivery (DNS rebinding check) and connector URL
5
+ * validation (store URL check) to reject private/internal IP addresses.
6
+ */
7
+ /**
8
+ * Returns true if the given IP address falls within a private, loopback,
9
+ * link-local, or otherwise non-routable range.
10
+ */
11
+ export function isPrivateIp(ip) {
12
+ // IPv6 loopback / link-local / mapped
13
+ if (ip === "::1" || ip === "::")
14
+ return true;
15
+ if (ip.startsWith("fe80:"))
16
+ return true;
17
+ // IPv6-mapped IPv4 (e.g. ::ffff:127.0.0.1) — extract the IPv4 portion
18
+ const mappedMatch = ip.match(/^::ffff:(\d+\.\d+\.\d+\.\d+)$/i);
19
+ if (mappedMatch) {
20
+ return isPrivateIpv4(mappedMatch[1]);
21
+ }
22
+ return isPrivateIpv4(ip);
23
+ }
24
+ function isPrivateIpv4(ip) {
25
+ const parts = ip.split(".").map(Number);
26
+ if (parts.length !== 4 || parts.some((n) => isNaN(n)))
27
+ return false;
28
+ const [a, b] = parts;
29
+ if (a === undefined || b === undefined)
30
+ return false;
31
+ if (a === 127)
32
+ return true; // loopback 127.0.0.0/8
33
+ if (a === 10)
34
+ return true; // RFC 1918 class A
35
+ if (a === 172 && b >= 16 && b <= 31)
36
+ return true; // RFC 1918 class B
37
+ if (a === 192 && b === 168)
38
+ return true; // RFC 1918 class C
39
+ if (a === 169 && b === 254)
40
+ return true; // link-local / AWS IMDS
41
+ if (a === 0)
42
+ return true; // unspecified
43
+ return false;
44
+ }
45
+ /**
46
+ * Checks whether a URL string points to a private/internal IP address or
47
+ * hostname. This performs a string-level check only (no DNS resolution).
48
+ *
49
+ * For DNS rebinding protection, use `isPrivateIp` after resolving the hostname.
50
+ */
51
+ export function isPrivateUrl(urlStr) {
52
+ try {
53
+ const parsed = new URL(urlStr);
54
+ const hostname = parsed.hostname.toLowerCase().replace(/^\[|\]$/g, "");
55
+ // Direct hostname matches
56
+ if (hostname === "localhost" || hostname.endsWith(".localhost"))
57
+ return true;
58
+ if (hostname === "::1" || hostname === "::")
59
+ return true;
60
+ if (hostname.startsWith("::ffff:"))
61
+ return true;
62
+ if (hostname.startsWith("fe80:"))
63
+ return true;
64
+ if (hostname.endsWith(".local"))
65
+ return true;
66
+ if (hostname.endsWith(".internal"))
67
+ return true;
68
+ // Cloud metadata endpoints
69
+ if (hostname === "169.254.169.254")
70
+ return true;
71
+ if (hostname === "metadata.google.internal")
72
+ return true;
73
+ // Check if hostname is a raw IP in private ranges
74
+ return isPrivateIpv4(hostname);
75
+ }
76
+ catch {
77
+ return true; // Invalid URLs are blocked
78
+ }
79
+ }
@@ -0,0 +1,16 @@
1
+ import type { TaskDefinition } from "../../kernel/jobs/types.js";
2
+ /**
3
+ * Background task for async webhook delivery.
4
+ *
5
+ * Instead of blocking the HTTP response with inline webhook HTTP calls,
6
+ * the deliverWebhooks hook enqueues this task. The job runner picks it up
7
+ * and delivers asynchronously with retries.
8
+ */
9
+ export declare const webhookDeliveryTask: TaskDefinition<{
10
+ endpointId: string;
11
+ endpointUrl: string;
12
+ endpointSecret: string;
13
+ eventName: string;
14
+ payload: unknown;
15
+ }>;
16
+ //# sourceMappingURL=tasks.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tasks.d.ts","sourceRoot":"","sources":["../../../src/modules/webhooks/tasks.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAC;AAIjE;;;;;;GAMG;AACH,eAAO,MAAM,mBAAmB,EAAE,cAAc,CAAC;IAC/C,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,cAAc,EAAE,MAAM,CAAC;IACvB,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,OAAO,CAAC;CAClB,CAkCA,CAAC"}
@@ -0,0 +1,35 @@
1
+ import { WebhookDeliveryWorker } from "./worker.js";
2
+ /**
3
+ * Background task for async webhook delivery.
4
+ *
5
+ * Instead of blocking the HTTP response with inline webhook HTTP calls,
6
+ * the deliverWebhooks hook enqueues this task. The job runner picks it up
7
+ * and delivers asynchronously with retries.
8
+ */
9
+ export const webhookDeliveryTask = {
10
+ slug: "webhooks/deliver",
11
+ async handler({ input, ctx }) {
12
+ const webhooksService = ctx.services.webhooks;
13
+ // Build a minimal worker — the repository is needed for delivery tracking
14
+ const repository = webhooksService?.repository;
15
+ if (!repository) {
16
+ ctx.logger.warn("Webhook delivery skipped: no webhooks repository available");
17
+ return { output: {} };
18
+ }
19
+ const worker = new WebhookDeliveryWorker({ repository });
20
+ await worker.deliver({
21
+ endpoint: {
22
+ id: input.endpointId,
23
+ url: input.endpointUrl,
24
+ secret: input.endpointSecret,
25
+ },
26
+ eventName: input.eventName,
27
+ payload: input.payload,
28
+ });
29
+ return { output: {} };
30
+ },
31
+ retries: {
32
+ attempts: 5,
33
+ backoff: { type: "exponential", delay: 2000 },
34
+ },
35
+ };
@@ -0,0 +1,21 @@
1
+ import type { WebhooksRepository } from "./repository/index.js";
2
+ interface WorkerDeps {
3
+ repository: WebhooksRepository;
4
+ fetchImpl?: typeof fetch;
5
+ }
6
+ export declare class WebhookDeliveryWorker {
7
+ private deps;
8
+ private fetchImpl;
9
+ constructor(deps: WorkerDeps);
10
+ deliver(args: {
11
+ endpoint: {
12
+ id: string;
13
+ url: string;
14
+ secret: string;
15
+ };
16
+ eventName: string;
17
+ payload: unknown;
18
+ }): Promise<void>;
19
+ }
20
+ export {};
21
+ //# sourceMappingURL=worker.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"worker.d.ts","sourceRoot":"","sources":["../../../src/modules/webhooks/worker.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AA+DhE,UAAU,UAAU;IAClB,UAAU,EAAE,kBAAkB,CAAC;IAC/B,SAAS,CAAC,EAAE,OAAO,KAAK,CAAC;CAC1B;AAED,qBAAa,qBAAqB;IAGpB,OAAO,CAAC,IAAI;IAFxB,OAAO,CAAC,SAAS,CAAe;gBAEZ,IAAI,EAAE,UAAU;IAI9B,OAAO,CAAC,IAAI,EAAE;QAClB,QAAQ,EAAE;YAAE,EAAE,EAAE,MAAM,CAAC;YAAC,GAAG,EAAE,MAAM,CAAC;YAAC,MAAM,EAAE,MAAM,CAAA;SAAE,CAAC;QACtD,SAAS,EAAE,MAAM,CAAC;QAClB,OAAO,EAAE,OAAO,CAAC;KAClB,GAAG,OAAO,CAAC,IAAI,CAAC;CAoDlB"}
@@ -0,0 +1,113 @@
1
+ import { signWebhookPayload } from "./signing.js";
2
+ import { isPrivateIp } from "./ssrf-guard.js";
3
+ /**
4
+ * SSRF prevention: reject webhook URLs targeting private/internal hosts.
5
+ * Blocks RFC 1918, loopback, link-local, and common internal domains.
6
+ */
7
+ const PRIVATE_HOST_PATTERNS = [
8
+ /^127\./, // loopback
9
+ /^10\./, // RFC 1918 class A
10
+ /^172\.(1[6-9]|2[0-9]|3[01])\./, // RFC 1918 class B
11
+ /^192\.168\./, // RFC 1918 class C
12
+ /^169\.254\./, // link-local / AWS IMDS
13
+ /^0\.0\.0\.0/, // unspecified
14
+ /^localhost$/i,
15
+ /\.local$/i,
16
+ /\.internal$/i,
17
+ ];
18
+ function validateWebhookUrl(url) {
19
+ const parsed = new URL(url);
20
+ if (process.env.NODE_ENV === "production" && parsed.protocol !== "https:") {
21
+ throw new Error("Webhook URLs must use HTTPS in production.");
22
+ }
23
+ const hostname = parsed.hostname;
24
+ for (const pattern of PRIVATE_HOST_PATTERNS) {
25
+ if (pattern.test(hostname)) {
26
+ throw new Error(`Webhook URLs cannot target private hosts: ${hostname}`);
27
+ }
28
+ }
29
+ }
30
+ /**
31
+ * Resolve the webhook URL hostname via DNS and verify the resolved IP is not
32
+ * private. This closes the DNS rebinding gap where a hostname initially
33
+ * resolves to a public IP but later rebinds to an internal address.
34
+ */
35
+ async function validateResolvedIp(url) {
36
+ const { lookup } = await import("node:dns/promises");
37
+ const parsed = new URL(url);
38
+ const hostname = parsed.hostname.replace(/^\[|\]$/g, "");
39
+ // Skip DNS resolution for raw IP addresses — they are already checked
40
+ // by validateWebhookUrl via PRIVATE_HOST_PATTERNS.
41
+ const isIpLiteral = /^[\d.]+$/.test(hostname) || hostname.includes(":");
42
+ if (isIpLiteral)
43
+ return;
44
+ try {
45
+ const { address } = await lookup(hostname);
46
+ if (isPrivateIp(address)) {
47
+ throw new Error(`Webhook URL hostname "${hostname}" resolved to private IP ${address}`);
48
+ }
49
+ }
50
+ catch (err) {
51
+ if (err instanceof Error && err.message.includes("resolved to private")) {
52
+ throw err;
53
+ }
54
+ throw new Error(`Failed to resolve webhook URL hostname "${hostname}": ${err}`);
55
+ }
56
+ }
57
+ export class WebhookDeliveryWorker {
58
+ deps;
59
+ fetchImpl;
60
+ constructor(deps) {
61
+ this.deps = deps;
62
+ this.fetchImpl = deps.fetchImpl ?? fetch;
63
+ }
64
+ async deliver(args) {
65
+ // SSRF prevention: validate URL string patterns + resolved DNS IP
66
+ validateWebhookUrl(args.endpoint.url);
67
+ await validateResolvedIp(args.endpoint.url);
68
+ let attempt = 0;
69
+ const maxAttempts = 3;
70
+ while (attempt < maxAttempts) {
71
+ attempt += 1;
72
+ const signature = signWebhookPayload(args.endpoint.secret, args.payload);
73
+ try {
74
+ const response = await this.fetchImpl(args.endpoint.url, {
75
+ method: "POST",
76
+ headers: {
77
+ "content-type": "application/json",
78
+ "x-commerce-signature": signature,
79
+ "x-commerce-event": args.eventName,
80
+ },
81
+ body: JSON.stringify(args.payload),
82
+ signal: AbortSignal.timeout(10_000),
83
+ });
84
+ await this.deps.repository.createDelivery({
85
+ endpointId: args.endpoint.id,
86
+ eventName: args.eventName,
87
+ payload: args.payload,
88
+ statusCode: response.status,
89
+ attemptCount: attempt,
90
+ ...(response.ok ? { deliveredAt: new Date() } : {}),
91
+ ...(!response.ok ? { failedAt: new Date() } : {}),
92
+ ...(!response.ok && attempt < maxAttempts
93
+ ? { nextRetryAt: new Date(Date.now() + 2 ** attempt * 1000) }
94
+ : {}),
95
+ });
96
+ if (response.ok)
97
+ return;
98
+ }
99
+ catch {
100
+ await this.deps.repository.createDelivery({
101
+ endpointId: args.endpoint.id,
102
+ eventName: args.eventName,
103
+ payload: args.payload,
104
+ attemptCount: attempt,
105
+ failedAt: new Date(),
106
+ ...(attempt < maxAttempts
107
+ ? { nextRetryAt: new Date(Date.now() + 2 ** attempt * 1000) }
108
+ : {}),
109
+ });
110
+ }
111
+ }
112
+ }
113
+ }
@@ -0,0 +1,110 @@
1
+ import type { Actor } from "../auth/types.js";
2
+ import type { CommerceConfig } from "../config/types.js";
3
+ import type { Kernel } from "./kernel.js";
4
+ import { type AuthInstance } from "../auth/setup.js";
5
+ import { type Logger } from "./logger.js";
6
+ import { type CommerceLocalAPI } from "../kernel/local-api.js";
7
+ /**
8
+ * The commerce instance returned by `createCommerce()`.
9
+ *
10
+ * This is the headless, framework-agnostic entry point.
11
+ * No HTTP server, no Hono — just typed services and a local API.
12
+ *
13
+ * ## Usage with Next.js App Router:
14
+ *
15
+ * ```typescript
16
+ * // lib/commerce.ts
17
+ * import { createCommerce } from "@unifiedcommerce/core";
18
+ * import config from "../commerce.config.js";
19
+ *
20
+ * export const commerce = await createCommerce(config);
21
+ *
22
+ * // app/products/page.tsx (Server Component)
23
+ * import { commerce } from "@/lib/commerce";
24
+ *
25
+ * export default async function ProductsPage() {
26
+ * const products = await commerce.api.catalog.list({ limit: 20 });
27
+ * if (!products.ok) return <div>Error</div>;
28
+ * return <ProductGrid items={products.value.items} />;
29
+ * }
30
+ * ```
31
+ *
32
+ * ## Usage with TanStack Start:
33
+ *
34
+ * ```typescript
35
+ * // app/routes/products.tsx
36
+ * import { createServerFn } from "@tanstack/start";
37
+ * import { commerce } from "../lib/commerce.js";
38
+ *
39
+ * const getProducts = createServerFn("GET", async () => {
40
+ * return commerce.api.catalog.list({ limit: 20 });
41
+ * });
42
+ * ```
43
+ *
44
+ * ## Usage with SvelteKit:
45
+ *
46
+ * ```typescript
47
+ * // src/lib/server/commerce.ts
48
+ * import { createCommerce } from "@unifiedcommerce/core";
49
+ * import config from "./commerce.config.js";
50
+ * export const commerce = await createCommerce(config);
51
+ *
52
+ * // src/routes/products/+page.server.ts
53
+ * import { commerce } from "$lib/server/commerce";
54
+ * export async function load() {
55
+ * const products = await commerce.api.catalog.list({ limit: 20 });
56
+ * return { products: products.ok ? products.value : { items: [] } };
57
+ * }
58
+ * ```
59
+ */
60
+ export interface CommerceInstance {
61
+ /** Proxy-based local API — auto-injects actor/tx to every service call */
62
+ api: CommerceLocalAPI;
63
+ /** Raw kernel for advanced usage (hooks, database, config) */
64
+ kernel: Kernel;
65
+ /** Drizzle database instance for direct queries */
66
+ db: unknown;
67
+ /** Auth instance (Better Auth) for session management */
68
+ auth: AuthInstance;
69
+ /** Logger */
70
+ logger: Logger;
71
+ /**
72
+ * Create a scoped API for a specific user/actor.
73
+ * Use this in authenticated routes to scope data access.
74
+ *
75
+ * ```typescript
76
+ * // In a Next.js server action:
77
+ * const userApi = commerce.withActor({
78
+ * type: "user", userId: session.userId, ...
79
+ * });
80
+ * const orders = await userApi.orders.list({ limit: 10 });
81
+ * // Only returns orders for this user's org
82
+ * ```
83
+ */
84
+ withActor(actor: Actor): CommerceLocalAPI;
85
+ /**
86
+ * Create a scoped API within a database transaction.
87
+ *
88
+ * ```typescript
89
+ * await commerce.kernel.database.transaction(async (tx) => {
90
+ * const txApi = commerce.withTransaction(tx, actor);
91
+ * await txApi.inventory.adjust({ entityId, adjustment: -1, reason: "sold" });
92
+ * await txApi.orders.create({ ... });
93
+ * });
94
+ * ```
95
+ */
96
+ withTransaction(tx: unknown, actor?: Actor | null): CommerceLocalAPI;
97
+ }
98
+ /**
99
+ * Create a headless commerce instance.
100
+ *
101
+ * This is the primary entry point for using UnifiedCommerce without an HTTP server.
102
+ * It initializes the kernel, database, auth, and returns a local API that works
103
+ * exactly like the REST API but without HTTP overhead.
104
+ *
105
+ * The Hono server (`createServer`) is optional — use it only when you need
106
+ * a standalone HTTP API. For Next.js, TanStack Start, SvelteKit, Nuxt, etc.,
107
+ * use `createCommerce()` directly.
108
+ */
109
+ export declare function createCommerce(config: CommerceConfig): Promise<CommerceInstance>;
110
+ //# sourceMappingURL=commerce.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"commerce.d.ts","sourceRoot":"","sources":["../../src/runtime/commerce.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AACzD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAG1C,OAAO,EAAc,KAAK,YAAY,EAAE,MAAM,kBAAkB,CAAC;AACjE,OAAO,EAAgB,KAAK,MAAM,EAAE,MAAM,aAAa,CAAC;AACxD,OAAO,EAAkB,KAAK,gBAAgB,EAAwB,MAAM,wBAAwB,CAAC;AAErG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAoDG;AACH,MAAM,WAAW,gBAAgB;IAC/B,0EAA0E;IAC1E,GAAG,EAAE,gBAAgB,CAAC;IAEtB,8DAA8D;IAC9D,MAAM,EAAE,MAAM,CAAC;IAEf,mDAAmD;IACnD,EAAE,EAAE,OAAO,CAAC;IAEZ,yDAAyD;IACzD,IAAI,EAAE,YAAY,CAAC;IAEnB,aAAa;IACb,MAAM,EAAE,MAAM,CAAC;IAEf;;;;;;;;;;;;OAYG;IACH,SAAS,CAAC,KAAK,EAAE,KAAK,GAAG,gBAAgB,CAAC;IAE1C;;;;;;;;;;OAUG;IACH,eAAe,CAAC,EAAE,EAAE,OAAO,EAAE,KAAK,CAAC,EAAE,KAAK,GAAG,IAAI,GAAG,gBAAgB,CAAC;CACtE;AAED;;;;;;;;;;GAUG;AACH,wBAAsB,cAAc,CAClC,MAAM,EAAE,cAAc,GACrB,OAAO,CAAC,gBAAgB,CAAC,CAwB3B"}
@@ -0,0 +1,37 @@
1
+ import { createKernel } from "./kernel.js";
2
+ import { ensureDefaultOrg } from "../auth/org.js";
3
+ import { createAuth } from "../auth/setup.js";
4
+ import { createLogger } from "./logger.js";
5
+ import { createLocalAPI } from "../kernel/local-api.js";
6
+ /**
7
+ * Create a headless commerce instance.
8
+ *
9
+ * This is the primary entry point for using UnifiedCommerce without an HTTP server.
10
+ * It initializes the kernel, database, auth, and returns a local API that works
11
+ * exactly like the REST API but without HTTP overhead.
12
+ *
13
+ * The Hono server (`createServer`) is optional — use it only when you need
14
+ * a standalone HTTP API. For Next.js, TanStack Start, SvelteKit, Nuxt, etc.,
15
+ * use `createCommerce()` directly.
16
+ */
17
+ export async function createCommerce(config) {
18
+ const kernel = createKernel(config);
19
+ await ensureDefaultOrg(kernel.database.db);
20
+ const auth = createAuth(kernel.database, config);
21
+ const logger = createLogger(config);
22
+ // Default API: no actor (public access), no transaction
23
+ const api = createLocalAPI(kernel);
24
+ return {
25
+ api,
26
+ kernel,
27
+ db: kernel.database.db,
28
+ auth,
29
+ logger,
30
+ withActor(actor) {
31
+ return createLocalAPI(kernel, { actor });
32
+ },
33
+ withTransaction(tx, actor) {
34
+ return createLocalAPI(kernel, { actor: actor ?? null, tx });
35
+ },
36
+ };
37
+ }
@@ -0,0 +1,71 @@
1
+ import type { CommerceConfig, MCPTool } from "../config/types.js";
2
+ import { HookRegistry } from "../kernel/hooks/registry.js";
3
+ import { type DatabaseAdapter } from "../kernel/database/adapter.js";
4
+ import { CatalogServiceImpl } from "../modules/catalog/service.js";
5
+ import { InventoryService } from "../modules/inventory/service.js";
6
+ import { MediaService } from "../modules/media/service.js";
7
+ import { CartService } from "../modules/cart/service.js";
8
+ import { OrderService } from "../modules/orders/service.js";
9
+ import { PaymentsService } from "../modules/payments/service.js";
10
+ import { FulfillmentService } from "../modules/fulfillment/service.js";
11
+ import { CustomerService } from "../modules/customers/service.js";
12
+ import { WebhookService } from "../modules/webhooks/service.js";
13
+ import { AnalyticsService } from "../modules/analytics/service.js";
14
+ import { PricingService } from "../modules/pricing/service.js";
15
+ import { PromotionService } from "../modules/promotions/service.js";
16
+ import { TaxService } from "../modules/tax/service.js";
17
+ import { ShippingService } from "../modules/shipping/service.js";
18
+ import { SearchService } from "../modules/search/service.js";
19
+ import { type AuditService } from "../modules/audit/service.js";
20
+ import { OrganizationService } from "../modules/organization/service.js";
21
+ import { createLogger } from "../utils/logger.js";
22
+ export interface WebhookDeliveryPayload {
23
+ endpoint: {
24
+ id: string;
25
+ url: string;
26
+ secret: string;
27
+ };
28
+ eventName: string;
29
+ payload: unknown;
30
+ }
31
+ export interface Kernel {
32
+ config: CommerceConfig;
33
+ hooks: HookRegistry;
34
+ database: DatabaseAdapter;
35
+ services: {
36
+ catalog: CatalogServiceImpl;
37
+ inventory: InventoryService;
38
+ media: MediaService;
39
+ cart: CartService;
40
+ orders: OrderService;
41
+ payments: PaymentsService;
42
+ fulfillment: FulfillmentService;
43
+ customers: CustomerService;
44
+ webhooks: WebhookService & {
45
+ enqueueDelivery(payload: WebhookDeliveryPayload): Promise<void>;
46
+ };
47
+ analytics: AnalyticsService;
48
+ pricing: PricingService;
49
+ promotions: PromotionService;
50
+ tax: TaxService;
51
+ shipping: ShippingService;
52
+ search: SearchService;
53
+ audit: AuditService;
54
+ email: CommerceConfig["email"];
55
+ organization: OrganizationService;
56
+ };
57
+ mcpTools: MCPTool[];
58
+ logger: ReturnType<typeof createLogger>;
59
+ getMCPActor(): {
60
+ type: "api_key";
61
+ userId: string;
62
+ email: null;
63
+ name: string;
64
+ vendorId: null;
65
+ organizationId: string;
66
+ role: string;
67
+ permissions: string[];
68
+ };
69
+ }
70
+ export declare function createKernel(config: CommerceConfig): Kernel;
71
+ //# sourceMappingURL=kernel.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"kernel.d.ts","sourceRoot":"","sources":["../../src/runtime/kernel.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,cAAc,EACd,OAAO,EACR,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAE,YAAY,EAAoB,MAAM,6BAA6B,CAAC;AAC7E,OAAO,EAEL,KAAK,eAAe,EACrB,MAAM,+BAA+B,CAAC;AAGvC,OAAO,EAAE,kBAAkB,EAAE,MAAM,+BAA+B,CAAC;AAYnE,OAAO,EAAE,gBAAgB,EAAE,MAAM,iCAAiC,CAAC;AACnE,OAAO,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAC;AAC3D,OAAO,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAC;AACzD,OAAO,EAAE,YAAY,EAAE,MAAM,8BAA8B,CAAC;AAC5D,OAAO,EAAE,eAAe,EAAE,MAAM,gCAAgC,CAAC;AACjE,OAAO,EAAE,kBAAkB,EAAE,MAAM,mCAAmC,CAAC;AACvE,OAAO,EAAE,eAAe,EAAE,MAAM,iCAAiC,CAAC;AAClE,OAAO,EAAE,cAAc,EAAE,MAAM,gCAAgC,CAAC;AAChE,OAAO,EAAE,gBAAgB,EAAE,MAAM,iCAAiC,CAAC;AAGnE,OAAO,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAC;AAC/D,OAAO,EAAE,gBAAgB,EAAE,MAAM,kCAAkC,CAAC;AACpE,OAAO,EAAE,UAAU,EAAE,MAAM,2BAA2B,CAAC;AACvD,OAAO,EAAE,eAAe,EAAE,MAAM,gCAAgC,CAAC;AACjE,OAAO,EAAE,aAAa,EAAE,MAAM,8BAA8B,CAAC;AAE7D,OAAO,EAEL,KAAK,YAAY,EAClB,MAAM,6BAA6B,CAAC;AACrC,OAAO,EAAE,mBAAmB,EAAE,MAAM,oCAAoC,CAAC;AACzE,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAYlD,MAAM,WAAW,sBAAsB;IACrC,QAAQ,EAAE;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC;IACtD,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,OAAO,CAAC;CAClB;AAED,MAAM,WAAW,MAAM;IACrB,MAAM,EAAE,cAAc,CAAC;IACvB,KAAK,EAAE,YAAY,CAAC;IACpB,QAAQ,EAAE,eAAe,CAAC;IAC1B,QAAQ,EAAE;QACR,OAAO,EAAE,kBAAkB,CAAC;QAC5B,SAAS,EAAE,gBAAgB,CAAC;QAC5B,KAAK,EAAE,YAAY,CAAC;QACpB,IAAI,EAAE,WAAW,CAAC;QAClB,MAAM,EAAE,YAAY,CAAC;QACrB,QAAQ,EAAE,eAAe,CAAC;QAC1B,WAAW,EAAE,kBAAkB,CAAC;QAChC,SAAS,EAAE,eAAe,CAAC;QAC3B,QAAQ,EAAE,cAAc,GAAG;YACzB,eAAe,CAAC,OAAO,EAAE,sBAAsB,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;SACjE,CAAC;QACF,SAAS,EAAE,gBAAgB,CAAC;QAC5B,OAAO,EAAE,cAAc,CAAC;QACxB,UAAU,EAAE,gBAAgB,CAAC;QAC7B,GAAG,EAAE,UAAU,CAAC;QAChB,QAAQ,EAAE,eAAe,CAAC;QAC1B,MAAM,EAAE,aAAa,CAAC;QACtB,KAAK,EAAE,YAAY,CAAC;QACpB,KAAK,EAAE,cAAc,CAAC,OAAO,CAAC,CAAC;QAC/B,YAAY,EAAE,mBAAmB,CAAC;KACnC,CAAC;IACF,QAAQ,EAAE,OAAO,EAAE,CAAC;IACpB,MAAM,EAAE,UAAU,CAAC,OAAO,YAAY,CAAC,CAAC;IACxC,WAAW,IAAI;QACb,IAAI,EAAE,SAAS,CAAC;QAChB,MAAM,EAAE,MAAM,CAAC;QACf,KAAK,EAAE,IAAI,CAAC;QACZ,IAAI,EAAE,MAAM,CAAC;QACb,QAAQ,EAAE,IAAI,CAAC;QACf,cAAc,EAAE,MAAM,CAAC;QACvB,IAAI,EAAE,MAAM,CAAC;QACb,WAAW,EAAE,MAAM,EAAE,CAAC;KACvB,CAAC;CACH;AA8FD,wBAAgB,YAAY,CAAC,MAAM,EAAE,cAAc,GAAG,MAAM,CAsO3D"}