@reactionary/source 0.6.1 → 0.6.3

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 (453) hide show
  1. package/README.md +33 -11
  2. package/examples/node/package.json +7 -7
  3. package/examples/node/src/basic/basic-node-provider-model-extension.spec.ts +11 -5
  4. package/examples/node/src/basic/basic-node-provider-query-extension.spec.ts +9 -3
  5. package/examples/node/src/basic/basic-node-setup.spec.ts +6 -2
  6. package/examples/node/src/basic/client-creation.spec.ts +6 -6
  7. package/examples/node/src/utils.ts +48 -48
  8. package/examples/node/tsconfig.lib.json +2 -1
  9. package/package.json +1 -1
  10. package/packages/algolia/README.md +11 -0
  11. package/{providers/google-analytics → packages/algolia}/eslint.config.mjs +0 -2
  12. package/{providers → packages}/algolia/package.json +7 -5
  13. package/{providers/posthog → packages/algolia}/project.json +6 -6
  14. package/{providers/algolia/src/providers/analytics.provider.ts → packages/algolia/src/capabilities/analytics.capability.ts} +6 -6
  15. package/packages/algolia/src/capabilities/index.ts +3 -0
  16. package/{providers/algolia/src/providers/product-recommendations.provider.ts → packages/algolia/src/capabilities/product-recommendations.capability.ts} +3 -3
  17. package/packages/algolia/src/capabilities/product-search.capability.ts +119 -0
  18. package/packages/algolia/src/core/initialize.ts +82 -0
  19. package/packages/algolia/src/core/initialize.types.ts +107 -0
  20. package/packages/algolia/src/factories/index.ts +1 -0
  21. package/packages/algolia/src/factories/product-search/product-search.factory.ts +182 -0
  22. package/{providers/fake → packages/algolia}/src/index.ts +3 -2
  23. package/packages/algolia/src/schema/capabilities.schema.ts +84 -0
  24. package/{providers → packages}/algolia/src/test/analytics.spec.ts +12 -4
  25. package/packages/algolia/src/test/client-builder-product-search-extension.example.ts +85 -0
  26. package/packages/algolia/vite.config.ts +26 -0
  27. package/packages/algolia/vitest.config.mts +21 -0
  28. package/packages/commercetools/README.md +11 -0
  29. package/{core → packages/commercetools}/eslint.config.mjs +2 -2
  30. package/packages/commercetools/package.json +17 -0
  31. package/{providers → packages}/commercetools/project.json +7 -8
  32. package/{providers/commercetools/src/providers/cart.provider.ts → packages/commercetools/src/capabilities/cart.capability.ts} +68 -194
  33. package/{providers/commercetools/src/providers/category.provider.ts → packages/commercetools/src/capabilities/category.capability.ts} +26 -66
  34. package/{providers/commercetools/src/providers/checkout.provider.ts → packages/commercetools/src/capabilities/checkout.capability.ts} +51 -323
  35. package/{providers/commercetools/src/providers/identity.provider.ts → packages/commercetools/src/capabilities/identity.capability.ts} +36 -16
  36. package/packages/commercetools/src/capabilities/index.ts +15 -0
  37. package/{providers/commercetools/src/providers/inventory.provider.ts → packages/commercetools/src/capabilities/inventory.capability.ts} +14 -32
  38. package/packages/commercetools/src/capabilities/order-search.capability.ts +135 -0
  39. package/packages/commercetools/src/capabilities/order.capability.ts +67 -0
  40. package/{providers/commercetools/src/providers/price.provider.ts → packages/commercetools/src/capabilities/price.capability.ts} +38 -52
  41. package/{providers/commercetools/src/providers/product-associations.provider.ts → packages/commercetools/src/capabilities/product-associations.capability.ts} +40 -105
  42. package/{providers/commercetools/src/providers/product-list.provider.ts → packages/commercetools/src/capabilities/product-list.capability.ts} +39 -24
  43. package/{providers/commercetools/src/providers/product-reviews.provider.ts → packages/commercetools/src/capabilities/product-reviews.capability.ts} +35 -15
  44. package/{providers/commercetools/src/providers/product-search.provider.ts → packages/commercetools/src/capabilities/product-search.capability.ts} +18 -171
  45. package/packages/commercetools/src/capabilities/product.capability.ts +133 -0
  46. package/{providers/commercetools/src/providers/profile.provider.ts → packages/commercetools/src/capabilities/profile.capability.ts} +28 -74
  47. package/{providers/commercetools/src/providers/store.provider.ts → packages/commercetools/src/capabilities/store.capability.ts} +14 -32
  48. package/packages/commercetools/src/core/capability-descriptors.ts +324 -0
  49. package/{providers → packages}/commercetools/src/core/client.ts +2 -2
  50. package/packages/commercetools/src/core/initialize.ts +58 -0
  51. package/packages/commercetools/src/core/initialize.types.ts +174 -0
  52. package/packages/commercetools/src/factories/cart/cart.factory.ts +142 -0
  53. package/packages/commercetools/src/factories/category/category.factory.ts +77 -0
  54. package/packages/commercetools/src/factories/checkout/checkout-initializer-overrides.example.ts +94 -0
  55. package/packages/commercetools/src/factories/checkout/checkout.factory.ts +338 -0
  56. package/packages/commercetools/src/factories/identity/identity.factory.ts +26 -0
  57. package/packages/commercetools/src/factories/inventory/inventory.factory.ts +49 -0
  58. package/packages/commercetools/src/factories/order/order.factory.ts +149 -0
  59. package/packages/commercetools/src/factories/order-search/order-search.factory.ts +108 -0
  60. package/packages/commercetools/src/factories/price/price.factory.ts +76 -0
  61. package/packages/commercetools/src/factories/product/product-capability-custom-method-only.example.ts +47 -0
  62. package/packages/commercetools/src/factories/product/product-capability-schema-signature-extension.example.ts +61 -0
  63. package/packages/commercetools/src/factories/product/product-factory-baseline.example.ts +14 -0
  64. package/packages/commercetools/src/factories/product/product-factory-schema-and-parse-extension.example.ts +35 -0
  65. package/packages/commercetools/src/factories/product/product-factory-schema-extension.example.ts +23 -0
  66. package/packages/commercetools/src/factories/product/product-initializer-factory-extension.example.ts +41 -0
  67. package/packages/commercetools/src/factories/product/product.factory.ts +220 -0
  68. package/packages/commercetools/src/factories/product/utils.example.ts +9 -0
  69. package/packages/commercetools/src/factories/product-associations/product-associations.factory.ts +103 -0
  70. package/packages/commercetools/src/factories/product-list/product-list.factory.ts +122 -0
  71. package/packages/commercetools/src/factories/product-reviews/product-reviews.factory.ts +81 -0
  72. package/packages/commercetools/src/factories/product-search/product-search.factory.ts +182 -0
  73. package/packages/commercetools/src/factories/profile/profile.factory.ts +94 -0
  74. package/packages/commercetools/src/factories/store/store.factory.ts +49 -0
  75. package/packages/commercetools/src/index.ts +30 -0
  76. package/packages/commercetools/src/schema/capabilities.schema.ts +260 -0
  77. package/{providers → packages}/commercetools/src/test/caching.spec.ts +24 -8
  78. package/packages/commercetools/src/test/client-builder-merge-extensions.example.ts +125 -0
  79. package/{providers/algolia → packages/commercetools}/tsconfig.json +1 -1
  80. package/{core → packages/commercetools}/tsconfig.lib.json +1 -1
  81. package/packages/commercetools/tsconfig.spec.json +28 -0
  82. package/packages/commercetools/vite.config.ts +26 -0
  83. package/packages/commercetools/vitest.config.mts +21 -0
  84. package/{providers/fake → packages/core}/eslint.config.mjs +2 -1
  85. package/{core → packages/core}/package.json +7 -7
  86. package/packages/core/project.json +33 -0
  87. package/{core/src/providers/analytics.provider.ts → packages/core/src/capabilities/analytics.capability.ts} +8 -8
  88. package/{core/src/providers/base.provider.ts → packages/core/src/capabilities/base.capability.ts} +2 -2
  89. package/{core/src/providers/cart.provider.ts → packages/core/src/capabilities/cart.capability.ts} +13 -11
  90. package/{core/src/providers/category.provider.ts → packages/core/src/capabilities/category.capability.ts} +12 -10
  91. package/{core/src/providers/checkout.provider.ts → packages/core/src/capabilities/checkout.capability.ts} +15 -11
  92. package/{core/src/providers/identity.provider.ts → packages/core/src/capabilities/identity.capability.ts} +8 -8
  93. package/packages/core/src/capabilities/index.ts +18 -0
  94. package/{core/src/providers/inventory.provider.ts → packages/core/src/capabilities/inventory.capability.ts} +5 -5
  95. package/{core/src/providers/order-search.provider.ts → packages/core/src/capabilities/order-search.capability.ts} +5 -3
  96. package/{core/src/providers/order.provider.ts → packages/core/src/capabilities/order.capability.ts} +5 -5
  97. package/{core/src/providers/price.provider.ts → packages/core/src/capabilities/price.capability.ts} +6 -6
  98. package/{core/src/providers/product-associations.provider.ts → packages/core/src/capabilities/product-associations.capability.ts} +7 -5
  99. package/{core/src/providers/product-list.provider.ts → packages/core/src/capabilities/product-list.capability.ts} +14 -9
  100. package/{core/src/providers/product-recommendations.provider.ts → packages/core/src/capabilities/product-recommendations.capability.ts} +21 -21
  101. package/{core/src/providers/product-reviews.provider.ts → packages/core/src/capabilities/product-reviews.capability.ts} +9 -5
  102. package/packages/core/src/capabilities/product-search.capability.ts +48 -0
  103. package/{core/src/providers/product.provider.ts → packages/core/src/capabilities/product.capability.ts} +7 -7
  104. package/{core/src/providers/profile.provider.ts → packages/core/src/capabilities/profile.capability.ts} +9 -9
  105. package/{core/src/providers/store.provider.ts → packages/core/src/capabilities/store.capability.ts} +3 -3
  106. package/packages/core/src/client/client-builder.ts +131 -0
  107. package/packages/core/src/client/client.ts +35 -0
  108. package/{core → packages/core}/src/decorators/reactionary.decorator.ts +7 -7
  109. package/packages/core/src/factories/cart.factory.ts +40 -0
  110. package/packages/core/src/factories/category.factory.ts +40 -0
  111. package/packages/core/src/factories/checkout.factory.ts +59 -0
  112. package/packages/core/src/factories/identity.factory.ts +26 -0
  113. package/packages/core/src/factories/index.ts +15 -0
  114. package/packages/core/src/factories/inventory.factory.ts +26 -0
  115. package/packages/core/src/factories/order-search.factory.ts +33 -0
  116. package/packages/core/src/factories/order.factory.ts +21 -0
  117. package/packages/core/src/factories/price.factory.ts +29 -0
  118. package/packages/core/src/factories/product-associations.factory.ts +30 -0
  119. package/packages/core/src/factories/product-list.factory.ts +82 -0
  120. package/packages/core/src/factories/product-reviews.factory.ts +58 -0
  121. package/packages/core/src/factories/product-search.factory.ts +31 -0
  122. package/packages/core/src/factories/product.factory.ts +21 -0
  123. package/packages/core/src/factories/profile.factory.ts +23 -0
  124. package/packages/core/src/factories/store.factory.ts +21 -0
  125. package/packages/core/src/index.ts +8 -0
  126. package/packages/core/src/test/client-builder.spec.ts +141 -0
  127. package/{core → packages/core}/src/test/reactionary.decorator.spec.ts +27 -27
  128. package/{providers/meilisearch → packages/core}/tsconfig.json +1 -1
  129. package/{providers/medusa → packages/core}/tsconfig.lib.json +1 -2
  130. package/packages/core/tsconfig.spec.json +28 -0
  131. package/packages/core/vite.config.ts +26 -0
  132. package/packages/core/vitest.config.mts +21 -0
  133. package/packages/fake/README.md +11 -0
  134. package/{providers/algolia → packages/fake}/eslint.config.mjs +2 -1
  135. package/{providers → packages}/fake/package.json +6 -4
  136. package/{providers → packages}/fake/project.json +7 -8
  137. package/{providers/fake/src/providers/analytics.provider.ts → packages/fake/src/capabilities/analytics.capability.ts} +2 -2
  138. package/{providers/fake/src/providers/cart.provider.ts → packages/fake/src/capabilities/cart.capability.ts} +24 -15
  139. package/packages/fake/src/capabilities/category.capability.ts +199 -0
  140. package/{providers/fake/src/providers/checkout.provider.ts → packages/fake/src/capabilities/checkout.capability.ts} +40 -21
  141. package/{providers/fake/src/providers/identity.provider.ts → packages/fake/src/capabilities/identity.capability.ts} +40 -34
  142. package/packages/fake/src/capabilities/index.ts +15 -0
  143. package/packages/fake/src/capabilities/inventory.capability.ts +74 -0
  144. package/packages/fake/src/capabilities/order-search.capability.ts +86 -0
  145. package/{providers/fake/src/providers/order.provider.ts → packages/fake/src/capabilities/order.capability.ts} +22 -38
  146. package/{providers/fake/src/providers/price.provider.ts → packages/fake/src/capabilities/price.capability.ts} +42 -34
  147. package/{providers/fake/src/providers/product-associations.provider.ts → packages/fake/src/capabilities/product-associations.capability.ts} +24 -11
  148. package/{providers/fake/src/providers/product-reviews.provider.ts → packages/fake/src/capabilities/product-reviews.capability.ts} +72 -70
  149. package/{providers/fake/src/providers/product-search.provider.ts → packages/fake/src/capabilities/product-search.capability.ts} +44 -71
  150. package/{providers/fake/src/providers/product.provider.ts → packages/fake/src/capabilities/product.capability.ts} +35 -33
  151. package/packages/fake/src/capabilities/profile.capability.ts +154 -0
  152. package/packages/fake/src/capabilities/store.capability.ts +72 -0
  153. package/packages/fake/src/core/initialize.ts +274 -0
  154. package/packages/fake/src/core/initialize.types.ts +164 -0
  155. package/packages/fake/src/factories/cart/cart.factory.ts +34 -0
  156. package/packages/fake/src/factories/category/category.factory.ts +40 -0
  157. package/packages/fake/src/factories/checkout/checkout.factory.ts +53 -0
  158. package/packages/fake/src/factories/identity/identity.factory.ts +25 -0
  159. package/packages/fake/src/factories/index.ts +14 -0
  160. package/packages/fake/src/factories/inventory/inventory.factory.ts +25 -0
  161. package/packages/fake/src/factories/order/order.factory.ts +22 -0
  162. package/packages/fake/src/factories/order-search/order-search.factory.ts +27 -0
  163. package/packages/fake/src/factories/price/price.factory.ts +26 -0
  164. package/packages/fake/src/factories/product/product.factory.ts +22 -0
  165. package/packages/fake/src/factories/product-associations/product-associations.factory.ts +25 -0
  166. package/packages/fake/src/factories/product-reviews/product-reviews.factory.ts +53 -0
  167. package/packages/fake/src/factories/product-search/product-search.factory.ts +27 -0
  168. package/packages/fake/src/factories/profile/profile.factory.ts +22 -0
  169. package/packages/fake/src/factories/store/store.factory.ts +22 -0
  170. package/{providers/algolia → packages/fake}/src/index.ts +4 -3
  171. package/packages/fake/src/schema/capabilities.schema.ts +178 -0
  172. package/{providers/fake/src/test/cart.provider.spec.ts → packages/fake/src/test/cart.capability.spec.ts} +24 -7
  173. package/{providers/fake/src/test/category.provider.spec.ts → packages/fake/src/test/category.capability.spec.ts} +7 -4
  174. package/{providers/fake/src/test/checkout.provider.spec.ts → packages/fake/src/test/checkout.capability.spec.ts} +15 -5
  175. package/packages/fake/src/test/client-builder-product-extension.example.ts +75 -0
  176. package/{providers/fake/src/test/order-search.provider.spec.ts → packages/fake/src/test/order-search.capability.spec.ts} +7 -10
  177. package/{providers/fake/src/test/order.provider.spec.ts → packages/fake/src/test/order.capability.spec.ts} +7 -9
  178. package/{providers/fake/src/test/price.provider.spec.ts → packages/fake/src/test/price.capability.spec.ts} +6 -4
  179. package/{providers/fake/src/test/product.provider.spec.ts → packages/fake/src/test/product.capability.spec.ts} +10 -4
  180. package/{providers/fake/src/test/profile.provider.spec.ts → packages/fake/src/test/profile.capability.spec.ts} +7 -5
  181. package/{providers/commercetools → packages/fake}/tsconfig.json +1 -1
  182. package/packages/fake/tsconfig.lib.json +23 -0
  183. package/packages/fake/tsconfig.spec.json +28 -0
  184. package/packages/fake/vite.config.ts +26 -0
  185. package/packages/fake/vitest.config.mts +21 -0
  186. package/packages/google-analytics/eslint.config.mjs +23 -0
  187. package/{providers → packages}/google-analytics/package.json +7 -5
  188. package/{providers → packages}/google-analytics/project.json +5 -5
  189. package/{providers/google-analytics/src/providers/analytics.provider.ts → packages/google-analytics/src/capabilities/analytics.capability.ts} +2 -2
  190. package/packages/google-analytics/src/core/initialize.ts +41 -0
  191. package/packages/google-analytics/src/core/initialize.types.ts +47 -0
  192. package/{providers → packages}/google-analytics/src/index.ts +2 -1
  193. package/packages/google-analytics/src/schema/capabilities.schema.ts +36 -0
  194. package/{providers/google-analytics/src/test/analytics.provider.spec.ts → packages/google-analytics/src/test/analytics.capability.spec.ts} +7 -7
  195. package/packages/google-analytics/tsconfig.json +24 -0
  196. package/packages/google-analytics/tsconfig.lib.json +23 -0
  197. package/packages/google-analytics/tsconfig.spec.json +28 -0
  198. package/{providers → packages}/google-analytics/vite.config.ts +2 -2
  199. package/{providers → packages}/google-analytics/vitest.config.mts +2 -2
  200. package/packages/medusa/README.md +11 -0
  201. package/packages/medusa/eslint.config.mjs +23 -0
  202. package/packages/medusa/package.json +17 -0
  203. package/{providers → packages}/medusa/project.json +7 -8
  204. package/{providers/medusa/src/providers/cart.provider.ts → packages/medusa/src/capabilities/cart.capability.ts} +34 -21
  205. package/{providers/medusa/src/providers/category.provider.ts → packages/medusa/src/capabilities/category.capability.ts} +31 -13
  206. package/{providers/medusa/src/providers/checkout.provider.ts → packages/medusa/src/capabilities/checkout.capability.ts} +43 -18
  207. package/{providers/medusa/src/providers/identity.provider.ts → packages/medusa/src/capabilities/identity.capability.ts} +3 -3
  208. package/{providers/medusa/src/providers/inventory.provider.ts → packages/medusa/src/capabilities/inventory.capability.ts} +22 -8
  209. package/{providers/medusa/src/providers/order-search.provider.ts → packages/medusa/src/capabilities/order-search.capability.ts} +17 -6
  210. package/{providers/medusa/src/providers/order.provider.ts → packages/medusa/src/capabilities/order.capability.ts} +18 -6
  211. package/{providers/medusa/src/providers/price.provider.ts → packages/medusa/src/capabilities/price.capability.ts} +27 -8
  212. package/{providers/medusa/src/providers/product-associations.provider.ts → packages/medusa/src/capabilities/product-associations.capability.ts} +20 -9
  213. package/{providers/medusa/src/providers/product-recommendations.provider.ts → packages/medusa/src/capabilities/product-recommendations.capability.ts} +3 -3
  214. package/{providers/medusa/src/providers/product-search.provider.ts → packages/medusa/src/capabilities/product-search.capability.ts} +20 -32
  215. package/{providers/medusa/src/providers/product.provider.ts → packages/medusa/src/capabilities/product.capability.ts} +48 -12
  216. package/{providers/medusa/src/providers/profile.provider.ts → packages/medusa/src/capabilities/profile.capability.ts} +37 -13
  217. package/packages/medusa/src/core/initialize.ts +330 -0
  218. package/packages/medusa/src/core/initialize.types.ts +184 -0
  219. package/packages/medusa/src/factories/cart/cart.factory.ts +34 -0
  220. package/packages/medusa/src/factories/category/category.factory.ts +37 -0
  221. package/packages/medusa/src/factories/checkout/checkout.factory.ts +50 -0
  222. package/packages/medusa/src/factories/identity/identity.factory.ts +22 -0
  223. package/packages/medusa/src/factories/index.ts +12 -0
  224. package/packages/medusa/src/factories/inventory/inventory.factory.ts +25 -0
  225. package/packages/medusa/src/factories/order/order.factory.ts +22 -0
  226. package/packages/medusa/src/factories/order-search/order-search.factory.ts +27 -0
  227. package/packages/medusa/src/factories/price/price.factory.ts +26 -0
  228. package/packages/medusa/src/factories/product/product.factory.ts +22 -0
  229. package/packages/medusa/src/factories/product-associations/product-associations.factory.ts +25 -0
  230. package/packages/medusa/src/factories/product-search/product-search.factory.ts +27 -0
  231. package/packages/medusa/src/factories/profile/profile.factory.ts +22 -0
  232. package/packages/medusa/src/index.ts +17 -0
  233. package/packages/medusa/src/schema/capabilities.schema.ts +231 -0
  234. package/{providers/medusa/src/test/cart.provider.spec.ts → packages/medusa/src/test/cart.capability.spec.ts} +20 -4
  235. package/{providers/medusa/src/test/category.provider.spec.ts → packages/medusa/src/test/category.capability.spec.ts} +7 -4
  236. package/{providers → packages}/medusa/src/test/checkout.spec.ts +9 -9
  237. package/{providers/medusa/src/test/identity.provider.spec.ts → packages/medusa/src/test/identity.capability.spec.ts} +3 -3
  238. package/{providers/medusa/src/test/inventory.provider.spec.ts → packages/medusa/src/test/inventory.capability.spec.ts} +6 -4
  239. package/{providers/medusa/src/test/large-cart.provider.spec.ts → packages/medusa/src/test/large-cart.capability.spec.ts} +14 -8
  240. package/{providers/medusa/src/test/price.provider.spec.ts → packages/medusa/src/test/price.capability.spec.ts} +10 -3
  241. package/{providers/medusa/src/test/product.provider.spec.ts → packages/medusa/src/test/product.capability.spec.ts} +6 -4
  242. package/{providers/medusa/src/test/search.provider.spec.ts → packages/medusa/src/test/search.capability.spec.ts} +20 -7
  243. package/{providers → packages}/medusa/src/utils/medusa-helpers.ts +1 -1
  244. package/packages/medusa/tsconfig.json +24 -0
  245. package/packages/medusa/tsconfig.lib.json +23 -0
  246. package/packages/medusa/tsconfig.spec.json +28 -0
  247. package/packages/medusa/vite.config.ts +26 -0
  248. package/packages/medusa/vitest.config.mts +21 -0
  249. package/packages/meilisearch/README.md +11 -0
  250. package/packages/meilisearch/eslint.config.mjs +23 -0
  251. package/packages/meilisearch/package.json +15 -0
  252. package/{providers → packages}/meilisearch/project.json +7 -8
  253. package/packages/meilisearch/src/capabilities/index.ts +3 -0
  254. package/{providers/meilisearch/src/providers/order-search.provider.ts → packages/meilisearch/src/capabilities/order-search.capability.ts} +22 -7
  255. package/{providers/meilisearch/src/providers/product-recommendations.provider.ts → packages/meilisearch/src/capabilities/product-recommendations.capability.ts} +3 -3
  256. package/{providers/meilisearch/src/providers/product-search.provider.ts → packages/meilisearch/src/capabilities/product-search.capability.ts} +25 -9
  257. package/packages/meilisearch/src/core/initialize.ts +94 -0
  258. package/packages/meilisearch/src/core/initialize.types.ts +119 -0
  259. package/packages/meilisearch/src/factories/index.ts +2 -0
  260. package/packages/meilisearch/src/factories/order-search/order-search.factory.ts +27 -0
  261. package/packages/meilisearch/src/factories/product-search/product-search.factory.ts +27 -0
  262. package/packages/meilisearch/src/index.ts +9 -0
  263. package/packages/meilisearch/src/schema/capabilities.schema.ts +98 -0
  264. package/packages/meilisearch/tsconfig.json +24 -0
  265. package/packages/meilisearch/tsconfig.lib.json +23 -0
  266. package/packages/meilisearch/tsconfig.spec.json +28 -0
  267. package/packages/meilisearch/vite.config.ts +26 -0
  268. package/packages/meilisearch/vitest.config.mts +21 -0
  269. package/tsconfig.base.json +13 -21
  270. package/core/project.json +0 -34
  271. package/core/src/client/client-builder.ts +0 -84
  272. package/core/src/client/client.ts +0 -35
  273. package/core/src/index.ts +0 -6
  274. package/core/src/providers/index.ts +0 -18
  275. package/core/src/providers/product-search.provider.ts +0 -61
  276. package/core/src/test/client-builder.spec.ts +0 -60
  277. package/core/tsconfig.json +0 -24
  278. package/core/tsconfig.spec.json +0 -4
  279. package/core/vitest.config.ts +0 -14
  280. package/providers/algolia/README.md +0 -56
  281. package/providers/algolia/project.json +0 -34
  282. package/providers/algolia/src/core/initialize.ts +0 -27
  283. package/providers/algolia/src/providers/index.ts +0 -3
  284. package/providers/algolia/src/providers/product-search.provider.ts +0 -236
  285. package/providers/algolia/src/schema/capabilities.schema.ts +0 -10
  286. package/providers/algolia/tsconfig.lib.json +0 -10
  287. package/providers/algolia/tsconfig.spec.json +0 -4
  288. package/providers/algolia/vitest.config.ts +0 -14
  289. package/providers/commercetools/README.md +0 -65
  290. package/providers/commercetools/eslint.config.mjs +0 -22
  291. package/providers/commercetools/package.json +0 -15
  292. package/providers/commercetools/src/core/initialize.ts +0 -174
  293. package/providers/commercetools/src/index.ts +0 -15
  294. package/providers/commercetools/src/providers/index.ts +0 -15
  295. package/providers/commercetools/src/providers/order-search.provider.ts +0 -229
  296. package/providers/commercetools/src/providers/order.provider.ts +0 -198
  297. package/providers/commercetools/src/providers/product.provider.ts +0 -312
  298. package/providers/commercetools/src/schema/capabilities.schema.ts +0 -22
  299. package/providers/commercetools/tsconfig.lib.json +0 -10
  300. package/providers/commercetools/tsconfig.spec.json +0 -4
  301. package/providers/commercetools/vitest.config.ts +0 -15
  302. package/providers/fake/README.md +0 -23
  303. package/providers/fake/src/core/initialize.ts +0 -105
  304. package/providers/fake/src/providers/category.provider.ts +0 -184
  305. package/providers/fake/src/providers/index.ts +0 -15
  306. package/providers/fake/src/providers/inventory.provider.ts +0 -72
  307. package/providers/fake/src/providers/order-search.provider.ts +0 -78
  308. package/providers/fake/src/providers/profile.provider.ts +0 -147
  309. package/providers/fake/src/providers/store.provider.ts +0 -56
  310. package/providers/fake/src/schema/capabilities.schema.ts +0 -21
  311. package/providers/fake/tsconfig.json +0 -25
  312. package/providers/fake/tsconfig.lib.json +0 -11
  313. package/providers/fake/tsconfig.spec.json +0 -4
  314. package/providers/fake/vitest.config.ts +0 -14
  315. package/providers/google-analytics/src/core/initialize.ts +0 -16
  316. package/providers/google-analytics/src/schema/capabilities.schema.ts +0 -10
  317. package/providers/medusa/README.md +0 -30
  318. package/providers/medusa/TESTING.md +0 -98
  319. package/providers/medusa/eslint.config.mjs +0 -19
  320. package/providers/medusa/package.json +0 -15
  321. package/providers/medusa/src/core/initialize.ts +0 -87
  322. package/providers/medusa/src/index.ts +0 -15
  323. package/providers/medusa/src/schema/capabilities.schema.ts +0 -20
  324. package/providers/medusa/tsconfig.json +0 -24
  325. package/providers/medusa/tsconfig.spec.json +0 -4
  326. package/providers/medusa/vitest.config.ts +0 -15
  327. package/providers/meilisearch/README.md +0 -48
  328. package/providers/meilisearch/eslint.config.mjs +0 -22
  329. package/providers/meilisearch/package.json +0 -13
  330. package/providers/meilisearch/src/core/initialize.ts +0 -27
  331. package/providers/meilisearch/src/index.ts +0 -7
  332. package/providers/meilisearch/src/providers/index.ts +0 -2
  333. package/providers/meilisearch/src/schema/capabilities.schema.ts +0 -11
  334. package/providers/meilisearch/tsconfig.lib.json +0 -10
  335. package/providers/meilisearch/tsconfig.spec.json +0 -4
  336. package/providers/meilisearch/vitest.config.ts +0 -14
  337. package/providers/posthog/README.md +0 -7
  338. package/providers/posthog/eslint.config.mjs +0 -22
  339. package/providers/posthog/package.json +0 -12
  340. package/providers/posthog/src/core/initialize.ts +0 -11
  341. package/providers/posthog/src/index.ts +0 -4
  342. package/providers/posthog/src/schema/capabilities.schema.ts +0 -8
  343. package/providers/posthog/src/schema/configuration.schema.ts +0 -8
  344. package/providers/posthog/tsconfig.json +0 -21
  345. package/providers/posthog/tsconfig.lib.json +0 -9
  346. /package/{providers → packages}/algolia/src/schema/configuration.schema.ts +0 -0
  347. /package/{providers → packages}/algolia/src/schema/index.ts +0 -0
  348. /package/{providers → packages}/algolia/src/schema/product-recommendation.schema.ts +0 -0
  349. /package/{providers → packages}/algolia/src/schema/search.schema.ts +0 -0
  350. /package/{providers/google-analytics → packages/algolia}/tsconfig.json +0 -0
  351. /package/{providers/google-analytics → packages/algolia}/tsconfig.lib.json +0 -0
  352. /package/{providers/google-analytics → packages/algolia}/tsconfig.spec.json +0 -0
  353. /package/{providers → packages}/commercetools/src/core/token-cache.ts +0 -0
  354. /package/{providers → packages}/commercetools/src/schema/commercetools.schema.ts +0 -0
  355. /package/{providers → packages}/commercetools/src/schema/configuration.schema.ts +0 -0
  356. /package/{providers → packages}/commercetools/src/schema/session.schema.ts +0 -0
  357. /package/{providers → packages}/commercetools/src/test/identity.spec.ts +0 -0
  358. /package/{providers → packages}/commercetools/src/test/test-utils.ts +0 -0
  359. /package/{core → packages/core}/README.md +0 -0
  360. /package/{core → packages/core}/src/cache/cache.interface.ts +0 -0
  361. /package/{core → packages/core}/src/cache/index.ts +0 -0
  362. /package/{core → packages/core}/src/cache/memory-cache.ts +0 -0
  363. /package/{core → packages/core}/src/cache/noop-cache.ts +0 -0
  364. /package/{core → packages/core}/src/cache/redis-cache.ts +0 -0
  365. /package/{core → packages/core}/src/client/index.ts +0 -0
  366. /package/{core → packages/core}/src/decorators/index.ts +0 -0
  367. /package/{core → packages/core}/src/initialization.ts +0 -0
  368. /package/{core → packages/core}/src/metrics/metrics.ts +0 -0
  369. /package/{core → packages/core}/src/schemas/capabilities.schema.ts +0 -0
  370. /package/{core → packages/core}/src/schemas/errors/generic.error.ts +0 -0
  371. /package/{core → packages/core}/src/schemas/errors/index.ts +0 -0
  372. /package/{core → packages/core}/src/schemas/errors/invalid-input.error.ts +0 -0
  373. /package/{core → packages/core}/src/schemas/errors/invalid-output.error.ts +0 -0
  374. /package/{core → packages/core}/src/schemas/errors/not-found.error.ts +0 -0
  375. /package/{core → packages/core}/src/schemas/index.ts +0 -0
  376. /package/{core → packages/core}/src/schemas/models/analytics.model.ts +0 -0
  377. /package/{core → packages/core}/src/schemas/models/base.model.ts +0 -0
  378. /package/{core → packages/core}/src/schemas/models/cart.model.ts +0 -0
  379. /package/{core → packages/core}/src/schemas/models/category.model.ts +0 -0
  380. /package/{core → packages/core}/src/schemas/models/checkout.model.ts +0 -0
  381. /package/{core → packages/core}/src/schemas/models/cost.model.ts +0 -0
  382. /package/{core → packages/core}/src/schemas/models/currency.model.ts +0 -0
  383. /package/{core → packages/core}/src/schemas/models/identifiers.model.ts +0 -0
  384. /package/{core → packages/core}/src/schemas/models/identity.model.ts +0 -0
  385. /package/{core → packages/core}/src/schemas/models/index.ts +0 -0
  386. /package/{core → packages/core}/src/schemas/models/inventory.model.ts +0 -0
  387. /package/{core → packages/core}/src/schemas/models/order-search.model.ts +0 -0
  388. /package/{core → packages/core}/src/schemas/models/order.model.ts +0 -0
  389. /package/{core → packages/core}/src/schemas/models/payment.model.ts +0 -0
  390. /package/{core → packages/core}/src/schemas/models/price.model.ts +0 -0
  391. /package/{core → packages/core}/src/schemas/models/product-associations.model.ts +0 -0
  392. /package/{core → packages/core}/src/schemas/models/product-list.model.ts +0 -0
  393. /package/{core → packages/core}/src/schemas/models/product-recommendations.model.ts +0 -0
  394. /package/{core → packages/core}/src/schemas/models/product-reviews.model.ts +0 -0
  395. /package/{core → packages/core}/src/schemas/models/product-search.model.ts +0 -0
  396. /package/{core → packages/core}/src/schemas/models/product.model.ts +0 -0
  397. /package/{core → packages/core}/src/schemas/models/profile.model.ts +0 -0
  398. /package/{core → packages/core}/src/schemas/models/shipping-method.model.ts +0 -0
  399. /package/{core → packages/core}/src/schemas/models/store.model.ts +0 -0
  400. /package/{core → packages/core}/src/schemas/mutations/analytics/index.ts +0 -0
  401. /package/{core → packages/core}/src/schemas/mutations/analytics/product-add-to-cart.mutation.ts +0 -0
  402. /package/{core → packages/core}/src/schemas/mutations/analytics/product-details-view.mutation.ts +0 -0
  403. /package/{core → packages/core}/src/schemas/mutations/analytics/product-summary-click.mutation.ts +0 -0
  404. /package/{core → packages/core}/src/schemas/mutations/analytics/product-summary-view.mutation.ts +0 -0
  405. /package/{core → packages/core}/src/schemas/mutations/analytics/purchase.mutation.ts +0 -0
  406. /package/{core → packages/core}/src/schemas/mutations/base.mutation.ts +0 -0
  407. /package/{core → packages/core}/src/schemas/mutations/cart.mutation.ts +0 -0
  408. /package/{core → packages/core}/src/schemas/mutations/checkout.mutation.ts +0 -0
  409. /package/{core → packages/core}/src/schemas/mutations/identity.mutation.ts +0 -0
  410. /package/{core → packages/core}/src/schemas/mutations/index.ts +0 -0
  411. /package/{core → packages/core}/src/schemas/mutations/inventory.mutation.ts +0 -0
  412. /package/{core → packages/core}/src/schemas/mutations/price.mutation.ts +0 -0
  413. /package/{core → packages/core}/src/schemas/mutations/product-list.mutation.ts +0 -0
  414. /package/{core → packages/core}/src/schemas/mutations/product-reviews.mutation.ts +0 -0
  415. /package/{core → packages/core}/src/schemas/mutations/product.mutation.ts +0 -0
  416. /package/{core → packages/core}/src/schemas/mutations/profile.mutation.ts +0 -0
  417. /package/{core → packages/core}/src/schemas/mutations/search.mutation.ts +0 -0
  418. /package/{core → packages/core}/src/schemas/queries/analytics.query.ts +0 -0
  419. /package/{core → packages/core}/src/schemas/queries/base.query.ts +0 -0
  420. /package/{core → packages/core}/src/schemas/queries/cart.query.ts +0 -0
  421. /package/{core → packages/core}/src/schemas/queries/category.query.ts +0 -0
  422. /package/{core → packages/core}/src/schemas/queries/checkout.query.ts +0 -0
  423. /package/{core → packages/core}/src/schemas/queries/identity.query.ts +0 -0
  424. /package/{core → packages/core}/src/schemas/queries/index.ts +0 -0
  425. /package/{core → packages/core}/src/schemas/queries/inventory.query.ts +0 -0
  426. /package/{core → packages/core}/src/schemas/queries/order-search.query.ts +0 -0
  427. /package/{core → packages/core}/src/schemas/queries/order.query.ts +0 -0
  428. /package/{core → packages/core}/src/schemas/queries/price.query.ts +0 -0
  429. /package/{core → packages/core}/src/schemas/queries/product-associations.query.ts +0 -0
  430. /package/{core → packages/core}/src/schemas/queries/product-list.query.ts +0 -0
  431. /package/{core → packages/core}/src/schemas/queries/product-recommendations.query.ts +0 -0
  432. /package/{core → packages/core}/src/schemas/queries/product-reviews.query.ts +0 -0
  433. /package/{core → packages/core}/src/schemas/queries/product-search.query.ts +0 -0
  434. /package/{core → packages/core}/src/schemas/queries/product.query.ts +0 -0
  435. /package/{core → packages/core}/src/schemas/queries/profile.query.ts +0 -0
  436. /package/{core → packages/core}/src/schemas/queries/store.query.ts +0 -0
  437. /package/{core → packages/core}/src/schemas/result.ts +0 -0
  438. /package/{core → packages/core}/src/schemas/session.schema.ts +0 -0
  439. /package/{core → packages/core}/src/test/request-context.spec.ts +0 -0
  440. /package/{core → packages/core}/src/zod-utils.ts +0 -0
  441. /package/{providers → packages}/fake/src/schema/configuration.schema.ts +0 -0
  442. /package/{providers → packages}/fake/src/test/test-utils.ts +0 -0
  443. /package/{providers → packages}/fake/src/utilities/jitter.ts +0 -0
  444. /package/{providers → packages}/fake/src/utilities/seed.ts +0 -0
  445. /package/{providers → packages}/google-analytics/README.md +0 -0
  446. /package/{providers → packages}/google-analytics/src/schema/configuration.schema.ts +0 -0
  447. /package/{providers → packages}/medusa/src/core/client.ts +0 -0
  448. /package/{providers → packages}/medusa/src/schema/configuration.schema.ts +0 -0
  449. /package/{providers → packages}/medusa/src/schema/medusa.schema.ts +0 -0
  450. /package/{providers → packages}/medusa/src/test/test-utils.ts +0 -0
  451. /package/{providers → packages}/meilisearch/src/schema/configuration.schema.ts +0 -0
  452. /package/{providers → packages}/meilisearch/src/schema/index.ts +0 -0
  453. /package/{providers → packages}/meilisearch/src/schema/search.schema.ts +0 -0
