@legenki/print2medusa 0.9.3 → 0.9.5
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/api/hooks/printful/[token]/route.js +21 -14
- package/.medusa/server/src/modules/printful/migrations/Migration20260807000000.js +31 -0
- package/.medusa/server/src/modules/printful/models/printful-order-link.js +13 -1
- package/.medusa/server/src/modules/printful/service.js +36 -12
- package/.medusa/server/src/subscribers/printful-webhook.js +25 -0
- package/.medusa/server/src/utils/errors.js +20 -1
- package/.medusa/server/src/utils/order-idempotency.js +56 -0
- package/.medusa/server/src/utils/printful-client.js +22 -1
- package/.medusa/server/src/utils/webhook-events.js +9 -2
- package/.medusa/server/src/workflows/create-printful-order.js +128 -7
- package/.medusa/server/src/workflows/sync-products.js +364 -267
- package/package.json +1 -1
|
@@ -1,27 +1,114 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.createPrintfulOrderWorkflow = void 0;
|
|
4
|
+
exports.reconcileClaim = reconcileClaim;
|
|
4
5
|
const workflows_sdk_1 = require("@medusajs/framework/workflows-sdk");
|
|
5
6
|
const utils_1 = require("@medusajs/framework/utils");
|
|
6
7
|
const printful_1 = require("../modules/printful");
|
|
8
|
+
const service_1 = require("../modules/printful/service");
|
|
9
|
+
const errors_1 = require("../utils/errors");
|
|
10
|
+
const order_idempotency_1 = require("../utils/order-idempotency");
|
|
7
11
|
const mappers_1 = require("../utils/mappers");
|
|
8
12
|
const costs_1 = require("../utils/costs");
|
|
9
13
|
const shipping_rates_1 = require("../utils/shipping-rates");
|
|
10
14
|
const bundle_1 = require("../utils/bundle");
|
|
15
|
+
/**
|
|
16
|
+
* Settle a claim whose create attempt ended with an unknown outcome.
|
|
17
|
+
*
|
|
18
|
+
* `external_id` is the idempotency key: it is stamped on every order we
|
|
19
|
+
* create, and Printful guarantees it unique per store, so looking it up is the
|
|
20
|
+
* one way to learn whether an order exists without risking a second one.
|
|
21
|
+
*
|
|
22
|
+
* Idempotent by construction — two concurrent recoveries read the same order
|
|
23
|
+
* and write the same id onto the same row.
|
|
24
|
+
*/
|
|
25
|
+
async function reconcileClaim(args) {
|
|
26
|
+
const { printful, client, logger, medusaOrderId, claimId, cause } = args;
|
|
27
|
+
let order;
|
|
28
|
+
try {
|
|
29
|
+
order = await client.getOrderByExternalId(medusaOrderId);
|
|
30
|
+
}
|
|
31
|
+
catch (lookupErr) {
|
|
32
|
+
if (lookupErr instanceof errors_1.PrintfulApiError && lookupErr.status === 404) {
|
|
33
|
+
// Printful is authoritative here: the order was never created.
|
|
34
|
+
await printful.deletePrintfulOrderLinks(claimId);
|
|
35
|
+
return { status: "released" };
|
|
36
|
+
}
|
|
37
|
+
// The lookup itself failed, so the create's outcome is still unknown. Keep
|
|
38
|
+
// the claim: a stalled order someone can see and fix is a smaller harm
|
|
39
|
+
// than one printed and shipped twice. Record why, so it is findable.
|
|
40
|
+
const detail = lookupErr instanceof Error ? lookupErr.message : String(lookupErr);
|
|
41
|
+
await printful
|
|
42
|
+
.updatePrintfulOrderLinks({
|
|
43
|
+
id: claimId,
|
|
44
|
+
status: "unverified",
|
|
45
|
+
error_message: `create outcome unknown (${cause instanceof Error ? cause.message : String(cause)}); verification failed: ${detail}`.slice(0, 1000),
|
|
46
|
+
last_attempt_at: new Date(),
|
|
47
|
+
})
|
|
48
|
+
.catch(() => {
|
|
49
|
+
// Best effort — the claim itself is what prevents the duplicate.
|
|
50
|
+
});
|
|
51
|
+
logger.error(`Printful: could not verify whether an order exists for ${medusaOrderId}; ` +
|
|
52
|
+
`holding the claim to prevent a duplicate. Lookup error: ${detail}`);
|
|
53
|
+
return { status: "held" };
|
|
54
|
+
}
|
|
55
|
+
await printful.updatePrintfulOrderLinks({
|
|
56
|
+
id: claimId,
|
|
57
|
+
printful_order_id: String(order.id),
|
|
58
|
+
status: order.status || "created",
|
|
59
|
+
error_message: null,
|
|
60
|
+
last_attempt_at: null,
|
|
61
|
+
});
|
|
62
|
+
return { status: "found", order };
|
|
63
|
+
}
|
|
11
64
|
const createPrintfulOrderStep = (0, workflows_sdk_1.createStep)("printful-create-order", async (input, { container }) => {
|
|
12
65
|
const printful = container.resolve(printful_1.PRINTFUL_MODULE);
|
|
13
66
|
const orderModule = container.resolve(utils_1.Modules.ORDER);
|
|
14
67
|
const logger = container.resolve(utils_1.ContainerRegistrationKeys.LOGGER);
|
|
15
68
|
const options = await printful.getOptions();
|
|
16
69
|
const client = await printful.getClient();
|
|
70
|
+
// A link with a real Printful order id means the work is done. A link
|
|
71
|
+
// still holding the `pending` sentinel does not: it is a claim from an
|
|
72
|
+
// attempt whose outcome was never established. Treating that as
|
|
73
|
+
// "already_linked" is what would strand such an order forever — nothing
|
|
74
|
+
// creates it, and nothing ever looks again.
|
|
17
75
|
const existing = await printful.findOrderLink(input.order_id);
|
|
18
|
-
if (existing) {
|
|
76
|
+
if (existing && !(0, order_idempotency_1.isUnresolvedLink)(existing, service_1.PENDING_PRINTFUL_ORDER_ID)) {
|
|
19
77
|
return new workflows_sdk_1.StepResponse({
|
|
20
78
|
skipped: true,
|
|
21
79
|
reason: "already_linked",
|
|
22
80
|
printful_order_id: existing.printful_order_id,
|
|
23
81
|
});
|
|
24
82
|
}
|
|
83
|
+
if (existing) {
|
|
84
|
+
// Recovery, not a second create: a claim is outstanding, so ask Printful
|
|
85
|
+
// whether the earlier attempt landed rather than POSTing again.
|
|
86
|
+
const recovered = await reconcileClaim({
|
|
87
|
+
printful,
|
|
88
|
+
client,
|
|
89
|
+
logger,
|
|
90
|
+
medusaOrderId: input.order_id,
|
|
91
|
+
claimId: existing.id,
|
|
92
|
+
cause: new Error("a previous create attempt left an unresolved claim"),
|
|
93
|
+
});
|
|
94
|
+
if (recovered.status === "found") {
|
|
95
|
+
return new workflows_sdk_1.StepResponse({
|
|
96
|
+
skipped: false,
|
|
97
|
+
printful_order_id: String(recovered.order.id),
|
|
98
|
+
status: recovered.order.status,
|
|
99
|
+
});
|
|
100
|
+
}
|
|
101
|
+
if (recovered.status === "held") {
|
|
102
|
+
// Still unknown — hold the claim and surface it. Retrying blindly is
|
|
103
|
+
// exactly what would duplicate the order.
|
|
104
|
+
return new workflows_sdk_1.StepResponse({
|
|
105
|
+
skipped: true,
|
|
106
|
+
reason: "unverified_claim",
|
|
107
|
+
});
|
|
108
|
+
}
|
|
109
|
+
// `released`: Printful confirmed no such order and the claim is gone, so
|
|
110
|
+
// fall through and create it properly below.
|
|
111
|
+
}
|
|
25
112
|
const order = await orderModule.retrieveOrder(input.order_id, {
|
|
26
113
|
// `shipping_methods` carries the `data` blob `validateFulfillmentData`
|
|
27
114
|
// recorded at selection, which is the only evidence on the order that
|
|
@@ -100,6 +187,14 @@ const createPrintfulOrderStep = (0, workflows_sdk_1.createStep)("printful-create
|
|
|
100
187
|
phone: addr.phone || undefined,
|
|
101
188
|
email: order.email || undefined,
|
|
102
189
|
};
|
|
190
|
+
if (order.id.length > 32) {
|
|
191
|
+
throw new Error(`Order ID ${order.id} is too long (${order.id.length} chars) to be used as a Printful external_id (max 32).`);
|
|
192
|
+
}
|
|
193
|
+
// Checked before the claim, not after: `external_id` is what makes a
|
|
194
|
+
// failed create recoverable, so an order id Printful cannot store as one
|
|
195
|
+
// must fail loudly here rather than reach the API and leave a claim that
|
|
196
|
+
// can never be reconciled.
|
|
197
|
+
(0, order_idempotency_1.assertUsableExternalId)(order.id);
|
|
103
198
|
// Insert-first: atomically claim the order before hitting the Printful API.
|
|
104
199
|
// Two concurrent payment.captured events cannot both pass this point — the
|
|
105
200
|
// unique index on medusa_order_id makes the loser return null → skip,
|
|
@@ -127,11 +222,37 @@ const createPrintfulOrderStep = (0, workflows_sdk_1.createStep)("printful-create
|
|
|
127
222
|
pfOrder = await client.createOrder(payload);
|
|
128
223
|
}
|
|
129
224
|
catch (err) {
|
|
130
|
-
//
|
|
131
|
-
//
|
|
132
|
-
//
|
|
133
|
-
|
|
134
|
-
|
|
225
|
+
// The claim is held until we know what became of the order. Releasing it
|
|
226
|
+
// unconditionally is only correct when the request never reached
|
|
227
|
+
// Printful; a create that timed out *after* Printful accepted it looks
|
|
228
|
+
// identical from here, and releasing on that path lets the next
|
|
229
|
+
// payment.captured print and ship the customer's item a second time.
|
|
230
|
+
if ((0, order_idempotency_1.classifyCreateFailure)(err) === "not_created") {
|
|
231
|
+
// Printful read the request and refused it — nothing exists to collide
|
|
232
|
+
// with. Free the claim so a retry can create the order.
|
|
233
|
+
await printful.deletePrintfulOrderLinks(claim.id);
|
|
234
|
+
throw err;
|
|
235
|
+
}
|
|
236
|
+
// Outcome unknown (timeout, dropped socket, 5xx, 429, or a 409 that may
|
|
237
|
+
// mean "this external_id already exists"). Ask Printful directly.
|
|
238
|
+
const recovered = await reconcileClaim({
|
|
239
|
+
printful,
|
|
240
|
+
client,
|
|
241
|
+
logger,
|
|
242
|
+
medusaOrderId: order.id,
|
|
243
|
+
claimId: claim.id,
|
|
244
|
+
cause: err,
|
|
245
|
+
});
|
|
246
|
+
if (recovered.status === "released") {
|
|
247
|
+
// Confirmed absent: the claim is gone and a retry may create it.
|
|
248
|
+
throw err;
|
|
249
|
+
}
|
|
250
|
+
if (recovered.status === "held") {
|
|
251
|
+
// Still unknown. The claim stays so no retry can duplicate the order.
|
|
252
|
+
throw err;
|
|
253
|
+
}
|
|
254
|
+
pfOrder = recovered.order;
|
|
255
|
+
logger.info(`Printful order ${pfOrder.id} for ${order.id} existed despite a failed create; recovered.`);
|
|
135
256
|
}
|
|
136
257
|
await printful.updatePrintfulOrderLinks({
|
|
137
258
|
id: claim.id,
|
|
@@ -181,4 +302,4 @@ exports.createPrintfulOrderWorkflow = (0, workflows_sdk_1.createWorkflow)("print
|
|
|
181
302
|
return new workflows_sdk_1.WorkflowResponse(result);
|
|
182
303
|
});
|
|
183
304
|
exports.default = exports.createPrintfulOrderWorkflow;
|
|
184
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3JlYXRlLXByaW50ZnVsLW9yZGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL3dvcmtmbG93cy9jcmVhdGUtcHJpbnRmdWwtb3JkZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEscUVBSzBDO0FBQzFDLHFEQUE4RTtBQUM5RSxrREFBcUQ7QUFPckQsOENBQW1EO0FBQ25ELDBDQUF5RDtBQUN6RCw0REFBNkQ7QUFDN0QsNENBQWtEO0FBa0JsRCxNQUFNLHVCQUF1QixHQUFHLElBQUEsMEJBQVUsRUFDeEMsdUJBQXVCLEVBQ3ZCLEtBQUssRUFBRSxLQUErQixFQUFFLEVBQUUsU0FBUyxFQUFFLEVBQUUsRUFBRTtJQUN2RCxNQUFNLFFBQVEsR0FBMEIsU0FBUyxDQUFDLE9BQU8sQ0FBQywwQkFBZSxDQUFDLENBQUE7SUFDMUUsTUFBTSxXQUFXLEdBQUcsU0FBUyxDQUFDLE9BQU8sQ0FBQyxlQUFPLENBQUMsS0FBSyxDQUFDLENBQUE7SUFDcEQsTUFBTSxNQUFNLEdBQUcsU0FBUyxDQUFDLE9BQU8sQ0FBQyxpQ0FBeUIsQ0FBQyxNQUFNLENBQUMsQ0FBQTtJQUNsRSxNQUFNLE9BQU8sR0FBRyxNQUFNLFFBQVEsQ0FBQyxVQUFVLEVBQUUsQ0FBQTtJQUMzQyxNQUFNLE1BQU0sR0FBRyxNQUFNLFFBQVEsQ0FBQyxTQUFTLEVBQUUsQ0FBQTtJQUV6QyxNQUFNLFFBQVEsR0FBRyxNQUFNLFFBQVEsQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxDQUFBO0lBQzdELElBQUksUUFBUSxFQUFFLENBQUM7UUFDYixPQUFPLElBQUksNEJBQVksQ0FBZTtZQUNwQyxPQUFPLEVBQUUsSUFBSTtZQUNiLE1BQU0sRUFBRSxnQkFBZ0I7WUFDeEIsaUJBQWlCLEVBQUUsUUFBUSxDQUFDLGlCQUFpQjtTQUM5QyxDQUFDLENBQUE7SUFDSixDQUFDO0lBRUQsTUFBTSxLQUFLLEdBQUcsTUFBTSxXQUFXLENBQUMs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
|
|
305
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3JlYXRlLXByaW50ZnVsLW9yZGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL3dvcmtmbG93cy9jcmVhdGUtcHJpbnRmdWwtb3JkZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBa0VBLHdDQXNEQztBQXhIRCxxRUFLMEM7QUFDMUMscURBQThFO0FBQzlFLGtEQUFxRDtBQUVyRCx5REFBdUU7QUFPdkUsNENBQWtEO0FBQ2xELGtFQUltQztBQUNuQyw4Q0FBbUQ7QUFDbkQsMENBQXlEO0FBQ3pELDREQUE2RDtBQUM3RCw0Q0FBa0Q7QUErQmxEOzs7Ozs7Ozs7R0FTRztBQUNJLEtBQUssVUFBVSxjQUFjLENBQUMsSUFPcEM7SUFDQyxNQUFNLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsYUFBYSxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsR0FBRyxJQUFJLENBQUE7SUFFeEUsSUFBSSxLQUFvQixDQUFBO0lBQ3hCLElBQUksQ0FBQztRQUNILEtBQUssR0FBRyxNQUFNLE1BQU0sQ0FBQyxvQkFBb0IsQ0FBQyxhQUFhLENBQUMsQ0FBQTtJQUMxRCxDQUFDO0lBQUMsT0FBTyxTQUFTLEVBQUUsQ0FBQztRQUNuQixJQUFJLFNBQVMsWUFBWSx5QkFBZ0IsSUFBSSxTQUFTLENBQUMsTUFBTSxLQUFLLEdBQUcsRUFBRSxDQUFDO1lBQ3RFLCtEQUErRDtZQUMvRCxNQUFNLFFBQVEsQ0FBQyx3QkFBd0IsQ0FBQyxPQUFPLENBQUMsQ0FBQTtZQUNoRCxPQUFPLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxDQUFBO1FBQy9CLENBQUM7UUFFRCwyRUFBMkU7UUFDM0UsdUVBQXVFO1FBQ3ZFLHFFQUFxRTtRQUNyRSxNQUFNLE1BQU0sR0FDVixTQUFTLFlBQVksS0FBSyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLENBQUE7UUFDcEUs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
|