@financedistrict/medusa-plugin-agentic-commerce 0.1.0

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 (185) hide show
  1. package/.medusa/server/src/admin/index.js +22 -0
  2. package/.medusa/server/src/admin/index.mjs +23 -0
  3. package/.medusa/server/src/api/acp/checkout_sessions/[id]/cancel/route.d.ts +3 -0
  4. package/.medusa/server/src/api/acp/checkout_sessions/[id]/cancel/route.d.ts.map +1 -0
  5. package/.medusa/server/src/api/acp/checkout_sessions/[id]/cancel/route.js +39 -0
  6. package/.medusa/server/src/api/acp/checkout_sessions/[id]/cancel/route.js.map +1 -0
  7. package/.medusa/server/src/api/acp/checkout_sessions/[id]/complete/route.d.ts +3 -0
  8. package/.medusa/server/src/api/acp/checkout_sessions/[id]/complete/route.d.ts.map +1 -0
  9. package/.medusa/server/src/api/acp/checkout_sessions/[id]/complete/route.js +73 -0
  10. package/.medusa/server/src/api/acp/checkout_sessions/[id]/complete/route.js.map +1 -0
  11. package/.medusa/server/src/api/acp/checkout_sessions/[id]/route.d.ts +4 -0
  12. package/.medusa/server/src/api/acp/checkout_sessions/[id]/route.d.ts.map +1 -0
  13. package/.medusa/server/src/api/acp/checkout_sessions/[id]/route.js +107 -0
  14. package/.medusa/server/src/api/acp/checkout_sessions/[id]/route.js.map +1 -0
  15. package/.medusa/server/src/api/acp/checkout_sessions/route.d.ts +3 -0
  16. package/.medusa/server/src/api/acp/checkout_sessions/route.d.ts.map +1 -0
  17. package/.medusa/server/src/api/acp/checkout_sessions/route.js +70 -0
  18. package/.medusa/server/src/api/acp/checkout_sessions/route.js.map +1 -0
  19. package/.medusa/server/src/api/acp/orders/[id]/route.d.ts +3 -0
  20. package/.medusa/server/src/api/acp/orders/[id]/route.d.ts.map +1 -0
  21. package/.medusa/server/src/api/acp/orders/[id]/route.js +37 -0
  22. package/.medusa/server/src/api/acp/orders/[id]/route.js.map +1 -0
  23. package/.medusa/server/src/api/acp/product-feed/route.d.ts +3 -0
  24. package/.medusa/server/src/api/acp/product-feed/route.d.ts.map +1 -0
  25. package/.medusa/server/src/api/acp/product-feed/route.js +57 -0
  26. package/.medusa/server/src/api/acp/product-feed/route.js.map +1 -0
  27. package/.medusa/server/src/api/middleware/idempotency.d.ts +21 -0
  28. package/.medusa/server/src/api/middleware/idempotency.d.ts.map +1 -0
  29. package/.medusa/server/src/api/middleware/idempotency.js +184 -0
  30. package/.medusa/server/src/api/middleware/idempotency.js.map +1 -0
  31. package/.medusa/server/src/api/middlewares.d.ts +3 -0
  32. package/.medusa/server/src/api/middlewares.d.ts.map +1 -0
  33. package/.medusa/server/src/api/middlewares.js +309 -0
  34. package/.medusa/server/src/api/middlewares.js.map +1 -0
  35. package/.medusa/server/src/api/ucp/carts/[id]/cancel/route.d.ts +3 -0
  36. package/.medusa/server/src/api/ucp/carts/[id]/cancel/route.d.ts.map +1 -0
  37. package/.medusa/server/src/api/ucp/carts/[id]/cancel/route.js +39 -0
  38. package/.medusa/server/src/api/ucp/carts/[id]/cancel/route.js.map +1 -0
  39. package/.medusa/server/src/api/ucp/carts/[id]/route.d.ts +4 -0
  40. package/.medusa/server/src/api/ucp/carts/[id]/route.d.ts.map +1 -0
  41. package/.medusa/server/src/api/ucp/carts/[id]/route.js +96 -0
  42. package/.medusa/server/src/api/ucp/carts/[id]/route.js.map +1 -0
  43. package/.medusa/server/src/api/ucp/carts/route.d.ts +3 -0
  44. package/.medusa/server/src/api/ucp/carts/route.d.ts.map +1 -0
  45. package/.medusa/server/src/api/ucp/carts/route.js +52 -0
  46. package/.medusa/server/src/api/ucp/carts/route.js.map +1 -0
  47. package/.medusa/server/src/api/ucp/catalog/lookup/route.d.ts +3 -0
  48. package/.medusa/server/src/api/ucp/catalog/lookup/route.d.ts.map +1 -0
  49. package/.medusa/server/src/api/ucp/catalog/lookup/route.js +66 -0
  50. package/.medusa/server/src/api/ucp/catalog/lookup/route.js.map +1 -0
  51. package/.medusa/server/src/api/ucp/catalog/search/route.d.ts +3 -0
  52. package/.medusa/server/src/api/ucp/catalog/search/route.d.ts.map +1 -0
  53. package/.medusa/server/src/api/ucp/catalog/search/route.js +84 -0
  54. package/.medusa/server/src/api/ucp/catalog/search/route.js.map +1 -0
  55. package/.medusa/server/src/api/ucp/checkout-sessions/[id]/cancel/route.d.ts +3 -0
  56. package/.medusa/server/src/api/ucp/checkout-sessions/[id]/cancel/route.d.ts.map +1 -0
  57. package/.medusa/server/src/api/ucp/checkout-sessions/[id]/cancel/route.js +40 -0
  58. package/.medusa/server/src/api/ucp/checkout-sessions/[id]/cancel/route.js.map +1 -0
  59. package/.medusa/server/src/api/ucp/checkout-sessions/[id]/complete/route.d.ts +3 -0
  60. package/.medusa/server/src/api/ucp/checkout-sessions/[id]/complete/route.d.ts.map +1 -0
  61. package/.medusa/server/src/api/ucp/checkout-sessions/[id]/complete/route.js +77 -0
  62. package/.medusa/server/src/api/ucp/checkout-sessions/[id]/complete/route.js.map +1 -0
  63. package/.medusa/server/src/api/ucp/checkout-sessions/[id]/route.d.ts +4 -0
  64. package/.medusa/server/src/api/ucp/checkout-sessions/[id]/route.d.ts.map +1 -0
  65. package/.medusa/server/src/api/ucp/checkout-sessions/[id]/route.js +110 -0
  66. package/.medusa/server/src/api/ucp/checkout-sessions/[id]/route.js.map +1 -0
  67. package/.medusa/server/src/api/ucp/checkout-sessions/route.d.ts +3 -0
  68. package/.medusa/server/src/api/ucp/checkout-sessions/route.d.ts.map +1 -0
  69. package/.medusa/server/src/api/ucp/checkout-sessions/route.js +71 -0
  70. package/.medusa/server/src/api/ucp/checkout-sessions/route.js.map +1 -0
  71. package/.medusa/server/src/api/ucp/orders/[id]/route.d.ts +3 -0
  72. package/.medusa/server/src/api/ucp/orders/[id]/route.d.ts.map +1 -0
  73. package/.medusa/server/src/api/ucp/orders/[id]/route.js +38 -0
  74. package/.medusa/server/src/api/ucp/orders/[id]/route.js.map +1 -0
  75. package/.medusa/server/src/api/validation-schemas.d.ts +992 -0
  76. package/.medusa/server/src/api/validation-schemas.d.ts.map +1 -0
  77. package/.medusa/server/src/api/validation-schemas.js +200 -0
  78. package/.medusa/server/src/api/validation-schemas.js.map +1 -0
  79. package/.medusa/server/src/api/well-known/acp.json/route.d.ts +3 -0
  80. package/.medusa/server/src/api/well-known/acp.json/route.d.ts.map +1 -0
  81. package/.medusa/server/src/api/well-known/acp.json/route.js +44 -0
  82. package/.medusa/server/src/api/well-known/acp.json/route.js.map +1 -0
  83. package/.medusa/server/src/api/well-known/ucp/route.d.ts +3 -0
  84. package/.medusa/server/src/api/well-known/ucp/route.d.ts.map +1 -0
  85. package/.medusa/server/src/api/well-known/ucp/route.js +34 -0
  86. package/.medusa/server/src/api/well-known/ucp/route.js.map +1 -0
  87. package/.medusa/server/src/index.d.ts +51 -0
  88. package/.medusa/server/src/index.d.ts.map +1 -0
  89. package/.medusa/server/src/index.js +81 -0
  90. package/.medusa/server/src/index.js.map +1 -0
  91. package/.medusa/server/src/jobs/sync-product-feed.d.ts +16 -0
  92. package/.medusa/server/src/jobs/sync-product-feed.d.ts.map +1 -0
  93. package/.medusa/server/src/jobs/sync-product-feed.js +78 -0
  94. package/.medusa/server/src/jobs/sync-product-feed.js.map +1 -0
  95. package/.medusa/server/src/lib/address-translator.d.ts +40 -0
  96. package/.medusa/server/src/lib/address-translator.d.ts.map +1 -0
  97. package/.medusa/server/src/lib/address-translator.js +79 -0
  98. package/.medusa/server/src/lib/address-translator.js.map +1 -0
  99. package/.medusa/server/src/lib/cart-fields.d.ts +10 -0
  100. package/.medusa/server/src/lib/cart-fields.d.ts.map +1 -0
  101. package/.medusa/server/src/lib/cart-fields.js +42 -0
  102. package/.medusa/server/src/lib/cart-fields.js.map +1 -0
  103. package/.medusa/server/src/lib/error-formatters.d.ts +38 -0
  104. package/.medusa/server/src/lib/error-formatters.d.ts.map +1 -0
  105. package/.medusa/server/src/lib/error-formatters.js +42 -0
  106. package/.medusa/server/src/lib/error-formatters.js.map +1 -0
  107. package/.medusa/server/src/lib/formatters/acp.d.ts +108 -0
  108. package/.medusa/server/src/lib/formatters/acp.d.ts.map +1 -0
  109. package/.medusa/server/src/lib/formatters/acp.js +158 -0
  110. package/.medusa/server/src/lib/formatters/acp.js.map +1 -0
  111. package/.medusa/server/src/lib/formatters/types.d.ts +19 -0
  112. package/.medusa/server/src/lib/formatters/types.d.ts.map +1 -0
  113. package/.medusa/server/src/lib/formatters/types.js +15 -0
  114. package/.medusa/server/src/lib/formatters/types.js.map +1 -0
  115. package/.medusa/server/src/lib/formatters/ucp.d.ts +123 -0
  116. package/.medusa/server/src/lib/formatters/ucp.d.ts.map +1 -0
  117. package/.medusa/server/src/lib/formatters/ucp.js +226 -0
  118. package/.medusa/server/src/lib/formatters/ucp.js.map +1 -0
  119. package/.medusa/server/src/lib/order-fields.d.ts +6 -0
  120. package/.medusa/server/src/lib/order-fields.d.ts.map +1 -0
  121. package/.medusa/server/src/lib/order-fields.js +29 -0
  122. package/.medusa/server/src/lib/order-fields.js.map +1 -0
  123. package/.medusa/server/src/lib/payment-handler-registry.d.ts +58 -0
  124. package/.medusa/server/src/lib/payment-handler-registry.d.ts.map +1 -0
  125. package/.medusa/server/src/lib/payment-handler-registry.js +150 -0
  126. package/.medusa/server/src/lib/payment-handler-registry.js.map +1 -0
  127. package/.medusa/server/src/lib/public-url.d.ts +12 -0
  128. package/.medusa/server/src/lib/public-url.d.ts.map +1 -0
  129. package/.medusa/server/src/lib/public-url.js +14 -0
  130. package/.medusa/server/src/lib/public-url.js.map +1 -0
  131. package/.medusa/server/src/lib/status-maps.d.ts +7 -0
  132. package/.medusa/server/src/lib/status-maps.d.ts.map +1 -0
  133. package/.medusa/server/src/lib/status-maps.js +43 -0
  134. package/.medusa/server/src/lib/status-maps.js.map +1 -0
  135. package/.medusa/server/src/modules/agentic-commerce/index.d.ts +7 -0
  136. package/.medusa/server/src/modules/agentic-commerce/index.d.ts.map +1 -0
  137. package/.medusa/server/src/modules/agentic-commerce/index.js +13 -0
  138. package/.medusa/server/src/modules/agentic-commerce/index.js.map +1 -0
  139. package/.medusa/server/src/modules/agentic-commerce/service.d.ts +294 -0
  140. package/.medusa/server/src/modules/agentic-commerce/service.d.ts.map +1 -0
  141. package/.medusa/server/src/modules/agentic-commerce/service.js +206 -0
  142. package/.medusa/server/src/modules/agentic-commerce/service.js.map +1 -0
  143. package/.medusa/server/src/subscribers/order-placed-webhook.d.ts +16 -0
  144. package/.medusa/server/src/subscribers/order-placed-webhook.d.ts.map +1 -0
  145. package/.medusa/server/src/subscribers/order-placed-webhook.js +83 -0
  146. package/.medusa/server/src/subscribers/order-placed-webhook.js.map +1 -0
  147. package/.medusa/server/src/types/payment-handler-adapter.d.ts +92 -0
  148. package/.medusa/server/src/types/payment-handler-adapter.d.ts.map +1 -0
  149. package/.medusa/server/src/types/payment-handler-adapter.js +34 -0
  150. package/.medusa/server/src/types/payment-handler-adapter.js.map +1 -0
  151. package/.medusa/server/src/workflows/cancel-checkout-session.d.ts +9 -0
  152. package/.medusa/server/src/workflows/cancel-checkout-session.d.ts.map +1 -0
  153. package/.medusa/server/src/workflows/cancel-checkout-session.js +53 -0
  154. package/.medusa/server/src/workflows/cancel-checkout-session.js.map +1 -0
  155. package/.medusa/server/src/workflows/complete-checkout-session.d.ts +23 -0
  156. package/.medusa/server/src/workflows/complete-checkout-session.d.ts.map +1 -0
  157. package/.medusa/server/src/workflows/complete-checkout-session.js +44 -0
  158. package/.medusa/server/src/workflows/complete-checkout-session.js.map +1 -0
  159. package/.medusa/server/src/workflows/create-checkout-session.d.ts +20 -0
  160. package/.medusa/server/src/workflows/create-checkout-session.d.ts.map +1 -0
  161. package/.medusa/server/src/workflows/create-checkout-session.js +65 -0
  162. package/.medusa/server/src/workflows/create-checkout-session.js.map +1 -0
  163. package/.medusa/server/src/workflows/index.d.ts +5 -0
  164. package/.medusa/server/src/workflows/index.d.ts.map +1 -0
  165. package/.medusa/server/src/workflows/index.js +15 -0
  166. package/.medusa/server/src/workflows/index.js.map +1 -0
  167. package/.medusa/server/src/workflows/steps/ensure-shipping-method.d.ts +10 -0
  168. package/.medusa/server/src/workflows/steps/ensure-shipping-method.d.ts.map +1 -0
  169. package/.medusa/server/src/workflows/steps/ensure-shipping-method.js +50 -0
  170. package/.medusa/server/src/workflows/steps/ensure-shipping-method.js.map +1 -0
  171. package/.medusa/server/src/workflows/steps/setup-payment.d.ts +21 -0
  172. package/.medusa/server/src/workflows/steps/setup-payment.d.ts.map +1 -0
  173. package/.medusa/server/src/workflows/steps/setup-payment.js +88 -0
  174. package/.medusa/server/src/workflows/steps/setup-payment.js.map +1 -0
  175. package/.medusa/server/src/workflows/steps/validate-checkout-prerequisites.d.ts +9 -0
  176. package/.medusa/server/src/workflows/steps/validate-checkout-prerequisites.d.ts.map +1 -0
  177. package/.medusa/server/src/workflows/steps/validate-checkout-prerequisites.js +34 -0
  178. package/.medusa/server/src/workflows/steps/validate-checkout-prerequisites.js.map +1 -0
  179. package/.medusa/server/src/workflows/update-checkout-session.d.ts +22 -0
  180. package/.medusa/server/src/workflows/update-checkout-session.d.ts.map +1 -0
  181. package/.medusa/server/src/workflows/update-checkout-session.js +103 -0
  182. package/.medusa/server/src/workflows/update-checkout-session.js.map +1 -0
  183. package/LICENSE +21 -0
  184. package/README.md +356 -0
  185. package/package.json +59 -0