@@ -2,10 +2,18 @@ import type {
2
2
  StoreProductCategory,
3
3
  StoreProductCategoryListResponse,
4
4
  } from '@medusajs/types';
5
- import type { Category, Cache, CategoryPaginatedResult } from '@reactionary/core';
5
+ import type {
6
+ Category,
7
+ Cache,
8
+ CategoryFactory,
9
+ CategoryFactoryCategoryOutput,
10
+ CategoryFactoryPaginatedOutput,
11
+ CategoryFactoryWithOutput,
12
+ CategoryPaginatedResult,
13
+ } from '@reactionary/core';
6
14
  import {
7
15
  CategoryIdentifierSchema,
8
- CategoryProvider,
16
+ CategoryCapability,
9
17
  CategorySchema,
10
18
  CategoryQueryByIdSchema,
11
19
  CategoryQueryBySlugSchema,
@@ -28,18 +36,27 @@ import {
28
36
  } from '@reactionary/core';
29
37
  import type { MedusaAPI, MedusaConfiguration } from '../index.js';
30
38
  import * as z from 'zod';
39
+ import type { MedusaCategoryFactory } from '../factories/category/category.factory.js';
31
40
 
32
- export class MedusaCategoryProvider extends CategoryProvider {
41
+ export class MedusaCategoryCapability<
42
+ TFactory extends CategoryFactory = MedusaCategoryFactory,
43
+ > extends CategoryCapability<
44
+ CategoryFactoryCategoryOutput<TFactory>,
45
+ CategoryFactoryPaginatedOutput<TFactory>
46
+ > {
33
47
  protected config: MedusaConfiguration;
48
+ protected factory: CategoryFactoryWithOutput<TFactory>;
34
49
 
35
50
  constructor(
36
51
  config: MedusaConfiguration,
37
52
  cache: Cache,
38
53
  context: RequestContext,
39
- public medusaApi: MedusaAPI
54
+ public medusaApi: MedusaAPI,
55
+ factory: CategoryFactoryWithOutput<TFactory>,
40
56
  ) {
41
57
  super(cache, context);
42
58
  this.config = config;
59
+ this.factory = factory;
43
60
  }
44
61
 
45
62
  protected async resolveCategoryIdByExternalId(
@@ -82,7 +99,9 @@ export class MedusaCategoryProvider extends CategoryProvider {
82
99
  inputSchema: CategoryQueryByIdSchema,
83
100
  outputSchema: CategorySchema,
84
101
  })
85
- public override async getById(payload: CategoryQueryById): Promise<Result<Category, NotFoundError>> {
102
+ public override async getById(
103
+ payload: CategoryQueryById,
104
+ ): Promise<Result<CategoryFactoryCategoryOutput<TFactory>, NotFoundError>> {
86
105
  const candidate = await this.resolveCategoryIdByExternalId(payload.id.key);
87
106
  if (!candidate) {
88
107
  return error<NotFoundError>({
@@ -107,7 +126,7 @@ export class MedusaCategoryProvider extends CategoryProvider {
107
126
  })
108
127
  public override async getBySlug(
109
128
  payload: CategoryQueryBySlug
110
- ): Promise<Result<Category, NotFoundError>> {
129
+ ): Promise<Result<CategoryFactoryCategoryOutput<TFactory>, NotFoundError>> {
111
130
  const sdk = await this.medusaApi.getClient();
112
131
 
113
132
  const categoryResult = await sdk.store.category.list(this.getBySlugPayload(payload));
@@ -126,7 +145,7 @@ export class MedusaCategoryProvider extends CategoryProvider {
126
145
  })
127
146
  public override async getBreadcrumbPathToCategory(
128
147
  payload: CategoryQueryForBreadcrumb
129
- ): Promise<Result<Category[]>> {
148
+ ): Promise<Result<CategoryFactoryCategoryOutput<TFactory>[]>> {
130
149
  const actualCategoryId = await this.resolveCategoryIdByExternalId(
131
150
  payload.id.key
132
151
  );
@@ -140,7 +159,7 @@ export class MedusaCategoryProvider extends CategoryProvider {
140
159
  include_ancestors_tree: true,
141
160
  });
142
161
 
143
- let results = new Array<Category>();
162
+ let results = new Array<CategoryFactoryCategoryOutput<TFactory>>();
144
163
  let current: StoreProductCategory | null = path.product_category;
145
164
  while (current) {
146
165
  results.push(this.parseSingle(current));
@@ -209,7 +228,7 @@ export class MedusaCategoryProvider extends CategoryProvider {
209
228
  return success(result);
210
229
  }
211
230
 
212
- protected parseSingle(_body: StoreProductCategory): Category {
231
+ protected parseSingle(_body: StoreProductCategory): CategoryFactoryCategoryOutput<TFactory> {
213
232
  const identifier = CategoryIdentifierSchema.parse({
214
233
  key: _body.metadata?.['external_id'] || '',
215
234
  });
@@ -230,12 +249,12 @@ export class MedusaCategoryProvider extends CategoryProvider {
230
249
  images: [],
231
250
  } satisfies Category;
232
251
 
233
- return result;
252
+ return this.factory.parseCategory(this.context, result);
234
253
  }
235
254
 
236
255
  protected parsePaginatedResult(
237
256
  body: StoreProductCategoryListResponse
238
- ) {
257
+ ): CategoryFactoryPaginatedOutput<TFactory> {
239
258
  const items = body.product_categories.map((x) => this.parseSingle(x));
240
259
 
241
260
  const totalPages = Math.ceil(
@@ -254,7 +273,6 @@ export class MedusaCategoryProvider extends CategoryProvider {
254
273
  items: items,
255
274
  } satisfies CategoryPaginatedResult;
256
275
 
257
- return result;
276
+ return this.factory.parseCategoryPaginatedResult(this.context, result);
258
277
  }
259
278
  }
260
-
@@ -12,6 +12,11 @@ import type {
12
12
  CheckoutMutationRemovePaymentInstruction,
13
13
  CheckoutMutationSetShippingAddress,
14
14
  CheckoutMutationSetShippingInstruction,
15
+ CheckoutFactory,
16
+ CheckoutFactoryCheckoutOutput,
17
+ CheckoutFactoryPaymentMethodOutput,
18
+ CheckoutFactoryShippingMethodOutput,
19
+ CheckoutFactoryWithOutput,
15
20
  CheckoutQueryById,
16
21
  CheckoutQueryForAvailablePaymentMethods,
17
22
  CheckoutQueryForAvailableShippingMethods,
@@ -35,7 +40,7 @@ import {
35
40
  CheckoutMutationRemovePaymentInstructionSchema,
36
41
  CheckoutMutationSetShippingAddressSchema,
37
42
  CheckoutMutationSetShippingInstructionSchema,
38
- CheckoutProvider,
43
+ CheckoutCapability,
39
44
  CheckoutQueryByIdSchema,
40
45
  CheckoutQueryForAvailablePaymentMethodsSchema,
41
46
  CheckoutQueryForAvailableShippingMethodsSchema,
@@ -57,6 +62,7 @@ import {
57
62
  type MedusaCartIdentifier,
58
63
  type MedusaOrderIdentifier
59
64
  } from '../schema/medusa.schema.js';
65
+ import type { MedusaCheckoutFactory } from '../factories/checkout/checkout.factory.js';
60
66
  const debug = createDebug('reactionary:medusa:checkout');
61
67
 
62
68
  export class CheckoutNotReadyForFinalizationError extends Error {
@@ -74,8 +80,15 @@ export class CheckoutNotReadyForFinalizationError extends Error {
74
80
  }
75
81
  }
76
82
 
77
- export class MedusaCheckoutProvider extends CheckoutProvider {
83
+ export class MedusaCheckoutCapability<
84
+ TFactory extends CheckoutFactory = MedusaCheckoutFactory,
85
+ > extends CheckoutCapability<
86
+ CheckoutFactoryCheckoutOutput<TFactory>,
87
+ CheckoutFactoryShippingMethodOutput<TFactory>,
88
+ CheckoutFactoryPaymentMethodOutput<TFactory>
89
+ > {
78
90
  protected config: MedusaConfiguration;
91
+ protected factory: CheckoutFactoryWithOutput<TFactory>;
79
92
 
80
93
  /**
81
94
  * This controls which fields are always included when fetching a cart
@@ -91,10 +104,12 @@ export class MedusaCheckoutProvider extends CheckoutProvider {
91
104
  config: MedusaConfiguration,
92
105
  cache: Cache,
93
106
  context: RequestContext,
94
- public medusaApi: MedusaAPI
107
+ public medusaApi: MedusaAPI,
108
+ factory: CheckoutFactoryWithOutput<TFactory>,
95
109
  ) {
96
110
  super(cache, context);
97
111
  this.config = config;
112
+ this.factory = factory;
98
113
  }
99
114
 
100
115
  protected initiateCheckoutForCartPayload(payload: CheckoutMutationInitiateCheckout): StoreUpdateCart {
@@ -118,7 +133,7 @@ export class MedusaCheckoutProvider extends CheckoutProvider {
118
133
  })
119
134
  public override async initiateCheckoutForCart(
120
135
  payload: CheckoutMutationInitiateCheckout
121
- ): Promise<Result<Checkout>> {
136
+ ): Promise<Result<CheckoutFactoryCheckoutOutput<TFactory>>> {
122
137
  const client = await this.medusaApi.getClient();
123
138
  // we should eventually copy the cart.... but for now we just continue with the existing one.
124
139
  if (debug.enabled) {
@@ -144,7 +159,7 @@ export class MedusaCheckoutProvider extends CheckoutProvider {
144
159
  })
145
160
  public override async getById(
146
161
  payload: CheckoutQueryById
147
- ): Promise<Result<Checkout, NotFoundError>> {
162
+ ): Promise<Result<CheckoutFactoryCheckoutOutput<TFactory>, NotFoundError>> {
148
163
  const client = await this.medusaApi.getClient();
149
164
  const response = await client.store.cart.retrieve(payload.identifier.key, {
150
165
  fields: this.includedFields,
@@ -165,7 +180,7 @@ export class MedusaCheckoutProvider extends CheckoutProvider {
165
180
  })
166
181
  public override async setShippingAddress(
167
182
  payload: CheckoutMutationSetShippingAddress
168
- ): Promise<Result<Checkout>> {
183
+ ): Promise<Result<CheckoutFactoryCheckoutOutput<TFactory>>> {
169
184
  const client = await this.medusaApi.getClient();
170
185
 
171
186
  const response = await client.store.cart.update(
@@ -191,7 +206,7 @@ export class MedusaCheckoutProvider extends CheckoutProvider {
191
206
  })
192
207
  public override async getAvailableShippingMethods(
193
208
  payload: CheckoutQueryForAvailableShippingMethods
194
- ): Promise<Result<ShippingMethod[]>> {
209
+ ): Promise<Result<CheckoutFactoryShippingMethodOutput<TFactory>[]>> {
195
210
  const client = await this.medusaApi.getClient();
196
211
 
197
212
  if (debug.enabled) {
@@ -229,7 +244,9 @@ export class MedusaCheckoutProvider extends CheckoutProvider {
229
244
  shippingMethods
230
245
  );
231
246
  }
232
- return success(shippingMethods);
247
+ return success(
248
+ shippingMethods.map((x) => this.factory.parseShippingMethod(this.context, x)),
249
+ );
233
250
  }
234
251
 
235
252
  protected getAvailablePaymentMethodsPayload(payload: CheckoutQueryForAvailablePaymentMethods, regionId: string) {
@@ -244,7 +261,7 @@ export class MedusaCheckoutProvider extends CheckoutProvider {
244
261
  })
245
262
  public override async getAvailablePaymentMethods(
246
263
  payload: CheckoutQueryForAvailablePaymentMethods
247
- ): Promise<Result<PaymentMethod[]>> {
264
+ ): Promise<Result<CheckoutFactoryPaymentMethodOutput<TFactory>[]>> {
248
265
  const client = await this.medusaApi.getClient();
249
266
 
250
267
  if (debug.enabled) {
@@ -286,7 +303,9 @@ export class MedusaCheckoutProvider extends CheckoutProvider {
286
303
  );
287
304
  }
288
305
 
289
- return success(paymentMethods);
306
+ return success(
307
+ paymentMethods.map((x) => this.factory.parsePaymentMethod(this.context, x)),
308
+ );
290
309
  }
291
310
 
292
311
 
@@ -307,7 +326,7 @@ export class MedusaCheckoutProvider extends CheckoutProvider {
307
326
  })
308
327
  public override async addPaymentInstruction(
309
328
  payload: CheckoutMutationAddPaymentInstruction
310
- ): Promise<Result<Checkout>> {
329
+ ): Promise<Result<CheckoutFactoryCheckoutOutput<TFactory>>> {
311
330
  const client = await this.medusaApi.getClient();
312
331
 
313
332
  if (debug.enabled) {
@@ -347,7 +366,7 @@ export class MedusaCheckoutProvider extends CheckoutProvider {
347
366
  })
348
367
  public override removePaymentInstruction(
349
368
  payload: CheckoutMutationRemovePaymentInstruction
350
- ): Promise<Result<Checkout>> {
369
+ ): Promise<Result<CheckoutFactoryCheckoutOutput<TFactory>>> {
351
370
  throw new Error('Method not implemented.');
352
371
  }
353
372
 
@@ -368,7 +387,7 @@ export class MedusaCheckoutProvider extends CheckoutProvider {
368
387
  })
369
388
  public override async setShippingInstruction(
370
389
  payload: CheckoutMutationSetShippingInstruction
371
- ): Promise<Result<Checkout>> {
390
+ ): Promise<Result<CheckoutFactoryCheckoutOutput<TFactory>>> {
372
391
  const client = await this.medusaApi.getClient();
373
392
  const medusaId = payload.checkout as MedusaCartIdentifier;
374
393
  try {
@@ -412,7 +431,7 @@ export class MedusaCheckoutProvider extends CheckoutProvider {
412
431
  })
413
432
  public override async finalizeCheckout(
414
433
  payload: CheckoutMutationFinalizeCheckout
415
- ): Promise<Result<Checkout>> {
434
+ ): Promise<Result<CheckoutFactoryCheckoutOutput<TFactory>>> {
416
435
  const checkout = await this.getById({ identifier: payload.checkout });
417
436
  if (!checkout.success || !checkout.value.readyForFinalization) {
418
437
  throw new CheckoutNotReadyForFinalizationError(payload.checkout);
@@ -432,9 +451,15 @@ export class MedusaCheckoutProvider extends CheckoutProvider {
432
451
  order_display_id: response.order?.display_id ? +'' : '',
433
452
  },
434
453
  });
435
- return this.getById({
454
+ const refreshedCheckout = await this.getById({
436
455
  identifier: payload.checkout,
437
- }) as Promise<Result<Checkout>>;
456
+ });
457
+
458
+ if (!refreshedCheckout.success) {
459
+ throw new Error(`Unable to reload checkout ${payload.checkout.key} after completion`);
460
+ }
461
+
462
+ return success(refreshedCheckout.value);
438
463
  }
439
464
 
440
465
  throw new Error('Something failed during order creation');
@@ -534,7 +559,7 @@ export class MedusaCheckoutProvider extends CheckoutProvider {
534
559
  * @param remote
535
560
  * @returns
536
561
  */
537
- protected parseSingle(remote: StoreCart): Checkout {
562
+ protected parseSingle(remote: StoreCart): CheckoutFactoryCheckoutOutput<TFactory> {
538
563
  const identifier = {
539
564
  key: remote.id,
540
565
  // region_id: remote.region_id,
@@ -668,6 +693,6 @@ export class MedusaCheckoutProvider extends CheckoutProvider {
668
693
  shippingInstruction
669
694
  };
670
695
 
671
- return result;
696
+ return this.factory.parseCheckout(this.context, result);
672
697
  }
673
698
  }
@@ -6,7 +6,7 @@ import {
6
6
  type IdentityQuerySelf,
7
7
  type RequestContext,
8
8
  type Cache,
9
- IdentityProvider,
9
+ IdentityCapability,
10
10
  Reactionary,
11
11
  IdentityQuerySelfSchema,
12
12
  IdentitySchema,
@@ -24,7 +24,7 @@ import createDebug from 'debug';
24
24
 
25
25
  const debug = createDebug('reactionary:medusa:identity');
26
26
 
27
- export class MedusaIdentityProvider extends IdentityProvider {
27
+ export class MedusaIdentityCapability extends IdentityCapability {
28
28
  protected config: MedusaConfiguration;
29
29
  protected medusaApi: MedusaAPI;
30
30
 
@@ -32,7 +32,7 @@ export class MedusaIdentityProvider extends IdentityProvider {
32
32
  config: MedusaConfiguration,
33
33
  cache: Cache,
34
34
  context: RequestContext,
35
- medusaApi: MedusaAPI
35
+ medusaApi: MedusaAPI,
36
36
  ) {
37
37
  super(cache, context);
38
38
 
@@ -3,11 +3,14 @@ import {
3
3
  type InventoryQueryBySKU,
4
4
  type RequestContext,
5
5
  type Cache,
6
- InventoryProvider,
6
+ InventoryCapability,
7
7
  InventorySchema,
8
8
  InventoryQueryBySKUSchema,
9
9
  Reactionary,
10
10
  type InventoryIdentifier,
11
+ type InventoryFactory,
12
+ type InventoryFactoryOutput,
13
+ type InventoryFactoryWithOutput,
11
14
  type InventoryStatus,
12
15
  type NotFoundError,
13
16
  type Result,
@@ -17,27 +20,35 @@ import type * as z from 'zod';
17
20
  import type { MedusaConfiguration } from '../schema/configuration.schema.js';
18
21
  import { MedusaAdminAPI, type MedusaAPI } from '../core/client.js';
19
22
  import createDebug from 'debug';
23
+ import type { MedusaInventoryFactory } from '../factories/inventory/inventory.factory.js';
20
24
 
21
25
  const debug = createDebug('reactionary:medusa:inventory');
22
26
 
23
- export class MedusaInventoryProvider extends InventoryProvider {
27
+ export class MedusaInventoryCapability<
28
+ TFactory extends InventoryFactory = MedusaInventoryFactory,
29
+ > extends InventoryCapability<InventoryFactoryOutput<TFactory>> {
24
30
  protected config: MedusaConfiguration;
31
+ protected factory: InventoryFactoryWithOutput<TFactory>;
25
32
 
26
33
  constructor(
27
34
  config: MedusaConfiguration,
28
35
  cache: Cache,
29
36
  context: RequestContext,
30
- public medusaApi: MedusaAPI
37
+ public medusaApi: MedusaAPI,
38
+ factory: InventoryFactoryWithOutput<TFactory>,
31
39
  ) {
32
40
  super(cache, context);
33
41
  this.config = config;
42
+ this.factory = factory;
34
43
  }
35
44
 
36
45
  @Reactionary({
37
46
  inputSchema: InventoryQueryBySKUSchema,
38
47
  outputSchema: InventorySchema,
39
48
  })
40
- public override async getBySKU(payload: InventoryQueryBySKU): Promise<Result<Inventory, NotFoundError>> {
49
+ public override async getBySKU(
50
+ payload: InventoryQueryBySKU,
51
+ ): Promise<Result<InventoryFactoryOutput<TFactory>, NotFoundError>> {
41
52
  const sku = payload.variant.sku;
42
53
  const fulfillmentCenterKey = payload.fulfilmentCenter.key;
43
54
 
@@ -112,7 +123,7 @@ export class MedusaInventoryProvider extends InventoryProvider {
112
123
  }
113
124
  }
114
125
 
115
- protected parseSingle(_body: unknown): Inventory {
126
+ protected parseSingle(_body: unknown): InventoryFactoryOutput<TFactory> {
116
127
  const { sku, fulfillmentCenterKey, quantity } = _body as {
117
128
  sku: string;
118
129
  fulfillmentCenterKey: string;
@@ -140,7 +151,7 @@ export class MedusaInventoryProvider extends InventoryProvider {
140
151
  status
141
152
  } satisfies Inventory;
142
153
 
143
- return result;
154
+ return this.factory.parseInventory(this.context, result);
144
155
  }
145
156
 
146
157
  /**
@@ -150,7 +161,10 @@ export class MedusaInventoryProvider extends InventoryProvider {
150
161
  * @param fulfillmentCenterKey
151
162
  * @returns
152
163
  */
153
- protected createEmptyInventoryResult(sku: string, fulfillmentCenterKey: string): Inventory {
164
+ protected createEmptyInventoryResult(
165
+ sku: string,
166
+ fulfillmentCenterKey: string,
167
+ ): InventoryFactoryOutput<TFactory> {
154
168
  const identifier = {
155
169
  variant: { sku },
156
170
  fulfillmentCenter: { key: fulfillmentCenterKey },
@@ -164,7 +178,7 @@ export class MedusaInventoryProvider extends InventoryProvider {
164
178
  status
165
179
  } satisfies Inventory;
166
180
 
167
- return result;
181
+ return this.factory.parseInventory(this.context, result);
168
182
  }
169
183
 
170
184
  protected override getResourceName(): string {
@@ -13,10 +13,13 @@ import type {
13
13
  OrderSearchIdentifier,
14
14
  AddressIdentifier,
15
15
  OrderInventoryStatus,
16
+ OrderSearchFactory,
17
+ OrderSearchFactoryOutput,
18
+ OrderSearchFactoryWithOutput,
16
19
  } from '@reactionary/core';
17
20
  import {
18
21
  AddressIdentifierSchema,
19
- OrderSearchProvider,
22
+ OrderSearchCapability,
20
23
  OrderSearchQueryByTermSchema,
21
24
  OrderSearchResultSchema,
22
25
  Reactionary,
@@ -26,21 +29,27 @@ import type { MedusaConfiguration } from '../schema/configuration.schema.js';
26
29
  import type { MedusaAPI } from '../core/client.js';
27
30
  import createDebug from 'debug';
28
31
  import type { OrderStatus as MedusaOrderStatus, StoreOrder, StoreOrderAddress, StoreOrderListResponse } from '@medusajs/types';
32
+ import type { MedusaOrderSearchFactory } from '../factories/order-search/order-search.factory.js';
29
33
 
30
34
  const debug = createDebug('reactionary:medusa:order-search');
31
35
 
32
- export class MedusaOrderSearchProvider extends OrderSearchProvider {
36
+ export class MedusaOrderSearchCapability<
37
+ TFactory extends OrderSearchFactory = MedusaOrderSearchFactory,
38
+ > extends OrderSearchCapability<OrderSearchFactoryOutput<TFactory>> {
33
39
  protected config: MedusaConfiguration;
40
+ protected factory: OrderSearchFactoryWithOutput<TFactory>;
34
41
 
35
42
  constructor(
36
43
  config: MedusaConfiguration,
37
44
  cache: Cache,
38
45
  context: RequestContext,
39
- public medusaApi: MedusaAPI
46
+ public medusaApi: MedusaAPI,
47
+ factory: OrderSearchFactoryWithOutput<TFactory>,
40
48
  ) {
41
49
  super(cache, context);
42
50
 
43
51
  this.config = config;
52
+ this.factory = factory;
44
53
 
45
54
  }
46
55
 
@@ -99,7 +108,9 @@ export class MedusaOrderSearchProvider extends OrderSearchProvider {
99
108
  inputSchema: OrderSearchQueryByTermSchema,
100
109
  outputSchema: OrderSearchResultSchema,
101
110
  })
102
- public async queryByTerm(payload: OrderSearchQueryByTerm): Promise<Result<OrderSearchResult>> {
111
+ public async queryByTerm(
112
+ payload: OrderSearchQueryByTerm,
113
+ ): Promise<Result<OrderSearchFactoryOutput<TFactory>>> {
103
114
  debug('queryByTerm', payload);
104
115
 
105
116
  const medusa = await this.medusaApi.getClient();
@@ -109,14 +120,14 @@ export class MedusaOrderSearchProvider extends OrderSearchProvider {
109
120
 
110
121
  const response = await medusa.store.order.list(this.queryByTermPayload(payload));
111
122
 
112
- const result = this.parsePaginatedResult(response, payload) as OrderSearchResult;
123
+ const result = this.parsePaginatedResult(response, payload);
113
124
  if (debug.enabled) {
114
125
  debug(
115
126
  `Search for term "${payload.search.term}" returned ${response.orders.length} orders (page ${payload.search.paginationOptions.pageNumber} of ${result.totalPages})`
116
127
  );
117
128
  }
118
129
 
119
- return success(result);
130
+ return success(this.factory.parseOrderSearchResult(this.context, result, payload));
120
131
  }
121
132
 
122
133
  protected composeAddressFromStoreAddress(storeAddress: StoreOrderAddress): Address {
@@ -17,9 +17,12 @@ import type {
17
17
  OrderInventoryStatus,
18
18
  PaymentMethodIdentifier,
19
19
  PaymentInstruction,
20
+ OrderFactory,
21
+ OrderFactoryOutput,
22
+ OrderFactoryWithOutput,
20
23
  } from '@reactionary/core';
21
24
  import {
22
- OrderProvider,
25
+ OrderCapability,
23
26
  OrderQueryByIdSchema,
24
27
  OrderSchema,
25
28
  Reactionary,
@@ -33,27 +36,35 @@ import type { MedusaConfiguration } from '../schema/configuration.schema.js';
33
36
  import { handleProviderError } from '../utils/medusa-helpers.js';
34
37
  import type { StoreOrder, StoreOrderLineItem, StorePaymentCollection } from '@medusajs/types';
35
38
  import { parseMedusaItemPrice, parseMedusaCostBreakdown } from '../utils/medusa-helpers.js'
39
+ import type { MedusaOrderFactory } from '../factories/order/order.factory.js';
36
40
  const debug = createDebug('reactionary:medusa:order');
37
41
 
38
- export class MedusaOrderProvider extends OrderProvider {
42
+ export class MedusaOrderCapability<
43
+ TFactory extends OrderFactory = MedusaOrderFactory,
44
+ > extends OrderCapability<OrderFactoryOutput<TFactory>> {
39
45
  protected config: MedusaConfiguration;
46
+ protected factory: OrderFactoryWithOutput<TFactory>;
40
47
 
41
48
  constructor(
42
49
  config: MedusaConfiguration,
43
50
  cache: Cache,
44
51
  context: RequestContext,
45
- public medusaApi: MedusaAPI
52
+ public medusaApi: MedusaAPI,
53
+ factory: OrderFactoryWithOutput<TFactory>,
46
54
  ) {
47
55
  super(cache, context);
48
56
 
49
57
  this.config = config;
58
+ this.factory = factory;
50
59
  }
51
60
 
52
61
  @Reactionary({
53
62
  inputSchema: OrderQueryByIdSchema,
54
63
  outputSchema: OrderSchema,
55
64
  })
56
- public async getById(payload: OrderQueryById): Promise<Result<Order, NotFoundError>> {
65
+ public async getById(
66
+ payload: OrderQueryById,
67
+ ): Promise<Result<OrderFactoryOutput<TFactory>, NotFoundError>> {
57
68
  debug('getById', payload);
58
69
 
59
70
  const medusa = await this.medusaApi.getClient();
@@ -175,7 +186,7 @@ export class MedusaOrderProvider extends OrderProvider {
175
186
 
176
187
 
177
188
 
178
- protected parseSingle(body: StoreOrder): Order {
189
+ protected parseSingle(body: StoreOrder): OrderFactoryOutput<TFactory> {
179
190
 
180
191
  const identifier = { key: body.id };
181
192
  const userId: IdentityIdentifier = {
@@ -213,7 +224,7 @@ export class MedusaOrderProvider extends OrderProvider {
213
224
  return this.parsePaymentInstruction(pc, body);
214
225
  }) || [];
215
226
 
216
- return {
227
+ const result = {
217
228
  identifier,
218
229
  userId,
219
230
  items,
@@ -222,5 +233,6 @@ export class MedusaOrderProvider extends OrderProvider {
222
233
  inventoryStatus,
223
234
  paymentInstructions
224
235
  } satisfies Order;
236
+ return this.factory.parseOrder(this.context, result);
225
237
  }
226
238
  }
@@ -1,6 +1,6 @@
1
1
  import type { StoreProductVariant } from '@medusajs/types';
2
2
  import {
3
- PriceProvider,
3
+ PriceCapability,
4
4
  PriceSchema,
5
5
  CustomerPriceQuerySchema,
6
6
  ListPriceQuerySchema,
@@ -11,6 +11,9 @@ import {
11
11
  type CustomerPriceQuery,
12
12
  type ListPriceQuery,
13
13
  type Price,
14
+ type PriceFactory,
15
+ type PriceFactoryOutput,
16
+ type PriceFactoryWithOutput,
14
17
  type RequestContext,
15
18
  type PriceIdentifier,
16
19
  type MonetaryAmount,
@@ -20,27 +23,35 @@ import createDebug from 'debug';
20
23
  import type * as z from 'zod';
21
24
  import type { MedusaAPI } from '../core/client.js';
22
25
  import type { MedusaConfiguration } from '../schema/configuration.schema.js';
26
+ import type { MedusaPriceFactory } from '../factories/price/price.factory.js';
23
27
 
24
28
  const debug = createDebug('reactionary:medusa:price');
25
29
 
26
- export class MedusaPriceProvider extends PriceProvider {
30
+ export class MedusaPriceCapability<
31
+ TFactory extends PriceFactory = MedusaPriceFactory,
32
+ > extends PriceCapability<PriceFactoryOutput<TFactory>> {
27
33
  protected config: MedusaConfiguration;
34
+ protected factory: PriceFactoryWithOutput<TFactory>;
28
35
 
29
36
  constructor(
30
37
  config: MedusaConfiguration,
31
38
  cache: Cache,
32
39
  context: RequestContext,
33
- public medusaApi: MedusaAPI
40
+ public medusaApi: MedusaAPI,
41
+ factory: PriceFactoryWithOutput<TFactory>,
34
42
  ) {
35
43
  super(cache, context);
36
44
  this.config = config;
45
+ this.factory = factory;
37
46
  }
38
47
 
39
48
  @Reactionary({
40
49
  inputSchema: ListPriceQuerySchema,
41
50
  outputSchema: PriceSchema,
42
51
  })
43
- public override async getListPrice(payload: ListPriceQuery): Promise<Result<Price>> {
52
+ public override async getListPrice(
53
+ payload: ListPriceQuery,
54
+ ): Promise<Result<PriceFactoryOutput<TFactory>>> {
44
55
  const result = await this.getBySKU(payload, 'list');
45
56
 
46
57
  return success(result);
@@ -50,14 +61,19 @@ export class MedusaPriceProvider extends PriceProvider {
50
61
  inputSchema: CustomerPriceQuerySchema,
51
62
  outputSchema: PriceSchema,
52
63
  })
53
- public override async getCustomerPrice(payload: CustomerPriceQuery): Promise<Result<Price>> {
64
+ public override async getCustomerPrice(
65
+ payload: CustomerPriceQuery,
66
+ ): Promise<Result<PriceFactoryOutput<TFactory>>> {
54
67
  const result = await this.getBySKU(payload, 'customer');
55
68
 
56
69
  return success(result);
57
70
  }
58
71
 
59
72
 
60
- protected async getBySKU(payload: ListPriceQuery | CustomerPriceQuery, mode: 'list' | 'customer' ): Promise<Price> {
73
+ protected async getBySKU(
74
+ payload: ListPriceQuery | CustomerPriceQuery,
75
+ mode: 'list' | 'customer',
76
+ ): Promise<PriceFactoryOutput<TFactory>> {
61
77
  const sku = payload.variant.sku;
62
78
 
63
79
  if (debug.enabled) {
@@ -98,7 +114,10 @@ export class MedusaPriceProvider extends PriceProvider {
98
114
  }
99
115
  }
100
116
 
101
- protected parseSingle(variant: StoreProductVariant, mode: 'list' | 'customer'): Price {
117
+ protected parseSingle(
118
+ variant: StoreProductVariant,
119
+ mode: 'list' | 'customer',
120
+ ): PriceFactoryOutput<TFactory> {
102
121
  const identifier = {
103
122
  variant: {
104
123
  sku: variant.sku || '',
@@ -139,7 +158,7 @@ export class MedusaPriceProvider extends PriceProvider {
139
158
  onSale: isOnSale,
140
159
  } satisfies Price;
141
160
 
142
- return result;
161
+ return this.factory.parsePrice(this.context, result);
143
162
  }
144
163
 
145
164