@mnemopay/sdk 1.0.1 → 1.2.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 (80) hide show
  1. package/dist/adaptive.js +1 -1
  2. package/dist/adaptive.js.map +1 -1
  3. package/dist/anomaly.d.ts.map +1 -1
  4. package/dist/anomaly.js +11 -10
  5. package/dist/anomaly.js.map +1 -1
  6. package/dist/behavioral.js +1 -1
  7. package/dist/behavioral.js.map +1 -1
  8. package/dist/commerce/checkout/executor.d.ts +88 -0
  9. package/dist/commerce/checkout/executor.d.ts.map +1 -0
  10. package/dist/commerce/checkout/executor.js +168 -0
  11. package/dist/commerce/checkout/executor.js.map +1 -0
  12. package/dist/commerce/checkout/index.d.ts +10 -0
  13. package/dist/commerce/checkout/index.d.ts.map +1 -0
  14. package/dist/commerce/checkout/index.js +16 -0
  15. package/dist/commerce/checkout/index.js.map +1 -0
  16. package/dist/commerce/checkout/profile.d.ts +55 -0
  17. package/dist/commerce/checkout/profile.d.ts.map +1 -0
  18. package/dist/commerce/checkout/profile.js +69 -0
  19. package/dist/commerce/checkout/profile.js.map +1 -0
  20. package/dist/commerce/checkout/strategies/generic.d.ts +26 -0
  21. package/dist/commerce/checkout/strategies/generic.d.ts.map +1 -0
  22. package/dist/commerce/checkout/strategies/generic.js +279 -0
  23. package/dist/commerce/checkout/strategies/generic.js.map +1 -0
  24. package/dist/commerce/checkout/strategies/shopify.d.ts +39 -0
  25. package/dist/commerce/checkout/strategies/shopify.d.ts.map +1 -0
  26. package/dist/commerce/checkout/strategies/shopify.js +419 -0
  27. package/dist/commerce/checkout/strategies/shopify.js.map +1 -0
  28. package/dist/commerce/providers/firecrawl.d.ts +42 -0
  29. package/dist/commerce/providers/firecrawl.d.ts.map +1 -0
  30. package/dist/commerce/providers/firecrawl.js +233 -0
  31. package/dist/commerce/providers/firecrawl.js.map +1 -0
  32. package/dist/commerce/providers/index.d.ts +8 -0
  33. package/dist/commerce/providers/index.d.ts.map +1 -0
  34. package/dist/commerce/providers/index.js +11 -0
  35. package/dist/commerce/providers/index.js.map +1 -0
  36. package/dist/commerce/providers/shopify.d.ts +47 -0
  37. package/dist/commerce/providers/shopify.d.ts.map +1 -0
  38. package/dist/commerce/providers/shopify.js +242 -0
  39. package/dist/commerce/providers/shopify.js.map +1 -0
  40. package/dist/commerce.d.ts +3 -0
  41. package/dist/commerce.d.ts.map +1 -1
  42. package/dist/commerce.js +74 -42
  43. package/dist/commerce.js.map +1 -1
  44. package/dist/fico.d.ts.map +1 -1
  45. package/dist/fico.js +8 -3
  46. package/dist/fico.js.map +1 -1
  47. package/dist/fraud.d.ts +3 -1
  48. package/dist/fraud.d.ts.map +1 -1
  49. package/dist/fraud.js +71 -4
  50. package/dist/fraud.js.map +1 -1
  51. package/dist/identity.d.ts.map +1 -1
  52. package/dist/identity.js +39 -34
  53. package/dist/identity.js.map +1 -1
  54. package/dist/index.d.ts +62 -1
  55. package/dist/index.d.ts.map +1 -1
  56. package/dist/index.js +74 -6
  57. package/dist/index.js.map +1 -1
  58. package/dist/ledger.d.ts +21 -0
  59. package/dist/ledger.d.ts.map +1 -1
  60. package/dist/ledger.js +68 -0
  61. package/dist/ledger.js.map +1 -1
  62. package/dist/mcp/server.d.ts.map +1 -1
  63. package/dist/mcp/server.js +444 -1
  64. package/dist/mcp/server.js.map +1 -1
  65. package/dist/rails/index.d.ts +6 -0
  66. package/dist/rails/index.d.ts.map +1 -1
  67. package/dist/rails/index.js +60 -14
  68. package/dist/rails/index.js.map +1 -1
  69. package/dist/rails/paystack.d.ts +3 -0
  70. package/dist/rails/paystack.d.ts.map +1 -1
  71. package/dist/rails/paystack.js +18 -3
  72. package/dist/rails/paystack.js.map +1 -1
  73. package/dist/recall/engine.d.ts.map +1 -1
  74. package/dist/recall/engine.js +11 -2
  75. package/dist/recall/engine.js.map +1 -1
  76. package/dist/storage/sqlite.d.ts +12 -0
  77. package/dist/storage/sqlite.d.ts.map +1 -1
  78. package/dist/storage/sqlite.js +12 -3
  79. package/dist/storage/sqlite.js.map +1 -1
  80. package/package.json +25 -5
