@teleporthq/teleport-plugin-next-workflows 0.44.7 → 0.44.9

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 (141) hide show
  1. package/__tests__/_helpers/load-server-runtime.ts +6 -2
  2. package/__tests__/_helpers/run-account-delete-route.ts +140 -0
  3. package/__tests__/account-delete-current-password.test.ts +73 -0
  4. package/__tests__/account-delete-password-check.test.ts +113 -0
  5. package/__tests__/account-delete-visitor-details.test.ts +206 -0
  6. package/__tests__/auth-password-change-ends-sessions.test.ts +178 -0
  7. package/__tests__/credential-result-reply.test.ts +509 -0
  8. package/__tests__/data-api-invalid-body.test.ts +110 -0
  9. package/__tests__/data-node-not-awaited.test.ts +7 -6
  10. package/__tests__/invoice-payment-line.test.ts +68 -0
  11. package/__tests__/invoice-tender.test.ts +116 -0
  12. package/__tests__/pending-work-after-reply.test.ts +294 -0
  13. package/__tests__/runtime-condition-operands.test.ts +86 -0
  14. package/__tests__/webhook-delivery-lease.test.ts +68 -6
  15. package/dist/cjs/account-delete-route-generator.d.ts +7 -2
  16. package/dist/cjs/account-delete-route-generator.d.ts.map +1 -1
  17. package/dist/cjs/account-delete-route-generator.js +90 -43
  18. package/dist/cjs/account-delete-route-generator.js.map +1 -1
  19. package/dist/cjs/api-route-generator.d.ts.map +1 -1
  20. package/dist/cjs/api-route-generator.js +17 -15
  21. package/dist/cjs/api-route-generator.js.map +1 -1
  22. package/dist/cjs/auth-generator.d.ts.map +1 -1
  23. package/dist/cjs/auth-generator.js +34 -1
  24. package/dist/cjs/auth-generator.js.map +1 -1
  25. package/dist/cjs/await-result.d.ts +13 -5
  26. package/dist/cjs/await-result.d.ts.map +1 -1
  27. package/dist/cjs/await-result.js +19 -8
  28. package/dist/cjs/await-result.js.map +1 -1
  29. package/dist/cjs/credential-results.d.ts +18 -0
  30. package/dist/cjs/credential-results.d.ts.map +1 -0
  31. package/dist/cjs/credential-results.js +72 -0
  32. package/dist/cjs/credential-results.js.map +1 -0
  33. package/dist/cjs/data-api-route-generator.d.ts.map +1 -1
  34. package/dist/cjs/data-api-route-generator.js +9 -1
  35. package/dist/cjs/data-api-route-generator.js.map +1 -1
  36. package/dist/cjs/executor-generator.d.ts.map +1 -1
  37. package/dist/cjs/executor-generator.js +26 -7
  38. package/dist/cjs/executor-generator.js.map +1 -1
  39. package/dist/cjs/invoice/invoice-html-code.d.ts.map +1 -1
  40. package/dist/cjs/invoice/invoice-html-code.js +96 -5
  41. package/dist/cjs/invoice/invoice-html-code.js.map +1 -1
  42. package/dist/cjs/nodes/account/account-delete-current.d.ts.map +1 -1
  43. package/dist/cjs/nodes/account/account-delete-current.js +4 -1
  44. package/dist/cjs/nodes/account/account-delete-current.js.map +1 -1
  45. package/dist/cjs/nodes/account/account-hash-password.d.ts.map +1 -1
  46. package/dist/cjs/nodes/account/account-hash-password.js +1 -0
  47. package/dist/cjs/nodes/account/account-hash-password.js.map +1 -1
  48. package/dist/cjs/nodes/types.d.ts +6 -0
  49. package/dist/cjs/nodes/types.d.ts.map +1 -1
  50. package/dist/cjs/server-runtime-code.d.ts +8 -0
  51. package/dist/cjs/server-runtime-code.d.ts.map +1 -1
  52. package/dist/cjs/server-runtime-code.js +127 -0
  53. package/dist/cjs/server-runtime-code.js.map +1 -1
  54. package/dist/cjs/transactional-email-code.d.ts +7 -0
  55. package/dist/cjs/transactional-email-code.d.ts.map +1 -1
  56. package/dist/cjs/transactional-email-code.js +5 -5
  57. package/dist/cjs/transactional-email-code.js.map +1 -1
  58. package/dist/cjs/tsconfig.tsbuildinfo +1 -1
  59. package/dist/cjs/vercel-functions.d.ts +34 -0
  60. package/dist/cjs/vercel-functions.d.ts.map +1 -0
  61. package/dist/cjs/vercel-functions.js +62 -0
  62. package/dist/cjs/vercel-functions.js.map +1 -0
  63. package/dist/cjs/webhook-delivery-lease/webhook-delivery-lease-code.d.ts +6 -0
  64. package/dist/cjs/webhook-delivery-lease/webhook-delivery-lease-code.d.ts.map +1 -1
  65. package/dist/cjs/webhook-delivery-lease/webhook-delivery-lease-code.js +26 -11
  66. package/dist/cjs/webhook-delivery-lease/webhook-delivery-lease-code.js.map +1 -1
  67. package/dist/cjs/workflow-project-plugin.d.ts.map +1 -1
  68. package/dist/cjs/workflow-project-plugin.js +3 -0
  69. package/dist/cjs/workflow-project-plugin.js.map +1 -1
  70. package/dist/esm/account-delete-route-generator.d.ts +7 -2
  71. package/dist/esm/account-delete-route-generator.d.ts.map +1 -1
  72. package/dist/esm/account-delete-route-generator.js +90 -43
  73. package/dist/esm/account-delete-route-generator.js.map +1 -1
  74. package/dist/esm/api-route-generator.d.ts.map +1 -1
  75. package/dist/esm/api-route-generator.js +17 -15
  76. package/dist/esm/api-route-generator.js.map +1 -1
  77. package/dist/esm/auth-generator.d.ts.map +1 -1
  78. package/dist/esm/auth-generator.js +34 -1
  79. package/dist/esm/auth-generator.js.map +1 -1
  80. package/dist/esm/await-result.d.ts +13 -5
  81. package/dist/esm/await-result.d.ts.map +1 -1
  82. package/dist/esm/await-result.js +18 -7
  83. package/dist/esm/await-result.js.map +1 -1
  84. package/dist/esm/credential-results.d.ts +18 -0
  85. package/dist/esm/credential-results.d.ts.map +1 -0
  86. package/dist/esm/credential-results.js +68 -0
  87. package/dist/esm/credential-results.js.map +1 -0
  88. package/dist/esm/data-api-route-generator.d.ts.map +1 -1
  89. package/dist/esm/data-api-route-generator.js +9 -1
  90. package/dist/esm/data-api-route-generator.js.map +1 -1
  91. package/dist/esm/executor-generator.d.ts.map +1 -1
  92. package/dist/esm/executor-generator.js +26 -7
  93. package/dist/esm/executor-generator.js.map +1 -1
  94. package/dist/esm/invoice/invoice-html-code.d.ts.map +1 -1
  95. package/dist/esm/invoice/invoice-html-code.js +96 -5
  96. package/dist/esm/invoice/invoice-html-code.js.map +1 -1
  97. package/dist/esm/nodes/account/account-delete-current.d.ts.map +1 -1
  98. package/dist/esm/nodes/account/account-delete-current.js +4 -1
  99. package/dist/esm/nodes/account/account-delete-current.js.map +1 -1
  100. package/dist/esm/nodes/account/account-hash-password.d.ts.map +1 -1
  101. package/dist/esm/nodes/account/account-hash-password.js +1 -0
  102. package/dist/esm/nodes/account/account-hash-password.js.map +1 -1
  103. package/dist/esm/nodes/types.d.ts +6 -0
  104. package/dist/esm/nodes/types.d.ts.map +1 -1
  105. package/dist/esm/server-runtime-code.d.ts +8 -0
  106. package/dist/esm/server-runtime-code.d.ts.map +1 -1
  107. package/dist/esm/server-runtime-code.js +127 -0
  108. package/dist/esm/server-runtime-code.js.map +1 -1
  109. package/dist/esm/transactional-email-code.d.ts +7 -0
  110. package/dist/esm/transactional-email-code.d.ts.map +1 -1
  111. package/dist/esm/transactional-email-code.js +5 -5
  112. package/dist/esm/transactional-email-code.js.map +1 -1
  113. package/dist/esm/tsconfig.tsbuildinfo +1 -1
  114. package/dist/esm/vercel-functions.d.ts +34 -0
  115. package/dist/esm/vercel-functions.d.ts.map +1 -0
  116. package/dist/esm/vercel-functions.js +57 -0
  117. package/dist/esm/vercel-functions.js.map +1 -0
  118. package/dist/esm/webhook-delivery-lease/webhook-delivery-lease-code.d.ts +6 -0
  119. package/dist/esm/webhook-delivery-lease/webhook-delivery-lease-code.d.ts.map +1 -1
  120. package/dist/esm/webhook-delivery-lease/webhook-delivery-lease-code.js +26 -11
  121. package/dist/esm/webhook-delivery-lease/webhook-delivery-lease-code.js.map +1 -1
  122. package/dist/esm/workflow-project-plugin.d.ts.map +1 -1
  123. package/dist/esm/workflow-project-plugin.js +3 -0
  124. package/dist/esm/workflow-project-plugin.js.map +1 -1
  125. package/package.json +2 -2
  126. package/src/account-delete-route-generator.ts +97 -45
  127. package/src/api-route-generator.ts +17 -15
  128. package/src/auth-generator.ts +34 -1
  129. package/src/await-result.ts +19 -7
  130. package/src/credential-results.ts +71 -0
  131. package/src/data-api-route-generator.ts +9 -1
  132. package/src/executor-generator.ts +26 -7
  133. package/src/invoice/invoice-html-code.ts +96 -5
  134. package/src/nodes/account/account-delete-current.ts +4 -1
  135. package/src/nodes/account/account-hash-password.ts +1 -0
  136. package/src/nodes/types.ts +6 -0
  137. package/src/server-runtime-code.ts +128 -0
  138. package/src/transactional-email-code.ts +12 -5
  139. package/src/vercel-functions.ts +67 -0
  140. package/src/webhook-delivery-lease/webhook-delivery-lease-code.ts +26 -11
  141. package/src/workflow-project-plugin.ts +3 -0
