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

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 (78) hide show
  1. package/__tests__/analytics-outcome-visit-ids.test.ts +583 -0
  2. package/__tests__/analytics-track-outcome.test.ts +71 -3
  3. package/__tests__/auth-password-security.test.ts +101 -0
  4. package/__tests__/automations-bus.test.ts +439 -2
  5. package/__tests__/security-lists-parity.test.ts +2 -2
  6. package/__tests__/security-runtime.test.ts +37 -20
  7. package/dist/cjs/api-route-generator.d.ts +2 -0
  8. package/dist/cjs/api-route-generator.d.ts.map +1 -1
  9. package/dist/cjs/api-route-generator.js +43 -1
  10. package/dist/cjs/api-route-generator.js.map +1 -1
  11. package/dist/cjs/auth-generator.d.ts.map +1 -1
  12. package/dist/cjs/auth-generator.js +48 -19
  13. package/dist/cjs/auth-generator.js.map +1 -1
  14. package/dist/cjs/automations/dispatcher-source.d.ts.map +1 -1
  15. package/dist/cjs/automations/dispatcher-source.js +13 -5
  16. package/dist/cjs/automations/dispatcher-source.js.map +1 -1
  17. package/dist/cjs/automations/event-bus-source.d.ts.map +1 -1
  18. package/dist/cjs/automations/event-bus-source.js +37 -23
  19. package/dist/cjs/automations/event-bus-source.js.map +1 -1
  20. package/dist/cjs/executor-generator.d.ts.map +1 -1
  21. package/dist/cjs/executor-generator.js +4 -0
  22. package/dist/cjs/executor-generator.js.map +1 -1
  23. package/dist/cjs/nodes/account/account-request-password-reset.d.ts.map +1 -1
  24. package/dist/cjs/nodes/account/account-request-password-reset.js +3 -2
  25. package/dist/cjs/nodes/account/account-request-password-reset.js.map +1 -1
  26. package/dist/cjs/nodes/analytics/analytics-track-outcome.d.ts.map +1 -1
  27. package/dist/cjs/nodes/analytics/analytics-track-outcome.js +17 -4
  28. package/dist/cjs/nodes/analytics/analytics-track-outcome.js.map +1 -1
  29. package/dist/cjs/password-reset-route-generator.d.ts +2 -0
  30. package/dist/cjs/password-reset-route-generator.d.ts.map +1 -1
  31. package/dist/cjs/password-reset-route-generator.js +17 -10
  32. package/dist/cjs/password-reset-route-generator.js.map +1 -1
  33. package/dist/cjs/security-runtime/security-runtime-code.d.ts +3 -2
  34. package/dist/cjs/security-runtime/security-runtime-code.d.ts.map +1 -1
  35. package/dist/cjs/security-runtime/security-runtime-code.js +17 -13
  36. package/dist/cjs/security-runtime/security-runtime-code.js.map +1 -1
  37. package/dist/cjs/tsconfig.tsbuildinfo +1 -1
  38. package/dist/esm/api-route-generator.d.ts +2 -0
  39. package/dist/esm/api-route-generator.d.ts.map +1 -1
  40. package/dist/esm/api-route-generator.js +44 -2
  41. package/dist/esm/api-route-generator.js.map +1 -1
  42. package/dist/esm/auth-generator.d.ts.map +1 -1
  43. package/dist/esm/auth-generator.js +48 -19
  44. package/dist/esm/auth-generator.js.map +1 -1
  45. package/dist/esm/automations/dispatcher-source.d.ts.map +1 -1
  46. package/dist/esm/automations/dispatcher-source.js +13 -5
  47. package/dist/esm/automations/dispatcher-source.js.map +1 -1
  48. package/dist/esm/automations/event-bus-source.d.ts.map +1 -1
  49. package/dist/esm/automations/event-bus-source.js +37 -23
  50. package/dist/esm/automations/event-bus-source.js.map +1 -1
  51. package/dist/esm/executor-generator.d.ts.map +1 -1
  52. package/dist/esm/executor-generator.js +4 -0
  53. package/dist/esm/executor-generator.js.map +1 -1
  54. package/dist/esm/nodes/account/account-request-password-reset.d.ts.map +1 -1
  55. package/dist/esm/nodes/account/account-request-password-reset.js +3 -2
  56. package/dist/esm/nodes/account/account-request-password-reset.js.map +1 -1
  57. package/dist/esm/nodes/analytics/analytics-track-outcome.d.ts.map +1 -1
  58. package/dist/esm/nodes/analytics/analytics-track-outcome.js +17 -4
  59. package/dist/esm/nodes/analytics/analytics-track-outcome.js.map +1 -1
  60. package/dist/esm/password-reset-route-generator.d.ts +2 -0
  61. package/dist/esm/password-reset-route-generator.d.ts.map +1 -1
  62. package/dist/esm/password-reset-route-generator.js +16 -9
  63. package/dist/esm/password-reset-route-generator.js.map +1 -1
  64. package/dist/esm/security-runtime/security-runtime-code.d.ts +3 -2
  65. package/dist/esm/security-runtime/security-runtime-code.d.ts.map +1 -1
  66. package/dist/esm/security-runtime/security-runtime-code.js +17 -13
  67. package/dist/esm/security-runtime/security-runtime-code.js.map +1 -1
  68. package/dist/esm/tsconfig.tsbuildinfo +1 -1
  69. package/package.json +2 -2
  70. package/src/api-route-generator.ts +52 -2
  71. package/src/auth-generator.ts +48 -19
  72. package/src/automations/dispatcher-source.ts +13 -5
  73. package/src/automations/event-bus-source.ts +37 -23
  74. package/src/executor-generator.ts +4 -0
  75. package/src/nodes/account/account-request-password-reset.ts +3 -2
  76. package/src/nodes/analytics/analytics-track-outcome.ts +17 -4
  77. package/src/password-reset-route-generator.ts +18 -9
  78. package/src/security-runtime/security-runtime-code.ts +17 -13
@@ -1 +1 @@
1
- {"version":3,"file":"dispatcher-source.d.ts","sourceRoot":"","sources":["../../../src/automations/dispatcher-source.ts"],"names":[],"mappings":"AA0CA,eAAO,MAAM,aAAa,gBAAiB,MAAM,KAAG,MAMqD,CAAA;AASzG;;;;GAIG;AACH,eAAO,MAAM,kBAAkB,eAAgB,MAAM,eAAe,MAAM,KAAG,MAKoB,CAAA;AAEjG;;;;GAIG;AACH,eAAO,MAAM,WAAW,gBAAiB,MAAM,KAAG,MAIqD,CAAA;AAkKvG;;;;;;;;;;;;GAYG;AACH,eAAO,MAAM,6BAA6B,QAM4E,CAAA;AAEtH;;;;;GAKG;AACH,eAAO,MAAM,gCAAgC,YAAa;IACxD,YAAY,EAAE,OAAO,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC,CAAA;IAC3C,kBAAkB,EAAE,OAAO,MAAM,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC,CAAA;IACnD,gBAAgB,EAAE,MAAM,EAAE,CAAA;CAC3B,KAAG,MAgkBH,CAAA;AAED;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,eAAO,MAAM,mCAAmC,QAAO,MAqLtD,CAAA;AAED;;;;;GAKG;AACH,eAAO,MAAM,uCAAuC,WAAY,MAAM,KAAG,MAQxE,CAAA"}
1
+ {"version":3,"file":"dispatcher-source.d.ts","sourceRoot":"","sources":["../../../src/automations/dispatcher-source.ts"],"names":[],"mappings":"AA0CA,eAAO,MAAM,aAAa,gBAAiB,MAAM,KAAG,MAMqD,CAAA;AASzG;;;;GAIG;AACH,eAAO,MAAM,kBAAkB,eAAgB,MAAM,eAAe,MAAM,KAAG,MAKoB,CAAA;AAEjG;;;;GAIG;AACH,eAAO,MAAM,WAAW,gBAAiB,MAAM,KAAG,MAIqD,CAAA;AAkKvG;;;;;;;;;;;;GAYG;AACH,eAAO,MAAM,6BAA6B,QAM4E,CAAA;AAEtH;;;;;GAKG;AACH,eAAO,MAAM,gCAAgC,YAAa;IACxD,YAAY,EAAE,OAAO,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC,CAAA;IAC3C,kBAAkB,EAAE,OAAO,MAAM,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC,CAAA;IACnD,gBAAgB,EAAE,MAAM,EAAE,CAAA;CAC3B,KAAG,MAwkBH,CAAA;AAED;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,eAAO,MAAM,mCAAmC,QAAO,MAqLtD,CAAA;AAED;;;;;GAKG;AACH,eAAO,MAAM,uCAAuC,WAAY,MAAM,KAAG,MAQxE,CAAA"}
@@ -295,6 +295,14 @@ function runStatus(error, value) {
295
295
  return value && value.waiting === true ? 'waiting' : 'delivered';
296
296
  }
