@teleporthq/teleport-plugin-next-workflows 0.45.0 → 0.45.2

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.
Files changed (59) hide show
  1. package/__tests__/auth-signup-route.test.ts +39 -2
  2. package/__tests__/resolve-handler-entry-name.test.ts +21 -0
  3. package/dist/cjs/auth-generator.d.ts.map +1 -1
  4. package/dist/cjs/auth-generator.js +2 -1
  5. package/dist/cjs/auth-generator.js.map +1 -1
  6. package/dist/cjs/nodes/email/outbound-message-guard.d.ts +6 -3
  7. package/dist/cjs/nodes/email/outbound-message-guard.d.ts.map +1 -1
  8. package/dist/cjs/nodes/email/outbound-message-guard.js +8 -4
  9. package/dist/cjs/nodes/email/outbound-message-guard.js.map +1 -1
  10. package/dist/cjs/nodes/sms/sms-infobip.js +1 -1
  11. package/dist/cjs/nodes/sms/sms-infobip.js.map +1 -1
  12. package/dist/cjs/nodes/sms/sms-smsapi.js +1 -1
  13. package/dist/cjs/nodes/sms/sms-smsapi.js.map +1 -1
  14. package/dist/cjs/nodes/sms/sms-textmagic.js +1 -1
  15. package/dist/cjs/nodes/sms/sms-textmagic.js.map +1 -1
  16. package/dist/cjs/nodes/sms/sms-twilio.js +1 -1
  17. package/dist/cjs/nodes/sms/sms-twilio.js.map +1 -1
  18. package/dist/cjs/nodes/types.d.ts +1 -1
  19. package/dist/cjs/nodes/types.d.ts.map +1 -1
  20. package/dist/cjs/nodes/types.js +7 -2
  21. package/dist/cjs/nodes/types.js.map +1 -1
  22. package/dist/cjs/transactional-email-code.d.ts +1 -1
  23. package/dist/cjs/transactional-email-code.d.ts.map +1 -1
  24. package/dist/cjs/transactional-email-code.js +6 -3
  25. package/dist/cjs/transactional-email-code.js.map +1 -1
  26. package/dist/cjs/tsconfig.tsbuildinfo +1 -1
  27. package/dist/esm/auth-generator.d.ts.map +1 -1
  28. package/dist/esm/auth-generator.js +2 -1
  29. package/dist/esm/auth-generator.js.map +1 -1
  30. package/dist/esm/nodes/email/outbound-message-guard.d.ts +6 -3
  31. package/dist/esm/nodes/email/outbound-message-guard.d.ts.map +1 -1
  32. package/dist/esm/nodes/email/outbound-message-guard.js +8 -4
  33. package/dist/esm/nodes/email/outbound-message-guard.js.map +1 -1
  34. package/dist/esm/nodes/sms/sms-infobip.js +1 -1
  35. package/dist/esm/nodes/sms/sms-infobip.js.map +1 -1
  36. package/dist/esm/nodes/sms/sms-smsapi.js +1 -1
  37. package/dist/esm/nodes/sms/sms-smsapi.js.map +1 -1
  38. package/dist/esm/nodes/sms/sms-textmagic.js +1 -1
  39. package/dist/esm/nodes/sms/sms-textmagic.js.map +1 -1
  40. package/dist/esm/nodes/sms/sms-twilio.js +1 -1
  41. package/dist/esm/nodes/sms/sms-twilio.js.map +1 -1
  42. package/dist/esm/nodes/types.d.ts +1 -1
  43. package/dist/esm/nodes/types.d.ts.map +1 -1
  44. package/dist/esm/nodes/types.js +7 -2
  45. package/dist/esm/nodes/types.js.map +1 -1
  46. package/dist/esm/transactional-email-code.d.ts +1 -1
  47. package/dist/esm/transactional-email-code.d.ts.map +1 -1
  48. package/dist/esm/transactional-email-code.js +6 -3
  49. package/dist/esm/transactional-email-code.js.map +1 -1
  50. package/dist/esm/tsconfig.tsbuildinfo +1 -1
  51. package/package.json +2 -2
  52. package/src/auth-generator.ts +8 -4
  53. package/src/nodes/email/outbound-message-guard.ts +13 -7
  54. package/src/nodes/sms/sms-infobip.ts +1 -1
  55. package/src/nodes/sms/sms-smsapi.ts +1 -1
  56. package/src/nodes/sms/sms-textmagic.ts +1 -1
  57. package/src/nodes/sms/sms-twilio.ts +1 -1
  58. package/src/nodes/types.ts +7 -2
  59. package/src/transactional-email-code.ts +7 -3
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@teleporthq/teleport-plugin-next-workflows",
3
- "version": "0.45.0",
3
+ "version": "0.45.2",
4
4
  "description": "A plugin for workflow code generation in Next.js projects.",
