@jytextiles/medusa-plugin-faire-store-sync 0.1.0 → 0.2.1
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 +126 -0
- package/.medusa/server/src/admin/index.js +5 -0
- package/.medusa/server/src/admin/index.mjs +5 -0
- package/.medusa/server/src/api/admin/faire/auth/api-key/route.js +26 -0
- package/.medusa/server/src/api/admin/faire/ingest/orders/route.js +5 -4
- package/.medusa/server/src/api/admin/faire/products/route.js +18 -5
- package/.medusa/server/src/jobs/pull-faire-orders.js +8 -5
- package/.medusa/server/src/lib/faire-client.js +144 -71
- package/.medusa/server/src/lib/types.js +7 -6
- package/.medusa/server/src/modules/faire-sync/migrations/Migration20260708000000.js +14 -0
- package/.medusa/server/src/modules/faire-sync/models/faire-sync-settings.js +3 -1
- package/.medusa/server/src/modules/faire-sync/service.js +51 -4
- package/.medusa/server/src/workflows/ingest-faire-orders-bulk.js +25 -6
- package/README.md +7 -33
- package/package.json +1 -1
- package/src/__tests__/faire-client.spec.ts +138 -0
- package/src/admin/lib/api.ts +7 -1
- package/src/api/admin/faire/auth/api-key/route.ts +29 -0
- package/src/api/admin/faire/ingest/orders/route.ts +7 -3
- package/src/api/admin/faire/products/route.ts +18 -4
- package/src/jobs/pull-faire-orders.ts +7 -4
- package/src/lib/faire-client.ts +190 -93
- package/src/lib/types.ts +39 -16
- package/src/modules/faire-sync/migrations/Migration20260708000000.ts +13 -0
- package/src/modules/faire-sync/models/faire-sync-settings.ts +2 -0
- package/src/modules/faire-sync/service.ts +60 -4
- package/src/workflows/ingest-faire-orders-bulk.ts +36 -10
- package/.medusa/server/src/__tests__/webhook.spec.js +0 -77
- package/.medusa/server/src/api/webhooks/faire/route.js +0 -125
- package/.medusa/server/src/lib/webhook.js +0 -58
- package/.medusa/server/src/subscribers/faire-inventory-sync.js +0 -87
- package/.medusa/server/src/subscribers/faire-listing-events.js +0 -46
- package/.medusa/server/src/subscribers/faire-order-ingest.js +0 -54
- package/.medusa/server/src/subscribers/faire-order-lifecycle.js +0 -71
- package/src/__tests__/webhook.spec.ts +0 -81
- package/src/api/webhooks/faire/route.ts +0 -133
- package/src/lib/webhook.ts +0 -85
- package/src/subscribers/faire-inventory-sync.ts +0 -97
- package/src/subscribers/faire-listing-events.ts +0 -48
- package/src/subscribers/faire-order-ingest.ts +0 -61
- package/src/subscribers/faire-order-lifecycle.ts +0 -81
|
@@ -0,0 +1,126 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const faire_client_1 = require("../lib/faire-client");
|
|
4
|
+
const types_1 = require("../lib/types");
|
|
5
|
+
// Capture the last fetch call (url, init).
|
|
6
|
+
let lastUrl;
|
|
7
|
+
let lastInit;
|
|
8
|
+
const fetchMock = jest.fn(async (url, init) => {
|
|
9
|
+
lastUrl = url;
|
|
10
|
+
lastInit = init;
|
|
11
|
+
return {
|
|
12
|
+
ok: true,
|
|
13
|
+
status: 200,
|
|
14
|
+
headers: new Map(),
|
|
15
|
+
text: async () => JSON.stringify({ access_token: "tok", brand_id: "b_1", name: "Acme" }),
|
|
16
|
+
};
|
|
17
|
+
});
|
|
18
|
+
global.fetch = fetchMock;
|
|
19
|
+
const oauthOpts = {
|
|
20
|
+
authMode: "oauth",
|
|
21
|
+
clientId: "app_123",
|
|
22
|
+
clientSecret: "secret_456",
|
|
23
|
+
redirectUri: "https://shop.test/app/settings/oauth/faire/callback",
|
|
24
|
+
};
|
|
25
|
+
describe("FaireClient — issue #952 corrections", () => {
|
|
26
|
+
beforeEach(() => fetchMock.mockClear());
|
|
27
|
+
it("uses the verified base / auth / token URLs by default", () => {
|
|
28
|
+
const c = new faire_client_1.FaireClient({});
|
|
29
|
+
// defaults are exported from types and consumed verbatim
|
|
30
|
+
expect(types_1.DEFAULT_API_BASE).toBe("https://faire.com/external-api/v2");
|
|
31
|
+
expect(types_1.DEFAULT_AUTH_URL).toBe("https://faire.com/oauth2/authorize");
|
|
32
|
+
expect(types_1.DEFAULT_TOKEN_URL).toBe("https://www.faire.com/api/external-api-oauth2/token");
|
|
33
|
+
});
|
|
34
|
+
it("builds the authorize URL with Faire's applicationId/redirectUrl params", () => {
|
|
35
|
+
const c = new faire_client_1.FaireClient(oauthOpts);
|
|
36
|
+
const url = new URL(c.getAuthorizationUrl("state-abc"));
|
|
37
|
+
expect(url.origin + url.pathname).toBe("https://faire.com/oauth2/authorize");
|
|
38
|
+
expect(url.searchParams.get("applicationId")).toBe("app_123");
|
|
39
|
+
expect(url.searchParams.get("redirectUrl")).toBe(oauthOpts.redirectUri);
|
|
40
|
+
expect(url.searchParams.get("state")).toBe("state-abc");
|
|
41
|
+
// MUST NOT use RFC-6749 client_id/redirect_uri
|
|
42
|
+
expect(url.searchParams.has("client_id")).toBe(false);
|
|
43
|
+
expect(url.searchParams.has("redirect_uri")).toBe(false);
|
|
44
|
+
});
|
|
45
|
+
it("exchanges code with a NON-RFC-6749 JSON body", async () => {
|
|
46
|
+
const c = new faire_client_1.FaireClient(oauthOpts);
|
|
47
|
+
await c.exchangeCodeForToken("code_xyz");
|
|
48
|
+
expect(lastUrl).toBe(types_1.DEFAULT_TOKEN_URL);
|
|
49
|
+
expect(lastInit.method).toBe("POST");
|
|
50
|
+
expect(lastInit.headers["Content-Type"]).toBe("application/json");
|
|
51
|
+
const body = JSON.parse(lastInit.body);
|
|
52
|
+
expect(body).toMatchObject({
|
|
53
|
+
application_token: "app_123",
|
|
54
|
+
application_secret: "secret_456",
|
|
55
|
+
authorization_code: "code_xyz",
|
|
56
|
+
grant_type: "AUTHORIZATION_CODE",
|
|
57
|
+
redirect_url: oauthOpts.redirectUri,
|
|
58
|
+
});
|
|
59
|
+
expect(body.scope).toEqual([]);
|
|
60
|
+
// MUST NOT send RFC-6749 fields
|
|
61
|
+
expect(body.client_id).toBeUndefined();
|
|
62
|
+
expect(body.client_secret).toBeUndefined();
|
|
63
|
+
});
|
|
64
|
+
it("sends OAuth auth headers (X-FAIRE-OAUTH-ACCESS-TOKEN + APP-CREDENTIALS), never Bearer", async () => {
|
|
65
|
+
const c = new faire_client_1.FaireClient(oauthOpts);
|
|
66
|
+
await c.getBrand("access-tok");
|
|
67
|
+
expect(lastUrl).toBe(`${types_1.DEFAULT_API_BASE}/brands/profile`);
|
|
68
|
+
expect(lastInit.headers["X-FAIRE-OAUTH-ACCESS-TOKEN"]).toBe("access-tok");
|
|
69
|
+
const expectedCreds = Buffer.from("app_123:secret_456").toString("base64");
|
|
70
|
+
expect(lastInit.headers["X-FAIRE-APP-CREDENTIALS"]).toBe(expectedCreds);
|
|
71
|
+
expect(lastInit.headers["Authorization"]).toBeUndefined();
|
|
72
|
+
});
|
|
73
|
+
it("sends API-key auth header (X-FAIRE-ACCESS-TOKEN) in apiKey mode", async () => {
|
|
74
|
+
const c = new faire_client_1.FaireClient({ authMode: "apiKey", accessToken: "key_abc" });
|
|
75
|
+
// In apiKey mode the stored account access_token IS the api key.
|
|
76
|
+
await c.getBrand("key_abc");
|
|
77
|
+
expect(lastInit.headers["X-FAIRE-ACCESS-TOKEN"]).toBe("key_abc");
|
|
78
|
+
expect(lastInit.headers["X-FAIRE-OAUTH-ACCESS-TOKEN"]).toBeUndefined();
|
|
79
|
+
expect(lastInit.headers["Authorization"]).toBeUndefined();
|
|
80
|
+
});
|
|
81
|
+
it("hits /brands/profile (NOT /brand)", async () => {
|
|
82
|
+
const c = new faire_client_1.FaireClient(oauthOpts);
|
|
83
|
+
await c.getBrand("t");
|
|
84
|
+
expect(lastUrl).toBe(`${types_1.DEFAULT_API_BASE}/brands/profile`);
|
|
85
|
+
});
|
|
86
|
+
it("pushes inventory via PATCH /product-inventory/by-skus (not GET /inventory)", async () => {
|
|
87
|
+
const c = new faire_client_1.FaireClient(oauthOpts);
|
|
88
|
+
await c.updateInventory("t", [{ sku: "S1", current_count: 7 }]);
|
|
89
|
+
expect(lastInit.method).toBe("PATCH");
|
|
90
|
+
expect(lastUrl).toBe(`${types_1.DEFAULT_API_BASE}/product-inventory/by-skus`);
|
|
91
|
+
expect(JSON.parse(lastInit.body)).toEqual({
|
|
92
|
+
inventories: [{ sku: "S1", current_count: 7 }],
|
|
93
|
+
});
|
|
94
|
+
});
|
|
95
|
+
it("lists orders with cursor page + updated_at_min", async () => {
|
|
96
|
+
const c = new faire_client_1.FaireClient(oauthOpts);
|
|
97
|
+
await c.listOrders("t", { page: "cursor-xyz", updated_at_min: "2026-01-01T00:00:00Z" });
|
|
98
|
+
const url = new URL(lastUrl);
|
|
99
|
+
expect(url.pathname).toBe("/external-api/v2/orders");
|
|
100
|
+
expect(url.searchParams.get("page")).toBe("cursor-xyz");
|
|
101
|
+
expect(url.searchParams.get("updated_at_min")).toBe("2026-01-01T00:00:00Z");
|
|
102
|
+
});
|
|
103
|
+
it("posts order processing (PUT) and shipments (POST) on the right paths", async () => {
|
|
104
|
+
const c = new faire_client_1.FaireClient(oauthOpts);
|
|
105
|
+
await c.setOrderProcessing("t", "o_1", { accepted: true });
|
|
106
|
+
expect(lastInit.method).toBe("PUT");
|
|
107
|
+
expect(lastUrl).toBe(`${types_1.DEFAULT_API_BASE}/orders/o_1/processing`);
|
|
108
|
+
await c.createOrderShipment("t", "o_1", { carrier: "UPS", tracking: "1Z" });
|
|
109
|
+
expect(lastInit.method).toBe("POST");
|
|
110
|
+
expect(lastUrl).toBe(`${types_1.DEFAULT_API_BASE}/orders/o_1/shipments`);
|
|
111
|
+
});
|
|
112
|
+
it("surfaces 401 as FaireApiError", async () => {
|
|
113
|
+
fetchMock.mockImplementationOnce(async () => ({
|
|
114
|
+
ok: false,
|
|
115
|
+
status: 401,
|
|
116
|
+
headers: new Map(),
|
|
117
|
+
text: async () => "",
|
|
118
|
+
}));
|
|
119
|
+
const c = new faire_client_1.FaireClient(oauthOpts);
|
|
120
|
+
await expect(c.getBrand("t")).rejects.toMatchObject({
|
|
121
|
+
name: "FaireApiError",
|
|
122
|
+
status: 401,
|
|
123
|
+
});
|
|
124
|
+
});
|
|
125
|
+
});
|
|
126
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmFpcmUtY2xpZW50LnNwZWMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvX190ZXN0c19fL2ZhaXJlLWNsaWVudC5zcGVjLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBQUEsc0RBQWdFO0FBQ2hFLHdDQUFvRjtBQUVwRiwyQ0FBMkM7QUFDM0MsSUFBSSxPQUFlLENBQUE7QUFDbkIsSUFBSSxRQUFhLENBQUE7QUFDakIsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQyxLQUFLLEVBQUUsR0FBVyxFQUFFLElBQVMsRUFBRSxFQUFFO0lBQ3pELE9BQU8sR0FBRyxHQUFHLENBQUE7SUFDYixRQUFRLEdBQUcsSUFBSSxDQUFBO0lBQ2YsT0FBTztRQUNMLEVBQUUsRUFBRSxJQUFJO1FBQ1IsTUFBTSxFQUFFLEdBQUc7UUFDWCxPQUFPLEVBQUUsSUFBSSxHQUFHLEVBQUU7UUFDbEIsSUFBSSxFQUFFLEtBQUssSUFBSSxFQUFFLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLENBQUM7S0FDbEYsQ0FBQTtBQUNWLENBQUMsQ0FBQyxDQUVEO0FBQUMsTUFBYyxDQUFDLEtBQUssR0FBRyxTQUFTLENBQUE7QUFFbEMsTUFBTSxTQUFTLEdBQUc7SUFDaEIsUUFBUSxFQUFFLE9BQWdCO0lBQzFCLFFBQVEsRUFBRSxTQUFTO0lBQ25CLFlBQVksRUFBRSxZQUFZO0lBQzFCLFdBQVcsRUFBRSxxREFBcUQ7Q0FDbkUsQ0FBQTtBQUVELFFBQVEsQ0FBQyxzQ0FBc0MsRUFBRSxHQUFHLEVBQUU7SUFDcEQsVUFBVSxDQUFDLEdBQUcsRUFBRSxDQUFDLFNBQVMsQ0FBQyxTQUFTLEVBQUUsQ0FBQyxDQUFBO0lBRXZDLEVBQUUsQ0FBQyx1REFBdUQsRUFBRSxHQUFHLEVBQUU7UUFDL0QsTUFBTSxDQUFDLEdBQUcs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
|
|
@@ -29,6 +29,10 @@ const faireApi = {
|
|
|
29
29
|
method: "POST",
|
|
30
30
|
body: { code, state }
|
|
31
31
|
}),
|
|
32
|
+
connectApiKey: (access_token) => sdk.client.fetch("/admin/faire/auth/api-key", {
|
|
33
|
+
method: "POST",
|
|
34
|
+
body: { access_token }
|
|
35
|
+
}),
|
|
32
36
|
disconnect: () => sdk.client.fetch("/admin/faire/auth/disconnect", { method: "POST" }),
|
|
33
37
|
syncProduct: (id) => sdk.client.fetch(`/admin/faire/sync/product/${id}`, { method: "POST" }),
|
|
34
38
|
productStatus: (id) => sdk.client.fetch(`/admin/faire/status/product/${id}`),
|
|
@@ -63,6 +67,7 @@ const faireApi = {
|
|
|
63
67
|
const query = {};
|
|
64
68
|
if (opts.limit !== void 0) query.limit = String(opts.limit);
|
|
65
69
|
if (opts.page !== void 0) query.page = String(opts.page);
|
|
70
|
+
if (opts.updated_at_min !== void 0) query.updated_at_min = opts.updated_at_min;
|
|
66
71
|
return sdk.client.fetch("/admin/faire/products", { query });
|
|
67
72
|
}
|
|
68
73
|
};
|
|
@@ -26,6 +26,10 @@ const faireApi = {
|
|
|
26
26
|
method: "POST",
|
|
27
27
|
body: { code, state }
|
|
28
28
|
}),
|
|
29
|
+
connectApiKey: (access_token) => sdk.client.fetch("/admin/faire/auth/api-key", {
|
|
30
|
+
method: "POST",
|
|
31
|
+
body: { access_token }
|
|
32
|
+
}),
|
|
29
33
|
disconnect: () => sdk.client.fetch("/admin/faire/auth/disconnect", { method: "POST" }),
|
|
30
34
|
syncProduct: (id) => sdk.client.fetch(`/admin/faire/sync/product/${id}`, { method: "POST" }),
|
|
31
35
|
productStatus: (id) => sdk.client.fetch(`/admin/faire/status/product/${id}`),
|
|
@@ -60,6 +64,7 @@ const faireApi = {
|
|
|
60
64
|
const query = {};
|
|
61
65
|
if (opts.limit !== void 0) query.limit = String(opts.limit);
|
|
62
66
|
if (opts.page !== void 0) query.page = String(opts.page);
|
|
67
|
+
if (opts.updated_at_min !== void 0) query.updated_at_min = opts.updated_at_min;
|
|
63
68
|
return sdk.client.fetch("/admin/faire/products", { query });
|
|
64
69
|
}
|
|
65
70
|
};
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.POST = void 0;
|
|
4
|
+
const utils_1 = require("@medusajs/framework/utils");
|
|
5
|
+
const faire_sync_1 = require("../../../../../modules/faire-sync");
|
|
6
|
+
// POST /admin/faire/auth/api-key — connect a Faire account in API-key
|
|
7
|
+
// (single-merchant) mode. Body: { access_token }. Fetches the brand profile
|
|
8
|
+
// with the supplied token and persists the account.
|
|
9
|
+
const POST = async (req, res) => {
|
|
10
|
+
const { access_token } = req.body;
|
|
11
|
+
if (!access_token) {
|
|
12
|
+
throw new utils_1.MedusaError(utils_1.MedusaError.Types.INVALID_DATA, "access_token is required");
|
|
13
|
+
}
|
|
14
|
+
const service = req.scope.resolve(faire_sync_1.FAIRE_SYNC_MODULE);
|
|
15
|
+
const { account, brand } = await service.connectWithApiKey(access_token);
|
|
16
|
+
res.json({
|
|
17
|
+
account: {
|
|
18
|
+
id: account.id,
|
|
19
|
+
brand_id: account.brand_id,
|
|
20
|
+
brand_name: account.brand_name,
|
|
21
|
+
},
|
|
22
|
+
brand,
|
|
23
|
+
});
|
|
24
|
+
};
|
|
25
|
+
exports.POST = POST;
|
|
26
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm91dGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBpL2FkbWluL2ZhaXJlL2F1dGgvYXBpLWtleS9yb3V0ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFDQSxxREFBdUQ7QUFDdkQsa0VBQXFFO0FBR3JFLHNFQUFzRTtBQUN0RSw0RUFBNEU7QUFDNUUsb0RBQW9EO0FBQzdDLE1BQU0sSUFBSSxHQUFHLEtBQUssRUFBRSxHQUFrQixFQUFFLEdBQW1CLEVBQUUsRUFBRTtJQUNwRSxNQUFNLEVBQUUsWUFBWSxFQUFFLEdBQUcsR0FBRyxDQUFDLElBQWlDLENBQUE7SUFDOUQsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO1FBQ2xCLE1BQU0sSUFBSSxtQkFBVyxDQUNuQixtQkFBVyxDQUFDLEtBQUssQ0FBQyxZQUFZLEVBQzlCLDBCQUEwQixDQUMzQixDQUFBO0lBQ0gsQ0FBQztJQUVELE1BQU0sT0FBTyxHQUFxQixHQUFHLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyw4QkFBaUIsQ0FBQyxDQUFBO0lBQ3RFLE1BQU0sRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLEdBQUcsTUFBTSxPQUFPLENBQUMsaUJBQWlCLENBQUMsWUFBWSxDQUFDLENBQUE7SUFFeEUsR0FBRyxDQUFDLElBQUksQ0FBQztRQUNQLE9BQU8sRUFBRTtZQUNQLEVBQUUsRUFBRyxPQUFlLENBQUMsRUFBRTtZQUN2QixRQUFRLEVBQUcsT0FBZSxDQUFDLFFBQVE7WUFDbkMsVUFBVSxFQUFHLE9BQWUsQ0FBQyxVQUFVO1NBQ3hDO1FBQ0QsS0FBSztLQUNOLENBQUMsQ0FBQTtBQUNKLENBQUMsQ0FBQTtBQXBCWSxRQUFBLElBQUksUUFvQmhCIn0=
|
|
@@ -4,17 +4,18 @@ exports.POST = void 0;
|
|
|
4
4
|
const utils_1 = require("@medusajs/framework/utils");
|
|
5
5
|
const ingest_faire_orders_bulk_1 = require("../../../../../workflows/ingest-faire-orders-bulk");
|
|
6
6
|
// POST /admin/faire/ingest/orders — pull Faire orders and create Medusa orders
|
|
7
|
-
// for them.
|
|
8
|
-
// client can poll at
|
|
7
|
+
// for them. Faire is polled (no webhooks); runs as a long-running background
|
|
8
|
+
// workflow and returns a batch id the client can poll at
|
|
9
|
+
// GET /admin/faire/ingest/orders/:batchId.
|
|
9
10
|
const POST = async (req, res) => {
|
|
10
11
|
const limit = req.body?.limit;
|
|
11
12
|
if (limit != null && (!Number.isFinite(limit) || limit <= 0)) {
|
|
12
13
|
throw new utils_1.MedusaError(utils_1.MedusaError.Types.INVALID_DATA, "limit must be a positive number");
|
|
13
14
|
}
|
|
14
15
|
const { result } = await (0, ingest_faire_orders_bulk_1.ingestFaireOrdersBulkWorkflow)(req.scope).run({
|
|
15
|
-
input: { limit },
|
|
16
|
+
input: { limit, updated_at_min: req.body?.updated_at_min },
|
|
16
17
|
});
|
|
17
18
|
res.status(202).json({ batch_id: result.batch_id, status: "processing" });
|
|
18
19
|
};
|
|
19
20
|
exports.POST = POST;
|
|
20
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
21
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm91dGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBpL2FkbWluL2ZhaXJlL2luZ2VzdC9vcmRlcnMvcm91dGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQ0EscURBQXVEO0FBQ3ZELGdHQUFpRztBQVNqRywrRUFBK0U7QUFDL0UsNkVBQTZFO0FBQzdFLHlEQUF5RDtBQUN6RCwyQ0FBMkM7QUFDcEMsTUFBTSxJQUFJLEdBQUcsS0FBSyxFQUN2QixHQUFvQyxFQUNwQyxHQUFtQixFQUNuQixFQUFFO0lBQ0YsTUFBTSxLQUFLLEdBQUcsR0FBRyxDQUFDLElBQUksRUFBRSxLQUFLLENBQUE7SUFDN0IsSUFBSSxLQUFLLElBQUksSUFBSSxJQUFJLENBQUMsQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxJQUFJLEtBQUssSUFBSSxDQUFDLENBQUMsRUFBRSxDQUFDO1FBQzdELE1BQU0sSUFBSSxtQkFBVyxDQUNuQixtQkFBVyxDQUFDLEtBQUssQ0FBQyxZQUFZLEVBQzlCLGlDQUFpQyxDQUNsQyxDQUFBO0lBQ0gsQ0FBQztJQUVELE1BQU0sRUFBRSxNQUFNLEVBQUUsR0FBRyxNQUFNLElBQUEsd0RBQTZCLEVBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDLEdBQUcsQ0FBQztRQUNwRSxLQUFLLEVBQUUsRUFBRSxLQUFLLEVBQUUsY0FBYyxFQUFFLEdBQUcsQ0FBQyxJQUFJLEVBQUUsY0FBYyxFQUFFO0tBQzNELENBQUMsQ0FBQTtJQUVGLEdBQUcsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLEVBQUUsUUFBUSxFQUFHLE1BQWMsQ0FBQyxRQUFRLEVBQUUsTUFBTSxFQUFFLFlBQVksRUFBRSxDQUFDLENBQUE7QUFDcEYsQ0FBQyxDQUFBO0FBakJZLFFBQUEsSUFBSSxRQWlCaEIifQ==
|
|
@@ -2,15 +2,28 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.GET = void 0;
|
|
4
4
|
const faire_sync_1 = require("../../../../modules/faire-sync");
|
|
5
|
-
// GET /admin/faire/products — list products already on Faire (paginated)
|
|
5
|
+
// GET /admin/faire/products — list products already on Faire (cursor-paginated).
|
|
6
|
+
// `page` is an opaque cursor returned by the previous response's `next_page`,
|
|
7
|
+
// NOT a 1-based index. Optional `updated_at_min` filters to changed products.
|
|
6
8
|
const GET = async (req, res) => {
|
|
7
9
|
const service = req.scope.resolve(faire_sync_1.FAIRE_SYNC_MODULE);
|
|
8
10
|
const account = await service.ensureFreshToken();
|
|
9
11
|
const client = service.getClient();
|
|
10
12
|
const limit = Number(req.query.limit) || 50;
|
|
11
|
-
const page = req.query.page ?
|
|
12
|
-
const
|
|
13
|
-
|
|
13
|
+
const page = typeof req.query.page === "string" ? req.query.page : undefined;
|
|
14
|
+
const updated_at_min = typeof req.query.updated_at_min === "string"
|
|
15
|
+
? req.query.updated_at_min
|
|
16
|
+
: undefined;
|
|
17
|
+
const data = await client.listProducts(account.access_token, {
|
|
18
|
+
limit,
|
|
19
|
+
page,
|
|
20
|
+
updated_at_min,
|
|
21
|
+
});
|
|
22
|
+
res.json({
|
|
23
|
+
products: data.results,
|
|
24
|
+
count: data.count,
|
|
25
|
+
next_page: data.next_page,
|
|
26
|
+
});
|
|
14
27
|
};
|
|
15
28
|
exports.GET = GET;
|
|
16
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
29
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm91dGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBpL2FkbWluL2ZhaXJlL3Byb2R1Y3RzL3JvdXRlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUNBLCtEQUFrRTtBQUdsRSxpRkFBaUY7QUFDakYsOEVBQThFO0FBQzlFLDhFQUE4RTtBQUN2RSxNQUFNLEdBQUcsR0FBRyxLQUFLLEVBQUUsR0FBa0IsRUFBRSxHQUFtQixFQUFFLEVBQUU7SUFDbkUsTUFBTSxPQUFPLEdBQXFCLEdBQUcsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLDhCQUFpQixDQUFDLENBQUE7SUFDdEUsTUFBTSxPQUFPLEdBQUcsTUFBTSxPQUFPLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQTtJQUNoRCxNQUFNLE1BQU0sR0FBRyxPQUFPLENBQUMsU0FBUyxFQUFFLENBQUE7SUFDbEMsTUFBTSxLQUFLLEdBQUcsTUFBTSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLElBQUksRUFBRSxDQUFBO0lBQzNDLE1BQU0sSUFBSSxHQUFHLE9BQU8sR0FBRyxDQUFDLEtBQUssQ0FBQyxJQUFJLEtBQUssUUFBUSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFBO0lBQzVFLE1BQU0sY0FBYyxHQUNsQixPQUFPLEdBQUcsQ0FBQyxLQUFLLENBQUMsY0FBYyxLQUFLLFFBQVE7UUFDMUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsY0FBYztRQUMxQixDQUFDLENBQUMsU0FBUyxDQUFBO0lBQ2YsTUFBTSxJQUFJLEdBQUcsTUFBTSxNQUFNLENBQUMsWUFBWSxDQUFDLE9BQU8sQ0FBQyxZQUFZLEVBQUU7UUFDM0QsS0FBSztRQUNMLElBQUk7UUFDSixjQUFjO0tBQ2YsQ0FBQyxDQUFBO0lBQ0YsR0FBRyxDQUFDLElBQUksQ0FBQztRQUNQLFFBQVEsRUFBRSxJQUFJLENBQUMsT0FBTztRQUN0QixLQUFLLEVBQUUsSUFBSSxDQUFDLEtBQUs7UUFDakIsU0FBUyxFQUFFLElBQUksQ0FBQyxTQUFTO0tBQzFCLENBQUMsQ0FBQTtBQUNKLENBQUMsQ0FBQTtBQXBCWSxRQUFBLEdBQUcsT0FvQmYifQ==
|
|
@@ -5,9 +5,12 @@ exports.default = pullFaireOrdersJob;
|
|
|
5
5
|
const faire_sync_1 = require("../modules/faire-sync");
|
|
6
6
|
const ingest_faire_orders_bulk_1 = require("../workflows/ingest-faire-orders-bulk");
|
|
7
7
|
/**
|
|
8
|
-
* Scheduled pull of
|
|
9
|
-
*
|
|
10
|
-
*
|
|
8
|
+
* Scheduled incremental pull of Faire orders.
|
|
9
|
+
*
|
|
10
|
+
* Faire is POLLING, not webhooks — there is no inbound delivery. This job runs
|
|
11
|
+
* the bulk order-ingestion workflow, which fetches only orders changed since
|
|
12
|
+
* the persisted `last_order_sync_at` high-water mark (cursor-based). Cadence is
|
|
13
|
+
* every 5 minutes (Faire's own WooCommerce plugin polls on a similar interval).
|
|
11
14
|
*
|
|
12
15
|
* Disable by setting FAIRE_AUTO_INGEST_ORDERS=false.
|
|
13
16
|
*/
|
|
@@ -27,6 +30,6 @@ async function pullFaireOrdersJob(container) {
|
|
|
27
30
|
}
|
|
28
31
|
exports.config = {
|
|
29
32
|
name: "faire-pull-orders",
|
|
30
|
-
schedule: "*/
|
|
33
|
+
schedule: "*/5 * * * *", // every 5 minutes (polling model)
|
|
31
34
|
};
|
|
32
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
35
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVsbC1mYWlyZS1vcmRlcnMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvam9icy9wdWxsLWZhaXJlLW9yZGVycy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFlQSxxQ0FZQztBQTFCRCxzREFBeUQ7QUFFekQsb0ZBQXFGO0FBRXJGOzs7Ozs7Ozs7R0FTRztBQUNZLEtBQUssVUFBVSxrQkFBa0IsQ0FBQyxTQUEwQjtJQUN6RSxJQUFJLE9BQU8sQ0FBQyxHQUFHLENBQUMsd0JBQXdCLEtBQUssT0FBTztRQUFFLE9BQU07SUFFNUQsTUFBTSxPQUFPLEdBQXFCLFNBQVMsQ0FBQyxPQUFPLENBQUMsOEJBQWlCLENBQUMsQ0FBQTtJQUN0RSxNQUFNLE9BQU8sR0FBRyxNQUFNLE9BQU8sQ0FBQyxnQkFBZ0IsRUFBRSxDQUFBO0lBQ2hELElBQUksQ0FBQyxPQUFPO1FBQUUsT0FBTTtJQUVwQixJQUFJLENBQUM7UUFDSCxNQUFNLElBQUEsd0RBQTZCLEVBQUMsU0FBUyxDQUFDLENBQUMsR0FBRyxDQUFDLEVBQUUsS0FBSyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUE7SUFDbkUsQ0FBQztJQUFDLE9BQU8sR0FBUSxFQUFFLENBQUM7UUFDbEIsT0FBTyxDQUFDLEtBQUssQ0FBQywyQ0FBMkMsRUFBRSxHQUFHLENBQUMsT0FBTyxDQUFDLENBQUE7SUFDekUsQ0FBQztBQUNILENBQUM7QUFFWSxRQUFBLE1BQU0sR0FBRztJQUNwQixJQUFJLEVBQUUsbUJBQW1CO0lBQ3pCLFFBQVEsRUFBRSxhQUFhLEVBQUUsa0NBQWtDO0NBQzVELENBQUEifQ==
|