@@ -0,0 +1,233 @@
1
+ "use strict";
2
+ /**
3
+ * Firecrawl Commerce Provider
4
+ *
5
+ * Uses Firecrawl API to search and scrape ANY merchant website for products.
6
+ * This is the most flexible provider — works with any online store.
7
+ *
8
+ * Search: Firecrawl's search endpoint finds product pages matching a query.
9
+ * Product details: Firecrawl scrapes the product page and extracts structured data.
10
+ * Purchase: Returns the product URL for manual or Playwright-based checkout.
11
+ *
12
+ * Env: FIRECRAWL_API_KEY
13
+ */
14
+ Object.defineProperty(exports, "__esModule", { value: true });
15
+ exports.FirecrawlProvider = void 0;
16
+ class FirecrawlProvider {
17
+ name = "firecrawl";
18
+ apiKey;
19
+ baseUrl;
20
+ constructor(config) {
21
+ if (!config.apiKey)
22
+ throw new Error("Firecrawl API key is required");
23
+ this.apiKey = config.apiKey;
24
+ this.baseUrl = config.baseUrl || "https://api.firecrawl.dev/v1";
25
+ }
26
+ async search(query, options) {
27
+ const limit = options?.limit ?? 10;
28
+ const searchQuery = this.buildSearchQuery(query, options);
29
+ const res = await fetch(`${this.baseUrl}/search`, {
30
+ method: "POST",
31
+ headers: {
32
+ "Content-Type": "application/json",
33
+ Authorization: `Bearer ${this.apiKey}`,
34
+ },
35
+ body: JSON.stringify({
36
+ query: searchQuery,
37
+ limit,
38
+ scrapeOptions: {
39
+ formats: ["extract"],
40
+ extract: {
41
+ schema: {
42
+ type: "object",
43
+ properties: {
44
+ title: { type: "string" },
45
+ price: { type: "number" },
46
+ currency: { type: "string" },
47
+ merchant: { type: "string" },
48
+ category: { type: "string" },
49
+ rating: { type: "number" },
50
+ reviewCount: { type: "number" },
51
+ imageUrl: { type: "string" },
52
+ inStock: { type: "boolean" },
53
+ freeShipping: { type: "boolean" },
54
+ deliveryDays: { type: "number" },
55
+ },
56
+ required: ["title", "price"],
57
+ },
58
+ },
59
+ },
60
+ }),
61
+ });
62
+ if (!res.ok) {
63
+ const err = await res.text().catch(() => "unknown error");
64
+ throw new Error(`Firecrawl search failed (${res.status}): ${err}`);
65
+ }
66
+ const data = await res.json();
67
+ const results = [];
68
+ for (const item of data.data || []) {
69
+ const extracted = item.extract || {};
70
+ const price = this.parsePrice(extracted.price);
71
+ if (price === null)
72
+ continue; // skip items with no parseable price
73
+ // Apply price filters
74
+ if (options?.minPrice && price < options.minPrice)
75
+ continue;
76
+ if (options?.maxPrice && price > options.maxPrice)
77
+ continue;
78
+ if (options?.freeShippingOnly && !extracted.freeShipping)
79
+ continue;
80
+ const domain = this.extractDomain(item.url || "");
81
+ results.push({
82
+ productId: this.hashUrl(item.url || `firecrawl-${results.length}`),
83
+ title: extracted.title || item.title || "Unknown Product",
84
+ price,
85
+ currency: extracted.currency || "USD",
86
+ url: item.url || "",
87
+ imageUrl: extracted.imageUrl,
88
+ merchant: extracted.merchant || domain || "Unknown",
89
+ merchantDomain: domain,
90
+ category: extracted.category || options?.category,
91
+ rating: extracted.rating,
92
+ reviewCount: extracted.reviewCount,
93
+ deliveryDays: extracted.deliveryDays,
94
+ freeShipping: extracted.freeShipping ?? false,
95
+ raw: extracted,
96
+ });
97
+ }
98
+ // Sort results
99
+ if (options?.sortBy) {
100
+ results.sort((a, b) => {
101
+ switch (options.sortBy) {
102
+ case "price_asc": return a.price - b.price;
103
+ case "price_desc": return b.price - a.price;
104
+ case "rating": return (b.rating ?? 0) - (a.rating ?? 0);
105
+ default: return 0; // relevance — keep Firecrawl's order
106
+ }
107
+ });
108
+ }
109
+ return results;
110
+ }
111
+ async getProduct(productId) {
112
+ // productId is a hash — we need the URL. Check if it looks like a URL.
113
+ const url = this.isUrl(productId) ? productId : null;
114
+ if (!url)
115
+ return null;
116
+ const res = await fetch(`${this.baseUrl}/scrape`, {
117
+ method: "POST",
118
+ headers: {
119
+ "Content-Type": "application/json",
120
+ Authorization: `Bearer ${this.apiKey}`,
121
+ },
122
+ body: JSON.stringify({
123
+ url,
124
+ formats: ["extract"],
125
+ extract: {
126
+ schema: {
127
+ type: "object",
128
+ properties: {
129
+ title: { type: "string" },
130
+ price: { type: "number" },
131
+ currency: { type: "string" },
132
+ merchant: { type: "string" },
133
+ category: { type: "string" },
134
+ rating: { type: "number" },
135
+ reviewCount: { type: "number" },
136
+ imageUrl: { type: "string" },
137
+ inStock: { type: "boolean" },
138
+ freeShipping: { type: "boolean" },
139
+ deliveryDays: { type: "number" },
140
+ },
141
+ required: ["title", "price"],
142
+ },
143
+ },
144
+ }),
145
+ });
146
+ if (!res.ok)
147
+ return null;
148
+ const data = await res.json();
149
+ const extracted = data.data?.extract || {};
150
+ const price = this.parsePrice(extracted.price);
151
+ if (price === null)
152
+ return null;
153
+ const domain = this.extractDomain(url);
154
+ return {
155
+ productId: this.hashUrl(url),
156
+ title: extracted.title || "Unknown Product",
157
+ price,
158
+ currency: extracted.currency || "USD",
159
+ url,
160
+ imageUrl: extracted.imageUrl,
161
+ merchant: extracted.merchant || domain || "Unknown",
162
+ merchantDomain: domain,
163
+ category: extracted.category,
164
+ rating: extracted.rating,
165
+ reviewCount: extracted.reviewCount,
166
+ deliveryDays: extracted.deliveryDays,
167
+ freeShipping: extracted.freeShipping ?? false,
168
+ raw: extracted,
169
+ };
170
+ }
171
+ async executePurchase(product, deliveryInstructions) {
172
+ // Firecrawl can't execute purchases directly — it's a scraping tool.
173
+ // Return the product URL so the caller (or Playwright) can complete checkout.
174
+ return {
175
+ externalOrderId: `fc_order_${Date.now()}_${product.productId.slice(0, 8)}`,
176
+ status: "checkout_required",
177
+ trackingUrl: product.url,
178
+ };
179
+ }
180
+ async checkStatus(externalOrderId) {
181
+ // Firecrawl orders require manual tracking — scraping order status pages
182
+ // would need the user's session cookies which we don't have.
183
+ return {
184
+ status: "manual_tracking_required",
185
+ };
186
+ }
187
+ // ── Helpers ──────────────────────────────────────────────────────────────
188
+ buildSearchQuery(query, options) {
189
+ let q = `buy ${query}`;
190
+ if (options?.maxPrice)
191
+ q += ` under $${options.maxPrice}`;
192
+ if (options?.category)
193
+ q += ` ${options.category}`;
194
+ if (options?.freeShippingOnly)
195
+ q += " free shipping";
196
+ return q;
197
+ }
198
+ parsePrice(value) {
199
+ if (typeof value === "number" && value > 0)
200
+ return value;
201
+ if (typeof value === "string") {
202
+ const cleaned = value.replace(/[^0-9.]/g, "");
203
+ const num = parseFloat(cleaned);
204
+ if (!isNaN(num) && num > 0)
205
+ return num;
206
+ }
207
+ return null;
208
+ }
209
+ extractDomain(url) {
210
+ try {
211
+ return new URL(url).hostname.replace("www.", "");
212
+ }
213
+ catch {
214
+ return undefined;
215
+ }
216
+ }
217
+ hashUrl(url) {
218
+ // SHA-256 truncated for deterministic product ID — same URL = same ID, collision-resistant
219
+ const { createHash } = require("crypto");
220
+ return `fc_${createHash("sha256").update(url).digest("hex").slice(0, 16)}`;
221
+ }
222
+ isUrl(s) {
223
+ try {
224
+ new URL(s);
225
+ return true;
226
+ }
227
+ catch {
228
+ return false;
229
+ }
230
+ }
231
+ }
232
+ exports.FirecrawlProvider = FirecrawlProvider;
233
+ //# sourceMappingURL=firecrawl.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"firecrawl.js","sourceRoot":"","sources":["../../../src/commerce/providers/firecrawl.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ /**
2
+ * Commerce Providers — real integrations for MnemoPay CommerceEngine
3
+ */
4
+ export { FirecrawlProvider } from "./firecrawl.js";
5
+ export type { FirecrawlConfig } from "./firecrawl.js";
6
+ export { ShopifyProvider } from "./shopify.js";
7
+ export type { ShopifyConfig } from "./shopify.js";
8
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/commerce/providers/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AACnD,YAAY,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AAEtD,OAAO,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAC/C,YAAY,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC"}
@@ -0,0 +1,11 @@
1
+ "use strict";
2
+ /**
3
+ * Commerce Providers — real integrations for MnemoPay CommerceEngine
4
+ */
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.ShopifyProvider = exports.FirecrawlProvider = void 0;
7
+ var firecrawl_js_1 = require("./firecrawl.js");
8
+ Object.defineProperty(exports, "FirecrawlProvider", { enumerable: true, get: function () { return firecrawl_js_1.FirecrawlProvider; } });
9
+ var shopify_js_1 = require("./shopify.js");
10
+ Object.defineProperty(exports, "ShopifyProvider", { enumerable: true, get: function () { return shopify_js_1.ShopifyProvider; } });
11
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/commerce/providers/index.ts"],"names":[],"mappings":";AAAA;;GAEG;;;AAEH,+CAAmD;AAA1C,iHAAA,iBAAiB,OAAA;AAG1B,2CAA+C;AAAtC,6GAAA,eAAe,OAAA"}
@@ -0,0 +1,47 @@
1
+ /**
2
+ * Shopify Storefront Commerce Provider
3
+ *
4
+ * Uses the Shopify Storefront API (GraphQL) to search products on any
5
+ * Shopify store. Public Storefront Access Tokens allow read-only product
6
+ * access without merchant credentials.
7
+ *
8
+ * Search: GraphQL products query with text filter.
9
+ * Product details: GraphQL product by handle/ID.
10
+ * Purchase: Creates a Storefront checkout (cart) with the product.
11
+ *
12
+ * Env: SHOPIFY_STORE_DOMAIN, SHOPIFY_STOREFRONT_TOKEN
13
+ */
14
+ import type { CommerceProvider, ProductResult, SearchOptions } from "../../commerce.js";
15
+ export interface ShopifyConfig {
16
+ /** Shopify store domain (e.g., "my-store.myshopify.com") */
17
+ storeDomain: string;
18
+ /** Storefront API access token */
19
+ storefrontToken: string;
20
+ /** API version (default: "2024-10") */
21
+ apiVersion?: string;
22
+ }
23
+ export declare class ShopifyProvider implements CommerceProvider {
24
+ readonly name = "shopify";
25
+ private storeDomain;
26
+ private storefrontToken;
27
+ private apiVersion;
28
+ constructor(config: ShopifyConfig);
29
+ private get endpoint();
30
+ private gql;
31
+ search(query: string, options?: SearchOptions): Promise<ProductResult[]>;
32
+ getProduct(productId: string): Promise<ProductResult | null>;
33
+ executePurchase(product: ProductResult, deliveryInstructions?: string): Promise<{
34
+ externalOrderId: string;
35
+ status: string;
36
+ trackingUrl?: string;
37
+ }>;
38
+ checkStatus(externalOrderId: string): Promise<{
39
+ status: string;
40
+ trackingNumber?: string;
41
+ trackingUrl?: string;
42
+ deliveredAt?: string;
43
+ }>;
44
+ private productFields;
45
+ private mapSortKey;
46
+ }
47
+ //# sourceMappingURL=shopify.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"shopify.d.ts","sourceRoot":"","sources":["../../../src/commerce/providers/shopify.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,KAAK,EAAE,gBAAgB,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAExF,MAAM,WAAW,aAAa;IAC5B,4DAA4D;IAC5D,WAAW,EAAE,MAAM,CAAC;IACpB,kCAAkC;IAClC,eAAe,EAAE,MAAM,CAAC;IACxB,uCAAuC;IACvC,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,qBAAa,eAAgB,YAAW,gBAAgB;IACtD,QAAQ,CAAC,IAAI,aAAa;IAC1B,OAAO,CAAC,WAAW,CAAS;IAC5B,OAAO,CAAC,eAAe,CAAS;IAChC,OAAO,CAAC,UAAU,CAAS;gBAEf,MAAM,EAAE,aAAa;IAQjC,OAAO,KAAK,QAAQ,GAEnB;YAEa,GAAG;IAsBX,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,aAAa,GAAG,OAAO,CAAC,aAAa,EAAE,CAAC;IAiFxE,UAAU,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,GAAG,IAAI,CAAC;IA6B5D,eAAe,CAAC,OAAO,EAAE,aAAa,EAAE,oBAAoB,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC;QACpF,eAAe,EAAE,MAAM,CAAC;QACxB,MAAM,EAAE,MAAM,CAAC;QACf,WAAW,CAAC,EAAE,MAAM,CAAC;KACtB,CAAC;IAmDI,WAAW,CAAC,eAAe,EAAE,MAAM,GAAG,OAAO,CAAC;QAClD,MAAM,EAAE,MAAM,CAAC;QACf,cAAc,CAAC,EAAE,MAAM,CAAC;QACxB,WAAW,CAAC,EAAE,MAAM,CAAC;QACrB,WAAW,CAAC,EAAE,MAAM,CAAC;KACtB,CAAC;IAUF,OAAO,CAAC,aAAa;IAqBrB,OAAO,CAAC,UAAU;CAQnB"}
@@ -0,0 +1,242 @@
1
+ "use strict";
2
+ /**
3
+ * Shopify Storefront Commerce Provider
4
+ *
5
+ * Uses the Shopify Storefront API (GraphQL) to search products on any
6
+ * Shopify store. Public Storefront Access Tokens allow read-only product
7
+ * access without merchant credentials.
8
+ *
9
+ * Search: GraphQL products query with text filter.
10
+ * Product details: GraphQL product by handle/ID.
11
+ * Purchase: Creates a Storefront checkout (cart) with the product.
12
+ *
13
+ * Env: SHOPIFY_STORE_DOMAIN, SHOPIFY_STOREFRONT_TOKEN
14
+ */
15
+ Object.defineProperty(exports, "__esModule", { value: true });
16
+ exports.ShopifyProvider = void 0;
17
+ class ShopifyProvider {
18
+ name = "shopify";
19
+ storeDomain;
20
+ storefrontToken;
21
+ apiVersion;
22
+ constructor(config) {
23
+ if (!config.storeDomain)
24
+ throw new Error("Shopify store domain is required");
25
+ if (!config.storefrontToken)
26
+ throw new Error("Shopify Storefront API token is required");
27
+ this.storeDomain = config.storeDomain.replace(/^https?:\/\//, "").replace(/\/$/, "");
28
+ this.storefrontToken = config.storefrontToken;
29
+ this.apiVersion = config.apiVersion || "2024-10";
30
+ }
31
+ get endpoint() {
32
+ return `https://${this.storeDomain}/api/${this.apiVersion}/graphql.json`;
33
+ }
34
+ async gql(query, variables) {
35
+ const res = await fetch(this.endpoint, {
36
+ method: "POST",
37
+ headers: {
38
+ "Content-Type": "application/json",
39
+ "X-Shopify-Storefront-Access-Token": this.storefrontToken,
40
+ },
41
+ body: JSON.stringify({ query, variables }),
42
+ });
43
+ if (!res.ok) {
44
+ const err = await res.text().catch(() => "unknown error");
45
+ throw new Error(`Shopify API error (${res.status}): ${err}`);
46
+ }
47
+ const data = await res.json();
48
+ if (data.errors?.length) {
49
+ throw new Error(`Shopify GraphQL error: ${data.errors[0].message}`);
50
+ }
51
+ return data.data;
52
+ }
53
+ async search(query, options) {
54
+ const limit = Math.min(options?.limit ?? 10, 50);
55
+ // Build Shopify search query with price filters
56
+ let searchQuery = query;
57
+ if (options?.minPrice)
58
+ searchQuery += ` price:>=${options.minPrice}`;
59
+ if (options?.maxPrice)
60
+ searchQuery += ` price:<=${options.maxPrice}`;
61
+ if (options?.category)
62
+ searchQuery += ` product_type:${options.category}`;
63
+ const sortKey = this.mapSortKey(options?.sortBy);
64
+ const data = await this.gql(`
65
+ query SearchProducts($query: String!, $first: Int!, $sortKey: ProductSortKeys, $reverse: Boolean) {
66
+ products(first: $first, query: $query, sortKey: $sortKey, reverse: $reverse) {
67
+ edges {
68
+ node {
69
+ id
70
+ handle
71
+ title
72
+ productType
73
+ vendor
74
+ onlineStoreUrl
75
+ featuredImage {
76
+ url
77
+ }
78
+ priceRange {
79
+ minVariantPrice {
80
+ amount
81
+ currencyCode
82
+ }
83
+ }
84
+ variants(first: 1) {
85
+ edges {
86
+ node {
87
+ id
88
+ price {
89
+ amount
90
+ currencyCode
91
+ }
92
+ availableForSale
93
+ }
94
+ }
95
+ }
96
+ }
97
+ }
98
+ }
99
+ }
100
+ `, {
101
+ query: searchQuery,
102
+ first: limit,
103
+ sortKey: sortKey.key,
104
+ reverse: sortKey.reverse,
105
+ });
106
+ const results = [];
107
+ for (const edge of data.products.edges) {
108
+ const node = edge.node;
109
+ const variant = node.variants.edges[0]?.node;
110
+ if (!variant?.availableForSale || !variant?.price)
111
+ continue;
112
+ const price = parseFloat(variant.price.amount);
113
+ if (options?.minPrice && price < options.minPrice)
114
+ continue;
115
+ if (options?.maxPrice && price > options.maxPrice)
116
+ continue;
117
+ results.push({
118
+ productId: node.id,
119
+ title: node.title,
120
+ price,
121
+ currency: variant.price.currencyCode || "USD",
122
+ url: node.onlineStoreUrl || `https://${this.storeDomain}/products/${node.handle}`,
123
+ imageUrl: node.featuredImage?.url,
124
+ merchant: node.vendor || this.storeDomain,
125
+ merchantDomain: this.storeDomain,
126
+ category: node.productType || undefined,
127
+ raw: { shopifyId: node.id, handle: node.handle, variantId: variant.id },
128
+ });
129
+ }
130
+ return results;
131
+ }
132
+ async getProduct(productId) {
133
+ // Accept both Shopify GID and handle
134
+ const isGid = productId.startsWith("gid://");
135
+ const query = isGid
136
+ ? `query GetProduct($id: ID!) { product(id: $id) { ${this.productFields()} } }`
137
+ : `query GetProduct($handle: String!) { productByHandle(handle: $handle) { ${this.productFields()} } }`;
138
+ const variables = isGid ? { id: productId } : { handle: productId };
139
+ const data = await this.gql(query, variables);
140
+ const node = isGid ? data.product : data.productByHandle;
141
+ if (!node)
142
+ return null;
143
+ const variant = node.variants.edges[0]?.node;
144
+ if (!variant)
145
+ return null;
146
+ return {
147
+ productId: node.id,
148
+ title: node.title,
149
+ price: parseFloat(variant.price.amount),
150
+ currency: variant.price.currencyCode || "USD",
151
+ url: node.onlineStoreUrl || `https://${this.storeDomain}/products/${node.handle}`,
152
+ imageUrl: node.featuredImage?.url,
153
+ merchant: node.vendor || this.storeDomain,
154
+ merchantDomain: this.storeDomain,
155
+ category: node.productType || undefined,
156
+ raw: { shopifyId: node.id, handle: node.handle, variantId: variant.id },
157
+ };
158
+ }
159
+ async executePurchase(product, deliveryInstructions) {
160
+ const variantId = product.raw?.variantId;
161
+ if (!variantId) {
162
+ return {
163
+ externalOrderId: `shopify_noid_${Date.now()}`,
164
+ status: "checkout_required",
165
+ trackingUrl: product.url,
166
+ };
167
+ }
168
+ // Create a Storefront cart
169
+ const data = await this.gql(`
170
+ mutation CreateCart($variantId: ID!) {
171
+ cartCreate(input: {
172
+ lines: [{ quantity: 1, merchandiseId: $variantId }]
173
+ note: ${JSON.stringify(deliveryInstructions || "")}
174
+ }) {
175
+ cart {
176
+ id
177
+ checkoutUrl
178
+ }
179
+ userErrors {
180
+ field
181
+ message
182
+ }
183
+ }
184
+ }
185
+ `, { variantId });
186
+ const cart = data.cartCreate?.cart;
187
+ const errors = data.cartCreate?.userErrors;
188
+ if (errors?.length) {
189
+ throw new Error(`Shopify cart error: ${errors[0].message}`);
190
+ }
191
+ if (!cart) {
192
+ return {
193
+ externalOrderId: `shopify_fallback_${Date.now()}`,
194
+ status: "checkout_required",
195
+ trackingUrl: product.url,
196
+ };
197
+ }
198
+ return {
199
+ externalOrderId: cart.id,
200
+ status: "cart_created",
201
+ trackingUrl: cart.checkoutUrl,
202
+ };
203
+ }
204
+ async checkStatus(externalOrderId) {
205
+ // Storefront API doesn't expose order tracking without customer auth.
206
+ // Order status is tracked via the checkoutUrl email notification.
207
+ return {
208
+ status: "tracking_via_email",
209
+ };
210
+ }
211
+ // ── Helpers ──────────────────────────────────────────────────────────────
212
+ productFields() {
213
+ return `
214
+ id
215
+ handle
216
+ title
217
+ productType
218
+ vendor
219
+ onlineStoreUrl
220
+ featuredImage { url }
221
+ variants(first: 1) {
222
+ edges {
223
+ node {
224
+ id
225
+ price { amount currencyCode }
226
+ availableForSale
227
+ }
228
+ }
229
+ }
230
+ `;
231
+ }
232
+ mapSortKey(sortBy) {
233
+ switch (sortBy) {
234
+ case "price_asc": return { key: "PRICE", reverse: false };
235
+ case "price_desc": return { key: "PRICE", reverse: true };
236
+ case "rating": return { key: "BEST_SELLING", reverse: false };
237
+ default: return { key: "RELEVANCE", reverse: false };
238
+ }
239
+ }
240
+ }
241
+ exports.ShopifyProvider = ShopifyProvider;
242
+ //# sourceMappingURL=shopify.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"shopify.js","sourceRoot":"","sources":["../../../src/commerce/providers/shopify.ts"],"names":[],"mappings":"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"}
@@ -175,7 +175,10 @@ export declare class CommerceEngine {
175
175
  private externalOrderMap;
176
176
  private searchLimiter;
177
177
  private purchaseLimiter;
178
+ private orderLocks;
178
179
  constructor(agent: any, provider?: CommerceProvider);
180
+ private acquireOrderLock;
181
+ private releaseOrderLock;
179
182
  /**
180
183
  * Set a shopping mandate that defines what this agent can buy.
181
184
  * All purchases are validated against this mandate.
@@ -1 +1 @@
1
- {"version":3,"file":"commerce.d.ts","sourceRoot":"","sources":["../src/commerce.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"commerce.d.ts","sourceRoot":"","sources":["../src/commerce.ts"],"names":[],"mappings":"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"}