@teleporthq/teleport-plugin-next-workflows 0.43.65 → 0.43.67
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/__tests__/_helpers/bind-workflow-utils.ts +30 -0
- package/__tests__/_helpers/run-generated-middleware.ts +11 -2
- package/__tests__/admin-form-row-hydration.test.ts +55 -0
- package/__tests__/cart-clear-db-mirror.test.ts +12 -0
- package/__tests__/cart-get-total-regional-pricing.test.ts +166 -0
- package/__tests__/client-config-redaction.test.ts +53 -0
- package/__tests__/continue-on-error.test.ts +119 -0
- package/__tests__/email-locale-module.test.ts +323 -0
- package/__tests__/email-locale-senders.test.ts +268 -0
- package/__tests__/invoice-delivery-fee.test.ts +104 -0
- package/__tests__/invoice-regional-tax.test.ts +126 -0
- package/__tests__/locale-aware-redirects.test.ts +355 -0
- package/__tests__/navigation-go-to-page.test.ts +43 -0
- package/__tests__/node-handler-file-inline-map.test.ts +29 -3
- package/__tests__/payment-redirect-and-order-notification.test.ts +6 -0
- package/__tests__/paypal-webhook-order-notification.test.ts +41 -0
- package/__tests__/resolve-config-localized-templates.test.ts +262 -0
- package/__tests__/sent-email-log-module.test.ts +381 -0
- package/__tests__/sent-email-log-wiring.test.ts +267 -0
- package/dist/cjs/account-delete-route-generator.d.ts +20 -0
- package/dist/cjs/account-delete-route-generator.d.ts.map +1 -1
- package/dist/cjs/account-delete-route-generator.js +29 -26
- package/dist/cjs/account-delete-route-generator.js.map +1 -1
- package/dist/cjs/api-route-generator.d.ts.map +1 -1
- package/dist/cjs/api-route-generator.js +57 -11
- package/dist/cjs/api-route-generator.js.map +1 -1
- package/dist/cjs/auth-generator.d.ts +2 -1
- package/dist/cjs/auth-generator.d.ts.map +1 -1
- package/dist/cjs/auth-generator.js +55 -18
- package/dist/cjs/auth-generator.js.map +1 -1
- package/dist/cjs/data-api-route-generator.d.ts.map +1 -1
- package/dist/cjs/data-api-route-generator.js +19 -0
- package/dist/cjs/data-api-route-generator.js.map +1 -1
- package/dist/cjs/email-locale/email-locale-code.d.ts +25 -0
- package/dist/cjs/email-locale/email-locale-code.d.ts.map +1 -0
- package/dist/cjs/email-locale/email-locale-code.js +228 -0
- package/dist/cjs/email-locale/email-locale-code.js.map +1 -0
- package/dist/cjs/email-locale/email-locale-scope.d.ts +46 -0
- package/dist/cjs/email-locale/email-locale-scope.d.ts.map +1 -0
- package/dist/cjs/email-locale/email-locale-scope.js +51 -0
- package/dist/cjs/email-locale/email-locale-scope.js.map +1 -0
- package/dist/cjs/email-locale/index.d.ts +11 -0
- package/dist/cjs/email-locale/index.d.ts.map +1 -0
- package/dist/cjs/email-locale/index.js +40 -0
- package/dist/cjs/email-locale/index.js.map +1 -0
- package/dist/cjs/executor-generator.d.ts +11 -1
- package/dist/cjs/executor-generator.d.ts.map +1 -1
- package/dist/cjs/executor-generator.js +49 -7
- package/dist/cjs/executor-generator.js.map +1 -1
- package/dist/cjs/index.d.ts +2 -0
- package/dist/cjs/index.d.ts.map +1 -1
- package/dist/cjs/index.js +9 -1
- package/dist/cjs/index.js.map +1 -1
- package/dist/cjs/invoice/api-routes-code.d.ts.map +1 -1
- package/dist/cjs/invoice/api-routes-code.js +55 -6
- package/dist/cjs/invoice/api-routes-code.js.map +1 -1
- package/dist/cjs/invoice/email-sender-code.d.ts.map +1 -1
- package/dist/cjs/invoice/email-sender-code.js +72 -31
- package/dist/cjs/invoice/email-sender-code.js.map +1 -1
- package/dist/cjs/invoice/index.d.ts +1 -4
- package/dist/cjs/invoice/index.d.ts.map +1 -1
- package/dist/cjs/invoice/index.js +8 -19
- package/dist/cjs/invoice/index.js.map +1 -1
- package/dist/cjs/invoice/invoice-html-code.d.ts.map +1 -1
- package/dist/cjs/invoice/invoice-html-code.js +31 -8
- package/dist/cjs/invoice/invoice-html-code.js.map +1 -1
- package/dist/cjs/invoice/regional-invoice-tax-code.d.ts +25 -0
- package/dist/cjs/invoice/regional-invoice-tax-code.d.ts.map +1 -0
- package/dist/cjs/invoice/regional-invoice-tax-code.js +116 -0
- package/dist/cjs/invoice/regional-invoice-tax-code.js.map +1 -0
- package/dist/cjs/invoice/resolve-data-source.d.ts +6 -0
- package/dist/cjs/invoice/resolve-data-source.d.ts.map +1 -0
- package/dist/cjs/invoice/resolve-data-source.js +23 -0
- package/dist/cjs/invoice/resolve-data-source.js.map +1 -0
- package/dist/cjs/nodes/account/account-delete-current.d.ts.map +1 -1
- package/dist/cjs/nodes/account/account-delete-current.js +10 -3
- package/dist/cjs/nodes/account/account-delete-current.js.map +1 -1
- package/dist/cjs/nodes/account/account-login.d.ts.map +1 -1
- package/dist/cjs/nodes/account/account-login.js +3 -1
- package/dist/cjs/nodes/account/account-login.js.map +1 -1
- package/dist/cjs/nodes/account/account-logout.d.ts.map +1 -1
- package/dist/cjs/nodes/account/account-logout.js +4 -2
- package/dist/cjs/nodes/account/account-logout.js.map +1 -1
- package/dist/cjs/nodes/account/account-signup.d.ts.map +1 -1
- package/dist/cjs/nodes/account/account-signup.js +12 -2
- package/dist/cjs/nodes/account/account-signup.js.map +1 -1
- package/dist/cjs/nodes/account/account-social-login.d.ts.map +1 -1
- package/dist/cjs/nodes/account/account-social-login.js +4 -2
- package/dist/cjs/nodes/account/account-social-login.js.map +1 -1
- package/dist/cjs/nodes/cart/cart-clear.d.ts.map +1 -1
- package/dist/cjs/nodes/cart/cart-clear.js +6 -0
- package/dist/cjs/nodes/cart/cart-clear.js.map +1 -1
- package/dist/cjs/nodes/cart/cart-get-total.d.ts.map +1 -1
- package/dist/cjs/nodes/cart/cart-get-total.js +81 -5
- package/dist/cjs/nodes/cart/cart-get-total.js.map +1 -1
- package/dist/cjs/nodes/data/data-create-item.d.ts.map +1 -1
- package/dist/cjs/nodes/data/data-create-item.js +16 -0
- package/dist/cjs/nodes/data/data-create-item.js.map +1 -1
- package/dist/cjs/nodes/ecommerce/ecommerce-generate-invoice.d.ts.map +1 -1
- package/dist/cjs/nodes/ecommerce/ecommerce-generate-invoice.js +6 -0
- package/dist/cjs/nodes/ecommerce/ecommerce-generate-invoice.js.map +1 -1
- package/dist/cjs/nodes/navigation/navigation-go-to-page.d.ts.map +1 -1
- package/dist/cjs/nodes/navigation/navigation-go-to-page.js +4 -1
- package/dist/cjs/nodes/navigation/navigation-go-to-page.js.map +1 -1
- package/dist/cjs/nodes/navigation/navigation-navigate-to-url.d.ts.map +1 -1
- package/dist/cjs/nodes/navigation/navigation-navigate-to-url.js +5 -2
- package/dist/cjs/nodes/navigation/navigation-navigate-to-url.js.map +1 -1
- package/dist/cjs/nodes/payment/payment-charge-user.d.ts.map +1 -1
- package/dist/cjs/nodes/payment/payment-charge-user.js +7 -2
- package/dist/cjs/nodes/payment/payment-charge-user.js.map +1 -1
- package/dist/cjs/segment-splitter.d.ts +1 -1
- package/dist/cjs/segment-splitter.d.ts.map +1 -1
- package/dist/cjs/segment-splitter.js +29 -2
- package/dist/cjs/segment-splitter.js.map +1 -1
- package/dist/cjs/sent-email-log/index.d.ts +16 -0
- package/dist/cjs/sent-email-log/index.d.ts.map +1 -0
- package/dist/cjs/sent-email-log/index.js +53 -0
- package/dist/cjs/sent-email-log/index.js.map +1 -0
- package/dist/cjs/sent-email-log/sent-email-log-code.d.ts +4 -0
- package/dist/cjs/sent-email-log/sent-email-log-code.d.ts.map +1 -0
- package/dist/cjs/sent-email-log/sent-email-log-code.js +415 -0
- package/dist/cjs/sent-email-log/sent-email-log-code.js.map +1 -0
- package/dist/cjs/sent-email-log/sent-email-log-scope.d.ts +21 -0
- package/dist/cjs/sent-email-log/sent-email-log-scope.d.ts.map +1 -0
- package/dist/cjs/sent-email-log/sent-email-log-scope.js +36 -0
- package/dist/cjs/sent-email-log/sent-email-log-scope.js.map +1 -0
- package/dist/cjs/transactional-email-code.d.ts +39 -1
- package/dist/cjs/transactional-email-code.d.ts.map +1 -1
- package/dist/cjs/transactional-email-code.js +86 -12
- package/dist/cjs/transactional-email-code.js.map +1 -1
- package/dist/cjs/tsconfig.tsbuildinfo +1 -1
- package/dist/cjs/webhook-generator.d.ts.map +1 -1
- package/dist/cjs/webhook-generator.js +9 -2
- package/dist/cjs/webhook-generator.js.map +1 -1
- package/dist/cjs/workflow-component-plugin.js +4 -3
- package/dist/cjs/workflow-component-plugin.js.map +1 -1
- package/dist/cjs/workflow-project-plugin.d.ts.map +1 -1
- package/dist/cjs/workflow-project-plugin.js +31 -3
- package/dist/cjs/workflow-project-plugin.js.map +1 -1
- package/dist/cjs/workflow-utils-alias.d.ts +21 -0
- package/dist/cjs/workflow-utils-alias.d.ts.map +1 -0
- package/dist/cjs/workflow-utils-alias.js +27 -0
- package/dist/cjs/workflow-utils-alias.js.map +1 -0
- package/dist/esm/account-delete-route-generator.d.ts +20 -0
- package/dist/esm/account-delete-route-generator.d.ts.map +1 -1
- package/dist/esm/account-delete-route-generator.js +30 -27
- package/dist/esm/account-delete-route-generator.js.map +1 -1
- package/dist/esm/api-route-generator.d.ts.map +1 -1
- package/dist/esm/api-route-generator.js +57 -11
- package/dist/esm/api-route-generator.js.map +1 -1
- package/dist/esm/auth-generator.d.ts +2 -1
- package/dist/esm/auth-generator.d.ts.map +1 -1
- package/dist/esm/auth-generator.js +56 -19
- package/dist/esm/auth-generator.js.map +1 -1
- package/dist/esm/data-api-route-generator.d.ts.map +1 -1
- package/dist/esm/data-api-route-generator.js +19 -0
- package/dist/esm/data-api-route-generator.js.map +1 -1
- package/dist/esm/email-locale/email-locale-code.d.ts +25 -0
- package/dist/esm/email-locale/email-locale-code.d.ts.map +1 -0
- package/dist/esm/email-locale/email-locale-code.js +222 -0
- package/dist/esm/email-locale/email-locale-code.js.map +1 -0
- package/dist/esm/email-locale/email-locale-scope.d.ts +46 -0
- package/dist/esm/email-locale/email-locale-scope.d.ts.map +1 -0
- package/dist/esm/email-locale/email-locale-scope.js +47 -0
- package/dist/esm/email-locale/email-locale-scope.js.map +1 -0
- package/dist/esm/email-locale/index.d.ts +11 -0
- package/dist/esm/email-locale/index.d.ts.map +1 -0
- package/dist/esm/email-locale/index.js +28 -0
- package/dist/esm/email-locale/index.js.map +1 -0
- package/dist/esm/executor-generator.d.ts +11 -1
- package/dist/esm/executor-generator.d.ts.map +1 -1
- package/dist/esm/executor-generator.js +49 -7
- package/dist/esm/executor-generator.js.map +1 -1
- package/dist/esm/index.d.ts +2 -0
- package/dist/esm/index.d.ts.map +1 -1
- package/dist/esm/index.js +2 -0
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/invoice/api-routes-code.d.ts.map +1 -1
- package/dist/esm/invoice/api-routes-code.js +55 -6
- package/dist/esm/invoice/api-routes-code.js.map +1 -1
- package/dist/esm/invoice/email-sender-code.d.ts.map +1 -1
- package/dist/esm/invoice/email-sender-code.js +72 -31
- package/dist/esm/invoice/email-sender-code.js.map +1 -1
- package/dist/esm/invoice/index.d.ts +1 -4
- package/dist/esm/invoice/index.d.ts.map +1 -1
- package/dist/esm/invoice/index.js +7 -18
- package/dist/esm/invoice/index.js.map +1 -1
- package/dist/esm/invoice/invoice-html-code.d.ts.map +1 -1
- package/dist/esm/invoice/invoice-html-code.js +31 -8
- package/dist/esm/invoice/invoice-html-code.js.map +1 -1
- package/dist/esm/invoice/regional-invoice-tax-code.d.ts +25 -0
- package/dist/esm/invoice/regional-invoice-tax-code.d.ts.map +1 -0
- package/dist/esm/invoice/regional-invoice-tax-code.js +113 -0
- package/dist/esm/invoice/regional-invoice-tax-code.js.map +1 -0
- package/dist/esm/invoice/resolve-data-source.d.ts +6 -0
- package/dist/esm/invoice/resolve-data-source.d.ts.map +1 -0
- package/dist/esm/invoice/resolve-data-source.js +19 -0
- package/dist/esm/invoice/resolve-data-source.js.map +1 -0
- package/dist/esm/nodes/account/account-delete-current.d.ts.map +1 -1
- package/dist/esm/nodes/account/account-delete-current.js +10 -3
- package/dist/esm/nodes/account/account-delete-current.js.map +1 -1
- package/dist/esm/nodes/account/account-login.d.ts.map +1 -1
- package/dist/esm/nodes/account/account-login.js +3 -1
- package/dist/esm/nodes/account/account-login.js.map +1 -1
- package/dist/esm/nodes/account/account-logout.d.ts.map +1 -1
- package/dist/esm/nodes/account/account-logout.js +4 -2
- package/dist/esm/nodes/account/account-logout.js.map +1 -1
- package/dist/esm/nodes/account/account-signup.d.ts.map +1 -1
- package/dist/esm/nodes/account/account-signup.js +12 -2
- package/dist/esm/nodes/account/account-signup.js.map +1 -1
- package/dist/esm/nodes/account/account-social-login.d.ts.map +1 -1
- package/dist/esm/nodes/account/account-social-login.js +4 -2
- package/dist/esm/nodes/account/account-social-login.js.map +1 -1
- package/dist/esm/nodes/cart/cart-clear.d.ts.map +1 -1
- package/dist/esm/nodes/cart/cart-clear.js +6 -0
- package/dist/esm/nodes/cart/cart-clear.js.map +1 -1
- package/dist/esm/nodes/cart/cart-get-total.d.ts.map +1 -1
- package/dist/esm/nodes/cart/cart-get-total.js +81 -5
- package/dist/esm/nodes/cart/cart-get-total.js.map +1 -1
- package/dist/esm/nodes/data/data-create-item.d.ts.map +1 -1
- package/dist/esm/nodes/data/data-create-item.js +16 -0
- package/dist/esm/nodes/data/data-create-item.js.map +1 -1
- package/dist/esm/nodes/ecommerce/ecommerce-generate-invoice.d.ts.map +1 -1
- package/dist/esm/nodes/ecommerce/ecommerce-generate-invoice.js +6 -0
- package/dist/esm/nodes/ecommerce/ecommerce-generate-invoice.js.map +1 -1
- package/dist/esm/nodes/navigation/navigation-go-to-page.d.ts.map +1 -1
- package/dist/esm/nodes/navigation/navigation-go-to-page.js +4 -1
- package/dist/esm/nodes/navigation/navigation-go-to-page.js.map +1 -1
- package/dist/esm/nodes/navigation/navigation-navigate-to-url.d.ts.map +1 -1
- package/dist/esm/nodes/navigation/navigation-navigate-to-url.js +5 -2
- package/dist/esm/nodes/navigation/navigation-navigate-to-url.js.map +1 -1
- package/dist/esm/nodes/payment/payment-charge-user.d.ts.map +1 -1
- package/dist/esm/nodes/payment/payment-charge-user.js +7 -2
- package/dist/esm/nodes/payment/payment-charge-user.js.map +1 -1
- package/dist/esm/segment-splitter.d.ts +1 -1
- package/dist/esm/segment-splitter.d.ts.map +1 -1
- package/dist/esm/segment-splitter.js +29 -2
- package/dist/esm/segment-splitter.js.map +1 -1
- package/dist/esm/sent-email-log/index.d.ts +16 -0
- package/dist/esm/sent-email-log/index.d.ts.map +1 -0
- package/dist/esm/sent-email-log/index.js +45 -0
- package/dist/esm/sent-email-log/index.js.map +1 -0
- package/dist/esm/sent-email-log/sent-email-log-code.d.ts +4 -0
- package/dist/esm/sent-email-log/sent-email-log-code.d.ts.map +1 -0
- package/dist/esm/sent-email-log/sent-email-log-code.js +411 -0
- package/dist/esm/sent-email-log/sent-email-log-code.js.map +1 -0
- package/dist/esm/sent-email-log/sent-email-log-scope.d.ts +21 -0
- package/dist/esm/sent-email-log/sent-email-log-scope.d.ts.map +1 -0
- package/dist/esm/sent-email-log/sent-email-log-scope.js +31 -0
- package/dist/esm/sent-email-log/sent-email-log-scope.js.map +1 -0
- package/dist/esm/transactional-email-code.d.ts +39 -1
- package/dist/esm/transactional-email-code.d.ts.map +1 -1
- package/dist/esm/transactional-email-code.js +81 -10
- package/dist/esm/transactional-email-code.js.map +1 -1
- package/dist/esm/tsconfig.tsbuildinfo +1 -1
- package/dist/esm/webhook-generator.d.ts.map +1 -1
- package/dist/esm/webhook-generator.js +9 -2
- package/dist/esm/webhook-generator.js.map +1 -1
- package/dist/esm/workflow-component-plugin.js +4 -3
- package/dist/esm/workflow-component-plugin.js.map +1 -1
- package/dist/esm/workflow-project-plugin.d.ts.map +1 -1
- package/dist/esm/workflow-project-plugin.js +32 -4
- package/dist/esm/workflow-project-plugin.js.map +1 -1
- package/dist/esm/workflow-utils-alias.d.ts +21 -0
- package/dist/esm/workflow-utils-alias.d.ts.map +1 -0
- package/dist/esm/workflow-utils-alias.js +21 -0
- package/dist/esm/workflow-utils-alias.js.map +1 -0
- package/package.json +4 -4
- package/src/account-delete-route-generator.ts +36 -7
- package/src/api-route-generator.ts +64 -11
- package/src/auth-generator.ts +63 -18
- package/src/data-api-route-generator.ts +19 -0
- package/src/email-locale/email-locale-code.ts +239 -0
- package/src/email-locale/email-locale-scope.ts +65 -0
- package/src/email-locale/index.ts +46 -0
- package/src/executor-generator.ts +65 -7
- package/src/index.ts +8 -0
- package/src/invoice/api-routes-code.ts +65 -6
- package/src/invoice/email-sender-code.ts +72 -31
- package/src/invoice/index.ts +7 -23
- package/src/invoice/invoice-html-code.ts +31 -8
- package/src/invoice/regional-invoice-tax-code.ts +112 -0
- package/src/invoice/resolve-data-source.ts +25 -0
- package/src/nodes/account/account-delete-current.ts +10 -3
- package/src/nodes/account/account-login.ts +3 -1
- package/src/nodes/account/account-logout.ts +4 -2
- package/src/nodes/account/account-signup.ts +12 -2
- package/src/nodes/account/account-social-login.ts +7 -2
- package/src/nodes/cart/cart-clear.ts +6 -0
- package/src/nodes/cart/cart-get-total.ts +94 -5
- package/src/nodes/data/data-create-item.ts +16 -0
- package/src/nodes/ecommerce/ecommerce-generate-invoice.ts +6 -0
- package/src/nodes/navigation/navigation-go-to-page.ts +5 -1
- package/src/nodes/navigation/navigation-navigate-to-url.ts +6 -2
- package/src/nodes/payment/payment-charge-user.ts +13 -2
- package/src/nodes/workflow-utils-global.d.ts +12 -0
- package/src/segment-splitter.ts +33 -2
- package/src/sent-email-log/index.ts +57 -0
- package/src/sent-email-log/sent-email-log-code.ts +419 -0
- package/src/sent-email-log/sent-email-log-scope.ts +36 -0
- package/src/transactional-email-code.ts +112 -4
- package/src/webhook-generator.ts +11 -2
- package/src/workflow-component-plugin.ts +4 -3
- package/src/workflow-project-plugin.ts +36 -4
- package/src/workflow-utils-alias.ts +26 -0
|
@@ -7,15 +7,28 @@ export const generateEmailSenderCode = (emailDelivery) => {
|
|
|
7
7
|
const fromName = emailDelivery.fromName || '';
|
|
8
8
|
const subjectTemplate = emailDelivery.subject || 'Invoice {{invoiceNumber}}';
|
|
9
9
|
const bodyTemplate = emailDelivery.body || '<p>Please find your invoice attached.</p>';
|
|
10
|
+
const localizedTemplates = emailDelivery.localizedTemplates || {};
|
|
10
11
|
return `/**
|
|
11
12
|
* Invoice Email Sender
|
|
12
13
|
* Provider: ${emailDelivery.provider}
|
|
14
|
+
*
|
|
15
|
+
* \`sendInvoiceEmail\` is the public entry: it builds the message once, hands
|
|
16
|
+
* it to the provider function and records the attempt in the sent-email
|
|
17
|
+
* ledger. The provider function never builds the message itself, so the row
|
|
18
|
+
* carries exactly the subject and body that went out.
|
|
13
19
|
*/
|
|
14
20
|
|
|
15
21
|
var pdfGenerator = require('./pdf-generator');
|
|
22
|
+
var sentEmailLog = require('../email/sent-email-log');
|
|
23
|
+
var emailLocale = require('../email/email-locale');
|
|
16
24
|
var replacePlaceholders = pdfGenerator.replacePlaceholders;
|
|
17
25
|
|
|
18
26
|
var SECRET_KEYS = ${secretKeysJson};
|
|
27
|
+
var SUBJECT_TEMPLATE = ${JSON.stringify(subjectTemplate)};
|
|
28
|
+
var BODY_TEMPLATE = ${JSON.stringify(bodyTemplate)};
|
|
29
|
+
// Per-language copies of the subject/body (main language excluded), chosen by
|
|
30
|
+
// the locale the generate route resolved for the invoice (the order's).
|
|
31
|
+
var LOCALIZED_TEMPLATES = ${JSON.stringify(localizedTemplates)};
|
|
19
32
|
|
|
20
33
|
function resolveSecretKey(keyName) {
|
|
21
34
|
var envName = SECRET_KEYS[keyName];
|
|
@@ -26,16 +39,62 @@ function resolveSecretKey(keyName) {
|
|
|
26
39
|
|
|
27
40
|
function buildEmailData(invoiceData) {
|
|
28
41
|
var data = pdfGenerator.buildDataContext(invoiceData);
|
|
42
|
+
var copy = emailLocale.pickLocalizedTemplate(
|
|
43
|
+
{ subject: SUBJECT_TEMPLATE, body: BODY_TEMPLATE },
|
|
44
|
+
LOCALIZED_TEMPLATES,
|
|
45
|
+
invoiceData.locale
|
|
46
|
+
);
|
|
29
47
|
return {
|
|
30
|
-
subject: replacePlaceholders(
|
|
31
|
-
body: replacePlaceholders(
|
|
48
|
+
subject: replacePlaceholders(copy.subject, data),
|
|
49
|
+
body: replacePlaceholders(copy.body, data),
|
|
32
50
|
to: invoiceData.customerEmail || '',
|
|
33
51
|
from: ${JSON.stringify(fromName ? `${fromName} <${fromEmail}>` : fromEmail)},
|
|
52
|
+
templateData: data,
|
|
34
53
|
};
|
|
35
54
|
}
|
|
36
55
|
|
|
56
|
+
function attachmentName(invoiceData) {
|
|
57
|
+
return (invoiceData.invoiceNumber || 'invoice') + '.pdf';
|
|
58
|
+
}
|
|
59
|
+
|
|
37
60
|
${generateProviderSendFunction(emailDelivery.provider)}
|
|
38
61
|
|
|
62
|
+
async function sendInvoiceEmail(invoiceData, pdfBuffer) {
|
|
63
|
+
var emailData = buildEmailData(invoiceData);
|
|
64
|
+
if (!emailData.to) return { success: false, error: 'No customer email provided' };
|
|
65
|
+
var result;
|
|
66
|
+
try {
|
|
67
|
+
result = await sendInvoiceEmailWithProvider(emailData, invoiceData, pdfBuffer);
|
|
68
|
+
} catch (err) {
|
|
69
|
+
result = { success: false, error: err && err.message ? err.message : String(err) };
|
|
70
|
+
}
|
|
71
|
+
sentEmailLog.recordSentEmail({
|
|
72
|
+
emailType: 'invoice-email',
|
|
73
|
+
audience: 'customer',
|
|
74
|
+
to: emailData.to,
|
|
75
|
+
from: emailData.from,
|
|
76
|
+
subject: emailData.subject,
|
|
77
|
+
html: emailData.body,
|
|
78
|
+
payload: emailData.templateData,
|
|
79
|
+
attachments: [{
|
|
80
|
+
filename: attachmentName(invoiceData),
|
|
81
|
+
contentType: 'application/pdf',
|
|
82
|
+
sizeBytes: pdfBuffer && pdfBuffer.length ? pdfBuffer.length : null,
|
|
83
|
+
url: invoiceData.pdfUrl || null,
|
|
84
|
+
}],
|
|
85
|
+
provider: ${JSON.stringify(emailDelivery.provider)},
|
|
86
|
+
providerMessageId: result && result.messageId,
|
|
87
|
+
status: result && result.success ? 'sent' : 'failed',
|
|
88
|
+
error: result && !result.success ? result.error : null,
|
|
89
|
+
source: 'invoice',
|
|
90
|
+
sourceRef: 'api/invoices/generate',
|
|
91
|
+
orderId: invoiceData.orderId,
|
|
92
|
+
referenceType: 'invoice',
|
|
93
|
+
referenceId: invoiceData.id,
|
|
94
|
+
});
|
|
95
|
+
return result;
|
|
96
|
+
}
|
|
97
|
+
|
|
39
98
|
module.exports = { sendInvoiceEmail };
|
|
40
99
|
`;
|
|
41
100
|
};
|
|
@@ -43,22 +102,19 @@ function generateProviderSendFunction(provider) {
|
|
|
43
102
|
switch (provider) {
|
|
44
103
|
case 'resend':
|
|
45
104
|
return `
|
|
46
|
-
async function
|
|
105
|
+
async function sendInvoiceEmailWithProvider(emailData, invoiceData, pdfBuffer) {
|
|
47
106
|
try {
|
|
48
107
|
var Resend = require('resend').Resend;
|
|
49
108
|
var apiKey = resolveSecretKey('apiKey');
|
|
50
109
|
if (!apiKey) return { success: false, error: 'Resend API key not configured' };
|
|
51
110
|
var resend = new Resend(apiKey);
|
|
52
|
-
var emailData = buildEmailData(invoiceData);
|
|
53
|
-
if (!emailData.to) return { success: false, error: 'No customer email provided' };
|
|
54
|
-
|
|
55
111
|
var payload = {
|
|
56
112
|
from: emailData.from,
|
|
57
113
|
to: [emailData.to],
|
|
58
114
|
subject: emailData.subject,
|
|
59
115
|
html: emailData.body,
|
|
60
116
|
attachments: [{
|
|
61
|
-
filename: (invoiceData
|
|
117
|
+
filename: attachmentName(invoiceData),
|
|
62
118
|
content: pdfBuffer.toString('base64'),
|
|
63
119
|
}],
|
|
64
120
|
};
|
|
@@ -71,15 +127,12 @@ async function sendInvoiceEmail(invoiceData, pdfBuffer) {
|
|
|
71
127
|
}`;
|
|
72
128
|
case 'sendgrid':
|
|
73
129
|
return `
|
|
74
|
-
async function
|
|
130
|
+
async function sendInvoiceEmailWithProvider(emailData, invoiceData, pdfBuffer) {
|
|
75
131
|
try {
|
|
76
132
|
var sgMail = require('@sendgrid/mail');
|
|
77
133
|
var apiKey = resolveSecretKey('apiKey');
|
|
78
134
|
if (!apiKey) return { success: false, error: 'SendGrid API key not configured' };
|
|
79
135
|
sgMail.setApiKey(apiKey);
|
|
80
|
-
var emailData = buildEmailData(invoiceData);
|
|
81
|
-
if (!emailData.to) return { success: false, error: 'No customer email provided' };
|
|
82
|
-
|
|
83
136
|
var msg = {
|
|
84
137
|
to: emailData.to,
|
|
85
138
|
from: emailData.from,
|
|
@@ -87,7 +140,7 @@ async function sendInvoiceEmail(invoiceData, pdfBuffer) {
|
|
|
87
140
|
html: emailData.body,
|
|
88
141
|
attachments: [{
|
|
89
142
|
content: pdfBuffer.toString('base64'),
|
|
90
|
-
filename: (invoiceData
|
|
143
|
+
filename: attachmentName(invoiceData),
|
|
91
144
|
type: 'application/pdf',
|
|
92
145
|
disposition: 'attachment',
|
|
93
146
|
}],
|
|
@@ -100,7 +153,7 @@ async function sendInvoiceEmail(invoiceData, pdfBuffer) {
|
|
|
100
153
|
}`;
|
|
101
154
|
case 'mailgun':
|
|
102
155
|
return `
|
|
103
|
-
async function
|
|
156
|
+
async function sendInvoiceEmailWithProvider(emailData, invoiceData, pdfBuffer) {
|
|
104
157
|
try {
|
|
105
158
|
var Mailgun = require('mailgun.js');
|
|
106
159
|
var formData = require('form-data');
|
|
@@ -111,9 +164,6 @@ async function sendInvoiceEmail(invoiceData, pdfBuffer) {
|
|
|
111
164
|
|
|
112
165
|
var mailgun = new Mailgun(formData);
|
|
113
166
|
var mg = mailgun.client({ username: 'api', key: apiKey });
|
|
114
|
-
var emailData = buildEmailData(invoiceData);
|
|
115
|
-
if (!emailData.to) return { success: false, error: 'No customer email provided' };
|
|
116
|
-
|
|
117
167
|
var msg = {
|
|
118
168
|
from: emailData.from,
|
|
119
169
|
to: [emailData.to],
|
|
@@ -121,7 +171,7 @@ async function sendInvoiceEmail(invoiceData, pdfBuffer) {
|
|
|
121
171
|
html: emailData.body,
|
|
122
172
|
attachment: [{
|
|
123
173
|
data: pdfBuffer,
|
|
124
|
-
filename: (invoiceData
|
|
174
|
+
filename: attachmentName(invoiceData),
|
|
125
175
|
contentType: 'application/pdf',
|
|
126
176
|
}],
|
|
127
177
|
};
|
|
@@ -133,22 +183,19 @@ async function sendInvoiceEmail(invoiceData, pdfBuffer) {
|
|
|
133
183
|
}`;
|
|
134
184
|
case 'postmark':
|
|
135
185
|
return `
|
|
136
|
-
async function
|
|
186
|
+
async function sendInvoiceEmailWithProvider(emailData, invoiceData, pdfBuffer) {
|
|
137
187
|
try {
|
|
138
188
|
var postmark = require('postmark');
|
|
139
189
|
var serverToken = resolveSecretKey('serverToken');
|
|
140
190
|
if (!serverToken) return { success: false, error: 'Postmark server token not configured' };
|
|
141
191
|
var client = new postmark.ServerClient(serverToken);
|
|
142
|
-
var emailData = buildEmailData(invoiceData);
|
|
143
|
-
if (!emailData.to) return { success: false, error: 'No customer email provided' };
|
|
144
|
-
|
|
145
192
|
var msg = {
|
|
146
193
|
From: emailData.from,
|
|
147
194
|
To: emailData.to,
|
|
148
195
|
Subject: emailData.subject,
|
|
149
196
|
HtmlBody: emailData.body,
|
|
150
197
|
Attachments: [{
|
|
151
|
-
Name: (invoiceData
|
|
198
|
+
Name: attachmentName(invoiceData),
|
|
152
199
|
Content: pdfBuffer.toString('base64'),
|
|
153
200
|
ContentType: 'application/pdf',
|
|
154
201
|
}],
|
|
@@ -181,7 +228,7 @@ function parseFromString(from) {
|
|
|
181
228
|
return { name: '', email: str };
|
|
182
229
|
}
|
|
183
230
|
|
|
184
|
-
async function
|
|
231
|
+
async function sendInvoiceEmailWithProvider(emailData, invoiceData, pdfBuffer) {
|
|
185
232
|
var invoiceNumber = invoiceData && invoiceData.invoiceNumber ? invoiceData.invoiceNumber : '(no number)';
|
|
186
233
|
try {
|
|
187
234
|
console.info('[invoice-email][mailersend] begin — invoice=' + invoiceNumber +
|
|
@@ -192,12 +239,6 @@ async function sendInvoiceEmail(invoiceData, pdfBuffer) {
|
|
|
192
239
|
console.error('[invoice-email][mailersend] skip — API key not configured (set \`apiKey\` secret or INVOICE_MAILERSEND_APIKEY env)');
|
|
193
240
|
return { success: false, error: 'MailerSend API key not configured' };
|
|
194
241
|
}
|
|
195
|
-
var emailData = buildEmailData(invoiceData);
|
|
196
|
-
if (!emailData.to) {
|
|
197
|
-
console.error('[invoice-email][mailersend] skip — invoiceData.customerEmail is empty (order hydrating yielded no billing_email; set it on the order row or pass customerEmail in the generate payload)');
|
|
198
|
-
return { success: false, error: 'No customer email provided' };
|
|
199
|
-
}
|
|
200
|
-
|
|
201
242
|
var MailerSend = require('mailersend').MailerSend;
|
|
202
243
|
var EmailParams = require('mailersend').EmailParams;
|
|
203
244
|
var Sender = require('mailersend').Sender;
|
|
@@ -215,7 +256,7 @@ async function sendInvoiceEmail(invoiceData, pdfBuffer) {
|
|
|
215
256
|
|
|
216
257
|
var attachment = new Attachment(
|
|
217
258
|
pdfBuffer.toString('base64'),
|
|
218
|
-
(invoiceData
|
|
259
|
+
attachmentName(invoiceData),
|
|
219
260
|
'attachment'
|
|
220
261
|
);
|
|
221
262
|
|
|
@@ -257,7 +298,7 @@ async function sendInvoiceEmail(invoiceData, pdfBuffer) {
|
|
|
257
298
|
}`;
|
|
258
299
|
default:
|
|
259
300
|
return `
|
|
260
|
-
async function
|
|
301
|
+
async function sendInvoiceEmailWithProvider() {
|
|
261
302
|
return { success: false, error: 'Unsupported email provider: ${provider}' };
|
|
262
303
|
}`;
|
|
263
304
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"email-sender-code.js","sourceRoot":"","sources":["../../../src/invoice/email-sender-code.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,uBAAuB,GAAG,CAAC,aAAuC,EAAU,EAAE;IACzF,IAAI,CAAC,aAAa,IAAI,CAAC,aAAa,CAAC,OAAO,IAAI,CAAC,aAAa,CAAC,QAAQ,EAAE;QACvE,OAAO,iIAAiI,CAAA;KACzI;IAED,MAAM,cAAc,GAAG,IAAI,CAAC,SAAS,CAAC,aAAa,CAAC,UAAU,IAAI,EAAE,CAAC,CAAA;IACrE,MAAM,SAAS,GAAG,aAAa,CAAC,SAAS,IAAI,EAAE,CAAA;IAC/C,MAAM,QAAQ,GAAG,aAAa,CAAC,QAAQ,IAAI,EAAE,CAAA;IAC7C,MAAM,eAAe,GAAG,aAAa,CAAC,OAAO,IAAI,2BAA2B,CAAA;IAC5E,MAAM,YAAY,GAAG,aAAa,CAAC,IAAI,IAAI,2CAA2C,CAAA;
|
|
1
|
+
{"version":3,"file":"email-sender-code.js","sourceRoot":"","sources":["../../../src/invoice/email-sender-code.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,uBAAuB,GAAG,CAAC,aAAuC,EAAU,EAAE;IACzF,IAAI,CAAC,aAAa,IAAI,CAAC,aAAa,CAAC,OAAO,IAAI,CAAC,aAAa,CAAC,QAAQ,EAAE;QACvE,OAAO,iIAAiI,CAAA;KACzI;IAED,MAAM,cAAc,GAAG,IAAI,CAAC,SAAS,CAAC,aAAa,CAAC,UAAU,IAAI,EAAE,CAAC,CAAA;IACrE,MAAM,SAAS,GAAG,aAAa,CAAC,SAAS,IAAI,EAAE,CAAA;IAC/C,MAAM,QAAQ,GAAG,aAAa,CAAC,QAAQ,IAAI,EAAE,CAAA;IAC7C,MAAM,eAAe,GAAG,aAAa,CAAC,OAAO,IAAI,2BAA2B,CAAA;IAC5E,MAAM,YAAY,GAAG,aAAa,CAAC,IAAI,IAAI,2CAA2C,CAAA;IACtF,MAAM,kBAAkB,GAAG,aAAa,CAAC,kBAAkB,IAAI,EAAE,CAAA;IAEjE,OAAO;;eAEM,aAAa,CAAC,QAAQ;;;;;;;;;;;;;oBAajB,cAAc;yBACT,IAAI,CAAC,SAAS,CAAC,eAAe,CAAC;sBAClC,IAAI,CAAC,SAAS,CAAC,YAAY,CAAC;;;4BAGtB,IAAI,CAAC,SAAS,CAAC,kBAAkB,CAAC;;;;;;;;;;;;;;;;;;;;YAoBlD,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,QAAQ,KAAK,SAAS,GAAG,CAAC,CAAC,CAAC,SAAS,CAAC;;;;;;;;;EAS7E,4BAA4B,CAAC,aAAa,CAAC,QAAQ,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;gBAyBtC,IAAI,CAAC,SAAS,CAAC,aAAa,CAAC,QAAQ,CAAC;;;;;;;;;;;;;;CAcrD,CAAA;AACD,CAAC,CAAA;AAED,SAAS,4BAA4B,CAAC,QAAgB;IACpD,QAAQ,QAAQ,EAAE;QAChB,KAAK,QAAQ;YACX,OAAO;;;;;;;;;;;;;;;;;;;;;;;EAuBX,CAAA;QAEE,KAAK,UAAU;YACb,OAAO;;;;;;;;;;;;;;;;;;;;;;;;EAwBX,CAAA;QAEE,KAAK,SAAS;YACZ,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;EA4BX,CAAA;QAEE,KAAK,UAAU;YACb,OAAO;;;;;;;;;;;;;;;;;;;;;;;EAuBX,CAAA;QAEE,KAAK,YAAY;YACf,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAwFX,CAAA;QAEE;YACE,OAAO;;iEAEoD,QAAQ;EACvE,CAAA;KACC;AACH,CAAC;AAED,MAAM,CAAC,MAAM,4BAA4B,GAAG,CAAC,QAAuB,EAA0B,EAAE;IAC9F,IAAI,CAAC,QAAQ,EAAE;QACb,OAAO,EAAE,CAAA;KACV;IACD,QAAQ,QAAQ,EAAE;QAChB,KAAK,QAAQ;YACX,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAA;QAC7B,KAAK,UAAU;YACb,OAAO,EAAE,gBAAgB,EAAE,QAAQ,EAAE,CAAA;QACvC,KAAK,SAAS;YACZ,OAAO,EAAE,YAAY,EAAE,SAAS,EAAE,WAAW,EAAE,QAAQ,EAAE,CAAA;QAC3D,KAAK,UAAU;YACb,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,CAAA;QAC/B,KAAK,YAAY;YACf,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,CAAA;QACjC;YACE,OAAO,EAAE,CAAA;KACZ;AACH,CAAC,CAAA"}
|
|
@@ -1,7 +1,4 @@
|
|
|
1
1
|
import { ProjectPluginStructure, UIDLInvoiceSettings, DataSourceType } from '@teleporthq/teleport-types';
|
|
2
2
|
export declare const generateInvoiceFiles: (invoiceSettings: UIDLInvoiceSettings, structure: ProjectPluginStructure, dataSourceType: DataSourceType | null, dataSourceConfig: Record<string, unknown> | null) => void;
|
|
3
|
-
export
|
|
4
|
-
dataSourceType: DataSourceType | null;
|
|
5
|
-
dataSourceConfig: Record<string, unknown> | null;
|
|
6
|
-
};
|
|
3
|
+
export { resolveInvoiceDataSource } from './resolve-data-source';
|
|
7
4
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/invoice/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,sBAAsB,EAEtB,mBAAmB,EACnB,cAAc,EACf,MAAM,4BAA4B,CAAA;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/invoice/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,sBAAsB,EAEtB,mBAAmB,EACnB,cAAc,EACf,MAAM,4BAA4B,CAAA;AASnC,eAAO,MAAM,oBAAoB,oBACd,mBAAmB,aACzB,sBAAsB,kBACjB,cAAc,GAAG,IAAI,oBACnB,OAAO,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,KAC/C,IA+IF,CAAA;AAED,OAAO,EAAE,wBAAwB,EAAE,MAAM,uBAAuB,CAAA"}
|
|
@@ -4,6 +4,8 @@ import { generateEmailSenderCode, getEmailProviderDependencies } from './email-s
|
|
|
4
4
|
import { generateDataAccessCode, getRecordMappingCode } from './data-access-code';
|
|
5
5
|
import { generateInvoiceGenerateRouteCode, generateInvoicePdfRouteCode } from './api-routes-code';
|
|
6
6
|
import { getDatabaseDriverDependencies } from '../auth-generator';
|
|
7
|
+
import { ensureSentEmailLogModule } from '../sent-email-log';
|
|
8
|
+
import { ensureEmailLocaleModule } from '../email-locale';
|
|
7
9
|
export const generateInvoiceFiles = (invoiceSettings, structure, dataSourceType, dataSourceConfig) => {
|
|
8
10
|
var _a;
|
|
9
11
|
const { files, dependencies } = structure;
|
|
@@ -46,6 +48,10 @@ export const generateInvoiceFiles = (invoiceSettings, structure, dataSourceType,
|
|
|
46
48
|
],
|
|
47
49
|
});
|
|
48
50
|
if ((_a = invoiceSettings.emailDelivery) === null || _a === void 0 ? void 0 : _a.enabled) {
|
|
51
|
+
// The sender records every attempt in the sent-email ledger and picks the
|
|
52
|
+
// buyer's language through the shared locale module.
|
|
53
|
+
ensureSentEmailLogModule(structure);
|
|
54
|
+
ensureEmailLocaleModule(structure);
|
|
49
55
|
const emailSenderCode = generateEmailSenderCode(invoiceSettings.emailDelivery);
|
|
50
56
|
files.set('invoice-email-sender', {
|
|
51
57
|
path: ['utils', 'invoices'],
|
|
@@ -130,22 +136,5 @@ export const generateInvoiceFiles = (invoiceSettings, structure, dataSourceType,
|
|
|
130
136
|
}
|
|
131
137
|
}
|
|
132
138
|
};
|
|
133
|
-
export
|
|
134
|
-
var _a;
|
|
135
|
-
const { uidl } = structure;
|
|
136
|
-
if (!uidl.dataSources) {
|
|
137
|
-
return { dataSourceType: null, dataSourceConfig: null };
|
|
138
|
-
}
|
|
139
|
-
if ((_a = uidl.authentication) === null || _a === void 0 ? void 0 : _a.dataSourceId) {
|
|
140
|
-
const ds = uidl.dataSources[uidl.authentication.dataSourceId];
|
|
141
|
-
if (ds) {
|
|
142
|
-
return { dataSourceType: ds.type, dataSourceConfig: ds.config };
|
|
143
|
-
}
|
|
144
|
-
}
|
|
145
|
-
const dsEntries = Object.values(uidl.dataSources);
|
|
146
|
-
if (dsEntries.length > 0) {
|
|
147
|
-
return { dataSourceType: dsEntries[0].type, dataSourceConfig: dsEntries[0].config };
|
|
148
|
-
}
|
|
149
|
-
return { dataSourceType: null, dataSourceConfig: null };
|
|
150
|
-
};
|
|
139
|
+
export { resolveInvoiceDataSource } from './resolve-data-source';
|
|
151
140
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/invoice/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,QAAQ,GAGT,MAAM,4BAA4B,CAAA;AACnC,OAAO,EAAE,wBAAwB,EAAE,MAAM,sBAAsB,CAAA;AAC/D,OAAO,EAAE,uBAAuB,EAAE,4BAA4B,EAAE,MAAM,qBAAqB,CAAA;AAC3F,OAAO,EAAE,sBAAsB,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAA;AACjF,OAAO,EAAE,gCAAgC,EAAE,2BAA2B,EAAE,MAAM,mBAAmB,CAAA;AACjG,OAAO,EAAE,6BAA6B,EAAE,MAAM,mBAAmB,CAAA;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/invoice/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"invoice-html-code.d.ts","sourceRoot":"","sources":["../../../src/invoice/invoice-html-code.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAA;AA4HhE,eAAO,MAAM,uBAAuB,aACxB,mBAAmB,uBACR,OAAO,iBACb,OAAO,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,GAAG,SAAS,KACxD,
|
|
1
|
+
{"version":3,"file":"invoice-html-code.d.ts","sourceRoot":"","sources":["../../../src/invoice/invoice-html-code.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAA;AA4HhE,eAAO,MAAM,uBAAuB,aACxB,mBAAmB,uBACR,OAAO,iBACb,OAAO,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,GAAG,SAAS,KACxD,MA65BF,CAAA"}
|
|
@@ -282,6 +282,7 @@ function buildInvoiceDataScope(invoiceData) {
|
|
|
282
282
|
discountAmount: formatCurrencyValue(invoiceData.discountAmount, sym),
|
|
283
283
|
shippingAmount: formatCurrencyValue(shippingAmountNumber, sym),
|
|
284
284
|
hasShipping: shippingAmountNumber > 0 ? 'true' : 'false',
|
|
285
|
+
hasTax: Number(invoiceData.taxAmount) > 0 ? 'true' : 'false',
|
|
285
286
|
total: formatCurrencyValue(invoiceData.total, sym),
|
|
286
287
|
currency: invoiceData.currency || 'USD',
|
|
287
288
|
currencySymbol: sym,
|
|
@@ -328,13 +329,18 @@ function buildInvoiceDataScope(invoiceData) {
|
|
|
328
329
|
var lineStored = Number(it.totalPrice || it.total_price);
|
|
329
330
|
if (!isFinite(lineStored) || lineStored === 0) lineStored = qty * unitStored;
|
|
330
331
|
|
|
331
|
-
|
|
332
|
-
|
|
332
|
+
// A line on an order priced by region carries its own rate and inclusion
|
|
333
|
+
// mode (a food line at 7% beside a tools line at 19%); every other line is
|
|
334
|
+
// taxed at the invoice's single rate.
|
|
335
|
+
var lineRate = typeof it.taxIncluded === 'boolean' ? Number(it.taxRate) || 0 : taxRate;
|
|
336
|
+
var lineIncluded = typeof it.taxIncluded === 'boolean' ? it.taxIncluded : taxIncluded;
|
|
337
|
+
var unitNet = computeNetFromGrossValue(unitStored, lineRate, lineIncluded);
|
|
338
|
+
var lineNet = computeNetFromGrossValue(lineStored, lineRate, lineIncluded);
|
|
333
339
|
// Per-unit VAT mirrors the GUI helper: derived from the NET unit
|
|
334
340
|
// price at the configured rate (rather than dividing line VAT by qty,
|
|
335
341
|
// which yields odd values when qty is 0 or missing).
|
|
336
|
-
var unitVat = computeLineVatAmountValue(unitStored,
|
|
337
|
-
var lineVat = computeLineVatAmountValue(lineStored,
|
|
342
|
+
var unitVat = computeLineVatAmountValue(unitStored, lineRate, lineIncluded);
|
|
343
|
+
var lineVat = computeLineVatAmountValue(lineStored, lineRate, lineIncluded);
|
|
338
344
|
var unitGross = unitNet + unitVat;
|
|
339
345
|
var lineGross = lineNet + lineVat;
|
|
340
346
|
|
|
@@ -372,6 +378,9 @@ function buildInvoiceDataScope(invoiceData) {
|
|
|
372
378
|
lineTotalNet: formatCurrencyValue(lineNet, sym),
|
|
373
379
|
lineTotalGross: formatCurrencyValue(lineGross, sym),
|
|
374
380
|
lineVatAmount: formatCurrencyValue(lineVat, sym),
|
|
381
|
+
// The rate this line was taxed at ("20%"): its own on an order priced by
|
|
382
|
+
// region, the invoice's single rate otherwise. Bound by the VAT % column.
|
|
383
|
+
lineVatRate: (lineRate > 0 ? Math.round(lineRate * 100) / 100 : 0) + '%',
|
|
375
384
|
sku: it.sku || '',
|
|
376
385
|
itemTaxRate: it.taxRate != null ? String(it.taxRate) : (taxRate > 0 ? String(taxRate) : ''),
|
|
377
386
|
itemTaxAmount: it.taxAmount != null ? formatCurrencyValue(it.taxAmount, sym) : formatCurrencyValue(lineVat, sym),
|
|
@@ -542,13 +551,20 @@ function resolveReferenceValue(ref, scope) {
|
|
|
542
551
|
}
|
|
543
552
|
|
|
544
553
|
function matchConditionOperation(val, op, operand) {
|
|
554
|
+
// The editor stores every operand as a STRING ('true', '0'), while
|
|
555
|
+
// \`resolveReferenceValue\` hands back a typed value for \`expr\` references
|
|
556
|
+
// (it turns 'true' into boolean true). A strict \`===\` across those two
|
|
557
|
+
// shapes never matches — that is how the template's Delivery row, gated on
|
|
558
|
+
// \`Invoice.hasShipping = 'true'\`, stayed hidden on every invoice with a
|
|
559
|
+
// fee — so mixed-type equality compares the string forms instead.
|
|
560
|
+
var sameType = typeof val === typeof operand;
|
|
545
561
|
switch (op) {
|
|
546
562
|
case '=':
|
|
547
563
|
case '===':
|
|
548
|
-
return val === operand;
|
|
564
|
+
return sameType ? val === operand : String(val) === String(operand);
|
|
549
565
|
case '!=':
|
|
550
566
|
case '!==':
|
|
551
|
-
return val !== operand;
|
|
567
|
+
return sameType ? val !== operand : String(val) !== String(operand);
|
|
552
568
|
case '>': return Number(val) > Number(operand);
|
|
553
569
|
case '<': return Number(val) < Number(operand);
|
|
554
570
|
case '>=': return Number(val) >= Number(operand);
|
|
@@ -893,18 +909,25 @@ function buildFallbackInvoiceHtml(scope) {
|
|
|
893
909
|
'<th style="text-align:left;border-bottom:2px solid #333;padding:6px;">Item</th>' +
|
|
894
910
|
'<th style="text-align:right;border-bottom:2px solid #333;padding:6px;">Qty</th>' +
|
|
895
911
|
'<th style="text-align:right;border-bottom:2px solid #333;padding:6px;">Unit Price</th>' +
|
|
912
|
+
'<th style="text-align:right;border-bottom:2px solid #333;padding:6px;">VAT %</th>' +
|
|
913
|
+
'<th style="text-align:right;border-bottom:2px solid #333;padding:6px;">VAT</th>' +
|
|
896
914
|
'<th style="text-align:right;border-bottom:2px solid #333;padding:6px;">Total</th>' +
|
|
897
915
|
'</tr></thead><tbody>');
|
|
898
916
|
products.forEach(function (p) {
|
|
899
917
|
parts.push('<tr>' +
|
|
900
918
|
'<td style="border-bottom:1px solid #eee;padding:6px;">' + (p.variantSwatchesHtml || '') + escapeHtml(p.name) + '</td>' +
|
|
901
919
|
'<td style="border-bottom:1px solid #eee;padding:6px;text-align:right;">' + escapeHtml(p.quantity) + '</td>' +
|
|
902
|
-
'<td style="border-bottom:1px solid #eee;padding:6px;text-align:right;">' + escapeHtml(p.
|
|
903
|
-
'<td style="border-bottom:1px solid #eee;padding:6px;text-align:right;">' + escapeHtml(p.
|
|
920
|
+
'<td style="border-bottom:1px solid #eee;padding:6px;text-align:right;">' + escapeHtml(p.unitPriceNet) + '</td>' +
|
|
921
|
+
'<td style="border-bottom:1px solid #eee;padding:6px;text-align:right;">' + escapeHtml(p.lineVatRate) + '</td>' +
|
|
922
|
+
'<td style="border-bottom:1px solid #eee;padding:6px;text-align:right;">' + escapeHtml(p.lineVatAmount) + '</td>' +
|
|
923
|
+
'<td style="border-bottom:1px solid #eee;padding:6px;text-align:right;">' + escapeHtml(p.lineTotalGross) + '</td>' +
|
|
904
924
|
'</tr>');
|
|
905
925
|
});
|
|
906
926
|
parts.push('</tbody></table>');
|
|
907
927
|
var totalsRows = '<div style="display:flex;justify-content:space-between;margin-bottom:4px;"><span>Subtotal</span><span>' + escapeHtml(inv.subtotal) + '</span></div>';
|
|
928
|
+
if (inv.hasTax === 'true') {
|
|
929
|
+
totalsRows += '<div style="display:flex;justify-content:space-between;margin-bottom:4px;"><span>VAT</span><span>' + escapeHtml(inv.taxAmount) + '</span></div>';
|
|
930
|
+
}
|
|
908
931
|
if (inv.hasShipping === 'true') {
|
|
909
932
|
totalsRows += '<div style="display:flex;justify-content:space-between;margin-bottom:4px;"><span>Delivery</span><span>' + escapeHtml(inv.shippingAmount) + '</span></div>';
|
|
910
933
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"invoice-html-code.js","sourceRoot":"","sources":["../../../src/invoice/invoice-html-code.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"invoice-html-code.js","sourceRoot":"","sources":["../../../src/invoice/invoice-html-code.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Invoice VAT for an order placed on a store with shipping zones and tax
|
|
3
|
+
* jurisdictions, as source for the generated `/api/invoices/generate` route.
|
|
4
|
+
*
|
|
5
|
+
* Such an order does not have ONE rate: a German food line at 7% can sit beside
|
|
6
|
+
* a tools line at 19%, a French order's prices may include VAT while the store
|
|
7
|
+
* default adds it on top, and the delivery fee may be taxed. The store's
|
|
8
|
+
* baked `DEFAULT_TAX_RATE` / `TAX_INCLUDED_IN_PRICE` describe none of that, so
|
|
9
|
+
* the place-order workflow records what was actually charged in
|
|
10
|
+
* `teleport_orders.tax_breakdown`, and this prices the invoice from it.
|
|
11
|
+
*
|
|
12
|
+
* Totals reconcile with `teleport_orders.total_amount` by construction:
|
|
13
|
+
* `goods (gross) + shipping_amount (gross) - discount_amount`. The discount is
|
|
14
|
+
* taken off the goods first and only then off the shipping, exactly as the
|
|
15
|
+
* payment line items split it, and each part's tax shrinks in proportion.
|
|
16
|
+
*
|
|
17
|
+
* The printed rows add up too: `subtotal` (goods, net) + `taxAmount` (goods
|
|
18
|
+
* AND shipping tax) + `shippingNet` = `total`. Delivery is therefore shown net
|
|
19
|
+
* of its tax, or its tax would be counted twice.
|
|
20
|
+
*
|
|
21
|
+
* An order without a breakdown — every order placed before regions existed —
|
|
22
|
+
* returns null and keeps the single-rate arithmetic it was always invoiced with.
|
|
23
|
+
*/
|
|
24
|
+
export declare const REGIONAL_INVOICE_TAX_CODE = "\nfunction parseOrderTaxBreakdown(raw) {\n if (!raw) return null;\n var parsed = raw;\n if (typeof raw === 'string') {\n try {\n parsed = JSON.parse(raw);\n } catch (e) {\n return null;\n }\n }\n if (!parsed || typeof parsed !== 'object' || !Array.isArray(parsed.lines)) return null;\n return parsed;\n}\n\nfunction regionalInvoiceRound(value, decimals) {\n var factor = decimals === 0 ? 1 : 100;\n var n = Number(value);\n return Math.round((isFinite(n) ? n : 0) * factor) / factor;\n}\n\n// items: the invoice lines as the route normalised them (productId, variantId,\n// quantity, unitPrice, totalPrice \u2014 all stored, i.e. NET where tax is added on\n// top and GROSS where it is included).\nfunction resolveRegionalInvoiceTax(breakdown, items, discountAmount, shippingAmount) {\n var decimals = breakdown.taxDecimals === 0 ? 0 : 2;\n var standardRate = Number(breakdown.taxRate);\n if (!isFinite(standardRate) || standardRate < 0) standardRate = 0;\n var standardIncluded = breakdown.taxIncluded === true;\n var claimed = [];\n var itemTax = [];\n var goodsGross = 0;\n var goodsTax = 0;\n for (var i = 0; i < items.length; i++) {\n var item = items[i];\n var match = null;\n for (var l = 0; l < breakdown.lines.length; l++) {\n var line = breakdown.lines[l];\n if (!line || claimed.indexOf(l) !== -1) continue;\n if (\n String(line.productId || '') === String(item.productId || '') &&\n String(line.variantId || '') === String(item.variantId || '')\n ) {\n match = line;\n claimed.push(l);\n break;\n }\n }\n var matchedRate = match ? Number(match.taxRate) : NaN;\n var rate = isFinite(matchedRate) && matchedRate >= 0 ? matchedRate : standardRate;\n var included = match ? match.taxIncluded === true : standardIncluded;\n var quantity = Number(item.quantity) || 1;\n var stored = Number(item.totalPrice) || 0;\n var lineGross = !included && rate > 0\n ? regionalInvoiceRound(\n regionalInvoiceRound((Number(item.unitPrice) || 0) * (1 + rate / 100), decimals) * quantity,\n decimals\n )\n : stored;\n var lineTax = included\n ? (rate > 0 ? stored - stored / (1 + rate / 100) : 0)\n : lineGross - stored;\n goodsGross += lineGross;\n goodsTax += lineTax;\n itemTax.push({ rate: rate, included: included, amount: regionalInvoiceRound(lineTax, decimals) });\n }\n\n var discount = discountAmount > 0 ? discountAmount : 0;\n var shipping = shippingAmount > 0 ? shippingAmount : 0;\n var goodsAfter = Math.max(0, goodsGross - discount);\n var goodsShare = goodsGross > 0 ? goodsAfter / goodsGross : 0;\n var shippingAfter = Math.max(0, shipping - Math.max(0, discount - goodsGross));\n var shippingShare = shipping > 0 ? shippingAfter / shipping : 0;\n var shippingTax = Number(breakdown.shippingTax);\n if (!isFinite(shippingTax) || shippingTax < 0) shippingTax = 0;\n var allocatedGoodsTax = goodsTax * goodsShare;\n var allocatedShippingTax = shippingTax * shippingShare;\n\n return {\n taxRate: standardRate,\n taxIncluded: standardIncluded,\n subtotal: goodsAfter - allocatedGoodsTax,\n taxAmount: allocatedGoodsTax + allocatedShippingTax,\n shippingNet: shippingAfter - allocatedShippingTax,\n total: goodsAfter + shippingAfter,\n itemTax: itemTax,\n };\n}\n";
|
|
25
|
+
//# sourceMappingURL=regional-invoice-tax-code.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"regional-invoice-tax-code.d.ts","sourceRoot":"","sources":["../../../src/invoice/regional-invoice-tax-code.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,eAAO,MAAM,yBAAyB,8zGAwFrC,CAAA"}
|
|
@@ -0,0 +1,113 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Invoice VAT for an order placed on a store with shipping zones and tax
|
|
3
|
+
* jurisdictions, as source for the generated `/api/invoices/generate` route.
|
|
4
|
+
*
|
|
5
|
+
* Such an order does not have ONE rate: a German food line at 7% can sit beside
|
|
6
|
+
* a tools line at 19%, a French order's prices may include VAT while the store
|
|
7
|
+
* default adds it on top, and the delivery fee may be taxed. The store's
|
|
8
|
+
* baked `DEFAULT_TAX_RATE` / `TAX_INCLUDED_IN_PRICE` describe none of that, so
|
|
9
|
+
* the place-order workflow records what was actually charged in
|
|
10
|
+
* `teleport_orders.tax_breakdown`, and this prices the invoice from it.
|
|
11
|
+
*
|
|
12
|
+
* Totals reconcile with `teleport_orders.total_amount` by construction:
|
|
13
|
+
* `goods (gross) + shipping_amount (gross) - discount_amount`. The discount is
|
|
14
|
+
* taken off the goods first and only then off the shipping, exactly as the
|
|
15
|
+
* payment line items split it, and each part's tax shrinks in proportion.
|
|
16
|
+
*
|
|
17
|
+
* The printed rows add up too: `subtotal` (goods, net) + `taxAmount` (goods
|
|
18
|
+
* AND shipping tax) + `shippingNet` = `total`. Delivery is therefore shown net
|
|
19
|
+
* of its tax, or its tax would be counted twice.
|
|
20
|
+
*
|
|
21
|
+
* An order without a breakdown — every order placed before regions existed —
|
|
22
|
+
* returns null and keeps the single-rate arithmetic it was always invoiced with.
|
|
23
|
+
*/
|
|
24
|
+
export const REGIONAL_INVOICE_TAX_CODE = `
|
|
25
|
+
function parseOrderTaxBreakdown(raw) {
|
|
26
|
+
if (!raw) return null;
|
|
27
|
+
var parsed = raw;
|
|
28
|
+
if (typeof raw === 'string') {
|
|
29
|
+
try {
|
|
30
|
+
parsed = JSON.parse(raw);
|
|
31
|
+
} catch (e) {
|
|
32
|
+
return null;
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
if (!parsed || typeof parsed !== 'object' || !Array.isArray(parsed.lines)) return null;
|
|
36
|
+
return parsed;
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
function regionalInvoiceRound(value, decimals) {
|
|
40
|
+
var factor = decimals === 0 ? 1 : 100;
|
|
41
|
+
var n = Number(value);
|
|
42
|
+
return Math.round((isFinite(n) ? n : 0) * factor) / factor;
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
// items: the invoice lines as the route normalised them (productId, variantId,
|
|
46
|
+
// quantity, unitPrice, totalPrice — all stored, i.e. NET where tax is added on
|
|
47
|
+
// top and GROSS where it is included).
|
|
48
|
+
function resolveRegionalInvoiceTax(breakdown, items, discountAmount, shippingAmount) {
|
|
49
|
+
var decimals = breakdown.taxDecimals === 0 ? 0 : 2;
|
|
50
|
+
var standardRate = Number(breakdown.taxRate);
|
|
51
|
+
if (!isFinite(standardRate) || standardRate < 0) standardRate = 0;
|
|
52
|
+
var standardIncluded = breakdown.taxIncluded === true;
|
|
53
|
+
var claimed = [];
|
|
54
|
+
var itemTax = [];
|
|
55
|
+
var goodsGross = 0;
|
|
56
|
+
var goodsTax = 0;
|
|
57
|
+
for (var i = 0; i < items.length; i++) {
|
|
58
|
+
var item = items[i];
|
|
59
|
+
var match = null;
|
|
60
|
+
for (var l = 0; l < breakdown.lines.length; l++) {
|
|
61
|
+
var line = breakdown.lines[l];
|
|
62
|
+
if (!line || claimed.indexOf(l) !== -1) continue;
|
|
63
|
+
if (
|
|
64
|
+
String(line.productId || '') === String(item.productId || '') &&
|
|
65
|
+
String(line.variantId || '') === String(item.variantId || '')
|
|
66
|
+
) {
|
|
67
|
+
match = line;
|
|
68
|
+
claimed.push(l);
|
|
69
|
+
break;
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
var matchedRate = match ? Number(match.taxRate) : NaN;
|
|
73
|
+
var rate = isFinite(matchedRate) && matchedRate >= 0 ? matchedRate : standardRate;
|
|
74
|
+
var included = match ? match.taxIncluded === true : standardIncluded;
|
|
75
|
+
var quantity = Number(item.quantity) || 1;
|
|
76
|
+
var stored = Number(item.totalPrice) || 0;
|
|
77
|
+
var lineGross = !included && rate > 0
|
|
78
|
+
? regionalInvoiceRound(
|
|
79
|
+
regionalInvoiceRound((Number(item.unitPrice) || 0) * (1 + rate / 100), decimals) * quantity,
|
|
80
|
+
decimals
|
|
81
|
+
)
|
|
82
|
+
: stored;
|
|
83
|
+
var lineTax = included
|
|
84
|
+
? (rate > 0 ? stored - stored / (1 + rate / 100) : 0)
|
|
85
|
+
: lineGross - stored;
|
|
86
|
+
goodsGross += lineGross;
|
|
87
|
+
goodsTax += lineTax;
|
|
88
|
+
itemTax.push({ rate: rate, included: included, amount: regionalInvoiceRound(lineTax, decimals) });
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
var discount = discountAmount > 0 ? discountAmount : 0;
|
|
92
|
+
var shipping = shippingAmount > 0 ? shippingAmount : 0;
|
|
93
|
+
var goodsAfter = Math.max(0, goodsGross - discount);
|
|
94
|
+
var goodsShare = goodsGross > 0 ? goodsAfter / goodsGross : 0;
|
|
95
|
+
var shippingAfter = Math.max(0, shipping - Math.max(0, discount - goodsGross));
|
|
96
|
+
var shippingShare = shipping > 0 ? shippingAfter / shipping : 0;
|
|
97
|
+
var shippingTax = Number(breakdown.shippingTax);
|
|
98
|
+
if (!isFinite(shippingTax) || shippingTax < 0) shippingTax = 0;
|
|
99
|
+
var allocatedGoodsTax = goodsTax * goodsShare;
|
|
100
|
+
var allocatedShippingTax = shippingTax * shippingShare;
|
|
101
|
+
|
|
102
|
+
return {
|
|
103
|
+
taxRate: standardRate,
|
|
104
|
+
taxIncluded: standardIncluded,
|
|
105
|
+
subtotal: goodsAfter - allocatedGoodsTax,
|
|
106
|
+
taxAmount: allocatedGoodsTax + allocatedShippingTax,
|
|
107
|
+
shippingNet: shippingAfter - allocatedShippingTax,
|
|
108
|
+
total: goodsAfter + shippingAfter,
|
|
109
|
+
itemTax: itemTax,
|
|
110
|
+
};
|
|
111
|
+
}
|
|
112
|
+
`;
|
|
113
|
+
//# sourceMappingURL=regional-invoice-tax-code.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"regional-invoice-tax-code.js","sourceRoot":"","sources":["../../../src/invoice/regional-invoice-tax-code.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,MAAM,CAAC,MAAM,yBAAyB,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAwFxC,CAAA"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { DataSourceType, ProjectPluginStructure } from '@teleporthq/teleport-types';
|
|
2
|
+
export declare const resolveInvoiceDataSource: (structure: ProjectPluginStructure) => {
|
|
3
|
+
dataSourceType: DataSourceType | null;
|
|
4
|
+
dataSourceConfig: Record<string, unknown> | null;
|
|
5
|
+
};
|
|
6
|
+
//# sourceMappingURL=resolve-data-source.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"resolve-data-source.d.ts","sourceRoot":"","sources":["../../../src/invoice/resolve-data-source.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,sBAAsB,EAAE,MAAM,4BAA4B,CAAA;AAEnF,eAAO,MAAM,wBAAwB,cACxB,sBAAsB,KAChC;IAAE,cAAc,EAAE,cAAc,GAAG,IAAI,CAAC;IAAC,gBAAgB,EAAE,OAAO,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAAA;CAoB3F,CAAA"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
export const resolveInvoiceDataSource = (structure) => {
|
|
2
|
+
var _a;
|
|
3
|
+
const { uidl } = structure;
|
|
4
|
+
if (!uidl.dataSources) {
|
|
5
|
+
return { dataSourceType: null, dataSourceConfig: null };
|
|
6
|
+
}
|
|
7
|
+
if ((_a = uidl.authentication) === null || _a === void 0 ? void 0 : _a.dataSourceId) {
|
|
8
|
+
const ds = uidl.dataSources[uidl.authentication.dataSourceId];
|
|
9
|
+
if (ds) {
|
|
10
|
+
return { dataSourceType: ds.type, dataSourceConfig: ds.config };
|
|
11
|
+
}
|
|
12
|
+
}
|
|
13
|
+
const dsEntries = Object.values(uidl.dataSources);
|
|
14
|
+
if (dsEntries.length > 0) {
|
|
15
|
+
return { dataSourceType: dsEntries[0].type, dataSourceConfig: dsEntries[0].config };
|
|
16
|
+
}
|
|
17
|
+
return { dataSourceType: null, dataSourceConfig: null };
|
|
18
|
+
};
|
|
19
|
+
//# sourceMappingURL=resolve-data-source.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"resolve-data-source.js","sourceRoot":"","sources":["../../../src/invoice/resolve-data-source.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,wBAAwB,GAAG,CACtC,SAAiC,EAC4D,EAAE;;IAC/F,MAAM,EAAE,IAAI,EAAE,GAAG,SAAS,CAAA;IAE1B,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE;QACrB,OAAO,EAAE,cAAc,EAAE,IAAI,EAAE,gBAAgB,EAAE,IAAI,EAAE,CAAA;KACxD;IAED,IAAI,MAAA,IAAI,CAAC,cAAc,0CAAE,YAAY,EAAE;QACrC,MAAM,EAAE,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,cAAc,CAAC,YAAY,CAAC,CAAA;QAC7D,IAAI,EAAE,EAAE;YACN,OAAO,EAAE,cAAc,EAAE,EAAE,CAAC,IAAI,EAAE,gBAAgB,EAAE,EAAE,CAAC,MAAM,EAAE,CAAA;SAChE;KACF;IAED,MAAM,SAAS,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,CAAA;IACjD,IAAI,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE;QACxB,OAAO,EAAE,cAAc,EAAE,SAAS,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,gBAAgB,EAAE,SAAS,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE,CAAA;KACpF;IAED,OAAO,EAAE,cAAc,EAAE,IAAI,EAAE,gBAAgB,EAAE,IAAI,EAAE,CAAA;AACzD,CAAC,CAAA"}
|