@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,142 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.renderFinancialDocument = void 0;
|
|
4
|
+
const format_1 = require("./format");
|
|
5
|
+
const html_utils_1 = require("./html-utils");
|
|
6
|
+
const labelsByKind = {
|
|
7
|
+
cancellation: {
|
|
8
|
+
date: "Stornodatum",
|
|
9
|
+
recipient: "Stornorechnung an",
|
|
10
|
+
title: "Stornorechnung",
|
|
11
|
+
},
|
|
12
|
+
credit_note: {
|
|
13
|
+
date: "Gutschriftsdatum",
|
|
14
|
+
recipient: "Gutschrift an",
|
|
15
|
+
title: "Gutschrift",
|
|
16
|
+
},
|
|
17
|
+
invoice: {
|
|
18
|
+
date: "Rechnungsdatum",
|
|
19
|
+
recipient: "Rechnung an",
|
|
20
|
+
title: "Rechnung",
|
|
21
|
+
},
|
|
22
|
+
};
|
|
23
|
+
const renderAddress = (input) => {
|
|
24
|
+
const address = input.order.billing_address;
|
|
25
|
+
if (!address) {
|
|
26
|
+
return (0, html_utils_1.escapeHtml)(input.order.email);
|
|
27
|
+
}
|
|
28
|
+
return [
|
|
29
|
+
[address.company, address.first_name, address.last_name]
|
|
30
|
+
.filter((part) => Boolean(part))
|
|
31
|
+
.join(" "),
|
|
32
|
+
address.address_1,
|
|
33
|
+
address.address_2,
|
|
34
|
+
[address.postal_code, address.city]
|
|
35
|
+
.filter((part) => Boolean(part))
|
|
36
|
+
.join(" "),
|
|
37
|
+
address.country_code?.toUpperCase(),
|
|
38
|
+
]
|
|
39
|
+
.filter((part) => Boolean(part))
|
|
40
|
+
.map(html_utils_1.escapeHtml)
|
|
41
|
+
.join("<br />");
|
|
42
|
+
};
|
|
43
|
+
const renderLines = (input, timeZone) => input.lines
|
|
44
|
+
.map((line) => {
|
|
45
|
+
const batchDetails = line.batch_allocations
|
|
46
|
+
.map((allocation) => `<div class="batch">Charge: ${(0, html_utils_1.escapeHtml)(allocation.lot_number)} · MHD: ${(0, html_utils_1.escapeHtml)((0, format_1.formatDate)(allocation.expiry_date, { timeZone }))} · ${(0, html_utils_1.escapeHtml)(allocation.quantity)}</div>`)
|
|
47
|
+
.join("");
|
|
48
|
+
return `<tr>
|
|
49
|
+
<td>
|
|
50
|
+
<strong>${(0, html_utils_1.escapeHtml)(line.title)}</strong>
|
|
51
|
+
${line.sku ? `<div class="sku">SKU: ${(0, html_utils_1.escapeHtml)(line.sku)}</div>` : ""}
|
|
52
|
+
${batchDetails}
|
|
53
|
+
</td>
|
|
54
|
+
<td class="number">${(0, html_utils_1.escapeHtml)(line.quantity)}</td>
|
|
55
|
+
<td class="number">${(0, html_utils_1.escapeHtml)((0, format_1.formatMoney)({ amount: line.unit_price.amount, currencyCode: line.unit_price.currency_code }))}</td>
|
|
56
|
+
<td class="number">${(0, html_utils_1.escapeHtml)((0, format_1.formatMoney)({ amount: line.total.amount, currencyCode: line.total.currency_code }))}</td>
|
|
57
|
+
</tr>`;
|
|
58
|
+
})
|
|
59
|
+
.join("");
|
|
60
|
+
const renderTaxCompliance = (input) => {
|
|
61
|
+
const evidence = input.order.tax_compliance;
|
|
62
|
+
if (!evidence ||
|
|
63
|
+
evidence.exemption_wording !==
|
|
64
|
+
"steuerfreie_innergemeinschaftliche_lieferung") {
|
|
65
|
+
return "";
|
|
66
|
+
}
|
|
67
|
+
return `<section class="tax-compliance">
|
|
68
|
+
<h2>Steuerliche Angaben</h2>
|
|
69
|
+
<strong>${(0, html_utils_1.escapeHtml)(evidence.customer_company_name)}</strong><br />
|
|
70
|
+
UID des Kunden: ${(0, html_utils_1.escapeHtml)(evidence.customer_vat_number)}<br />
|
|
71
|
+
Steuerfreie innergemeinschaftliche Lieferung
|
|
72
|
+
</section>`;
|
|
73
|
+
};
|
|
74
|
+
const renderDiscountTotal = (input) => {
|
|
75
|
+
const { amount, currency_code: currencyCode } = input.totals.discount_total;
|
|
76
|
+
const displayAmount = input.document.kind === "invoice" && Number(amount) > 0
|
|
77
|
+
? `-${amount}`
|
|
78
|
+
: amount;
|
|
79
|
+
return (0, html_utils_1.escapeHtml)((0, format_1.formatMoney)({ amount: displayAmount, currencyCode }));
|
|
80
|
+
};
|
|
81
|
+
const formatTaxRate = (rate) => new Intl.NumberFormat(format_1.DEFAULT_FORMAT_LOCALE, {
|
|
82
|
+
maximumFractionDigits: 2,
|
|
83
|
+
style: "percent",
|
|
84
|
+
}).format(rate / 100);
|
|
85
|
+
const renderTaxRows = (input) => {
|
|
86
|
+
const { tax_breakdown: breakdown, tax_total: taxTotal } = input.totals;
|
|
87
|
+
const rows = breakdown.length > 0
|
|
88
|
+
? breakdown.map((entry) => ({
|
|
89
|
+
label: `${entry.name} ${formatTaxRate(entry.rate)}`,
|
|
90
|
+
money: entry.tax_total,
|
|
91
|
+
}))
|
|
92
|
+
: [{ label: "Umsatzsteuer", money: taxTotal }];
|
|
93
|
+
return rows
|
|
94
|
+
.map(({ label, money }) => `<tr><td>${(0, html_utils_1.escapeHtml)(label)}</td><td class="number">${(0, html_utils_1.escapeHtml)((0, format_1.formatMoney)({ amount: money.amount, currencyCode: money.currency_code }))}</td></tr>`)
|
|
95
|
+
.join("");
|
|
96
|
+
};
|
|
97
|
+
const renderFinancialDocument = (input, layout, timeZone) => {
|
|
98
|
+
const labels = labelsByKind[input.document.kind];
|
|
99
|
+
const metadata = [
|
|
100
|
+
{
|
|
101
|
+
label: labels.date,
|
|
102
|
+
value: (0, format_1.formatDate)(input.document.issued_at, { timeZone }),
|
|
103
|
+
},
|
|
104
|
+
{
|
|
105
|
+
label: "Bestellung",
|
|
106
|
+
value: (0, html_utils_1.formatOrderReference)(input.order.display_id),
|
|
107
|
+
},
|
|
108
|
+
];
|
|
109
|
+
if (input.document.kind !== "invoice") {
|
|
110
|
+
metadata.push({
|
|
111
|
+
label: "Ursprungsrechnung",
|
|
112
|
+
value: input.document.source_document_number ?? "-",
|
|
113
|
+
});
|
|
114
|
+
}
|
|
115
|
+
const body = `<section class="recipient">
|
|
116
|
+
<h2>${labels.recipient}</h2>
|
|
117
|
+
${renderAddress(input)}
|
|
118
|
+
</section>
|
|
119
|
+
${renderTaxCompliance(input)}
|
|
120
|
+
<table>
|
|
121
|
+
<thead><tr><th>Artikel</th><th class="number">Menge</th><th class="number">Einzelpreis</th><th class="number">Summe</th></tr></thead>
|
|
122
|
+
<tbody>${renderLines(input, timeZone)}</tbody>
|
|
123
|
+
</table>
|
|
124
|
+
<table class="totals">
|
|
125
|
+
<tbody>
|
|
126
|
+
<tr><td>Zwischensumme</td><td class="number">${(0, html_utils_1.escapeHtml)((0, format_1.formatMoney)({ amount: input.totals.subtotal.amount, currencyCode: input.totals.subtotal.currency_code }))}</td></tr>
|
|
127
|
+
<tr><td>Versand</td><td class="number">${(0, html_utils_1.escapeHtml)((0, format_1.formatMoney)({ amount: input.totals.shipping_total.amount, currencyCode: input.totals.shipping_total.currency_code }))}</td></tr>
|
|
128
|
+
<tr><td>Rabatt</td><td class="number">${renderDiscountTotal(input)}</td></tr>
|
|
129
|
+
${renderTaxRows(input)}
|
|
130
|
+
<tr><td>Gesamt</td><td class="number">${(0, html_utils_1.escapeHtml)((0, format_1.formatMoney)({ amount: input.totals.total.amount, currencyCode: input.totals.total.currency_code }))}</td></tr>
|
|
131
|
+
</tbody>
|
|
132
|
+
</table>`;
|
|
133
|
+
return layout({
|
|
134
|
+
body,
|
|
135
|
+
documentTitle: labels.title,
|
|
136
|
+
metadata,
|
|
137
|
+
number: input.document.number,
|
|
138
|
+
pageTitle: labels.title,
|
|
139
|
+
});
|
|
140
|
+
};
|
|
141
|
+
exports.renderFinancialDocument = renderFinancialDocument;
|
|
142
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmluYW5jaWFsLWRvY3VtZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vc3JjL2RvY3VtZW50cy90ZW1wbGF0ZXMvZmluYW5jaWFsLWRvY3VtZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUVBLHFDQUF5RTtBQUN6RSw2Q0FBK0Q7QUFTL0QsTUFBTSxZQUFZLEdBQUc7SUFDbkIsWUFBWSxFQUFFO1FBQ1osSUFBSSxFQUFFLGFBQWE7UUFDbkIsU0FBUyxFQUFFLG1CQUFtQjtRQUM5QixLQUFLLEVBQUUsZ0JBQWdCO0tBQ3hCO0lBQ0QsV0FBVyxFQUFFO1FBQ1gsSUFBSSxFQUFFLGtCQUFrQjtRQUN4QixTQUFTLEVBQUUsZUFBZTtRQUMxQixLQUFLLEVBQUUsWUFBWTtLQUNwQjtJQUNELE9BQU8sRUFBRTtRQUNQLElBQUksRUFBRSxnQkFBZ0I7UUFDdEIsU0FBUyxFQUFFLGFBQWE7UUFDeEIsS0FBSyxFQUFFLFVBQVU7S0FDbEI7Q0FJRixDQUFBO0FBRUQsTUFBTSxhQUFhLEdBQUcsQ0FBQyxLQUE0QixFQUFVLEVBQUU7SUFDN0QsTUFBTSxPQUFPLEdBQUcsS0FBSyxDQUFDLEtBQUssQ0FBQyxlQUFlLENBQUE7SUFDM0MsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO1FBQ2IsT0FBTyxJQUFBLHVCQUFVLEVBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQTtJQUN0QyxDQUFDO0lBRUQsT0FBTztRQUNMLENBQUMsT0FBTyxDQUFDLE9BQU8sRUFBRSxPQUFPLENBQUMsVUFBVSxFQUFFLE9BQU8sQ0FBQyxTQUFTLENBQUM7YUFDckQsTUFBTSxDQUFDLENBQUMsSUFBSSxFQUFrQixFQUFFLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO2FBQy9DLElBQUksQ0FBQyxHQUFHLENBQUM7UUFDWixPQUFPLENBQUMsU0FBUztRQUNqQixPQUFPLENBQUMsU0FBUztRQUNqQixDQUFDLE9BQU8s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
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.formatDate = exports.formatMoney = exports.DEFAULT_FORMAT_LOCALE = void 0;
|
|
4
|
+
exports.DEFAULT_FORMAT_LOCALE = "de-AT";
|
|
5
|
+
const formatMoney = ({ amount, currencyCode }, { locale = exports.DEFAULT_FORMAT_LOCALE } = {}) => {
|
|
6
|
+
const numericAmount = Number(amount);
|
|
7
|
+
const normalizedCurrencyCode = currencyCode.toUpperCase();
|
|
8
|
+
const fallback = `${String(amount)} ${normalizedCurrencyCode}`;
|
|
9
|
+
if (!Number.isFinite(numericAmount)) {
|
|
10
|
+
return fallback;
|
|
11
|
+
}
|
|
12
|
+
try {
|
|
13
|
+
return new Intl.NumberFormat(locale, {
|
|
14
|
+
currency: normalizedCurrencyCode,
|
|
15
|
+
style: "currency",
|
|
16
|
+
}).format(numericAmount);
|
|
17
|
+
}
|
|
18
|
+
catch {
|
|
19
|
+
return fallback;
|
|
20
|
+
}
|
|
21
|
+
};
|
|
22
|
+
exports.formatMoney = formatMoney;
|
|
23
|
+
const formatDate = (value, { locale = exports.DEFAULT_FORMAT_LOCALE, options, timeZone }) => {
|
|
24
|
+
const date = value instanceof Date ? value : new Date(value);
|
|
25
|
+
if (Number.isNaN(date.getTime())) {
|
|
26
|
+
return String(value);
|
|
27
|
+
}
|
|
28
|
+
return new Intl.DateTimeFormat(locale, { timeZone, ...options }).format(date);
|
|
29
|
+
};
|
|
30
|
+
exports.formatDate = formatDate;
|
|
31
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybWF0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vc3JjL2RvY3VtZW50cy90ZW1wbGF0ZXMvZm9ybWF0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFhLFFBQUEscUJBQXFCLEdBQUcsT0FBTyxDQUFBO0FBV3JDLE1BQU0sV0FBVyxHQUFHLENBQ3pCLEVBQUUsTUFBTSxFQUFFLFlBQVksRUFBb0IsRUFDMUMsRUFBRSxNQUFNLEdBQUcsNkJBQXFCLEtBQXlCLEVBQUUsRUFDbkQsRUFBRTtJQUNWLE1BQU0sYUFBYSxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQTtJQUNwQyxNQUFNLHNCQUFzQixHQUFHLFlBQVksQ0FBQyxXQUFXLEVBQUUsQ0FBQTtJQUN6RCxNQUFNLFFBQVEsR0FBRyxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBSSxzQkFBc0IsRUFBRSxDQUFBO0lBRTlELElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLGFBQWEsQ0FBQyxFQUFFLENBQUM7UUFDcEMsT0FBTyxRQUFRLENBQUE7SUFDakIsQ0FBQztJQUVELElBQUksQ0FBQztRQUNILE9BQU8sSUFBSSxJQUFJLENBQUMsWUFBWSxDQUFDLE1BQU0sRUFBRTtZQUNuQyxRQUFRLEVBQUUsc0JBQXNCO1lBQ2hDLEtBQUssRUFBRSxVQUFVO1NBQ2xCLENBQUMsQ0FBQyxNQUFNLENBQUMsYUFBYSxDQUFDLENBQUE7SUFDMUIsQ0FBQztJQUFDLE1BQU0sQ0FBQztRQUNQLE9BQU8sUUFBUSxDQUFBO0lBQ2pCLENBQUM7QUFDSCxDQUFDLENBQUE7QUFwQlksUUFBQSxXQUFXLGVBb0J2QjtBQVNNLE1BQU0sVUFBVSxHQUFHLENBQ3hCLEtBQW9CLEVBQ3BCLEVBQUUsTUFBTSxHQUFHLDZCQUFxQixFQUFFLE9BQU8sRUFBRSxRQUFRLEVBQXFCLEVBQ2hFLEVBQUU7SUFDVixNQUFNLElBQUksR0FBRyxLQUFLLFlBQVksSUFBSSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFBO0lBRTVELElBQUksTUFBTSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUMsRUFBRSxDQUFDO1FBQ2pDLE9BQU8sTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFBO0lBQ3RCLENBQUM7SUFFRCxPQUFPLElBQUksSUFBSSxDQUFDLGNBQWMsQ0FBQyxNQUFNLEVBQUUsRUFBRSxRQUFRLEVBQUUsR0FBRyxPQUFPLEVBQUUsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQTtBQUMvRSxDQUFDLENBQUE7QUFYWSxRQUFBLFVBQVUsY0FXdEIifQ==
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/* eslint-disable @medusajs/use-medusa-error-not-generic-error -- Invalid render inputs are programmer errors, not HTTP responses. */
|
|
3
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
4
|
+
exports.createDefaultDocumentHtmlFactory = void 0;
|
|
5
|
+
const layout_1 = require("./layout");
|
|
6
|
+
const financial_document_1 = require("./financial-document");
|
|
7
|
+
const packing_list_1 = require("./packing-list");
|
|
8
|
+
/**
|
|
9
|
+
* The plugin's default document markup (German, locale de-AT). The legal
|
|
10
|
+
* sender comes with every render input (`input.merchant`, the base plugin's
|
|
11
|
+
* shop master data). `timeZone` is the IANA time zone in which printed dates
|
|
12
|
+
* are shown; the plugin passes its resolved `numbering.timeZone` so the date
|
|
13
|
+
* on a document matches the period its number was allocated in.
|
|
14
|
+
*/
|
|
15
|
+
const createDefaultDocumentHtmlFactory = ({ timeZone, }) => {
|
|
16
|
+
return (input) => {
|
|
17
|
+
const kind = input.document.kind;
|
|
18
|
+
switch (kind) {
|
|
19
|
+
case "invoice":
|
|
20
|
+
case "cancellation":
|
|
21
|
+
case "credit_note":
|
|
22
|
+
if ("totals" in input) {
|
|
23
|
+
return (0, financial_document_1.renderFinancialDocument)(input, (0, layout_1.createDocumentLayout)(input.merchant, true), timeZone);
|
|
24
|
+
}
|
|
25
|
+
break;
|
|
26
|
+
case "packing_list":
|
|
27
|
+
if ("fulfillment" in input) {
|
|
28
|
+
return (0, packing_list_1.renderPackingList)(input, (0, layout_1.createDocumentLayout)(input.merchant, false), timeZone);
|
|
29
|
+
}
|
|
30
|
+
break;
|
|
31
|
+
default: {
|
|
32
|
+
const unsupportedKind = kind;
|
|
33
|
+
throw new TypeError(`Unsupported document kind: ${unsupportedKind}`);
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
throw new TypeError(`Invalid input for document kind: ${kind}`);
|
|
37
|
+
};
|
|
38
|
+
};
|
|
39
|
+
exports.createDefaultDocumentHtmlFactory = createDefaultDocumentHtmlFactory;
|
|
40
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaHRtbC1mYWN0b3J5LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vc3JjL2RvY3VtZW50cy90ZW1wbGF0ZXMvaHRtbC1mYWN0b3J5LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxxSUFBcUk7OztBQUlySSxxQ0FBK0M7QUFDL0MsNkRBQThEO0FBQzlELGlEQUFrRDtBQUVsRDs7Ozs7O0dBTUc7QUFDSSxNQUFNLGdDQUFnQyxHQUFHLENBQUMsRUFDL0MsUUFBUSxHQUdULEVBQXVCLEVBQUU7SUFDeEIsT0FBTyxDQUFDLEtBQUssRUFBRSxFQUFFO1FBQ2YsTUFBTSxJQUFJLEdBQUcsS0FBSyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUE7UUFFaEMsUUFBUSxJQUFJLEVBQUUsQ0FBQztZQUNiLEtBQUssU0FBUyxDQUFDO1lBQ2YsS0FBSyxjQUFjLENBQUM7WUFDcEIsS0FBSyxhQUFhO2dCQUNoQixJQUFJLFFBQVEsSUFBSSxLQUFLLEVBQUUsQ0FBQztvQkFDdEIsT0FBTyxJQUFBLDRDQUF1QixFQUM1QixLQUFLLEVBQ0wsSUFBQSw2QkFBb0IsRUFBQyxLQUFLLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxFQUMxQyxRQUFRLENBQ1QsQ0FBQTtnQkFDSCxDQUFDO2dCQUNELE1BQUs7WUFDUCxLQUFLLGNBQWM7Z0JBQ2pCLElBQUksYUFBYSxJQUFJLEtBQUssRUFBRSxDQUFDO29CQUMzQixPQUFPLElBQUEsZ0NBQWlCLEVBQ3RCLEtBQUssRUFDTCxJQUFBLDZCQUFvQixFQUFDLEtBQUssQ0FBQyxRQUFRLEVBQUUsS0FBSyxDQUFDLEVBQzNDLFFBQVEsQ0FDVCxDQUFBO2dCQUNILENBQUM7Z0JBQ0QsTUFBSztZQUNQLE9BQU8sQ0FBQyxDQUFDLENBQUM7Z0JBQ1IsTUFBTSxlQUFlLEdBQVUsSUFBSSxDQUFBO2dCQUNuQyxNQUFNLElBQUksU0FBUyxDQUFDLDhCQUE4QixlQUFlLEVBQUUsQ0FBQyxDQUFBO1lBQ3RFLENBQUM7UUFDSCxDQUFDO1FBRUQsTUFBTSxJQUFJLFNBQVMsQ0FBQyxvQ0FBb0MsSUFBSSxFQUFFLENBQUMsQ0FBQTtJQUNqRSxDQUFDLENBQUE7QUFDSCxDQUFDLENBQUE7QUFyQ1ksUUFBQSxnQ0FBZ0Msb0NBcUM1QyJ9
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.formatOrderReference = exports.escapeHtml = void 0;
|
|
4
|
+
const escapeHtml = (value) => String(value ?? "")
|
|
5
|
+
.replaceAll("&", "&")
|
|
6
|
+
.replaceAll("<", "<")
|
|
7
|
+
.replaceAll(">", ">")
|
|
8
|
+
.replaceAll('"', """)
|
|
9
|
+
.replaceAll("'", "'");
|
|
10
|
+
exports.escapeHtml = escapeHtml;
|
|
11
|
+
const formatOrderReference = (displayId) => displayId === null ? "-" : `#${displayId}`;
|
|
12
|
+
exports.formatOrderReference = formatOrderReference;
|
|
13
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaHRtbC11dGlscy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9kb2N1bWVudHMvdGVtcGxhdGVzL2h0bWwtdXRpbHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQU8sTUFBTSxVQUFVLEdBQUcsQ0FBQyxLQUF5QyxFQUFVLEVBQUUsQ0FDOUUsTUFBTSxDQUFDLEtBQUssSUFBSSxFQUFFLENBQUM7S0FDaEIsVUFBVSxDQUFDLEdBQUcsRUFBRSxPQUFPLENBQUM7S0FDeEIsVUFBVSxDQUFDLEdBQUcsRUFBRSxNQUFNLENBQUM7S0FDdkIsVUFBVSxDQUFDLEdBQUcsRUFBRSxNQUFNLENBQUM7S0FDdkIsVUFBVSxDQUFDLEdBQUcsRUFBRSxRQUFRLENBQUM7S0FDekIsVUFBVSxDQUFDLEdBQUcsRUFBRSxRQUFRLENBQUMsQ0FBQTtBQU5qQixRQUFBLFVBQVUsY0FNTztBQUV2QixNQUFNLG9CQUFvQixHQUFHLENBQUMsU0FBd0IsRUFBVSxFQUFFLENBQ3ZFLFNBQVMsS0FBSyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsSUFBSSxTQUFTLEVBQUUsQ0FBQTtBQUQvQixRQUFBLG9CQUFvQix3QkFDVyJ9
|
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.createDocumentLayout = void 0;
|
|
4
|
+
const html_utils_1 = require("./html-utils");
|
|
5
|
+
const formatCountryName = (countryCode) => new Intl.DisplayNames("de", { type: "region" }).of(countryCode.toUpperCase()) ?? countryCode.toUpperCase();
|
|
6
|
+
const renderMerchantAddress = (merchant) => [
|
|
7
|
+
merchant.address_line1,
|
|
8
|
+
merchant.address_line2,
|
|
9
|
+
[merchant.postal_code, merchant.city].join(" "),
|
|
10
|
+
formatCountryName(merchant.country_code),
|
|
11
|
+
]
|
|
12
|
+
.filter((part) => Boolean(part))
|
|
13
|
+
.map(html_utils_1.escapeHtml)
|
|
14
|
+
.join("<br />");
|
|
15
|
+
/** Legal footer: name, UID, company register, contact and bank details that are set. */
|
|
16
|
+
const renderMerchantFooter = (merchant, includeLegalDetails) => {
|
|
17
|
+
if (!includeLegalDetails) {
|
|
18
|
+
return (0, html_utils_1.escapeHtml)(merchant.legal_name);
|
|
19
|
+
}
|
|
20
|
+
const register = [
|
|
21
|
+
merchant.company_register_number
|
|
22
|
+
? `Firmenbuchnummer: ${merchant.company_register_number}`
|
|
23
|
+
: null,
|
|
24
|
+
merchant.company_register_court
|
|
25
|
+
? `Firmenbuchgericht: ${merchant.company_register_court}`
|
|
26
|
+
: null,
|
|
27
|
+
];
|
|
28
|
+
const lines = [
|
|
29
|
+
[
|
|
30
|
+
merchant.legal_name,
|
|
31
|
+
merchant.vat_number ? `UID: ${merchant.vat_number}` : null,
|
|
32
|
+
...register,
|
|
33
|
+
],
|
|
34
|
+
[merchant.email, merchant.phone, merchant.website],
|
|
35
|
+
[
|
|
36
|
+
merchant.iban ? `IBAN: ${merchant.iban}` : null,
|
|
37
|
+
merchant.bic ? `BIC: ${merchant.bic}` : null,
|
|
38
|
+
],
|
|
39
|
+
];
|
|
40
|
+
return lines
|
|
41
|
+
.map((parts) => parts
|
|
42
|
+
.filter((part) => Boolean(part))
|
|
43
|
+
.map(html_utils_1.escapeHtml)
|
|
44
|
+
.join(" · "))
|
|
45
|
+
.filter(Boolean)
|
|
46
|
+
.join("<br />");
|
|
47
|
+
};
|
|
48
|
+
const renderMetadata = (metadata) => metadata
|
|
49
|
+
.map(({ label, value }) => `<div><strong>${(0, html_utils_1.escapeHtml)(label)}:</strong> ${(0, html_utils_1.escapeHtml)(value)}</div>`)
|
|
50
|
+
.join("");
|
|
51
|
+
/**
|
|
52
|
+
* `includeLegalDetails` adds UID, company register, contact and bank details
|
|
53
|
+
* to the footer (financial documents); packing lists show only the name.
|
|
54
|
+
*/
|
|
55
|
+
const createDocumentLayout = (merchant, includeLegalDetails) => ({ body, documentTitle, metadata, number, pageTitle }) => `<!doctype html>
|
|
56
|
+
<html lang="de">
|
|
57
|
+
<head>
|
|
58
|
+
<meta charset="utf-8" />
|
|
59
|
+
<title>${(0, html_utils_1.escapeHtml)(pageTitle)} ${(0, html_utils_1.escapeHtml)(number)}</title>
|
|
60
|
+
<style>
|
|
61
|
+
@page { margin: 18mm; }
|
|
62
|
+
body { color: #1f2937; font-family: Arial, sans-serif; font-size: 11px; line-height: 1.45; }
|
|
63
|
+
h1 { font-size: 24px; margin: 0 0 6px; }
|
|
64
|
+
h2 { break-after: avoid; font-size: 12px; margin: 22px 0 6px; page-break-after: avoid; text-transform: uppercase; }
|
|
65
|
+
.header { border-bottom: 2px solid #111827; display: flex; gap: 32px; justify-content: space-between; padding-bottom: 16px; }
|
|
66
|
+
.document-metadata { display: flex; flex-wrap: wrap; gap: 6px 28px; margin: 18px 0 22px; }
|
|
67
|
+
.document-metadata div { min-width: 180px; }
|
|
68
|
+
.muted, .sku, .batch { color: #6b7280; }
|
|
69
|
+
.batch, .packing-batch { font-size: 10px; margin-top: 2px; }
|
|
70
|
+
.packing-batch { display: flex; gap: 12px; justify-content: space-between; }
|
|
71
|
+
table { border-collapse: collapse; page-break-inside: auto; width: 100%; }
|
|
72
|
+
thead { display: table-header-group; }
|
|
73
|
+
tfoot { display: table-footer-group; }
|
|
74
|
+
tbody { page-break-inside: auto; }
|
|
75
|
+
tr { break-inside: avoid; page-break-inside: avoid; }
|
|
76
|
+
th { background: #f3f4f6; font-size: 10px; text-align: left; text-transform: uppercase; }
|
|
77
|
+
th, td { border-bottom: 1px solid #d1d5db; padding: 8px 6px; vertical-align: top; }
|
|
78
|
+
.number { text-align: right; white-space: nowrap; }
|
|
79
|
+
.recipient, .tax-compliance, .totals { break-inside: avoid; page-break-inside: avoid; }
|
|
80
|
+
.totals { margin-left: auto; margin-top: 16px; width: 260px; }
|
|
81
|
+
.totals td { border: 0; padding: 3px 0; }
|
|
82
|
+
.totals tr:last-child td { border-top: 2px solid #111827; font-size: 14px; font-weight: 700; padding-top: 7px; }
|
|
83
|
+
footer { border-top: 1px solid #d1d5db; break-inside: avoid; color: #6b7280; font-size: 9px; margin-top: 28px; page-break-inside: avoid; padding-top: 10px; }
|
|
84
|
+
</style>
|
|
85
|
+
</head>
|
|
86
|
+
<body>
|
|
87
|
+
<section class="header">
|
|
88
|
+
<div><h1>${(0, html_utils_1.escapeHtml)(documentTitle)}</h1><div class="muted">${(0, html_utils_1.escapeHtml)(number)}</div></div>
|
|
89
|
+
<div><strong>${(0, html_utils_1.escapeHtml)(merchant.legal_name)}</strong><br />${renderMerchantAddress(merchant)}</div>
|
|
90
|
+
</section>
|
|
91
|
+
<section class="document-metadata">${renderMetadata(metadata)}</section>
|
|
92
|
+
${body}
|
|
93
|
+
<footer>${renderMerchantFooter(merchant, includeLegalDetails)}</footer>
|
|
94
|
+
</body>
|
|
95
|
+
</html>`;
|
|
96
|
+
exports.createDocumentLayout = createDocumentLayout;
|
|
97
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGF5b3V0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vc3JjL2RvY3VtZW50cy90ZW1wbGF0ZXMvbGF5b3V0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUVBLDZDQUF5QztBQWV6QyxNQUFNLGlCQUFpQixHQUFHLENBQUMsV0FBbUIsRUFBVSxFQUFFLENBQ3hELElBQUksSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLEVBQUUsRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQ2hELFdBQVcsQ0FBQyxXQUFXLEVBQUUsQ0FDMUIsSUFBSSxXQUFXLENBQUMsV0FBVyxFQUFFLENBQUE7QUFFaEMsTUFBTSxxQkFBcUIsR0FBRyxDQUFDLFFBQTBCLEVBQVUsRUFBRSxDQUNuRTtJQUNFLFFBQVEsQ0FBQyxhQUFhO0lBQ3RCLFFBQVEsQ0FBQyxhQUFhO0lBQ3RCLENBQUMsUUFBUSxDQUFDLFdBQVcsRUFBRSxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQztJQUMvQyxpQkFBaUIsQ0FBQyxRQUFRLENBQUMsWUFBWSxDQUFDO0NBQ3pDO0tBQ0UsTUFBTSxDQUFDLENBQUMsSUFBSSxFQUFrQixFQUFFLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO0tBQy9DLEdBQUcsQ0FBQyx1QkFBVSxDQUFDO0tBQ2YsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFBO0FBRW5CLHdGQUF3RjtBQUN4RixNQUFNLG9CQUFvQixHQUFHLENBQzNCLFFBQTBCLEVBQzFCLG1CQUE0QixFQUNwQixFQUFFO0lBQ1YsSUFBSSxDQUFDLG1CQUFtQixFQUFFLENBQUM7UUFDekIsT0FBTyxJQUFBLHVCQUFVLEVBQUMsUUFBUSxDQUFDLFVBQVUsQ0FBQyxDQUFBO0lBQ3hDLENBQUM7SUFFRCxNQUFNLFFBQVEsR0FBRztRQUNmLFFBQVEsQ0FBQyx1QkFBdUI7WUFDOUIsQ0FBQyxDQUFDLHFCQUFx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
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.renderPackingList = void 0;
|
|
4
|
+
const format_1 = require("./format");
|
|
5
|
+
const html_utils_1 = require("./html-utils");
|
|
6
|
+
const renderBatchAllocations = (line, timeZone) => {
|
|
7
|
+
if (line.batch_allocations.length === 0) {
|
|
8
|
+
return '<span class="muted">-</span>';
|
|
9
|
+
}
|
|
10
|
+
return line.batch_allocations
|
|
11
|
+
.map((allocation) => `<div class="packing-batch">
|
|
12
|
+
<strong>${(0, html_utils_1.escapeHtml)(allocation.lot_number)}</strong>
|
|
13
|
+
<span>MHD: ${(0, format_1.formatDate)(allocation.expiry_date, { timeZone })}</span>
|
|
14
|
+
<span>Menge: ${(0, html_utils_1.escapeHtml)(allocation.quantity)}</span>
|
|
15
|
+
</div>`)
|
|
16
|
+
.join("");
|
|
17
|
+
};
|
|
18
|
+
const renderLines = (input, timeZone) => input.lines
|
|
19
|
+
.map((line) => `<tr>
|
|
20
|
+
<td>
|
|
21
|
+
<strong>${(0, html_utils_1.escapeHtml)(line.title)}</strong>
|
|
22
|
+
${line.sku ? `<div class="sku">SKU: ${(0, html_utils_1.escapeHtml)(line.sku)}</div>` : ""}
|
|
23
|
+
</td>
|
|
24
|
+
<td>${renderBatchAllocations(line, timeZone)}</td>
|
|
25
|
+
<td class="number">${(0, html_utils_1.escapeHtml)(line.quantity)}</td>
|
|
26
|
+
</tr>`)
|
|
27
|
+
.join("");
|
|
28
|
+
const renderPackingList = (input, layout, timeZone) => layout({
|
|
29
|
+
body: `<table>
|
|
30
|
+
<thead><tr><th>Bezeichnung</th><th>Charge</th><th class="number">Benötigte Menge</th></tr></thead>
|
|
31
|
+
<tbody>${renderLines(input, timeZone)}</tbody>
|
|
32
|
+
</table>`,
|
|
33
|
+
documentTitle: "Packliste",
|
|
34
|
+
metadata: [
|
|
35
|
+
{
|
|
36
|
+
label: "Bestellung",
|
|
37
|
+
value: (0, html_utils_1.formatOrderReference)(input.order.display_id),
|
|
38
|
+
},
|
|
39
|
+
{ label: "Fulfillment", value: input.fulfillment.id },
|
|
40
|
+
{
|
|
41
|
+
label: "Erstellungsdatum",
|
|
42
|
+
value: (0, format_1.formatDate)(input.document.generated_at, { timeZone }),
|
|
43
|
+
},
|
|
44
|
+
{ label: "Lagerplatz", value: input.fulfillment.location_name },
|
|
45
|
+
],
|
|
46
|
+
number: input.document.number,
|
|
47
|
+
pageTitle: "Packliste",
|
|
48
|
+
});
|
|
49
|
+
exports.renderPackingList = renderPackingList;
|
|
50
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFja2luZy1saXN0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vc3JjL2RvY3VtZW50cy90ZW1wbGF0ZXMvcGFja2luZy1saXN0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUVBLHFDQUFxQztBQUNyQyw2Q0FBK0Q7QUFHL0QsTUFBTSxzQkFBc0IsR0FBRyxDQUM3QixJQUErQyxFQUMvQyxRQUFnQixFQUNSLEVBQUU7SUFDVixJQUFJLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFLENBQUM7UUFDeEMsT0FBTyw4QkFBOEIsQ0FBQTtJQUN2QyxDQUFDO0lBRUQsT0FBTyxJQUFJLENBQUMsaUJBQWlCO1NBQzFCLEdBQUcsQ0FDRixDQUFDLFVBQVUsRUFBRSxFQUFFLENBQUM7a0JBQ0osSUFBQSx1QkFBVSxFQUFDLFVBQVUsQ0FBQyxVQUFVLENBQUM7cUJBQzlCLElBQUEsbUJBQVUsRUFBQyxVQUFVLENBQUMsV0FBVyxFQUFFLEVBQUUsUUFBUSxFQUFFLENBQUM7dUJBQzlDLElBQUEsdUJBQVUsRUFBQyxVQUFVLENBQUMsUUFBUSxDQUFDO2FBQ3pDLENBQ1I7U0FDQSxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUE7QUFDYixDQUFDLENBQUE7QUFFRCxNQUFNLFdBQVcsR0FBRyxDQUNsQixLQUErQixFQUMvQixRQUFnQixFQUNSLEVBQUUsQ0FDVixLQUFLLENBQUMsS0FBSztLQUNSLEdBQUcsQ0FDRixDQUFDLElBQUksRUFBRSxFQUFFLENBQUM7O29CQUVJLElBQUEsdUJBQVUsRUFBQyxJQUFJLENBQUMsS0FBSyxDQUFDO1lBQzlCLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLHlCQUF5QixJQUFBLHVCQUFVLEVBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLEVBQUU7O2NBRW5FLHNCQUFzQixDQUFDLElBQUksRUFBRSxRQUFRLENBQUM7NkJBQ3ZCLElBQUEsdUJBQVUsRUFBQyxJQUFJLENBQUMsUUFBUSxDQUFDO1lBQzFDLENBQ1A7S0FDQSxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUE7QUFFTixNQUFNLGlCQUFpQixHQUFHLENBQy9CLEtBQStCLEVBQy9CLE1BQXNCLEVBQ3RCLFFBQWdCLEVBQ1IsRUFBRSxDQUNWLE1BQU0sQ0FBQztJQUNMLElBQUksRUFBRTs7ZUFFSyxXQUFXLENBQUMsS0FBSyxFQUFFLFFBQVEsQ0FBQzthQUM5QjtJQUNULGFBQWEsRUFBRSxXQUFXO0lBQzFCLFFBQVEsRUFBRTtRQUNSO1lBQ0UsS0FBSyxFQUFFLFlBQVk7WUFDbkIsS0FBSyxFQUFFLElBQUEsaUNBQW9CLEVBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUM7U0FDcEQ7UUFDRCxFQUFFLEtBQUssRUFBRSxhQUFhLEVBQUUsS0FBSyxFQUFFLEtBQUssQ0FBQyxXQUFXLENBQUMsRUFBRSxFQUFFO1FBQ3JEO1lBQ0UsS0FBSyxFQUFFLGtCQUFrQjtZQUN6QixLQUFLLEVBQUUsSUFBQSxtQkFBVSxFQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsWUFBWSxFQUFFLEVBQUUsUUFBUSxFQUFFLENBQUM7U0FDN0Q7UUFDRCxFQUFFLEtBQUssRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFFLEtBQUssQ0FBQyxXQUFXLENBQUMsYUFBYSxFQUFFO0tBQ2hFO0lBQ0QsTUFBTSxFQUFFLEtBQUssQ0FBQyxRQUFRLENBQUMsTUFBTTtJQUM3QixTQUFTLEVBQUUsV0FBVztDQUN2QixDQUFDLENBQUE7QUF6QlMsUUFBQSxpQkFBaUIscUJBeUIxQiJ9
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWRtaW4tYXBpLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vc3JjL2RvY3VtZW50cy90eXBlcy9hZG1pbi1hcGkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiJ9
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZG9jdW1lbnQtc3VtbWFyeS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9kb2N1bWVudHMvdHlwZXMvZG9jdW1lbnQtc3VtbWFyeS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIn0=
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZG9jdW1lbnRzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vc3JjL2RvY3VtZW50cy90eXBlcy9kb2N1bWVudHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiJ9
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.defineDocumentHtmlFactory = void 0;
|
|
4
|
+
const defineDocumentHtmlFactory = (factory) => factory;
|
|
5
|
+
exports.defineDocumentHtmlFactory = defineDocumentHtmlFactory;
|
|
6
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaHRtbC1mYWN0b3J5LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vc3JjL2RvY3VtZW50cy90eXBlcy9odG1sLWZhY3RvcnkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBVU8sTUFBTSx5QkFBeUIsR0FBRyxDQUN2QyxPQUE0QixFQUNQLEVBQUUsQ0FBQyxPQUFPLENBQUE7QUFGcEIsUUFBQSx5QkFBeUIsNkJBRUwifQ==
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
14
|
+
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
15
|
+
};
|
|
16
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
+
__exportStar(require("./admin-api"), exports);
|
|
18
|
+
__exportStar(require("./documents"), exports);
|
|
19
|
+
__exportStar(require("./document-summary"), exports);
|
|
20
|
+
__exportStar(require("./html-factory"), exports);
|
|
21
|
+
__exportStar(require("./store-api"), exports);
|
|
22
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvZG9jdW1lbnRzL3R5cGVzL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSw4Q0FBMkI7QUFDM0IsOENBQTJCO0FBQzNCLHFEQUFrQztBQUNsQyxpREFBOEI7QUFDOUIsOENBQTJCIn0=
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RvcmUtYXBpLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vc3JjL2RvY3VtZW50cy90eXBlcy9zdG9yZS1hcGkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiJ9
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.resolveDocumentMerchant = void 0;
|
|
4
|
+
const public_1 = require("../../public");
|
|
5
|
+
const utils_1 = require("@medusajs/framework/utils");
|
|
6
|
+
const merchant_1 = require("../../modules/documents/domain/merchant");
|
|
7
|
+
/**
|
|
8
|
+
* The shop's sender facts for one render: shop master data of the base
|
|
9
|
+
* plugin (stored in the Admin) > the plugin's `merchant` option. Fails with
|
|
10
|
+
* `UNEXPECTED_STATE` naming the missing fields, so the document is marked
|
|
11
|
+
* failed and issued again once the data is complete. Read failures propagate.
|
|
12
|
+
*/
|
|
13
|
+
const resolveDocumentMerchant = async (container, fallback) => {
|
|
14
|
+
const { values } = await (0, public_1.getShopMasterData)(container, fallback);
|
|
15
|
+
const resolution = (0, merchant_1.toDocumentMerchant)(values);
|
|
16
|
+
if (!resolution.merchant) {
|
|
17
|
+
throw new utils_1.MedusaError(utils_1.MedusaError.Types.UNEXPECTED_STATE, `Shop-Stammdaten unvollständig: ${resolution.missing.join(", ")}. Bitte unter Einstellungen → Hartl Services Plugins → Shop-Stammdaten ergänzen.`);
|
|
18
|
+
}
|
|
19
|
+
return resolution.merchant;
|
|
20
|
+
};
|
|
21
|
+
exports.resolveDocumentMerchant = resolveDocumentMerchant;
|
|
22
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZG9jdW1lbnQtbWVyY2hhbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvZG9jdW1lbnRzL3V0aWxzL2RvY3VtZW50LW1lcmNoYW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLHlDQUFnRDtBQUVoRCxxREFBdUQ7QUFFdkQsc0VBR2dEO0FBR2hEOzs7OztHQUtHO0FBQ0ksTUFBTSx1QkFBdUIsR0FBRyxLQUFLLEVBQzFDLFNBQTBCLEVBQzFCLFFBQWdDLEVBQ0wsRUFBRTtJQUM3QixNQUFNLEVBQUUsTUFBTSxFQUFFLEdBQUcsTUFBTSxJQUFBLDBCQUFpQixFQUFDLFNBQVMsRUFBRSxRQUFRLENBQUMsQ0FBQTtJQUMvRCxNQUFNLFVBQVUsR0FBRyxJQUFBLDZCQUFrQixFQUFDLE1BQU0sQ0FBQyxDQUFBO0lBQzdDLElBQUksQ0FBQyxVQUFVLENBQUMsUUFBUSxFQUFFLENBQUM7UUFDekIsTUFBTSxJQUFJLG1CQUFXLENBQ25CLG1CQUFXLENBQUMsS0FBSyxDQUFDLGdCQUFnQixFQUNsQyxrQ0FBa0MsVUFBVSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLGtGQUFrRixDQUNsSixDQUFBO0lBQ0gsQ0FBQztJQUNELE9BQU8sVUFBVSxDQUFDLFFBQVEsQ0FBQTtBQUM1QixDQUFDLENBQUE7QUFiWSxRQUFBLHVCQUF1QiwyQkFhbkMifQ==
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.renderHtmlToPdf = void 0;
|
|
4
|
+
const node_child_process_1 = require("node:child_process");
|
|
5
|
+
const promises_1 = require("node:fs/promises");
|
|
6
|
+
const node_os_1 = require("node:os");
|
|
7
|
+
const node_path_1 = require("node:path");
|
|
8
|
+
const node_url_1 = require("node:url");
|
|
9
|
+
const node_util_1 = require("node:util");
|
|
10
|
+
const utils_1 = require("@medusajs/framework/utils");
|
|
11
|
+
const execFile = (0, node_util_1.promisify)(node_child_process_1.execFile);
|
|
12
|
+
/**
|
|
13
|
+
* Fixed internal renderer: projects control only HTML/CSS through the factory.
|
|
14
|
+
* The deployment must provide the configured Chromium executable; no provider
|
|
15
|
+
* or renderer adapter is part of the public plugin surface.
|
|
16
|
+
*/
|
|
17
|
+
const renderHtmlToPdf = async (input) => {
|
|
18
|
+
if (process.getuid?.() === 0) {
|
|
19
|
+
throw new utils_1.MedusaError(utils_1.MedusaError.Types.UNEXPECTED_STATE, "Document PDF rendering must run as a non-root user so Chromium's sandbox remains enabled.");
|
|
20
|
+
}
|
|
21
|
+
const directory = await (0, promises_1.mkdtemp)((0, node_path_1.join)((0, node_os_1.tmpdir)(), "medusa-documents-"));
|
|
22
|
+
const htmlPath = (0, node_path_1.join)(directory, "document.html");
|
|
23
|
+
const pdfPath = (0, node_path_1.join)(directory, "document.pdf");
|
|
24
|
+
const profilePath = (0, node_path_1.join)(directory, "chrome-profile");
|
|
25
|
+
const chromeEnvironment = {
|
|
26
|
+
...process.env,
|
|
27
|
+
DBUS_SESSION_BUS_ADDRESS: `unix:path=${(0, node_path_1.join)(directory, "no-session-bus")}`,
|
|
28
|
+
};
|
|
29
|
+
delete chromeEnvironment.GNOME_KEYRING_CONTROL;
|
|
30
|
+
const chromiumArguments = [
|
|
31
|
+
"--headless=new",
|
|
32
|
+
"--disable-gpu",
|
|
33
|
+
"--no-first-run",
|
|
34
|
+
"--password-store=basic",
|
|
35
|
+
`--user-data-dir=${profilePath}`,
|
|
36
|
+
"--no-pdf-header-footer",
|
|
37
|
+
`--print-to-pdf=${pdfPath}`,
|
|
38
|
+
(0, node_url_1.pathToFileURL)(htmlPath).href,
|
|
39
|
+
];
|
|
40
|
+
try {
|
|
41
|
+
await (0, promises_1.writeFile)(htmlPath, input.html, "utf8");
|
|
42
|
+
await execFile(input.executablePath, chromiumArguments, {
|
|
43
|
+
timeout: 60_000,
|
|
44
|
+
maxBuffer: 1024 * 1024,
|
|
45
|
+
env: chromeEnvironment,
|
|
46
|
+
});
|
|
47
|
+
const pdf = await (0, promises_1.readFile)(pdfPath);
|
|
48
|
+
if (!pdf.length) {
|
|
49
|
+
throw new utils_1.MedusaError(utils_1.MedusaError.Types.UNEXPECTED_STATE, "Chromium created an empty PDF.");
|
|
50
|
+
}
|
|
51
|
+
return pdf;
|
|
52
|
+
}
|
|
53
|
+
catch (error) {
|
|
54
|
+
throw new utils_1.MedusaError(utils_1.MedusaError.Types.UNEXPECTED_STATE, `Could not render document PDF with '${input.executablePath}': ${error instanceof Error ? error.message : String(error)}`);
|
|
55
|
+
}
|
|
56
|
+
finally {
|
|
57
|
+
await (0, promises_1.rm)(directory, { recursive: true, force: true });
|
|
58
|
+
}
|
|
59
|
+
};
|
|
60
|
+
exports.renderHtmlToPdf = renderHtmlToPdf;
|
|
61
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaHRtbC10by1wZGYuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvZG9jdW1lbnRzL3V0aWxzL2h0bWwtdG8tcGRmLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLDJEQUE2RDtBQUM3RCwrQ0FBb0U7QUFDcEUscUNBQWlDO0FBQ2pDLHlDQUFpQztBQUNqQyx1Q0FBeUM7QUFDekMseUNBQXNDO0FBRXRDLHFEQUF3RDtBQUV4RCxNQUFNLFFBQVEsR0FBRyxJQUFBLHFCQUFTLEVBQUMsNkJBQVcsQ0FBQyxDQUFDO0FBRXhDOzs7O0dBSUc7QUFDSSxNQUFNLGVBQWUsR0FBRyxLQUFLLEVBQUUsS0FHckMsRUFBbUIsRUFBRTtJQUNwQixJQUFJLE9BQU8sQ0FBQyxNQUFNLEVBQUUsRUFBRSxLQUFLLENBQUMsRUFBRSxDQUFDO1FBQzdCLE1BQU0sSUFBSSxtQkFBVyxDQUNuQixtQkFBVyxDQUFDLEtBQUssQ0FBQyxnQkFBZ0IsRUFDbEMsMkZBQTJGLENBQzVGLENBQUM7SUFDSixDQUFDO0lBRUQsTUFBTSxTQUFTLEdBQUcsTUFBTSxJQUFBLGtCQUFPLEVBQUMsSUFBQSxnQkFBSSxFQUFDLElBQUEsZ0JBQU0sR0FBRSxFQUFFLG1CQUFtQixDQUFDLENBQUMsQ0FBQztJQUNyRSxNQUFNLFFBQVEsR0FBRyxJQUFBLGdCQUFJLEVBQUMsU0FBUyxFQUFFLGVBQWUsQ0FBQyxDQUFDO0lBQ2xELE1BQU0sT0FBTyxHQUFHLElBQUEsZ0JBQUksRUFBQyxTQUFTLEVBQUUsY0FBYyxDQUFDLENBQUM7SUFDaEQsTUFBTSxXQUFXLEdBQUcsSUFBQSxnQkFBSSxFQUFDLFNBQVMsRUFBRSxnQkFBZ0IsQ0FBQyxDQUFDO0lBQ3RELE1BQU0saUJBQWlCLEdBQXNCO1FBQzNDLEdBQUcsT0FBTyxDQUFDLEdBQUc7UUFDZCx3QkFBd0IsRUFBRSxhQUFhLElBQUEsZ0JBQUksRUFBQyxTQUFTLEVBQUUsZ0JBQWdCLENBQUMsRUFBRTtLQUMzRSxDQUFDO0lBQ0YsT0FBTyxpQkFBaUIsQ0FBQyxxQkFBcUIsQ0FBQztJQUMvQyxNQUFNLGlCQUFpQixHQUFHO1FBQ3hCLGdCQUFnQjtRQUNoQixlQUFlO1FBQ2YsZ0JBQWdCO1FBQ2hCLHdCQUF3QjtRQUN4QixtQkFBbUIsV0FBVyxFQUFFO1FBQ2hDLHdCQUF3QjtRQUN4QixrQkFBa0IsT0FBTyxFQUFFO1FBQzNCLElBQUEsd0JBQWEsRUFBQyxRQUFRLENBQUMsQ0FBQyxJQUFJO0tBQzdCLENBQUM7SUFFRixJQUFJLENBQUM7UUFDSCxNQUFNLElBQUEsb0JBQVMsRUFBQyxRQUFRLEVBQUUsS0FBSyxDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsQ0FBQztRQUM5QyxNQUFNLFFBQVEsQ0FBQyxLQUFLLENBQUMsY0FBYyxFQUFFLGlCQUFpQixFQUFFO1lBQ3RELE9BQU8sRUFBRSxNQUFNO1lBQ2YsU0FBUyxFQUFFLElBQUksR0FBRyxJQUFJO1lBQ3RCLEdBQUcsRUFBRSxpQkFBaUI7U0FDdkIsQ0FBQyxDQUFDO1FBRUgsTUFBTSxHQUFHLEdBQUcsTUFBTSxJQUFBLG1CQUFRLEVBQUMsT0FBTyxDQUFDLENBQUM7UUFDcEMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxNQUFNLEVBQUUsQ0FBQztZQUNoQixNQUFNLElBQUksbUJBQVcsQ0FDbkIsbUJBQVcsQ0FBQyxLQUFLLENBQUMsZ0JBQWdCLEVBQ2xDLGdDQUFnQyxDQUNqQyxDQUFDO1FBQ0osQ0FBQztRQUVELE9BQU8sR0FBRyxDQUFDO0lBQ2IsQ0FBQztJQUFDLE9BQU8sS0FBSyxFQUFFLENBQUM7UUFDZixNQUFNLElBQUksbUJBQVcsQ0FDbkIsbUJBQVcsQ0FBQyxLQUFLLENBQUMsZ0JBQWdCLEVBQ2xDLHVDQUF1QyxLQUFLLENBQUMsY0FBYyxNQUN6RCxLQUFLLFlBQVksS0FBSyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUN2RCxFQUFFLENBQ0gsQ0FBQztJQUNKLENBQUM7WUFBUyxDQUFDO1FBQ1QsTUFBTSxJQUFBLGFBQUUsRUFBQyxTQUFTLEVBQUUsRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO0lBQ3hELENBQUM7QUFDSCxDQUFDLENBQUM7QUExRFcsUUFBQSxlQUFlLG1CQTBEMUIifQ==
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.assertPrivateFileStorage = exports.findPubliclyServedPrivateFileStorage = void 0;
|
|
7
|
+
const node_path_1 = __importDefault(require("node:path"));
|
|
8
|
+
const utils_1 = require("@medusajs/framework/utils");
|
|
9
|
+
const LOCAL_FILE_PROVIDERS = new Set([
|
|
10
|
+
"@medusajs/medusa/file-local",
|
|
11
|
+
"@medusajs/file-local",
|
|
12
|
+
]);
|
|
13
|
+
const isInside = (directory, parent) => {
|
|
14
|
+
const relative = node_path_1.default.relative(parent, directory);
|
|
15
|
+
return (relative === "" ||
|
|
16
|
+
(!relative.startsWith("..") && !node_path_1.default.isAbsolute(relative)));
|
|
17
|
+
};
|
|
18
|
+
/**
|
|
19
|
+
* Medusa serves `<cwd>/static` publicly under `/static`, and its local File
|
|
20
|
+
* provider stores private files there unless `private_upload_dir` points
|
|
21
|
+
* elsewhere. Documents stores invoices as private files, so that combination
|
|
22
|
+
* would publish every PDF under a guessable name. Returns the reason when the
|
|
23
|
+
* configuration does that, otherwise null. A missing File Module counts as
|
|
24
|
+
* Medusa's default: the local provider without options.
|
|
25
|
+
*/
|
|
26
|
+
const findPubliclyServedPrivateFileStorage = (configModule, cwd) => {
|
|
27
|
+
const fileModule = configModule.modules?.[utils_1.Modules.FILE];
|
|
28
|
+
const providers = fileModule === undefined
|
|
29
|
+
? [{ resolve: "@medusajs/medusa/file-local" }]
|
|
30
|
+
: typeof fileModule === "object" && fileModule !== null
|
|
31
|
+
? (fileModule.options
|
|
32
|
+
?.providers ?? [])
|
|
33
|
+
: [];
|
|
34
|
+
const staticDirectory = node_path_1.default.resolve(cwd, "static");
|
|
35
|
+
for (const provider of providers) {
|
|
36
|
+
if (typeof provider.resolve !== "string" ||
|
|
37
|
+
!LOCAL_FILE_PROVIDERS.has(provider.resolve)) {
|
|
38
|
+
continue;
|
|
39
|
+
}
|
|
40
|
+
const configured = provider.options?.private_upload_dir;
|
|
41
|
+
const privateDirectory = typeof configured === "string" && configured.trim()
|
|
42
|
+
? node_path_1.default.resolve(cwd, configured)
|
|
43
|
+
: staticDirectory;
|
|
44
|
+
if (isInside(privateDirectory, staticDirectory)) {
|
|
45
|
+
return `Documents stores invoices as private files, but Medusa's local File provider would write them to ${privateDirectory}, which Medusa serves publicly under /static. Set the provider's private_upload_dir to a directory outside ${staticDirectory}, or use private object storage such as the S3 file storage of @hartl-services/medusa-base.`;
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
return null;
|
|
49
|
+
};
|
|
50
|
+
exports.findPubliclyServedPrivateFileStorage = findPubliclyServedPrivateFileStorage;
|
|
51
|
+
/**
|
|
52
|
+
* Refuses to write a document file while the File Module would serve it
|
|
53
|
+
* publicly. Called right before every document PDF is stored; the module
|
|
54
|
+
* loader only warns, so the base plugin still boots with Medusa's default
|
|
55
|
+
* file storage and documents fail closed at issuance instead.
|
|
56
|
+
*/
|
|
57
|
+
const assertPrivateFileStorage = (container) => {
|
|
58
|
+
const problem = (0, exports.findPubliclyServedPrivateFileStorage)(container.resolve(utils_1.ContainerRegistrationKeys.CONFIG_MODULE), process.cwd());
|
|
59
|
+
if (problem) {
|
|
60
|
+
throw new utils_1.MedusaError(utils_1.MedusaError.Types.NOT_ALLOWED, problem);
|
|
61
|
+
}
|
|
62
|
+
};
|
|
63
|
+
exports.assertPrivateFileStorage = assertPrivateFileStorage;
|
|
64
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJpdmF0ZS1maWxlLXN0b3JhZ2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvZG9jdW1lbnRzL3V0aWxzL3ByaXZhdGUtZmlsZS1zdG9yYWdlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7OztBQUFBLDBEQUE0QjtBQUc1QixxREFJa0M7QUFFbEMsTUFBTSxvQkFBb0IsR0FBRyxJQUFJLEdBQUcsQ0FBQztJQUNuQyw2QkFBNkI7SUFDN0Isc0JBQXNCO0NBQ3ZCLENBQUMsQ0FBQTtBQVdGLE1BQU0sUUFBUSxHQUFHLENBQUMsU0FBaUIsRUFBRSxNQUFjLEVBQVcsRUFBRTtJQUM5RCxNQUFNLFFBQVEsR0FBRyxtQkFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLEVBQUUsU0FBUyxDQUFDLENBQUE7SUFDakQsT0FBTyxDQUNMLFFBQVEsS0FBSyxFQUFFO1FBQ2YsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxtQkFBSSxDQUFDLFVBQVUsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUMzRCxDQUFBO0FBQ0gsQ0FBQyxDQUFBO0FBRUQ7Ozs7Ozs7R0FPRztBQUNJLE1BQU0sb0NBQW9DLEdBQUcsQ0FDbEQsWUFBK0IsRUFDL0IsR0FBVyxFQUNJLEVBQUU7SUFDakIsTUFBTSxVQUFVLEdBQUcsWUFBWSxDQUFDLE9BQU8sRUFBRSxDQUFDLGVBQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQTtJQUN2RCxNQUFNLFNBQVMsR0FDYixVQUFVLEtBQUssU0FBUztRQUN0QixDQUFDLENBQUMsQ0FBQyxFQUFFLE9BQU8sRUFBRSw2QkFBNkIsRUFBRSxDQUFDO1FBQzlDLENBQUMsQ0FBQyxPQUFPLFVBQVUsS0FBSyxRQUFRLElBQUksVUFBVSxLQUFLLElBQUk7WUFDckQsQ0FBQyxDQUFDLENBQUcsVUFBb0QsQ0FBQyxPQUFPO2dCQUM3RCxFQUFFLFNBQWdELElBQUksRUFBRSxDQUFDO1lBQzdELENBQUMsQ0FBQyxFQUFFLENBQUE7SUFFVixNQUFNLGVBQWUsR0FBRyxtQkFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLEVBQUUsUUFBUSxDQUFDLENBQUE7SUFDbkQsS0FBSyxNQUFNLFFBQVEsSUFBSSxTQUFTLEVBQUUsQ0FBQztRQUNqQyxJQUNFLE9BQU8sUUFBUSxDQUFDLE9BQU8sS0FBSyxRQUFRO1lBQ3BDLENBQUMsb0JBQW9CLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsRUFDM0MsQ0FBQztZQUNELFNBQVE7UUFDVixDQUFDO1FBRUQsTUFBTSxVQUFVLEdBQUcsUUFBUSxDQUFDLE9BQU8sRUFBRSxrQkFBa0IsQ0FBQTtRQUN2RCxNQUFNLGdCQUFnQixHQUNwQixPQUFPLFVBQVUsS0FBSyxRQUFRLElBQUksVUFBVSxDQUFDLElBQUksRUFBRTtZQUNqRCxDQUFDLENBQUMsbUJBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxFQUFFLFVBQVUsQ0FBQztZQUMvQixDQUFDLENBQUMsZUFBZSxDQUFBO1FBQ3JCLElBQUksUUFBUSxDQUFDLGdCQUFnQixFQUFFLGVBQWUsQ0FBQyxFQUFFLENBQUM7WUFDaEQsT0FBTyxvR0FBb0csZ0JBQWdCLDhHQUE4RyxlQUFlLDZGQUE2RixDQUFBO1FBQ3ZWLENBQUM7SUFDSCxDQUFDO0lBRUQsT0FBTyxJQUFJLENBQUE7QUFDYixDQUFDLENBQUE7QUFqQ1ksUUFBQSxvQ0FBb0Msd0NBaUNoRDtBQUVEOzs7OztHQUtHO0FBQ0ksTUFBTSx3QkFBd0IsR0FBRyxDQUFDLFNBQTBCLEVBQVEsRUFBRTtJQUMzRSxNQUFNLE9BQU8sR0FBRyxJQUFBLDRDQUFvQyxFQUNsRCxTQUFTLENBQUMsT0FBTyxDQUFDLGlDQUF5QixDQUFDLGFBQWEsQ0FBQyxFQUMxRCxPQUFPLENBQUMsR0FBRyxFQUFFLENBQ2QsQ0FBQTtJQUNELElBQUksT0FBTyxFQUFFLENBQUM7UUFDWixNQUFNLElBQUksbUJBQVcsQ0FBQyxtQkFBVyxDQUFDLEtBQUssQ0FBQyxXQUFXLEVBQUUsT0FBTyxDQUFDLENBQUE7SUFDL0QsQ0FBQztBQUNILENBQUMsQ0FBQTtBQVJZLFFBQUEsd0JBQXdCLDRCQVFwQyJ9
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.resolveDocumentsService = void 0;
|
|
4
|
+
const documents_1 = require("../../modules/documents");
|
|
5
|
+
const resolveDocumentsService = (container) => container.resolve(documents_1.DOCUMENTS_MODULE);
|
|
6
|
+
exports.resolveDocumentsService = resolveDocumentsService;
|
|
7
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVzb2x2ZS1zZXJ2aWNlcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9kb2N1bWVudHMvdXRpbHMvcmVzb2x2ZS1zZXJ2aWNlcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFFQSx1REFBMEQ7QUFHbkQsTUFBTSx1QkFBdUIsR0FBRyxDQUNyQyxTQUEwQixFQUNGLEVBQUUsQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLDRCQUFnQixDQUFDLENBQUE7QUFGbkQsUUFBQSx1QkFBdUIsMkJBRTRCIn0=
|