@hartl-services/medusa-base 0.4.0 → 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.medusa/server/src/admin/index.js +1517 -87
- package/.medusa/server/src/admin/index.mjs +1518 -88
- package/.medusa/server/src/api/admin/email/messages/[id]/resends/route.js +24 -0
- package/.medusa/server/src/api/admin/email/messages/[id]/route.js +12 -0
- package/.medusa/server/src/api/admin/email/messages/route.js +12 -0
- package/.medusa/server/src/api/admin/email/terms-versions/[id]/download/route.js +16 -0
- package/.medusa/server/src/api/admin/email/terms-versions/route.js +47 -0
- package/.medusa/server/src/api/admin/orders/[id]/documents/[document_id]/download/route.js +21 -0
- package/.medusa/server/src/api/admin/orders/[id]/documents/[document_id]/regenerate/route.js +38 -0
- package/.medusa/server/src/api/admin/orders/[id]/documents/regenerate/route.js +32 -0
- package/.medusa/server/src/api/admin/orders/[id]/documents/route.js +36 -0
- package/.medusa/server/src/api/admin/orders/[id]/packing-lists/[fulfillment_id]/download/route.js +24 -0
- package/.medusa/server/src/api/admin/orders/[id]/packing-lists/[fulfillment_id]/retry/route.js +44 -0
- package/.medusa/server/src/api/admin/orders/[id]/packing-lists/route.js +82 -0
- package/.medusa/server/src/api/document-download-response.js +16 -0
- package/.medusa/server/src/api/document-response.js +23 -0
- package/.medusa/server/src/api/files/[asset]/route.js +24 -0
- package/.medusa/server/src/api/files/file-response.js +43 -0
- package/.medusa/server/src/api/files/gateway-options.js +31 -0
- package/.medusa/server/src/api/files/private/[token]/route.js +29 -0
- package/.medusa/server/src/api/files/upload/[token]/route.js +66 -0
- package/.medusa/server/src/api/middlewares.js +168 -1
- package/.medusa/server/src/api/packing-list-response.js +22 -0
- package/.medusa/server/src/api/route.js +27 -0
- package/.medusa/server/src/api/store/documents/[id]/download/route.js +21 -0
- package/.medusa/server/src/api/store/documents/[id]/route.js +15 -0
- package/.medusa/server/src/api/store/documents/route.js +11 -0
- package/.medusa/server/src/api/terms-download-response.js +12 -0
- package/.medusa/server/src/documents/config/index.js +18 -0
- package/.medusa/server/src/documents/paths/documents.js +6 -0
- package/.medusa/server/src/documents/paths/index.js +18 -0
- package/.medusa/server/src/documents/plugin-features.js +24 -0
- package/.medusa/server/src/documents/schemas/documents.js +18 -0
- package/.medusa/server/src/documents/schemas/index.js +18 -0
- package/.medusa/server/src/documents/scripts/verify-documents-file-storage.js +55 -0
- package/.medusa/server/src/documents/templates/financial-document.js +142 -0
- package/.medusa/server/src/documents/templates/format.js +31 -0
- package/.medusa/server/src/documents/templates/html-factory.js +40 -0
- package/.medusa/server/src/documents/templates/html-utils.js +13 -0
- package/.medusa/server/src/documents/templates/layout.js +97 -0
- package/.medusa/server/src/documents/templates/packing-list.js +50 -0
- package/.medusa/server/src/documents/types/admin-api.js +3 -0
- package/.medusa/server/src/documents/types/document-summary.js +3 -0
- package/.medusa/server/src/documents/types/documents.js +3 -0
- package/.medusa/server/src/documents/types/html-factory.js +6 -0
- package/.medusa/server/src/documents/types/index.js +22 -0
- package/.medusa/server/src/documents/types/store-api.js +3 -0
- package/.medusa/server/src/documents/utils/document-merchant.js +22 -0
- package/.medusa/server/src/documents/utils/html-to-pdf.js +61 -0
- package/.medusa/server/src/documents/utils/private-file-storage.js +64 -0
- package/.medusa/server/src/documents/utils/resolve-services.js +7 -0
- package/.medusa/server/src/email/application/handle-invite-event.js +312 -0
- package/.medusa/server/src/email/application/handle-password-reset-event.js +354 -0
- package/.medusa/server/src/email/config/index.js +84 -0
- package/.medusa/server/src/email/config/notification-module.js +20 -0
- package/.medusa/server/src/email/domain/business-keys.js +50 -0
- package/.medusa/server/src/email/domain/documents-fact-fingerprint.js +7 -0
- package/.medusa/server/src/email/domain/event-schemas.js +36 -0
- package/.medusa/server/src/email/domain/failure-classification.js +53 -0
- package/.medusa/server/src/email/plugin-features.js +31 -0
- package/.medusa/server/src/email/rendering/default-templates.js +91 -0
- package/.medusa/server/src/email/rendering/render-email.js +37 -0
- package/.medusa/server/src/email/rendering/resolve-shop-configuration.js +48 -0
- package/.medusa/server/src/email/types/email-kinds.js +18 -0
- package/.medusa/server/src/email/types/index.js +21 -0
- package/.medusa/server/src/email/types/shop-configuration.js +3 -0
- package/.medusa/server/src/email/types/smtp-configuration.js +3 -0
- package/.medusa/server/src/email/types/template-data.js +79 -0
- package/.medusa/server/src/files/config/index.js +256 -0
- package/.medusa/server/src/files/gateway/index.js +115 -0
- package/.medusa/server/src/files/types/index.js +6 -0
- package/.medusa/server/src/files/types/public.js +6 -0
- package/.medusa/server/src/jobs/document-fact-publication-reconciliation.js +18 -0
- package/.medusa/server/src/jobs/document-resolution-reconciliation.js +20 -0
- package/.medusa/server/src/jobs/packing-list-reconciliation.js +49 -0
- package/.medusa/server/src/jobs/reconcile-email-attempts.js +63 -0
- package/.medusa/server/src/jobs/reconcile-pending-email-messages.js +41 -0
- package/.medusa/server/src/jobs/retry-email-messages.js +27 -0
- package/.medusa/server/src/migration-scripts/dismiss-orphaned-cart-promotion-links.js +26 -0
- package/.medusa/server/src/modules/documents/domain/cancellation-snapshot.js +97 -0
- package/.medusa/server/src/modules/documents/domain/document-number.js +36 -0
- package/.medusa/server/src/modules/documents/domain/document-resolution.js +24 -0
- package/.medusa/server/src/modules/documents/domain/issuance-rules.js +37 -0
- package/.medusa/server/src/modules/documents/domain/merchant.js +86 -0
- package/.medusa/server/src/modules/documents/domain/options.js +40 -0
- package/.medusa/server/src/modules/documents/domain/packing-list.js +90 -0
- package/.medusa/server/src/modules/documents/domain/snapshot-normalization.js +17 -0
- package/.medusa/server/src/modules/documents/domain/tax-breakdown.js +66 -0
- package/.medusa/server/src/modules/documents/index.js +15 -0
- package/.medusa/server/src/modules/documents/loaders/assert-private-file-storage.js +20 -0
- package/.medusa/server/src/modules/documents/migrations/Migration20260827061749.js +75 -0
- package/.medusa/server/src/modules/documents/migrations/Migration20260830111207.js +28 -0
- package/.medusa/server/src/modules/documents/models/document-artifact.js +25 -0
- package/.medusa/server/src/modules/documents/models/document-number-sequence.js +29 -0
- package/.medusa/server/src/modules/documents/models/document.js +82 -0
- package/.medusa/server/src/modules/documents/models/order-cancellation-resolution.js +51 -0
- package/.medusa/server/src/modules/documents/models/packing-list-revision.js +36 -0
- package/.medusa/server/src/modules/documents/models/packing-list.js +27 -0
- package/.medusa/server/src/modules/documents/models/refund-document-resolution.js +66 -0
- package/.medusa/server/src/modules/documents/models/shipment-invoice-assignment.js +51 -0
- package/.medusa/server/src/modules/documents/models/shipment-invoice-coordinator.js +44 -0
- package/.medusa/server/src/modules/documents/service.js +1701 -0
- package/.medusa/server/src/modules/email/domain/attachment.js +25 -0
- package/.medusa/server/src/modules/email/domain/message-state.js +69 -0
- package/.medusa/server/src/modules/email/index.js +13 -0
- package/.medusa/server/src/modules/email/migrations/Migration20260826173422.js +32 -0
- package/.medusa/server/src/modules/email/migrations/Migration20260827172945.js +16 -0
- package/.medusa/server/src/modules/email/migrations/Migration20260827194804.js +22 -0
- package/.medusa/server/src/modules/email/migrations/Migration20260906195205.js +16 -0
- package/.medusa/server/src/modules/email/models/email-attempt.js +56 -0
- package/.medusa/server/src/modules/email/models/email-message.js +71 -0
- package/.medusa/server/src/modules/email/models/email-terms-version.js +37 -0
- package/.medusa/server/src/modules/email/service.js +1285 -0
- package/.medusa/server/src/providers/s3-cache/cache/atomic-write.js +25 -0
- package/.medusa/server/src/providers/s3-cache/cache/cache-manager.js +115 -0
- package/.medusa/server/src/providers/s3-cache/cache/keyed-lock.js +28 -0
- package/.medusa/server/src/providers/s3-cache/index.js +8 -0
- package/.medusa/server/src/providers/s3-cache/object-key.js +53 -0
- package/.medusa/server/src/providers/s3-cache/s3-cache-file.js +229 -0
- package/.medusa/server/src/providers/s3-cache/s3-object-store.js +86 -0
- package/.medusa/server/src/providers/smtp/index.js +8 -0
- package/.medusa/server/src/providers/smtp/service.js +236 -0
- package/.medusa/server/src/providers/smtp/types.js +11 -0
- package/.medusa/server/src/public/config.js +186 -0
- package/.medusa/server/src/public/gateway.js +19 -0
- package/.medusa/server/src/public/instrumentation.js +56 -0
- package/.medusa/server/src/public/shop-config.js +12 -0
- package/.medusa/server/src/public/shop-types.js +24 -0
- package/.medusa/server/src/shop-config/build-food-shop-config.js +248 -0
- package/.medusa/server/src/shop-config/options.js +71 -0
- package/.medusa/server/src/subscribers/affiliate-consignment-reminder-due.js +26 -0
- package/.medusa/server/src/subscribers/documents-order-canceled.js +24 -0
- package/.medusa/server/src/subscribers/documents-order-cancellation-ready.js +26 -0
- package/.medusa/server/src/subscribers/documents-refund-ready.js +24 -0
- package/.medusa/server/src/subscribers/documents-shipment-created.js +36 -0
- package/.medusa/server/src/subscribers/documents-shipment-invoice-assignment-decided.js +26 -0
- package/.medusa/server/src/subscribers/email-order-canceled.js +28 -0
- package/.medusa/server/src/subscribers/email-shipment-created.js +32 -0
- package/.medusa/server/src/subscribers/order-placed.js +27 -0
- package/.medusa/server/src/subscribers/packing-list-allocation-revised.js +32 -0
- package/.medusa/server/src/subscribers/packing-list-fulfillment-canceled.js +54 -0
- package/.medusa/server/src/subscribers/packing-list-fulfillment-created.js +31 -0
- package/.medusa/server/src/subscribers/password-reset.js +23 -0
- package/.medusa/server/src/subscribers/payment-refunded.js +38 -0
- package/.medusa/server/src/subscribers/return-received.js +27 -0
- package/.medusa/server/src/subscribers/return-requested.js +27 -0
- package/.medusa/server/src/subscribers/user-invite.js +23 -0
- package/.medusa/server/src/utils/cart-promotion-links.js +101 -0
- package/.medusa/server/src/workflows/documents/issue-cancellation-after-refund.js +246 -0
- package/.medusa/server/src/workflows/documents/issue-document.js +163 -0
- package/.medusa/server/src/workflows/documents/issue-invoice-after-shipment.js +521 -0
- package/.medusa/server/src/workflows/documents/issue-packing-list.js +384 -0
- package/.medusa/server/src/workflows/documents/publish-document-facts.js +53 -0
- package/.medusa/server/src/workflows/documents/reconcile-document-resolutions.js +48 -0
- package/.medusa/server/src/workflows/documents/reconcile-order-cancellation.js +92 -0
- package/.medusa/server/src/workflows/documents/regenerate-issued-document.js +61 -0
- package/.medusa/server/src/workflows/email/dispatch-email-message.js +299 -0
- package/.medusa/server/src/workflows/email/documents-required-facts.js +30 -0
- package/.medusa/server/src/workflows/email/prepare-affiliate-reminder-email.js +58 -0
- package/.medusa/server/src/workflows/email/prepare-order-canceled-email.js +64 -0
- package/.medusa/server/src/workflows/email/prepare-order-received-email.js +56 -0
- package/.medusa/server/src/workflows/email/prepare-refund-email.js +47 -0
- package/.medusa/server/src/workflows/email/prepare-return-email.js +75 -0
- package/.medusa/server/src/workflows/email/prepare-shipment-email.js +82 -0
- package/.medusa/server/src/workflows/email/retry-email-messages.js +31 -0
- package/.medusa/server/src/workflows/hooks/dismiss-deleted-promotion-cart-links.js +23 -0
- package/README.md +1619 -7
- package/dist/documents/config/index.d.ts +11 -0
- package/dist/documents/config/index.js +17 -0
- package/dist/documents/templates/financial-document.d.ts +3 -0
- package/dist/documents/templates/financial-document.js +141 -0
- package/dist/documents/templates/format.d.ts +16 -0
- package/dist/documents/templates/format.js +30 -0
- package/dist/documents/templates/html-factory.d.ts +11 -0
- package/dist/documents/templates/html-factory.js +39 -0
- package/dist/documents/templates/html-utils.d.ts +2 -0
- package/dist/documents/templates/html-utils.js +12 -0
- package/dist/documents/templates/layout.d.ts +17 -0
- package/dist/documents/templates/layout.js +96 -0
- package/dist/documents/templates/packing-list.d.ts +3 -0
- package/dist/documents/templates/packing-list.js +49 -0
- package/dist/documents/types/admin-api.d.ts +1 -0
- package/dist/documents/types/admin-api.js +2 -0
- package/dist/documents/types/document-summary.d.ts +1 -0
- package/dist/documents/types/document-summary.js +2 -0
- package/dist/documents/types/documents.d.ts +174 -0
- package/dist/documents/types/documents.js +2 -0
- package/dist/documents/types/html-factory.d.ts +7 -0
- package/dist/documents/types/html-factory.js +5 -0
- package/dist/documents/types/index.d.ts +5 -0
- package/dist/documents/types/index.js +21 -0
- package/dist/documents/types/store-api.d.ts +1 -0
- package/dist/documents/types/store-api.js +2 -0
- package/dist/email/config/index.d.ts +17 -0
- package/dist/email/config/index.js +83 -0
- package/dist/email/config/notification-module.d.ts +22 -0
- package/dist/email/config/notification-module.js +19 -0
- package/dist/email/types/email-kinds.d.ts +15 -0
- package/dist/email/types/email-kinds.js +17 -0
- package/dist/email/types/index.d.ts +4 -0
- package/dist/email/types/index.js +20 -0
- package/dist/email/types/shop-configuration.d.ts +43 -0
- package/dist/email/types/shop-configuration.js +2 -0
- package/dist/email/types/smtp-configuration.d.ts +9 -0
- package/dist/email/types/smtp-configuration.js +2 -0
- package/dist/email/types/template-data.d.ts +100 -0
- package/dist/email/types/template-data.js +78 -0
- package/dist/files/config/index.d.ts +32 -0
- package/dist/files/config/index.js +255 -0
- package/dist/files/gateway/index.d.ts +30 -0
- package/dist/files/gateway/index.js +114 -0
- package/dist/files/types/index.d.ts +2 -0
- package/dist/files/types/index.js +5 -0
- package/dist/files/types/public.d.ts +90 -0
- package/dist/files/types/public.js +5 -0
- package/dist/modules/documents/domain/merchant.d.ts +22 -0
- package/dist/modules/documents/domain/merchant.js +85 -0
- package/dist/modules/documents/domain/options.d.ts +34 -0
- package/dist/modules/documents/domain/options.js +39 -0
- package/dist/public/config.d.ts +59 -0
- package/dist/public/config.js +185 -0
- package/dist/public/gateway.d.ts +2 -0
- package/dist/public/gateway.js +18 -0
- package/dist/public/instrumentation.d.ts +12 -0
- package/dist/public/instrumentation.js +55 -0
- package/dist/public/shop-config.d.ts +8 -0
- package/dist/public/shop-config.js +11 -0
- package/dist/public/shop-types.d.ts +7 -0
- package/dist/public/shop-types.js +23 -0
- package/dist/public/types.d.ts +17 -1
- package/dist/shop-config/build-food-shop-config.d.ts +44 -0
- package/dist/shop-config/build-food-shop-config.js +247 -0
- package/dist/shop-config/options.d.ts +41 -0
- package/dist/shop-config/options.js +70 -0
- package/package.json +48 -5
|
@@ -0,0 +1,384 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.issuePackingListWorkflow = void 0;
|
|
4
|
+
const utils_1 = require("@medusajs/framework/utils");
|
|
5
|
+
const workflows_sdk_1 = require("@medusajs/framework/workflows-sdk");
|
|
6
|
+
const core_flows_1 = require("@medusajs/medusa/core-flows");
|
|
7
|
+
const packing_list_1 = require("../../modules/documents/domain/packing-list");
|
|
8
|
+
const document_merchant_1 = require("../../documents/utils/document-merchant");
|
|
9
|
+
const private_file_storage_1 = require("../../documents/utils/private-file-storage");
|
|
10
|
+
const html_to_pdf_1 = require("../../documents/utils/html-to-pdf");
|
|
11
|
+
const resolve_services_1 = require("../../documents/utils/resolve-services");
|
|
12
|
+
const asRecord = (value, field) => {
|
|
13
|
+
if (!value || typeof value !== "object" || Array.isArray(value)) {
|
|
14
|
+
throw new utils_1.MedusaError(utils_1.MedusaError.Types.UNEXPECTED_STATE, `Expected '${field}' to be an object.`);
|
|
15
|
+
}
|
|
16
|
+
return value;
|
|
17
|
+
};
|
|
18
|
+
const asString = (value, field) => {
|
|
19
|
+
if (typeof value !== "string" || !value.trim()) {
|
|
20
|
+
throw new utils_1.MedusaError(utils_1.MedusaError.Types.UNEXPECTED_STATE, `Expected '${field}' to be a non-empty string.`);
|
|
21
|
+
}
|
|
22
|
+
return value;
|
|
23
|
+
};
|
|
24
|
+
const asOptionalString = (value) => typeof value === "string" && value.trim() ? value : null;
|
|
25
|
+
const asOptionalNumber = (value) => typeof value === "number" && Number.isFinite(value) ? value : null;
|
|
26
|
+
const asQuantity = (value, field) => {
|
|
27
|
+
if (typeof value === "number" && Number.isFinite(value)) {
|
|
28
|
+
return value;
|
|
29
|
+
}
|
|
30
|
+
if (typeof value === "string" &&
|
|
31
|
+
value.trim() &&
|
|
32
|
+
Number.isFinite(Number(value))) {
|
|
33
|
+
return Number(value);
|
|
34
|
+
}
|
|
35
|
+
const record = value && typeof value === "object" ? asRecord(value, field) : null;
|
|
36
|
+
if (record && Number.isFinite(Number(record.value))) {
|
|
37
|
+
return Number(record.value);
|
|
38
|
+
}
|
|
39
|
+
throw new utils_1.MedusaError(utils_1.MedusaError.Types.UNEXPECTED_STATE, `Expected '${field}' to be a numeric quantity.`);
|
|
40
|
+
};
|
|
41
|
+
const asIsoDate = (value, field) => {
|
|
42
|
+
const date = value instanceof Date ? value : new Date(asString(value, field));
|
|
43
|
+
if (Number.isNaN(date.getTime())) {
|
|
44
|
+
throw new utils_1.MedusaError(utils_1.MedusaError.Types.UNEXPECTED_STATE, `Expected '${field}' to be a valid date.`);
|
|
45
|
+
}
|
|
46
|
+
return date.toISOString();
|
|
47
|
+
};
|
|
48
|
+
const tryResolveBatchCapability = (container) => {
|
|
49
|
+
const registry = container;
|
|
50
|
+
if (registry.hasRegistration?.("batch_management") === false) {
|
|
51
|
+
return null;
|
|
52
|
+
}
|
|
53
|
+
let resolved;
|
|
54
|
+
try {
|
|
55
|
+
resolved = container.resolve("batch_management");
|
|
56
|
+
}
|
|
57
|
+
catch (error) {
|
|
58
|
+
if (error instanceof Error &&
|
|
59
|
+
error.message.includes("Missing registration")) {
|
|
60
|
+
return null;
|
|
61
|
+
}
|
|
62
|
+
throw error;
|
|
63
|
+
}
|
|
64
|
+
if (!resolved ||
|
|
65
|
+
typeof resolved !== "object" ||
|
|
66
|
+
!("getFulfillmentPackingListBatchSnapshot" in resolved) ||
|
|
67
|
+
typeof resolved.getFulfillmentPackingListBatchSnapshot !== "function") {
|
|
68
|
+
throw new utils_1.MedusaError(utils_1.MedusaError.Types.UNEXPECTED_STATE, "The installed batch-management plugin does not provide the fulfillment packing-list capability.");
|
|
69
|
+
}
|
|
70
|
+
return resolved;
|
|
71
|
+
};
|
|
72
|
+
const findOrderIdForFulfillment = async (container, fulfillmentId) => {
|
|
73
|
+
const link = container.resolve(utils_1.ContainerRegistrationKeys.LINK);
|
|
74
|
+
const orderFulfillment = link.getLinkModule(utils_1.Modules.ORDER, "order_id", utils_1.Modules.FULFILLMENT, "fulfillment_id");
|
|
75
|
+
const records = await orderFulfillment.list({ fulfillment_id: fulfillmentId }, { select: ["order_id"] });
|
|
76
|
+
const orderId = records[0]?.order_id;
|
|
77
|
+
if (records.length !== 1 || !orderId) {
|
|
78
|
+
throw new utils_1.MedusaError(utils_1.MedusaError.Types.NOT_FOUND, `Expected one order link for fulfillment ${fulfillmentId}.`);
|
|
79
|
+
}
|
|
80
|
+
return orderId;
|
|
81
|
+
};
|
|
82
|
+
const resolvePackingListCandidateStep = (0, workflows_sdk_1.createStep)("documents-resolve-packing-list-candidate", async (input, { container }) => {
|
|
83
|
+
const fulfillmentId = asString(input.fulfillment_id, "fulfillment_id");
|
|
84
|
+
const linkedOrderId = await findOrderIdForFulfillment(container, fulfillmentId);
|
|
85
|
+
if (input.order_id && input.order_id !== linkedOrderId) {
|
|
86
|
+
throw new utils_1.MedusaError(utils_1.MedusaError.Types.NOT_FOUND, `Fulfillment ${fulfillmentId} does not belong to order ${input.order_id}.`);
|
|
87
|
+
}
|
|
88
|
+
const query = container.resolve(utils_1.ContainerRegistrationKeys.QUERY);
|
|
89
|
+
const { data } = await query.graph({
|
|
90
|
+
entity: "fulfillment",
|
|
91
|
+
fields: [
|
|
92
|
+
"id",
|
|
93
|
+
"location_id",
|
|
94
|
+
"requires_shipping",
|
|
95
|
+
"canceled_at",
|
|
96
|
+
"shipped_at",
|
|
97
|
+
"created_at",
|
|
98
|
+
"items.id",
|
|
99
|
+
"items.line_item_id",
|
|
100
|
+
"items.inventory_item_id",
|
|
101
|
+
"items.title",
|
|
102
|
+
"items.sku",
|
|
103
|
+
"items.quantity",
|
|
104
|
+
],
|
|
105
|
+
filters: { id: fulfillmentId },
|
|
106
|
+
});
|
|
107
|
+
if (data.length !== 1) {
|
|
108
|
+
throw new utils_1.MedusaError(utils_1.MedusaError.Types.NOT_FOUND, `Fulfillment ${fulfillmentId} was not found.`);
|
|
109
|
+
}
|
|
110
|
+
const fulfillment = asRecord(data[0], "fulfillment");
|
|
111
|
+
if (!(0, packing_list_1.isPackingListFulfillmentEligible)({
|
|
112
|
+
requires_shipping: fulfillment.requires_shipping,
|
|
113
|
+
canceled_at: fulfillment.canceled_at,
|
|
114
|
+
shipped_at: fulfillment.shipped_at,
|
|
115
|
+
})) {
|
|
116
|
+
return new workflows_sdk_1.StepResponse({
|
|
117
|
+
action: "not_eligible",
|
|
118
|
+
source_revision: null,
|
|
119
|
+
source: null,
|
|
120
|
+
fulfillment_created_at: null,
|
|
121
|
+
});
|
|
122
|
+
}
|
|
123
|
+
const locationId = asString(fulfillment.location_id, "fulfillment.location_id");
|
|
124
|
+
const fulfillmentCreatedAt = asIsoDate(fulfillment.created_at, "fulfillment.created_at");
|
|
125
|
+
const rawItems = fulfillment.items;
|
|
126
|
+
if (!Array.isArray(rawItems) || !rawItems.length) {
|
|
127
|
+
throw new utils_1.MedusaError(utils_1.MedusaError.Types.UNEXPECTED_STATE, `Fulfillment ${fulfillmentId} has no packing-list items.`);
|
|
128
|
+
}
|
|
129
|
+
const capability = tryResolveBatchCapability(container);
|
|
130
|
+
const batchSnapshot = capability
|
|
131
|
+
? await capability.getFulfillmentPackingListBatchSnapshot(fulfillmentId)
|
|
132
|
+
: null;
|
|
133
|
+
if (batchSnapshot?.status === "pending") {
|
|
134
|
+
return new workflows_sdk_1.StepResponse({
|
|
135
|
+
action: "pending",
|
|
136
|
+
source_revision: null,
|
|
137
|
+
source: null,
|
|
138
|
+
fulfillment_created_at: fulfillmentCreatedAt,
|
|
139
|
+
});
|
|
140
|
+
}
|
|
141
|
+
if (batchSnapshot &&
|
|
142
|
+
(batchSnapshot.order_id !== linkedOrderId ||
|
|
143
|
+
batchSnapshot.fulfillment_id !== fulfillmentId ||
|
|
144
|
+
batchSnapshot.location_id !== locationId)) {
|
|
145
|
+
throw new utils_1.MedusaError(utils_1.MedusaError.Types.UNEXPECTED_STATE, `Batch packing-list data for fulfillment ${fulfillmentId} has an invalid scope.`);
|
|
146
|
+
}
|
|
147
|
+
const sourceRevision = batchSnapshot?.revision ?? 1;
|
|
148
|
+
const existing = await (0, resolve_services_1.resolveDocumentsService)(container).getPackingListForOrderAndFulfillment(linkedOrderId, fulfillmentId);
|
|
149
|
+
if (existing?.packing_list.lifecycle_status === "canceled" ||
|
|
150
|
+
existing?.revisions.some((revision) => revision.source_revision === sourceRevision &&
|
|
151
|
+
revision.generation_status === "ready")) {
|
|
152
|
+
return new workflows_sdk_1.StepResponse({
|
|
153
|
+
action: "not_eligible",
|
|
154
|
+
source_revision: null,
|
|
155
|
+
source: null,
|
|
156
|
+
fulfillment_created_at: null,
|
|
157
|
+
});
|
|
158
|
+
}
|
|
159
|
+
const { result: rawOrder } = await (0, core_flows_1.getOrderDetailWorkflow)(container).run({
|
|
160
|
+
input: {
|
|
161
|
+
order_id: linkedOrderId,
|
|
162
|
+
fields: ["id", "display_id"],
|
|
163
|
+
},
|
|
164
|
+
});
|
|
165
|
+
const order = asRecord(rawOrder, "order");
|
|
166
|
+
const locationService = container.resolve(utils_1.Modules.STOCK_LOCATION);
|
|
167
|
+
const location = await locationService.retrieveStockLocation(locationId);
|
|
168
|
+
const fulfillmentItems = rawItems.map((rawItem, index) => {
|
|
169
|
+
const item = asRecord(rawItem, `fulfillment.items[${index}]`);
|
|
170
|
+
return {
|
|
171
|
+
line_item_id: asString(item.line_item_id, "fulfillment.items[].line_item_id"),
|
|
172
|
+
inventory_item_id: asOptionalString(item.inventory_item_id),
|
|
173
|
+
title: asString(item.title, "fulfillment.items[].title"),
|
|
174
|
+
sku: asOptionalString(item.sku),
|
|
175
|
+
quantity: asQuantity(item.quantity, "fulfillment.items[].quantity"),
|
|
176
|
+
};
|
|
177
|
+
});
|
|
178
|
+
const lines = (0, packing_list_1.createPackingListLines)({
|
|
179
|
+
fulfillment_items: fulfillmentItems,
|
|
180
|
+
batch_allocations: batchSnapshot?.allocations ?? [],
|
|
181
|
+
batch_management_enabled: !!capability,
|
|
182
|
+
});
|
|
183
|
+
return new workflows_sdk_1.StepResponse({
|
|
184
|
+
action: "ready",
|
|
185
|
+
source_revision: sourceRevision,
|
|
186
|
+
fulfillment_created_at: fulfillmentCreatedAt,
|
|
187
|
+
source: {
|
|
188
|
+
order: {
|
|
189
|
+
id: asString(order.id, "order.id"),
|
|
190
|
+
display_id: asOptionalNumber(order.display_id),
|
|
191
|
+
},
|
|
192
|
+
fulfillment: {
|
|
193
|
+
id: fulfillmentId,
|
|
194
|
+
created_at: fulfillmentCreatedAt,
|
|
195
|
+
location_id: locationId,
|
|
196
|
+
location_name: asString(location.name, "stock_location.name"),
|
|
197
|
+
},
|
|
198
|
+
lines,
|
|
199
|
+
},
|
|
200
|
+
});
|
|
201
|
+
});
|
|
202
|
+
const claimPackingListStep = (0, workflows_sdk_1.createStep)("documents-claim-packing-list-revision", async (candidate, { container }) => {
|
|
203
|
+
if (candidate.action !== "ready" ||
|
|
204
|
+
!candidate.source ||
|
|
205
|
+
!candidate.source_revision ||
|
|
206
|
+
!candidate.fulfillment_created_at) {
|
|
207
|
+
return new workflows_sdk_1.StepResponse({
|
|
208
|
+
should_render: false,
|
|
209
|
+
action: candidate.action,
|
|
210
|
+
packing_list_id: null,
|
|
211
|
+
revision_id: null,
|
|
212
|
+
attempt_token: null,
|
|
213
|
+
snapshot: null,
|
|
214
|
+
}, null);
|
|
215
|
+
}
|
|
216
|
+
const source = candidate.source;
|
|
217
|
+
const claimed = await (0, resolve_services_1.resolveDocumentsService)(container).claimPackingListRevision({
|
|
218
|
+
order_id: source.order.id,
|
|
219
|
+
order_display_id: source.order.display_id,
|
|
220
|
+
fulfillment_id: source.fulfillment.id,
|
|
221
|
+
fulfillment_created_at: new Date(candidate.fulfillment_created_at),
|
|
222
|
+
source_revision: candidate.source_revision,
|
|
223
|
+
});
|
|
224
|
+
if (claimed.action !== "render" ||
|
|
225
|
+
!claimed.revision ||
|
|
226
|
+
!claimed.attempt_token) {
|
|
227
|
+
return new workflows_sdk_1.StepResponse({
|
|
228
|
+
should_render: false,
|
|
229
|
+
action: claimed.action,
|
|
230
|
+
packing_list_id: claimed.packing_list.id,
|
|
231
|
+
revision_id: claimed.revision?.id ?? null,
|
|
232
|
+
attempt_token: null,
|
|
233
|
+
snapshot: claimed.revision?.snapshot ?? null,
|
|
234
|
+
}, null);
|
|
235
|
+
}
|
|
236
|
+
return new workflows_sdk_1.StepResponse({
|
|
237
|
+
should_render: true,
|
|
238
|
+
action: "render",
|
|
239
|
+
packing_list_id: claimed.packing_list.id,
|
|
240
|
+
revision_id: claimed.revision.id,
|
|
241
|
+
attempt_token: claimed.attempt_token,
|
|
242
|
+
snapshot: null,
|
|
243
|
+
}, {
|
|
244
|
+
revision_id: claimed.revision.id,
|
|
245
|
+
attempt_token: claimed.attempt_token,
|
|
246
|
+
});
|
|
247
|
+
}, async (claim, { container }) => {
|
|
248
|
+
if (!claim) {
|
|
249
|
+
return;
|
|
250
|
+
}
|
|
251
|
+
await (0, resolve_services_1.resolveDocumentsService)(container).markPackingListRevisionFailed({
|
|
252
|
+
revision_id: claim.revision_id,
|
|
253
|
+
attempt_token: claim.attempt_token,
|
|
254
|
+
code: "workflow_failed",
|
|
255
|
+
reason: "The packing-list generation workflow did not finish.",
|
|
256
|
+
});
|
|
257
|
+
});
|
|
258
|
+
const savePackingListRevisionSnapshotStep = (0, workflows_sdk_1.createStep)("documents-save-packing-list-revision-snapshot", async ({ candidate, claim }, { container }) => {
|
|
259
|
+
if (!claim.should_render ||
|
|
260
|
+
!claim.packing_list_id ||
|
|
261
|
+
!claim.revision_id ||
|
|
262
|
+
!claim.attempt_token) {
|
|
263
|
+
return new workflows_sdk_1.StepResponse(claim);
|
|
264
|
+
}
|
|
265
|
+
if (candidate.action !== "ready" ||
|
|
266
|
+
!candidate.source ||
|
|
267
|
+
!candidate.source_revision) {
|
|
268
|
+
throw new utils_1.MedusaError(utils_1.MedusaError.Types.UNEXPECTED_STATE, "A claimed packing-list revision has no renderable source.");
|
|
269
|
+
}
|
|
270
|
+
const source = candidate.source;
|
|
271
|
+
const snapshot = {
|
|
272
|
+
...source,
|
|
273
|
+
document: {
|
|
274
|
+
kind: "packing_list",
|
|
275
|
+
id: claim.packing_list_id,
|
|
276
|
+
number: (0, packing_list_1.formatPackingListNumber)({
|
|
277
|
+
order_id: source.order.id,
|
|
278
|
+
order_display_id: source.order.display_id,
|
|
279
|
+
fulfillment_id: source.fulfillment.id,
|
|
280
|
+
}),
|
|
281
|
+
source_revision: candidate.source_revision,
|
|
282
|
+
generated_at: new Date().toISOString(),
|
|
283
|
+
},
|
|
284
|
+
};
|
|
285
|
+
await (0, resolve_services_1.resolveDocumentsService)(container).savePackingListRevisionSnapshot({
|
|
286
|
+
revision_id: claim.revision_id,
|
|
287
|
+
attempt_token: claim.attempt_token,
|
|
288
|
+
snapshot,
|
|
289
|
+
});
|
|
290
|
+
return new workflows_sdk_1.StepResponse({ ...claim, snapshot });
|
|
291
|
+
});
|
|
292
|
+
const renderPackingListHtmlStep = (0, workflows_sdk_1.createStep)("documents-render-packing-list-html", async (claim, { container }) => {
|
|
293
|
+
if (!claim.should_render || !claim.snapshot) {
|
|
294
|
+
return new workflows_sdk_1.StepResponse(null);
|
|
295
|
+
}
|
|
296
|
+
const documents = (0, resolve_services_1.resolveDocumentsService)(container);
|
|
297
|
+
const options = await documents.getPluginOptions();
|
|
298
|
+
let merchant;
|
|
299
|
+
try {
|
|
300
|
+
merchant = await (0, document_merchant_1.resolveDocumentMerchant)(container, options.merchantFallback);
|
|
301
|
+
}
|
|
302
|
+
catch (error) {
|
|
303
|
+
// Record the reason on the revision so the Admin widget shows it; the
|
|
304
|
+
// claim's generic compensation then leaves the failed revision alone.
|
|
305
|
+
if (claim.revision_id && claim.attempt_token) {
|
|
306
|
+
await documents.markPackingListRevisionFailed({
|
|
307
|
+
revision_id: claim.revision_id,
|
|
308
|
+
attempt_token: claim.attempt_token,
|
|
309
|
+
code: "merchant_unavailable",
|
|
310
|
+
reason: error instanceof Error ? error.message : String(error),
|
|
311
|
+
});
|
|
312
|
+
}
|
|
313
|
+
throw error;
|
|
314
|
+
}
|
|
315
|
+
const html = await options.htmlFactory({ ...claim.snapshot, merchant });
|
|
316
|
+
if (typeof html !== "string" || !html.trim()) {
|
|
317
|
+
throw new utils_1.MedusaError(utils_1.MedusaError.Types.INVALID_DATA, "The documents htmlFactory must return non-empty packing-list HTML.");
|
|
318
|
+
}
|
|
319
|
+
return new workflows_sdk_1.StepResponse({ claim, html });
|
|
320
|
+
});
|
|
321
|
+
const createPackingListFileStep = (0, workflows_sdk_1.createStep)("documents-create-packing-list-file", async (renderedHtml, { container }) => {
|
|
322
|
+
if (!renderedHtml) {
|
|
323
|
+
return new workflows_sdk_1.StepResponse(null, null);
|
|
324
|
+
}
|
|
325
|
+
const { claim, html } = renderedHtml;
|
|
326
|
+
if (!claim.snapshot ||
|
|
327
|
+
!claim.packing_list_id ||
|
|
328
|
+
!claim.revision_id ||
|
|
329
|
+
!claim.attempt_token) {
|
|
330
|
+
throw new utils_1.MedusaError(utils_1.MedusaError.Types.UNEXPECTED_STATE, "A rendered packing list has no active generation claim.");
|
|
331
|
+
}
|
|
332
|
+
const options = await (0, resolve_services_1.resolveDocumentsService)(container).getPluginOptions();
|
|
333
|
+
const pdf = await (0, html_to_pdf_1.renderHtmlToPdf)({
|
|
334
|
+
html,
|
|
335
|
+
executablePath: options.pdf.executablePath,
|
|
336
|
+
});
|
|
337
|
+
const filename = `${claim.snapshot.document.number}-R${claim.snapshot.document.source_revision}.pdf`;
|
|
338
|
+
(0, private_file_storage_1.assertPrivateFileStorage)(container);
|
|
339
|
+
const files = container.resolve(utils_1.Modules.FILE);
|
|
340
|
+
const file = await files.createFiles({
|
|
341
|
+
filename,
|
|
342
|
+
mimeType: "application/pdf",
|
|
343
|
+
content: pdf.toString("base64"),
|
|
344
|
+
access: "private",
|
|
345
|
+
});
|
|
346
|
+
return new workflows_sdk_1.StepResponse({
|
|
347
|
+
packing_list_id: claim.packing_list_id,
|
|
348
|
+
revision_id: claim.revision_id,
|
|
349
|
+
attempt_token: claim.attempt_token,
|
|
350
|
+
file_id: file.id,
|
|
351
|
+
filename,
|
|
352
|
+
}, file.id);
|
|
353
|
+
}, async (fileId, { container }) => {
|
|
354
|
+
if (!fileId) {
|
|
355
|
+
return;
|
|
356
|
+
}
|
|
357
|
+
const files = container.resolve(utils_1.Modules.FILE);
|
|
358
|
+
await files.deleteFiles([fileId]);
|
|
359
|
+
});
|
|
360
|
+
const publishPackingListStep = (0, workflows_sdk_1.createStep)("documents-publish-packing-list", async (rendered, { container }) => {
|
|
361
|
+
if (!rendered) {
|
|
362
|
+
return new workflows_sdk_1.StepResponse(null);
|
|
363
|
+
}
|
|
364
|
+
await (0, resolve_services_1.resolveDocumentsService)(container).publishPackingListRevision({
|
|
365
|
+
revision_id: rendered.revision_id,
|
|
366
|
+
attempt_token: rendered.attempt_token,
|
|
367
|
+
file_id: rendered.file_id,
|
|
368
|
+
filename: rendered.filename,
|
|
369
|
+
});
|
|
370
|
+
return new workflows_sdk_1.StepResponse(rendered.packing_list_id);
|
|
371
|
+
});
|
|
372
|
+
exports.issuePackingListWorkflow = (0, workflows_sdk_1.createWorkflow)("documents-issue-packing-list", (input) => {
|
|
373
|
+
const candidate = resolvePackingListCandidateStep(input);
|
|
374
|
+
const claim = claimPackingListStep(candidate);
|
|
375
|
+
const savedClaim = savePackingListRevisionSnapshotStep({
|
|
376
|
+
candidate,
|
|
377
|
+
claim,
|
|
378
|
+
});
|
|
379
|
+
const renderedHtml = renderPackingListHtmlStep(savedClaim);
|
|
380
|
+
const file = createPackingListFileStep(renderedHtml);
|
|
381
|
+
const packingListId = publishPackingListStep(file);
|
|
382
|
+
return new workflows_sdk_1.WorkflowResponse(packingListId);
|
|
383
|
+
});
|
|
384
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaXNzdWUtcGFja2luZy1saXN0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vc3JjL3dvcmtmbG93cy9kb2N1bWVudHMvaXNzdWUtcGFja2luZy1saXN0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUlBLHFEQUlrQztBQUNsQyxxRUFLMEM7QUFDMUMsNERBQW9FO0FBRXBFLDhFQU1vRDtBQUVwRCwrRUFBaUY7QUFDakYscUZBQXFGO0FBQ3JGLG1FQUFtRTtBQUNuRSw2RUFBZ0Y7QUF3RmhGLE1BQU0sUUFBUSxHQUFHLENBQUMsS0FBYyxFQUFFLEtBQWEsRUFBMkIsRUFBRTtJQUMxRSxJQUFJLENBQUMsS0FBSyxJQUFJLE9BQU8sS0FBSyxLQUFLLFFBQVEsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUM7UUFDaEUsTUFBTSxJQUFJLG1CQUFXLENBQ25CLG1CQUFXLENBQUMsS0FBSyxDQUFDLGdCQUFnQixFQUNsQyxhQUFhLEtBQUssb0JBQW9CLENBQ3ZDLENBQUE7SUFDSCxDQUFDO0lBQ0QsT0FBTyxLQUFnQyxDQUFBO0FBQ3pDLENBQUMsQ0FBQTtBQUVELE1BQU0sUUFBUSxHQUFHLENBQUMsS0FBYyxFQUFFLEtBQWEsRUFBVSxFQUFFO0lBQ3pELElBQUksT0FBTyxLQUFLLEtBQUssUUFBUSxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUM7UUFDL0MsTUFBTSxJQUFJLG1CQUFXLENBQ25CLG1CQUFXLENBQUMsS0FBSyxDQUFDLGdCQUFnQixFQUNsQyxhQUFhLEtBQUssNkJBQTZCLENBQ2hELENBQUE7SUFDSCxDQUFDO0lBQ0QsT0FBTyxLQUFLLENBQUE7QUFDZCxDQUFDLENBQUE7QUFFRCxNQUFNLGdCQUFnQixHQUFHLENBQUMsS0FBYyxFQUFpQixFQUFFLENBQ3pELE9BQU8sS0FBSyxLQUFLLFFBQVEsSUFBSSxLQUFLLENBQUMsSUFBSSxFQUFFLENBQUMs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
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.publishDocumentFactsWorkflow = exports.publishDocumentFactsStep = exports.publishUnpublishedDocumentFacts = void 0;
|
|
4
|
+
const utils_1 = require("@medusajs/framework/utils");
|
|
5
|
+
const workflows_sdk_1 = require("@medusajs/framework/workflows-sdk");
|
|
6
|
+
const resolve_services_1 = require("../../documents/utils/resolve-services");
|
|
7
|
+
const publishUnpublishedDocumentFacts = async (documents, eventBus, limit, files, logger) => {
|
|
8
|
+
const facts = await documents.listUnpublishedDocumentFacts({ limit });
|
|
9
|
+
let emitted = 0;
|
|
10
|
+
for (const fact of facts) {
|
|
11
|
+
try {
|
|
12
|
+
if (files) {
|
|
13
|
+
let artifacts = [];
|
|
14
|
+
if (fact.kind === "shipment_assignment") {
|
|
15
|
+
artifacts =
|
|
16
|
+
fact.payload.decision === "carrier"
|
|
17
|
+
? [fact.payload.invoice_artifact]
|
|
18
|
+
: [];
|
|
19
|
+
}
|
|
20
|
+
else if (fact.kind === "refund") {
|
|
21
|
+
artifacts = fact.payload.artifact ? [fact.payload.artifact] : [];
|
|
22
|
+
}
|
|
23
|
+
else {
|
|
24
|
+
artifacts = fact.payload.attachments.map((attachment) => attachment.artifact);
|
|
25
|
+
}
|
|
26
|
+
for (const artifact of artifacts) {
|
|
27
|
+
await files.getAsBuffer(artifact.file_id);
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
await eventBus.emit({ name: fact.event_name, data: fact.payload });
|
|
31
|
+
await documents.markDocumentFactEmitted({
|
|
32
|
+
kind: fact.kind,
|
|
33
|
+
id: fact.id,
|
|
34
|
+
emitted_at: new Date(),
|
|
35
|
+
});
|
|
36
|
+
emitted += 1;
|
|
37
|
+
}
|
|
38
|
+
catch {
|
|
39
|
+
logger?.warn(`documents: fact publication deferred for ${fact.kind} ${fact.id}`);
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
return emitted;
|
|
43
|
+
};
|
|
44
|
+
exports.publishUnpublishedDocumentFacts = publishUnpublishedDocumentFacts;
|
|
45
|
+
exports.publishDocumentFactsStep = (0, workflows_sdk_1.createStep)("documents-publish-committed-facts", async (input, { container }) => {
|
|
46
|
+
if (input.enabled === false) {
|
|
47
|
+
return new workflows_sdk_1.StepResponse(0);
|
|
48
|
+
}
|
|
49
|
+
const emitted = await (0, exports.publishUnpublishedDocumentFacts)((0, resolve_services_1.resolveDocumentsService)(container), container.resolve(utils_1.Modules.EVENT_BUS), input.limit, container.resolve(utils_1.Modules.FILE), container.resolve(utils_1.ContainerRegistrationKeys.LOGGER));
|
|
50
|
+
return new workflows_sdk_1.StepResponse(emitted);
|
|
51
|
+
});
|
|
52
|
+
exports.publishDocumentFactsWorkflow = (0, workflows_sdk_1.createWorkflow)("documents-publish-committed-facts", (input) => new workflows_sdk_1.WorkflowResponse((0, exports.publishDocumentFactsStep)(input)));
|
|
53
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGlzaC1kb2N1bWVudC1mYWN0cy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy93b3JrZmxvd3MvZG9jdW1lbnRzL3B1Ymxpc2gtZG9jdW1lbnQtZmFjdHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBS0EscURBQThFO0FBQzlFLHFFQUswQztBQUsxQyw2RUFBZ0Y7QUFJekUsTUFBTSwrQkFBK0IsR0FBRyxLQUFLLEVBQ2xELFNBR0MsRUFDRCxRQUFnQyxFQUNoQyxLQUFhLEVBQ2IsS0FBK0MsRUFDL0MsTUFBNkIsRUFDWixFQUFFO0lBQ25CLE1BQU0sS0FBSyxHQUFHLE1BQU0sU0FBUyxDQUFDLDRCQUE0QixDQUFDLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQTtJQUNyRSxJQUFJLE9BQU8sR0FBRyxDQUFDLENBQUE7SUFDZixLQUFLLE1BQU0sSUFBSSxJQUFJLEtBQUssRUFBRSxDQUFDO1FBQ3pCLElBQUksQ0FBQztZQUNILElBQUksS0FBSyxFQUFFLENBQUM7Z0JBQ1YsSUFBSSxTQUFTLEdBQTZCLEVBQUUsQ0FBQTtnQkFDNUMsSUFBSSxJQUFJLENBQUMsSUFBSSxLQUFLLHFCQUFxQixFQUFFLENBQUM7b0JBQ3hDLFNBQVM7d0JBQ1AsSUFBSSxDQUFDLE9BQU8sQ0FBQyxRQUFRLEtBQUssU0FBUzs0QkFDakMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxnQkFBZ0IsQ0FBQzs0QkFDakMsQ0FBQyxDQUFDLEVBQUUsQ0FBQTtnQkFDVixDQUFDO3FCQUFNLElBQUksSUFBSSxDQUFDLElBQUksS0FBSyxRQUFRLEVBQUUsQ0FBQztvQkFDbEMsU0FBUyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQTtnQkFDbEUsQ0FBQztxQkFBTSxDQUFDO29CQUNOLFNBQVMsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQ3RDLENBQUMsVUFBVSxFQUFFLEVBQUUsQ0FBQyxVQUFVLENBQUMsUUFBUSxDQUNwQyxDQUFBO2dCQUNILENBQUM7Z0JBQ0QsS0FBSyxNQUFNLFFBQVEsSUFBSSxTQUFTLEVBQUUsQ0FBQztvQkFDakMsTUFBTSxLQUFLLENBQUMsV0FBVyxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsQ0FBQTtnQkFDM0MsQ0FBQztZQUNILENBQUM7WUFDRCxNQUFNLFFBQVEsQ0FBQyxJQUFJLENBQUMsRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLFVBQVUsRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUE7WUFDbEUsTUFBTSxTQUFTLENBQUMsdUJBQXVCLENBQUM7Z0JBQ3RDLElBQUksRUFBRSxJQUFJLENBQUMsSUFBSTtnQkFDZixFQUFFLEVBQUUsSUFBSSxDQUFDLEVBQUU7Z0JBQ1gsVUFBVSxFQUFFLElBQUksSUFBSSxFQUFFO2FBQ3ZCLENBQUMsQ0FBQTtZQUNGLE9BQU8sSUFBSSxDQUFDLENBQUE7UUFDZCxDQUFDO1FBQUMsTUFBTSxDQUFDO1lBQ1AsTUFBTSxFQUFFLElBQUksQ0FDViw0Q0FBNEMsSUFBSSxDQUFDLElBQUksSUFBSSxJQUFJLENBQUMsRUFBRSxFQUFFLENBQ25FLENBQUE7UUFDSCxDQUFDO0lBQ0gsQ0FBQztJQUNELE9BQU8sT0FBTyxDQUFBO0FBQ2hCLENBQUMsQ0FBQTtBQTlDWSxRQUFBLCtCQUErQixtQ0E4QzNDO0FBRVksUUFBQSx3QkFBd0IsR0FBRyxJQUFBLDBCQUFVLEVBQ2hELG1DQUFtQyxFQUNuQyxLQUFLLEVBQ0gsS0FBNEQsRUFDNUQsRUFBRSxTQUFTLEVBQUUsRUFDYixFQUFFO0lBQ0YsSUFBSSxLQUFLLENBQUMsT0FBTyxLQUFLLEtBQUssRUFBRSxDQUFDO1FBQzVCLE9BQU8sSUFBSSw0QkFBWSxDQUFDLENBQUMsQ0FBQyxDQUFBO0lBQzVCLENBQUM7SUFDRCxNQUFNLE9BQU8sR0FBRyxNQUFNLElBQUEsdUNBQStCLEVBQ25ELElBQUEsMENBQXVCLEVBQUMsU0FBUyxDQUFDLEVBQ2xDLFNBQVMsQ0FBQyxPQUFPLENBQUMsZUFBTyxDQUFDLFNBQVMsQ0FBMkIsRUFDOUQsS0FBSyxDQUFDLEtBQUssRUFDWCxTQUFTLENBQUMsT0FBTyxDQUFDLGVBQU8sQ0FBQyxJQUFJLENBQXVCLEVBQ3JELFNBQVMsQ0FBQyxPQUFPLENBQUMsaUNBQXlCLENBQUMsTUFBTSxDQUFXLENBQzlELENBQUE7SUFDRCxPQUFPLElBQUksNEJBQVksQ0FBQyxPQUFPLENBQUMsQ0FBQTtBQUNsQyxDQUFDLENBQ0YsQ0FBQTtBQUVZLFFBQUEsNEJBQTRCLEdBQUcsSUFBQSw4QkFBYyxFQUN4RCxtQ0FBbUMsRUFDbkMsQ0FBQyxLQUF3QixFQUFFLEVBQUUsQ0FDM0IsSUFBSSxnQ0FBZ0IsQ0FBQyxJQUFBLGdDQUF3QixFQUFDLEtBQUssQ0FBQyxDQUFDLENBQ3hELENBQUEifQ==
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.reconcileDocumentResolutionsWorkflow = void 0;
|
|
4
|
+
const utils_1 = require("@medusajs/framework/utils");
|
|
5
|
+
const workflows_sdk_1 = require("@medusajs/framework/workflows-sdk");
|
|
6
|
+
const resolve_services_1 = require("../../documents/utils/resolve-services");
|
|
7
|
+
const issue_cancellation_after_refund_1 = require("./issue-cancellation-after-refund");
|
|
8
|
+
const issue_invoice_after_shipment_1 = require("./issue-invoice-after-shipment");
|
|
9
|
+
const reconcile_order_cancellation_1 = require("./reconcile-order-cancellation");
|
|
10
|
+
const reconcileDocumentResolutionsStep = (0, workflows_sdk_1.createStep)("documents-reconcile-domain-resolutions", async (input, { container }) => {
|
|
11
|
+
const candidates = await (0, resolve_services_1.resolveDocumentsService)(container).listDocumentResolutionReconciliationCandidates({ limit: input.limit });
|
|
12
|
+
const logger = container.resolve(utils_1.ContainerRegistrationKeys.LOGGER);
|
|
13
|
+
let completed = 0;
|
|
14
|
+
for (const fulfillmentId of candidates.fulfillment_ids) {
|
|
15
|
+
try {
|
|
16
|
+
await (0, issue_invoice_after_shipment_1.issueInvoiceAfterShipmentWorkflow)(container).run({
|
|
17
|
+
input: { fulfillment_id: fulfillmentId },
|
|
18
|
+
});
|
|
19
|
+
completed += 1;
|
|
20
|
+
}
|
|
21
|
+
catch {
|
|
22
|
+
logger.warn(`documents: shipment assignment reconciliation deferred for ${fulfillmentId}`);
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
for (const refund of candidates.refunds) {
|
|
26
|
+
try {
|
|
27
|
+
await (0, issue_cancellation_after_refund_1.issueCancellationAfterRefundWorkflow)(container).run({ input: refund });
|
|
28
|
+
completed += 1;
|
|
29
|
+
}
|
|
30
|
+
catch {
|
|
31
|
+
logger.warn(`documents: refund resolution reconciliation deferred for ${refund.refund_id}`);
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
for (const orderId of candidates.order_ids) {
|
|
35
|
+
try {
|
|
36
|
+
await (0, reconcile_order_cancellation_1.reconcileOrderCancellationWorkflow)(container).run({
|
|
37
|
+
input: { order_id: orderId },
|
|
38
|
+
});
|
|
39
|
+
completed += 1;
|
|
40
|
+
}
|
|
41
|
+
catch {
|
|
42
|
+
logger.warn(`documents: order cancellation reconciliation deferred for ${orderId}`);
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
return new workflows_sdk_1.StepResponse(completed);
|
|
46
|
+
});
|
|
47
|
+
exports.reconcileDocumentResolutionsWorkflow = (0, workflows_sdk_1.createWorkflow)("documents-reconcile-domain-resolutions", (input) => new workflows_sdk_1.WorkflowResponse(reconcileDocumentResolutionsStep(input)));
|
|
48
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVjb25jaWxlLWRvY3VtZW50LXJlc29sdXRpb25zLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vc3JjL3dvcmtmbG93cy9kb2N1bWVudHMvcmVjb25jaWxlLWRvY3VtZW50LXJlc29sdXRpb25zLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUNBLHFEQUFxRTtBQUNyRSxxRUFLMEM7QUFFMUMsNkVBQWdGO0FBQ2hGLHVGQUF3RjtBQUN4RixpRkFBa0Y7QUFDbEYsaUZBQW1GO0FBRW5GLE1BQU0sZ0NBQWdDLEdBQUcsSUFBQSwwQkFBVSxFQUNqRCx3Q0FBd0MsRUFDeEMsS0FBSyxFQUFFLEtBQXdCLEVBQUUsRUFBRSxTQUFTLEVBQUUsRUFBRSxFQUFFO0lBQ2hELE1BQU0sVUFBVSxHQUFHLE1BQU0sSUFBQSwwQ0FBdUIsRUFDOUMsU0FBUyxDQUNWLENBQUMsOENBQThDLENBQUMsRUFBRSxLQUFLLEVBQUUsS0FBSyxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUE7SUFDeEUsTUFBTSxNQUFNLEdBQUcsU0FBUyxDQUFDLE9BQU8sQ0FBUyxpQ0FBeUIsQ0FBQyxNQUFNLENBQUMsQ0FBQTtJQUMxRSxJQUFJLFNBQVMsR0FBRyxDQUFDLENBQUE7SUFDakIsS0FBSyxNQUFNLGFBQWEsSUFBSSxVQUFVLENBQUMsZUFBZSxFQUFFLENBQUM7UUFDdkQsSUFBSSxDQUFDO1lBQ0gsTUFBTSxJQUFBLGdFQUFpQyxFQUFDLFNBQVMsQ0FBQyxDQUFDLEdBQUcsQ0FBQztnQkFDckQsS0FBSyxFQUFFLEVBQUUsY0FBYyxFQUFFLGFBQWEsRUFBRTthQUN6QyxDQUFDLENBQUE7WUFDRixTQUFTLElBQUksQ0FBQyxDQUFBO1FBQ2hCLENBQUM7UUFBQyxNQUFNLENBQUM7WUFDUCxNQUFNLENBQUMsSUFBSSxDQUNULDhEQUE4RCxhQUFhLEVBQUUsQ0FDOUUsQ0FBQTtRQUNILENBQUM7SUFDSCxDQUFDO0lBQ0QsS0FBSyxNQUFNLE1BQU0sSUFBSSxVQUFVLENBQUMsT0FBTyxFQUFFLENBQUM7UUFDeEMsSUFBSSxDQUFDO1lBQ0gsTUFBTSxJQUFBLHNFQUFvQyxFQUFDLFNBQVMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsQ0FBQyxDQUFBO1lBQzVFLFNBQVMsSUFBSSxDQUFDLENBQUE7UUFDaEIsQ0FBQztRQUFDLE1BQU0sQ0FBQztZQUNQLE1BQU0sQ0FBQyxJQUFJLENBQ1QsNERBQTRELE1BQU0sQ0FBQyxTQUFTLEVBQUUsQ0FDL0UsQ0FBQTtRQUNILENBQUM7SUFDSCxDQUFDO0lBQ0QsS0FBSyxNQUFNLE9BQU8sSUFBSSxVQUFVLENBQUMsU0FBUyxFQUFFLENBQUM7UUFDM0MsSUFBSSxDQUFDO1lBQ0gsTUFBTSxJQUFBLGlFQUFrQyxFQUFDLFNBQVMsQ0FBQyxDQUFDLEdBQUcsQ0FBQztnQkFDdEQsS0FBSyxFQUFFLEVBQUUsUUFBUSxFQUFFLE9BQU8sRUFBRTthQUM3QixDQUFDLENBQUE7WUFDRixTQUFTLElBQUksQ0FBQyxDQUFBO1FBQ2hCLENBQUM7UUFBQyxNQUFNLENBQUM7WUFDUCxNQUFNLENBQUMsSUFBSSxDQUNULDZEQUE2RCxPQUFPLEVBQUUsQ0FDdkUsQ0FBQTtRQUNILENBQUM7SUFDSCxDQUFDO0lBQ0QsT0FBTyxJQUFJLDRCQUFZLENBQUMsU0FBUyxDQUFDLENBQUE7QUFDcEMsQ0FBQyxDQUNGLENBQUE7QUFFWSxRQUFBLG9DQUFvQyxHQUFHLElBQUEsOEJBQWMsRUFDaEUsd0NBQXdDLEVBQ3hDLENBQUMsS0FBd0IsRUFBRSxFQUFFLENBQzNCLElBQUksZ0NBQWdCLENBQUMsZ0NBQWdDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FDaEUsQ0FBQSJ9
|
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.reconcileOrderCancellationWorkflow = exports.extractOrderRefundReferences = void 0;
|
|
4
|
+
const utils_1 = require("@medusajs/framework/utils");
|
|
5
|
+
const workflows_sdk_1 = require("@medusajs/framework/workflows-sdk");
|
|
6
|
+
const resolve_services_1 = require("../../documents/utils/resolve-services");
|
|
7
|
+
const issue_cancellation_after_refund_1 = require("./issue-cancellation-after-refund");
|
|
8
|
+
const publish_document_facts_1 = require("./publish-document-facts");
|
|
9
|
+
const asRecord = (value) => value && typeof value === "object" && !Array.isArray(value)
|
|
10
|
+
? value
|
|
11
|
+
: null;
|
|
12
|
+
const extractOrderRefundReferences = (rawOrder) => {
|
|
13
|
+
const references = [];
|
|
14
|
+
const collections = Array.isArray(rawOrder.payment_collections)
|
|
15
|
+
? rawOrder.payment_collections
|
|
16
|
+
: [];
|
|
17
|
+
for (const rawCollection of collections) {
|
|
18
|
+
const collection = asRecord(rawCollection);
|
|
19
|
+
const payments = Array.isArray(collection?.payments) ? collection.payments : [];
|
|
20
|
+
for (const rawPayment of payments) {
|
|
21
|
+
const payment = asRecord(rawPayment);
|
|
22
|
+
if (typeof payment?.id !== "string") {
|
|
23
|
+
continue;
|
|
24
|
+
}
|
|
25
|
+
const refunds = Array.isArray(payment.refunds) ? payment.refunds : [];
|
|
26
|
+
for (const rawRefund of refunds) {
|
|
27
|
+
const refund = asRecord(rawRefund);
|
|
28
|
+
if (typeof refund?.id === "string") {
|
|
29
|
+
references.push({ payment_id: payment.id, refund_id: refund.id });
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
return [...new Map(references.map((reference) => [reference.refund_id, reference])).values()].sort((left, right) => left.refund_id.localeCompare(right.refund_id));
|
|
35
|
+
};
|
|
36
|
+
exports.extractOrderRefundReferences = extractOrderRefundReferences;
|
|
37
|
+
const reconcileOrderCancellationStep = (0, workflows_sdk_1.createStep)("documents-reconcile-order-cancellation", async (input, { container }) => {
|
|
38
|
+
const query = container.resolve(utils_1.ContainerRegistrationKeys.QUERY);
|
|
39
|
+
const { data } = await query.graph({
|
|
40
|
+
entity: "order",
|
|
41
|
+
fields: [
|
|
42
|
+
"id",
|
|
43
|
+
"status",
|
|
44
|
+
"canceled_at",
|
|
45
|
+
"payment_collections.payments.id",
|
|
46
|
+
"payment_collections.payments.refunds.id",
|
|
47
|
+
],
|
|
48
|
+
filters: { id: input.order_id },
|
|
49
|
+
});
|
|
50
|
+
const order = asRecord(data[0]);
|
|
51
|
+
if (!order ||
|
|
52
|
+
order.id !== input.order_id ||
|
|
53
|
+
(!order.canceled_at && order.status !== "canceled")) {
|
|
54
|
+
throw new utils_1.MedusaError(utils_1.MedusaError.Types.CONFLICT, `Order ${input.order_id} is not durably canceled.`);
|
|
55
|
+
}
|
|
56
|
+
const refunds = (0, exports.extractOrderRefundReferences)(order);
|
|
57
|
+
const documents = (0, resolve_services_1.resolveDocumentsService)(container);
|
|
58
|
+
const resolution = await documents.upsertOrderCancellationResolution({
|
|
59
|
+
order_id: input.order_id,
|
|
60
|
+
expected_refund_ids: refunds.map((refund) => refund.refund_id),
|
|
61
|
+
});
|
|
62
|
+
const claim = await documents.claimOrderCancellationResolution(resolution.id);
|
|
63
|
+
if (claim.action !== "process" || !claim.attempt_token) {
|
|
64
|
+
return new workflows_sdk_1.StepResponse(resolution.id);
|
|
65
|
+
}
|
|
66
|
+
try {
|
|
67
|
+
for (const refund of refunds) {
|
|
68
|
+
await (0, issue_cancellation_after_refund_1.issueCancellationAfterRefundWorkflow)(container).run({
|
|
69
|
+
input: refund,
|
|
70
|
+
});
|
|
71
|
+
}
|
|
72
|
+
await documents.finalizeOrderCancellationResolution({
|
|
73
|
+
resolution_id: resolution.id,
|
|
74
|
+
attempt_token: claim.attempt_token,
|
|
75
|
+
});
|
|
76
|
+
return new workflows_sdk_1.StepResponse(resolution.id);
|
|
77
|
+
}
|
|
78
|
+
catch (error) {
|
|
79
|
+
await documents.markOrderCancellationResolutionFailed({
|
|
80
|
+
resolution_id: resolution.id,
|
|
81
|
+
attempt_token: claim.attempt_token,
|
|
82
|
+
failure_code: "refund_reconciliation_failed",
|
|
83
|
+
});
|
|
84
|
+
throw error;
|
|
85
|
+
}
|
|
86
|
+
});
|
|
87
|
+
exports.reconcileOrderCancellationWorkflow = (0, workflows_sdk_1.createWorkflow)("documents-reconcile-order-cancellation", (input) => {
|
|
88
|
+
const resolutionId = reconcileOrderCancellationStep(input);
|
|
89
|
+
(0, publish_document_facts_1.publishDocumentFactsStep)({ limit: 20, after: resolutionId });
|
|
90
|
+
return new workflows_sdk_1.WorkflowResponse(resolutionId);
|
|
91
|
+
});
|
|
92
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVjb25jaWxlLW9yZGVyLWNhbmNlbGxhdGlvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy93b3JrZmxvd3MvZG9jdW1lbnRzL3JlY29uY2lsZS1vcmRlci1jYW5jZWxsYXRpb24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEscURBQWtGO0FBQ2xGLHFFQUswQztBQUUxQyw2RUFBZ0Y7QUFDaEYsdUZBQXdGO0FBQ3hGLHFFQUFtRTtBQVluRSxNQUFNLFFBQVEsR0FBRyxDQUFDLEtBQWMsRUFBa0MsRUFBRSxDQUNsRSxLQUFLLElBQUksT0FBTyxLQUFLLEtBQUssUUFBUSxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUM7SUFDekQsQ0FBQyxDQUFFLEtBQWlDO0lBQ3BDLENBQUMsQ0FBQyxJQUFJLENBQUE7QUFFSCxNQUFNLDRCQUE0QixHQUFHLENBQzFDLFFBQWlDLEVBQ2QsRUFBRTtJQUNyQixNQUFNLFVBQVUsR0FBc0IsRUFBRSxDQUFBO0lBQ3hDLE1BQU0sV0FBVyxHQUFHLEtBQUssQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLG1CQUFtQixDQUFDO1FBQzdELENBQUMsQ0FBQyxRQUFRLENBQUMsbUJBQW1CO1FBQzlCLENBQUMsQ0FBQyxFQUFFLENBQUE7SUFDTixLQUFLLE1BQU0sYUFBYSxJQUFJLFdBQVcsRUFBRSxDQUFDO1FBQ3hDLE1BQU0sVUFBVSxHQUFHLFFBQVEsQ0FBQyxhQUFhLENBQUMsQ0FBQTtRQUMxQyxNQUFNLFFBQVEsR0FBRyxLQUFLLENBQUMsT0FBTyxDQUFDLFVBQVUsRUFBRSxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFBO1FBQy9FLEtBQUssTUFBTSxVQUFVLElBQUksUUFBUSxFQUFFLENBQUM7WUFDbEMsTUFBTSxPQUFPLEdBQUcsUUFBUSxDQUFDLFVBQVUsQ0FBQyxDQUFBO1lB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
|