@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
|
@@ -4,7 +4,9 @@
|
|
|
4
4
|
* dispatch, template filler, dependency map, and config-key list in ONE place so
|
|
5
5
|
* every route stays byte-for-byte consistent.
|
|
6
6
|
*/
|
|
7
|
+
import { UIDLLocalizedEmailTemplates } from '@teleporthq/teleport-types'
|
|
7
8
|
import { getEmailProviderDependencies } from './invoice/email-sender-code'
|
|
9
|
+
import { EMAIL_LOCALE_FILE_NAME, EMAIL_LOCALE_PATH } from './email-locale/email-locale-scope'
|
|
8
10
|
|
|
9
11
|
export const SUPPORTED_EMAIL_PROVIDERS = new Set([
|
|
10
12
|
'resend',
|
|
@@ -25,10 +27,67 @@ export const transactionalEmailDependencies = (
|
|
|
25
27
|
return getEmailProviderDependencies(provider)
|
|
26
28
|
}
|
|
27
29
|
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
30
|
+
/**
|
|
31
|
+
* Where a transactional route's sends are recorded in the sent-email ledger:
|
|
32
|
+
* the purpose slug, the `source` column and the route file, plus the require
|
|
33
|
+
* prefix from the route's directory back to the project root.
|
|
34
|
+
*/
|
|
35
|
+
export interface TransactionalEmailLedger {
|
|
36
|
+
emailType: string
|
|
37
|
+
source: string
|
|
38
|
+
sourceRef: string
|
|
39
|
+
relativePrefix: string
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
// Provider-specific `__sendProviderEmail({ from, to, subject, html, apiKey,
|
|
43
|
+
// tokenValues?, userId? })`. No attachment (unlike the invoice sender). When
|
|
44
|
+
// no provider is configured the function is a no-op so the route stays
|
|
45
|
+
// self-contained and never throws. With `ledger`, the provider function is
|
|
46
|
+
// emitted as `__sendProviderEmailRaw` and `__sendProviderEmail` records every
|
|
47
|
+
// attempt (success or throw) before returning / rethrowing.
|
|
48
|
+
export const generateProviderSendFunction = (
|
|
49
|
+
provider?: string | null,
|
|
50
|
+
ledger?: TransactionalEmailLedger
|
|
51
|
+
): string => {
|
|
52
|
+
const raw = generateRawProviderSendFunction(provider)
|
|
53
|
+
if (!ledger || !provider || !SUPPORTED_EMAIL_PROVIDERS.has(provider)) {
|
|
54
|
+
return raw
|
|
55
|
+
}
|
|
56
|
+
return `${raw.replace(
|
|
57
|
+
'async function __sendProviderEmail(',
|
|
58
|
+
'async function __sendProviderEmailRaw('
|
|
59
|
+
)}
|
|
60
|
+
|
|
61
|
+
var __sentEmailLog = require('${ledger.relativePrefix}/utils/email/sent-email-log');
|
|
62
|
+
|
|
63
|
+
async function __sendProviderEmail(msg) {
|
|
64
|
+
var failure = null;
|
|
65
|
+
try {
|
|
66
|
+
await __sendProviderEmailRaw(msg);
|
|
67
|
+
} catch (err) {
|
|
68
|
+
failure = err;
|
|
69
|
+
}
|
|
70
|
+
// Recorded in the background; the route settles the ledger before it replies.
|
|
71
|
+
__sentEmailLog.recordSentEmail({
|
|
72
|
+
emailType: ${JSON.stringify(ledger.emailType)},
|
|
73
|
+
audience: 'customer',
|
|
74
|
+
to: msg.to,
|
|
75
|
+
from: msg.from,
|
|
76
|
+
subject: msg.subject,
|
|
77
|
+
html: msg.html,
|
|
78
|
+
payload: msg.tokenValues,
|
|
79
|
+
provider: ${JSON.stringify(provider)},
|
|
80
|
+
status: failure ? 'failed' : 'sent',
|
|
81
|
+
error: failure ? (failure.message || String(failure)) : null,
|
|
82
|
+
source: ${JSON.stringify(ledger.source)},
|
|
83
|
+
sourceRef: ${JSON.stringify(ledger.sourceRef)},
|
|
84
|
+
userId: msg.userId,
|
|
85
|
+
});
|
|
86
|
+
if (failure) { throw failure; }
|
|
87
|
+
}`
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
const generateRawProviderSendFunction = (provider?: string | null): string => {
|
|
32
91
|
switch (provider) {
|
|
33
92
|
case 'resend':
|
|
34
93
|
return `async function __sendProviderEmail(msg) {
|
|
@@ -94,6 +153,54 @@ export const generateFillTemplateFn = (): string => `function fillTemplate(str,
|
|
|
94
153
|
return out;
|
|
95
154
|
}`
|
|
96
155
|
|
|
156
|
+
/**
|
|
157
|
+
* The per-language copies of a transactional route's email, as the UIDL mapper
|
|
158
|
+
* wrote them on the node config. Anything that is not a locale→copy map is
|
|
159
|
+
* treated as "no copies", so a hand-edited config can never break the route.
|
|
160
|
+
*/
|
|
161
|
+
export const readLocalizedEmailTemplates = (value: unknown): UIDLLocalizedEmailTemplates => {
|
|
162
|
+
if (!value || typeof value !== 'object' || Array.isArray(value)) {
|
|
163
|
+
return {}
|
|
164
|
+
}
|
|
165
|
+
const copies: UIDLLocalizedEmailTemplates = {}
|
|
166
|
+
for (const [locale, copy] of Object.entries(value as Record<string, unknown>)) {
|
|
167
|
+
if (!copy || typeof copy !== 'object') {
|
|
168
|
+
continue
|
|
169
|
+
}
|
|
170
|
+
const { body, subject } = copy as { body?: unknown; subject?: unknown }
|
|
171
|
+
if (typeof body !== 'string' || !body) {
|
|
172
|
+
continue
|
|
173
|
+
}
|
|
174
|
+
copies[locale] = typeof subject === 'string' && subject ? { body, subject } : { body }
|
|
175
|
+
}
|
|
176
|
+
return copies
|
|
177
|
+
}
|
|
178
|
+
|
|
179
|
+
/** The `require` of the shared locale module from a route `relativePrefix` deep. */
|
|
180
|
+
export const generateEmailLocaleRequire = (relativePrefix: string): string =>
|
|
181
|
+
`var __emailLocale = require('${relativePrefix}/${EMAIL_LOCALE_PATH.join(
|
|
182
|
+
'/'
|
|
183
|
+
)}/${EMAIL_LOCALE_FILE_NAME}');`
|
|
184
|
+
|
|
185
|
+
/**
|
|
186
|
+
* Emits `function <fnName>(locale)` returning `{ subject, body, locale }` — the
|
|
187
|
+
* copy of the route's email for the language a request came from, read from
|
|
188
|
+
* the baked constants. The default language and any language without a copy
|
|
189
|
+
* fall back to the base subject/body.
|
|
190
|
+
*/
|
|
191
|
+
export const generateLocalizedEmailCopyFn = (params: {
|
|
192
|
+
fnName: string
|
|
193
|
+
subjectConst: string
|
|
194
|
+
bodyConst: string
|
|
195
|
+
localizedConst: string
|
|
196
|
+
}): string => `function ${params.fnName}(locale) {
|
|
197
|
+
return __emailLocale.pickLocalizedTemplate(
|
|
198
|
+
{ subject: ${params.subjectConst}, body: ${params.bodyConst} },
|
|
199
|
+
${params.localizedConst},
|
|
200
|
+
locale
|
|
201
|
+
);
|
|
202
|
+
}`
|
|
203
|
+
|
|
97
204
|
// The account-signup node's welcome-email config keys. They must NEVER be
|
|
98
205
|
// forwarded from the client signup handler to /api/auth/signup nor inserted as
|
|
99
206
|
// user columns (they'd corrupt createUser and leak into the client bundle).
|
|
@@ -109,4 +216,5 @@ export const WELCOME_EMAIL_CONFIG_KEYS = [
|
|
|
109
216
|
'bodyComponentId',
|
|
110
217
|
'bodyTemplatePurpose',
|
|
111
218
|
'templateParams',
|
|
219
|
+
'localizedTemplates',
|
|
112
220
|
]
|
package/src/webhook-generator.ts
CHANGED
|
@@ -572,7 +572,10 @@ module.exports = async function handler(req, res) {
|
|
|
572
572
|
method: 'POST',
|
|
573
573
|
headers: { 'Content-Type': 'application/json' },
|
|
574
574
|
body: JSON.stringify({
|
|
575
|
-
|
|
575
|
+
// The internal order id, so the route can load the order's own
|
|
576
|
+
// lines and the rates they were charged at; the capture id is
|
|
577
|
+
// only a fallback for a resource that carries no custom_id.
|
|
578
|
+
orderId: __extractInternalOrderId(resource) || resource.id || '',
|
|
576
579
|
customerEmail: (resource.payer && resource.payer.email_address) || '',
|
|
577
580
|
customerName: resource.payer && resource.payer.name ? ((resource.payer.name.given_name || '') + ' ' + (resource.payer.name.surname || '')).trim() : '',
|
|
578
581
|
totalAmount: resource.amount ? Number(resource.amount.value) || 0 : 0,
|
|
@@ -661,7 +664,7 @@ async function verifyPaypalWebhook(headers, body, webhookId, clientId, clientSec
|
|
|
661
664
|
}
|
|
662
665
|
|
|
663
666
|
${
|
|
664
|
-
autoGenerateInvoice
|
|
667
|
+
autoGenerateInvoice || hasOrderNotifications
|
|
665
668
|
? `
|
|
666
669
|
// Pull the internal teleport_orders UUID out of the PayPal resource's
|
|
667
670
|
// custom_id field. Order creation embeds it as JSON
|
|
@@ -683,7 +686,13 @@ function __extractInternalOrderId(resource) {
|
|
|
683
686
|
}
|
|
684
687
|
return '';
|
|
685
688
|
}
|
|
689
|
+
`
|
|
690
|
+
: ''
|
|
691
|
+
}
|
|
686
692
|
|
|
693
|
+
${
|
|
694
|
+
autoGenerateInvoice
|
|
695
|
+
? `
|
|
687
696
|
async function handlePaypalInvoiceGeneration(resource, eventType, clientId, clientSecret, baseUrl) {
|
|
688
697
|
try {
|
|
689
698
|
var customerEmail = '';
|
|
@@ -1330,7 +1330,8 @@ function __normalizeAdminFormRow(row, defaults) {
|
|
|
1330
1330
|
var camel = k.replace(/_([a-z])/g, function(_, ch) { return ch.toUpperCase() })
|
|
1331
1331
|
var v = row[k]
|
|
1332
1332
|
if (v === undefined) v = row[camel]
|
|
1333
|
-
|
|
1333
|
+
// A per-language copy (\`es_tags\`) holds the same shape as \`tags\`.
|
|
1334
|
+
if (k === 'tags' || /^.{2,5}_tags$/.test(k)) {
|
|
1334
1335
|
v = __normalizeTagsForFormInput(v)
|
|
1335
1336
|
}
|
|
1336
1337
|
if (k === 'gallery_images' || k === 'additional_image_urls') {
|
|
@@ -1401,7 +1402,7 @@ function __normalizeAdminFormRow(row, defaults) {
|
|
|
1401
1402
|
nodes: s.nodes.map((n) => ({
|
|
1402
1403
|
id: n.id,
|
|
1403
1404
|
type: n.type,
|
|
1404
|
-
config: redactServerNodeConfig(n.config, s.env),
|
|
1405
|
+
config: redactServerNodeConfig(n.config, s.env, n.type),
|
|
1405
1406
|
stepNumber: n.stepNumber,
|
|
1406
1407
|
label: n.label,
|
|
1407
1408
|
})),
|
|
@@ -1425,7 +1426,7 @@ function __normalizeAdminFormRow(row, defaults) {
|
|
|
1425
1426
|
return {
|
|
1426
1427
|
id: n.id,
|
|
1427
1428
|
type: n.type,
|
|
1428
|
-
config: redactServerNodeConfig(n.config, env),
|
|
1429
|
+
config: redactServerNodeConfig(n.config, env, n.type),
|
|
1429
1430
|
stepNumber: n.stepNumber,
|
|
1430
1431
|
label: n.label,
|
|
1431
1432
|
executionEnv: env,
|
|
@@ -62,13 +62,19 @@ import {
|
|
|
62
62
|
getDatabaseDriverDependencies,
|
|
63
63
|
} from './auth-generator'
|
|
64
64
|
import { generateInvoiceFiles, resolveInvoiceDataSource } from './invoice'
|
|
65
|
+
import { ensureSentEmailLogModule, hasEmailSendingNodeType } from './sent-email-log'
|
|
66
|
+
import { ensureEmailLocaleModule, resolveEmailLocaleConfig } from './email-locale'
|
|
67
|
+
import { workflowUtilsImportLine, workflowUtilsRequireLine } from './workflow-utils-alias'
|
|
65
68
|
import { generateWebhookFiles } from './webhook-generator'
|
|
66
69
|
import { needsDataAPIRoute, generateDataAPIRoute } from './data-api-route-generator'
|
|
67
70
|
import {
|
|
68
71
|
generateAccountDeleteRoute,
|
|
69
72
|
accountDeleteRouteDependencies,
|
|
70
73
|
} from './account-delete-route-generator'
|
|
71
|
-
import {
|
|
74
|
+
import {
|
|
75
|
+
readLocalizedEmailTemplates,
|
|
76
|
+
transactionalEmailDependencies,
|
|
77
|
+
} from './transactional-email-code'
|
|
72
78
|
import {
|
|
73
79
|
needsRuntimeStorageRoute,
|
|
74
80
|
generateRuntimeStorageUploadRoute,
|
|
@@ -347,13 +353,21 @@ export class NextWorkflowProjectPlugin implements ProjectPlugin {
|
|
|
347
353
|
const customNodes = uidl.workflows.customNodes || {}
|
|
348
354
|
const usedNodeTypes = collectUsedNodeTypes(uidl.workflows)
|
|
349
355
|
|
|
356
|
+
// Server routes that run a mail-sending node require the sent-email
|
|
357
|
+
// ledger module (see generateNodeHandlersForSegment).
|
|
358
|
+
if (hasEmailSendingNodeType(usedNodeTypes)) {
|
|
359
|
+
ensureSentEmailLogModule(structure)
|
|
360
|
+
}
|
|
361
|
+
|
|
350
362
|
files.set('workflow-runtime-utils', {
|
|
351
363
|
path: ['utils', 'workflows'],
|
|
352
364
|
files: [
|
|
353
365
|
{
|
|
354
366
|
name: 'runtime-utils',
|
|
355
367
|
fileType: FileType.JS,
|
|
356
|
-
content: generateSharedRuntimeUtilsCode(
|
|
368
|
+
content: generateSharedRuntimeUtilsCode({
|
|
369
|
+
emailLocales: resolveEmailLocaleConfig(uidl),
|
|
370
|
+
}),
|
|
357
371
|
},
|
|
358
372
|
],
|
|
359
373
|
})
|
|
@@ -655,6 +669,7 @@ export class NextWorkflowProjectPlugin implements ProjectPlugin {
|
|
|
655
669
|
const emailSecretEnvName =
|
|
656
670
|
extractSecretEnvName(deleteConfig.apiKey) || extractSecretEnvName(deleteConfig.serverToken)
|
|
657
671
|
|
|
672
|
+
ensureEmailLocaleModule(structure)
|
|
658
673
|
files.set('account-delete-current-route', {
|
|
659
674
|
path: ['pages', 'api', 'account'],
|
|
660
675
|
files: [
|
|
@@ -668,6 +683,7 @@ export class NextWorkflowProjectPlugin implements ProjectPlugin {
|
|
|
668
683
|
emailSecretEnvName,
|
|
669
684
|
emailSubject: typeof deleteConfig.subject === 'string' ? deleteConfig.subject : '',
|
|
670
685
|
emailBodyHtml: typeof deleteConfig.body === 'string' ? deleteConfig.body : '',
|
|
686
|
+
localizedTemplates: readLocalizedEmailTemplates(deleteConfig.localizedTemplates),
|
|
671
687
|
siteName: uidl.name || '',
|
|
672
688
|
deletedEmailPattern:
|
|
673
689
|
typeof deleteConfig.deletedEmailPattern === 'string'
|
|
@@ -684,6 +700,10 @@ export class NextWorkflowProjectPlugin implements ProjectPlugin {
|
|
|
684
700
|
dependencies[pkg] = version
|
|
685
701
|
}
|
|
686
702
|
}
|
|
703
|
+
// A configured provider means the route records its sends.
|
|
704
|
+
if (Object.keys(providerDeps).length > 0) {
|
|
705
|
+
ensureSentEmailLogModule(structure)
|
|
706
|
+
}
|
|
687
707
|
}
|
|
688
708
|
|
|
689
709
|
if (needsRuntimeStorageRoute(usedNodeTypes)) {
|
|
@@ -1175,7 +1195,10 @@ export class NextWorkflowProjectPlugin implements ProjectPlugin {
|
|
|
1175
1195
|
})
|
|
1176
1196
|
.join(',\n')
|
|
1177
1197
|
|
|
1198
|
+
// Bound before the map so a handler can reach the runtime's helpers by the
|
|
1199
|
+
// shared alias (see workflow-utils-alias.ts).
|
|
1178
1200
|
return `// Auto-generated workflow node handlers (${env})
|
|
1201
|
+
${workflowUtilsRequireLine('./runtime-utils')}
|
|
1179
1202
|
|
|
1180
1203
|
module.exports = {
|
|
1181
1204
|
${entries}
|
|
@@ -1255,7 +1278,7 @@ ${entries}
|
|
|
1255
1278
|
const nodesJson = JSON.stringify(
|
|
1256
1279
|
(cn.nodes || []).map((n: any) => ({
|
|
1257
1280
|
...n,
|
|
1258
|
-
config: redactServerNodeConfig(n.config, resolveNodeExecutionEnv(n)),
|
|
1281
|
+
config: redactServerNodeConfig(n.config, resolveNodeExecutionEnv(n), n.type),
|
|
1259
1282
|
// Runtime marker consumed by clientExecutableBranchNodes (client
|
|
1260
1283
|
// runtime) so streaming on-stream/on-end branches never execute
|
|
1261
1284
|
// server nodes (whose config was just redacted) client-side.
|
|
@@ -1299,7 +1322,7 @@ ${entries}
|
|
|
1299
1322
|
nodes: s.nodes.map((n) => ({
|
|
1300
1323
|
id: n.id,
|
|
1301
1324
|
type: n.type,
|
|
1302
|
-
config: redactServerNodeConfig(n.config, s.env),
|
|
1325
|
+
config: redactServerNodeConfig(n.config, s.env, n.type),
|
|
1303
1326
|
stepNumber: n.stepNumber,
|
|
1304
1327
|
label: n.label,
|
|
1305
1328
|
})),
|
|
@@ -1645,12 +1668,16 @@ module.exports = __customNodeRegistry;
|
|
|
1645
1668
|
const welcomeSecretEnvName =
|
|
1646
1669
|
extractSecretEnvName(signupConfig.apiKey) || extractSecretEnvName(signupConfig.serverToken)
|
|
1647
1670
|
|
|
1671
|
+
// The route reads the signup page's language off the request, so the
|
|
1672
|
+
// locale module must exist whether or not a welcome email is configured.
|
|
1673
|
+
ensureEmailLocaleModule(structure)
|
|
1648
1674
|
const signupRouteCode = generateSignupRouteFile(auth, {
|
|
1649
1675
|
emailProvider: welcomeProvider,
|
|
1650
1676
|
fromEmail: typeof signupConfig.from === 'string' ? signupConfig.from : '',
|
|
1651
1677
|
emailSecretEnvName: welcomeSecretEnvName,
|
|
1652
1678
|
emailSubject: typeof signupConfig.subject === 'string' ? signupConfig.subject : '',
|
|
1653
1679
|
emailBodyHtml: typeof signupConfig.body === 'string' ? signupConfig.body : '',
|
|
1680
|
+
localizedTemplates: readLocalizedEmailTemplates(signupConfig.localizedTemplates),
|
|
1654
1681
|
siteName: uidl.name || '',
|
|
1655
1682
|
})
|
|
1656
1683
|
files.set('auth-signup-route', {
|
|
@@ -1670,6 +1697,10 @@ module.exports = __customNodeRegistry;
|
|
|
1670
1697
|
dependencies[pkg] = version
|
|
1671
1698
|
}
|
|
1672
1699
|
}
|
|
1700
|
+
// A configured provider means the route records its sends.
|
|
1701
|
+
if (Object.keys(welcomeProviderDeps).length > 0) {
|
|
1702
|
+
ensureSentEmailLogModule(structure)
|
|
1703
|
+
}
|
|
1673
1704
|
}
|
|
1674
1705
|
|
|
1675
1706
|
const nextAuthRouteCode = generateNextAuthRouteFile()
|
|
@@ -1953,6 +1984,7 @@ module.exports = __customNodeRegistry;
|
|
|
1953
1984
|
return `// Auto-generated global workflow hooks
|
|
1954
1985
|
import { useEffect } from 'react';
|
|
1955
1986
|
${needsRouter ? `import Router from 'next/router';\n` : ''}import workflowRuntime from './runtime';
|
|
1987
|
+
${workflowUtilsImportLine('./runtime-utils')}
|
|
1956
1988
|
const executeWorkflowWithSegments = workflowRuntime.executeWorkflowWithSegments;
|
|
1957
1989
|
|
|
1958
1990
|
export function useGlobalWorkflows() {
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* How a node handler reaches the shared workflow runtime (`runtime-utils.js`).
|
|
3
|
+
*
|
|
4
|
+
* Handlers are authored as plain functions and inlined by `.toString()` into
|
|
5
|
+
* several generated files — the client and server handler maps, the global
|
|
6
|
+
* workflows hook and every API route — which sit in different directories, so
|
|
7
|
+
* a `require` with a relative path inside a handler could not resolve from all
|
|
8
|
+
* of them. Instead, each of those files binds the runtime to this one
|
|
9
|
+
* identifier before its first handler, and a handler that needs a helper the
|
|
10
|
+
* runtime owns (currently the locale-aware `localizeHref`) calls it through
|
|
11
|
+
* the alias. `nodes/workflow-utils-global.d.ts` declares it for the handler
|
|
12
|
+
* sources; the tests that evaluate emitted handler code bind it themselves.
|
|
13
|
+
*/
|
|
14
|
+
export const WORKFLOW_UTILS_ALIAS = '__workflowUtils'
|
|
15
|
+
|
|
16
|
+
/** The binding for a CommonJS file: `var __workflowUtils = require('<specifier>');` */
|
|
17
|
+
export const workflowUtilsRequireLine = (specifier: string): string =>
|
|
18
|
+
`var ${WORKFLOW_UTILS_ALIAS} = require('${specifier}');`
|
|
19
|
+
|
|
20
|
+
/** The binding for an ES module file: `import __workflowUtils from '<specifier>';` */
|
|
21
|
+
export const workflowUtilsImportLine = (specifier: string): string =>
|
|
22
|
+
`import ${WORKFLOW_UTILS_ALIAS} from '${specifier}';`
|
|
23
|
+
|
|
24
|
+
/** The binding for a file that already holds the runtime in `<identifier>`. */
|
|
25
|
+
export const workflowUtilsAliasLine = (identifier: string): string =>
|
|
26
|
+
`const ${WORKFLOW_UTILS_ALIAS} = ${identifier};`
|