@@ -0,0 +1,123 @@
1
+ /**
2
+ * UCP Protocol Formatter
3
+ *
4
+ * Transforms Medusa internal objects into UCP-compliant response shapes.
5
+ * Spec: https://developers.fd.xyz/ucp
6
+ */
7
+ import type { FormatterContext } from "./types";
8
+ export declare function formatUcpCheckoutSession(ctx: FormatterContext, cart: any, baseUrl: string): {
9
+ ucp: Record<string, unknown>;
10
+ id: any;
11
+ status: string;
12
+ currency: any;
13
+ email: any;
14
+ line_items: {
15
+ id: any;
16
+ item: {
17
+ id: any;
18
+ title: any;
19
+ price: {
20
+ amount: number;
21
+ currency: string;
22
+ };
23
+ };
24
+ quantity: any;
25
+ totals: {
26
+ type: string;
27
+ amount: number;
28
+ }[];
29
+ }[];
30
+ totals: {
31
+ type: string;
32
+ amount: number;
33
+ }[];
34
+ fulfillment: {
35
+ address: import("../address-translator").UcpAddress;
36
+ options: any;
37
+ } | null;
38
+ messages: {
39
+ type: "info";
40
+ code: string;
41
+ content: string;
42
+ severity: string;
43
+ }[];
44
+ links: {
45
+ type: string;
46
+ url: string;
47
+ }[];
48
+ };
49
+ export declare function formatUcpCart(ctx: FormatterContext, cart: any, baseUrl: string): {
50
+ ucp: Record<string, unknown>;
51
+ id: any;
52
+ currency: any;
53
+ email: any;
54
+ line_items: {
55
+ id: any;
56
+ item: {
57
+ id: any;
58
+ title: any;
59
+ price: {
60
+ amount: number;
61
+ currency: string;
62
+ };
63
+ };
64
+ quantity: any;
65
+ totals: {
66
+ type: string;
67
+ amount: number;
68
+ }[];
69
+ }[];
70
+ totals: {
71
+ type: string;
72
+ amount: number;
73
+ }[];
74
+ shipping_address: import("../address-translator").UcpAddress | null;
75
+ links: {
76
+ self: string;
77
+ checkout: string;
78
+ };
79
+ };
80
+ export declare function formatUcpProduct(product: any): {
81
+ id: any;
82
+ title: any;
83
+ description: any;
84
+ handle: any;
85
+ categories: any;
86
+ price_range: {
87
+ min: {
88
+ amount: number;
89
+ currency: any;
90
+ };
91
+ max: {
92
+ amount: number;
93
+ currency: any;
94
+ };
95
+ } | null;
96
+ variants: any;
97
+ media: any;
98
+ };
99
+ export declare function formatUcpOrder(ctx: FormatterContext, order: any, baseUrl: string): {
100
+ ucp: Record<string, unknown>;
101
+ id: any;
102
+ display_id: any;
103
+ checkout_id: any;
104
+ permalink_url: string;
105
+ status: any;
106
+ currency: any;
107
+ email: any;
108
+ line_items: any;
109
+ fulfillment: {
110
+ address: import("../address-translator").UcpAddress;
111
+ } | null;
112
+ totals: {
113
+ type: string;
114
+ amount: number;
115
+ }[];
116
+ created_at: any;
117
+ updated_at: any;
118
+ links: {
119
+ type: string;
120
+ url: string;
121
+ }[];
122
+ };
123
+ //# sourceMappingURL=ucp.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ucp.d.ts","sourceRoot":"","sources":["../../../../../src/lib/formatters/ucp.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,SAAS,CAAA;AAmD/C,wBAAgB,wBAAwB,CAAC,GAAG,EAAE,gBAAgB,EAAE,IAAI,EAAE,GAAG,EAAE,OAAO,EAAE,MAAM;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAyCzF;AAMD,wBAAgB,aAAa,CAAC,GAAG,EAAE,gBAAgB,EAAE,IAAI,EAAE,GAAG,EAAE,OAAO,EAAE,MAAM;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAyB9E;AAMD,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,GAAG;;;;;;;;;;;;;;;;;;EAqD5C;AAMD,wBAAgB,cAAc,CAAC,GAAG,EAAE,gBAAgB,EAAE,KAAK,EAAE,GAAG,EAAE,OAAO,EAAE,MAAM;;;;;;;;;;;;;;;;;;;;;;;EAiDhF"}
@@ -0,0 +1,226 @@
1
+ "use strict";
2
+ /**
3
+ * UCP Protocol Formatter
4
+ *
5
+ * Transforms Medusa internal objects into UCP-compliant response shapes.
6
+ * Spec: https://developers.fd.xyz/ucp
7
+ */
8
+ Object.defineProperty(exports, "__esModule", { value: true });
9
+ exports.formatUcpCheckoutSession = formatUcpCheckoutSession;
10
+ exports.formatUcpCart = formatUcpCart;
11
+ exports.formatUcpProduct = formatUcpProduct;
12
+ exports.formatUcpOrder = formatUcpOrder;
13
+ const address_translator_1 = require("../address-translator");
14
+ const status_maps_1 = require("../status-maps");
15
+ const types_1 = require("./types");
16
+ // =====================================================
17
+ // UCP Envelope
18
+ // =====================================================
19
+ function ucpEnvelope(ctx, includePayment, cartMetadata) {
20
+ const envelope = {
21
+ version: ctx.ucpVersion,
22
+ status: "success",
23
+ capabilities: {
24
+ "dev.ucp.shopping.catalog.search": [{ version: ctx.ucpVersion }],
25
+ "dev.ucp.shopping.catalog.lookup": [{ version: ctx.ucpVersion }],
26
+ "dev.ucp.shopping.checkout": [{ version: ctx.ucpVersion }],
27
+ "dev.ucp.shopping.cart": [{ version: ctx.ucpVersion }],
28
+ "dev.ucp.shopping.order": [{ version: ctx.ucpVersion }],
29
+ },
30
+ };
31
+ if (includePayment) {
32
+ envelope.payment_handlers = ctx.paymentHandlers.getUcpCheckoutHandlers(cartMetadata);
33
+ }
34
+ return envelope;
35
+ }
36
+ // =====================================================
37
+ // Line Items
38
+ // =====================================================
39
+ function formatLineItems(items, currency) {
40
+ return items.map((item) => {
41
+ const unitAmount = (0, types_1.toMinor)(item.unit_price ?? item.raw_unit_price?.value ?? 0);
42
+ return {
43
+ id: item.id,
44
+ item: {
45
+ id: item.variant_id || item.id,
46
+ title: item.title || item.product_title || "",
47
+ price: { amount: unitAmount, currency },
48
+ },
49
+ quantity: item.quantity,
50
+ totals: [
51
+ { type: "line_total", amount: unitAmount * item.quantity },
52
+ ],
53
+ };
54
+ });
55
+ }
56
+ // =====================================================
57
+ // Checkout Session
58
+ // =====================================================
59
+ function formatUcpCheckoutSession(ctx, cart, baseUrl) {
60
+ const currency = cart.currency_code || "eur";
61
+ const status = (0, status_maps_1.resolveUcpStatus)(cart);
62
+ const totals = [
63
+ { type: "subtotal", amount: (0, types_1.toMinor)(cart.subtotal ?? cart.raw_subtotal?.value ?? 0) },
64
+ { type: "fulfillment", amount: (0, types_1.toMinor)(cart.shipping_total ?? cart.raw_shipping_total?.value ?? 0) },
65
+ { type: "tax", amount: (0, types_1.toMinor)(cart.tax_total ?? cart.raw_tax_total?.value ?? 0) },
66
+ { type: "discount", amount: (0, types_1.toMinor)(cart.discount_total ?? cart.raw_discount_total?.value ?? 0) },
67
+ { type: "total", amount: (0, types_1.toMinor)(cart.total ?? cart.raw_total?.value ?? 0) },
68
+ ];
69
+ const fulfillment = cart.shipping_address
70
+ ? {
71
+ address: (0, address_translator_1.medusaToUcpAddress)(cart.shipping_address),
72
+ options: (cart.shipping_methods || []).map((sm) => ({
73
+ id: sm.id,
74
+ type: "shipping",
75
+ title: sm.name || "Standard Shipping",
76
+ amount: (0, types_1.toMinor)(sm.amount ?? sm.raw_amount?.value ?? 0),
77
+ })),
78
+ }
79
+ : null;
80
+ return {
81
+ ucp: ucpEnvelope(ctx, true, cart.metadata),
82
+ id: cart.id,
83
+ status,
84
+ currency,
85
+ email: cart.email || null,
86
+ line_items: formatLineItems(cart.items || [], currency),
87
+ totals,
88
+ fulfillment,
89
+ messages: [
90
+ { type: "info", code: "checkout_created", content: `Checkout session for ${ctx.storeName}`, severity: "info" },
91
+ ],
92
+ links: [
93
+ { type: "terms_of_service", url: `${ctx.storefrontUrl}/terms` },
94
+ { type: "privacy_policy", url: `${ctx.storefrontUrl}/privacy` },
95
+ ],
96
+ };
97
+ }
98
+ // =====================================================
99
+ // Cart
100
+ // =====================================================
101
+ function formatUcpCart(ctx, cart, baseUrl) {
102
+ const currency = cart.currency_code || "eur";
103
+ const totals = [
104
+ { type: "subtotal", amount: (0, types_1.toMinor)(cart.subtotal ?? cart.raw_subtotal?.value ?? 0) },
105
+ { type: "fulfillment", amount: (0, types_1.toMinor)(cart.shipping_total ?? cart.raw_shipping_total?.value ?? 0) },
106
+ { type: "tax", amount: (0, types_1.toMinor)(cart.tax_total ?? cart.raw_tax_total?.value ?? 0) },
107
+ { type: "total", amount: (0, types_1.toMinor)(cart.total ?? cart.raw_total?.value ?? 0) },
108
+ ];
109
+ return {
110
+ ucp: ucpEnvelope(ctx, false),
111
+ id: cart.id,
112
+ currency,
113
+ email: cart.email || null,
114
+ line_items: formatLineItems(cart.items || [], currency),
115
+ totals,
116
+ shipping_address: cart.shipping_address
117
+ ? (0, address_translator_1.medusaToUcpAddress)(cart.shipping_address)
118
+ : null,
119
+ links: {
120
+ self: `${baseUrl}/${cart.id}`,
121
+ checkout: baseUrl.replace("/carts", "/checkout-sessions"),
122
+ },
123
+ };
124
+ }
125
+ // =====================================================
126
+ // Product
127
+ // =====================================================
128
+ function formatUcpProduct(product) {
129
+ const variants = (product.variants || []).map((v) => {
130
+ const price = v.prices?.[0] || v.calculated_price || null;
131
+ const priceAmount = price
132
+ ? Math.round((price.amount ?? price.calculated_amount ?? 0) * 100)
133
+ : null;
134
+ const priceCurrency = price?.currency_code || "eur";
135
+ return {
136
+ id: v.id,
137
+ title: v.title || "",
138
+ sku: v.sku || null,
139
+ price: priceAmount != null
140
+ ? { amount: priceAmount, currency: priceCurrency }
141
+ : null,
142
+ availability: {
143
+ available: v.inventory_quantity != null ? v.inventory_quantity > 0 : true,
144
+ status: v.inventory_quantity != null
145
+ ? v.inventory_quantity > 0 ? "in_stock" : "out_of_stock"
146
+ : "in_stock",
147
+ },
148
+ };
149
+ });
150
+ const variantPrices = variants
151
+ .map((v) => v.price?.amount)
152
+ .filter((p) => p != null);
153
+ const priceRange = variantPrices.length > 0
154
+ ? {
155
+ min: { amount: Math.min(...variantPrices), currency: variants[0]?.price?.currency || "eur" },
156
+ max: { amount: Math.max(...variantPrices), currency: variants[0]?.price?.currency || "eur" },
157
+ }
158
+ : null;
159
+ const media = (product.images || []).map((img) => ({
160
+ url: img.url,
161
+ type: "image",
162
+ }));
163
+ if (product.thumbnail) {
164
+ media.unshift({ url: product.thumbnail, type: "image" });
165
+ }
166
+ return {
167
+ id: product.id,
168
+ title: product.title || "",
169
+ description: product.description || "",
170
+ handle: product.handle || "",
171
+ categories: (product.categories || []).map((c) => c.name),
172
+ price_range: priceRange,
173
+ variants,
174
+ media,
175
+ };
176
+ }
177
+ // =====================================================
178
+ // Order
179
+ // =====================================================
180
+ function formatUcpOrder(ctx, order, baseUrl) {
181
+ const currency = order.currency_code || "eur";
182
+ const lineItems = (order.items || []).map((item) => {
183
+ const unitAmount = (0, types_1.toMinor)(item.unit_price ?? item.raw_unit_price?.value ?? 0);
184
+ return {
185
+ id: item.id,
186
+ item: {
187
+ id: item.variant_id || item.variant?.id || item.id,
188
+ title: item.title || item.product_title || "",
189
+ price: { amount: unitAmount, currency },
190
+ },
191
+ quantity: item.quantity,
192
+ totals: [
193
+ { type: "line_total", amount: unitAmount * item.quantity },
194
+ ],
195
+ };
196
+ });
197
+ const totals = [
198
+ { type: "subtotal", amount: (0, types_1.toMinor)(order.subtotal ?? order.raw_subtotal?.value ?? 0) },
199
+ { type: "fulfillment", amount: (0, types_1.toMinor)(order.shipping_total ?? order.raw_shipping_total?.value ?? 0) },
200
+ { type: "tax", amount: (0, types_1.toMinor)(order.tax_total ?? order.raw_tax_total?.value ?? 0) },
201
+ { type: "discount", amount: (0, types_1.toMinor)(order.discount_total ?? order.raw_discount_total?.value ?? 0) },
202
+ { type: "total", amount: (0, types_1.toMinor)(order.total ?? order.raw_total?.value ?? 0) },
203
+ ];
204
+ const fulfillment = order.shipping_address
205
+ ? { address: (0, address_translator_1.medusaToUcpAddress)(order.shipping_address) }
206
+ : null;
207
+ return {
208
+ ucp: ucpEnvelope(ctx, false),
209
+ id: order.id,
210
+ display_id: order.display_id || null,
211
+ checkout_id: order.cart_id || null,
212
+ permalink_url: `${ctx.storefrontUrl}/orders/${order.id}`,
213
+ status: order.status || "pending",
214
+ currency,
215
+ email: order.email || null,
216
+ line_items: lineItems,
217
+ fulfillment,
218
+ totals,
219
+ created_at: order.created_at,
220
+ updated_at: order.updated_at,
221
+ links: [
222
+ { type: "self", url: `${baseUrl}/${order.id}` },
223
+ ],
224
+ };
225
+ }
226
+ //# sourceMappingURL=ucp.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ucp.js","sourceRoot":"","sources":["../../../../../src/lib/formatters/ucp.ts"],"names":[],"mappings":";AAAA;;;;;GAKG;;AAuDH,4DAyCC;AAMD,sCAyBC;AAMD,4CAqDC;AAMD,wCAiDC;AA/OD,8DAA0D;AAC1D,gDAAiD;AAEjD,mCAAiC;AAEjC,wDAAwD;AACxD,eAAe;AACf,wDAAwD;AAExD,SAAS,WAAW,CAAC,GAAqB,EAAE,cAAuB,EAAE,YAAsC;IACzG,MAAM,QAAQ,GAA4B;QACxC,OAAO,EAAE,GAAG,CAAC,UAAU;QACvB,MAAM,EAAE,SAAS;QACjB,YAAY,EAAE;YACZ,iCAAiC,EAAE,CAAC,EAAE,OAAO,EAAE,GAAG,CAAC,UAAU,EAAE,CAAC;YAChE,iCAAiC,EAAE,CAAC,EAAE,OAAO,EAAE,GAAG,CAAC,UAAU,EAAE,CAAC;YAChE,2BAA2B,EAAE,CAAC,EAAE,OAAO,EAAE,GAAG,CAAC,UAAU,EAAE,CAAC;YAC1D,uBAAuB,EAAE,CAAC,EAAE,OAAO,EAAE,GAAG,CAAC,UAAU,EAAE,CAAC;YACtD,wBAAwB,EAAE,CAAC,EAAE,OAAO,EAAE,GAAG,CAAC,UAAU,EAAE,CAAC;SACxD;KACF,CAAA;IACD,IAAI,cAAc,EAAE,CAAC;QACnB,QAAQ,CAAC,gBAAgB,GAAG,GAAG,CAAC,eAAe,CAAC,sBAAsB,CAAC,YAAY,CAAC,CAAA;IACtF,CAAC;IACD,OAAO,QAAQ,CAAA;AACjB,CAAC;AAED,wDAAwD;AACxD,aAAa;AACb,wDAAwD;AAExD,SAAS,eAAe,CAAC,KAAY,EAAE,QAAgB;IACrD,OAAO,KAAK,CAAC,GAAG,CAAC,CAAC,IAAS,EAAE,EAAE;QAC7B,MAAM,UAAU,GAAG,IAAA,eAAO,EAAC,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,cAAc,EAAE,KAAK,IAAI,CAAC,CAAC,CAAA;QAC9E,OAAO;YACL,EAAE,EAAE,IAAI,CAAC,EAAE;YACX,IAAI,EAAE;gBACJ,EAAE,EAAE,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,EAAE;gBAC9B,KAAK,EAAE,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,aAAa,IAAI,EAAE;gBAC7C,KAAK,EAAE,EAAE,MAAM,EAAE,UAAU,EAAE,QAAQ,EAAE;aACxC;YACD,QAAQ,EAAE,IAAI,CAAC,QAAQ;YACvB,MAAM,EAAE;gBACN,EAAE,IAAI,EAAE,YAAY,EAAE,MAAM,EAAE,UAAU,GAAG,IAAI,CAAC,QAAQ,EAAE;aAC3D;SACF,CAAA;IACH,CAAC,CAAC,CAAA;AACJ,CAAC;AAED,wDAAwD;AACxD,mBAAmB;AACnB,wDAAwD;AAExD,SAAgB,wBAAwB,CAAC,GAAqB,EAAE,IAAS,EAAE,OAAe;IACxF,MAAM,QAAQ,GAAG,IAAI,CAAC,aAAa,IAAI,KAAK,CAAA;IAC5C,MAAM,MAAM,GAAG,IAAA,8BAAgB,EAAC,IAAI,CAAC,CAAA;IAErC,MAAM,MAAM,GAAG;QACb,EAAE,IAAI,EAAE,UAAU,EAAE,MAAM,EAAE,IAAA,eAAO,EAAC,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,YAAY,EAAE,KAAK,IAAI,CAAC,CAAC,EAAE;QACrF,EAAE,IAAI,EAAE,aAAa,EAAE,MAAM,EAAE,IAAA,eAAO,EAAC,IAAI,CAAC,cAAc,IAAI,IAAI,CAAC,kBAAkB,EAAE,KAAK,IAAI,CAAC,CAAC,EAAE;QACpG,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,IAAA,eAAO,EAAC,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,aAAa,EAAE,KAAK,IAAI,CAAC,CAAC,EAAE;QAClF,EAAE,IAAI,EAAE,UAAU,EAAE,MAAM,EAAE,IAAA,eAAO,EAAC,IAAI,CAAC,cAAc,IAAI,IAAI,CAAC,kBAAkB,EAAE,KAAK,IAAI,CAAC,CAAC,EAAE;QACjG,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,EAAE,IAAA,eAAO,EAAC,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,SAAS,EAAE,KAAK,IAAI,CAAC,CAAC,EAAE;KAC7E,CAAA;IAED,MAAM,WAAW,GAAG,IAAI,CAAC,gBAAgB;QACvC,CAAC,CAAC;YACE,OAAO,EAAE,IAAA,uCAAkB,EAAC,IAAI,CAAC,gBAAgB,CAAC;YAClD,OAAO,EAAE,CAAC,IAAI,CAAC,gBAAgB,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,EAAO,EAAE,EAAE,CAAC,CAAC;gBACvD,EAAE,EAAE,EAAE,CAAC,EAAE;gBACT,IAAI,EAAE,UAAU;gBAChB,KAAK,EAAE,EAAE,CAAC,IAAI,IAAI,mBAAmB;gBACrC,MAAM,EAAE,IAAA,eAAO,EAAC,EAAE,CAAC,MAAM,IAAI,EAAE,CAAC,UAAU,EAAE,KAAK,IAAI,CAAC,CAAC;aACxD,CAAC,CAAC;SACJ;QACH,CAAC,CAAC,IAAI,CAAA;IAER,OAAO;QACL,GAAG,EAAE,WAAW,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,QAAQ,CAAC;QAC1C,EAAE,EAAE,IAAI,CAAC,EAAE;QACX,MAAM;QACN,QAAQ;QACR,KAAK,EAAE,IAAI,CAAC,KAAK,IAAI,IAAI;QACzB,UAAU,EAAE,eAAe,CAAC,IAAI,CAAC,KAAK,IAAI,EAAE,EAAE,QAAQ,CAAC;QACvD,MAAM;QACN,WAAW;QACX,QAAQ,EAAE;YACR,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,kBAAkB,EAAE,OAAO,EAAE,wBAAwB,GAAG,CAAC,SAAS,EAAE,EAAE,QAAQ,EAAE,MAAM,EAAE;SACxH;QACD,KAAK,EAAE;YACL,EAAE,IAAI,EAAE,kBAAkB,EAAE,GAAG,EAAE,GAAG,GAAG,CAAC,aAAa,QAAQ,EAAE;YAC/D,EAAE,IAAI,EAAE,gBAAgB,EAAE,GAAG,EAAE,GAAG,GAAG,CAAC,aAAa,UAAU,EAAE;SAChE;KACF,CAAA;AACH,CAAC;AAED,wDAAwD;AACxD,OAAO;AACP,wDAAwD;AAExD,SAAgB,aAAa,CAAC,GAAqB,EAAE,IAAS,EAAE,OAAe;IAC7E,MAAM,QAAQ,GAAG,IAAI,CAAC,aAAa,IAAI,KAAK,CAAA;IAE5C,MAAM,MAAM,GAAG;QACb,EAAE,IAAI,EAAE,UAAU,EAAE,MAAM,EAAE,IAAA,eAAO,EAAC,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,YAAY,EAAE,KAAK,IAAI,CAAC,CAAC,EAAE;QACrF,EAAE,IAAI,EAAE,aAAa,EAAE,MAAM,EAAE,IAAA,eAAO,EAAC,IAAI,CAAC,cAAc,IAAI,IAAI,CAAC,kBAAkB,EAAE,KAAK,IAAI,CAAC,CAAC,EAAE;QACpG,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,IAAA,eAAO,EAAC,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,aAAa,EAAE,KAAK,IAAI,CAAC,CAAC,EAAE;QAClF,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,EAAE,IAAA,eAAO,EAAC,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,SAAS,EAAE,KAAK,IAAI,CAAC,CAAC,EAAE;KAC7E,CAAA;IAED,OAAO;QACL,GAAG,EAAE,WAAW,CAAC,GAAG,EAAE,KAAK,CAAC;QAC5B,EAAE,EAAE,IAAI,CAAC,EAAE;QACX,QAAQ;QACR,KAAK,EAAE,IAAI,CAAC,KAAK,IAAI,IAAI;QACzB,UAAU,EAAE,eAAe,CAAC,IAAI,CAAC,KAAK,IAAI,EAAE,EAAE,QAAQ,CAAC;QACvD,MAAM;QACN,gBAAgB,EAAE,IAAI,CAAC,gBAAgB;YACrC,CAAC,CAAC,IAAA,uCAAkB,EAAC,IAAI,CAAC,gBAAgB,CAAC;YAC3C,CAAC,CAAC,IAAI;QACR,KAAK,EAAE;YACL,IAAI,EAAE,GAAG,OAAO,IAAI,IAAI,CAAC,EAAE,EAAE;YAC7B,QAAQ,EAAE,OAAO,CAAC,OAAO,CAAC,QAAQ,EAAE,oBAAoB,CAAC;SAC1D;KACF,CAAA;AACH,CAAC;AAED,wDAAwD;AACxD,UAAU;AACV,wDAAwD;AAExD,SAAgB,gBAAgB,CAAC,OAAY;IAC3C,MAAM,QAAQ,GAAG,CAAC,OAAO,CAAC,QAAQ,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAM,EAAE,EAAE;QACvD,MAAM,KAAK,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,gBAAgB,IAAI,IAAI,CAAA;QACzD,MAAM,WAAW,GAAG,KAAK;YACvB,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,MAAM,IAAI,KAAK,CAAC,iBAAiB,IAAI,CAAC,CAAC,GAAG,GAAG,CAAC;YAClE,CAAC,CAAC,IAAI,CAAA;QACR,MAAM,aAAa,GAAG,KAAK,EAAE,aAAa,IAAI,KAAK,CAAA;QAEnD,OAAO;YACL,EAAE,EAAE,CAAC,CAAC,EAAE;YACR,KAAK,EAAE,CAAC,CAAC,KAAK,IAAI,EAAE;YACpB,GAAG,EAAE,CAAC,CAAC,GAAG,IAAI,IAAI;YAClB,KAAK,EAAE,WAAW,IAAI,IAAI;gBACxB,CAAC,CAAC,EAAE,MAAM,EAAE,WAAW,EAAE,QAAQ,EAAE,aAAa,EAAE;gBAClD,CAAC,CAAC,IAAI;YACR,YAAY,EAAE;gBACZ,SAAS,EAAE,CAAC,CAAC,kBAAkB,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,kBAAkB,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI;gBACzE,MAAM,EAAE,CAAC,CAAC,kBAAkB,IAAI,IAAI;oBAClC,CAAC,CAAC,CAAC,CAAC,kBAAkB,GAAG,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,cAAc;oBACxD,CAAC,CAAC,UAAU;aACf;SACF,CAAA;IACH,CAAC,CAAC,CAAA;IAEF,MAAM,aAAa,GAAG,QAAQ;SAC3B,GAAG,CAAC,CAAC,CAAM,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,EAAE,MAAM,CAAC;SAChC,MAAM,CAAC,CAAC,CAAM,EAAE,EAAE,CAAC,CAAC,IAAI,IAAI,CAAC,CAAA;IAChC,MAAM,UAAU,GAAG,aAAa,CAAC,MAAM,GAAG,CAAC;QACzC,CAAC,CAAC;YACE,GAAG,EAAE,EAAE,MAAM,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,aAAa,CAAC,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,QAAQ,IAAI,KAAK,EAAE;YAC5F,GAAG,EAAE,EAAE,MAAM,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,aAAa,CAAC,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,QAAQ,IAAI,KAAK,EAAE;SAC7F;QACH,CAAC,CAAC,IAAI,CAAA;IAER,MAAM,KAAK,GAAG,CAAC,OAAO,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,GAAQ,EAAE,EAAE,CAAC,CAAC;QACtD,GAAG,EAAE,GAAG,CAAC,GAAG;QACZ,IAAI,EAAE,OAAO;KACd,CAAC,CAAC,CAAA;IAEH,IAAI,OAAO,CAAC,SAAS,EAAE,CAAC;QACtB,KAAK,CAAC,OAAO,CAAC,EAAE,GAAG,EAAE,OAAO,CAAC,SAAS,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,CAAA;IAC1D,CAAC;IAED,OAAO;QACL,EAAE,EAAE,OAAO,CAAC,EAAE;QACd,KAAK,EAAE,OAAO,CAAC,KAAK,IAAI,EAAE;QAC1B,WAAW,EAAE,OAAO,CAAC,WAAW,IAAI,EAAE;QACtC,MAAM,EAAE,OAAO,CAAC,MAAM,IAAI,EAAE;QAC5B,UAAU,EAAE,CAAC,OAAO,CAAC,UAAU,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAM,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;QAC9D,WAAW,EAAE,UAAU;QACvB,QAAQ;QACR,KAAK;KACN,CAAA;AACH,CAAC;AAED,wDAAwD;AACxD,QAAQ;AACR,wDAAwD;AAExD,SAAgB,cAAc,CAAC,GAAqB,EAAE,KAAU,EAAE,OAAe;IAC/E,MAAM,QAAQ,GAAG,KAAK,CAAC,aAAa,IAAI,KAAK,CAAA;IAE7C,MAAM,SAAS,GAAG,CAAC,KAAK,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,IAAS,EAAE,EAAE;QACtD,MAAM,UAAU,GAAG,IAAA,eAAO,EAAC,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,cAAc,EAAE,KAAK,IAAI,CAAC,CAAC,CAAA;QAC9E,OAAO;YACL,EAAE,EAAE,IAAI,CAAC,EAAE;YACX,IAAI,EAAE;gBACJ,EAAE,EAAE,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,OAAO,EAAE,EAAE,IAAI,IAAI,CAAC,EAAE;gBAClD,KAAK,EAAE,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,aAAa,IAAI,EAAE;gBAC7C,KAAK,EAAE,EAAE,MAAM,EAAE,UAAU,EAAE,QAAQ,EAAE;aACxC;YACD,QAAQ,EAAE,IAAI,CAAC,QAAQ;YACvB,MAAM,EAAE;gBACN,EAAE,IAAI,EAAE,YAAY,EAAE,MAAM,EAAE,UAAU,GAAG,IAAI,CAAC,QAAQ,EAAE;aAC3D;SACF,CAAA;IACH,CAAC,CAAC,CAAA;IAEF,MAAM,MAAM,GAAG;QACb,EAAE,IAAI,EAAE,UAAU,EAAE,MAAM,EAAE,IAAA,eAAO,EAAC,KAAK,CAAC,QAAQ,IAAI,KAAK,CAAC,YAAY,EAAE,KAAK,IAAI,CAAC,CAAC,EAAE;QACvF,EAAE,IAAI,EAAE,aAAa,EAAE,MAAM,EAAE,IAAA,eAAO,EAAC,KAAK,CAAC,cAAc,IAAI,KAAK,CAAC,kBAAkB,EAAE,KAAK,IAAI,CAAC,CAAC,EAAE;QACtG,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,IAAA,eAAO,EAAC,KAAK,CAAC,SAAS,IAAI,KAAK,CAAC,aAAa,EAAE,KAAK,IAAI,CAAC,CAAC,EAAE;QACpF,EAAE,IAAI,EAAE,UAAU,EAAE,MAAM,EAAE,IAAA,eAAO,EAAC,KAAK,CAAC,cAAc,IAAI,KAAK,CAAC,kBAAkB,EAAE,KAAK,IAAI,CAAC,CAAC,EAAE;QACnG,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,EAAE,IAAA,eAAO,EAAC,KAAK,CAAC,KAAK,IAAI,KAAK,CAAC,SAAS,EAAE,KAAK,IAAI,CAAC,CAAC,EAAE;KAC/E,CAAA;IAED,MAAM,WAAW,GAAG,KAAK,CAAC,gBAAgB;QACxC,CAAC,CAAC,EAAE,OAAO,EAAE,IAAA,uCAAkB,EAAC,KAAK,CAAC,gBAAgB,CAAC,EAAE;QACzD,CAAC,CAAC,IAAI,CAAA;IAER,OAAO;QACL,GAAG,EAAE,WAAW,CAAC,GAAG,EAAE,KAAK,CAAC;QAC5B,EAAE,EAAE,KAAK,CAAC,EAAE;QACZ,UAAU,EAAE,KAAK,CAAC,UAAU,IAAI,IAAI;QACpC,WAAW,EAAE,KAAK,CAAC,OAAO,IAAI,IAAI;QAClC,aAAa,EAAE,GAAG,GAAG,CAAC,aAAa,WAAW,KAAK,CAAC,EAAE,EAAE;QACxD,MAAM,EAAE,KAAK,CAAC,MAAM,IAAI,SAAS;QACjC,QAAQ;QACR,KAAK,EAAE,KAAK,CAAC,KAAK,IAAI,IAAI;QAC1B,UAAU,EAAE,SAAS;QACrB,WAAW;QACX,MAAM;QACN,UAAU,EAAE,KAAK,CAAC,UAAU;QAC5B,UAAU,EAAE,KAAK,CAAC,UAAU;QAC5B,KAAK,EAAE;YACL,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,GAAG,OAAO,IAAI,KAAK,CAAC,EAAE,EAAE,EAAE;SAChD;KACF,CAAA;AACH,CAAC"}
@@ -0,0 +1,6 @@
1
+ /**
2
+ * Shared order field constants for query.graph calls.
3
+ * Used by order retrieval endpoints for both ACP and UCP.
4
+ */
5
+ export declare const ORDER_FIELDS: string[];
6
+ //# sourceMappingURL=order-fields.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"order-fields.d.ts","sourceRoot":"","sources":["../../../../src/lib/order-fields.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,eAAO,MAAM,YAAY,UAoBxB,CAAA"}
@@ -0,0 +1,29 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ORDER_FIELDS = void 0;
4
+ /**
5
+ * Shared order field constants for query.graph calls.
6
+ * Used by order retrieval endpoints for both ACP and UCP.
7
+ */
8
+ exports.ORDER_FIELDS = [
9
+ "id",
10
+ "display_id",
11
+ "status",
12
+ "email",
13
+ "currency_code",
14
+ "created_at",
15
+ "updated_at",
16
+ "metadata",
17
+ "items.*",
18
+ "items.variant.*",
19
+ "items.variant.product.*",
20
+ "shipping_address.*",
21
+ "billing_address.*",
22
+ "shipping_methods.*",
23
+ "total",
24
+ "subtotal",
25
+ "tax_total",
26
+ "shipping_total",
27
+ "discount_total",
28
+ ];
29
+ //# sourceMappingURL=order-fields.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"order-fields.js","sourceRoot":"","sources":["../../../../src/lib/order-fields.ts"],"names":[],"mappings":";;;AAAA;;;GAGG;AACU,QAAA,YAAY,GAAG;IAC1B,IAAI;IACJ,YAAY;IACZ,QAAQ;IACR,OAAO;IACP,eAAe;IACf,YAAY;IACZ,YAAY;IACZ,UAAU;IACV,SAAS;IACT,iBAAiB;IACjB,yBAAyB;IACzB,oBAAoB;IACpB,mBAAmB;IACnB,oBAAoB;IACpB,OAAO;IACP,UAAU;IACV,WAAW;IACX,gBAAgB;IAChB,gBAAgB;CACjB,CAAA"}
@@ -0,0 +1,58 @@
1
+ /**
2
+ * Payment Handler Registry
3
+ *
4
+ * Manages registered payment handler adapters and delegates calls to all of them.
5
+ * This replaces the previous PaymentHandlerService which hardcoded Prism logic.
6
+ *
7
+ * When multiple adapters are registered:
8
+ * - Discovery: merges all handler definitions (UCP: merge objects, ACP: concatenate arrays)
9
+ * - Checkout prepare: calls all adapters in parallel
10
+ * - Response formatting: merges all handler blocks
11
+ *
12
+ * When zero adapters are registered (degraded mode):
13
+ * - All methods return empty results
14
+ * - The store still works, just without payment handler info in responses
15
+ */
16
+ import type { PaymentHandlerAdapter, CheckoutPrepareInput } from "../types/payment-handler-adapter";
17
+ export declare class PaymentHandlerRegistry {
18
+ private adapters;
19
+ /**
20
+ * Register a payment handler adapter.
21
+ * Called by AgenticCommerceService during initialization.
22
+ */
23
+ registerAdapter(adapter: PaymentHandlerAdapter): void;
24
+ /**
25
+ * Get all registered adapters.
26
+ */
27
+ getAdapters(): readonly PaymentHandlerAdapter[];
28
+ /**
29
+ * Get the number of registered adapters.
30
+ */
31
+ getAdapterCount(): number;
32
+ /**
33
+ * Get combined UCP payment handler definitions from all adapters.
34
+ * Returns merged namespace-keyed object.
35
+ */
36
+ getUcpDiscoveryHandlers(): Promise<Record<string, unknown[]>>;
37
+ /**
38
+ * Get combined ACP payment handler definitions from all adapters.
39
+ * Returns concatenated flat array.
40
+ */
41
+ getAcpDiscoveryHandlers(): Promise<unknown[]>;
42
+ /**
43
+ * Prepare checkout payment requirements via all registered adapters.
44
+ * Calls each adapter in parallel. Returns results keyed by adapter ID.
45
+ *
46
+ * Each adapter stores its own data on cart metadata under its own key.
47
+ */
48
+ prepareCheckoutPayment(input: CheckoutPrepareInput): Promise<Record<string, unknown | null>>;
49
+ /**
50
+ * Get combined UCP payment_handlers for a checkout session response.
51
+ */
52
+ getUcpCheckoutHandlers(cartMetadata?: Record<string, unknown>): Record<string, unknown[]>;
53
+ /**
54
+ * Get combined ACP payment handlers for a checkout session response.
55
+ */
56
+ getAcpCheckoutHandlers(cartMetadata?: Record<string, unknown>): unknown[];
57
+ }
58
+ //# sourceMappingURL=payment-handler-registry.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"payment-handler-registry.d.ts","sourceRoot":"","sources":["../../../../src/lib/payment-handler-registry.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,KAAK,EAAE,qBAAqB,EAAE,oBAAoB,EAAE,MAAM,kCAAkC,CAAA;AAEnG,qBAAa,sBAAsB;IACjC,OAAO,CAAC,QAAQ,CAA8B;IAE9C;;;OAGG;IACH,eAAe,CAAC,OAAO,EAAE,qBAAqB,GAAG,IAAI;IAWrD;;OAEG;IACH,WAAW,IAAI,SAAS,qBAAqB,EAAE;IAI/C;;OAEG;IACH,eAAe,IAAI,MAAM;IAQzB;;;OAGG;IACG,uBAAuB,IAAI,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,EAAE,CAAC,CAAC;IAsBnE;;;OAGG;IACG,uBAAuB,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;IAqBnD;;;;;OAKG;IACG,sBAAsB,CAAC,KAAK,EAAE,oBAAoB,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,GAAG,IAAI,CAAC,CAAC;IA0BlG;;OAEG;IACH,sBAAsB,CAAC,YAAY,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,EAAE,CAAC;IAiBzF;;OAEG;IACH,sBAAsB,CAAC,YAAY,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,EAAE;CAU1E"}
@@ -0,0 +1,150 @@
1
+ "use strict";
2
+ /**
3
+ * Payment Handler Registry
4
+ *
5
+ * Manages registered payment handler adapters and delegates calls to all of them.
6
+ * This replaces the previous PaymentHandlerService which hardcoded Prism logic.
7
+ *
8
+ * When multiple adapters are registered:
9
+ * - Discovery: merges all handler definitions (UCP: merge objects, ACP: concatenate arrays)
10
+ * - Checkout prepare: calls all adapters in parallel
11
+ * - Response formatting: merges all handler blocks
12
+ *
13
+ * When zero adapters are registered (degraded mode):
14
+ * - All methods return empty results
15
+ * - The store still works, just without payment handler info in responses
16
+ */
17
+ Object.defineProperty(exports, "__esModule", { value: true });
18
+ exports.PaymentHandlerRegistry = void 0;
19
+ class PaymentHandlerRegistry {
20
+ constructor() {
21
+ this.adapters = [];
22
+ }
23
+ /**
24
+ * Register a payment handler adapter.
25
+ * Called by AgenticCommerceService during initialization.
26
+ */
27
+ registerAdapter(adapter) {
28
+ // Prevent duplicate registration
29
+ if (this.adapters.some((a) => a.id === adapter.id)) {
30
+ console.warn(`[payment-handler-registry] Adapter "${adapter.id}" already registered, skipping duplicate`);
31
+ return;
32
+ }
33
+ this.adapters.push(adapter);
34
+ console.log(`[payment-handler-registry] Registered adapter: ${adapter.name} (${adapter.id})`);
35
+ }
36
+ /**
37
+ * Get all registered adapters.
38
+ */
39
+ getAdapters() {
40
+ return this.adapters;
41
+ }
42
+ /**
43
+ * Get the number of registered adapters.
44
+ */
45
+ getAdapterCount() {
46
+ return this.adapters.length;
47
+ }
48
+ // -------------------------------------------------
49
+ // Discovery — for .well-known/ucp and .well-known/acp.json
50
+ // -------------------------------------------------
51
+ /**
52
+ * Get combined UCP payment handler definitions from all adapters.
53
+ * Returns merged namespace-keyed object.
54
+ */
55
+ async getUcpDiscoveryHandlers() {
56
+ if (this.adapters.length === 0)
57
+ return {};
58
+ const results = await Promise.allSettled(this.adapters.map((a) => a.getUcpDiscoveryHandlers()));
59
+ const merged = {};
60
+ for (const result of results) {
61
+ if (result.status === "fulfilled") {
62
+ for (const [namespace, entries] of Object.entries(result.value)) {
63
+ if (!merged[namespace]) {
64
+ merged[namespace] = [];
65
+ }
66
+ merged[namespace].push(...entries);
67
+ }
68
+ }
69
+ }
70
+ return merged;
71
+ }
72
+ /**
73
+ * Get combined ACP payment handler definitions from all adapters.
74
+ * Returns concatenated flat array.
75
+ */
76
+ async getAcpDiscoveryHandlers() {
77
+ if (this.adapters.length === 0)
78
+ return [];
79
+ const results = await Promise.allSettled(this.adapters.map((a) => a.getAcpDiscoveryHandlers()));
80
+ const merged = [];
81
+ for (const result of results) {
82
+ if (result.status === "fulfilled") {
83
+ merged.push(...result.value);
84
+ }
85
+ }
86
+ return merged;
87
+ }
88
+ // -------------------------------------------------
89
+ // Checkout preparation — delegates to all adapters
90
+ // -------------------------------------------------
91
+ /**
92
+ * Prepare checkout payment requirements via all registered adapters.
93
+ * Calls each adapter in parallel. Returns results keyed by adapter ID.
94
+ *
95
+ * Each adapter stores its own data on cart metadata under its own key.
96
+ */
97
+ async prepareCheckoutPayment(input) {
98
+ if (this.adapters.length === 0)
99
+ return {};
100
+ const results = await Promise.allSettled(this.adapters.map(async (a) => ({
101
+ id: a.id,
102
+ result: await a.prepareCheckoutPayment(input),
103
+ })));
104
+ const output = {};
105
+ for (const result of results) {
106
+ if (result.status === "fulfilled") {
107
+ output[result.value.id] = result.value.result;
108
+ }
109
+ else {
110
+ console.error(`[payment-handler-registry] Adapter failed during checkout-prepare:`, result.reason);
111
+ }
112
+ }
113
+ return output;
114
+ }
115
+ // -------------------------------------------------
116
+ // Response formatting — merge from all adapters
117
+ // -------------------------------------------------
118
+ /**
119
+ * Get combined UCP payment_handlers for a checkout session response.
120
+ */
121
+ getUcpCheckoutHandlers(cartMetadata) {
122
+ if (this.adapters.length === 0)
123
+ return {};
124
+ const merged = {};
125
+ for (const adapter of this.adapters) {
126
+ const handlers = adapter.getUcpCheckoutHandlers(cartMetadata);
127
+ for (const [namespace, entries] of Object.entries(handlers)) {
128
+ if (!merged[namespace]) {
129
+ merged[namespace] = [];
130
+ }
131
+ merged[namespace].push(...entries);
132
+ }
133
+ }
134
+ return merged;
135
+ }
136
+ /**
137
+ * Get combined ACP payment handlers for a checkout session response.
138
+ */
139
+ getAcpCheckoutHandlers(cartMetadata) {
140
+ if (this.adapters.length === 0)
141
+ return [];
142
+ const merged = [];
143
+ for (const adapter of this.adapters) {
144
+ merged.push(...adapter.getAcpCheckoutHandlers(cartMetadata));
145
+ }
146
+ return merged;
147
+ }
148
+ }
149
+ exports.PaymentHandlerRegistry = PaymentHandlerRegistry;
150
+ //# sourceMappingURL=payment-handler-registry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"payment-handler-registry.js","sourceRoot":"","sources":["../../../../src/lib/payment-handler-registry.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,12 @@
1
+ /**
2
+ * Resolve the public-facing base URL for API responses.
3
+ *
4
+ * On ECS, req.protocol + req.get("host") returns the internal service
5
+ * discovery address (e.g. fd-merch-medusa-test.fd-services.local:9000).
6
+ * We need the public storefront URL instead.
7
+ */
8
+ export declare function getPublicBaseUrl(req: {
9
+ protocol: string;
10
+ get(name: string): string | undefined;
11
+ }): string;
12
+ //# sourceMappingURL=public-url.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"public-url.d.ts","sourceRoot":"","sources":["../../../../src/lib/public-url.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,wBAAgB,gBAAgB,CAAC,GAAG,EAAE;IAAE,QAAQ,EAAE,MAAM,CAAC;IAAC,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAAA;CAAE,GAAG,MAAM,CAEzG"}
@@ -0,0 +1,14 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.getPublicBaseUrl = getPublicBaseUrl;
4
+ /**
5
+ * Resolve the public-facing base URL for API responses.
6
+ *
7
+ * On ECS, req.protocol + req.get("host") returns the internal service
8
+ * discovery address (e.g. fd-merch-medusa-test.fd-services.local:9000).
9
+ * We need the public storefront URL instead.
10
+ */
11
+ function getPublicBaseUrl(req) {
12
+ return process.env.STOREFRONT_URL || `${req.protocol}://${req.get("host")}`;
13
+ }
14
+ //# sourceMappingURL=public-url.js.map