5
5
  "author": "teleportHQ",
6
6
  "license": "MIT",
@@ -69,5 +69,5 @@
69
69
  "@teleporthq/teleport-shared": "^0.45.0",
70
70
  "@teleporthq/teleport-types": "^0.45.0"
71
71
  },
72
- "gitHead": "72396d1815ef1f0c184f27126dbfd0fd9c6dc0f8"
72
+ "gitHead": "3be925a09c56ec0afe44940a623cbfcc54e5170f"
73
73
  }
@@ -2297,6 +2297,8 @@ const generateKnownAddressEmailCode = (options: {
2297
2297
  sender: { provider: string | null; from: string; secretEnv: string }
2298
2298
  pagePath: string
2299
2299
  tokenInFragment: boolean
2300
+ /** The route already declares `__emailSender` (the welcome send brings it). */
2301
+ senderHelperDeclared: boolean
2300
2302
  }): string => {
2301
2303
  const { sender } = options
2302
2304
  const senderConstants = `
@@ -2320,10 +2322,11 @@ async function sendSetPasswordEmail() {
2320
2322
  const ttlMinutes = Math.round(PASSWORD_RESET_TOKEN_TTL_SECONDS / 60)
2321
2323
  // Where the link carries the token, as the forgot-password link does.
2322
2324
  const tokenLinkPrefix = options.tokenInFragment ? '#token=' : '?token='
2323
- const noticeSend = generateProviderSendFunction(sender.provider).replace(
2324
- 'async function __sendProviderEmail(',
2325
- 'async function __sendNoticeEmail('
2326
- )
2325
+ const noticeSend = generateProviderSendFunction(
2326
+ sender.provider,
2327
+ undefined,
2328
+ !options.senderHelperDeclared
2329
+ ).replace('async function __sendProviderEmail(', 'async function __sendNoticeEmail(')
2327
2330
  return `${senderConstants}
2328
2331
 
2329
2332
  ${noticeSend}
@@ -2537,6 +2540,7 @@ ${generateKnownAddressEmailCode({
2537
2540
  sender: noticeSender,
2538
2541
  pagePath: setPasswordPagePath,
2539
2542
  tokenInFragment: signup.tokenInFragment === true,
2543
+ senderHelperDeclared: !!welcomeProvider,
2540
2544
  })}
2541
2545
 
2542
2546
  function waitUntilElapsed(startedAt, ms) {
@@ -547,25 +547,31 @@ var __outboundMessageGuard = typeof __outboundMessageGuard !== 'undefined' ? __o
547
547
  export interface OutboundHandlerSourceOptions {
548
548
  /** Helper source appended after the handler (the sender, the recipients). */
549
549
  extraSource?: string
550
- /** When set, the serialized source is refused if it names a module. */
551
- nodeType?: string
550
+ /**
551
+ * The node's type. Names the handler (see below), and the serialized source
552
+ * is refused if it names a module.
553
+ */
554
+ nodeType: string
552
555
  }
553
556
 
554
557
  export const outboundMessageHandlerSources = (
555
558
  handler: HandlerFn,
556
- options: OutboundHandlerSourceOptions = {}
559
+ options: OutboundHandlerSourceOptions
557
560
  ): Pick<NodeHandlerGenerator, 'generateHandler' | 'generateServerHandler'> => {
558
561
  const extra = options.extraSource ? '\n' + options.extraSource : ''
559
- const finish = (source: string): string =>
560
- options.nodeType ? assertHandlerHasNoModuleRefs(source, options.nodeType) : source
562
+ const finish = (source: string): string => assertHandlerHasNoModuleRefs(source, options.nodeType)
563
+ // The handler arrives by value from its node's module level, where a
564
+ // consumer's minifier inlines it anonymous; it gets the name the emitters
565
+ // look for (see resolveHandlerEntryName).
566
+ const handlerSource = () => handlerToString(handler, options.nodeType.replace(/-/g, '_'))
561
567
  return {
562
568
  generateHandler: () =>
563
- finish(generateOutboundMessageGuardCode() + '\n\n' + handlerToString(handler) + extra),
569
+ finish(generateOutboundMessageGuardCode() + '\n\n' + handlerSource() + extra),
564
570
  generateServerHandler: (serverOptions?: ServerHandlerOptions) =>
565
571
  finish(
566
572
  generateOutboundMessageGuardCode(serverHandlerPrefix(serverOptions)) +
567
573
  '\n\n' +
568
- handlerToString(handler) +
574
+ handlerSource() +
569
575
  extra
570
576
  ),
571
577
  }
@@ -72,5 +72,5 @@ async function sms_infobip(config: any, context: Record<string, unknown>) {
72
72
  export const smsInfobip: NodeHandlerGenerator = {
73
73
  nodeType: 'sms-infobip',
74
74
  executionEnv: 'server',
75
- ...outboundMessageHandlerSources(sms_infobip),
75
+ ...outboundMessageHandlerSources(sms_infobip, { nodeType: 'sms-infobip' }),
76
76
  }
@@ -57,5 +57,5 @@ async function sms_smsapi(config: any, context: Record<string, unknown>) {
57
57
  export const smsSmsapi: NodeHandlerGenerator = {
58
58
  nodeType: 'sms-smsapi',
59
59
  executionEnv: 'server',
60
- ...outboundMessageHandlerSources(sms_smsapi),
60
+ ...outboundMessageHandlerSources(sms_smsapi, { nodeType: 'sms-smsapi' }),
61
61
  }
@@ -50,5 +50,5 @@ async function sms_textmagic(config: any, context: Record<string, unknown>) {
50
50
  export const smsTextmagic: NodeHandlerGenerator = {
51
51
  nodeType: 'sms-textmagic',
52
52
  executionEnv: 'server',
53
- ...outboundMessageHandlerSources(sms_textmagic),
53
+ ...outboundMessageHandlerSources(sms_textmagic, { nodeType: 'sms-textmagic' }),
54
54
  }
@@ -56,5 +56,5 @@ export const smsTwilio: NodeHandlerGenerator = {
56
56
  dependencies: {
57
57
  twilio: '^5.0.0',
58
58
  },
59
- ...outboundMessageHandlerSources(sms_twilio),
59
+ ...outboundMessageHandlerSources(sms_twilio, { nodeType: 'sms-twilio' }),
60
60
  }
@@ -1,7 +1,12 @@
1
1
  export type HandlerFn = (config: unknown, context: Record<string, unknown>) => Promise<unknown>
2
2
 
3
- export function handlerToString(fn: HandlerFn): string {
4
- return fn.toString()
3
+ // `name` gives the handler its name back when a consumer's minifier inlined
4
+ // it, as an anonymous expression, into the one call that reads it (a handler
5
+ // passed by value at module level): `async function(e,t){…}` cannot stand as
6
+ // a statement, `async function email_resend(e,t){…}` can.
7
+ export function handlerToString(fn: HandlerFn, name?: string): string {
8
+ const source = fn.toString()
9
+ return name ? source.replace(/^(async\s+)?function\s*\(/, `$1function ${name}(`) : source
5
10
  }
6
11
 
7
12
  // A `function` keyword opening a line with no name after it: an anonymous
@@ -67,16 +67,20 @@ export const EXISTING_ACCOUNT_EMAIL = 'existing-account'
67
67
  // is configured the function is a no-op so the route stays self-contained and
68
68
  // never throws. With `ledger`, the provider function is emitted as
69
69
  // `__sendProviderEmailRaw` and `__sendProviderEmail` records every attempt
70
- // (success or throw) before returning / rethrowing.
70
+ // (success or throw) before returning / rethrowing. `withSenderHelper: false`
71
+ // leaves the helper out, for a second send in a file that already declares it:
72
+ // Next compiles a route as a module, where a function declared twice fails the
73
+ // build ("the name `__emailSender` is defined multiple times").
71
74
  export const generateProviderSendFunction = (
72
75
  provider?: string | null,
73
- ledger?: TransactionalEmailLedger
76
+ ledger?: TransactionalEmailLedger,
77
+ withSenderHelper = true
74
78
  ): string => {
75
79
  const raw = generateRawProviderSendFunction(provider)
76
80
  if (!provider || !SUPPORTED_EMAIL_PROVIDERS.has(provider)) {
77
81
  return raw
78
82
  }
79
- const senderHelper = EmailSender.generateEmailSenderHelperCode()
83
+ const senderHelper = withSenderHelper ? EmailSender.generateEmailSenderHelperCode() : ''
80
84
  if (!ledger) {
81
85
  return `${senderHelper}
82
86
  ${raw}`