@hartl-services/medusa-base 0.3.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 +2164 -29
- package/.medusa/server/src/admin/index.mjs +2166 -31
- 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/admin/plugin-features/[plugin_key]/actions/[action_key]/route.js +31 -0
- package/.medusa/server/src/api/admin/plugin-features/[plugin_key]/actions/[action_key]/runs/route.js +16 -0
- package/.medusa/server/src/api/admin/plugin-features/[plugin_key]/route.js +14 -0
- package/.medusa/server/src/api/admin/plugin-features/[plugin_key]/settings/route.js +22 -0
- package/.medusa/server/src/api/admin/plugin-features/route.js +6 -4
- 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 +186 -5
- package/.medusa/server/src/api/packing-list-response.js +22 -0
- package/.medusa/server/src/api/plugin-actions.js +221 -0
- package/.medusa/server/src/api/plugin-features-http.js +67 -8
- 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/modules/plugin-features/domain/plugin-action-runs.js +92 -0
- package/.medusa/server/src/modules/plugin-features/domain/plugin-settings.js +213 -0
- package/.medusa/server/src/modules/plugin-features/domain/secret-box.js +56 -0
- package/.medusa/server/src/modules/plugin-features/migrations/Migration20260928205031.js +16 -0
- package/.medusa/server/src/modules/plugin-features/migrations/Migration20260928215428.js +17 -0
- package/.medusa/server/src/modules/plugin-features/models/plugin-action-run.js +43 -0
- package/.medusa/server/src/modules/plugin-features/models/plugin-setting-state.js +32 -0
- package/.medusa/server/src/modules/plugin-features/service.js +419 -17
- 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/action-progress.js +67 -0
- package/.medusa/server/src/public/config.js +186 -0
- package/.medusa/server/src/public/descriptor.js +199 -2
- package/.medusa/server/src/public/effective-features.js +9 -5
- package/.medusa/server/src/public/enforcement.js +18 -8
- package/.medusa/server/src/public/gateway.js +19 -0
- package/.medusa/server/src/public/index.js +10 -2
- package/.medusa/server/src/public/instrumentation.js +56 -0
- package/.medusa/server/src/public/module-access.js +14 -0
- package/.medusa/server/src/public/settings.js +17 -0
- package/.medusa/server/src/public/shop-config.js +12 -0
- package/.medusa/server/src/public/shop-master-data.js +95 -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/utils/discover-complete-cart-participants.js +9 -2
- package/.medusa/server/src/utils/discover-plugin-features.js +47 -9
- 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/complete-cart-participants.js +28 -16
- package/.medusa/server/src/workflows/hooks/dismiss-deleted-promotion-cart-links.js +23 -0
- package/README.md +2004 -11
- package/dist/admin-components/features/plugin-features/components/PluginActionsSection.d.ts +6 -0
- package/dist/admin-components/features/plugin-features/components/PluginActionsSection.js +66 -0
- package/dist/admin-components/features/plugin-features/components/PluginDetailPage.d.ts +2 -0
- package/dist/admin-components/features/plugin-features/components/PluginDetailPage.js +9 -0
- package/dist/admin-components/features/plugin-features/components/PluginFeatureGate.d.ts +22 -0
- package/dist/admin-components/features/plugin-features/components/PluginFeatureGate.js +18 -0
- package/dist/admin-components/features/plugin-features/components/PluginFeatureSections.d.ts +11 -0
- package/dist/admin-components/features/plugin-features/components/PluginFeatureSections.js +19 -0
- package/dist/admin-components/features/plugin-features/components/PluginFeaturesCard.d.ts +12 -0
- package/dist/admin-components/features/plugin-features/components/PluginFeaturesCard.js +34 -0
- package/dist/admin-components/features/plugin-features/components/PluginFeaturesSettingsPage.d.ts +5 -0
- package/dist/admin-components/features/plugin-features/components/PluginFeaturesSettingsPage.js +16 -0
- package/dist/admin-components/features/plugin-features/components/PluginHubCard.d.ts +7 -0
- package/dist/admin-components/features/plugin-features/components/PluginHubCard.js +21 -0
- package/dist/admin-components/features/plugin-features/components/PluginPageShell.d.ts +13 -0
- package/dist/admin-components/features/plugin-features/components/PluginPageShell.js +20 -0
- package/dist/admin-components/features/plugin-features/components/PluginSettingsForm.d.ts +7 -0
- package/dist/admin-components/features/plugin-features/components/PluginSettingsForm.js +39 -0
- package/dist/admin-components/features/plugin-features/components/PluginStatusChips.d.ts +5 -0
- package/dist/admin-components/features/plugin-features/components/PluginStatusChips.js +8 -0
- package/dist/admin-components/features/plugin-features/hooks/usePluginFeatureEnabled.d.ts +114 -0
- package/dist/admin-components/features/plugin-features/hooks/usePluginFeatureEnabled.js +40 -0
- package/dist/admin-components/features/plugin-features/hooks/usePluginFeatures.d.ts +392 -0
- package/dist/admin-components/features/plugin-features/hooks/usePluginFeatures.js +128 -0
- package/dist/admin-components/features/plugin-features/hooks/usePluginSettingsForm.d.ts +93 -0
- package/dist/admin-components/features/plugin-features/hooks/usePluginSettingsForm.js +44 -0
- package/dist/admin-components/features/plugin-features/lib/action-runs.d.ts +19 -0
- package/dist/admin-components/features/plugin-features/lib/action-runs.js +74 -0
- package/dist/admin-components/features/plugin-features/lib/plugin-features-admin-client.d.ts +363 -0
- package/dist/admin-components/features/plugin-features/lib/plugin-features-admin-client.js +9 -0
- package/dist/admin-components/features/plugin-features/lib/plugin-paths.d.ts +4 -0
- package/dist/admin-components/features/plugin-features/lib/plugin-paths.js +4 -0
- package/dist/admin-components/features/plugin-features/lib/settings-draft.d.ts +28 -0
- package/dist/admin-components/features/plugin-features/lib/settings-draft.js +86 -0
- package/dist/admin-components/features/plugin-features/queries/pluginFeatureKeys.d.ts +7 -0
- package/dist/admin-components/features/plugin-features/queries/pluginFeatureKeys.js +7 -0
- package/dist/admin-components/i18n/texts.d.ts +90 -0
- package/dist/admin-components/i18n/texts.js +90 -0
- package/dist/admin-components/index.d.ts +14 -0
- package/dist/admin-components/index.js +14 -0
- package/dist/admin-components/lib/errors.d.ts +6 -0
- package/dist/admin-components/lib/errors.js +27 -0
- package/dist/admin-components/lib/sdk.d.ts +2 -0
- package/dist/admin-components/lib/sdk.js +13 -0
- 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/action-progress.d.ts +25 -0
- package/dist/public/action-progress.js +66 -0
- package/dist/public/config.d.ts +59 -0
- package/dist/public/config.js +185 -0
- package/dist/public/descriptor.d.ts +3 -2
- package/dist/public/descriptor.js +198 -1
- package/dist/public/effective-features.d.ts +2 -1
- package/dist/public/effective-features.js +8 -4
- package/dist/public/enforcement.d.ts +7 -0
- package/dist/public/enforcement.js +17 -7
- package/dist/public/gateway.d.ts +2 -0
- package/dist/public/gateway.js +18 -0
- package/dist/public/index.d.ts +5 -2
- package/dist/public/index.js +9 -1
- package/dist/public/instrumentation.d.ts +12 -0
- package/dist/public/instrumentation.js +55 -0
- package/dist/public/module-access.d.ts +3 -0
- package/dist/public/module-access.js +13 -0
- package/dist/public/settings.d.ts +11 -0
- package/dist/public/settings.js +16 -0
- package/dist/public/shop-config.d.ts +8 -0
- package/dist/public/shop-config.js +11 -0
- package/dist/public/shop-master-data.d.ts +25 -0
- package/dist/public/shop-master-data.js +94 -0
- package/dist/public/shop-types.d.ts +7 -0
- package/dist/public/shop-types.js +23 -0
- package/dist/public/types.d.ts +113 -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/dist/utils/discover-plugin-features.d.ts +28 -0
- package/dist/utils/discover-plugin-features.js +96 -0
- package/package.json +53 -6
|
@@ -0,0 +1,115 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.verifyFileGatewayUploadToken = exports.verifyPrivateFileGatewayToken = exports.createFileGatewayUploadUrl = exports.createPrivateFileGatewayUrl = exports.publicFileGatewayKey = exports.toPublicFileGatewayUrl = void 0;
|
|
4
|
+
const node_crypto_1 = require("node:crypto");
|
|
5
|
+
const PRIVATE_SIGNATURE_VERSION = "v1";
|
|
6
|
+
const safeLogicalKey = (value) => {
|
|
7
|
+
if (!value ||
|
|
8
|
+
value.startsWith("/") ||
|
|
9
|
+
value.includes("\\") ||
|
|
10
|
+
value
|
|
11
|
+
.split("/")
|
|
12
|
+
.some((segment) => !segment ||
|
|
13
|
+
segment === "." ||
|
|
14
|
+
segment === ".." ||
|
|
15
|
+
/[\u0000-\u001F\u007F]/u.test(segment))) {
|
|
16
|
+
throw new TypeError("File gateway key must be a safe relative path");
|
|
17
|
+
}
|
|
18
|
+
return value;
|
|
19
|
+
};
|
|
20
|
+
const gatewayUrl = (baseUrl, path) => {
|
|
21
|
+
const url = new URL(`${baseUrl.replace(/\/$/u, "")}/`);
|
|
22
|
+
url.pathname = `${url.pathname.replace(/\/$/u, "")}/${path}`;
|
|
23
|
+
return url;
|
|
24
|
+
};
|
|
25
|
+
const signatureFor = (input) => (0, node_crypto_1.createHmac)("sha256", input.secret)
|
|
26
|
+
.update(`${PRIVATE_SIGNATURE_VERSION}\n${input.action}\n${input.token}\n${input.expires}`)
|
|
27
|
+
.digest("base64url");
|
|
28
|
+
const createPrivateCapabilityUrl = (input) => {
|
|
29
|
+
const fileKey = safeLogicalKey(input.fileKey);
|
|
30
|
+
if (input.action === "download" && fileKey.startsWith("public/")) {
|
|
31
|
+
throw new TypeError("Public files must not use private gateway URLs");
|
|
32
|
+
}
|
|
33
|
+
const token = Buffer.from(fileKey, "utf8").toString("base64url");
|
|
34
|
+
const expires = Math.floor((input.now ?? Date.now()) / 1_000) + input.durationSeconds;
|
|
35
|
+
const url = gatewayUrl(input.baseUrl, `${input.path}/${token}`);
|
|
36
|
+
url.searchParams.set("expires", String(expires));
|
|
37
|
+
url.searchParams.set("signature", signatureFor({
|
|
38
|
+
action: input.action,
|
|
39
|
+
expires,
|
|
40
|
+
secret: input.signingSecret,
|
|
41
|
+
token,
|
|
42
|
+
}));
|
|
43
|
+
return url.toString();
|
|
44
|
+
};
|
|
45
|
+
const verifyPrivateCapabilityToken = (input) => {
|
|
46
|
+
if (!Number.isSafeInteger(input.expires) ||
|
|
47
|
+
input.expires < Math.floor((input.now ?? Date.now()) / 1_000)) {
|
|
48
|
+
return undefined;
|
|
49
|
+
}
|
|
50
|
+
const expected = Buffer.from(signatureFor({
|
|
51
|
+
action: input.action,
|
|
52
|
+
expires: input.expires,
|
|
53
|
+
secret: input.signingSecret,
|
|
54
|
+
token: input.token,
|
|
55
|
+
}), "base64url");
|
|
56
|
+
const provided = Buffer.from(input.signature, "base64url");
|
|
57
|
+
if (provided.toString("base64url") !== input.signature ||
|
|
58
|
+
provided.length !== expected.length ||
|
|
59
|
+
!(0, node_crypto_1.timingSafeEqual)(provided, expected)) {
|
|
60
|
+
return undefined;
|
|
61
|
+
}
|
|
62
|
+
try {
|
|
63
|
+
const fileKeyBuffer = Buffer.from(input.token, "base64url");
|
|
64
|
+
if (fileKeyBuffer.toString("base64url") !== input.token) {
|
|
65
|
+
return undefined;
|
|
66
|
+
}
|
|
67
|
+
const fileKey = safeLogicalKey(fileKeyBuffer.toString("utf8"));
|
|
68
|
+
return input.action === "download" && fileKey.startsWith("public/")
|
|
69
|
+
? undefined
|
|
70
|
+
: fileKey;
|
|
71
|
+
}
|
|
72
|
+
catch {
|
|
73
|
+
return undefined;
|
|
74
|
+
}
|
|
75
|
+
};
|
|
76
|
+
const toPublicFileGatewayUrl = (baseUrl, logicalFileKey) => {
|
|
77
|
+
const key = safeLogicalKey(logicalFileKey);
|
|
78
|
+
if (!key.startsWith("public/")) {
|
|
79
|
+
throw new TypeError("Only public file keys can have public gateway URLs");
|
|
80
|
+
}
|
|
81
|
+
const asset = key.slice("public/".length);
|
|
82
|
+
if (!asset || asset.includes("/")) {
|
|
83
|
+
throw new TypeError("Public gateway files must have one opaque asset name");
|
|
84
|
+
}
|
|
85
|
+
return gatewayUrl(baseUrl, encodeURIComponent(asset)).toString();
|
|
86
|
+
};
|
|
87
|
+
exports.toPublicFileGatewayUrl = toPublicFileGatewayUrl;
|
|
88
|
+
const publicFileGatewayKey = (asset) => {
|
|
89
|
+
if (!asset || asset.includes("/") || asset.includes("\\")) {
|
|
90
|
+
throw new TypeError("Public gateway asset is invalid");
|
|
91
|
+
}
|
|
92
|
+
return safeLogicalKey(`public/${asset}`);
|
|
93
|
+
};
|
|
94
|
+
exports.publicFileGatewayKey = publicFileGatewayKey;
|
|
95
|
+
const createPrivateFileGatewayUrl = (input) => {
|
|
96
|
+
return createPrivateCapabilityUrl({
|
|
97
|
+
...input,
|
|
98
|
+
action: "download",
|
|
99
|
+
path: "private",
|
|
100
|
+
});
|
|
101
|
+
};
|
|
102
|
+
exports.createPrivateFileGatewayUrl = createPrivateFileGatewayUrl;
|
|
103
|
+
const createFileGatewayUploadUrl = (input) => createPrivateCapabilityUrl({
|
|
104
|
+
...input,
|
|
105
|
+
action: "upload",
|
|
106
|
+
path: "upload",
|
|
107
|
+
});
|
|
108
|
+
exports.createFileGatewayUploadUrl = createFileGatewayUploadUrl;
|
|
109
|
+
const verifyPrivateFileGatewayToken = (input) => {
|
|
110
|
+
return verifyPrivateCapabilityToken({ ...input, action: "download" });
|
|
111
|
+
};
|
|
112
|
+
exports.verifyPrivateFileGatewayToken = verifyPrivateFileGatewayToken;
|
|
113
|
+
const verifyFileGatewayUploadToken = (input) => verifyPrivateCapabilityToken({ ...input, action: "upload" });
|
|
114
|
+
exports.verifyFileGatewayUploadToken = verifyFileGatewayUploadToken;
|
|
115
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvZmlsZXMvZ2F0ZXdheS9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSw2Q0FBMEQ7QUFFMUQsTUFBTSx5QkFBeUIsR0FBRyxJQUFJLENBQUM7QUFFdkMsTUFBTSxjQUFjLEdBQUcsQ0FBQyxLQUFhLEVBQVUsRUFBRTtJQUMvQyxJQUNFLENBQUMsS0FBSztRQUNOLEtBQUssQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDO1FBQ3JCLEtBQUssQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDO1FBQ3BCLEtBQUs7YUFDRixLQUFLLENBQUMsR0FBRyxDQUFDO2FBQ1YsSUFBSSxDQUNILENBQUMsT0FBTyxFQUFFLEVBQUUsQ0FDVixDQUFDLE9BQU87WUFDUixPQUFPLEtBQUssR0FBRztZQUNmLE9BQU8sS0FBSyxJQUFJO1lBQ2hCLHdCQUF3QixDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FDekMsRUFDSCxDQUFDO1FBQ0QsTUFBTSxJQUFJLFNBQVMsQ0FBQywrQ0FBK0MsQ0FBQyxDQUFDO0lBQ3ZFLENBQUM7SUFFRCxPQUFPLEtBQUssQ0FBQztBQUNmLENBQUMsQ0FBQztBQUVGLE1BQU0sVUFBVSxHQUFHLENBQUMsT0FBZSxFQUFFLElBQVksRUFBTyxFQUFFO0lBQ3hELE1BQU0sR0FBRyxHQUFHLElBQUksR0FBRyxDQUFDLEdBQUcsT0FBTyxDQUFDLE9BQU8sQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ3ZELEdBQUcsQ0FBQyxRQUFRLEdBQUcsR0FBRyxHQUFHLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDLElBQUksSUFBSSxFQUFFLENBQUM7SUFDN0QsT0FBTyxHQUFHLENBQUM7QUFDYixDQUFDLENBQUM7QUFFRixNQUFNLFlBQVksR0FBRyxDQUFDLEtBS3JCLEVBQVUsRUFBRSxD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
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.BASE_PLUGIN_RESOLVE = void 0;
|
|
4
|
+
var public_1 = require("./public");
|
|
5
|
+
Object.defineProperty(exports, "BASE_PLUGIN_RESOLVE", { enumerable: true, get: function () { return public_1.BASE_PLUGIN_RESOLVE; } });
|
|
6
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvZmlsZXMvdHlwZXMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBaUJBLG1DQUErQztBQUF0Qyw2R0FBQSxtQkFBbUIsT0FBQSJ9
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.BASE_PLUGIN_RESOLVE = void 0;
|
|
4
|
+
/** Package name under which the gateway routes read the `files` options. */
|
|
5
|
+
exports.BASE_PLUGIN_RESOLVE = "@hartl-services/medusa-base";
|
|
6
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGljLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vc3JjL2ZpbGVzL3R5cGVzL3B1YmxpYy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFvRkEsNEVBQTRFO0FBQy9ELFFBQUEsbUJBQW1CLEdBQUcsNkJBQTZCLENBQUMifQ==
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.config = void 0;
|
|
4
|
+
exports.default = documentFactPublicationReconciliationJob;
|
|
5
|
+
const public_1 = require("../public");
|
|
6
|
+
const plugin_features_1 = require("../documents/plugin-features");
|
|
7
|
+
const publish_document_facts_1 = require("../workflows/documents/publish-document-facts");
|
|
8
|
+
async function documentFactPublicationReconciliationJob(container) {
|
|
9
|
+
if (!(await (0, public_1.isPluginFeatureEnabled)(container, plugin_features_1.documentsPluginFeatures, "invoices"))) {
|
|
10
|
+
return;
|
|
11
|
+
}
|
|
12
|
+
await (0, publish_document_facts_1.publishDocumentFactsWorkflow)(container).run({ input: { limit: 100 } });
|
|
13
|
+
}
|
|
14
|
+
exports.config = {
|
|
15
|
+
name: "documents-fact-publication-reconciliation",
|
|
16
|
+
schedule: "* * * * *",
|
|
17
|
+
};
|
|
18
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZG9jdW1lbnQtZmFjdC1wdWJsaWNhdGlvbi1yZWNvbmNpbGlhdGlvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9qb2JzL2RvY3VtZW50LWZhY3QtcHVibGljYXRpb24tcmVjb25jaWxpYXRpb24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBTUEsMkRBY0M7QUFwQkQsc0NBQWtEO0FBR2xELGtFQUFzRTtBQUN0RSwwRkFBNEY7QUFFN0UsS0FBSyxVQUFVLHdDQUF3QyxDQUNwRSxTQUEwQjtJQUUxQixJQUNFLENBQUMsQ0FBQyxNQUFNLElBQUEsK0JBQXNCLEVBQzVCLFNBQVMsRUFDVCx5Q0FBdUIsRUFDdkIsVUFBVSxDQUNYLENBQUMsRUFDRixDQUFDO1FBQ0QsT0FBTTtJQUNSLENBQUM7SUFFRCxNQUFNLElBQUEscURBQTRCLEVBQUMsU0FBUyxDQUFDLENBQUMsR0FBRyxDQUFDLEVBQUUsS0FBSyxFQUFFLEVBQUUsS0FBSyxFQUFFLEdBQUcsRUFBRSxFQUFFLENBQUMsQ0FBQTtBQUM5RSxDQUFDO0FBRVksUUFBQSxNQUFNLEdBQUc7SUFDcEIsSUFBSSxFQUFFLDJDQUEyQztJQUNqRCxRQUFRLEVBQUUsV0FBVztDQUNiLENBQUEifQ==
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.config = void 0;
|
|
4
|
+
exports.default = documentResolutionReconciliationJob;
|
|
5
|
+
const public_1 = require("../public");
|
|
6
|
+
const plugin_features_1 = require("../documents/plugin-features");
|
|
7
|
+
const reconcile_document_resolutions_1 = require("../workflows/documents/reconcile-document-resolutions");
|
|
8
|
+
async function documentResolutionReconciliationJob(container) {
|
|
9
|
+
if (!(await (0, public_1.isPluginFeatureEnabled)(container, plugin_features_1.documentsPluginFeatures, "invoices"))) {
|
|
10
|
+
return;
|
|
11
|
+
}
|
|
12
|
+
await (0, reconcile_document_resolutions_1.reconcileDocumentResolutionsWorkflow)(container).run({
|
|
13
|
+
input: { limit: 50 },
|
|
14
|
+
});
|
|
15
|
+
}
|
|
16
|
+
exports.config = {
|
|
17
|
+
name: "documents-domain-resolution-reconciliation",
|
|
18
|
+
schedule: "* * * * *",
|
|
19
|
+
};
|
|
20
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZG9jdW1lbnQtcmVzb2x1dGlvbi1yZWNvbmNpbGlhdGlvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9qb2JzL2RvY3VtZW50LXJlc29sdXRpb24tcmVjb25jaWxpYXRpb24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBTUEsc0RBZ0JDO0FBdEJELHNDQUFrRDtBQUdsRCxrRUFBc0U7QUFDdEUsMEdBQTRHO0FBRTdGLEtBQUssVUFBVSxtQ0FBbUMsQ0FDL0QsU0FBMEI7SUFFMUIsSUFDRSxDQUFDLENBQUMsTUFBTSxJQUFBLCtCQUFzQixFQUM1QixTQUFTLEVBQ1QseUNBQXVCLEVBQ3ZCLFVBQVUsQ0FDWCxDQUFDLEVBQ0YsQ0FBQztRQUNELE9BQU07SUFDUixDQUFDO0lBRUQsTUFBTSxJQUFBLHFFQUFvQyxFQUFDLFNBQVMsQ0FBQyxDQUFDLEdBQUcsQ0FBQztRQUN4RCxLQUFLLEVBQUUsRUFBRSxLQUFLLEVBQUUsRUFBRSxFQUFFO0tBQ3JCLENBQUMsQ0FBQTtBQUNKLENBQUM7QUFFWSxRQUFBLE1BQU0sR0FBRztJQUNwQixJQUFJLEVBQUUsNENBQTRDO0lBQ2xELFFBQVEsRUFBRSxXQUFXO0NBQ2IsQ0FBQSJ9
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.config = void 0;
|
|
4
|
+
exports.default = packingListReconciliationJob;
|
|
5
|
+
const public_1 = require("../public");
|
|
6
|
+
const utils_1 = require("@medusajs/framework/utils");
|
|
7
|
+
const plugin_features_1 = require("../documents/plugin-features");
|
|
8
|
+
const issue_packing_list_1 = require("../workflows/documents/issue-packing-list");
|
|
9
|
+
const PAGE_SIZE = 100;
|
|
10
|
+
async function packingListReconciliationJob(container) {
|
|
11
|
+
if (!(await (0, public_1.isPluginFeatureEnabled)(container, plugin_features_1.documentsPluginFeatures, "packing_lists"))) {
|
|
12
|
+
return;
|
|
13
|
+
}
|
|
14
|
+
const fulfillments = container.resolve(utils_1.Modules.FULFILLMENT);
|
|
15
|
+
const logger = container.resolve(utils_1.ContainerRegistrationKeys.LOGGER);
|
|
16
|
+
let offset = 0;
|
|
17
|
+
let count = 0;
|
|
18
|
+
do {
|
|
19
|
+
const [page, total] = await fulfillments.listAndCountFulfillments({
|
|
20
|
+
canceled_at: null,
|
|
21
|
+
requires_shipping: true,
|
|
22
|
+
}, {
|
|
23
|
+
skip: offset,
|
|
24
|
+
take: PAGE_SIZE,
|
|
25
|
+
select: ["id"],
|
|
26
|
+
order: { created_at: "ASC", id: "ASC" },
|
|
27
|
+
});
|
|
28
|
+
count = total;
|
|
29
|
+
for (const fulfillment of page) {
|
|
30
|
+
try {
|
|
31
|
+
await (0, issue_packing_list_1.issuePackingListWorkflow)(container).run({
|
|
32
|
+
input: { fulfillment_id: fulfillment.id },
|
|
33
|
+
});
|
|
34
|
+
}
|
|
35
|
+
catch (error) {
|
|
36
|
+
logger.error(`documents: packing-list reconciliation failed for fulfillment ${fulfillment.id}`, error instanceof Error ? error : new Error(String(error)));
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
offset += page.length;
|
|
40
|
+
if (!page.length) {
|
|
41
|
+
break;
|
|
42
|
+
}
|
|
43
|
+
} while (offset < count);
|
|
44
|
+
}
|
|
45
|
+
exports.config = {
|
|
46
|
+
name: "documents-packing-list-reconciliation",
|
|
47
|
+
schedule: "*/10 * * * *",
|
|
48
|
+
};
|
|
49
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFja2luZy1saXN0LXJlY29uY2lsaWF0aW9uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2pvYnMvcGFja2luZy1saXN0LXJlY29uY2lsaWF0aW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQWdCQSwrQ0FxREM7QUFyRUQsc0NBQWtEO0FBRWxELHFEQUE4RTtBQUU5RSxrRUFBc0U7QUFDdEUsa0ZBQW9GO0FBU3BGLE1BQU0sU0FBUyxHQUFHLEdBQUcsQ0FBQTtBQUVOLEtBQUssVUFBVSw0QkFBNEIsQ0FDeEQsU0FBMEI7SUFFMUIsSUFDRSxDQUFDLENBQUMsTUFBTSxJQUFBLCtCQUFzQixFQUM1QixTQUFTLEVBQ1QseUNBQXVCLEVBQ3ZCLGVBQWUsQ0FDaEIsQ0FBQyxFQUNGLENBQUM7UUFDRCxPQUFNO0lBQ1IsQ0FBQztJQUVELE1BQU0sWUFBWSxHQUFHLFNBQVMsQ0FBQyxPQUFPLENBQ3BDLGVBQU8sQ0FBQyxXQUFXLENBQ2EsQ0FBQTtJQUNsQyxNQUFNLE1BQU0sR0FBRyxTQUFTLENBQUMsT0FBTyxDQUFTLGlDQUF5QixDQUFDLE1BQU0sQ0FBQyxDQUFBO0lBQzFFLElBQUksTUFBTSxHQUFHLENBQUMsQ0FBQTtJQUNkLElBQUksS0FBSyxHQUFHLENBQUMsQ0FBQTtJQUViLEdBQUcsQ0FBQztRQUNGLE1BQU0sQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLEdBQUcsTUFBTSxZQUFZLENBQUMsd0JBQXdCLENBQy9EO1lBQ0UsV0FBVyxFQUFFLElBQUk7WUFDakIsaUJBQWlCLEVBQUUsSUFBSTtTQUN4QixFQUNEO1lBQ0UsSUFBSSxFQUFFLE1BQU07WUFDWixJQUFJLEVBQUUsU0FBUztZQUNmLE1BQU0sRUFBRSxDQUFDLElBQUksQ0FBQztZQUNkLEtBQUssRUFBRSxFQUFFLFVBQVUsRUFBRSxLQUFLLEVBQUUsRUFBRSxFQUFFLEtBQUssRUFBRTtTQUN4QyxDQUNGLENBQUE7UUFDRCxLQUFLLEdBQUcsS0FBSyxDQUFBO1FBRWIsS0FBSyxNQUFNLFdBQVcsSUFBSSxJQUFJLEVBQUUsQ0FBQztZQUMvQixJQUFJLENBQUM7Z0JBQ0gsTUFBTSxJQUFBLDZDQUF3QixFQUFDLFNBQVMsQ0FBQyxDQUFDLEdBQUcsQ0FBQztvQkFDNUMsS0FBSyxFQUFFLEVBQUUsY0FBYyxFQUFFLFdBQVcsQ0FBQyxFQUFFLEVBQUU7aUJBQzFDLENBQUMsQ0FBQTtZQUNKLENBQUM7WUFBQyxPQUFPLEtBQUssRUFBRSxDQUFDO2dCQUNmLE1BQU0sQ0FBQyxLQUFLLENBQ1YsaUVBQWlFLFdBQVcsQ0FBQyxFQUFFLEVBQUUsRUFDakYsS0FBSyxZQUFZLEtBQUssQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxJQUFJLEtBQUssQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FDMUQsQ0FBQTtZQUNILENBQUM7UUFDSCxDQUFDO1FBRUQsTUFBTSxJQUFJLElBQUksQ0FBQyxNQUFNLENBQUE7UUFDckIsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztZQUNqQixNQUFLO1FBQ1AsQ0FBQztJQUNILENBQUMsUUFBUSxNQUFNLEdBQUcsS0FBSyxFQUFDO0FBQzFCLENBQUM7QUFFWSxRQUFBLE1BQU0sR0FBRztJQUNwQixJQUFJLEVBQUUsdUNBQXVDO0lBQzdDLFFBQVEsRUFBRSxjQUFjO0NBQ3pCLENBQUEifQ==
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.config = void 0;
|
|
4
|
+
exports.default = reconcileEmailAttemptsJob;
|
|
5
|
+
const public_1 = require("../public");
|
|
6
|
+
const utils_1 = require("@medusajs/framework/utils");
|
|
7
|
+
const plugin_features_1 = require("../email/plugin-features");
|
|
8
|
+
const email_1 = require("../modules/email");
|
|
9
|
+
const dispatch_email_message_1 = require("../workflows/email/dispatch-email-message");
|
|
10
|
+
async function reconcileEmailAttemptsJob(container) {
|
|
11
|
+
if (!(await (0, public_1.isPluginFeatureEnabled)(container, plugin_features_1.emailPluginFeatures))) {
|
|
12
|
+
return;
|
|
13
|
+
}
|
|
14
|
+
const email = container.resolve(email_1.EMAIL_MODULE);
|
|
15
|
+
const logger = container.resolve(utils_1.ContainerRegistrationKeys.LOGGER);
|
|
16
|
+
const now = new Date();
|
|
17
|
+
let candidates;
|
|
18
|
+
try {
|
|
19
|
+
candidates = await email.listStaleAttemptCandidates({ limit: 20, now });
|
|
20
|
+
}
|
|
21
|
+
catch {
|
|
22
|
+
logger.error("email: attempt reconciliation failed (EMAIL_ATTEMPT_RECONCILIATION_FAILED)");
|
|
23
|
+
return;
|
|
24
|
+
}
|
|
25
|
+
for (const candidate of candidates) {
|
|
26
|
+
let notification = null;
|
|
27
|
+
try {
|
|
28
|
+
notification = await (0, dispatch_email_message_1.findAttemptNotification)(container, candidate.attempt_id);
|
|
29
|
+
}
|
|
30
|
+
catch {
|
|
31
|
+
logger.warn(`email: message=${candidate.message_id} kind=${candidate.kind} attempt=${candidate.attempt_id} code=notification_lookup_failed`);
|
|
32
|
+
continue;
|
|
33
|
+
}
|
|
34
|
+
try {
|
|
35
|
+
if (notification?.status === "success") {
|
|
36
|
+
await email.completeStaleAttempt({
|
|
37
|
+
attempt_id: candidate.attempt_id,
|
|
38
|
+
attempt_token: candidate.attempt_token,
|
|
39
|
+
now,
|
|
40
|
+
notification_id: notification.id,
|
|
41
|
+
outcome: "sent",
|
|
42
|
+
});
|
|
43
|
+
}
|
|
44
|
+
else {
|
|
45
|
+
await email.completeStaleAttempt({
|
|
46
|
+
attempt_id: candidate.attempt_id,
|
|
47
|
+
attempt_token: candidate.attempt_token,
|
|
48
|
+
now,
|
|
49
|
+
notification_id: notification?.id ?? null,
|
|
50
|
+
outcome: "unknown",
|
|
51
|
+
});
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
catch {
|
|
55
|
+
logger.warn(`email: message=${candidate.message_id} kind=${candidate.kind} attempt=${candidate.attempt_id} code=reconciliation_conflict`);
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
exports.config = {
|
|
60
|
+
name: "email-reconcile-attempts",
|
|
61
|
+
schedule: "* * * * *",
|
|
62
|
+
};
|
|
63
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVjb25jaWxlLWVtYWlsLWF0dGVtcHRzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2pvYnMvcmVjb25jaWxlLWVtYWlsLWF0dGVtcHRzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQVNBLDRDQXlEQztBQWxFRCxzQ0FBbUQ7QUFFbkQscURBQXNFO0FBRXRFLDhEQUErRDtBQUMvRCw0Q0FBZ0Q7QUFFaEQsc0ZBQW9GO0FBRXJFLEtBQUssVUFBVSx5QkFBeUIsQ0FDckQsU0FBMEI7SUFFMUIsSUFBSSxDQUFDLENBQUMsTUFBTSxJQUFBLCtCQUFzQixFQUFDLFNBQVMsRUFBRSxxQ0FBbUIsQ0FBQyxDQUFDLEVBQUUsQ0FBQztRQUNwRSxPQUFPO0lBQ1QsQ0FBQztJQUVELE1BQU0sS0FBSyxHQUFHLFNBQVMsQ0FBQyxPQUFPLENBQXFCLG9CQUFZLENBQUMsQ0FBQztJQUNsRSxNQUFNLE1BQU0sR0FBRyxTQUFTLENBQUMsT0FBTyxDQUFTLGlDQUF5QixDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQzNFLE1BQU0sR0FBRyxHQUFHLElBQUksSUFBSSxFQUFFLENBQUM7SUFDdkIsSUFBSSxVQUFVLENBQUM7SUFDZixJQUFJLENBQUM7UUFDSCxVQUFVLEdBQUcsTUFBTSxLQUFLLENBQUMsMEJBQTBCLENBQUMsRUFBRSxLQUFLLEVBQUUsRUFBRSxFQUFFLEdBQUcsRUFBRSxDQUFDLENBQUM7SUFDMUUsQ0FBQztJQUFDLE1BQU0sQ0FBQztRQUNQLE1BQU0sQ0FBQyxLQUFLLENBQ1YsNEVBQTRFLENBQzdFLENBQUM7UUFDRixPQUFPO0lBQ1QsQ0FBQztJQUVELEtBQUssTUFBTSxTQUFTLElBQUksVUFBVSxFQUFFLENBQUM7UUFDbkMsSUFBSSxZQUFZLEdBQUcsSUFBSSxDQUFDO1FBQ3hCLElBQUksQ0FBQztZQUNILFlBQVksR0FBRyxNQUFNLElBQUEsZ0RBQXVCLEVBQzFDLFNBQVMsRUFDVCxTQUFTLENBQUMsVUFBVSxDQUNyQixDQUFDO1FBQ0osQ0FBQztRQUFDLE1BQU0sQ0FBQztZQUNQLE1BQU0sQ0FBQyxJQUFJLENBQ1Qsa0JBQWtCLFNBQVMsQ0FBQyxVQUFVLFNBQVMsU0FBUyxDQUFDLElBQUksWUFBWSxTQUFTLENBQUMsVUFBVSxrQ0FBa0MsQ0FDaEksQ0FBQztZQUNGLFNBQVM7UUFDWCxDQUFDO1FBQ0QsSUFBSSxDQUFDO1lBQ0gsSUFBSSxZQUFZLEVBQUUsTUFBTSxLQUFLLFNBQVMsRUFBRSxDQUFDO2dCQUN2QyxNQUFNLEtBQUssQ0FBQyxvQkFBb0IsQ0FBQztvQkFDL0IsVUFBVSxFQUFFLFNBQVMsQ0FBQyxVQUFVO29CQUNoQyxhQUFhLEVBQUUsU0FBUyxDQUFDLGFBQWE7b0JBQ3RDLEdBQUc7b0JBQ0gsZUFBZSxFQUFFLFlBQVksQ0FBQyxFQUFFO29CQUNoQyxPQUFPLEVBQUUsTUFBTTtpQkFDaEIsQ0FBQyxDQUFDO1lBQ0wsQ0FBQztpQkFBTSxDQUFDO2dCQUNOLE1BQU0sS0FBSyxDQUFDLG9CQUFvQixDQUFDO29CQUMvQixVQUFVLEVBQUUsU0FBUyxDQUFDLFVBQVU7b0JBQ2hDLGFBQWEsRUFBRSxTQUFTLENBQUMsYUFBYTtvQkFDdEMsR0FBRztvQkFDSCxlQUFlLEVBQUUsWUFBWSxFQUFFLEVBQUUsSUFBSSxJQUFJO29CQUN6QyxPQUFPLEVBQUUsU0FBUztpQkFDbkIsQ0FBQyxDQUFDO1lBQ0wsQ0FBQztRQUNILENBQUM7UUFBQyxNQUFNLENBQUM7WUFDUCxNQUFNLENBQUMsSUFBSSxDQUNULGtCQUFrQixTQUFTLENBQUMsVUFBVSxTQUFTLFNBQVMsQ0FBQyxJQUFJLFlBQVksU0FBUyxDQUFDLFVBQVUsK0JBQStCLENBQzdILENBQUM7UUFDSixDQUFDO0lBQ0gsQ0FBQztBQUNILENBQUM7QUFFWSxRQUFBLE1BQU0sR0FBRztJQUNwQixJQUFJLEVBQUUsMEJBQTBCO0lBQ2hDLFFBQVEsRUFBRSxXQUFXO0NBQ2IsQ0FBQyJ9
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.config = void 0;
|
|
4
|
+
exports.default = reconcilePendingEmailMessagesJob;
|
|
5
|
+
const public_1 = require("../public");
|
|
6
|
+
const utils_1 = require("@medusajs/framework/utils");
|
|
7
|
+
const plugin_features_1 = require("../email/plugin-features");
|
|
8
|
+
const email_1 = require("../modules/email");
|
|
9
|
+
const dispatch_email_message_1 = require("../workflows/email/dispatch-email-message");
|
|
10
|
+
async function reconcilePendingEmailMessagesJob(container) {
|
|
11
|
+
if (!(await (0, public_1.isPluginFeatureEnabled)(container, plugin_features_1.emailPluginFeatures))) {
|
|
12
|
+
return;
|
|
13
|
+
}
|
|
14
|
+
const email = container.resolve(email_1.EMAIL_MODULE);
|
|
15
|
+
const logger = container.resolve(utils_1.ContainerRegistrationKeys.LOGGER);
|
|
16
|
+
const now = new Date();
|
|
17
|
+
let messageIds;
|
|
18
|
+
try {
|
|
19
|
+
await email.reconcilePendingMessageDependencies({ limit: 100, now });
|
|
20
|
+
messageIds = await email.listReadyMessageIds({ limit: 20 });
|
|
21
|
+
}
|
|
22
|
+
catch {
|
|
23
|
+
logger.error("email: pending reconciliation failed (EMAIL_PENDING_RECONCILIATION_FAILED)");
|
|
24
|
+
return;
|
|
25
|
+
}
|
|
26
|
+
for (const messageId of messageIds) {
|
|
27
|
+
try {
|
|
28
|
+
await (0, dispatch_email_message_1.dispatchEmailMessageWorkflow)(container).run({
|
|
29
|
+
input: { message_id: messageId },
|
|
30
|
+
});
|
|
31
|
+
}
|
|
32
|
+
catch {
|
|
33
|
+
logger.warn(`email: message=${messageId} code=pending_dispatch_conflict`);
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
exports.config = {
|
|
38
|
+
name: "email-reconcile-pending-messages",
|
|
39
|
+
schedule: "* * * * *",
|
|
40
|
+
};
|
|
41
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVjb25jaWxlLXBlbmRpbmctZW1haWwtbWVzc2FnZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvam9icy9yZWNvbmNpbGUtcGVuZGluZy1lbWFpbC1tZXNzYWdlcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFTQSxtREE4QkM7QUF2Q0Qsc0NBQW1EO0FBRW5ELHFEQUFzRTtBQUV0RSw4REFBK0Q7QUFDL0QsNENBQWdEO0FBRWhELHNGQUF5RjtBQUUxRSxLQUFLLFVBQVUsZ0NBQWdDLENBQzVELFNBQTBCO0lBRTFCLElBQUksQ0FBQyxDQUFDLE1BQU0sSUFBQSwrQkFBc0IsRUFBQyxTQUFTLEVBQUUscUNBQW1CLENBQUMsQ0FBQyxFQUFFLENBQUM7UUFDcEUsT0FBTztJQUNULENBQUM7SUFFRCxNQUFNLEtBQUssR0FBRyxTQUFTLENBQUMsT0FBTyxDQUFxQixvQkFBWSxDQUFDLENBQUM7SUFDbEUsTUFBTSxNQUFNLEdBQUcsU0FBUyxDQUFDLE9BQU8sQ0FBUyxpQ0FBeUIsQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUMzRSxNQUFNLEdBQUcsR0FBRyxJQUFJLElBQUksRUFBRSxDQUFDO0lBQ3ZCLElBQUksVUFBb0IsQ0FBQztJQUN6QixJQUFJLENBQUM7UUFDSCxNQUFNLEtBQUssQ0FBQyxtQ0FBbUMsQ0FBQyxFQUFFLEtBQUssRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUMsQ0FBQztRQUNyRSxVQUFVLEdBQUcsTUFBTSxLQUFLLENBQUMsbUJBQW1CLENBQUMsRUFBRSxLQUFLLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQztJQUM5RCxDQUFDO0lBQUMsTUFBTSxDQUFDO1FBQ1AsTUFBTSxDQUFDLEtBQUssQ0FDViw0RUFBNEUsQ0FDN0UsQ0FBQztRQUNGLE9BQU87SUFDVCxDQUFDO0lBRUQsS0FBSyxNQUFNLFNBQVMsSUFBSSxVQUFVLEVBQUUsQ0FBQztRQUNuQyxJQUFJLENBQUM7WUFDSCxNQUFNLElBQUEscURBQTRCLEVBQUMsU0FBUyxDQUFDLENBQUMsR0FBRyxDQUFDO2dCQUNoRCxLQUFLLEVBQUUsRUFBRSxVQUFVLEVBQUUsU0FBUyxFQUFFO2FBQ2pDLENBQUMsQ0FBQztRQUNMLENBQUM7UUFBQyxNQUFNLENBQUM7WUFDUCxNQUFNLENBQUMsSUFBSSxDQUFDLGtCQUFrQixTQUFTLGlDQUFpQyxDQUFDLENBQUM7UUFDNUUsQ0FBQztJQUNILENBQUM7QUFDSCxDQUFDO0FBRVksUUFBQSxNQUFNLEdBQUc7SUFDcEIsSUFBSSxFQUFFLGtDQUFrQztJQUN4QyxRQUFRLEVBQUUsV0FBVztDQUNiLENBQUMifQ==
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.config = void 0;
|
|
4
|
+
exports.default = retryEmailMessagesJob;
|
|
5
|
+
const public_1 = require("../public");
|
|
6
|
+
const utils_1 = require("@medusajs/framework/utils");
|
|
7
|
+
const plugin_features_1 = require("../email/plugin-features");
|
|
8
|
+
const retry_email_messages_1 = require("../workflows/email/retry-email-messages");
|
|
9
|
+
async function retryEmailMessagesJob(container) {
|
|
10
|
+
if (!(await (0, public_1.isPluginFeatureEnabled)(container, plugin_features_1.emailPluginFeatures))) {
|
|
11
|
+
return;
|
|
12
|
+
}
|
|
13
|
+
const logger = container.resolve(utils_1.ContainerRegistrationKeys.LOGGER);
|
|
14
|
+
try {
|
|
15
|
+
await (0, retry_email_messages_1.retryEmailMessagesWorkflow)(container).run({
|
|
16
|
+
input: { limit: 20 },
|
|
17
|
+
});
|
|
18
|
+
}
|
|
19
|
+
catch {
|
|
20
|
+
logger.error("email: retry job failed (EMAIL_RETRY_JOB_FAILED)");
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
exports.config = {
|
|
24
|
+
name: "email-retry-messages",
|
|
25
|
+
schedule: "* * * * *",
|
|
26
|
+
};
|
|
27
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmV0cnktZW1haWwtbWVzc2FnZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvam9icy9yZXRyeS1lbWFpbC1tZXNzYWdlcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFPQSx3Q0FlQztBQXRCRCxzQ0FBbUQ7QUFFbkQscURBQXNFO0FBRXRFLDhEQUErRDtBQUMvRCxrRkFBcUY7QUFFdEUsS0FBSyxVQUFVLHFCQUFxQixDQUNqRCxTQUEwQjtJQUUxQixJQUFJLENBQUMsQ0FBQyxNQUFNLElBQUEsK0JBQXNCLEVBQUMsU0FBUyxFQUFFLHFDQUFtQixDQUFDLENBQUMsRUFBRSxDQUFDO1FBQ3BFLE9BQU87SUFDVCxDQUFDO0lBRUQsTUFBTSxNQUFNLEdBQUcsU0FBUyxDQUFDLE9BQU8sQ0FBUyxpQ0FBeUIsQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUMzRSxJQUFJLENBQUM7UUFDSCxNQUFNLElBQUEsaURBQTBCLEVBQUMsU0FBUyxDQUFDLENBQUMsR0FBRyxDQUFDO1lBQzlDLEtBQUssRUFBRSxFQUFFLEtBQUssRUFBRSxFQUFFLEVBQUU7U0FDckIsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUFDLE1BQU0sQ0FBQztRQUNQLE1BQU0sQ0FBQyxLQUFLLENBQUMsa0RBQWtELENBQUMsQ0FBQztJQUNuRSxDQUFDO0FBQ0gsQ0FBQztBQUVZLFFBQUEsTUFBTSxHQUFHO0lBQ3BCLElBQUksRUFBRSxzQkFBc0I7SUFDNUIsUUFBUSxFQUFFLFdBQVc7Q0FDYixDQUFDIn0=
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.dismissOrphanedCartPromotionLinks = void 0;
|
|
4
|
+
exports.default = dismissOrphanedCartPromotionLinksScript;
|
|
5
|
+
const utils_1 = require("@medusajs/framework/utils");
|
|
6
|
+
const cart_promotion_links_1 = require("../utils/cart-promotion-links");
|
|
7
|
+
/**
|
|
8
|
+
* One-off repair, run exactly once by `medusa db:migrate`: removes every
|
|
9
|
+
* `cart_promotion` link whose promotion was deleted before the
|
|
10
|
+
* `promotionsDeleted` hook (src/workflows/hooks/dismiss-deleted-
|
|
11
|
+
* promotion-cart-links.ts) existed. Such links surface as `null` entries in
|
|
12
|
+
* `cart.promotions` and crashed both the storefront cart and the affiliate
|
|
13
|
+
* plugin's cart hooks.
|
|
14
|
+
*/
|
|
15
|
+
const dismissOrphanedCartPromotionLinks = async (container) => {
|
|
16
|
+
const orphaned = await (0, cart_promotion_links_1.findOrphanedCartPromotionLinks)(container);
|
|
17
|
+
await (0, cart_promotion_links_1.dismissCartPromotionLinks)(container, orphaned);
|
|
18
|
+
return orphaned.length;
|
|
19
|
+
};
|
|
20
|
+
exports.dismissOrphanedCartPromotionLinks = dismissOrphanedCartPromotionLinks;
|
|
21
|
+
async function dismissOrphanedCartPromotionLinksScript({ container, }) {
|
|
22
|
+
const logger = container.resolve(utils_1.ContainerRegistrationKeys.LOGGER);
|
|
23
|
+
const removed = await (0, exports.dismissOrphanedCartPromotionLinks)(container);
|
|
24
|
+
logger.info(`Removed ${removed} cart_promotion link(s) pointing at deleted promotions.`);
|
|
25
|
+
}
|
|
26
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGlzbWlzcy1vcnBoYW5lZC1jYXJ0LXByb21vdGlvbi1saW5rcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9taWdyYXRpb24tc2NyaXB0cy9kaXNtaXNzLW9ycGhhbmVkLWNhcnQtcHJvbW90aW9uLWxpbmtzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQXdCQSwwREFVQztBQWpDRCxxREFBcUU7QUFFckUsd0VBR3NDO0FBRXRDOzs7Ozs7O0dBT0c7QUFDSSxNQUFNLGlDQUFpQyxHQUFHLEtBQUssRUFDcEQsU0FBMEIsRUFDVCxFQUFFO0lBQ25CLE1BQU0sUUFBUSxHQUFHLE1BQU0sSUFBQSxxREFBOEIsRUFBQyxTQUFTLENBQUMsQ0FBQTtJQUNoRSxNQUFNLElBQUEsZ0RBQXlCLEVBQUMsU0FBUyxFQUFFLFFBQVEsQ0FBQyxDQUFBO0lBQ3BELE9BQU8sUUFBUSxDQUFDLE1BQU0sQ0FBQTtBQUN4QixDQUFDLENBQUE7QUFOWSxRQUFBLGlDQUFpQyxxQ0FNN0M7QUFFYyxLQUFLLFVBQVUsdUNBQXVDLENBQUMsRUFDcEUsU0FBUyxHQUdWO0lBQ0MsTUFBTSxNQUFNLEdBQUcsU0FBUyxDQUFDLE9BQU8sQ0FBQyxpQ0FBeUIsQ0FBQyxNQUFNLENBQUMsQ0FBQTtJQUNsRSxNQUFNLE9BQU8sR0FBRyxNQUFNLElBQUEseUNBQWlDLEVBQUMsU0FBUyxDQUFDLENBQUE7SUFDbEUsTUFBTSxDQUFDLElBQUksQ0FDVCxXQUFXLE9BQU8seURBQXlELENBQzVFLENBQUE7QUFDSCxDQUFDIn0=
|
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.createCancellationSnapshot = void 0;
|
|
4
|
+
const utils_1 = require("@medusajs/framework/utils");
|
|
5
|
+
const snapshot_normalization_1 = require("./snapshot-normalization");
|
|
6
|
+
const tax_breakdown_1 = require("./tax-breakdown");
|
|
7
|
+
const asPositiveAmount = (value, field) => {
|
|
8
|
+
const amount = utils_1.MathBN.convert(value);
|
|
9
|
+
if (!amount.isFinite() || !utils_1.MathBN.gt(amount, 0)) {
|
|
10
|
+
throw new Error(`${field} must be a positive monetary amount.`);
|
|
11
|
+
}
|
|
12
|
+
return amount;
|
|
13
|
+
};
|
|
14
|
+
const scaleAsNegativeMoney = (input) => {
|
|
15
|
+
if (input.money.currency_code !== input.currency_code) {
|
|
16
|
+
throw new Error("The original invoice snapshot contains mixed currencies.");
|
|
17
|
+
}
|
|
18
|
+
const decimalPlaces = (0, tax_breakdown_1.getCurrencyDecimalPlaces)(input.currency_code);
|
|
19
|
+
const amount = utils_1.MathBN.mult(utils_1.MathBN.div(utils_1.MathBN.convert(input.money.amount), input.source_total), input.refund_amount)
|
|
20
|
+
.negated()
|
|
21
|
+
.decimalPlaces(decimalPlaces)
|
|
22
|
+
.toFixed(decimalPlaces);
|
|
23
|
+
return {
|
|
24
|
+
amount,
|
|
25
|
+
currency_code: input.currency_code,
|
|
26
|
+
};
|
|
27
|
+
};
|
|
28
|
+
/**
|
|
29
|
+
* Builds a negative correction from the invoice snapshot that the customer
|
|
30
|
+
* actually received. A payment refund has no item allocation, therefore the
|
|
31
|
+
* stored invoice's tax and total distribution is applied proportionally.
|
|
32
|
+
*/
|
|
33
|
+
const createCancellationSnapshot = (input) => {
|
|
34
|
+
const sourceInvoice = (0, snapshot_normalization_1.normalizeDocumentSnapshot)(input.source_invoice);
|
|
35
|
+
if (sourceInvoice.document.kind !== "invoice" ||
|
|
36
|
+
!sourceInvoice.document.number) {
|
|
37
|
+
throw new Error("A numbered invoice snapshot is required for a cancellation.");
|
|
38
|
+
}
|
|
39
|
+
if (Number.isNaN(input.issued_at.getTime())) {
|
|
40
|
+
throw new Error("The cancellation issue date is invalid.");
|
|
41
|
+
}
|
|
42
|
+
const currencyCode = sourceInvoice.order.currency_code;
|
|
43
|
+
const sourceTotal = asPositiveAmount(sourceInvoice.totals.total.amount, "The original invoice total");
|
|
44
|
+
const refundAmount = asPositiveAmount(input.refund_amount, "The refund amount");
|
|
45
|
+
if (utils_1.MathBN.gt(refundAmount, sourceTotal)) {
|
|
46
|
+
throw new Error("The refund amount cannot exceed the original invoice total.");
|
|
47
|
+
}
|
|
48
|
+
const scale = (money) => scaleAsNegativeMoney({
|
|
49
|
+
money,
|
|
50
|
+
source_total: sourceTotal,
|
|
51
|
+
refund_amount: refundAmount,
|
|
52
|
+
currency_code: currencyCode,
|
|
53
|
+
});
|
|
54
|
+
const subtotal = scale(sourceInvoice.totals.subtotal);
|
|
55
|
+
const taxTotal = scale(sourceInvoice.totals.tax_total);
|
|
56
|
+
const taxBreakdown = (0, tax_breakdown_1.roundTaxBreakdown)(sourceInvoice.totals.tax_breakdown.map((entry) => ({
|
|
57
|
+
...entry,
|
|
58
|
+
tax_total: scale(entry.tax_total),
|
|
59
|
+
})), taxTotal);
|
|
60
|
+
const total = {
|
|
61
|
+
amount: refundAmount.negated().toFixed((0, tax_breakdown_1.getCurrencyDecimalPlaces)(currencyCode)),
|
|
62
|
+
currency_code: currencyCode,
|
|
63
|
+
};
|
|
64
|
+
return {
|
|
65
|
+
document: {
|
|
66
|
+
id: input.document_id,
|
|
67
|
+
kind: "cancellation",
|
|
68
|
+
number: input.document_number,
|
|
69
|
+
issued_at: input.issued_at.toISOString(),
|
|
70
|
+
source_document_number: sourceInvoice.document.number,
|
|
71
|
+
},
|
|
72
|
+
order: { ...sourceInvoice.order },
|
|
73
|
+
lines: [
|
|
74
|
+
{
|
|
75
|
+
id: `refund:${input.document_id}`,
|
|
76
|
+
title: `Rückerstattung zu Rechnung ${sourceInvoice.document.number}`,
|
|
77
|
+
sku: null,
|
|
78
|
+
quantity: 1,
|
|
79
|
+
unit_price: { ...subtotal },
|
|
80
|
+
subtotal,
|
|
81
|
+
tax_total: taxTotal,
|
|
82
|
+
total,
|
|
83
|
+
batch_allocations: [],
|
|
84
|
+
},
|
|
85
|
+
],
|
|
86
|
+
totals: {
|
|
87
|
+
subtotal,
|
|
88
|
+
tax_total: taxTotal,
|
|
89
|
+
tax_breakdown: taxBreakdown,
|
|
90
|
+
shipping_total: scale(sourceInvoice.totals.shipping_total),
|
|
91
|
+
discount_total: scale(sourceInvoice.totals.discount_total),
|
|
92
|
+
total,
|
|
93
|
+
},
|
|
94
|
+
};
|
|
95
|
+
};
|
|
96
|
+
exports.createCancellationSnapshot = createCancellationSnapshot;
|
|
97
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FuY2VsbGF0aW9uLXNuYXBzaG90LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL21vZHVsZXMvZG9jdW1lbnRzL2RvbWFpbi9jYW5jZWxsYXRpb24tc25hcHNob3QudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEscURBQWtEO0FBTWxELHFFQUFvRTtBQUNwRSxtREFBNkU7QUFFN0UsTUFBTSxnQkFBZ0IsR0FBRyxDQUFDLEtBQWEsRUFBRSxLQUFhLEVBQUUsRUFBRTtJQUN4RCxNQUFNLE1BQU0sR0FBRyxjQUFNLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFBO0lBQ3BDLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxjQUFNLENBQUMsRUFBRSxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDO1FBQ2hELE1BQU0sSUFBSSxLQUFLLENBQUMsR0FBRyxLQUFLLHNDQUFzQyxDQUFDLENBQUE7SUFDakUsQ0FBQztJQUVELE9BQU8sTUFBTSxDQUFBO0FBQ2YsQ0FBQyxDQUFBO0FBRUQsTUFBTSxvQkFBb0IsR0FBRyxDQUFDLEtBSzdCLEVBQWlCLEVBQUU7SUFDbEIsSUFBSSxLQUFLLENBQUMsS0FBSyxDQUFDLGFBQWEsS0FBSyxLQUFLLENBQUMsYUFBYSxFQUFFLENBQUM7UUFDdEQsTUFBTSxJQUFJLEtBQUssQ0FBQywwREFBMEQsQ0FBQyxDQUFBO0lBQzdFLENBQUM7SUFFRCxNQUFNLGFBQWEsR0FBRyxJQUFBLHdDQUF3QixFQUFDLEtBQUssQ0FBQyxhQUFhLENBQUMsQ0FBQTtJQUNuRSxNQUFNLE1BQU0sR0FBRyxjQUFNLENBQUMsSUFBSSxDQUN4QixjQUFNLENBQUMsR0FBRyxDQUFDLGNBQU0sQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsRUFBRSxLQUFLLENBQUMsWUFBWSxDQUFDLEVBQ2xFLEtBQUssQ0FBQyxhQUFh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
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.resolveDocumentNumberPeriodYear = exports.formatDocumentNumber = void 0;
|
|
4
|
+
const prefixByKind = {
|
|
5
|
+
invoice: "RE",
|
|
6
|
+
cancellation: "ST",
|
|
7
|
+
credit_note: "GS",
|
|
8
|
+
};
|
|
9
|
+
const formatDocumentNumber = (input) => {
|
|
10
|
+
if (!Number.isInteger(input.periodYear) || input.periodYear <= 0) {
|
|
11
|
+
throw new Error("The document-number period year must be a positive integer.");
|
|
12
|
+
}
|
|
13
|
+
if (!Number.isInteger(input.sequenceValue) || input.sequenceValue <= 0) {
|
|
14
|
+
throw new Error("The document-number sequence value must be a positive integer.");
|
|
15
|
+
}
|
|
16
|
+
return `${prefixByKind[input.kind]}-${input.periodYear}-${input.sequenceValue}`;
|
|
17
|
+
};
|
|
18
|
+
exports.formatDocumentNumber = formatDocumentNumber;
|
|
19
|
+
const resolveDocumentNumberPeriodYear = (issuedAt, timeZone) => {
|
|
20
|
+
if (Number.isNaN(issuedAt.getTime())) {
|
|
21
|
+
throw new Error("The document issue date is invalid.");
|
|
22
|
+
}
|
|
23
|
+
const year = new Intl.DateTimeFormat("en", {
|
|
24
|
+
timeZone,
|
|
25
|
+
year: "numeric",
|
|
26
|
+
})
|
|
27
|
+
.formatToParts(issuedAt)
|
|
28
|
+
.find((part) => part.type === "year")?.value;
|
|
29
|
+
const periodYear = Number(year);
|
|
30
|
+
if (!Number.isInteger(periodYear) || periodYear <= 0) {
|
|
31
|
+
throw new Error("The document-number period year could not be resolved.");
|
|
32
|
+
}
|
|
33
|
+
return periodYear;
|
|
34
|
+
};
|
|
35
|
+
exports.resolveDocumentNumberPeriodYear = resolveDocumentNumberPeriodYear;
|
|
36
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZG9jdW1lbnQtbnVtYmVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL21vZHVsZXMvZG9jdW1lbnRzL2RvbWFpbi9kb2N1bWVudC1udW1iZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBRUEsTUFBTSxZQUFZLEdBQWlDO0lBQ2pELE9BQU8sRUFBRSxJQUFJO0lBQ2IsWUFBWSxFQUFFLElBQUk7SUFDbEIsV0FBVyxFQUFFLElBQUk7Q0FDbEIsQ0FBQTtBQUVNLE1BQU0sb0JBQW9CLEdBQUcsQ0FBQyxLQUlwQyxFQUFVLEVBQUU7SUFDWCxJQUFJLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDLElBQUksS0FBSyxDQUFDLFVBQVUsSUFBSSxDQUFDLEVBQUUsQ0FBQztRQUNqRSxNQUFNLElBQUksS0FBSyxDQUFDLDZEQUE2RCxDQUFDLENBQUE7SUFDaEYsQ0FBQztJQUNELElBQUksQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxhQUFhLENBQUMsSUFBSSxLQUFLLENBQUMsYUFBYSxJQUFJLENBQUMsRUFBRSxDQUFDO1FBQ3ZFLE1BQU0sSUFBSSxLQUFLLENBQUMsZ0VBQWdFLENBQUMsQ0FBQTtJQUNuRixDQUFDO0lBRUQsT0FBTyxHQUFHLFlBQVksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksS0FBSyxDQUFDLFVBQVUsSUFBSSxLQUFLLENBQUMsYUFBYSxFQUFFLENBQUE7QUFDakYsQ0FBQyxDQUFBO0FBYlksUUFBQSxvQkFBb0Isd0JBYWhDO0FBRU0sTUFBTSwrQkFBK0IsR0FBRyxDQUM3QyxRQUFjLEVBQ2QsUUFBZ0IsRUFDUixFQUFFO0lBQ1YsSUFBSSxNQUFNLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxFQUFFLENBQUM7UUFDckMsTUFBTSxJQUFJLEtBQUssQ0FBQyxxQ0FBcUMsQ0FBQyxDQUFBO0lBQ3hELENBQUM7SUFFRCxNQUFNLElBQUksR0FBRyxJQUFJLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxFQUFFO1FBQ3pDLFFBQVE7UUFDUixJQUFJLEVBQUUsU0FBUztLQUNoQixDQUFDO1NBQ0MsYUFBYSxDQUFDLFFBQVEsQ0FBQztTQUN2QixJQUFJLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxJQUFJLEtBQUssTUFBTSxDQUFDLEVBQUUsS0FBSyxDQUFBO0lBQzlDLE1BQU0sVUFBVSxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQTtJQUMvQixJQUFJLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxVQUFVLENBQUMsSUFBSSxVQUFVLElBQUksQ0FBQyxFQUFFLENBQUM7UUFDckQsTUFBTSxJQUFJLEtBQUssQ0FBQyx3REFBd0QsQ0FBQyxDQUFBO0lBQzNFLENBQUM7SUFFRCxPQUFPLFVBQVUsQ0FBQTtBQUNuQixDQUFDLENBQUE7QUFwQlksUUFBQSwrQkFBK0IsbUNBb0IzQyJ9
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.canDeleteReplacedArtifact = exports.isCancellationResolutionReady = exports.resolveRefundCommunicationOwner = exports.selectShipmentInvoiceCandidate = exports.canonicalizeRefundIds = void 0;
|
|
4
|
+
const canonicalizeRefundIds = (refundIds) => [...new Set(refundIds.map((id) => id.trim()).filter(Boolean))].sort((a, b) => a.localeCompare(b));
|
|
5
|
+
exports.canonicalizeRefundIds = canonicalizeRefundIds;
|
|
6
|
+
const selectShipmentInvoiceCandidate = (assignments) => [...assignments]
|
|
7
|
+
.sort((left, right) => left.created_at.getTime() - right.created_at.getTime() ||
|
|
8
|
+
left.fulfillment_id.localeCompare(right.fulfillment_id))[0]?.fulfillment_id ?? null;
|
|
9
|
+
exports.selectShipmentInvoiceCandidate = selectShipmentInvoiceCandidate;
|
|
10
|
+
const resolveRefundCommunicationOwner = (input) => input.order_canceled || input.cancellation_resolution_exists
|
|
11
|
+
? "cancellation"
|
|
12
|
+
: "standalone";
|
|
13
|
+
exports.resolveRefundCommunicationOwner = resolveRefundCommunicationOwner;
|
|
14
|
+
const isCancellationResolutionReady = (expectedRefundIds, resolutions) => {
|
|
15
|
+
const stateByRefund = new Map(resolutions.map((resolution) => [resolution.refund_id, resolution.state]));
|
|
16
|
+
return (0, exports.canonicalizeRefundIds)(expectedRefundIds).every((refundId) => {
|
|
17
|
+
const state = stateByRefund.get(refundId);
|
|
18
|
+
return state === "ready" || state === "not_applicable";
|
|
19
|
+
});
|
|
20
|
+
};
|
|
21
|
+
exports.isCancellationResolutionReady = isCancellationResolutionReady;
|
|
22
|
+
const canDeleteReplacedArtifact = (artifact) => artifact?.communication_locked === false;
|
|
23
|
+
exports.canDeleteReplacedArtifact = canDeleteReplacedArtifact;
|
|
24
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZG9jdW1lbnQtcmVzb2x1dGlvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9tb2R1bGVzL2RvY3VtZW50cy9kb21haW4vZG9jdW1lbnQtcmVzb2x1dGlvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFLTyxNQUFNLHFCQUFxQixHQUFHLENBQUMsU0FBNEIsRUFBWSxFQUFFLENBQzlFLENBQUMsR0FBRyxJQUFJLEdBQUcsQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUMzRSxDQUFDLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxDQUNuQixDQUFBO0FBSFUsUUFBQSxxQkFBcUIseUJBRy9CO0FBRUksTUFBTSw4QkFBOEIsR0FBRyxDQUM1QyxXQUFvRSxFQUNyRCxFQUFFLENBQ2pCLENBQUMsR0FBRyxXQUFXLENBQUM7S0FDYixJQUFJLENBQ0gsQ0FBQyxJQUFJLEVBQUUsS0FBSyxFQUFFLEVBQUUsQ0FDZCxJQUFJLENBQUMsVUFBVSxDQUFDLE9BQU8sRUFBRSxHQUFHLEtBQUssQ0FBQyxVQUFVLENBQUMsT0FBTyxFQUFFO0lBQ3RELElBQUksQ0FBQyxjQUFjLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxjQUFjLENBQUMsQ0FDMUQsQ0FBQyxDQUFDLENBQUMsRUFBRSxjQUFjLElBQUksSUFBSSxDQUFBO0FBUm5CLFFBQUEsOEJBQThCLGtDQVFYO0FBRXpCLE1BQU0sK0JBQStCLEdBQUcsQ0FBQyxLQUcvQyxFQUE0QixFQUFFLENBQzdCLEtBQUssQ0FBQyxjQUFjLElBQUksS0FBSyxDQUFDLDhCQUE4QjtJQUMxRCxDQUFDLENBQUMsY0FBYztJQUNoQixDQUFDLENBQUMsWUFBWSxDQUFBO0FBTkwsUUFBQSwrQkFBK0IsbUNBTTFCO0FBRVgsTUFBTSw2QkFBNkIsR0FBRyxDQUMzQyxpQkFBb0MsRUFDcEMsV0FHRyxFQUNNLEVBQUU7SUFDWCxNQUFNLGFBQWEsR0FBRyxJQUFJLEdBQUcsQ0FDM0IsV0FBVyxDQUFDLEdBQUcsQ0FBQyxDQUFDLFVBQVUsRUFBRSxFQUFFLENBQUMsQ0FBQyxVQUFVLENBQUMsU0FBUyxFQUFFLFVBQVUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUMxRSxDQUFBO0lBRUQsT0FBTyxJQUFBLDZCQUFxQixFQUFDLGlCQUFpQixDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsUUFBUSxFQUFFLEVBQUU7UUFDakUsTUFBTSxLQUFLLEdBQUcsYUFBYSxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsQ0FBQTtRQUN6QyxPQUFPLEtBQUssS0FBSyxPQUFPLElBQUksS0FBSyxLQUFLLGdCQUFnQixDQUFBO0lBQ3hELENBQUMsQ0FBQyxDQUFBO0FBQ0osQ0FBQyxDQUFBO0FBZlksUUFBQSw2QkFBNkIsaUNBZXpDO0FBRU0sTUFBTSx5QkFBeUIsR0FBRyxDQUN2QyxRQUFrRCxFQUN6QyxFQUFFLENBQUMsUUFBUSxFQUFFLG9CQUFvQixLQUFLLEtBQUssQ0FBQTtBQUZ6QyxRQUFBLHlCQUF5Qiw2QkFFZ0IifQ==
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.canCustomerAccessDocument = exports.mapBatchAllocationsByLineItem = exports.isInvoiceIssuableAfterShipment = void 0;
|
|
4
|
+
/**
|
|
5
|
+
* The single invoice is deliberately deferred until Medusa has registered the
|
|
6
|
+
* final shipment. `partially_shipped` must never produce a partial invoice.
|
|
7
|
+
*/
|
|
8
|
+
const isInvoiceIssuableAfterShipment = (order) => !order.canceled_at &&
|
|
9
|
+
(order.fulfillment_status === "shipped" ||
|
|
10
|
+
order.fulfillment_status === "delivered");
|
|
11
|
+
exports.isInvoiceIssuableAfterShipment = isInvoiceIssuableAfterShipment;
|
|
12
|
+
/**
|
|
13
|
+
* Maps immutable FEFO withdrawals to their order line. Sorting makes the
|
|
14
|
+
* template input deterministic even when a provider returns rows in a
|
|
15
|
+
* different order.
|
|
16
|
+
*/
|
|
17
|
+
const mapBatchAllocationsByLineItem = (allocations) => {
|
|
18
|
+
const byLineItem = {};
|
|
19
|
+
for (const allocation of allocations) {
|
|
20
|
+
const { line_item_id: lineItemId, ...documentAllocation } = allocation;
|
|
21
|
+
const lineAllocations = byLineItem[lineItemId] ?? [];
|
|
22
|
+
lineAllocations.push(documentAllocation);
|
|
23
|
+
byLineItem[lineItemId] = lineAllocations;
|
|
24
|
+
}
|
|
25
|
+
for (const lineAllocations of Object.values(byLineItem)) {
|
|
26
|
+
lineAllocations.sort((left, right) => left.batch_id.localeCompare(right.batch_id));
|
|
27
|
+
}
|
|
28
|
+
return byLineItem;
|
|
29
|
+
};
|
|
30
|
+
exports.mapBatchAllocationsByLineItem = mapBatchAllocationsByLineItem;
|
|
31
|
+
/**
|
|
32
|
+
* Guest documents intentionally have no storefront owner and are never
|
|
33
|
+
* retrievable over Store.
|
|
34
|
+
*/
|
|
35
|
+
const canCustomerAccessDocument = (documentCustomerId, actorCustomerId) => typeof documentCustomerId === "string" && documentCustomerId === actorCustomerId;
|
|
36
|
+
exports.canCustomerAccessDocument = canCustomerAccessDocument;
|
|
37
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaXNzdWFuY2UtcnVsZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvbW9kdWxlcy9kb2N1bWVudHMvZG9tYWluL2lzc3VhbmNlLXJ1bGVzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQWVBOzs7R0FHRztBQUNJLE1BQU0sOEJBQThCLEdBQUcsQ0FDNUMsS0FBZ0MsRUFDdkIsRUFBRSxDQUNYLENBQUMsS0FBSyxDQUFDLFdBQVc7SUFDbEIsQ0FBQyxLQUFLLENBQUMsa0JBQWtCLEtBQUssU0FBUztRQUNyQyxLQUFLLENBQUMsa0JBQWtCLEtBQUssV0FBVyxDQUFDLENBQUE7QUFMaEMsUUFBQSw4QkFBOEIsa0NBS0U7QUFFN0M7Ozs7R0FJRztBQUNJLE1BQU0sNkJBQTZCLEdBQUcsQ0FDM0MsV0FBc0MsRUFDSyxFQUFFO0lBQzdDLE1BQU0sVUFBVSxHQUE4QyxFQUFFLENBQUE7SUFFaEUsS0FBSyxNQUFNLFVBQVUsSUFBSSxXQUFXLEVBQUUsQ0FBQztRQUNyQyxNQUFNLEVBQUUsWUFBWSxFQUFFLFVBQVUsRUFBRSxHQUFHLGtCQUFrQixFQUFFLEdBQUcsVUFBVSxDQUFBO1FBQ3RFLE1BQU0sZUFBZSxHQUFHLFVBQVUsQ0FBQyxVQUFVLENBQUMsSUFBSSxFQUFFLENBQUE7UUFDcEQsZUFBZSxDQUFDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxDQUFBO1FBQ3hDLFVBQVUsQ0FBQyxVQUFVLENBQUMsR0FBRyxlQUFlLENBQUE7SUFDMUMsQ0FBQztJQUVELEtBQUssTUFBTSxlQUFlLElBQUksTUFBTSxDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUMsRUFBRSxDQUFDO1FBQ3hELGVBQWUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLEVBQUUsS0FBSyxFQUFFLEVBQUUsQ0FDbkMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxDQUM1QyxDQUFBO0lBQ0gsQ0FBQztJQUVELE9BQU8sVUFBVSxDQUFBO0FBQ25CLENBQUMsQ0FBQTtBQW5CWSxRQUFBLDZCQUE2QixpQ0FtQnpDO0FBRUQ7OztHQUdHO0FBQ0ksTUFBTSx5QkFBeUIsR0FBRyxDQUN2QyxrQkFBNkMsRUFDN0MsZUFBdUIsRUFDZCxFQUFFLENBQ1gsT0FBTyxrQkFBa0IsS0FBSyxRQUFRLElBQUksa0JBQWtCLEtBQUssZUFBZSxDQUFBO0FBSnJFLFFBQUEseUJBQXlCLDZCQUk0QyJ9
|