297
297
 
298
+ // What a run leaves in its delivery's error column: its error, or, for a run
299
+ // that finished, the send steps that did not send. Its status says nothing of
300
+ // them: such a run is delivered, and is neither retried nor counted as failed.
301
+ function runNote(error, value) {
302
+ if (error) return store.errorMessage(error);
303
+ return value && value.sentNothing ? JSON.stringify({ sentNothing: value.sentNothing }) : null;
304
+ }
305
+
298
306
  // Whether a guarded write found its row (the claim it names still held it).
299
307
  function wrote(result) {
300
308
  return !!result && result.rowCount > 0;
@@ -302,7 +310,7 @@ function wrote(result) {
302
310
 
303
311
  function lateDeliveryWriter(delivery, testRun, resumePoint) {
304
312
  return function (error, value) {
305
- var message = error ? store.errorMessage(error) : null;
313
+ var message = runNote(error, value);
306
314
  var status = testRun ? 'test' : runStatus(error, value);
307
315
  store.withClient(async function (client) {
308
316
  var finished = await client.query(FINISH_DELIVERY_SQL, [delivery.id, status, message, delivery.attempts]);
@@ -320,7 +328,7 @@ function lateWaitWriter(wait, resumedAt) {
320
328
  // Nothing is written once another dispatcher took the stale resume over:
321
329
  // that run records the outcome.
322
330
  store.withClient(function (client) {
323
- return finishResume(client, wait, runStatus(error, value), error ? store.errorMessage(error) : null, resumedAt);
331
+ return finishResume(client, wait, runStatus(error, value), runNote(error, value), resumedAt);
324
332
  }).catch(function (writeError) {
325
333
  console.error('[automations] could not record a late resume: ' + store.errorMessage(writeError));
326
334
  });
@@ -558,7 +566,7 @@ async function deliverEvent(client, row, context) {
558
566
  var error = ran.error ? store.errorMessage(ran.error) : null;
559
567
  if (error) console.error('[automations] ' + entry.name + ' failed for event ' + row.id + ': ' + error);
560
568
  // A run that stopped at a Wait is not finished: its delivery waits too.
561
- var finished = await client.query(FINISH_DELIVERY_SQL, [delivery.id, runStatus(ran.error, ran.value), error, delivery.attempts]);
569
+ var finished = await client.query(FINISH_DELIVERY_SQL, [delivery.id, runStatus(ran.error, ran.value), runNote(ran.error, ran.value), delivery.attempts]);
562
570
  if (resumePoint && !error && wrote(finished)) await client.query(SETTLE_FAILED_WAIT_SQL, [resumePoint.id]);
563
571
  if (error) outcome.failed += 1;
564
572
  else outcome.delivered += 1;
@@ -624,7 +632,7 @@ async function resumeWaits(client, context) {
624
632
  wait,
625
633
  eventRow,
626
634
  runStatus(ran.error, ran.value),
627
- ran.error ? store.errorMessage(ran.error) : null,
635
+ runNote(ran.error, ran.value),
628
636
  resumedAt
629
637
  );
630
638
  }
@@ -768,7 +776,7 @@ async function runTest(input, options) {
768
776
  }, timeoutMs, lateDeliveryWriter(delivery, true));
769
777
  if (ran.timedOut) return totals;
770
778
  var wouldWait = ran.value && ran.value.wouldWait ? ran.value.wouldWait : null;
771
- var note = ran.error ? store.errorMessage(ran.error) : wouldWait ? JSON.stringify({ wouldWait: wouldWait }) : null;
779
+ var note = wouldWait ? JSON.stringify({ wouldWait: wouldWait }) : runNote(ran.error, ran.value);
772
780
  await client.query(FINISH_DELIVERY_SQL, [delivery.id, 'test', note, delivery.attempts]);
773
781
  if (ran.error) totals.failed = 1;
774
782
  else totals.delivered = 1;
@@ -1 +1 @@
1
- {"version":3,"file":"dispatcher-source.js","sourceRoot":"","sources":["../../../src/automations/dispatcher-source.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"dispatcher-source.js","sourceRoot":"","sources":["../../../src/automations/dispatcher-source.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"event-bus-source.d.ts","sourceRoot":"","sources":["../../../src/automations/event-bus-source.ts"],"names":[],"mappings":"AAcA,gGAAgG;AAChG,eAAO,MAAM,qBAAqB,iCAAiC,CAAA;AAEnE,iFAAiF;AACjF,eAAO,MAAM,gBAAgB,QAA4I,CAAA;AAEzK;;;;;;;;;GASG;AACH,eAAO,MAAM,2BAA2B,QAAO,MA8P9C,CAAA;AAED;;;;;;GAMG;AACH,eAAO,MAAM,+BAA+B,QAAO,MAoBlD,CAAA;AAED;;;;;;;;;;;;;;;;;;GAkBG;AACH,eAAO,MAAM,8BAA8B,QAAO,MA6FjD,CAAA"}
1
+ {"version":3,"file":"event-bus-source.d.ts","sourceRoot":"","sources":["../../../src/automations/event-bus-source.ts"],"names":[],"mappings":"AAcA,gGAAgG;AAChG,eAAO,MAAM,qBAAqB,iCAAiC,CAAA;AAEnE,iFAAiF;AACjF,eAAO,MAAM,gBAAgB,QAA4I,CAAA;AAEzK;;;;;;;;;GASG;AACH,eAAO,MAAM,2BAA2B,QAAO,MA4Q9C,CAAA;AAED;;;;;;GAMG;AACH,eAAO,MAAM,+BAA+B,QAAO,MAoBlD,CAAA;AAED;;;;;;;;;;;;;;;;;;GAkBG;AACH,eAAO,MAAM,8BAA8B,QAAO,MA6FjD,CAAA"}
@@ -86,10 +86,15 @@ async function saveWait(wait) {
86
86
 
87
87
  // The signed requests the dispatch route has taken, each kept until its
88
88
  // signature can no longer verify: the same request again is refused. The
89
- // table (and its expiry index) is made on first use, two instances taking
90
- // turns under the lock. The rows that are over are deleted at most once per
91
- // instance every SIGNED_REQUESTS_CLEANUP_MS, a bounded batch at a time.
89
+ // editor makes the table with the other automation tables, and a site's
90
+ // database role may read and write it without being allowed to create one
91
+ // (CREATE ... IF NOT EXISTS asks for that permission even when the table is
92
+ // there), so a create is attempted only for a table that really is missing,
93
+ // two instances taking turns under the lock. The rows that are over are
94
+ // deleted at most once per instance every SIGNED_REQUESTS_CLEANUP_MS, a
95
+ // bounded batch at a time.
92
96
  var SIGNED_REQUESTS_TABLE = '${exports.SIGNED_REQUESTS_TABLE}';
97
+ var UNDEFINED_TABLE_CODE = '42P01';
93
98
  var LOCK_SIGNED_REQUESTS_SQL = 'SELECT pg_advisory_xact_lock(hashtext($1))';
94
99
  var CREATE_SIGNED_REQUESTS_SQL = 'CREATE TABLE IF NOT EXISTS ' + SIGNED_REQUESTS_TABLE +
95
100
  ' (request_key TEXT PRIMARY KEY, expires_at BIGINT NOT NULL)';
@@ -100,34 +105,43 @@ var FORGET_SIGNED_REQUESTS_SQL = 'DELETE FROM ' + SIGNED_REQUESTS_TABLE + ' WHER
100
105
  var TAKE_SIGNED_REQUEST_SQL = 'INSERT INTO ' + SIGNED_REQUESTS_TABLE + ' (request_key, expires_at) VALUES ($1, $2) ' +
101
106
  'ON CONFLICT (request_key) DO NOTHING RETURNING request_key';
102
107
  var SIGNED_REQUESTS_CLEANUP_MS = 600000;
103
- var __signedRequestsReady = false;
104
108
  var __signedRequestsCleanedAt = 0;
105
109
 
110
+ async function createSignedRequestsTable(client) {
111
+ await client.query('BEGIN');
112
+ try {
113
+ await client.query(LOCK_SIGNED_REQUESTS_SQL, [SIGNED_REQUESTS_TABLE]);
114
+ await client.query(CREATE_SIGNED_REQUESTS_SQL);
115
+ await client.query(INDEX_SIGNED_REQUESTS_SQL);
116
+ await client.query('COMMIT');
117
+ } catch (error) {
118
+ try { await client.query('ROLLBACK'); } catch (_e) {}
119
+ throw new Error('[automations] the table ' + SIGNED_REQUESTS_TABLE + ' is missing and could not be created: ' + errorMessage(error));
120
+ }
121
+ }
122
+
123
+ async function recordSignedRequest(client, key, expiresAt) {
124
+ var nowMs = Date.now();
125
+ if (nowMs - __signedRequestsCleanedAt >= SIGNED_REQUESTS_CLEANUP_MS) {
126
+ __signedRequestsCleanedAt = nowMs;
127
+ await client.query(FORGET_SIGNED_REQUESTS_SQL, [Math.floor(nowMs / 1000)]);
128
+ }
129
+ var taken = await client.query(TAKE_SIGNED_REQUEST_SQL, [key, expiresAt]);
130
+ return !!(taken && taken.rows && taken.rows[0]);
131
+ }
132
+
106
133
  // true the first time a signed request (its key) is taken, false every time
107
134
  // after while it is kept (until expiresAt, unix seconds). Throws when the
108
135
  // database cannot say: the route then refuses.
109
136
  async function takeSignedRequest(key, expiresAt) {
110
137
  return withClient(async function (client) {
111
- if (!__signedRequestsReady) {
112
- await client.query('BEGIN');
113
- try {
114
- await client.query(LOCK_SIGNED_REQUESTS_SQL, [SIGNED_REQUESTS_TABLE]);
115
- await client.query(CREATE_SIGNED_REQUESTS_SQL);
116
- await client.query(INDEX_SIGNED_REQUESTS_SQL);
117
- await client.query('COMMIT');
118
- } catch (error) {
119
- try { await client.query('ROLLBACK'); } catch (_e) {}
120
- throw error;
121
- }
122
- __signedRequestsReady = true;
123
- }
124
- var nowMs = Date.now();
125
- if (nowMs - __signedRequestsCleanedAt >= SIGNED_REQUESTS_CLEANUP_MS) {
126
- __signedRequestsCleanedAt = nowMs;
127
- await client.query(FORGET_SIGNED_REQUESTS_SQL, [Math.floor(nowMs / 1000)]);
138
+ try {
139
+ return await recordSignedRequest(client, key, expiresAt);
140
+ } catch (error) {
141
+ if (!error || error.code !== UNDEFINED_TABLE_CODE) throw error;
142
+ await createSignedRequestsTable(client);
143
+ return recordSignedRequest(client, key, expiresAt);
128
144
  }
129
- var taken = await client.query(TAKE_SIGNED_REQUEST_SQL, [key, expiresAt]);
130
- return !!(taken && taken.rows && taken.rows[0]);
131
145
  });
132
146
  }
133
147
 
@@ -1 +1 @@
1
- {"version":3,"file":"event-bus-source.js","sourceRoot":"","sources":["../../../src/automations/event-bus-source.ts"],"names":[],"mappings":";;;AAAA,sDAA4D;AAC5D,2DAA8D;AAC9D,4DAAkE;AAElE;;;;;GAKG;AAEH,MAAM,aAAa,GACjB,sFAAsF,CAAA;AAExF,gGAAgG;AACnF,QAAA,qBAAqB,GAAG,8BAA8B,CAAA;AAEnE,iFAAiF;AACpE,QAAA,gBAAgB,GAAG,gCAAgC,aAAa,4FAA4F,CAAA;AAEzK;;;;;;;;;GASG;AACI,MAAM,2BAA2B,GAAG,GAAW,EAAE,CAAC;;;;EAIvD,IAAA,yCAAwB,GAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;+BA4DG,6BAAqB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAqHlD,IAAA,+CAA2B,GAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAyE9B,CAAA;AA9PY,QAAA,2BAA2B,+BA8PvC;AAED;;;;;;GAMG;AACI,MAAM,+BAA+B,GAAG,GAAW,EAAE,CAAC;;;;;;;;;;;;;;;;;;;;CAoB5D,CAAA;AApBY,QAAA,+BAA+B,mCAoB3C;AAED;;;;;;;;;;;;;;;;;;GAkBG;AACI,MAAM,8BAA8B,GAAG,GAAW,EAAE,CAAC;;;;;;;;;;;uBAWrC,4CAAwB;0BACrB,wBAAgB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAiFzC,CAAA;AA7FY,QAAA,8BAA8B,kCA6F1C"}
1
+ {"version":3,"file":"event-bus-source.js","sourceRoot":"","sources":["../../../src/automations/event-bus-source.ts"],"names":[],"mappings":";;;AAAA,sDAA4D;AAC5D,2DAA8D;AAC9D,4DAAkE;AAElE;;;;;GAKG;AAEH,MAAM,aAAa,GACjB,sFAAsF,CAAA;AAExF,gGAAgG;AACnF,QAAA,qBAAqB,GAAG,8BAA8B,CAAA;AAEnE,iFAAiF;AACpE,QAAA,gBAAgB,GAAG,gCAAgC,aAAa,4FAA4F,CAAA;AAEzK;;;;;;;;;GASG;AACI,MAAM,2BAA2B,GAAG,GAAW,EAAE,CAAC;;;;EAIvD,IAAA,yCAAwB,GAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;+BAgEG,6BAAqB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EA+HlD,IAAA,+CAA2B,GAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAyE9B,CAAA;AA5QY,QAAA,2BAA2B,+BA4QvC;AAED;;;;;;GAMG;AACI,MAAM,+BAA+B,GAAG,GAAW,EAAE,CAAC;;;;;;;;;;;;;;;;;;;;CAoB5D,CAAA;AApBY,QAAA,+BAA+B,mCAoB3C;AAED;;;;;;;;;;;;;;;;;;GAkBG;AACI,MAAM,8BAA8B,GAAG,GAAW,EAAE,CAAC;;;;;;;;;;;uBAWrC,4CAAwB;0BACrB,wBAAgB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAiFzC,CAAA;AA7FY,QAAA,8BAA8B,kCA6F1C"}
@@ -1 +1 @@
1
- {"version":3,"file":"executor-generator.d.ts","sourceRoot":"","sources":["../../src/executor-generator.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,iBAAiB,EAGlB,MAAM,gBAAgB,CAAA;AAYvB,MAAM,WAAW,yBAAyB;IACxC;;;;;OAKG;IACH,YAAY,CAAC,EAAE,iBAAiB,CAAA;CACjC;AAID,eAAO,MAAM,8BAA8B,aAAa,yBAAyB,KAAQ,MA8xDxF,CAAA;AAED,eAAO,MAAM,yBAAyB,QAAO,MAypB5C,CAAA"}
1
+ {"version":3,"file":"executor-generator.d.ts","sourceRoot":"","sources":["../../src/executor-generator.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,iBAAiB,EAGlB,MAAM,gBAAgB,CAAA;AAYvB,MAAM,WAAW,yBAAyB;IACxC;;;;;OAKG;IACH,YAAY,CAAC,EAAE,iBAAiB,CAAA;CACjC;AAID,eAAO,MAAM,8BAA8B,aAAa,yBAAyB,KAAQ,MAiyDxF,CAAA;AAED,eAAO,MAAM,yBAAyB,QAAO,MA0pB5C,CAAA"}
@@ -991,6 +991,9 @@ async function executeWorkflow(workflowConfig, triggerContext, nodeHandlers, opt
991
991
  if (triggerContext && triggerContext.__dynamicRouteParam) {
992
992
  context.__dynamicRouteParam = triggerContext.__dynamicRouteParam;
993
993
  }
994
+ if (triggerContext && triggerContext.__tpa) {
995
+ context.__tpa = triggerContext.__tpa;
996
+ }
994
997
  if (triggerContext && triggerContext.triggerElement) {
995
998
  context.triggerElement = triggerContext.triggerElement;
996
999
  }
@@ -2134,6 +2137,7 @@ function buildContext(workflowConfig, triggerContext) {
2134
2137
  if (triggerContext.__stateValues) context.__stateValues = triggerContext.__stateValues;
2135
2138
  if (triggerContext.__routeParams) context.__routeParams = triggerContext.__routeParams;
2136
2139
  if (triggerContext.__dynamicRouteParam) context.__dynamicRouteParam = triggerContext.__dynamicRouteParam;
2140
+ if (triggerContext.__tpa) context.__tpa = triggerContext.__tpa;
2137
2141
  if (triggerContext.triggerElement) context.triggerElement = triggerContext.triggerElement;
2138
2142
  }
2139
2143
  // See executeWorkflow: the page's language travels with the run.
@@ -1 +1 @@
1
- {"version":3,"file":"executor-generator.js","sourceRoot":"","sources":["../../src/executor-generator.ts"],"names":[],"mappings":";;;AAAA,iDAIuB;AACvB,yFAA0F;AAC1F,uEAIwC;AACxC,qEAAoF;AACpF,2DAA8E;AAC9E,uEAAyE;AACzE,6DAAoE;AAYpE,MAAM,gBAAgB,GAAsB,EAAE,OAAO,EAAE,EAAE,EAAE,aAAa,EAAE,EAAE,EAAE,CAAA;AAEvE,MAAM,8BAA8B,GAAG,CAAC,UAAqC,EAAE,EAAU,EAAE;IAChG,OAAO;;;;;;;;;EASP,IAAA,6CAA8B,EAAC,OAAO,CAAC,YAAY,IAAI,gBAAgB,CAAC;EACxE,IAAA,gDAAiC,GAAE;EACnC,IAAA,4DAA+B,GAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;WA0RxB,IAAA,mCAAgB,EAAC,OAAO,CAAC;;;;;;WAMzB,IAAA,oCAAiB,EAAC,OAAO,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAkInC,6CAAyB;;;;;;;;;;;;;0BAaD,uCAAmB,mDAAmD,uCAAmB;UACzG,uCAAmB,iCAAiC,uCAAmB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAyuC/E,IAAA,uDAA6B,GAAE;EAC/B,IAAA,kDAA6B,GAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAmE/B,IAAA,4DAAwC,EAAC,SAAS,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAoDpD,CAAA;AACD,CAAC,CAAA;AA9xDY,QAAA,8BAA8B,kCA8xD1C;AAEM,MAAM,yBAAyB,GAAG,GAAW,EAAE;IACpD,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAupBR,CAAA;AACD,CAAC,CAAA;AAzpBY,QAAA,yBAAyB,6BAypBrC"}
1
+ {"version":3,"file":"executor-generator.js","sourceRoot":"","sources":["../../src/executor-generator.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"account-request-password-reset.d.ts","sourceRoot":"","sources":["../../../../src/nodes/account/account-request-password-reset.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAmB,MAAM,UAAU,CAAA;AAwChE,eAAO,MAAM,2BAA2B,EAAE,oBAMzC,CAAA"}
1
+ {"version":3,"file":"account-request-password-reset.d.ts","sourceRoot":"","sources":["../../../../src/nodes/account/account-request-password-reset.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAmB,MAAM,UAAU,CAAA;AAyChE,eAAO,MAAM,2BAA2B,EAAE,oBAMzC,CAAA"}
@@ -7,8 +7,9 @@ const types_1 = require("../types");
7
7
  // server: whether the address has an account, the link's token (minted there,
8
8
  // stored hashed), the page it opens and the email itself (provider, sender and
9
9
  // template baked from this node's config at generation). The route answers the
10
- // same whether the address has an account or not, so this node always reports
11
- // success for a well-formed request.
10
+ // same whether the address has an account or not, so this node reports success
11
+ // for a well-formed request unless the site could not keep a link, for any
12
+ // address.
12
13
  async function account_request_password_reset(config, context) {
13
14
  const email = config && typeof config.email === 'string' ? config.email.trim() : '';
14
15
  if (!email) {
@@ -1 +1 @@
1
- {"version":3,"file":"account-request-password-reset.js","sourceRoot":"","sources":["../../../../src/nodes/account/account-request-password-reset.ts"],"names":[],"mappings":";;;AAAA,oCAAgE;AAEhE,4EAA4E;AAC5E,wEAAwE;AACxE,8EAA8E;AAC9E,+EAA+E;AAC/E,+EAA+E;AAC/E,8EAA8E;AAC9E,qCAAqC;AACrC,KAAK,UAAU,8BAA8B,CAAC,MAAW,EAAE,OAAgC;IACzF,MAAM,KAAK,GAAG,MAAM,IAAI,OAAO,MAAM,CAAC,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAA;IACnF,IAAI,CAAC,KAAK,EAAE;QACV,MAAM,IAAI,KAAK,CAAC,mBAAmB,CAAC,CAAA;KACrC;IAED,MAAM,OAAO,GAAG,CAAC,OAAO,IAAK,OAAe,CAAC,SAAS,CAAC,IAAI,EAAE,CAAA;IAC7D,8DAA8D;IAC9D,MAAM,cAAc,GAAQ,EAAE,cAAc,EAAE,kBAAkB,EAAE,CAAA;IAClE,MAAM,SAAS,GAAG,OAAO,IAAK,OAAe,CAAC,QAAQ,CAAA;IACtD,IAAI,OAAO,SAAS,KAAK,QAAQ,IAAI,SAAS,EAAE;QAC9C,cAAc,CAAC,mBAAmB,CAAC,GAAG,SAAS,CAAA;KAChD;IACD,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,OAAO,GAAG,2BAA2B,EAAE;QAClE,MAAM,EAAE,MAAM;QACd,OAAO,EAAE,cAAc;QACvB,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,KAAK,EAAE,CAAC;KAChC,CAAC,CAAA;IAEF,IAAI,IAAI,GAAQ,EAAE,CAAA;IAClB,IAAI;QACF,IAAI,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAA;KAC7B;IAAC,OAAO,EAAE,EAAE,GAAE;IAEf,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE;QAChB,MAAM,IAAI,KAAK,CAAC,CAAC,IAAI,IAAI,IAAI,CAAC,KAAK,CAAC,IAAI,qDAAqD,CAAC,CAAA;KAC/F;IAED,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,IAAI,IAAI,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,CAAA;AACjE,CAAC;AAEY,QAAA,2BAA2B,GAAyB;IAC/D,QAAQ,EAAE,gCAAgC;IAC1C,YAAY,EAAE,QAAQ;IACtB,eAAe;QACb,OAAO,IAAA,uBAAe,EAAC,8BAA8B,CAAC,CAAA;IACxD,CAAC;CACF,CAAA"}
1
+ {"version":3,"file":"account-request-password-reset.js","sourceRoot":"","sources":["../../../../src/nodes/account/account-request-password-reset.ts"],"names":[],"mappings":";;;AAAA,oCAAgE;AAEhE,4EAA4E;AAC5E,wEAAwE;AACxE,8EAA8E;AAC9E,+EAA+E;AAC/E,+EAA+E;AAC/E,+EAA+E;AAC/E,2EAA2E;AAC3E,WAAW;AACX,KAAK,UAAU,8BAA8B,CAAC,MAAW,EAAE,OAAgC;IACzF,MAAM,KAAK,GAAG,MAAM,IAAI,OAAO,MAAM,CAAC,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAA;IACnF,IAAI,CAAC,KAAK,EAAE;QACV,MAAM,IAAI,KAAK,CAAC,mBAAmB,CAAC,CAAA;KACrC;IAED,MAAM,OAAO,GAAG,CAAC,OAAO,IAAK,OAAe,CAAC,SAAS,CAAC,IAAI,EAAE,CAAA;IAC7D,8DAA8D;IAC9D,MAAM,cAAc,GAAQ,EAAE,cAAc,EAAE,kBAAkB,EAAE,CAAA;IAClE,MAAM,SAAS,GAAG,OAAO,IAAK,OAAe,CAAC,QAAQ,CAAA;IACtD,IAAI,OAAO,SAAS,KAAK,QAAQ,IAAI,SAAS,EAAE;QAC9C,cAAc,CAAC,mBAAmB,CAAC,GAAG,SAAS,CAAA;KAChD;IACD,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,OAAO,GAAG,2BAA2B,EAAE;QAClE,MAAM,EAAE,MAAM;QACd,OAAO,EAAE,cAAc;QACvB,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,KAAK,EAAE,CAAC;KAChC,CAAC,CAAA;IAEF,IAAI,IAAI,GAAQ,EAAE,CAAA;IAClB,IAAI;QACF,IAAI,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAA;KAC7B;IAAC,OAAO,EAAE,EAAE,GAAE;IAEf,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE;QAChB,MAAM,IAAI,KAAK,CAAC,CAAC,IAAI,IAAI,IAAI,CAAC,KAAK,CAAC,IAAI,qDAAqD,CAAC,CAAA;KAC/F;IAED,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,IAAI,IAAI,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,CAAA;AACjE,CAAC;AAEY,QAAA,2BAA2B,GAAyB;IAC/D,QAAQ,EAAE,gCAAgC;IAC1C,YAAY,EAAE,QAAQ;IACtB,eAAe;QACb,OAAO,IAAA,uBAAe,EAAC,8BAA8B,CAAC,CAAA;IACxD,CAAC;CACF,CAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"analytics-track-outcome.d.ts","sourceRoot":"","sources":["../../../../src/nodes/analytics/analytics-track-outcome.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,MAAM,UAAU,CAAA;AAqG/C,eAAO,MAAM,qBAAqB,EAAE,oBASnC,CAAA"}
1
+ {"version":3,"file":"analytics-track-outcome.d.ts","sourceRoot":"","sources":["../../../../src/nodes/analytics/analytics-track-outcome.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,MAAM,UAAU,CAAA;AAkH/C,eAAO,MAAM,qBAAqB,EAAE,oBASnC,CAAA"}
@@ -15,6 +15,11 @@ exports.analyticsTrackOutcome = void 0;
15
15
  * carries the ids the trigger stamped on the context (`__tpa`, set by every
16
16
  * generated trigger) plus whatever first-touch snapshot the caller binds in
17
17
  * `attribution` (the checkout stamps `utm_*`, `referrer_host`, `landing_path`).
18
+ * A snapshot naming a `session_id` is the visit that placed an order, read back
19
+ * by a run outside that visit (a payment webhook, a cron, an admin page): its
20
+ * `session_id`, `visitor_id` and `exp` stand in for the trigger's ids. Otherwise
21
+ * the visitor id is the tracker's alone: a browser may still hold a persistent
22
+ * id from before its consent was withdrawn.
18
23
  *
19
24
  * Never throws: an outcome that cannot be reported answers `{ sent: false }`
20
25
  * and the workflow continues — analytics must never cost a sale.
@@ -59,22 +64,30 @@ const SERVER_BODY = `async function analytics_track_outcome(config, context) {
59
64
  if (baseUrl.indexOf('http') !== 0 || !publicKey || !serverKey) {
60
65
  return { sent: false, reason: 'not-configured' };
61
66
  }
67
+ // The service dedupes on this id and drops an outcome without one.
68
+ if (config.outcomeId == null || config.outcomeId === '') {
69
+ return { sent: false, reason: 'no-outcome-id' };
70
+ }
62
71
  var ids = context && context.__tpa && typeof context.__tpa === 'object' ? context.__tpa : {};
63
72
  var attribution = config.attribution && typeof config.attribution === 'object' ? config.attribution : {};
73
+ var visit = attribution.session_id
74
+ ? { sessionId: attribution.session_id, visitorId: attribution.visitor_id, exp: attribution.exp }
75
+ : ids;
64
76
  var outcome = {
65
77
  name: name,
66
78
  value: config.value == null || config.value === '' ? null : Number(config.value),
67
79
  currency: config.currency == null ? null : String(config.currency),
68
80
  outcomeId: config.outcomeId == null ? null : String(config.outcomeId),
69
81
  recordId: config.recordId == null ? null : String(config.recordId),
70
- sessionId: ids.sessionId || null,
71
- visitorId: ids.visitorId || attribution.visitor_id || null,
72
- path: ids.path || null,
73
- exp: ids.exp || null,
82
+ sessionId: visit.sessionId || null,
83
+ visitorId: visit.visitorId || null,
84
+ path: visit.path || null,
85
+ exp: visit.exp || null,
74
86
  attribution: {
75
87
  utmSource: attribution.utm_source || attribution.utmSource || null,
76
88
  utmMedium: attribution.utm_medium || attribution.utmMedium || null,
77
89
  utmCampaign: attribution.utm_campaign || attribution.utmCampaign || null,
90
+ utmContent: attribution.utm_content || attribution.utmContent || null,
78
91
  referrerHost: attribution.referrer_host || attribution.referrerHost || null,
79
92
  landingPath: attribution.landing_path || attribution.landingPath || null
80
93
  }
@@ -1 +1 @@
1
- {"version":3,"file":"analytics-track-outcome.js","sourceRoot":"","sources":["../../../../src/nodes/analytics/analytics-track-outcome.ts"],"names":[],"mappings":";;;AAEA;;;;;;;;;;;;;;;;;GAiBG;AACH,MAAM,oBAAoB,GAAG,CAAC,UAAU,EAAE,cAAc,CAAC,CAAA;AAEzD,MAAM,WAAW,GAAG;;;;;QAKZ,IAAI,CAAC,SAAS,CAAC,oBAAoB,CAAC;;;;;;;;;;;;;;;;;;;;EAoB1C,CAAA;AAEF,MAAM,WAAW,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAkDlB,CAAA;AAEW,QAAA,qBAAqB,GAAyB;IACzD,QAAQ,EAAE,yBAAyB;IACnC,YAAY,EAAE,WAAW;IACzB,eAAe;QACb,OAAO,WAAW,CAAA;IACpB,CAAC;IACD,qBAAqB;QACnB,OAAO,WAAW,CAAA;IACpB,CAAC;CACF,CAAA"}
1
+ {"version":3,"file":"analytics-track-outcome.js","sourceRoot":"","sources":["../../../../src/nodes/analytics/analytics-track-outcome.ts"],"names":[],"mappings":";;;AAEA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,MAAM,oBAAoB,GAAG,CAAC,UAAU,EAAE,cAAc,CAAC,CAAA;AAEzD,MAAM,WAAW,GAAG;;;;;QAKZ,IAAI,CAAC,SAAS,CAAC,oBAAoB,CAAC;;;;;;;;;;;;;;;;;;;;EAoB1C,CAAA;AAEF,MAAM,WAAW,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EA0DlB,CAAA;AAEW,QAAA,qBAAqB,GAAyB;IACzD,QAAQ,EAAE,yBAAyB;IACnC,YAAY,EAAE,WAAW;IACzB,eAAe;QACb,OAAO,WAAW,CAAA;IACpB,CAAC;IACD,qBAAqB;QACnB,OAAO,WAAW,CAAA;IACpB,CAAC;CACF,CAAA"}
@@ -30,6 +30,8 @@ export declare const RESET_PASSWORD_VISITOR_LIMIT = 20;
30
30
  export declare const DEFAULT_RESET_PAGE_PATH = "/reset-password";
31
31
  /** The same answer for every well-formed request, whatever the address. */
32
32
  export declare const FORGOT_PASSWORD_ANSWER = "If an account exists for that email, we sent it a link to reset the password.";
33
+ /** What the route answers, to every address, when a link could not be kept. */
34
+ export declare const FORGOT_PASSWORD_NOT_SENT = "We could not send the reset link. Please try again in a moment.";
33
35
  /**
34
36
  * The sessionStorage key the reset page reads the link's token from (mirrored
35
37
  * in teleport-gui `RESET_TOKEN_STORAGE_KEY`). The published site's first head
@@ -1 +1 @@
1
- {"version":3,"file":"password-reset-route-generator.d.ts","sourceRoot":"","sources":["../../src/password-reset-route-generator.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AACH,OAAO,EAEL,sBAAsB,EACtB,WAAW,EACX,kBAAkB,EAClB,2BAA2B,EAC5B,MAAM,4BAA4B,CAAA;AAenC,eAAO,MAAM,0BAA0B,oBAAoB,CAAA;AAC3D,eAAO,MAAM,yBAAyB,mBAAmB,CAAA;AAEzD,4CAA4C;AAC5C,eAAO,MAAM,gCAAgC,OAAO,CAAA;AACpD,8FAA8F;AAC9F,eAAO,MAAM,+BAA+B,IAAI,CAAA;AAChD,eAAO,MAAM,6BAA6B,KAAK,CAAA;AAC/C,mEAAmE;AACnE,eAAO,MAAM,4BAA4B,KAAK,CAAA;AAE9C,eAAO,MAAM,uBAAuB,oBAAoB,CAAA;AAExD,2EAA2E;AAC3E,eAAO,MAAM,sBAAsB,kFAC8C,CAAA;AAEjF;;;;;;;GAOG;AACH,eAAO,MAAM,uBAAuB,mBAAmB,CAAA;AAEvD;;;;;;GAMG;AACH,eAAO,MAAM,mBAAmB,SAAU,WAAW,KAAG,OAUvD,CAAA;AAED,kFAAkF;AAClF,eAAO,MAAM,yBAAyB,SAAU,WAAW,KAAG,MAAM,EAOnE,CAAA;AAED;;;;GAIG;AACH,eAAO,MAAM,WAAW,SAChB,WAAW,KAChB;IAAE,aAAa,EAAE,MAAM,CAAC;IAAC,eAAe,EAAE,OAAO,CAAA;CAOnD,CAAA;AAED;;;;GAIG;AACH,eAAO,MAAM,kBAAkB,SACvB,WAAW,KAChB;IAAE,aAAa,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAC;IAAC,kBAAkB,EAAE,MAAM,CAAA;CAWxE,CAAA;AAED,MAAM,WAAW,0BAA0B;IACzC;;;;OAIG;IACH,eAAe,CAAC,EAAE,OAAO,CAAA;IACzB,gEAAgE;IAChE,aAAa,CAAC,EAAE,MAAM,CAAA;IACtB,mEAAmE;IACnE,aAAa,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IAC7B,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,uDAAuD;IACvD,kBAAkB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IAClC,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,aAAa,CAAC,EAAE,MAAM,CAAA;IACtB,kBAAkB,CAAC,EAAE,2BAA2B,CAAA;IAChD,QAAQ,CAAC,EAAE,MAAM,CAAA;CAClB;AAED;;;;;GAKG;AACH,eAAO,MAAM,oBAAoB,UAAW,OAAO,KAAG,MAWrD,CAAA;AAED,eAAO,MAAM,mBAAmB,QAsB9B,CAAA;AAcF,eAAO,MAAM,2BAA2B,aAAa,0BAA0B,KAAQ,MA6JtF,CAAA;AAED,eAAO,MAAM,0BAA0B,QAAO,MAsD7C,CAAA;AAED,qFAAqF;AACrF,eAAO,MAAM,sBAAsB,uBAAuB,CAAA;AAE1D,6FAA6F;AAC7F,eAAO,MAAM,gCAAgC,mCAAmC,CAAA;AAEhF,mFAAmF;AACnF,eAAO,MAAM,0BAA0B;gBACZ,OAAO;kBAAgB,OAAO;aAC7C,MAAM,KACf,MAAM,OAAO,MAAM,EAAE,OAAO,CAAC,CAgB/B,CAAA;AAcD;;;;;;;;GAQG;AACH,eAAO,MAAM,qBAAqB,cACrB,sBAAsB,QAC3B,kBAAkB,KACvB,IAwDF,CAAA"}
1
+ {"version":3,"file":"password-reset-route-generator.d.ts","sourceRoot":"","sources":["../../src/password-reset-route-generator.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AACH,OAAO,EAEL,sBAAsB,EACtB,WAAW,EACX,kBAAkB,EAClB,2BAA2B,EAC5B,MAAM,4BAA4B,CAAA;AAenC,eAAO,MAAM,0BAA0B,oBAAoB,CAAA;AAC3D,eAAO,MAAM,yBAAyB,mBAAmB,CAAA;AAEzD,4CAA4C;AAC5C,eAAO,MAAM,gCAAgC,OAAO,CAAA;AACpD,8FAA8F;AAC9F,eAAO,MAAM,+BAA+B,IAAI,CAAA;AAChD,eAAO,MAAM,6BAA6B,KAAK,CAAA;AAC/C,mEAAmE;AACnE,eAAO,MAAM,4BAA4B,KAAK,CAAA;AAE9C,eAAO,MAAM,uBAAuB,oBAAoB,CAAA;AAExD,2EAA2E;AAC3E,eAAO,MAAM,sBAAsB,kFAC8C,CAAA;AAEjF,+EAA+E;AAC/E,eAAO,MAAM,wBAAwB,oEAC8B,CAAA;AAEnE;;;;;;;GAOG;AACH,eAAO,MAAM,uBAAuB,mBAAmB,CAAA;AAEvD;;;;;;GAMG;AACH,eAAO,MAAM,mBAAmB,SAAU,WAAW,KAAG,OAUvD,CAAA;AAED,kFAAkF;AAClF,eAAO,MAAM,yBAAyB,SAAU,WAAW,KAAG,MAAM,EAOnE,CAAA;AAED;;;;GAIG;AACH,eAAO,MAAM,WAAW,SAChB,WAAW,KAChB;IAAE,aAAa,EAAE,MAAM,CAAC;IAAC,eAAe,EAAE,OAAO,CAAA;CAOnD,CAAA;AAED;;;;GAIG;AACH,eAAO,MAAM,kBAAkB,SACvB,WAAW,KAChB;IAAE,aAAa,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAC;IAAC,kBAAkB,EAAE,MAAM,CAAA;CAWxE,CAAA;AAED,MAAM,WAAW,0BAA0B;IACzC;;;;OAIG;IACH,eAAe,CAAC,EAAE,OAAO,CAAA;IACzB,gEAAgE;IAChE,aAAa,CAAC,EAAE,MAAM,CAAA;IACtB,mEAAmE;IACnE,aAAa,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IAC7B,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,uDAAuD;IACvD,kBAAkB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IAClC,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,aAAa,CAAC,EAAE,MAAM,CAAA;IACtB,kBAAkB,CAAC,EAAE,2BAA2B,CAAA;IAChD,QAAQ,CAAC,EAAE,MAAM,CAAA;CAClB;AAED;;;;;GAKG;AACH,eAAO,MAAM,oBAAoB,UAAW,OAAO,KAAG,MAWrD,CAAA;AAED,eAAO,MAAM,mBAAmB,QAsB9B,CAAA;AAcF,eAAO,MAAM,2BAA2B,aAAa,0BAA0B,KAAQ,MAkKtF,CAAA;AAED,eAAO,MAAM,0BAA0B,QAAO,MAsD7C,CAAA;AAED,qFAAqF;AACrF,eAAO,MAAM,sBAAsB,uBAAuB,CAAA;AAE1D,6FAA6F;AAC7F,eAAO,MAAM,gCAAgC,mCAAmC,CAAA;AAEhF,mFAAmF;AACnF,eAAO,MAAM,0BAA0B;gBACZ,OAAO;kBAAgB,OAAO;aAC7C,MAAM,KACf,MAAM,OAAO,MAAM,EAAE,OAAO,CAAC,CAgB/B,CAAA;AAcD;;;;;;;;GAQG;AACH,eAAO,MAAM,qBAAqB,cACrB,sBAAsB,QAC3B,kBAAkB,KACvB,IAwDF,CAAA"}
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.emitPasswordAuthFiles = exports.collectWorkflowNodeConfigs = exports.REQUEST_PASSWORD_RESET_NODE_TYPE = exports.AUTH_PEPPER_SECRET_ENV = exports.generateResetPasswordRoute = exports.generateForgotPasswordRoute = exports.TRUSTED_ORIGIN_CODE = exports.resolveResetPagePath = exports.resetEmailSenderOf = exports.resetLinkOf = exports.resetTokenKeeperPagePaths = exports.readsKeptResetToken = exports.RESET_TOKEN_STORAGE_KEY = exports.FORGOT_PASSWORD_ANSWER = exports.DEFAULT_RESET_PAGE_PATH = exports.RESET_PASSWORD_VISITOR_LIMIT = exports.FORGOT_PASSWORD_VISITOR_LIMIT = exports.FORGOT_PASSWORD_RECIPIENT_LIMIT = exports.PASSWORD_RESET_TOKEN_TTL_SECONDS = exports.RESET_PASSWORD_ROUTE_NAME = exports.FORGOT_PASSWORD_ROUTE_NAME = void 0;
3
+ exports.emitPasswordAuthFiles = exports.collectWorkflowNodeConfigs = exports.REQUEST_PASSWORD_RESET_NODE_TYPE = exports.AUTH_PEPPER_SECRET_ENV = exports.generateResetPasswordRoute = exports.generateForgotPasswordRoute = exports.TRUSTED_ORIGIN_CODE = exports.resolveResetPagePath = exports.resetEmailSenderOf = exports.resetLinkOf = exports.resetTokenKeeperPagePaths = exports.readsKeptResetToken = exports.RESET_TOKEN_STORAGE_KEY = exports.FORGOT_PASSWORD_NOT_SENT = exports.FORGOT_PASSWORD_ANSWER = exports.DEFAULT_RESET_PAGE_PATH = exports.RESET_PASSWORD_VISITOR_LIMIT = exports.FORGOT_PASSWORD_VISITOR_LIMIT = exports.FORGOT_PASSWORD_RECIPIENT_LIMIT = exports.PASSWORD_RESET_TOKEN_TTL_SECONDS = exports.RESET_PASSWORD_ROUTE_NAME = exports.FORGOT_PASSWORD_ROUTE_NAME = void 0;
4
4
  /**
5
5
  * The password-reset routes every project with password sign-in gets:
6
6
  * `pages/api/auth/forgot-password.js` and `pages/api/auth/reset-password.js`.
@@ -38,6 +38,8 @@ exports.RESET_PASSWORD_VISITOR_LIMIT = 20;
38
38
  exports.DEFAULT_RESET_PAGE_PATH = '/reset-password';
39
39
  /** The same answer for every well-formed request, whatever the address. */
40
40
  exports.FORGOT_PASSWORD_ANSWER = 'If an account exists for that email, we sent it a link to reset the password.';
41
+ /** What the route answers, to every address, when a link could not be kept. */
42
+ exports.FORGOT_PASSWORD_NOT_SENT = 'We could not send the reset link. Please try again in a moment.';
41
43
  /**
42
44
  * The sessionStorage key the reset page reads the link's token from (mirrored
43
45
  * in teleport-gui `RESET_TOKEN_STORAGE_KEY`). The published site's first head
@@ -281,7 +283,9 @@ module.exports = async function handler(req, res) {
281
283
  return __security.sendClientError(res, 503, 'We could not reach the account service. Please try again in a moment.', err);
282
284
  }
283
285
 
286
+ var link = null;
284
287
  try {
288
+ await authUtils.ensurePasswordResetsUsable();
285
289
  // Counted for every address, with an account or without, so neither the
286
290
  // answer nor its timing differs.
287
291
  var recipient = await __security.rateLimit({
@@ -293,17 +297,20 @@ module.exports = async function handler(req, res) {
293
297
  if (user && userId != null && user.email && !recipient.allowed) {
294
298
  console.warn('[forgot-password] reset link not sent: this address was sent ${exports.FORGOT_PASSWORD_RECIPIENT_LIMIT} in the last hour');
295
299
  } else if (user && userId != null && user.email) {
296
- if (!authUtils.PASSWORD_RESET_SUPPORTED) {
297
- console.warn('[forgot-password] reset link not sent: password reset needs a Postgres user store');
298
- } else {
299
- var token = crypto.randomBytes(32).toString('hex');
300
- await authUtils.storePasswordReset(userId, sha256(token), TOKEN_TTL_SECONDS);
301
- var resetUrl = trustedOrigin(req) + RESET_PAGE_PATH + TOKEN_LINK_PREFIX + token;
302
- await sendResetEmail(user, resetUrl, token, __emailLocale.resolveRequestLocale(req));
303
- }
300
+ var token = crypto.randomBytes(32).toString('hex');
301
+ await authUtils.storePasswordReset(userId, sha256(token), TOKEN_TTL_SECONDS);
302
+ link = { token: token, url: trustedOrigin(req) + RESET_PAGE_PATH + TOKEN_LINK_PREFIX + token };
304
303
  }
305
304
  } catch (err) {
306
- console.error('[forgot-password] could not send a reset link:', err && err.message ? err.message : err);
305
+ await waitUntilElapsed(startedAt, MIN_RESPONSE_MS);
306
+ return __security.sendClientError(res, 503, ${JSON.stringify(exports.FORGOT_PASSWORD_NOT_SENT)}, err);
307
+ }
308
+ if (link) {
309
+ try {
310
+ await sendResetEmail(user, link.url, link.token, __emailLocale.resolveRequestLocale(req));
311
+ } catch (err) {
312
+ console.error('[forgot-password] could not send a reset link:', err && err.message ? err.message : err);
313
+ }
307
314
  }
308
315
 
309
316
  await waitUntilElapsed(startedAt, MIN_RESPONSE_MS);
@@ -1 +1 @@
1
- {"version":3,"file":"password-reset-route-generator.js","sourceRoot":"","sources":["../../src/password-reset-route-generator.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"password-reset-route-generator.js","sourceRoot":"","sources":["../../src/password-reset-route-generator.ts"],"names":[],"mappings":"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"}
@@ -32,8 +32,9 @@ export declare const securityRuntimeSpecifier: (relativePrefix: string) => strin
32
32
  * itself, an IPv6 one its /64 (an IPv4 tail counted as the two groups it
33
33
  * fills). Every rate limit keyed by visitor uses it.
34
34
  * - `rateLimit` counts fixed windows in the app's Postgres database (table
35
- * `teleport_rate_limits`, created on first use under an advisory lock), so
36
- * every instance of a serverless app counts together. Only an app with no
35
+ * `teleport_rate_limits`, which the editor makes, created here under an
36
+ * advisory lock only when it is really missing), so every instance of a
37
+ * serverless app counts together. Only an app with no
37
38
  * database (or no `pg` driver) counts in a bounded per-instance map; a
38
39
  * database error counts in that map for a short while and is logged once.
39
40
  * A request waits on the database at most 1.5 s; after a failure one
@@ -1 +1 @@
1
- {"version":3,"file":"security-runtime-code.d.ts","sourceRoot":"","sources":["../../../src/security-runtime/security-runtime-code.ts"],"names":[],"mappings":"AAEA;;;GAGG;AACH,eAAO,MAAM,yBAAyB,qBAAqB,CAAA;AAC3D,eAAO,MAAM,qBAAqB,UAAY,CAAA;AAC9C,eAAO,MAAM,0BAA0B,qBAAqB,CAAA;AAC5D,eAAO,MAAM,iBAAiB,yBAAyB,CAAA;AAEvD,qEAAqE;AACrE,eAAO,MAAM,yBAAyB,wCAAwC,CAAA;AAE9E;;;;;GAKG;AACH,eAAO,MAAM,wBAAwB,mBAAoB,MAAM,KAAG,MACoB,CAAA;AAEtF;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiCG;AACH,eAAO,MAAM,2BAA2B,QAAO,MAygB9C,CAAA"}
1
+ {"version":3,"file":"security-runtime-code.d.ts","sourceRoot":"","sources":["../../../src/security-runtime/security-runtime-code.ts"],"names":[],"mappings":"AAEA;;;GAGG;AACH,eAAO,MAAM,yBAAyB,qBAAqB,CAAA;AAC3D,eAAO,MAAM,qBAAqB,UAAY,CAAA;AAC9C,eAAO,MAAM,0BAA0B,qBAAqB,CAAA;AAC5D,eAAO,MAAM,iBAAiB,yBAAyB,CAAA;AAEvD,qEAAqE;AACrE,eAAO,MAAM,yBAAyB,wCAAwC,CAAA;AAE9E;;;;;GAKG;AACH,eAAO,MAAM,wBAAwB,mBAAoB,MAAM,KAAG,MACoB,CAAA;AAEtF;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkCG;AACH,eAAO,MAAM,2BAA2B,QAAO,MA4gB9C,CAAA"}
@@ -37,8 +37,9 @@ exports.securityRuntimeSpecifier = securityRuntimeSpecifier;
37
37
  * itself, an IPv6 one its /64 (an IPv4 tail counted as the two groups it
38
38
  * fills). Every rate limit keyed by visitor uses it.
39
39
  * - `rateLimit` counts fixed windows in the app's Postgres database (table
40
- * `teleport_rate_limits`, created on first use under an advisory lock), so
41
- * every instance of a serverless app counts together. Only an app with no
40
+ * `teleport_rate_limits`, which the editor makes, created here under an
41
+ * advisory lock only when it is really missing), so every instance of a
42
+ * serverless app counts together. Only an app with no
42
43
  * database (or no `pg` driver) counts in a bounded per-instance map; a
43
44
  * database error counts in that map for a short while and is logged once.
44
45
  * A request waits on the database at most 1.5 s; after a failure one
@@ -101,6 +102,9 @@ var CLEANUP_MAX_BATCHES = 3;
101
102
  var CLEANUP_QUERY_TIMEOUT_MS = 5000;
102
103
  var MEMORY_MAX_WINDOWS = 10000;
103
104
 
105
+ // A site's database role may read and write its tables without being allowed
106
+ // to create one, and CREATE ... IF NOT EXISTS asks for that permission even when
107
+ // the table is there: these run only for a table that really is missing.
104
108
  var CREATE_SQL = 'CREATE TABLE IF NOT EXISTS "' + RATE_LIMITS_TABLE + '" (' +
105
109
  '"key" TEXT NOT NULL, "window_start" BIGINT NOT NULL, "count" INTEGER NOT NULL DEFAULT 0, ' +
106
110
  '"expires_at" BIGINT NOT NULL, PRIMARY KEY ("key", "window_start"))';
@@ -297,7 +301,6 @@ function __memoryHit(storageKey, windowStart, windowSeconds, nowSec) {
297
301
  return entry.count;
298
302
  }
299
303
 
300
- var __tableReady = false;
301
304
  // Healthy, every request asks the database. After a failure, requests count in
302
305
  // memory until __databaseRetryAt; then ONE request probes (it pushes the retry
303
306
  // time back before it asks), so the requests beside it never wait on a
@@ -376,12 +379,15 @@ async function __databaseHit(storageKey, windowStart, expiresAt, nowSec) {
376
379
  return within(client.query(sql, values || []), QUERY_TIMEOUT_MS);
377
380
  };
378
381
  var createTable = async function () {
379
- await run('BEGIN');
380
- await run(LOCK_SQL, [RATE_LIMITS_TABLE]);
381
- await run(CREATE_SQL);
382
- await run(INDEX_SQL);
383
- await run('COMMIT');
384
- __tableReady = true;
382
+ try {
383
+ await run('BEGIN');
384
+ await run(LOCK_SQL, [RATE_LIMITS_TABLE]);
385
+ await run(CREATE_SQL);
386
+ await run(INDEX_SQL);
387
+ await run('COMMIT');
388
+ } catch (err) {
389
+ throw new Error('the table ' + RATE_LIMITS_TABLE + ' is missing and could not be created: ' + __errorText(err));
390
+ }
385
391
  };
386
392
  var hit = function () {
387
393
  return run(HIT_SQL, [storageKey, windowStart, expiresAt]);
@@ -389,15 +395,13 @@ async function __databaseHit(storageKey, windowStart, expiresAt, nowSec) {
389
395
  var handedToCleanup = false;
390
396
  try {
391
397
  await within(client.connect(), CONNECT_TIMEOUT_MS);
392
- if (!__tableReady) await createTable();
393
398
  var result;
394
399
  try {
395
400
  result = await hit();
396
401
  } catch (err) {
397
- // The table went away (dropped, or the database restored from an
398
- // older backup): create it again and count this request in it.
402
+ // The table is not there (dropped, or the database restored from an
403
+ // older backup): create it and count this request in it.
399
404
  if (!err || err.code !== '42P01') throw err;
400
- __tableReady = false;
401
405
  await createTable();
402
406
  result = await hit();
403
407
  }
@@ -1 +1 @@
1
- {"version":3,"file":"security-runtime-code.js","sourceRoot":"","sources":["../../../src/security-runtime/security-runtime-code.ts"],"names":[],"mappings":";;;AAAA,sDAA4D;AAE5D;;;GAGG;AACU,QAAA,yBAAyB,GAAG,kBAAkB,CAAA;AAC9C,QAAA,qBAAqB,GAAG,CAAC,OAAO,CAAC,CAAA;AACjC,QAAA,0BAA0B,GAAG,kBAAkB,CAAA;AAC/C,QAAA,iBAAiB,GAAG,sBAAsB,CAAA;AAEvD,qEAAqE;AACxD,QAAA,yBAAyB,GAAG,qCAAqC,CAAA;AAE9E;;;;;GAKG;AACI,MAAM,wBAAwB,GAAG,CAAC,cAAsB,EAAU,EAAE,CACzE,GAAG,cAAc,IAAI,6BAAqB,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,kCAA0B,EAAE,CAAA;AADzE,QAAA,wBAAwB,4BACiD;AAEtF;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiCG;AACI,MAAM,2BAA2B,GAAG,GAAW,EAAE,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;EA0BvD,IAAA,yCAAwB,GAAE;;2BAED,yBAAiB;2BACjB,iCAAyB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA4enD,CAAA;AAzgBY,QAAA,2BAA2B,+BAygBvC"}
1
+ {"version":3,"file":"security-runtime-code.js","sourceRoot":"","sources":["../../../src/security-runtime/security-runtime-code.ts"],"names":[],"mappings":";;;AAAA,sDAA4D;AAE5D;;;GAGG;AACU,QAAA,yBAAyB,GAAG,kBAAkB,CAAA;AAC9C,QAAA,qBAAqB,GAAG,CAAC,OAAO,CAAC,CAAA;AACjC,QAAA,0BAA0B,GAAG,kBAAkB,CAAA;AAC/C,QAAA,iBAAiB,GAAG,sBAAsB,CAAA;AAEvD,qEAAqE;AACxD,QAAA,yBAAyB,GAAG,qCAAqC,CAAA;AAE9E;;;;;GAKG;AACI,MAAM,wBAAwB,GAAG,CAAC,cAAsB,EAAU,EAAE,CACzE,GAAG,cAAc,IAAI,6BAAqB,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,kCAA0B,EAAE,CAAA;AADzE,QAAA,wBAAwB,4BACiD;AAEtF;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkCG;AACI,MAAM,2BAA2B,GAAG,GAAW,EAAE,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;EA0BvD,IAAA,yCAAwB,GAAE;;2BAED,yBAAiB;2BACjB,iCAAyB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA+enD,CAAA;AA5gBY,QAAA,2BAA2B,+BA4gBvC"}