@jytextiles/medusa-plugin-faire-store-sync 0.2.4 → 0.2.6
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.
- package/.medusa/server/src/__tests__/faire-client.spec.js +27 -7
- package/.medusa/server/src/__tests__/ingest-faire-order-support.spec.js +61 -1
- package/.medusa/server/src/admin/index.js +182 -132
- package/.medusa/server/src/admin/index.mjs +184 -134
- package/.medusa/server/src/lib/faire-client.js +100 -18
- package/.medusa/server/src/lib/types.js +6 -2
- package/.medusa/server/src/modules/faire-sync/migrations/Migration20260709161201.js +14 -0
- package/.medusa/server/src/modules/faire-sync/models/faire-sync-account.js +5 -1
- package/.medusa/server/src/modules/faire-sync/service.js +33 -14
- package/.medusa/server/src/workflows/ingest-faire-order-support.js +81 -28
- package/.medusa/server/src/workflows/ingest-faire-orders-bulk.js +2 -2
- package/.medusa/server/src/workflows/sync-product-to-faire.js +109 -37
- package/package.json +1 -1
- package/src/__tests__/faire-client.spec.ts +28 -6
- package/src/__tests__/ingest-faire-order-support.spec.ts +63 -0
- package/src/admin/routes/settings/faire/[id]/page.tsx +56 -61
- package/src/admin/routes/settings/faire/page.tsx +78 -8
- package/src/lib/faire-client.ts +112 -16
- package/src/lib/types.ts +57 -18
- package/src/modules/faire-sync/migrations/.snapshot-medusa-faire-sync.json +19 -0
- package/src/modules/faire-sync/migrations/Migration20260709161201.ts +13 -0
- package/src/modules/faire-sync/models/faire-sync-account.ts +4 -0
- package/src/modules/faire-sync/service.ts +42 -16
- package/src/workflows/ingest-faire-order-support.ts +96 -29
- package/src/workflows/ingest-faire-orders-bulk.ts +1 -1
- package/src/workflows/sync-product-to-faire.ts +143 -41
|
@@ -22,13 +22,53 @@ const splitName = (name) => {
|
|
|
22
22
|
return { first: parts[0], last: "" };
|
|
23
23
|
return { first: parts[0], last: parts.slice(1).join(" ") };
|
|
24
24
|
};
|
|
25
|
+
// Faire ExternalMoneyV2 = { amount_minor, currency }. Returns integer minor
|
|
26
|
+
// units + ISO currency, or null when the field is absent/not a money object.
|
|
27
|
+
const moneyOf = (m) => m && typeof m === "object" && m.amount_minor != null
|
|
28
|
+
? { minor: Number(m.amount_minor) || 0, currency: String(m.currency || "") }
|
|
29
|
+
: null;
|
|
30
|
+
// Faire order addresses carry ISO-3 `country_code` ("CAN") + a full `country`
|
|
31
|
+
// name ("Canada"); Medusa wants a lowercase ISO-2. Map the ISO-3 codes for the
|
|
32
|
+
// regions Faire operates in; pass through anything already 2-letter.
|
|
33
|
+
const ISO3_TO_ISO2 = {
|
|
34
|
+
USA: "us", CAN: "ca", GBR: "gb", AUS: "au", NZL: "nz", DEU: "de", FRA: "fr",
|
|
35
|
+
ITA: "it", ESP: "es", PRT: "pt", NLD: "nl", BEL: "be", LUX: "lu", AUT: "at",
|
|
36
|
+
IRL: "ie", CHE: "ch", SWE: "se", DNK: "dk", FIN: "fi", NOR: "no", POL: "pl",
|
|
37
|
+
CZE: "cz", GRC: "gr", HUN: "hu", ROU: "ro", BGR: "bg", HRV: "hr", SVK: "sk",
|
|
38
|
+
SVN: "si", EST: "ee", LVA: "lv", LTU: "lt", CYP: "cy", MLT: "mt",
|
|
39
|
+
};
|
|
40
|
+
const faireCountryToIso2 = (raw) => {
|
|
41
|
+
const s = String(raw ?? "").trim();
|
|
42
|
+
if (!s)
|
|
43
|
+
return undefined;
|
|
44
|
+
if (s.length === 2)
|
|
45
|
+
return s.toLowerCase();
|
|
46
|
+
const iso2 = ISO3_TO_ISO2[s.toUpperCase()];
|
|
47
|
+
return iso2 ?? undefined; // full country names ("Canada") can't be mapped safely
|
|
48
|
+
};
|
|
25
49
|
function mapFaireOrderToOrder(order) {
|
|
26
50
|
const orderToken = String(order?.order_token ?? order?.id ?? order?.token ?? "");
|
|
27
51
|
const address = order?.address ?? order?.shipping_address ?? {};
|
|
28
|
-
const
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
52
|
+
const items = Array.isArray(order?.items) ? order.items : [];
|
|
53
|
+
// ExternalOrderV2 has NO top-level currency/total. Currency comes off any
|
|
54
|
+
// item's ExternalMoneyV2 `price` (fall back to the payout currency, then the
|
|
55
|
+
// legacy top-level fields for back-compat). See docs verified 2026-07-09.
|
|
56
|
+
const itemMoney = items.map((it) => moneyOf(it?.price)).find(Boolean);
|
|
57
|
+
const currency = String(itemMoney?.currency ||
|
|
58
|
+
moneyOf(order?.payout_costs?.total_payout)?.currency ||
|
|
59
|
+
order?.currency ||
|
|
60
|
+
order?.currency_code ||
|
|
61
|
+
"usd").toLowerCase();
|
|
62
|
+
// Buyer name: ExternalOrderV2.customer { first_name, last_name }, else the
|
|
63
|
+
// recipient name on the address. (`address.company_name`/`retailer_id` is the
|
|
64
|
+
// wholesale store, not the person.) Legacy fields kept as fallbacks.
|
|
65
|
+
const customer = order?.customer ?? {};
|
|
66
|
+
const buyerName = [customer?.first_name, customer?.last_name].filter(Boolean).join(" ") ||
|
|
67
|
+
address?.name ||
|
|
68
|
+
order?.buyer_name ||
|
|
69
|
+
order?.customer_name ||
|
|
70
|
+
[address?.first_name, address?.last_name].filter(Boolean).join(" ") ||
|
|
71
|
+
"";
|
|
32
72
|
const { first, last } = splitName(buyerName);
|
|
33
73
|
// Faire usually does NOT expose the retailer's email via API — fall back to a
|
|
34
74
|
// synthetic, non-deliverable address keyed by order token so the guest
|
|
@@ -36,41 +76,54 @@ function mapFaireOrderToOrder(order) {
|
|
|
36
76
|
const email = (typeof order?.buyer_email === "string" && order.buyer_email) ||
|
|
37
77
|
(typeof order?.email === "string" && order.email) ||
|
|
38
78
|
`faire+${orderToken}@marketplace.invalid`;
|
|
39
|
-
const
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
79
|
+
const unitMinorOf = (it) => {
|
|
80
|
+
const m = moneyOf(it?.price);
|
|
81
|
+
return m
|
|
82
|
+
? m.minor
|
|
83
|
+
: Number(it?.price_cents ?? it?.wholesale_price_cents ?? it?.unit_price_cents ?? 0);
|
|
84
|
+
};
|
|
85
|
+
const mappedItems = items.map((it) => ({
|
|
86
|
+
title: String(it?.product_name ?? it?.name ?? it?.title ?? "Faire item").slice(0, 250),
|
|
87
|
+
quantity: Math.max(1, Number(it?.quantity ?? it?.qty) || 1),
|
|
88
|
+
unit_price: (0, exports.faireMoney)(unitMinorOf(it)),
|
|
89
|
+
metadata: {
|
|
90
|
+
faire_order_token: orderToken,
|
|
91
|
+
faire_item_id: it?.id != null ? String(it.id) : null,
|
|
92
|
+
faire_product_token: it?.product_id != null
|
|
93
|
+
? String(it.product_id)
|
|
94
|
+
: it?.product_token != null
|
|
95
|
+
? String(it.product_token)
|
|
96
|
+
: null,
|
|
97
|
+
faire_sku: it?.sku ?? null,
|
|
98
|
+
faire_variant_id: it?.variant_id != null ? String(it.variant_id) : null,
|
|
99
|
+
},
|
|
100
|
+
}));
|
|
101
|
+
// No order-level total exists — sum line values (unit price × qty). Honour an
|
|
102
|
+
// explicit total_cents/grand_total_cents if a caller ever supplies one.
|
|
103
|
+
const explicitTotalCents = order?.total_cents ?? order?.grand_total_cents;
|
|
104
|
+
const total = explicitTotalCents != null
|
|
105
|
+
? (0, exports.faireMoney)(explicitTotalCents)
|
|
106
|
+
: (0, exports.faireMoney)(items.reduce((sum, it) => sum + unitMinorOf(it) * Math.max(1, Number(it?.quantity ?? it?.qty) || 1), 0));
|
|
55
107
|
const shipping_address = {
|
|
56
108
|
first_name: address?.first_name ?? first,
|
|
57
109
|
last_name: address?.last_name ?? last,
|
|
58
|
-
|
|
59
|
-
|
|
110
|
+
company: address?.company_name ?? undefined,
|
|
111
|
+
address_1: address?.address1 ?? address?.address_1 ?? address?.street1 ?? "",
|
|
112
|
+
address_2: address?.address2 ?? address?.address_2 ?? address?.street2 ?? "",
|
|
60
113
|
city: address?.city ?? "",
|
|
61
|
-
province: address?.state ?? address?.province ?? "",
|
|
62
|
-
postal_code: address?.
|
|
63
|
-
country_code:
|
|
64
|
-
phone: address?.phone ?? undefined,
|
|
114
|
+
province: address?.state_code ?? address?.state ?? address?.province ?? "",
|
|
115
|
+
postal_code: address?.postal_code ?? address?.zip ?? "",
|
|
116
|
+
country_code: faireCountryToIso2(address?.country_code ?? address?.country),
|
|
117
|
+
phone: address?.phone_number ?? address?.phone ?? undefined,
|
|
65
118
|
};
|
|
66
119
|
return {
|
|
67
120
|
order_token: orderToken,
|
|
68
121
|
email,
|
|
69
122
|
buyer_name: buyerName || null,
|
|
70
123
|
currency_code: currency,
|
|
71
|
-
total
|
|
124
|
+
total,
|
|
72
125
|
shipping_address,
|
|
73
126
|
items: mappedItems,
|
|
74
127
|
};
|
|
75
128
|
}
|
|
76
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
129
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5nZXN0LWZhaXJlLW9yZGVyLXN1cHBvcnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvd29ya2Zsb3dzL2luZ2VzdC1mYWlyZS1vcmRlci1zdXBwb3J0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSwwRUFBMEU7QUFDMUUsc0VBQXNFOzs7QUEyRHRFLG9EQXNHQztBQS9KRCx3RUFBd0U7QUFDeEUsMkVBQTJFO0FBQzNFLDZFQUE2RTtBQUM3RSwrRUFBK0U7QUFDL0Usa0NBQWtDO0FBQzNCLE1BQU0sVUFBVSxHQUFHLENBQUMsS0FBYyxFQUFVLEVBQUU7SUFDbkQsTUFBTSxDQUFDLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFBO0lBQ3ZCLE9BQU8sTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFBO0FBQ3pDLENBQUMsQ0FBQTtBQUhZLFFBQUEsVUFBVSxjQUd0QjtBQUVELE1BQU0sU0FBUyxHQUFHLENBQUMsSUFBYSxFQUFtQyxFQUFFO0lBQ25FLE1BQU0sS0FBSyxHQUFHLE1BQU0sQ0FBQyxJQUFJLElBQUksRUFBRSxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQTtJQUNwRSxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU07UUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFLENBQUE7SUFDM0QsSUFBSSxLQUFLLENBQUMsTUFBTSxLQUFLLENBQUM7UUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsRUFBRSxFQUFFLENBQUE7SUFDNUQsT0FBTyxFQUFFLEtBQUssRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUE7QUFDNUQsQ0FBQyxDQUFBO0FBRUQsNEVBQTRFO0FBQzVFLDZFQUE2RTtBQUM3RSxNQUFNLE9BQU8sR0FBRyxDQUFDLENBQU0sRUFBOEMsRUFBRSxDQUNyRSxDQUFDLElBQUksT0FBTyxDQUFDLEtBQUssUUFBUSxJQUFJLENBQUMsQ0FBQyxZQUFZLElBQUksSUFBSTtJQUNsRCxDQUFDLENBQUMsRUFBRSxLQUFLLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLEVBQUUsUUFBUSxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUMsUUFBUSxJQUFJLEVBQUUsQ0FBQyxFQUFFO0lBQzVFLENBQUMsQ0FBQyxJQUFJLENBQUE7QUFFViw4RUFBOEU7QUFDOUUsK0VBQStFO0FBQy9FLHFFQUFxRTtBQUNyRSxNQUFNLFlBQVksR0FBMkI7SUFDM0MsR0FBRyxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLElBQUk7SUFDM0UsR0FBRyxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLElBQUk7SUFDM0UsR0FBRyxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLElBQUk7SUFDM0UsR0FBRyxFQUFFLElBQUksRUFBRSxHQUFHLEVB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
|
|
@@ -36,7 +36,7 @@ const openBatchStep = (0, workflows_sdk_1.createStep)("faire-ingest-orders-open-
|
|
|
36
36
|
const processBatchStep = (0, workflows_sdk_1.createStep)("faire-ingest-orders-process-batch-step", async (input, { container }) => {
|
|
37
37
|
const service = container.resolve(faire_sync_1.FAIRE_SYNC_MODULE);
|
|
38
38
|
const account = await service.ensureFreshToken();
|
|
39
|
-
const client = service.getClient();
|
|
39
|
+
const client = service.getClient(account.auth_mode);
|
|
40
40
|
// Resolve the incremental window. Precedence:
|
|
41
41
|
// explicit input > persisted high-water mark > full backfill (undefined).
|
|
42
42
|
let updatedAtMin;
|
|
@@ -140,4 +140,4 @@ exports.ingestFaireOrdersBulkWorkflow = (0, workflows_sdk_1.createWorkflow)(expo
|
|
|
140
140
|
}))).config({ async: true, backgroundExecution: true });
|
|
141
141
|
return new workflows_sdk_1.WorkflowResponse({ batch_id: opened.batch_id });
|
|
142
142
|
});
|
|
143
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
143
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5nZXN0LWZhaXJlLW9yZGVycy1idWxrLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL3dvcmtmbG93cy9pbmdlc3QtZmFpcmUtb3JkZXJzLWJ1bGsudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEscUVBTzBDO0FBQzFDLHNEQUF5RDtBQUV6RCw2REFBK0Q7QUFFbEQsUUFBQSx3QkFBd0IsR0FBRywwQkFBMEIsQ0FBQTtBQVVsRSw0RUFBNEU7QUFDNUUsNkVBQTZFO0FBQzdFLDBFQUEwRTtBQUMxRSx5QkFBeUI7QUFDekIsTUFBTSxhQUFhLEdBQUcsR0FBRyxDQUFBO0FBQ3pCLE1BQU0sWUFBWSxHQUFHLE1BQU0sQ0FBQTtBQUMzQixNQUFNLGNBQWMsR0FBRyxDQUFDLENBQUE7QUFDeEIsTUFBTSxTQUFTLEdBQUcsRUFBRSxDQUFBO0FBRXBCLE1BQU0sS0FBSyxHQUFHLENBQUMsRUFBVSxFQUFFLEVBQUUsQ0FBQyxJQUFJLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsVUFBVSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFBO0FBRW5FLDhFQUE4RTtBQUU5RSxNQUFNLGFBQWEsR0FBRyxJQUFBLDBCQUFVLEVBQzlCLHFDQUFxQyxFQUNyQyxLQUFLLEVBQ0gsTUFBa0MsRUFDbEMsRUFBRSxTQUFTLEVBQUUsT0FBTyxFQUFFLEVBQ3VCLEVBQUU7SUFDL0MsTUFBTSxPQUFPLEdBQXFCLFNBQVMsQ0FBQyxPQUFPLENBQUMsOEJBQWlCLENBQUMsQ0FBQTtJQUV0RSxNQUFNLE9BQU8sR0FBRyxNQUFNLE9BQU8sQ0FBQyxnQkFBZ0IsRUFBRSxDQUFBO0lBQ2hELElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztRQUNiLE1BQU0sSUFBSSxLQUFLLENBQUMsZ0NBQWdDLENBQUMsQ0FBQTtJQUNuRCxDQUFDO0lBRUQsTUFBTSxLQUFLLEdBQUcsTUFBTSxPQUFPLENBQUMsc0JBQXNCLENBQUM7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
|
|
@@ -16,6 +16,27 @@ const productDisplayUrl = (product) => {
|
|
|
16
16
|
return null;
|
|
17
17
|
return `https://www.faire.com/brand/products/${product.product_token}`;
|
|
18
18
|
};
|
|
19
|
+
/**
|
|
20
|
+
* Faire variant prices are geo-scoped (`geo_constraint`). Derive a sensible
|
|
21
|
+
* default from the brand's currency (and country when known). Eurozone brands
|
|
22
|
+
* map to the EUROPEAN_UNION country_group; otherwise scope to a single country.
|
|
23
|
+
*/
|
|
24
|
+
const geoForCurrency = (currency, country) => {
|
|
25
|
+
switch (currency) {
|
|
26
|
+
case "EUR":
|
|
27
|
+
return { country_group: "EUROPEAN_UNION" };
|
|
28
|
+
case "GBP":
|
|
29
|
+
return { country: "GB" };
|
|
30
|
+
case "USD":
|
|
31
|
+
return { country: "US" };
|
|
32
|
+
case "CAD":
|
|
33
|
+
return { country: "CA" };
|
|
34
|
+
case "AUD":
|
|
35
|
+
return { country: "AU" };
|
|
36
|
+
default:
|
|
37
|
+
return country ? { country } : { country_group: "EUROPEAN_UNION" };
|
|
38
|
+
}
|
|
39
|
+
};
|
|
19
40
|
// ── Step 1: resolve account (fresh token) + settings ─────────────────────
|
|
20
41
|
const resolveFaireConfigStep = (0, workflows_sdk_1.createStep)("faire-resolve-config-step", async (_, { container }) => {
|
|
21
42
|
const service = container.resolve(faire_sync_1.FAIRE_SYNC_MODULE);
|
|
@@ -25,7 +46,9 @@ const resolveFaireConfigStep = (0, workflows_sdk_1.createStep)("faire-resolve-co
|
|
|
25
46
|
account_id: account.id,
|
|
26
47
|
brand_id: account.brand_id,
|
|
27
48
|
access_token: account.access_token,
|
|
49
|
+
auth_mode: account.auth_mode ?? "oauth",
|
|
28
50
|
currency: account.currency ?? null,
|
|
51
|
+
country: account.country ?? null,
|
|
29
52
|
settings,
|
|
30
53
|
});
|
|
31
54
|
});
|
|
@@ -45,6 +68,8 @@ const prepareProductStep = (0, workflows_sdk_1.createStep)("faire-prepare-produc
|
|
|
45
68
|
"tags.*",
|
|
46
69
|
"variants.*",
|
|
47
70
|
"variants.prices.*",
|
|
71
|
+
"variants.options.*",
|
|
72
|
+
"variants.options.option.*",
|
|
48
73
|
"variants.inventory_items.*",
|
|
49
74
|
"images.*",
|
|
50
75
|
"variants.sku",
|
|
@@ -74,53 +99,94 @@ const prepareProductStep = (0, workflows_sdk_1.createStep)("faire-prepare-produc
|
|
|
74
99
|
const settings = input.settings;
|
|
75
100
|
const metadata = product.metadata || {};
|
|
76
101
|
const variants = product.variants || [];
|
|
77
|
-
//
|
|
78
|
-
//
|
|
79
|
-
|
|
102
|
+
// ── Currency + geo constraint (Faire prices are geo-scoped) ────────────
|
|
103
|
+
// Prefer the brand's own currency; fall back to the price currency Medusa
|
|
104
|
+
// stored, then EUR. Currency picks the price row + drives the geo default.
|
|
105
|
+
const currency = String(metadata.faire_currency ||
|
|
106
|
+
input.currency ||
|
|
107
|
+
(variants.flatMap((v) => v.prices || [])[0]?.currency_code ?? "EUR")).toUpperCase();
|
|
108
|
+
const geoConstraint = metadata.faire_geo_constraint && typeof metadata.faire_geo_constraint === "object"
|
|
109
|
+
? metadata.faire_geo_constraint
|
|
110
|
+
: geoForCurrency(currency, input.country);
|
|
111
|
+
// Medusa v2 stores money as a whole decimal in the price's currency; Faire
|
|
112
|
+
// wants integer minor units (cents), so round.
|
|
113
|
+
const toMinor = (amount) => Math.round(Number(amount || 0) * 100);
|
|
80
114
|
const markupPercent = Number(metadata.faire_wholesale_markup_percent ?? settings.default_wholesale_markup_percent) ||
|
|
81
115
|
0;
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
116
|
+
// Pick the price row matching the chosen currency (fall back to first).
|
|
117
|
+
const pickPrice = (prices) => prices.find((p) => String(p.currency_code || "").toUpperCase() === currency) ??
|
|
118
|
+
prices[0] ??
|
|
119
|
+
null;
|
|
120
|
+
const buildVariant = (v, idx) => {
|
|
121
|
+
const retail = pickPrice(v.prices || []);
|
|
122
|
+
const retailMinor = retail ? toMinor(retail.amount) : 0;
|
|
123
|
+
const wholesaleMinor = markupPercent > 0
|
|
124
|
+
? Math.round((retailMinor * (100 - markupPercent)) / 100)
|
|
125
|
+
: retailMinor;
|
|
126
|
+
const sku = v.sku || v.id;
|
|
127
|
+
const options = (v.options || [])
|
|
128
|
+
.map((o) => ({
|
|
129
|
+
name: String(o.option?.title || o.title || "Option"),
|
|
130
|
+
value: String(o.value ?? ""),
|
|
131
|
+
}))
|
|
132
|
+
.filter((o) => o.value) || [];
|
|
89
133
|
return {
|
|
90
|
-
sku
|
|
91
|
-
name: v.title ||
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
134
|
+
sku,
|
|
135
|
+
name: v.title || sku,
|
|
136
|
+
idempotence_token: `${product.id}:${v.id || sku}`,
|
|
137
|
+
options: options.length ? options : undefined,
|
|
138
|
+
available_quantity: Number(v.inventory_quantity) || 0,
|
|
139
|
+
prices: retailMinor > 0
|
|
140
|
+
? [
|
|
141
|
+
{
|
|
142
|
+
geo_constraint: geoConstraint,
|
|
143
|
+
wholesale_price: { amount_minor: wholesaleMinor, currency },
|
|
144
|
+
retail_price: { amount_minor: retailMinor, currency },
|
|
145
|
+
},
|
|
146
|
+
]
|
|
147
|
+
: undefined,
|
|
95
148
|
};
|
|
96
149
|
};
|
|
97
|
-
// Aggregate retail/wholesale from min-variant for the product-level price.
|
|
98
|
-
const allPrices = variants.flatMap((v) => v.prices || []);
|
|
99
|
-
const minRetail = allPrices
|
|
100
|
-
.map((p) => toCents(p.amount))
|
|
101
|
-
.filter((a) => a > 0)
|
|
102
|
-
.sort((a, b) => a - b)[0] ?? 0;
|
|
103
|
-
const minWholesale = markupPercent > 0
|
|
104
|
-
? Math.round((minRetail * (100 - markupPercent)) / 100)
|
|
105
|
-
: minRetail;
|
|
106
|
-
const tags = (product.tags || [])
|
|
107
|
-
.map((t) => t.value)
|
|
108
|
-
.filter(Boolean);
|
|
109
150
|
const images = (product.images || [])
|
|
110
151
|
.map((img) => ({ url: img.url }))
|
|
111
152
|
.filter((i) => i.url);
|
|
153
|
+
// Resolve taxonomy_type.id — REQUIRED by Faire create. Priority:
|
|
154
|
+
// product.metadata.faire_taxonomy_type_id (tt_… or a category name)
|
|
155
|
+
// → settings.default_category (id or name) → error.
|
|
156
|
+
const client = service.getClient(input.auth_mode);
|
|
157
|
+
const categoryHint = metadata.faire_taxonomy_type_id ||
|
|
158
|
+
metadata.faire_category ||
|
|
159
|
+
settings.default_category ||
|
|
160
|
+
"";
|
|
161
|
+
const taxonomyTypeId = await client.resolveTaxonomyTypeId(input.access_token, String(categoryHint));
|
|
162
|
+
if (!taxonomyTypeId) {
|
|
163
|
+
throw new Error("Faire requires a product category (taxonomy_type). Set a Faire " +
|
|
164
|
+
"category in sync settings (default_category) or on the product " +
|
|
165
|
+
"(metadata.faire_taxonomy_type_id — a `tt_…` id or a category name).");
|
|
166
|
+
}
|
|
167
|
+
const lifecycle_state = settings.follow_product_status !== false && product.status === "published"
|
|
168
|
+
? "PUBLISHED"
|
|
169
|
+
: "DRAFT";
|
|
170
|
+
const builtVariants = (variants.length ? variants : [null]).map((v, i) => v
|
|
171
|
+
? buildVariant(v, i)
|
|
172
|
+
: {
|
|
173
|
+
// Single-variant fallback for products with no explicit variants.
|
|
174
|
+
sku: product.id,
|
|
175
|
+
name: product.title || "Default",
|
|
176
|
+
idempotence_token: `${product.id}:default`,
|
|
177
|
+
available_quantity: 0,
|
|
178
|
+
});
|
|
112
179
|
const product_input = {
|
|
113
|
-
brand_id: input.brand_id,
|
|
114
180
|
name: (product.title || "Untitled Product").slice(0, 140),
|
|
181
|
+
idempotence_token: product.id,
|
|
182
|
+
lifecycle_state,
|
|
183
|
+
taxonomy_type: { id: taxonomyTypeId },
|
|
115
184
|
description: product.description || "",
|
|
116
|
-
wholesale_price_cents: minWholesale || undefined,
|
|
117
|
-
retail_price_cents: minRetail || undefined,
|
|
118
|
-
images,
|
|
119
|
-
variants: variants.length ? variants.map(buildVariant) : undefined,
|
|
120
|
-
tags,
|
|
121
185
|
short_description: typeof metadata.faire_short_description === "string"
|
|
122
186
|
? metadata.faire_short_description
|
|
123
187
|
: undefined,
|
|
188
|
+
images,
|
|
189
|
+
variants: builtVariants,
|
|
124
190
|
};
|
|
125
191
|
return new workflows_sdk_1.StepResponse({
|
|
126
192
|
product_id: input.product_id,
|
|
@@ -133,7 +199,7 @@ const prepareProductStep = (0, workflows_sdk_1.createStep)("faire-prepare-produc
|
|
|
133
199
|
// ── Step 3: create/update product + push inventory ───────────────────────
|
|
134
200
|
const syncProductStep = (0, workflows_sdk_1.createStep)("faire-sync-product-step", async (input, { container }) => {
|
|
135
201
|
const service = container.resolve(faire_sync_1.FAIRE_SYNC_MODULE);
|
|
136
|
-
const client = service.getClient();
|
|
202
|
+
const client = service.getClient(input.config.auth_mode);
|
|
137
203
|
const { access_token, settings } = input.config;
|
|
138
204
|
const { product_input, existing_product_token, product_status } = input.prepared;
|
|
139
205
|
const warnings = [];
|
|
@@ -143,9 +209,11 @@ const syncProductStep = (0, workflows_sdk_1.createStep)("faire-sync-product-step
|
|
|
143
209
|
product = await client.updateProduct(access_token, existing_product_token, {
|
|
144
210
|
name: product_input.name,
|
|
145
211
|
description: product_input.description,
|
|
212
|
+
short_description: product_input.short_description,
|
|
213
|
+
lifecycle_state: product_input.lifecycle_state,
|
|
214
|
+
taxonomy_type: product_input.taxonomy_type,
|
|
146
215
|
images: product_input.images,
|
|
147
216
|
variants: product_input.variants,
|
|
148
|
-
tags: product_input.tags,
|
|
149
217
|
});
|
|
150
218
|
}
|
|
151
219
|
else {
|
|
@@ -162,7 +230,7 @@ const syncProductStep = (0, workflows_sdk_1.createStep)("faire-sync-product-step
|
|
|
162
230
|
try {
|
|
163
231
|
const levels = product_input.variants.map((v) => ({
|
|
164
232
|
sku: v.sku,
|
|
165
|
-
|
|
233
|
+
on_hand_quantity: v.available_quantity ?? 0,
|
|
166
234
|
}));
|
|
167
235
|
await client.updateInventory(access_token, levels);
|
|
168
236
|
}
|
|
@@ -241,6 +309,10 @@ exports.syncProductToFaireWorkflow = (0, workflows_sdk_1.createWorkflow)(exports
|
|
|
241
309
|
product_id: data.input.product_id,
|
|
242
310
|
settings: data.config.settings,
|
|
243
311
|
brand_id: data.config.brand_id,
|
|
312
|
+
currency: data.config.currency,
|
|
313
|
+
country: data.config.country,
|
|
314
|
+
access_token: data.config.access_token,
|
|
315
|
+
auth_mode: data.config.auth_mode,
|
|
244
316
|
})));
|
|
245
317
|
const result = syncProductStep((0, workflows_sdk_1.transform)({ config, prepared }, (data) => ({
|
|
246
318
|
config: data.config,
|
|
@@ -259,4 +331,4 @@ exports.syncProductToFaireWorkflow = (0, workflows_sdk_1.createWorkflow)(exports
|
|
|
259
331
|
warnings: result.warnings,
|
|
260
332
|
});
|
|
261
333
|
});
|
|
262
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3luYy1wcm9kdWN0LXRvLWZhaXJlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL3dvcmtmbG93cy9zeW5jLXByb2R1Y3QtdG8tZmFpcmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEscUVBTzBDO0FBQzFDLHFEQUE4RTtBQUc5RSxzREFBeUQ7QUFPNUMsUUFBQSxxQkFBcUIsR0FBRyxvQkFBb0IsQ0FBQTtBQTRCekQ7OztHQUdHO0FBQ0gsTUFBTSxpQkFBaUIsR0FBRyxDQUFDLE9BQXdCLEVBQWlCLEVBQUU7SUFDcEUsSUFBSSxPQUFPLENBQUMsR0FBRztRQUFFLE9BQU8sT0FBTyxDQUFDLEdBQUcsQ0FBQTtJQUNuQyxJQUFJLENBQUMsT0FBTyxDQUFDLGFBQWE7UUFBRSxPQUFPLElBQUksQ0FBQTtJQUN2QyxPQUFPLHdDQUF3QyxPQUFPLENBQUMsYUFBYSxFQUFFLENBQUE7QUFDeEUsQ0FBQyxDQUFBO0FBRUQsNEVBQTRFO0FBRTVFLE1BQU0sc0JBQXNCLEdBQUcsSUFBQSwwQkFBVSxFQUN2QywyQkFBMkIsRUFDM0IsS0FBSyxFQUFFLENBQUMsRUFBRSxFQUFFLFNBQVMsRUFBRSxFQUF5QyxFQUFFO0lBQ2hFLE1BQU0sT0FBTyxHQUFxQixTQUFTLENBQUMsT0FBTyxDQUFDLDhCQUFpQixDQUFDLENBQUE7SUFDdEUsTUFBTSxPQUFPLEdBQUcsTUFBTSxPQUFPLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQTtJQUNoRCxNQUFNLFFBQVEsR0FBRyxNQUFNLE9BQU8sQ0FBQyxXQUFXLEVBQUUsQ0FBQTtJQUM1QyxPQUFPLElBQUksNEJBQVksQ0FBQztRQUN0QixVQUFVLEVBQUUsT0FBTyxDQUFDLEVBQUU7UUFDdEIsUUFBUSxFQUFFLE9BQU8sQ0FBQyxRQUFRO1FBQzFCLFlBQVksRUFBRSxPQUFPLENBQUMsWUFBWTtRQUNsQyxRQUFRLEVBQUUsT0FBTyxDQUFDLFFBQVEsSUFBSSxJQUFJO1FBQ2xDLFFBQVE7S0FD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
|
|
334
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3luYy1wcm9kdWN0LXRvLWZhaXJlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL3dvcmtmbG93cy9zeW5jLXByb2R1Y3QtdG8tZmFpcmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEscUVBTzBDO0FBQzFDLHFEQUE4RTtBQUc5RSxzREFBeUQ7QUFPNUMsUUFBQSxxQkFBcUIsR0FBRyxvQkFBb0IsQ0FBQTtBQThCekQ7OztHQUdHO0FBQ0gsTUFBTSxpQkFBaUIsR0FBRyxDQUFDLE9BQXdCLEVBQWlCLEVBQUU7SUFDcEUsSUFBSSxPQUFPLENBQUMsR0FBRztRQUFFLE9BQU8sT0FBTyxDQUFDLEdBQUcsQ0FBQTtJQUNuQyxJQUFJLENBQUMsT0FBTyxDQUFDLGFBQWE7UUFBRSxPQUFPLElBQUksQ0FBQTtJQUN2QyxPQUFPLHdDQUF3QyxPQUFPLENBQUMsYUFBYSxFQUFFLENBQUE7QUFDeEUsQ0FBQyxDQUFBO0FBRUQ7Ozs7R0FJRztBQUNILE1BQU0sY0FBYyxHQUFHLENBQ3JCLFFBQWdCLEVBQ2hCLE9BQXNCLEVBQ3dCLEVBQUU7SUFDaEQsUUFBUSxRQUFRLEVBQUUsQ0FBQztRQUNqQixLQUFLLEtBQUs7WUFDUixPQUFPLEVBQUUsYUFBYSxFQUFFLGdCQUFnQixFQUFFLENBQUE7UUFDNUMsS0FBSyxLQUFLO1lBQ1IsT0FBTyxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsQ0FBQTtRQUMxQixLQUFLLEtBQUs7WUFDUixPQUFPLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxDQUFBO1FBQzFCLEtBQUssS0FBSztZQUNSLE9BQU8sRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLENBQUE7UUFDMUIsS0FBSyxLQUFLO1lBQ1IsT0FBTyxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsQ0FBQTtRQUMxQjtZQUNFLE9BQU8sT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFLE9BQU8sRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLGFB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
|
package/package.json
CHANGED
|
@@ -30,7 +30,7 @@ describe("FaireClient — issue #952 corrections", () => {
|
|
|
30
30
|
it("uses the verified base / auth / token URLs by default", () => {
|
|
31
31
|
const c = new FaireClient({})
|
|
32
32
|
// defaults are exported from types and consumed verbatim
|
|
33
|
-
expect(DEFAULT_API_BASE).toBe("https://faire.com/external-api/v2")
|
|
33
|
+
expect(DEFAULT_API_BASE).toBe("https://www.faire.com/external-api/v2")
|
|
34
34
|
expect(DEFAULT_AUTH_URL).toBe("https://faire.com/oauth2/authorize")
|
|
35
35
|
expect(DEFAULT_TOKEN_URL).toBe("https://www.faire.com/api/external-api-oauth2/token")
|
|
36
36
|
})
|
|
@@ -94,23 +94,45 @@ describe("FaireClient — issue #952 corrections", () => {
|
|
|
94
94
|
|
|
95
95
|
it("pushes inventory via PATCH /product-inventory/by-skus (not GET /inventory)", async () => {
|
|
96
96
|
const c = new FaireClient(oauthOpts)
|
|
97
|
-
await c.updateInventory("t", [{ sku: "S1",
|
|
97
|
+
await c.updateInventory("t", [{ sku: "S1", on_hand_quantity: 7 }])
|
|
98
98
|
expect(lastInit.method).toBe("PATCH")
|
|
99
99
|
expect(lastUrl).toBe(`${DEFAULT_API_BASE}/product-inventory/by-skus`)
|
|
100
100
|
expect(JSON.parse(lastInit.body)).toEqual({
|
|
101
|
-
inventories: [{ sku: "S1",
|
|
101
|
+
inventories: [{ sku: "S1", on_hand_quantity: 7 }],
|
|
102
102
|
})
|
|
103
103
|
})
|
|
104
104
|
|
|
105
|
-
it("lists orders with
|
|
105
|
+
it("lists orders with numeric page + updated_at_min", async () => {
|
|
106
106
|
const c = new FaireClient(oauthOpts)
|
|
107
|
-
await c.listOrders("t", { page: "
|
|
107
|
+
await c.listOrders("t", { page: "2", updated_at_min: "2026-01-01T00:00:00Z" })
|
|
108
108
|
const url = new URL(lastUrl)
|
|
109
109
|
expect(url.pathname).toBe("/external-api/v2/orders")
|
|
110
|
-
expect(url.searchParams.get("page")).toBe("
|
|
110
|
+
expect(url.searchParams.get("page")).toBe("2")
|
|
111
111
|
expect(url.searchParams.get("updated_at_min")).toBe("2026-01-01T00:00:00Z")
|
|
112
112
|
})
|
|
113
113
|
|
|
114
|
+
it("derives next_page from numeric page (Faire returns no cursor)", async () => {
|
|
115
|
+
const c = new FaireClient(oauthOpts)
|
|
116
|
+
const page = (rows: number) => ({
|
|
117
|
+
ok: true,
|
|
118
|
+
status: 200,
|
|
119
|
+
headers: new Map(),
|
|
120
|
+
text: async () =>
|
|
121
|
+
JSON.stringify({
|
|
122
|
+
page: undefined,
|
|
123
|
+
orders: Array.from({ length: rows }, (_, i) => ({ id: `bo_${i}` })),
|
|
124
|
+
}),
|
|
125
|
+
})
|
|
126
|
+
// A full page (rows === limit) → there may be more → next_page = current+1.
|
|
127
|
+
fetchMock.mockImplementationOnce(async () => page(2) as any)
|
|
128
|
+
const full = await c.listOrders("t", { limit: 2, page: "1" })
|
|
129
|
+
expect(full.next_page).toBe("2")
|
|
130
|
+
// A short page → last page → no next_page.
|
|
131
|
+
fetchMock.mockImplementationOnce(async () => page(1) as any)
|
|
132
|
+
const short = await c.listOrders("t", { limit: 2, page: "2" })
|
|
133
|
+
expect(short.next_page).toBeUndefined()
|
|
134
|
+
})
|
|
135
|
+
|
|
114
136
|
it("posts order processing (PUT) and shipments (POST) on the right paths", async () => {
|
|
115
137
|
const c = new FaireClient(oauthOpts)
|
|
116
138
|
await c.setOrderProcessing("t", "o_1", { accepted: true })
|
|
@@ -66,6 +66,69 @@ describe("mapFaireOrderToOrder", () => {
|
|
|
66
66
|
expect(mapped.items).toEqual([])
|
|
67
67
|
})
|
|
68
68
|
|
|
69
|
+
it("maps a real ExternalOrderV2 (customer/address/item.price, no top-level total)", () => {
|
|
70
|
+
const order = {
|
|
71
|
+
id: "bo_bxdmjbwxid",
|
|
72
|
+
state: "NEW",
|
|
73
|
+
customer: { first_name: "John", last_name: "Smith" },
|
|
74
|
+
address: {
|
|
75
|
+
name: "John Smith",
|
|
76
|
+
company_name: "Faire Wholesale, Inc",
|
|
77
|
+
address1: "41 King Street West",
|
|
78
|
+
address2: "3rd Floor",
|
|
79
|
+
city: "Kitchener",
|
|
80
|
+
state: "Ontario",
|
|
81
|
+
state_code: "ON",
|
|
82
|
+
postal_code: "N2G 1A1",
|
|
83
|
+
country: "Canada",
|
|
84
|
+
country_code: "CAN",
|
|
85
|
+
phone_number: "555-123-4567",
|
|
86
|
+
},
|
|
87
|
+
items: [
|
|
88
|
+
{
|
|
89
|
+
id: "oi_bq425ju5vh",
|
|
90
|
+
product_id: "p_fccaefnahr",
|
|
91
|
+
variant_id: "po_3745tjzrpc",
|
|
92
|
+
sku: "goldenretriever",
|
|
93
|
+
quantity: 2,
|
|
94
|
+
product_name: "Golden Dog",
|
|
95
|
+
price: { amount_minor: 4999, currency: "USD" },
|
|
96
|
+
},
|
|
97
|
+
],
|
|
98
|
+
payout_costs: { total_payout: { amount_minor: 8000, currency: "USD" } },
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
const mapped = mapFaireOrderToOrder(order)
|
|
102
|
+
|
|
103
|
+
expect(mapped.order_token).toBe("bo_bxdmjbwxid")
|
|
104
|
+
expect(mapped.currency_code).toBe("usd")
|
|
105
|
+
// no order-level total → sum of line values: 49.99 × 2
|
|
106
|
+
expect(mapped.total).toBe(99.98)
|
|
107
|
+
expect(mapped.buyer_name).toBe("John Smith")
|
|
108
|
+
expect(mapped.shipping_address).toMatchObject({
|
|
109
|
+
first_name: "John",
|
|
110
|
+
last_name: "Smith",
|
|
111
|
+
company: "Faire Wholesale, Inc",
|
|
112
|
+
address_1: "41 King Street West",
|
|
113
|
+
address_2: "3rd Floor",
|
|
114
|
+
city: "Kitchener",
|
|
115
|
+
province: "ON",
|
|
116
|
+
postal_code: "N2G 1A1",
|
|
117
|
+
country_code: "ca", // ISO-3 CAN → ISO-2 ca
|
|
118
|
+
phone: "555-123-4567",
|
|
119
|
+
})
|
|
120
|
+
expect(mapped.items[0]).toMatchObject({
|
|
121
|
+
title: "Golden Dog",
|
|
122
|
+
quantity: 2,
|
|
123
|
+
unit_price: 49.99,
|
|
124
|
+
})
|
|
125
|
+
expect(mapped.items[0].metadata).toMatchObject({
|
|
126
|
+
faire_product_token: "p_fccaefnahr",
|
|
127
|
+
faire_variant_id: "po_3745tjzrpc",
|
|
128
|
+
faire_sku: "goldenretriever",
|
|
129
|
+
})
|
|
130
|
+
})
|
|
131
|
+
|
|
69
132
|
it("uses buyer email when provided", () => {
|
|
70
133
|
const mapped = mapFaireOrderToOrder({
|
|
71
134
|
order_token: "o_2",
|