@@ -1 +1 @@
1
- {"version":3,"file":"server-runtime-code.d.ts","sourceRoot":"","sources":["../../src/server-runtime-code.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+BG;AACH,eAAO,MAAM,yBAAyB,QAAO,MAyQ5C,CAAA"}
1
+ {"version":3,"file":"server-runtime-code.d.ts","sourceRoot":"","sources":["../../src/server-runtime-code.ts"],"names":[],"mappings":"AAEA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAuCG;AACH,eAAO,MAAM,yBAAyB,QAAO,MA+X5C,CAAA"}
@@ -1,3 +1,4 @@
1
+ import { generateVercelFunctionsLoaderCode } from './vercel-functions';
1
2
  /**
2
3
  * `utils/workflows/server-runtime.js`: what every server route loads. It is the
3
4
  * shared runtime utilities plus the parts only a server may run — the signed
@@ -27,6 +28,14 @@
27
28
  * that needs a trustworthy figure (a price, an owner) reads it from the
28
29
  * database itself.
29
30
  *
31
+ * A result that is a credential (a password hash, see credential-results.ts)
32
+ * makes the same trip SEALED: `segmentReply` replies it encrypted with a key
33
+ * derived from NEXTAUTH_SECRET (AES-256-GCM) and signs the sealed form, and
34
+ * `claimSegmentContext` opens every sealed value a request hands it (a
35
+ * relayed result once its signature holds). The browser relays it without
36
+ * ever reading it, and a later segment's reply hands back the sealed form,
37
+ * never the opened one.
38
+ *
30
39
  * The facts about the graph each route needs are baked into its
31
40
  * SEGMENT_CONFIG at generation time (see segment-trust.ts).
32
41
  */
@@ -34,6 +43,8 @@ export const generateServerRuntimeCode = () => `'use strict';
34
43
  var crypto = require('crypto');
35
44
  var utils = require('./runtime-utils');
36
45
 
46
+ ${generateVercelFunctionsLoaderCode()}
47
+
37
48
  var __stepKeyCache = { secret: null, key: null };
38
49
 
39
50
  function stepKey() {
@@ -51,6 +62,59 @@ function mac(text) {
51
62
  return crypto.createHmac('sha256', stepKey()).update(text).digest('hex');
52
63
  }
53
64
 
65
+ var __sealKeyCache = { secret: null, key: null };
66
+
67
+ function sealKey() {
68
+ var secret = process.env.NEXTAUTH_SECRET || '';
69
+ if (__sealKeyCache.secret !== secret) {
70
+ __sealKeyCache = {
71
+ secret: secret,
72
+ key: crypto.createHmac('sha256', secret).update('teleport-workflow-seal:v1').digest()
73
+ };
74
+ }
75
+ return __sealKeyCache.key;
76
+ }
77
+
78
+ var SEAL_IV_BYTES = 12;
79
+ var SEAL_TAG_BYTES = 16;
80
+
81
+ var SEAL_AAD = Buffer.from('teleport-workflow-sealed-result:v1', 'utf8');
82
+
83
+ // The sealed form of a credential result; undefined (the result is then not
84
+ // replied at all) without an app secret, whose key anyone could derive.
85
+ function sealResult(value) {
86
+ if (!process.env.NEXTAUTH_SECRET) return undefined;
87
+ var serialized;
88
+ try { serialized = JSON.stringify(value); } catch (e) { return undefined; }
89
+ if (serialized === undefined) return undefined;
90
+ var iv = crypto.randomBytes(SEAL_IV_BYTES);
91
+ var cipher = crypto.createCipheriv('aes-256-gcm', sealKey(), iv);
92
+ cipher.setAAD(SEAL_AAD);
93
+ var data = Buffer.concat([cipher.update(serialized, 'utf8'), cipher.final()]);
94
+ return { __sealed: Buffer.concat([iv, cipher.getAuthTag(), data]).toString('base64') };
95
+ }
96
+
97
+ function isSealedResult(value) {
98
+ return !!value && typeof value === 'object' && !Array.isArray(value) &&
99
+ typeof value.__sealed === 'string' && Object.keys(value).length === 1;
100
+ }
101
+
102
+ // { value } when the sealed form opens under this app's key, else null.
103
+ function openSealedResult(sealed) {
104
+ if (!process.env.NEXTAUTH_SECRET) return null;
105
+ try {
106
+ var raw = Buffer.from(sealed.__sealed, 'base64');
107
+ if (raw.length <= SEAL_IV_BYTES + SEAL_TAG_BYTES) return null;
108
+ var decipher = crypto.createDecipheriv('aes-256-gcm', sealKey(), raw.subarray(0, SEAL_IV_BYTES));
109
+ decipher.setAAD(SEAL_AAD);
110
+ decipher.setAuthTag(raw.subarray(SEAL_IV_BYTES, SEAL_IV_BYTES + SEAL_TAG_BYTES));
111
+ var data = Buffer.concat([decipher.update(raw.subarray(SEAL_IV_BYTES + SEAL_TAG_BYTES)), decipher.final()]);
112
+ return { value: JSON.parse(data.toString('utf8')) };
113
+ } catch (e) {
114
+ return null;
115
+ }
116
+ }
117
+
54
118
  // Without an app secret every key here would derive from '' — a value anyone
55
119
  // can compute — so nothing verifies: relayed server results are dropped and no
56
120
  // request passes as an internal call. (The generator gives every app with
@@ -206,10 +270,48 @@ function resetPreviousResult(segmentConfig, context) {
206
270
  // merge will.
207
271
  var __incomingOrders = new WeakMap();
208
272
 
273
+ // The sealed results this segment opened, so its reply hands the caller back
274
+ // the sealed form it relayed (see resealRelayedResults).
275
+ var __openedResults = new WeakMap();
276
+
277
+ // Opens every sealed value the request hands this segment, so its nodes read
278
+ // the credential itself: a relayed server result (whose signature
279
+ // dropUnsignedResults checked first), or a value the browser holds from one
280
+ // (a custom node's output, the previous result). Only this app's server
281
+ // seals, so what opens is what it sealed.
282
+ function openSealedResults(context) {
283
+ var opened = [];
284
+ Object.keys(context).forEach(function(key) {
285
+ if (isControlKey(key) && key !== '__previousNodeResult') return;
286
+ if (!isSealedResult(context[key])) return;
287
+ var result = openSealedResult(context[key]);
288
+ if (!result) return;
289
+ opened.push({ sealed: context[key], value: result.value });
290
+ context[key] = result.value;
291
+ });
292
+ __openedResults.set(context, opened);
293
+ }
294
+
295
+ // Every reply entry that is an opened value (the value itself, or the previous
296
+ // result taken from it) goes back sealed.
297
+ function resealRelayedResults(context, reply) {
298
+ var opened = __openedResults.get(context) || [];
299
+ if (opened.length === 0) return;
300
+ Object.keys(reply).forEach(function(key) {
301
+ for (var i = 0; i < opened.length; i++) {
302
+ if (reply[key] === opened[i].value) {
303
+ reply[key] = opened[i].sealed;
304
+ return;
305
+ }
306
+ }
307
+ });
308
+ }
309
+
209
310
  function claimSegmentContext(segmentConfig, context) {
210
311
  var orderKeys = readSignedOrder(context);
211
312
  if (orderKeys) restoreOrder(context, orderKeys);
212
313
  dropUnsignedResults(segmentConfig, context, orderKeys);
314
+ openSealedResults(context);
213
315
  stripForeignControlKeys(segmentConfig, context);
214
316
  __incomingOrders.set(context, Object.keys(context).filter(function(k) { return !isControlKey(k); }));
215
317
  utils.claimSegmentContext(segmentConfig, context);
@@ -219,6 +321,13 @@ function claimSegmentContext(segmentConfig, context) {
219
321
 
220
322
  function segmentReply(segmentConfig, context, snapshot) {
221
323
  var reply = utils.segmentReply(segmentConfig, context, snapshot);
324
+ resealRelayedResults(context, reply);
325
+ var credentialIds = utils.credentialResultNodeIds(segmentConfig);
326
+ Object.keys(credentialIds).forEach(function(id) {
327
+ if (context[id] === undefined) return;
328
+ var sealed = sealResult(context[id]);
329
+ if (sealed) reply[id] = sealed;
330
+ });
222
331
  var sigs = {};
223
332
  var incoming = context.__sig && typeof context.__sig === 'object' && !Array.isArray(context.__sig) ? context.__sig : {};
224
333
  Object.keys(incoming).forEach(function(id) {
@@ -288,7 +397,25 @@ function trustedBaseUrl(req) {
288
397
  return origin;
289
398
  }
290
399
 
400
+ // The work a segment's not-awaited steps left running (an invoice being
401
+ // rendered and mailed) must still finish, but the visitor need not wait for
402
+ // it: on Vercel it is handed to waitUntil, which keeps the function running
403
+ // after the reply. Anywhere else the route awaits it before replying, since a
404
+ // function frozen after its reply would drop it.
405
+ function handOffPendingNodePromises(context) {
406
+ var queue = context && context.__pendingNodePromises;
407
+ if (!queue || queue.length === 0) return Promise.resolve();
408
+ // Drained through the queue itself: the route deletes it from the context
409
+ // before replying, and a parallel branch still running pushes onto it.
410
+ var drained = utils.settlePendingNodePromises({ __pendingNodePromises: queue });
411
+ var waitUntil = __vercelWaitUntil();
412
+ if (!waitUntil) return drained;
413
+ waitUntil(drained);
414
+ return Promise.resolve();
415
+ }
416
+
291
417
  module.exports = Object.assign({}, utils, {
418
+ handOffPendingNodePromises: handOffPendingNodePromises,
292
419
  claimSegmentContext: claimSegmentContext,
293
420
  segmentReply: segmentReply,
294
421
  internalRequestHeaders: internalRequestHeaders,
@@ -1 +1 @@
1
- {"version":3,"file":"server-runtime-code.js","sourceRoot":"","sources":["../../src/server-runtime-code.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+BG;AACH,MAAM,CAAC,MAAM,yBAAyB,GAAG,GAAW,EAAE,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAyQtD,CAAA"}
1
+ {"version":3,"file":"server-runtime-code.js","sourceRoot":"","sources":["../../src/server-runtime-code.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iCAAiC,EAAE,MAAM,oBAAoB,CAAA;AAEtE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAuCG;AACH,MAAM,CAAC,MAAM,yBAAyB,GAAG,GAAW,EAAE,CAAC;;;;EAIrD,iCAAiC,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA2XpC,CAAA"}
@@ -17,6 +17,13 @@ export interface TransactionalEmailLedger {
17
17
  source: string;
18
18
  sourceRef: string;
19
19
  relativePrefix: string;
20
+ /**
21
+ * Records the send without the recipient's details: `msg.recordedTo` in
22
+ * place of the address, and neither the body nor the values it was filled
23
+ * with. For an email to someone whose details the route is removing (the
24
+ * farewell after an account deletion).
25
+ */
26
+ withoutRecipientDetails?: boolean;
20
27
  }
21
28
  export declare const generateProviderSendFunction: (provider?: string | null, ledger?: TransactionalEmailLedger) => string;
22
29
  export declare const generateFillTemplateFn: () => string;
@@ -1 +1 @@
1
- {"version":3,"file":"transactional-email-code.d.ts","sourceRoot":"","sources":["../../src/transactional-email-code.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAO,EAAE,2BAA2B,EAAE,MAAM,4BAA4B,CAAA;AAKxE,eAAO,MAAM,yBAAyB,aAMpC,CAAA;AAIF,eAAO,MAAM,8BAA8B,cAC9B,MAAM,GAAG,IAAI,KACvB,OAAO,MAAM,EAAE,MAAM,CAKvB,CAAA;AAED;;;;GAIG;AACH,MAAM,WAAW,wBAAwB;IACvC,SAAS,EAAE,MAAM,CAAA;IACjB,MAAM,EAAE,MAAM,CAAA;IACd,SAAS,EAAE,MAAM,CAAA;IACjB,cAAc,EAAE,MAAM,CAAA;CACvB;AASD,eAAO,MAAM,4BAA4B,cAC5B,MAAM,GAAG,IAAI,WACf,wBAAwB,KAChC,MA0CF,CAAA;AA6DD,eAAO,MAAM,sBAAsB,QAAO,MASxC,CAAA;AAEF;;;;GAIG;AACH,eAAO,MAAM,2BAA2B,UAAW,OAAO,KAAG,2BAgB5D,CAAA;AAED,oFAAoF;AACpF,eAAO,MAAM,0BAA0B,mBAAoB,MAAM,KAAG,MAGlC,CAAA;AAElC;;;;;GAKG;AACH,eAAO,MAAM,4BAA4B,WAAY;IACnD,MAAM,EAAE,MAAM,CAAA;IACd,YAAY,EAAE,MAAM,CAAA;IACpB,SAAS,EAAE,MAAM,CAAA;IACjB,cAAc,EAAE,MAAM,CAAA;CACvB,KAAG,MAMF,CAAA;AAKF,eAAO,MAAM,yBAAyB,UAarC,CAAA"}
1
+ {"version":3,"file":"transactional-email-code.d.ts","sourceRoot":"","sources":["../../src/transactional-email-code.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAO,EAAE,2BAA2B,EAAE,MAAM,4BAA4B,CAAA;AAKxE,eAAO,MAAM,yBAAyB,aAMpC,CAAA;AAIF,eAAO,MAAM,8BAA8B,cAC9B,MAAM,GAAG,IAAI,KACvB,OAAO,MAAM,EAAE,MAAM,CAKvB,CAAA;AAED;;;;GAIG;AACH,MAAM,WAAW,wBAAwB;IACvC,SAAS,EAAE,MAAM,CAAA;IACjB,MAAM,EAAE,MAAM,CAAA;IACd,SAAS,EAAE,MAAM,CAAA;IACjB,cAAc,EAAE,MAAM,CAAA;IACtB;;;;;OAKG;IACH,uBAAuB,CAAC,EAAE,OAAO,CAAA;CAClC;AASD,eAAO,MAAM,4BAA4B,cAC5B,MAAM,GAAG,IAAI,WACf,wBAAwB,KAChC,MA0CF,CAAA;AA6DD,eAAO,MAAM,sBAAsB,QAAO,MASxC,CAAA;AAEF;;;;GAIG;AACH,eAAO,MAAM,2BAA2B,UAAW,OAAO,KAAG,2BAgB5D,CAAA;AAED,oFAAoF;AACpF,eAAO,MAAM,0BAA0B,mBAAoB,MAAM,KAAG,MAGlC,CAAA;AAElC;;;;;GAKG;AACH,eAAO,MAAM,4BAA4B,WAAY;IACnD,MAAM,EAAE,MAAM,CAAA;IACd,YAAY,EAAE,MAAM,CAAA;IACpB,SAAS,EAAE,MAAM,CAAA;IACjB,cAAc,EAAE,MAAM,CAAA;CACvB,KAAG,MAMF,CAAA;AAKF,eAAO,MAAM,yBAAyB,UAarC,CAAA"}
@@ -16,8 +16,8 @@ export const transactionalEmailDependencies = (provider) => {
16
16
  }
17
17
  return getEmailProviderDependencies(provider);
18
18
  };
19
- // Provider-specific `__sendProviderEmail({ from, fromName?, to, subject, html,
20
- // apiKey, tokenValues?, userId? })`, preceded by the `__emailSender` helper that
19
+ // Provider-specific `__sendProviderEmail({ from, fromName?, to, recordedTo?,
20
+ // subject, html, apiKey, tokenValues?, userId? })`, preceded by the `__emailSender` helper that
21
21
  // names the sender. No attachment (unlike the invoice sender). When no provider
22
22
  // is configured the function is a no-op so the route stays self-contained and
23
23
  // never throws. With `ledger`, the provider function is emitted as
@@ -50,12 +50,12 @@ async function __sendProviderEmail(msg) {
50
50
  __sentEmailLog.recordSentEmail({
51
51
  emailType: ${JSON.stringify(ledger.emailType)},
52
52
  audience: 'customer',
53
- to: msg.to,
53
+ to: ${ledger.withoutRecipientDetails ? 'msg.recordedTo' : 'msg.to'},
54
54
  from: sender.email,
55
55
  fromName: sender.name,
56
56
  subject: msg.subject,
57
- html: msg.html,
58
- payload: msg.tokenValues,
57
+ html: ${ledger.withoutRecipientDetails ? "''" : 'msg.html'},
58
+ payload: ${ledger.withoutRecipientDetails ? 'null' : 'msg.tokenValues'},
59
59
  provider: ${JSON.stringify(provider)},
60
60
  status: failure ? 'failed' : 'sent',
61
61
  error: failure ? (failure.message || String(failure)) : null,
@@ -1 +1 @@
1
- {"version":3,"file":"transactional-email-code.js","sourceRoot":"","sources":["../../src/transactional-email-code.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"transactional-email-code.js","sourceRoot":"","sources":["../../src/transactional-email-code.ts"],"names":[],"mappings":"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"}