@legenki/print2medusa 0.9.2 → 0.9.4
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/admin/index.js +42 -3
- package/.medusa/server/src/admin/index.mjs +42 -3
- 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/utils/currency.js +68 -13
- 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/workflows/create-printful-order.js +128 -7
- package/package.json +1 -1
|
@@ -2,8 +2,48 @@
|
|
|
2
2
|
const jsxRuntime = require("react/jsx-runtime");
|
|
3
3
|
const adminSdk = require("@medusajs/admin-sdk");
|
|
4
4
|
const ui = require("@medusajs/ui");
|
|
5
|
-
const utils = require("@medusajs/framework/utils");
|
|
6
5
|
const react = require("react");
|
|
6
|
+
const ZERO_DECIMAL_CURRENCIES = /* @__PURE__ */ new Set([
|
|
7
|
+
"AFN",
|
|
8
|
+
"ALL",
|
|
9
|
+
"AMD",
|
|
10
|
+
"BIF",
|
|
11
|
+
"CLP",
|
|
12
|
+
"COP",
|
|
13
|
+
"CRC",
|
|
14
|
+
"DJF",
|
|
15
|
+
"GNF",
|
|
16
|
+
"HUF",
|
|
17
|
+
"IDR",
|
|
18
|
+
"IQD",
|
|
19
|
+
"IRR",
|
|
20
|
+
"IRT",
|
|
21
|
+
"ISK",
|
|
22
|
+
"JPY",
|
|
23
|
+
"KMF",
|
|
24
|
+
"KRW",
|
|
25
|
+
"LBP",
|
|
26
|
+
"MGA",
|
|
27
|
+
"MMK",
|
|
28
|
+
"MNT",
|
|
29
|
+
"MUR",
|
|
30
|
+
"PKR",
|
|
31
|
+
"PYG",
|
|
32
|
+
"RSD",
|
|
33
|
+
"RWF",
|
|
34
|
+
"SOS",
|
|
35
|
+
"SYP",
|
|
36
|
+
"TZS",
|
|
37
|
+
"UGX",
|
|
38
|
+
"UZS",
|
|
39
|
+
"VND",
|
|
40
|
+
"XAF",
|
|
41
|
+
"XOF",
|
|
42
|
+
"XPF",
|
|
43
|
+
"YER",
|
|
44
|
+
"ZMK",
|
|
45
|
+
"ZWL"
|
|
46
|
+
]);
|
|
7
47
|
function minorUnitFactor(currencyCode) {
|
|
8
48
|
return isZeroDecimalCurrency(currencyCode) ? 1 : 100;
|
|
9
49
|
}
|
|
@@ -11,8 +51,7 @@ function isZeroDecimalCurrency(currencyCode) {
|
|
|
11
51
|
if (!currencyCode) {
|
|
12
52
|
return false;
|
|
13
53
|
}
|
|
14
|
-
|
|
15
|
-
return (entry == null ? void 0 : entry.decimal_digits) === 0;
|
|
54
|
+
return ZERO_DECIMAL_CURRENCIES.has(currencyCode.toUpperCase());
|
|
16
55
|
}
|
|
17
56
|
const MONEY_SCALE_VERSION = 2;
|
|
18
57
|
const ATTENTION_STATES = /* @__PURE__ */ new Set(["failed", "canceled", "onhold"]);
|
|
@@ -1,8 +1,48 @@
|
|
|
1
1
|
import { jsxs, jsx, Fragment } from "react/jsx-runtime";
|
|
2
2
|
import { defineWidgetConfig, defineRouteConfig } from "@medusajs/admin-sdk";
|
|
3
3
|
import { Container, Heading, Badge, Text, Button, toast, Prompt, Select, Input, Copy, Table } from "@medusajs/ui";
|
|
4
|
-
import { defaultCurrencies } from "@medusajs/framework/utils";
|
|
5
4
|
import { useState, useEffect, useCallback } from "react";
|
|
5
|
+
const ZERO_DECIMAL_CURRENCIES = /* @__PURE__ */ new Set([
|
|
6
|
+
"AFN",
|
|
7
|
+
"ALL",
|
|
8
|
+
"AMD",
|
|
9
|
+
"BIF",
|
|
10
|
+
"CLP",
|
|
11
|
+
"COP",
|
|
12
|
+
"CRC",
|
|
13
|
+
"DJF",
|
|
14
|
+
"GNF",
|
|
15
|
+
"HUF",
|
|
16
|
+
"IDR",
|
|
17
|
+
"IQD",
|
|
18
|
+
"IRR",
|
|
19
|
+
"IRT",
|
|
20
|
+
"ISK",
|
|
21
|
+
"JPY",
|
|
22
|
+
"KMF",
|
|
23
|
+
"KRW",
|
|
24
|
+
"LBP",
|
|
25
|
+
"MGA",
|
|
26
|
+
"MMK",
|
|
27
|
+
"MNT",
|
|
28
|
+
"MUR",
|
|
29
|
+
"PKR",
|
|
30
|
+
"PYG",
|
|
31
|
+
"RSD",
|
|
32
|
+
"RWF",
|
|
33
|
+
"SOS",
|
|
34
|
+
"SYP",
|
|
35
|
+
"TZS",
|
|
36
|
+
"UGX",
|
|
37
|
+
"UZS",
|
|
38
|
+
"VND",
|
|
39
|
+
"XAF",
|
|
40
|
+
"XOF",
|
|
41
|
+
"XPF",
|
|
42
|
+
"YER",
|
|
43
|
+
"ZMK",
|
|
44
|
+
"ZWL"
|
|
45
|
+
]);
|
|
6
46
|
function minorUnitFactor(currencyCode) {
|
|
7
47
|
return isZeroDecimalCurrency(currencyCode) ? 1 : 100;
|
|
8
48
|
}
|
|
@@ -10,8 +50,7 @@ function isZeroDecimalCurrency(currencyCode) {
|
|
|
10
50
|
if (!currencyCode) {
|
|
11
51
|
return false;
|
|
12
52
|
}
|
|
13
|
-
|
|
14
|
-
return (entry == null ? void 0 : entry.decimal_digits) === 0;
|
|
53
|
+
return ZERO_DECIMAL_CURRENCIES.has(currencyCode.toUpperCase());
|
|
15
54
|
}
|
|
16
55
|
const MONEY_SCALE_VERSION = 2;
|
|
17
56
|
const ATTENTION_STATES = /* @__PURE__ */ new Set(["failed", "canceled", "onhold"]);
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.Migration20260807000000 = void 0;
|
|
4
|
+
const migrations_1 = require("@medusajs/framework/mikro-orm/migrations");
|
|
5
|
+
class Migration20260807000000 extends migrations_1.Migration {
|
|
6
|
+
async up() {
|
|
7
|
+
this.addSql(`
|
|
8
|
+
alter table "printful_order_link"
|
|
9
|
+
add column if not exists "error_message" text null,
|
|
10
|
+
add column if not exists "last_attempt_at" timestamptz null;
|
|
11
|
+
`);
|
|
12
|
+
// Rows still holding a claim without a real Printful order id — a create
|
|
13
|
+
// whose outcome could not be determined. They need an operator, so make
|
|
14
|
+
// them cheap to list rather than a scan of every link ever created.
|
|
15
|
+
this.addSql(`
|
|
16
|
+
create index if not exists "IDX_printful_order_link_unresolved"
|
|
17
|
+
on "printful_order_link" ("last_attempt_at")
|
|
18
|
+
where printful_order_id = 'pending' and deleted_at is null;
|
|
19
|
+
`);
|
|
20
|
+
}
|
|
21
|
+
async down() {
|
|
22
|
+
this.addSql(`drop index if exists "IDX_printful_order_link_unresolved";`);
|
|
23
|
+
this.addSql(`
|
|
24
|
+
alter table "printful_order_link"
|
|
25
|
+
drop column if exists "last_attempt_at",
|
|
26
|
+
drop column if exists "error_message";
|
|
27
|
+
`);
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
exports.Migration20260807000000 = Migration20260807000000;
|
|
31
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTWlncmF0aW9uMjAyNjA4MDcwMDAwMDAuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvbW9kdWxlcy9wcmludGZ1bC9taWdyYXRpb25zL01pZ3JhdGlvbjIwMjYwODA3MDAwMDAwLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLHlFQUFvRTtBQUVwRSxNQUFhLHVCQUF3QixTQUFRLHNCQUFTO0lBQzNDLEtBQUssQ0FBQyxFQUFFO1FBQ2YsSUFBSSxDQUFDLE1BQU0sQ0FBQzs7OztLQUlYLENBQUMsQ0FBQTtRQUVGLHlFQUF5RTtRQUN6RSx3RUFBd0U7UUFDeEUsb0VBQW9FO1FBQ3BFLElBQUksQ0FBQyxNQUFNLENBQUM7Ozs7S0FJWCxDQUFDLENBQUE7SUFDSixDQUFDO0lBRVEsS0FBSyxDQUFDLElBQUk7UUFDakIsSUFBSSxDQUFDLE1BQU0sQ0FBQyw0REFBNEQsQ0FBQyxDQUFBO1FBQ3pFLElBQUksQ0FBQyxNQUFNLENBQUM7Ozs7S0FJWCxDQUFDLENBQUE7SUFDSixDQUFDO0NBQ0Y7QUExQkQsMERBMEJDIn0=
|
|
@@ -7,6 +7,18 @@ const PrintfulOrderLink = utils_1.model.define("printful_order_link", {
|
|
|
7
7
|
printful_order_id: utils_1.model.text(),
|
|
8
8
|
external_id: utils_1.model.text(),
|
|
9
9
|
status: utils_1.model.text().default("created"),
|
|
10
|
+
/**
|
|
11
|
+
* Why a row is still holding a claim without a real Printful order id.
|
|
12
|
+
*
|
|
13
|
+
* Set when a create attempt ended with an outcome we could not determine —
|
|
14
|
+
* the POST may or may not have reached Printful — and the reconcile lookup
|
|
15
|
+
* could not settle it either. The row is deliberately left in place: a
|
|
16
|
+
* duplicate order is printed and shipped, while a held claim is a visible,
|
|
17
|
+
* recoverable stall.
|
|
18
|
+
*/
|
|
19
|
+
error_message: utils_1.model.text().nullable(),
|
|
20
|
+
/** When that unresolved attempt happened, so a stalled row is findable. */
|
|
21
|
+
last_attempt_at: utils_1.model.dateTime().nullable(),
|
|
10
22
|
});
|
|
11
23
|
exports.default = PrintfulOrderLink;
|
|
12
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
24
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJpbnRmdWwtb3JkZXItbGluay5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9tb2R1bGVzL3ByaW50ZnVsL21vZGVscy9wcmludGZ1bC1vcmRlci1saW5rLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBQUEscURBQWlEO0FBRWpELE1BQU0saUJBQWlCLEdBQUcsYUFBSyxDQUFDLE1BQU0sQ0FBQyxxQkFBcUIsRUFBRTtJQUM1RCxFQUFFLEVBQUUsYUFBSyxDQUFDLEVBQUUsRUFBRSxDQUFDLFVBQVUsRUFBRTtJQUMzQixlQUFlLEVBQUUsYUFBSyxDQUFDLElBQUksRUFBRTtJQUM3QixpQkFBaUIsRUFBRSxhQUFLLENBQUMsSUFBSSxFQUFFO0lBQy9CLFdBQVcsRUFBRSxhQUFLLENBQUMsSUFBSSxFQUFFO0lBQ3pCLE1BQU0sRUFBRSxhQUFLLENBQUMsSUFBSSxFQUFFLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQztJQUN2Qzs7Ozs7Ozs7T0FRRztJQUNILGFBQWEsRUFBRSxhQUFLLENBQUMsSUFBSSxFQUFFLENBQUMsUUFBUSxFQUFFO0lBQ3RDLDJFQUEyRTtJQUMzRSxlQUFlLEVBQUUsYUFBSyxDQUFDLFFBQVEsRUFBRSxDQUFDLFFBQVEsRUFBRTtDQUM3QyxDQUFDLENBQUE7QUFFRixrQkFBZSxpQkFBaUIsQ0FBQSJ9
|
|
@@ -1,8 +1,4 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.minorUnitFactor = minorUnitFactor;
|
|
4
|
-
exports.isZeroDecimalCurrency = isZeroDecimalCurrency;
|
|
5
|
-
const utils_1 = require("@medusajs/framework/utils");
|
|
6
2
|
/**
|
|
7
3
|
* How many minor units make one major unit of a currency.
|
|
8
4
|
*
|
|
@@ -11,13 +7,73 @@ const utils_1 = require("@medusajs/framework/utils");
|
|
|
11
7
|
* Scaling those by 100 anyway produces a value a hundredfold too large for
|
|
12
8
|
* anything reading it back with Medusa's own conventions.
|
|
13
9
|
*
|
|
14
|
-
*
|
|
15
|
-
* `
|
|
16
|
-
*
|
|
17
|
-
*
|
|
18
|
-
*
|
|
19
|
-
*
|
|
10
|
+
* **Why the list is written out here rather than imported.** It used to come
|
|
11
|
+
* from `defaultCurrencies` in `@medusajs/framework/utils`, which is correct for
|
|
12
|
+
* server code and fatal for the browser: this file is also imported by the
|
|
13
|
+
* admin order widget, and `@medusajs/framework/utils` reaches
|
|
14
|
+
* `@medusajs/utils/dist/auth/token.js` → `jsonwebtoken` → `jws`, which calls
|
|
15
|
+
* `util.inherits`. That does not exist in a browser, so the whole Medusa admin
|
|
16
|
+
* failed to load with `chr.inherits is not a function` — not a broken widget,
|
|
17
|
+
* a blank admin.
|
|
18
|
+
*
|
|
19
|
+
* The usual objection to a hand-kept list is that HUF, ISK and CLP get missed.
|
|
20
|
+
* That is answered by a test rather than by discipline: `currency.test.ts`
|
|
21
|
+
* compares this set against Medusa's own table and fails if they diverge, so
|
|
22
|
+
* the data stays Medusa's while the import stays server-side.
|
|
23
|
+
*/
|
|
24
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
25
|
+
exports.ZERO_DECIMAL_CURRENCIES = void 0;
|
|
26
|
+
exports.minorUnitFactor = minorUnitFactor;
|
|
27
|
+
exports.isZeroDecimalCurrency = isZeroDecimalCurrency;
|
|
28
|
+
/**
|
|
29
|
+
* Currencies with no subunit, from Medusa's `defaultCurrencies`
|
|
30
|
+
* (`decimal_digits === 0`). Kept in sync by test, not by hand.
|
|
31
|
+
*
|
|
32
|
+
* Exported so `currency.test.ts` can compare the set itself against Medusa's
|
|
33
|
+
* table in both directions — a code invented here is invisible to any check
|
|
34
|
+
* that only walks Medusa's side.
|
|
20
35
|
*/
|
|
36
|
+
exports.ZERO_DECIMAL_CURRENCIES = new Set([
|
|
37
|
+
"AFN",
|
|
38
|
+
"ALL",
|
|
39
|
+
"AMD",
|
|
40
|
+
"BIF",
|
|
41
|
+
"CLP",
|
|
42
|
+
"COP",
|
|
43
|
+
"CRC",
|
|
44
|
+
"DJF",
|
|
45
|
+
"GNF",
|
|
46
|
+
"HUF",
|
|
47
|
+
"IDR",
|
|
48
|
+
"IQD",
|
|
49
|
+
"IRR",
|
|
50
|
+
"IRT",
|
|
51
|
+
"ISK",
|
|
52
|
+
"JPY",
|
|
53
|
+
"KMF",
|
|
54
|
+
"KRW",
|
|
55
|
+
"LBP",
|
|
56
|
+
"MGA",
|
|
57
|
+
"MMK",
|
|
58
|
+
"MNT",
|
|
59
|
+
"MUR",
|
|
60
|
+
"PKR",
|
|
61
|
+
"PYG",
|
|
62
|
+
"RSD",
|
|
63
|
+
"RWF",
|
|
64
|
+
"SOS",
|
|
65
|
+
"SYP",
|
|
66
|
+
"TZS",
|
|
67
|
+
"UGX",
|
|
68
|
+
"UZS",
|
|
69
|
+
"VND",
|
|
70
|
+
"XAF",
|
|
71
|
+
"XOF",
|
|
72
|
+
"XPF",
|
|
73
|
+
"YER",
|
|
74
|
+
"ZMK",
|
|
75
|
+
"ZWL",
|
|
76
|
+
]);
|
|
21
77
|
function minorUnitFactor(currencyCode) {
|
|
22
78
|
return isZeroDecimalCurrency(currencyCode) ? 1 : 100;
|
|
23
79
|
}
|
|
@@ -36,7 +92,6 @@ function isZeroDecimalCurrency(currencyCode) {
|
|
|
36
92
|
return false;
|
|
37
93
|
}
|
|
38
94
|
// Printful sends "USD", Medusa stores "usd", and both reach this.
|
|
39
|
-
|
|
40
|
-
return entry?.decimal_digits === 0;
|
|
95
|
+
return exports.ZERO_DECIMAL_CURRENCIES.has(currencyCode.toUpperCase());
|
|
41
96
|
}
|
|
42
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
97
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3VycmVuY3kuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvdXRpbHMvY3VycmVuY3kudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FxQkc7OztBQW9ESCwwQ0FJQztBQVlELHNEQVFDO0FBMUVEOzs7Ozs7O0dBT0c7QUFDVSxRQUFBLHVCQUF1QixHQUFHLElBQUksR0FBRyxDQUFDO0lBQzdDLEtBQUs7SUFDTCxLQUFLO0lBQ0wsS0FBSztJQUNMLEtBQUs7SUFDTCxLQUFLO0lBQ0wsS0FBSztJQUNMLEtBQUs7SUFDTCxLQUFLO0lBQ0wsS0FBSztJQUNMLEtBQUs7SUFDTCxLQUFLO0lBQ0wsS0FBSztJQUNMLEtBQUs7SUFDTCxLQUFLO0lBQ0wsS0FBSztJQUNMLEtBQUs7SUFDTCxLQUFLO0lBQ0wsS0FBSztJQUNMLEtBQUs7SUFDTCxLQUFLO0lBQ0wsS0FBSztJQUNMLEtBQUs7SUFDTCxLQUFLO0lBQ0wsS0FBSztJQUNMLEtBQUs7SUFDTCxLQUFLO0lBQ0wsS0FBSztJQUNMLEtBQUs7SUFDTCxLQUFLO0lBQ0wsS0FBSztJQUNMLEtBQUs7SUFDTCxLQUFLO0lBQ0wsS0FBSztJQUNMLEtBQUs7SUFDTCxLQUFLO0lBQ0wsS0FBSztJQUNMLEtBQUs7SUFDTCxLQUFLO0lBQ0wsS0FBSztDQUNOLENBQUMsQ0FBQTtBQUVGLFNBQWdCLGVBQWUsQ0FDN0IsWUFBdUM7SUFFdkMsT0FBTyxxQkFBcUIsQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUE7QUFDdEQsQ0FBQztBQUVEOzs7Ozs7Ozs7R0FTRztBQUNILFNBQWdCLHFCQUFxQixDQUNuQyxZQUF1QztJQUV2QyxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7UUFDbEIsT0FBTyxLQUFLLENBQUE7SUFDZCxDQUFDO0lBQ0Qsa0VBQWtFO0lBQ2xFLE9BQU8sK0JBQXVCLENBQUMsR0FBRyxDQUFDLFlBQVksQ0FBQyxXQUFXLEVBQUUsQ0FBQyxDQUFBO0FBQ2hFLENBQUMifQ==
|
|
@@ -12,6 +12,25 @@ class PrintfulApiError extends Error {
|
|
|
12
12
|
get isRetryable() {
|
|
13
13
|
return this.status === 429 || this.status >= 500;
|
|
14
14
|
}
|
|
15
|
+
/**
|
|
16
|
+
* True when this error proves the request was *rejected* — Printful read it,
|
|
17
|
+
* refused it, and created nothing.
|
|
18
|
+
*
|
|
19
|
+
* Only these make it safe to release a create claim without asking Printful
|
|
20
|
+
* what happened. Everything else — timeouts, dropped sockets, 5xx, 429 — has
|
|
21
|
+
* an unknown outcome: the order may exist.
|
|
22
|
+
*
|
|
23
|
+
* 409 is excluded deliberately. On create it can mean "an order with this
|
|
24
|
+
* external_id already exists", which is exactly the case where releasing the
|
|
25
|
+
* claim and retrying prints a second order. Treating it as unknown sends the
|
|
26
|
+
* caller to look the order up instead of guessing.
|
|
27
|
+
*/
|
|
28
|
+
get provesNotCreated() {
|
|
29
|
+
return (this.status >= 400 &&
|
|
30
|
+
this.status < 500 &&
|
|
31
|
+
this.status !== 429 &&
|
|
32
|
+
this.status !== 409);
|
|
33
|
+
}
|
|
15
34
|
}
|
|
16
35
|
exports.PrintfulApiError = PrintfulApiError;
|
|
17
36
|
class PrintfulConfigError extends Error {
|
|
@@ -21,4 +40,4 @@ class PrintfulConfigError extends Error {
|
|
|
21
40
|
}
|
|
22
41
|
}
|
|
23
42
|
exports.PrintfulConfigError = PrintfulConfigError;
|
|
24
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
43
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXJyb3JzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL3V0aWxzL2Vycm9ycy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSxNQUFhLGdCQUFpQixTQUFRLEtBQUs7SUFLekMsWUFDRSxPQUFlLEVBQ2YsT0FBNEQ7UUFFNUQsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFBO1FBQ2QsSUFBSSxDQUFDLElBQUksR0FBRyxrQkFBa0IsQ0FBQTtRQUM5QixJQUFJLENBQUMsTUFBTSxHQUFHLE9BQU8sQ0FBQyxNQUFNLENBQUE7UUFDNUIsSUFBSSxDQUFDLE1BQU0sR0FBRyxPQUFPLENBQUMsTUFBTSxDQUFBO1FBQzVCLElBQUksQ0FBQyxJQUFJLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQTtJQUMxQixDQUFDO0lBRUQsSUFBSSxXQUFXO1FBQ2IsT0FBTyxJQUFJLENBQUMsTUFBTSxLQUFLLEdBQUcsSUFBSSxJQUFJLENBQUMsTUFBTSxJQUFJLEdBQUcsQ0FBQTtJQUNsRCxDQUFDO0lBRUQ7Ozs7Ozs7Ozs7OztPQVlHO0lBQ0gsSUFBSSxnQkFBZ0I7UUFDbEIsT0FBTyxDQUNMLElBQUksQ0FBQyxNQUFNLElBQUksR0FBRztZQUNsQixJQUFJLENBQUMsTUFBTSxHQUFHLEdBQUc7WUFDakIsSUFBSSxDQUFDLE1BQU0sS0FBSyxHQUFHO1lBQ25CLElBQUksQ0FBQyxNQUFNLEtBQUssR0FBRyxDQUNwQixDQUFBO0lBQ0gsQ0FBQztDQUNGO0FBekNELDRDQXlDQztBQUVELE1BQWEsbUJBQW9CLFNBQVEsS0FBSztJQUM1QyxZQUFZLE9BQWU7UUFDekIsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFBO1FBQ2QsSUFBSSxDQUFDLElBQUksR0FBRyxxQkFBcUIsQ0FBQTtJQUNuQyxDQUFDO0NBQ0Y7QUFMRCxrREFLQyJ9
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.PRINTFUL_EXTERNAL_ID_MAX = void 0;
|
|
4
|
+
exports.assertUsableExternalId = assertUsableExternalId;
|
|
5
|
+
exports.classifyCreateFailure = classifyCreateFailure;
|
|
6
|
+
exports.isUnresolvedLink = isUnresolvedLink;
|
|
7
|
+
const errors_1 = require("./errors");
|
|
8
|
+
/**
|
|
9
|
+
* Printful's cap on `external_id`. Documented as up to 32 characters of
|
|
10
|
+
* digits, Latin letters, dashes and underscores.
|
|
11
|
+
*
|
|
12
|
+
* A Medusa order id is `order_` plus a 26-character ULID — exactly 32, with
|
|
13
|
+
* nothing to spare. That fits, but only just, so the length is asserted before
|
|
14
|
+
* every create rather than assumed: a host app with a longer id prefix would
|
|
15
|
+
* otherwise have Printful silently truncate or reject the key that order
|
|
16
|
+
* creation depends on for idempotency.
|
|
17
|
+
*/
|
|
18
|
+
exports.PRINTFUL_EXTERNAL_ID_MAX = 32;
|
|
19
|
+
/** Characters Printful accepts in an external id. */
|
|
20
|
+
const EXTERNAL_ID_ALLOWED = /^[A-Za-z0-9_-]+$/;
|
|
21
|
+
/**
|
|
22
|
+
* Check that a Medusa order id can serve as Printful's `external_id`.
|
|
23
|
+
*
|
|
24
|
+
* Deliberately throws instead of truncating or hashing. `external_id` is the
|
|
25
|
+
* only key that can tell a retry "this order already exists at Printful", and
|
|
26
|
+
* a silently altered key is worse than a failed create: it reads as a missing
|
|
27
|
+
* order and invites a duplicate.
|
|
28
|
+
*/
|
|
29
|
+
function assertUsableExternalId(orderId) {
|
|
30
|
+
if (!orderId) {
|
|
31
|
+
throw new Error("Printful external_id: order id is empty");
|
|
32
|
+
}
|
|
33
|
+
if (orderId.length > exports.PRINTFUL_EXTERNAL_ID_MAX) {
|
|
34
|
+
throw new Error(`Printful external_id accepts at most ${exports.PRINTFUL_EXTERNAL_ID_MAX} ` +
|
|
35
|
+
`characters; order id "${orderId}" is ${orderId.length}. Refusing to ` +
|
|
36
|
+
`truncate — a shortened key cannot identify the order on retry.`);
|
|
37
|
+
}
|
|
38
|
+
if (!EXTERNAL_ID_ALLOWED.test(orderId)) {
|
|
39
|
+
throw new Error(`Printful external_id accepts letters, digits, "-" and "_" only; ` +
|
|
40
|
+
`order id "${orderId}" does not qualify.`);
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
function classifyCreateFailure(err) {
|
|
44
|
+
if (err instanceof errors_1.PrintfulApiError && err.provesNotCreated) {
|
|
45
|
+
return "not_created";
|
|
46
|
+
}
|
|
47
|
+
// Anything else — including a plain network error with no status at all —
|
|
48
|
+
// is unknown by construction. Guessing "not created" here is what prints a
|
|
49
|
+
// second shirt.
|
|
50
|
+
return "unknown";
|
|
51
|
+
}
|
|
52
|
+
/** True when a link row is a claim with no real Printful order behind it yet. */
|
|
53
|
+
function isUnresolvedLink(link, pendingSentinel) {
|
|
54
|
+
return !!link && (link.printful_order_id ?? "") === pendingSentinel;
|
|
55
|
+
}
|
|
56
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3JkZXItaWRlbXBvdGVuY3kuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvdXRpbHMvb3JkZXItaWRlbXBvdGVuY3kudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBeUJBLHdEQWlCQztBQWFELHNEQVFDO0FBR0QsNENBS0M7QUF2RUQscUNBQTJDO0FBRTNDOzs7Ozs7Ozs7R0FTRztBQUNVLFFBQUEsd0JBQXdCLEdBQUcsRUFBRSxDQUFBO0FBRTFDLHFEQUFxRDtBQUNyRCxNQUFNLG1CQUFtQixHQUFHLGtCQUFrQixDQUFBO0FBRTlDOzs7Ozs7O0dBT0c7QUFDSCxTQUFnQixzQkFBc0IsQ0FBQyxPQUFlO0lBQ3BELElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztRQUNiLE1BQU0sSUFBSSxLQUFLLENBQUMseUNBQXlDLENBQUMsQ0FBQTtJQUM1RCxDQUFDO0lBQ0QsSUFBSSxPQUFPLENBQUMsTUFBTSxHQUFHLGdDQUF3QixFQUFFLENBQUM7UUFDOUMsTUFBTSxJQUFJLEtBQUssQ0FDYix3Q0FBd0MsZ0NBQXdCLEdBQUc7WUFDakUseUJBQXlCLE9BQU8sUUFBUSxPQUFPLENBQUMsTUFBTSxnQkFBZ0I7WUFDdEUsZ0VBQWdFLENBQ25FLENBQUE7SUFDSCxDQUFDO0lBQ0QsSUFBSSxDQUFDLG1CQUFtQixDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDO1FBQ3ZDLE1BQU0sSUFBSSxLQUFLLENBQ2Isa0VBQWtFO1lBQ2hFLGFBQWEsT0FBTyxxQkFBcUIsQ0FDNUMsQ0FBQTtJQUNILENBQUM7QUFDSCxDQUFDO0FBYUQsU0FBZ0IscUJBQXFCLENBQUMsR0FBWTtJQUNoRCxJQUFJLEdBQUcsWUFBWSx5QkFBZ0IsSUFBSSxHQUFHLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztRQUM1RCxPQUFPLGFBQWEsQ0FBQTtJQUN0QixDQUFDO0lBQ0QsMEVBQTBFO0lBQzFFLDJFQUEyRTtJQUMzRSxnQkFBZ0I7SUFDaEIsT0FBTyxTQUFTLENBQUE7QUFDbEIsQ0FBQztBQUVELGlGQUFpRjtBQUNqRixTQUFnQixnQkFBZ0IsQ0FDOUIsSUFBOEQsRUFDOUQsZUFBdUI7SUFFdkIsT0FBTyxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLGlCQUFpQixJQUFJLEVBQUUsQ0FBQyxLQUFLLGVBQWUsQ0FBQTtBQUNyRSxDQUFDIn0=
|
|
@@ -79,6 +79,27 @@ class PrintfulClient {
|
|
|
79
79
|
const data = await this.request(`/orders/${id}`);
|
|
80
80
|
return data.result;
|
|
81
81
|
}
|
|
82
|
+
/**
|
|
83
|
+
* Look an order up by the `external_id` we sent when creating it.
|
|
84
|
+
*
|
|
85
|
+
* This is the idempotency key for order creation: when a POST /orders ends
|
|
86
|
+
* with an outcome we cannot determine — a timeout, a dropped connection —
|
|
87
|
+
* this answers whether Printful actually created it. Without it the only
|
|
88
|
+
* options are to retry (and risk printing and shipping a second time) or to
|
|
89
|
+
* give up on the order.
|
|
90
|
+
*
|
|
91
|
+
* Printful addresses an order by external id with an `@` prefix. The prefix
|
|
92
|
+
* is applied here rather than by callers so no one can accidentally pass a
|
|
93
|
+
* bare external id to `getOrder` and read a *different* order that happens
|
|
94
|
+
* to carry that numeric Printful id.
|
|
95
|
+
*
|
|
96
|
+
* Throws `PrintfulApiError` with `status: 404` when no such order exists —
|
|
97
|
+
* which is the meaningful "it was never created" answer.
|
|
98
|
+
*/
|
|
99
|
+
async getOrderByExternalId(externalId) {
|
|
100
|
+
const data = await this.request(`/orders/@${encodeURIComponent(externalId)}`);
|
|
101
|
+
return data.result;
|
|
102
|
+
}
|
|
82
103
|
async cancelOrder(id) {
|
|
83
104
|
const data = await this.request(`/orders/${id}`, {
|
|
84
105
|
method: "DELETE",
|
|
@@ -252,4 +273,4 @@ class PrintfulClient {
|
|
|
252
273
|
}
|
|
253
274
|
}
|
|
254
275
|
exports.PrintfulClient = PrintfulClient;
|
|
255
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJpbnRmdWwtY2xpZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL3V0aWxzL3ByaW50ZnVsLWNsaWVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSxxQ0FBZ0U7QUFxQ2hFLE1BQU0sZ0JBQWdCLEdBQUcsMEJBQTBCLENBQUE7QUFFbkQsTUFBYSxjQUFjO0lBU3pCLFlBQVksT0FBOEI7UUFDeEMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUN0QixNQUFNLElBQUksNEJBQW1CLENBQUMsK0JBQStCLENBQUMsQ0FBQTtRQUNoRSxDQUFDO1FBRUQsSUFBSSxDQUFDLFFBQVEsR0FBRyxPQUFPLENBQUMsUUFBUSxDQUFBO1FBQ2hDLElBQUksQ0FBQyxPQUFPLEdBQUcsT0FBTyxDQUFDLE9BQU8sQ0FBQTtRQUM5QixJQUFJLENBQUMsT0FBTyxHQUFHLENBQUMsT0FBTyxDQUFDLE9BQU8sSUFBSSxnQkFBZ0IsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUE7UUFDdkUsSUFBSSxDQUFDLFNBQVMsR0FBRyxPQUFPLENBQUMsU0FBUyxJQUFJLEtBQUssQ0FBQTtRQUMzQyxJQUFJLENBQUMsVUFBVSxHQUFHLE9BQU8sQ0FBQyxVQUFVLElBQUksQ0FBQyxDQUFBO1FBQ3pDLElBQUksQ0FBQyxXQUFXLEdBQUcsT0FBTyxDQUFDLFdBQVcsSUFBSSxHQUFHLENBQUE7UUFDN0MsSUFBSSxDQUFDLFNBQVM7WUFDWixNQUFNLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFBO0lBQ3JFLENBQUM7SUFFRCxLQUFLLENBQUMsZ0JBQWdCLENBQUMsU0FBaUMsRUFBRTtRQUl4RCxNQUFNLE1BQU0sR0FBRyxJQUFJLGVBQWUsRUFBRSxD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
|
|
276
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJpbnRmdWwtY2xpZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL3V0aWxzL3ByaW50ZnVsLWNsaWVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSxxQ0FBZ0U7QUFxQ2hFLE1BQU0sZ0JBQWdCLEdBQUcsMEJBQTBCLENBQUE7QUFFbkQsTUFBYSxjQUFjO0lBU3pCLFlBQVksT0FBOEI7UUFDeEMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUN0QixNQUFNLElBQUksNEJBQW1CLENBQUMsK0JBQStCLENBQUMsQ0FBQTtRQUNoRSxDQUFDO1FBRUQsSUFBSSxDQUFDLFFBQVEsR0FBRyxPQUFPLENBQUMsUUFBUSxDQUFBO1FBQ2hDLElBQUksQ0FBQyxPQUFPLEdBQUcsT0FBTyxDQUFDLE9BQU8sQ0FBQTtRQUM5QixJQUFJLENBQUMsT0FBTyxHQUFHLENBQUMsT0FBTyxDQUFDLE9BQU8sSUFBSSxnQkFBZ0IsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUE7UUFDdkUsSUFBSSxDQUFDLFNBQVMsR0FBRyxPQUFPLENBQUMsU0FBUyxJQUFJLEtBQUssQ0FBQTtRQUMzQyxJQUFJLENBQUMsVUFBVSxHQUFHLE9BQU8sQ0FBQyxVQUFVLElBQUksQ0FBQyxDQUFBO1FBQ3pDLElBQUksQ0FBQyxXQUFXLEdBQUcsT0FBTyxDQUFDLFdBQVcsSUFBSSxHQUFHLENBQUE7UUFDN0MsSUFBSSxDQUFDLFNBQVM7WUFDWixNQUFNLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFBO0lBQ3JFLENBQUM7SUFFRCxLQUFLLENBQUMsZ0JBQWdCLENBQUMsU0FBaUMsRUFBRTtRQUl4RCxNQUFNLE1BQU0sR0FBRyxJQUFJLGVBQWUsRUFBRSxDQUFBO1FBQ3BDLElBQUksTUFBTSxDQUFDLE1BQU0sSUFBSSxJQUFJLEVBQUUsQ0FBQztZQUMxQixNQUFNLENBQUMsR0FBRyxDQUFDLFFBQVEsRUFBRSxNQUFNLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUE7UUFDN0MsQ0FBQztRQUNELElBQUksTUFBTSxDQUFDLEtBQUssSUFBSSxJQUFJLEVBQUUsQ0FBQztZQUN6QixNQUFNLENBQUMsR0FBRyxDQUFDLE9BQU8sRUFBRSxNQUFNLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUE7UUFDM0MsQ0FBQztRQUNELElBQUksTUFBTSxDQUFDLE1BQU0sRUFBRSxDQUFDO1lBQ2xCLE1BQU0sQ0FBQyxHQUFHLENBQUMsUUFBUSxFQUFFLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQTtRQUNyQyxDQUFDO1FBRUQsTUFBTSxFQUFFLEdBQUcsTUFBTSxDQUFDLFFBQVEsRUFBRSxDQUFBO1FBQzVCLE1BQU0sSUFBSSxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsbUJBQW1CLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxpQkFBaUIsQ0FBQTtRQUM3RCxNQUFNLElBQUksR0FBRyxNQUFNLElBQUksQ0FBQyxPQUFPLENBQStCLElBQUksQ0FBQyxDQUFBO1FBRW5FLE9BQU87WUFDTCxLQUFLLEVBQUUsSUFBSSxDQUFDLE1BQU0sSUFBSSxFQUFFO1lBQ3hCLE1BQU0sRUFBRSxJQUFJLENBQUMsTUFBTTtTQUNwQixDQUFBO0lBQ0gsQ0FBQztJQUVELEtBQUssQ0FBQyxtQkFBbUIsQ0FDdkIsU0FBaUQsRUFBRTtRQUVuRCxNQUFNLEtBQUssR0FBRyxNQUFNLENBQUMsS0FBSyxJQUFJLEdBQUcsQ0FBQTtRQUNqQyxJQUFJLE1BQU0sR0FBRyxDQUFDLENBQUE7UUFDZCxNQUFNLEdBQUcsR0FBaUMsRUFBRSxDQUFBO1FBRTVDLFNBQVMsQ0FBQztZQUNSLE1BQU0sSUFBSSxHQUFHLE1BQU0sSUFBSSxDQUFDLGdCQUFnQixDQUFDO2dCQUN2QyxHQUFHLE1BQU07Z0JBQ1QsTUFBTTtnQkFDTixLQUFLO2FBQ04sQ0FBQyxDQUFBO1lBQ0YsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQTtZQUV2QixNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsTUFBTSxFQUFFLEtBQUssQ0FBQTtZQUNoQyxNQUFNLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUE7WUFFM0IsSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUUsQ0FBQztnQkFDNUIsTUFBSztZQUNQLENBQUM7WUFDRCxJQUFJLEtBQUssSUFBSSxJQUFJLElBQUksTUFBTSxJQUFJLEtBQUssRUFBRSxDQUFDO2dCQUNyQyxNQUFLO1lBQ1AsQ0FBQztZQUNELElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLEdBQUcsS0FBSyxFQUFFLENBQUM7Z0JBQzlCLE1BQUs7WUFDUCxDQUFDO1FBQ0gsQ0FBQztRQUVELE9BQU8sR0FBRyxDQUFBO0lBQ1osQ0FBQztJQUVELEtBQUssQ0FBQyxjQUFjLENBQ2xCLEVBQW1CO1FBRW5CLE1BQU0sSUFBSSxHQUFHLE1BQU0sSUFBSSxDQUFDLE9BQU8sQ0FDN0IsbUJBQW1CLEVBQUUsRUFBRSxDQUN4QixDQUFBO1FBQ0QsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFBO0lBQ3BCLENBQUM7SUFFRCxLQUFLLENBQUMsV0FBVyxDQUFDLEtBQStCO1FBQy9DLE1BQU0sT0FBTyxHQUFHLEtBQUssQ0FBQyxPQUFPLEtBQUssSUFBSSxDQUFBO1FBQ3RDLE1BQU0sSUFBSSxHQUFHLE9BQU8sQ0FBQyxDQUFDLENBQUMsbUJBQW1CLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQTtRQUN0RCxNQUFNLEVBQUUsT0FBTyxFQUFFLFFBQVEsRUFBRSxHQUFHLElBQUksRUFBRSxHQUFHLEtBQUssQ0FBQTtRQUM1QyxNQUFNLElBQUksR0FBRyxNQUFNLElBQUksQ0FBQyxPQUFPLENBQWdCLElBQUksRUFBRTtZQUNuRCxNQUFNLEVBQUUsTUFBTTtZQUNkLElBQUksRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQztTQUMzQixDQUFDLENBQUE7UUFDRixPQUFPLElBQUksQ0FBQyxNQUFNLENBQUE7SUFDcEIsQ0FBQztJQUVELEtBQUssQ0FBQyxRQUFRLENBQUMsRUFBbUI7UUFDaEMsTUFBTSxJQUFJLEdBQUcsTUFBTSxJQUFJLENBQUMsT0FBTyxDQUFnQixXQUFXLEVBQUUsRUFBRSxDQUFDLENBQUE7UUFDL0QsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFBO0lBQ3BCLENBQUM7SUFFRDs7Ozs7Ozs7Ozs7Ozs7OztPQWdCRztJQUNILEtBQUssQ0FBQyxvQkFBb0IsQ0FBQyxVQUFrQjtRQUMzQyxNQUFNLElBQUksR0FBRyxNQUFNLElBQUksQ0FBQyxPQUFPLENBQzdCLFlBQVksa0JBQWtCLENBQUMsVUFBVSxDQUFDLEVBQUUsQ0FDN0MsQ0FBQTtRQUNELE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQTtJQUNwQixDQUFDO0lBRUQsS0FBSyxDQUFDLFdBQVcsQ0FBQyxFQUFtQjtRQUNuQyxNQUFNLElBQUksR0FBRyxNQUFNLElBQUksQ0FBQyxPQUFPLENBQWdCLFdBQVcsRUFBRSxFQUFFLEVBQUU7WUFDOUQsTUFBTSxFQUFFLFFBQVE7U0FDakIsQ0FBQyxDQUFBO1FBQ0YsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFBO0lBQ3BCLENBQUM7SUFFRCxLQUFLLENBQUMsZ0JBQWdCO1FBQ3BCLE1BQU0sSUFBSSxHQUFHLE1BQU0sSUFBSSxDQUFDLE9BQU8sQ0FBd0IsV0FBVyxDQUFDLENBQUE7UUFDbkUsT0FBTyxJQUFJLENBQUMsTUFBTSxJQUFJLEVBQUUsR0FBRyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsRUFBRSxFQUFFLENBQUE7SUFDaEQsQ0FBQztJQUVEOzs7O09BSUc7SUFDSCxLQUFLLENBQUMsZ0JBQWdCLENBQ3BCLEdBQVcsRUFDWCxLQUE2RDtRQUU3RCxNQUFNLElBQUksR0FBRyxNQUFNLElBQUksQ0FBQyxPQUFPLENBQXdCLFdBQVcsRUFBRTtZQUNsRSxNQUFNLEVBQUUsTUFBTTtZQUNkLElBQUksRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLEVBQUUsR0FBRyxFQUFFLEtBQUssRUFBRSxDQUFDO1NBQ3JDLENBQUMsQ0FBQTtRQUNGLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQTtJQUNwQixDQUFDO0lBRUQsS0FBSyxDQUFDLGNBQWM7UUFDbEIsTUFBTSxJQUFJLEdBQUcsTUFBTSxJQUFJLENBQUMsT0FBTyxDQUF3QixXQUFXLEVBQUU7WUFDbEUsTUFBTSxFQUFFLFFBQVE7U0FDakIsQ0FBQyxDQUFBO1FBQ0YsT0FBTyxJQUFJLENBQUMsTUFBTSxJQUFJLEVBQUUsR0FBRyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsRUFBRSxFQUFFLENBQUE7SUFDaEQsQ0FBQztJQUVEOzs7Ozs7Ozs7Ozs7T0FZRztJQUNILEtBQUssQ0FBQyxpQkFBaUIsQ0FDckIsZ0JBQWlDO1FBRWpDLElBQUksQ0FBQztZQUNILE1BQU0sSUFBSSxHQUFHLE1BQU0sSUFBSSxDQUFDLE9BQU8sQ0FDN0IscUJBQXFCLGdCQUFnQixFQUFFLENBQ3hDLENBQUE7WUFDRCxPQUFPLElBQUksQ0FBQyxNQUFNLElBQUksSUFBSSxDQUFBO1FBQzVCLENBQUM7UUFBQyxNQUFNLENBQUM7WUFDUCxPQUFPLElBQUksQ0FBQTtRQUNiLENBQUM7SUFDSCxDQUFDO0lBRUQ7Ozs7Ozs7Ozs7T0FVRztJQUNILEtBQUssQ0FBQyxhQUFhLENBQ2pCLE1BQWdDO1FBRWhDLE1BQU0sTUFBTSxHQUFHLElBQUksZUFBZSxFQUFFLENBQUE7UUFDcEMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxXQUFXLEVBQUUsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFBO1FBQ3hDLE1BQU0sQ0FBQyxHQUFHLENBQUMsU0FBUyxFQUFFLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQTtRQUNwQyxNQUFNLENBQUMsR0FBRyxDQUFDLGNBQWMsRUFBRSxNQUFNLENBQUMsV0FBVyxDQUFDLENBQUE7UUFDOUMsSUFBSSxNQUFNLENBQUMsUUFBUSxFQUFFLENBQUM7WUFDcEIsTUFBTSxDQUFDLEdBQUcsQ0FBQyxVQUFVLEVBQUUsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFBO1FBQ3pDLENBQUM7UUFFRCxNQUFNLElBQUksR0FBRyxNQUFNLElBQUksQ0FBQyxPQUFPLENBRTVCLHVCQUF1QixNQUFNLENBQUMsUUFBUSxFQUFFLEVBQUUsQ0FBQyxDQUFBO1FBRTlDLE9BQU8sSUFBSSxDQUFDLE1BQU0sRUFBRSxnQkFBZ0IsSUFBSSxFQUFFLENBQUE7SUFDNUMsQ0FBQztJQUVEOzs7Ozs7T0FNRztJQUNILEtBQUssQ0FBQyxnQkFBZ0IsQ0FBQyxLQUEyQjtRQUNoRCxNQUFNLElBQUksR0FBRyxNQUFNLElBQUksQ0FBQyxPQUFPLENBQWlCLGlCQUFpQixFQUFFO1lBQ2pFLE1BQU0sRUFBRSxNQUFNO1lBQ2QsSUFBSSxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDO1NBQzVCLENBQUMsQ0FBQTtRQUNGLE9BQU8sSUFBSSxDQUFDLE1BQU0sSUFBSSxFQUFFLENBQUE7SUFDMUIsQ0FBQztJQUVPLEtBQUssQ0FBQyxPQUFPLENBQ25CLElBQVksRUFDWixPQUFvQixFQUFFO1FBRXRCLE1BQU0sR0FBRyxHQUFHLEdBQUcsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksSUFBSSxFQUFFLEVBQUUsQ0FBQTtRQUN4RSxNQUFNLE9BQU8sR0FBMkI7WUFDdEMsYUFBYSxFQUFFLFVBQVUsSUFBSSxDQUFDLFFBQVEsRUFBRTtZQUN4QyxjQUFjLEVBQUUsa0JBQWtCO1lBQ2xDLE1BQU0sRUFBRSxrQkFBa0I7WUFDMUIsR0FBSSxJQUFJLENBQUMsT0FBOEM7U0FDeEQsQ0FBQTtRQUVELElBQUksSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO1lBQ2pCLE9BQU8sQ0FBQyxlQUFlLENBQUMsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFBO1FBQ3pDLENBQUM7UUFFRCxJQUFJLFNBQWtCLENBQUE7UUFFdEIsS0FBSyxJQUFJLE9BQU8sR0FBRyxDQUFDLEVBQUUsT0FBTyxJQUFJLElBQUksQ0FBQyxVQUFVLEVBQUUsT0FBTyxFQUFFLEVBQUUsQ0FBQztZQUM1RCxJQUFJLENBQUM7Z0JBQ0gsc0VBQXNFO2dCQUN0RSxzRUFBc0U7Z0JBQ3RFLGlFQUFpRTtnQkFDakUsTUFBTSxRQUFRLEdBQUcsTUFBTSxJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsRUFBRTtvQkFDekMsTUFBTSxFQUFFLFdBQVcsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQztvQkFDM0MsR0FBRyxJQUFJO29CQUNQLE9BQU87aUJBQ1IsQ0FBQyxDQUFBO2dCQUVGLE1BQU0sSUFBSSxHQUFHLE1BQU0sUUFBUSxDQUFDLElBQUksRUFBRSxDQUFBO2dCQUNsQyxJQUFJLElBQUksR0FBa0MsSUFBSSxDQUFBO2dCQUU5QyxJQUFJLElBQUksRUFBRSxDQUFDO29CQUNULElBQUksQ0FBQzt3QkFDSCxJQUFJLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQTJCLENBQUE7b0JBQ25ELENBQUM7b0JBQUMsTUFBTSxDQUFDO3dCQUNQLElBQUksR0FBRyxJQUFJLENBQUE7b0JBQ2IsQ0FBQztnQkFDSCxDQUFDO2dCQUVELElBQUksQ0FBQyxRQUFRLENBQUMsRUFBRSxFQUFFLENBQUM7b0JBQ2pCLE1BQU0sT0FBTyxHQUNYLElBQUksRUFBRSxLQUFLLEVBQUUsT0FBTzt3QkFDcEIsQ0FBQyxPQUFPLElBQUksRUFBRSxNQUFNLEtBQUssUUFBUSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7d0JBQ3ZELHNCQUFzQixRQUFRLENBQUMsTUFBTSxFQUFFLENBQUE7b0JBRXpDLE1BQU0sS0FBSyxHQUFHLElBQUkseUJBQWdCLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxFQUFFO3dCQUNsRCxNQUFNLEVBQUUsUUFBUSxDQUFDLE1BQU07d0JBQ3ZCLE1BQU0sRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLE1BQU07d0JBQzNCLElBQUksRUFBRSxJQUFJLElBQUksSUFBSTtxQkFDbkIsQ0FBQyxDQUFBO29CQUVGLElBQUksS0FBSyxDQUFDLFdBQVcsSUFBSSxPQUFPLEdBQUcsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO3dCQUNuRCxNQUFNLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxPQUFPLEVBQUUsUUFBUSxDQUFDLENBQUMsQ0FBQTt3QkFDcEQsU0FBUyxHQUFHLEtBQUssQ0FBQTt3QkFDakIsU0FBUTtvQkFDVixDQUFDO29CQUVELE1BQU0sS0FBSyxDQUFBO2dCQUNiLENBQUM7Z0JBRUQsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO29CQUNWLE1BQU0sSUFBSSx5QkFBZ0IsQ0FBQyxxQ0FBcUMsRUFBRTt3QkFDaEUsTUFBTSxFQUFFLFFBQVEsQ0FBQyxNQUFNO3dCQUN2QixJQUFJLEVBQUUsSUFBSTtxQkFDWCxDQUFDLENBQUE7Z0JBQ0osQ0FBQztnQkFFRCxPQUFPLElBQUksQ0FBQTtZQUNiLENBQUM7WUFBQyxPQUFPLEdBQUcsRUFBRSxDQUFDO2dCQUNiLFNBQVMsR0FBRyxHQUFHLENBQUE7Z0JBQ2YsSUFBSSxHQUFHLFlBQVkseUJBQWdCLElBQUksQ0FBQyxHQUFHLENBQUMsV0FBVyxFQUFFLENBQUM7b0JBQ3hELE1BQU0sR0FBRyxDQUFBO2dCQUNYLENBQUM7Z0JBQ0QsSUFBSSxPQUFPLEdBQUcsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO29CQUM5QixNQUFNLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFBO29CQUMxQyxTQUFRO2dCQUNWLENBQUM7Z0JBQ0QsTUFBTSxHQUFHLENBQUE7WUFDWCxDQUFDO1FBQ0gsQ0FBQztRQUVELE1BQU0sU0FBUyxZQUFZLEtBQUs7WUFDOUIsQ0FBQyxDQUFDLFNBQVM7WUFDWCxDQUFDLENBQUMsSUFBSSx5QkFBZ0IsQ0FBQyx5QkFBeUIsRUFBRSxFQUFFLE1BQU0sRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFBO0lBQ3BFLENBQUM7SUFFTyxVQUFVLENBQUMsT0FBZSxFQUFFLFFBQW1CO1FBQ3JELE1BQU0sVUFBVSxHQUFHLFFBQVEsRUFBRSxPQUFPLEVBQUUsR0FBRyxFQUFFLENBQUMsYUFBYSxDQUFDLENBQUE7UUFDMUQsSUFBSSxVQUFVLEVBQUUsQ0FBQztZQUNmLE1BQU0sT0FBTyxHQUFHLE1BQU0sQ0FBQyxVQUFVLENBQUMsQ0FBQTtZQUNsQyxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsSUFBSSxPQUFPLEdBQUcsQ0FBQyxFQUFFLENBQUM7Z0JBQzFDLE9BQU8sT0FBTyxHQUFHLElBQUksQ0FBQTtZQUN2QixDQUFDO1FBQ0gsQ0FBQztRQUNELE9BQU8sSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxPQUFPLENBQUMsQ0FBQTtJQUNoRCxDQUFDO0lBRU8sS0FBSyxDQUFDLEVBQVU7UUFDdEIsT0FBTyxJQUFJLE9BQU8sQ0FBQyxDQUFDLE9BQU8sRUFBRSxFQUFFLENBQUMsVUFBVSxDQUFDLE9BQU8sRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFBO0lBQzFELENBQUM7Q0FDRjtBQWhWRCx3Q0FnVkMifQ==
|
|
@@ -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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
|