@teleporthq/teleport-plugin-next-workflows 0.44.0 → 0.44.1

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 (158) hide show
  1. package/__tests__/_helpers/fake-store-database.ts +428 -0
  2. package/__tests__/_helpers/invoice-store.ts +382 -0
  3. package/__tests__/email-locale-senders.test.ts +3 -1
  4. package/__tests__/email-sender-name.test.ts +513 -0
  5. package/__tests__/graph-utils-topological-order.test.ts +155 -1
  6. package/__tests__/invoice-billing-details.test.ts +107 -1
  7. package/__tests__/invoice-data-access-replace.test.ts +236 -2
  8. package/__tests__/invoice-order-items-settle.test.ts +1 -1
  9. package/__tests__/invoice-payment-email.test.ts +191 -0
  10. package/__tests__/invoice-regenerate-email.test.ts +288 -0
  11. package/__tests__/invoice-regenerate-route.test.ts +9 -7
  12. package/__tests__/invoice-reservation.test.ts +1 -1
  13. package/__tests__/invoice-tender.test.ts +1 -1
  14. package/__tests__/segment-splitter-checkout-order.test.ts +306 -0
  15. package/__tests__/streaming-on-end-env-filter.test.ts +18 -18
  16. package/__tests__/streaming-on-end-order.test.ts +387 -0
  17. package/dist/cjs/account-delete-route-generator.d.ts +1 -0
  18. package/dist/cjs/account-delete-route-generator.d.ts.map +1 -1
  19. package/dist/cjs/account-delete-route-generator.js +2 -1
  20. package/dist/cjs/account-delete-route-generator.js.map +1 -1
  21. package/dist/cjs/auth-generator.d.ts +1 -0
  22. package/dist/cjs/auth-generator.d.ts.map +1 -1
  23. package/dist/cjs/auth-generator.js +2 -1
  24. package/dist/cjs/auth-generator.js.map +1 -1
  25. package/dist/cjs/executor-generator.d.ts.map +1 -1
  26. package/dist/cjs/executor-generator.js +9 -26
  27. package/dist/cjs/executor-generator.js.map +1 -1
  28. package/dist/cjs/graph-utils.d.ts +31 -1
  29. package/dist/cjs/graph-utils.d.ts.map +1 -1
  30. package/dist/cjs/graph-utils.js +112 -10
  31. package/dist/cjs/graph-utils.js.map +1 -1
  32. package/dist/cjs/invoice/api-routes-code.d.ts +12 -3
  33. package/dist/cjs/invoice/api-routes-code.d.ts.map +1 -1
  34. package/dist/cjs/invoice/api-routes-code.js +152 -21
  35. package/dist/cjs/invoice/api-routes-code.js.map +1 -1
  36. package/dist/cjs/invoice/data-access-code.d.ts.map +1 -1
  37. package/dist/cjs/invoice/data-access-code.js +133 -21
  38. package/dist/cjs/invoice/data-access-code.js.map +1 -1
  39. package/dist/cjs/invoice/email-sender-code.d.ts.map +1 -1
  40. package/dist/cjs/invoice/email-sender-code.js +15 -25
  41. package/dist/cjs/invoice/email-sender-code.js.map +1 -1
  42. package/dist/cjs/invoice/index.js +1 -1
  43. package/dist/cjs/invoice/index.js.map +1 -1
  44. package/dist/cjs/invoice/invoice-assembly-code.d.ts.map +1 -1
  45. package/dist/cjs/invoice/invoice-assembly-code.js +10 -6
  46. package/dist/cjs/invoice/invoice-assembly-code.js.map +1 -1
  47. package/dist/cjs/invoice/invoice-html-code.d.ts.map +1 -1
  48. package/dist/cjs/invoice/invoice-html-code.js +3 -0
  49. package/dist/cjs/invoice/invoice-html-code.js.map +1 -1
  50. package/dist/cjs/nodes/email/email-mailgun.d.ts.map +1 -1
  51. package/dist/cjs/nodes/email/email-mailgun.js +4 -2
  52. package/dist/cjs/nodes/email/email-mailgun.js.map +1 -1
  53. package/dist/cjs/nodes/email/email-postmark.d.ts.map +1 -1
  54. package/dist/cjs/nodes/email/email-postmark.js +5 -2
  55. package/dist/cjs/nodes/email/email-postmark.js.map +1 -1
  56. package/dist/cjs/nodes/email/email-resend.d.ts.map +1 -1
  57. package/dist/cjs/nodes/email/email-resend.js +5 -2
  58. package/dist/cjs/nodes/email/email-resend.js.map +1 -1
  59. package/dist/cjs/nodes/email/email-sendgrid.d.ts.map +1 -1
  60. package/dist/cjs/nodes/email/email-sendgrid.js +8 -2
  61. package/dist/cjs/nodes/email/email-sendgrid.js.map +1 -1
  62. package/dist/cjs/nodes/storage/storage-local-remove.d.ts.map +1 -1
  63. package/dist/cjs/nodes/storage/storage-local-remove.js +2 -0
  64. package/dist/cjs/nodes/storage/storage-local-remove.js.map +1 -1
  65. package/dist/cjs/nodes/storage/storage-local-set.d.ts.map +1 -1
  66. package/dist/cjs/nodes/storage/storage-local-set.js +4 -0
  67. package/dist/cjs/nodes/storage/storage-local-set.js.map +1 -1
  68. package/dist/cjs/segment-splitter.d.ts.map +1 -1
  69. package/dist/cjs/segment-splitter.js +65 -27
  70. package/dist/cjs/segment-splitter.js.map +1 -1
  71. package/dist/cjs/transactional-email-code.d.ts.map +1 -1
  72. package/dist/cjs/transactional-email-code.js +32 -18
  73. package/dist/cjs/transactional-email-code.js.map +1 -1
  74. package/dist/cjs/tsconfig.tsbuildinfo +1 -1
  75. package/dist/cjs/workflow-project-plugin.d.ts.map +1 -1
  76. package/dist/cjs/workflow-project-plugin.js +2 -0
  77. package/dist/cjs/workflow-project-plugin.js.map +1 -1
  78. package/dist/esm/account-delete-route-generator.d.ts +1 -0
  79. package/dist/esm/account-delete-route-generator.d.ts.map +1 -1
  80. package/dist/esm/account-delete-route-generator.js +2 -1
  81. package/dist/esm/account-delete-route-generator.js.map +1 -1
  82. package/dist/esm/auth-generator.d.ts +1 -0
  83. package/dist/esm/auth-generator.d.ts.map +1 -1
  84. package/dist/esm/auth-generator.js +2 -1
  85. package/dist/esm/auth-generator.js.map +1 -1
  86. package/dist/esm/executor-generator.d.ts.map +1 -1
  87. package/dist/esm/executor-generator.js +9 -26
  88. package/dist/esm/executor-generator.js.map +1 -1
  89. package/dist/esm/graph-utils.d.ts +31 -1
  90. package/dist/esm/graph-utils.d.ts.map +1 -1
  91. package/dist/esm/graph-utils.js +109 -9
  92. package/dist/esm/graph-utils.js.map +1 -1
  93. package/dist/esm/invoice/api-routes-code.d.ts +12 -3
  94. package/dist/esm/invoice/api-routes-code.d.ts.map +1 -1
  95. package/dist/esm/invoice/api-routes-code.js +152 -21
  96. package/dist/esm/invoice/api-routes-code.js.map +1 -1
  97. package/dist/esm/invoice/data-access-code.d.ts.map +1 -1
  98. package/dist/esm/invoice/data-access-code.js +133 -21
  99. package/dist/esm/invoice/data-access-code.js.map +1 -1
  100. package/dist/esm/invoice/email-sender-code.d.ts.map +1 -1
  101. package/dist/esm/invoice/email-sender-code.js +15 -25
  102. package/dist/esm/invoice/email-sender-code.js.map +1 -1
  103. package/dist/esm/invoice/index.js +1 -1
  104. package/dist/esm/invoice/index.js.map +1 -1
  105. package/dist/esm/invoice/invoice-assembly-code.d.ts.map +1 -1
  106. package/dist/esm/invoice/invoice-assembly-code.js +10 -6
  107. package/dist/esm/invoice/invoice-assembly-code.js.map +1 -1
  108. package/dist/esm/invoice/invoice-html-code.d.ts.map +1 -1
  109. package/dist/esm/invoice/invoice-html-code.js +3 -0
  110. package/dist/esm/invoice/invoice-html-code.js.map +1 -1
  111. package/dist/esm/nodes/email/email-mailgun.d.ts.map +1 -1
  112. package/dist/esm/nodes/email/email-mailgun.js +4 -2
  113. package/dist/esm/nodes/email/email-mailgun.js.map +1 -1
  114. package/dist/esm/nodes/email/email-postmark.d.ts.map +1 -1
  115. package/dist/esm/nodes/email/email-postmark.js +5 -2
  116. package/dist/esm/nodes/email/email-postmark.js.map +1 -1
  117. package/dist/esm/nodes/email/email-resend.d.ts.map +1 -1
  118. package/dist/esm/nodes/email/email-resend.js +5 -2
  119. package/dist/esm/nodes/email/email-resend.js.map +1 -1
  120. package/dist/esm/nodes/email/email-sendgrid.d.ts.map +1 -1
  121. package/dist/esm/nodes/email/email-sendgrid.js +8 -2
  122. package/dist/esm/nodes/email/email-sendgrid.js.map +1 -1
  123. package/dist/esm/nodes/storage/storage-local-remove.d.ts.map +1 -1
  124. package/dist/esm/nodes/storage/storage-local-remove.js +2 -0
  125. package/dist/esm/nodes/storage/storage-local-remove.js.map +1 -1
  126. package/dist/esm/nodes/storage/storage-local-set.d.ts.map +1 -1
  127. package/dist/esm/nodes/storage/storage-local-set.js +4 -0
  128. package/dist/esm/nodes/storage/storage-local-set.js.map +1 -1
  129. package/dist/esm/segment-splitter.d.ts.map +1 -1
  130. package/dist/esm/segment-splitter.js +66 -28
  131. package/dist/esm/segment-splitter.js.map +1 -1
  132. package/dist/esm/transactional-email-code.d.ts.map +1 -1
  133. package/dist/esm/transactional-email-code.js +32 -18
  134. package/dist/esm/transactional-email-code.js.map +1 -1
  135. package/dist/esm/tsconfig.tsbuildinfo +1 -1
  136. package/dist/esm/workflow-project-plugin.d.ts.map +1 -1
  137. package/dist/esm/workflow-project-plugin.js +2 -0
  138. package/dist/esm/workflow-project-plugin.js.map +1 -1
  139. package/package.json +3 -3
  140. package/src/account-delete-route-generator.ts +3 -1
  141. package/src/auth-generator.ts +3 -1
  142. package/src/executor-generator.ts +9 -26
  143. package/src/graph-utils.ts +143 -11
  144. package/src/invoice/api-routes-code.ts +166 -21
  145. package/src/invoice/data-access-code.ts +139 -21
  146. package/src/invoice/email-sender-code.ts +15 -25
  147. package/src/invoice/index.ts +1 -1
  148. package/src/invoice/invoice-assembly-code.ts +10 -6
  149. package/src/invoice/invoice-html-code.ts +3 -0
  150. package/src/nodes/email/email-mailgun.ts +11 -2
  151. package/src/nodes/email/email-postmark.ts +12 -2
  152. package/src/nodes/email/email-resend.ts +12 -2
  153. package/src/nodes/email/email-sendgrid.ts +15 -2
  154. package/src/nodes/storage/storage-local-remove.ts +4 -0
  155. package/src/nodes/storage/storage-local-set.ts +6 -0
  156. package/src/segment-splitter.ts +90 -36
  157. package/src/transactional-email-code.ts +32 -21
  158. package/src/workflow-project-plugin.ts +2 -0
@@ -1 +1 @@
1
- {"version":3,"file":"graph-utils.d.ts","sourceRoot":"","sources":["../../src/graph-utils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAA;AAE9F,eAAO,MAAM,WAAW,UACf,gBAAgB,EAAE,UACjB,MAAM,KACb,gBAAgB,GAAG,SAErB,CAAA;AAED,eAAO,MAAM,mBAAmB,WAAY,MAAM,SAAS,gBAAgB,EAAE,KAAG,MAAM,EAErF,CAAA;AAED,eAAO,MAAM,eAAe,WAAY,MAAM,SAAS,gBAAgB,EAAE,KAAG,MAAM,EAEjF,CAAA;AAED,eAAO,MAAM,YAAY,WAAY,MAAM,SAAS,gBAAgB,EAAE,KAAG,gBAAgB,EAExF,CAAA;AAED,eAAO,MAAM,UAAU,WAAY,MAAM,SAAS,gBAAgB,EAAE,KAAG,gBAAgB,EAEtF,CAAA;AAED;;;;;GAKG;AACH,eAAO,MAAM,6BAA6B,UAAW,OAAO,OAAO,IAAI,MAAM,CAAC,KAAG,IAahF,CAAA;AAED,eAAO,MAAM,mBAAmB,UACvB,gBAAgB,EAAE,SAClB,gBAAgB,EAAE,KACxB,MAAM,EAqFR,CAAA;AAED,eAAO,MAAM,gBAAgB,eAAgB,MAAM,SAAS,gBAAgB,EAAE,KAAG,MAAM,EA8BtF,CAAA;AAED,eAAO,MAAM,mBAAmB,mBACd,MAAM,SACf,gBAAgB,EAAE,KACxB;IAAE,cAAc,EAAE,MAAM,EAAE,CAAC;IAAC,eAAe,CAAC,EAAE,MAAM,CAAC;IAAC,aAAa,CAAC,EAAE,MAAM,CAAA;CAY9E,CAAA;AAED,eAAO,MAAM,cAAc,iBACX,MAAM,SACb,gBAAgB,EAAE,KACxB,MAAM;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,CAc5C,CAAA;AAED,eAAO,MAAM,aAAa,aACd,MAAM,SACT,gBAAgB,EAAE,KACxB;IAAE,YAAY,CAAC,EAAE,MAAM,CAAC;IAAC,aAAa,CAAC,EAAE,MAAM,CAAA;CAQjD,CAAA;AAED,eAAO,MAAM,iBAAiB,eAChB,MAAM,SACX,gBAAgB,EAAE,KACxB,MAAM,GAAG,SAGX,CAAA;AAED,eAAO,MAAM,oBAAoB,cAAe,aAAa,KAAG,IAAI,MAAM,CAoBzE,CAAA;AAED,eAAO,MAAM,aAAa,aAOxB,CAAA;AAEF,eAAO,MAAM,iBAAiB,SAAU,gBAAgB,KAAG,OAE1D,CAAA;AAED,eAAO,MAAM,oBAAoB,WACvB,MAAM,SACP,gBAAgB,EAAE,KACxB;IAAE,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAAC,aAAa,CAAC,EAAE,MAAM,CAAA;CAOrD,CAAA;AAED,eAAO,MAAM,iBAAiB,aAAc,MAAM,KAAG,OAIpD,CAAA;AAED,eAAO,MAAM,cAAc,aAAc,MAAM,KAAG,OAajD,CAAA;AAED,eAAO,MAAM,mBAAmB,aAW9B,CAAA;AAEF,eAAO,MAAM,sBAAsB,aAKjC,CAAA;AAEF,eAAO,MAAM,mBAAmB,cAAe,aAAa,KAAG,OAiC9D,CAAA;AAED,eAAO,MAAM,8BAA8B,cAAe,aAAa,KAAG,IAAI,MAAM,CAoCnF,CAAA"}
1
+ {"version":3,"file":"graph-utils.d.ts","sourceRoot":"","sources":["../../src/graph-utils.ts"],"names":[],"mappings":"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"}
@@ -33,19 +33,27 @@ export const collectWorkflowContextNodeIds = (value, out) => {
33
33
  }
34
34
  Object.values(record).forEach((child) => collectWorkflowContextNodeIds(child, out));
35
35
  };
36
- export const getTopologicalOrder = (nodes, edges) => {
36
+ /**
37
+ * The edge that sends a loop body back to its loop for the next item. The loop
38
+ * does not wait for it: counted as a dependency it left the loop, and every
39
+ * node after it, waiting forever.
40
+ */
41
+ const isLoopBackEdge = (edge) => edge.targetHandle === 'loop-back';
42
+ /**
43
+ * Every dependency each node waits for: the source of each edge into it (but a
44
+ * loop's back edge) and every node whose output it reads through a
45
+ * `workflowContext` reference. Listed per SOURCE, in edge order then reference
46
+ * order — the order the topological sort below releases them in.
47
+ */
48
+ export const getDependents = (nodes, edges) => {
37
49
  const nodeIds = new Set(nodes.map((n) => n.id));
38
- const inDegree = {};
39
50
  const adjacency = {};
40
- const nodeIdArr = Array.from(nodeIds);
41
- nodeIdArr.forEach((id) => {
42
- inDegree[id] = 0;
51
+ nodeIds.forEach((id) => {
43
52
  adjacency[id] = [];
44
53
  });
45
54
  edges.forEach((edge) => {
46
- if (nodeIds.has(edge.source) && nodeIds.has(edge.target)) {
55
+ if (nodeIds.has(edge.source) && nodeIds.has(edge.target) && !isLoopBackEdge(edge)) {
47
56
  adjacency[edge.source].push(edge.target);
48
- inDegree[edge.target]++;
49
57
  }
50
58
  });
51
59
  // Virtual dependency edges from IMPLICIT data dependencies: a node that
@@ -75,15 +83,106 @@ export const getTopologicalOrder = (nodes, edges) => {
75
83
  return;
76
84
  }
77
85
  adjacency[refId].push(node.id);
78
- inDegree[node.id]++;
79
86
  });
80
87
  });
88
+ return adjacency;
89
+ };
90
+ /**
91
+ * Every node reachable from `startId` without passing through `parentId` or a
92
+ * loop's back edge: what the runtime skips when `parentId` does not take the
93
+ * branch starting at `startId`.
94
+ */
95
+ const collectBranchNodeIds = (startId, targetsBySource, parentId) => {
96
+ const reached = new Set();
97
+ const queue = [startId];
98
+ while (queue.length > 0) {
99
+ const current = queue.shift();
100
+ if (reached.has(current) || current === parentId) {
101
+ continue;
102
+ }
103
+ reached.add(current);
104
+ queue.push(...(targetsBySource.get(current) || []));
105
+ }
106
+ return reached;
107
+ };
108
+ /**
109
+ * Whether two nodes can never both run: they lie on different branches of the
110
+ * same if-statement or switch, and the runtime skips everything reachable from
111
+ * the branch it did not take.
112
+ */
113
+ export const getNeverRunTogether = (nodes, edges) => {
114
+ const targetsBySource = new Map();
115
+ edges.forEach((edge) => {
116
+ if (!isLoopBackEdge(edge)) {
117
+ targetsBySource.set(edge.source, [...(targetsBySource.get(edge.source) || []), edge.target]);
118
+ }
119
+ });
120
+ const branchesByNodeId = new Map();
121
+ nodes.forEach((gate) => {
122
+ const branchTargets = gate.type === 'general-if-statement'
123
+ ? Object.entries(getIfBranches(gate.id, edges))
124
+ : gate.type === 'general-switch'
125
+ ? getSwitchCases(gate.id, edges).map(({ caseId, targetId }) => [caseId, targetId])
126
+ : [];
127
+ branchTargets.forEach(([branch, targetId]) => {
128
+ if (!targetId) {
129
+ return;
130
+ }
131
+ collectBranchNodeIds(targetId, targetsBySource, gate.id).forEach((id) => {
132
+ const branches = branchesByNodeId.get(id) || [];
133
+ branches.push({ gateId: gate.id, branch });
134
+ branchesByNodeId.set(id, branches);
135
+ });
136
+ });
137
+ });
138
+ return (a, b) => {
139
+ const branchesOfB = branchesByNodeId.get(b) || [];
140
+ return (branchesByNodeId.get(a) || []).some((x) => branchesOfB.some((y) => x.gateId === y.gateId && x.branch !== y.branch));
141
+ };
142
+ };
143
+ /**
144
+ * Kahn's order, the lowest `stepNumber` first among the nodes ready to run.
145
+ *
146
+ * With `sideOf` (the segment splitter), a ready node that stays on the side
147
+ * the previous node ran on may go ahead of lower-step nodes on the other side —
148
+ * one client/server switch fewer, so one server round trip fewer — but only of
149
+ * nodes it never runs together with. A refusal branch's toast waits for the
150
+ * main chain's server steps; two steps that both run keep their order, which
151
+ * custom JavaScript reads `params` by.
152
+ */
153
+ export const getTopologicalOrder = (nodes, edges, sideOf) => {
154
+ const nodeIds = new Set(nodes.map((n) => n.id));
155
+ const adjacency = getDependents(nodes, edges);
156
+ const inDegree = {};
157
+ const nodeIdArr = Array.from(nodeIds);
158
+ nodeIdArr.forEach((id) => {
159
+ inDegree[id] = 0;
160
+ });
161
+ nodeIdArr.forEach((id) => adjacency[id].forEach((dependent) => {
162
+ inDegree[dependent]++;
163
+ }));
81
164
  const queue = [];
82
165
  nodeIdArr.forEach((id) => {
83
166
  if (inDegree[id] === 0) {
84
167
  queue.push(id);
85
168
  }
86
169
  });
170
+ const nodeById = new Map(nodes.map((n) => [n.id, n]));
171
+ const neverRunTogether = sideOf ? getNeverRunTogether(nodes, edges) : null;
172
+ let currentSide = null;
173
+ const staysOnCurrentSide = (id) => {
174
+ const side = sideOf(nodeById.get(id));
175
+ return side === null || side === currentSide;
176
+ };
177
+ const nextIndex = () => {
178
+ if (!sideOf || currentSide === null || staysOnCurrentSide(queue[0])) {
179
+ return 0;
180
+ }
181
+ const index = queue.findIndex((id, i) => i > 0 &&
182
+ staysOnCurrentSide(id) &&
183
+ queue.slice(0, i).every((ahead) => neverRunTogether(id, ahead)));
184
+ return Math.max(index, 0);
185
+ };
87
186
  const order = [];
88
187
  while (queue.length > 0) {
89
188
  queue.sort((a, b) => {
@@ -91,7 +190,8 @@ export const getTopologicalOrder = (nodes, edges) => {
91
190
  const nodeB = nodes.find((n) => n.id === b);
92
191
  return ((nodeA === null || nodeA === void 0 ? void 0 : nodeA.stepNumber) || 0) - ((nodeB === null || nodeB === void 0 ? void 0 : nodeB.stepNumber) || 0);
93
192
  });
94
- const current = queue.shift();
193
+ const [current] = queue.splice(nextIndex(), 1);
194
+ currentSide = (sideOf && sideOf(nodeById.get(current))) || currentSide;
95
195
  order.push(current);
96
196
  for (const neighbor of adjacency[current] || []) {
97
197
  inDegree[neighbor]--;
@@ -1 +1 @@
1
- {"version":3,"file":"graph-utils.js","sourceRoot":"","sources":["../../src/graph-utils.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"graph-utils.js","sourceRoot":"","sources":["../../src/graph-utils.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,WAAW,GAAG,CACzB,KAAyB,EACzB,MAAc,EACgB,EAAE;IAChC,OAAO,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,MAAM,CAAC,CAAA;AAC3C,CAAC,CAAA;AAED,MAAM,CAAC,MAAM,mBAAmB,GAAG,CAAC,MAAc,EAAE,KAAyB,EAAY,EAAE;IACzF,OAAO,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,CAAA;AACtE,CAAC,CAAA;AAED,MAAM,CAAC,MAAM,eAAe,GAAG,CAAC,MAAc,EAAE,KAAyB,EAAY,EAAE;IACrF,OAAO,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,CAAA;AACtE,CAAC,CAAA;AAED,MAAM,CAAC,MAAM,YAAY,GAAG,CAAC,MAAc,EAAE,KAAyB,EAAsB,EAAE;IAC5F,OAAO,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,MAAM,CAAC,CAAA;AACjD,CAAC,CAAA;AAED,MAAM,CAAC,MAAM,UAAU,GAAG,CAAC,MAAc,EAAE,KAAyB,EAAsB,EAAE;IAC1F,OAAO,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,MAAM,CAAC,CAAA;AACjD,CAAC,CAAA;AAED;;;;;GAKG;AACH,MAAM,CAAC,MAAM,6BAA6B,GAAG,CAAC,KAAc,EAAE,GAAgB,EAAQ,EAAE;IACtF,IAAI,CAAC,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE;QACvC,OAAM;KACP;IACD,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE;QACxB,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,6BAA6B,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC,CAAA;QACjE,OAAM;KACP;IACD,MAAM,MAAM,GAAG,KAAgC,CAAA;IAC/C,IAAI,MAAM,CAAC,IAAI,KAAK,iBAAiB,IAAI,OAAO,MAAM,CAAC,MAAM,KAAK,QAAQ,EAAE;QAC1E,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,CAAA;KACvB;IACD,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,6BAA6B,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,CAAA;AACrF,CAAC,CAAA;AAED;;;;GAIG;AACH,MAAM,cAAc,GAAG,CAAC,IAAsB,EAAW,EAAE,CAAC,IAAI,CAAC,YAAY,KAAK,WAAW,CAAA;AAU7F;;;;;GAKG;AACH,MAAM,CAAC,MAAM,aAAa,GAAG,CAC3B,KAAyB,EACzB,KAAyB,EACC,EAAE;IAC5B,MAAM,OAAO,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAA;IAC/C,MAAM,SAAS,GAA6B,EAAE,CAAA;IAC9C,OAAO,CAAC,OAAO,CAAC,CAAC,EAAE,EAAE,EAAE;QACrB,SAAS,CAAC,EAAE,CAAC,GAAG,EAAE,CAAA;IACpB,CAAC,CAAC,CAAA;IAEF,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE;QACrB,IAAI,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,EAAE;YACjF,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAA;SACzC;IACH,CAAC,CAAC,CAAA;IAEF,wEAAwE;IACxE,0EAA0E;IAC1E,0EAA0E;IAC1E,0EAA0E;IAC1E,8EAA8E;IAC9E,6EAA6E;IAC7E,8EAA8E;IAC9E,yEAAyE;IACzE,2EAA2E;IAC3E,4EAA4E;IAC5E,6EAA6E;IAC7E,wEAAwE;IACxE,MAAM,YAAY,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;IAC9D,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE;QACrB,MAAM,aAAa,GAAG,IAAI,GAAG,EAAU,CAAA;QACvC,6BAA6B,CAAC,IAAI,CAAC,MAAM,EAAE,aAAa,CAAC,CAAA;QACzD,aAAa,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,EAAE;YAC9B,IAAI,KAAK,KAAK,IAAI,CAAC,EAAE,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE;gBAC5C,OAAM;aACP;YACD,IAAI,iBAAiB,CAAC,YAAY,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,EAAE;gBACpD,OAAM;aACP;YACD,IAAI,SAAS,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE;gBACtC,OAAM;aACP;YACD,SAAS,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;QAChC,CAAC,CAAC,CAAA;IACJ,CAAC,CAAC,CAAA;IAEF,OAAO,SAAS,CAAA;AAClB,CAAC,CAAA;AAED;;;;GAIG;AACH,MAAM,oBAAoB,GAAG,CAC3B,OAAe,EACf,eAAsC,EACtC,QAAgB,EACH,EAAE;IACf,MAAM,OAAO,GAAG,IAAI,GAAG,EAAU,CAAA;IACjC,MAAM,KAAK,GAAG,CAAC,OAAO,CAAC,CAAA;IACvB,OAAO,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE;QACvB,MAAM,OAAO,GAAG,KAAK,CAAC,KAAK,EAAG,CAAA;QAC9B,IAAI,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,OAAO,KAAK,QAAQ,EAAE;YAChD,SAAQ;SACT;QACD,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,CAAA;QACpB,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,eAAe,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC,CAAA;KACpD;IACD,OAAO,OAAO,CAAA;AAChB,CAAC,CAAA;AAED;;;;GAIG;AACH,MAAM,CAAC,MAAM,mBAAmB,GAAG,CACjC,KAAyB,EACzB,KAAyB,EACY,EAAE;IACvC,MAAM,eAAe,GAAG,IAAI,GAAG,EAAoB,CAAA;IACnD,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE;QACrB,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,EAAE;YACzB,eAAe,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,eAAe,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC,CAAA;SAC7F;IACH,CAAC,CAAC,CAAA;IACF,MAAM,gBAAgB,GAAG,IAAI,GAAG,EAAqD,CAAA;IACrF,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE;QACrB,MAAM,aAAa,GACjB,IAAI,CAAC,IAAI,KAAK,sBAAsB;YAClC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,aAAa,CAAC,IAAI,CAAC,EAAE,EAAE,KAAK,CAAC,CAAC;YAC/C,CAAC,CAAC,IAAI,CAAC,IAAI,KAAK,gBAAgB;gBAChC,CAAC,CAAC,cAAc,CAAC,IAAI,CAAC,EAAE,EAAE,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,MAAM,EAAE,QAAQ,EAAE,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;gBAClF,CAAC,CAAC,EAAE,CAAA;QACR,aAAa,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,EAAE,QAAQ,CAAC,EAAE,EAAE;YAC3C,IAAI,CAAC,QAAQ,EAAE;gBACb,OAAM;aACP;YACD,oBAAoB,CAAC,QAAQ,EAAE,eAAe,EAAE,IAAI,CAAC,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,EAAE,EAAE,EAAE;gBACtE,MAAM,QAAQ,GAAG,gBAAgB,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,EAAE,CAAA;gBAC/C,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,EAAE,MAAM,EAAE,CAAC,CAAA;gBAC1C,gBAAgB,CAAC,GAAG,CAAC,EAAE,EAAE,QAAQ,CAAC,CAAA;YACpC,CAAC,CAAC,CAAA;QACJ,CAAC,CAAC,CAAA;IACJ,CAAC,CAAC,CAAA;IACF,OAAO,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;QACd,MAAM,WAAW,GAAG,gBAAgB,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,CAAA;QACjD,OAAO,CAAC,gBAAgB,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAChD,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,CAAC,CAAC,MAAM,IAAI,CAAC,CAAC,MAAM,KAAK,CAAC,CAAC,MAAM,CAAC,CACxE,CAAA;IACH,CAAC,CAAA;AACH,CAAC,CAAA;AAED;;;;;;;;;GASG;AACH,MAAM,CAAC,MAAM,mBAAmB,GAAG,CACjC,KAAyB,EACzB,KAAyB,EACzB,MAAwB,EACd,EAAE;IACZ,MAAM,OAAO,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAA;IAC/C,MAAM,SAAS,GAAG,aAAa,CAAC,KAAK,EAAE,KAAK,CAAC,CAAA;IAC7C,MAAM,QAAQ,GAA2B,EAAE,CAAA;IAC3C,MAAM,SAAS,GAAG,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;IACrC,SAAS,CAAC,OAAO,CAAC,CAAC,EAAE,EAAE,EAAE;QACvB,QAAQ,CAAC,EAAE,CAAC,GAAG,CAAC,CAAA;IAClB,CAAC,CAAC,CAAA;IACF,SAAS,CAAC,OAAO,CAAC,CAAC,EAAE,EAAE,EAAE,CACvB,SAAS,CAAC,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,SAAS,EAAE,EAAE;QAClC,QAAQ,CAAC,SAAS,CAAC,EAAE,CAAA;IACvB,CAAC,CAAC,CACH,CAAA;IAED,MAAM,KAAK,GAAa,EAAE,CAAA;IAC1B,SAAS,CAAC,OAAO,CAAC,CAAC,EAAE,EAAE,EAAE;QACvB,IAAI,QAAQ,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE;YACtB,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;SACf;IACH,CAAC,CAAC,CAAA;IAEF,MAAM,QAAQ,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAA;IACrD,MAAM,gBAAgB,GAAG,MAAM,CAAC,CAAC,CAAC,mBAAmB,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAA;IAC1E,IAAI,WAAW,GAAyB,IAAI,CAAA;IAC5C,MAAM,kBAAkB,GAAG,CAAC,EAAU,EAAW,EAAE;QACjD,MAAM,IAAI,GAAG,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAA;QACrC,OAAO,IAAI,KAAK,IAAI,IAAI,IAAI,KAAK,WAAW,CAAA;IAC9C,CAAC,CAAA;IACD,MAAM,SAAS,GAAG,GAAW,EAAE;QAC7B,IAAI,CAAC,MAAM,IAAI,WAAW,KAAK,IAAI,IAAI,kBAAkB,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE;YACnE,OAAO,CAAC,CAAA;SACT;QACD,MAAM,KAAK,GAAG,KAAK,CAAC,SAAS,CAC3B,CAAC,EAAE,EAAE,CAAC,EAAE,EAAE,CACR,CAAC,GAAG,CAAC;YACL,kBAAkB,CAAC,EAAE,CAAC;YACtB,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,gBAAgB,CAAC,EAAE,EAAE,KAAK,CAAC,CAAC,CAClE,CAAA;QACD,OAAO,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC,CAAC,CAAA;IAC3B,CAAC,CAAA;IAED,MAAM,KAAK,GAAa,EAAE,CAAA;IAC1B,OAAO,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE;QACvB,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;YAClB,MAAM,KAAK,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAA;YAC3C,MAAM,KAAK,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAA;YAC3C,OAAO,CAAC,CAAA,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAE,UAAU,KAAI,CAAC,CAAC,GAAG,CAAC,CAAA,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAE,UAAU,KAAI,CAAC,CAAC,CAAA;QAC5D,CAAC,CAAC,CAAA;QACF,MAAM,CAAC,OAAO,CAAC,GAAG,KAAK,CAAC,MAAM,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC,CAAA;QAC9C,WAAW,GAAG,CAAC,MAAM,IAAI,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,WAAW,CAAA;QACtE,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;QAEnB,KAAK,MAAM,QAAQ,IAAI,SAAS,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE;YAC/C,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAA;YACpB,IAAI,QAAQ,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE;gBAC5B,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAA;aACrB;SACF;KACF;IAED,IAAI,KAAK,CAAC,MAAM,GAAG,OAAO,CAAC,IAAI,EAAE;QAC/B,MAAM,SAAS,GAAG,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAA;QACzE,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;YACtB,MAAM,KAAK,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAA;YAC3C,MAAM,KAAK,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAA;YAC3C,OAAO,CAAC,CAAA,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAE,UAAU,KAAI,CAAC,CAAC,GAAG,CAAC,CAAA,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAE,UAAU,KAAI,CAAC,CAAC,CAAA;QAC5D,CAAC,CAAC,CAAA;QACF,KAAK,CAAC,IAAI,CAAC,GAAG,SAAS,CAAC,CAAA;KACzB;IAED,OAAO,KAAK,CAAA;AACd,CAAC,CAAA;AAED,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAC,UAAkB,EAAE,KAAyB,EAAY,EAAE;IAC1F,MAAM,aAAa,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,UAAU,IAAI,CAAC,CAAC,YAAY,KAAK,MAAM,CAAC,CAAA;IAC7F,IAAI,CAAC,aAAa,EAAE;QAClB,OAAO,EAAE,CAAA;KACV;IAED,MAAM,SAAS,GAAa,EAAE,CAAA;IAC9B,MAAM,OAAO,GAAG,IAAI,GAAG,EAAU,CAAA;IACjC,MAAM,KAAK,GAAG,CAAC,aAAa,CAAC,MAAM,CAAC,CAAA;IAEpC,OAAO,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE;QACvB,MAAM,OAAO,GAAG,KAAK,CAAC,KAAK,EAAG,CAAA;QAC9B,IAAI,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,OAAO,KAAK,UAAU,EAAE;YAClD,SAAQ;SACT;QACD,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,CAAA;QACpB,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;QAEvB,MAAM,QAAQ,GAAG,YAAY,CAAC,OAAO,EAAE,KAAK,CAAC,CAAA;QAC7C,KAAK,MAAM,IAAI,IAAI,QAAQ,EAAE;YAC3B,IAAI,IAAI,CAAC,YAAY,KAAK,eAAe,IAAI,IAAI,CAAC,YAAY,KAAK,WAAW,EAAE;gBAC9E,SAAQ;aACT;YACD,IAAI,IAAI,CAAC,MAAM,KAAK,UAAU,EAAE;gBAC9B,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAA;aACxB;SACF;KACF;IAED,OAAO,SAAS,CAAA;AAClB,CAAC,CAAA;AAED,MAAM,CAAC,MAAM,mBAAmB,GAAG,CACjC,cAAsB,EACtB,KAAyB,EACuD,EAAE;IAClF,MAAM,WAAW,GAAG,KAAK,CAAC,MAAM,CAC9B,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,cAAc,IAAI,CAAC,CAAC,YAAY,KAAK,UAAU,CACpE,CAAA;IACD,MAAM,WAAW,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,cAAc,IAAI,CAAC,CAAC,YAAY,KAAK,SAAS,CAAC,CAAA;IAClG,MAAM,SAAS,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,cAAc,IAAI,CAAC,CAAC,YAAY,KAAK,OAAO,CAAC,CAAA;IAE9F,OAAO;QACL,cAAc,EAAE,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC;QAChD,eAAe,EAAE,WAAW,aAAX,WAAW,uBAAX,WAAW,CAAE,MAAM;QACpC,aAAa,EAAE,SAAS,aAAT,SAAS,uBAAT,SAAS,CAAE,MAAM;KACjC,CAAA;AACH,CAAC,CAAA;AAED,MAAM,CAAC,MAAM,cAAc,GAAG,CAC5B,YAAoB,EACpB,KAAyB,EACoB,EAAE;IAC/C,MAAM,SAAS,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,YAAY,IAAI,CAAC,CAAC,YAAY,KAAK,QAAQ,CAAC,CAAA;IAC/F,MAAM,WAAW,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,YAAY,IAAI,CAAC,CAAC,YAAY,KAAK,SAAS,CAAC,CAAA;IAEhG,MAAM,KAAK,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE;;QAAC,OAAA,CAAC;YAClC,MAAM,EAAE,CAAC,MAAA,CAAC,CAAC,IAAI,0CAAE,MAAiB,KAAI,SAAS;YAC/C,QAAQ,EAAE,CAAC,CAAC,MAAM;SACnB,CAAC,CAAA;KAAA,CAAC,CAAA;IAEH,IAAI,WAAW,EAAE;QACf,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,SAAS,EAAE,QAAQ,EAAE,WAAW,CAAC,MAAM,EAAE,CAAC,CAAA;KAChE;IAED,OAAO,KAAK,CAAA;AACd,CAAC,CAAA;AAED,MAAM,CAAC,MAAM,aAAa,GAAG,CAC3B,QAAgB,EAChB,KAAyB,EAC0B,EAAE;IACrD,MAAM,QAAQ,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,QAAQ,IAAI,CAAC,CAAC,YAAY,KAAK,MAAM,CAAC,CAAA;IACtF,MAAM,SAAS,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,QAAQ,IAAI,CAAC,CAAC,YAAY,KAAK,OAAO,CAAC,CAAA;IAExF,OAAO;QACL,YAAY,EAAE,QAAQ,aAAR,QAAQ,uBAAR,QAAQ,CAAE,MAAM;QAC9B,aAAa,EAAE,SAAS,aAAT,SAAS,uBAAT,SAAS,CAAE,MAAM;KACjC,CAAA;AACH,CAAC,CAAA;AAED,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAC/B,UAAkB,EAClB,KAAyB,EACL,EAAE;IACtB,MAAM,QAAQ,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,UAAU,IAAI,CAAC,CAAC,YAAY,KAAK,MAAM,CAAC,CAAA;IACxF,OAAO,QAAQ,aAAR,QAAQ,uBAAR,QAAQ,CAAE,MAAM,CAAA;AACzB,CAAC,CAAA;AAED,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAAC,SAAwB,EAAe,EAAE;IAC5E,MAAM,KAAK,GAAG,IAAI,GAAG,EAAU,CAAA;IAE/B,MAAM,YAAY,GAAG,SAAS,CAAC,SAA0D,CAAA;IACzF,MAAM,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC,OAAO,CAAC,CAAC,EAAE,EAAE,EAAE;QACzC,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,IAAsB,EAAE,EAAE;YAC1C,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;QACtB,CAAC,CAAC,CAAA;IACJ,CAAC,CAAC,CAAA;IAEF,IAAI,SAAS,CAAC,WAAW,EAAE;QACzB,MAAM,WAAW,GAAG,SAAS,CAAC,WAA4D,CAAA;QAC1F,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,OAAO,CAAC,CAAC,EAAE,EAAE,EAAE;YACxC,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,IAAsB,EAAE,EAAE;gBAC1C,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;YACtB,CAAC,CAAC,CAAA;QACJ,CAAC,CAAC,CAAA;KACH;IAED,OAAO,KAAK,CAAA;AACd,CAAC,CAAA;AAED,MAAM,CAAC,MAAM,aAAa,GAAG,IAAI,GAAG,CAAC;IACnC,kBAAkB;IAClB,uBAAuB;IACvB,kBAAkB;IAClB,oBAAoB;IACpB,mBAAmB;IACnB,oBAAoB;CACrB,CAAC,CAAA;AAEF,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC,IAAsB,EAAW,EAAE;;IACnE,OAAO,aAAa,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAA,MAAA,IAAI,CAAC,MAAM,0CAAE,SAAS,MAAK,IAAI,CAAA;AACxE,CAAC,CAAA;AAED,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAClC,MAAc,EACd,KAAyB,EAC8B,EAAE;IACzD,MAAM,YAAY,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,MAAM,IAAI,CAAC,CAAC,YAAY,KAAK,WAAW,CAAC,CAAA;IAC7F,MAAM,SAAS,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,MAAM,IAAI,CAAC,CAAC,YAAY,KAAK,QAAQ,CAAC,CAAA;IACvF,OAAO;QACL,gBAAgB,EAAE,YAAY,aAAZ,YAAY,uBAAZ,YAAY,CAAE,MAAM;QACtC,aAAa,EAAE,SAAS,aAAT,SAAS,uBAAT,SAAS,CAAE,MAAM;KACjC,CAAA;AACH,CAAC,CAAA;AAED,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC,QAAgB,EAAW,EAAE;IAC7D,OAAO,CAAC,sBAAsB,EAAE,gBAAgB,EAAE,cAAc,EAAE,kBAAkB,CAAC,CAAC,QAAQ,CAC5F,QAAQ,CACT,CAAA;AACH,CAAC,CAAA;AAED,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,QAAgB,EAAW,EAAE;IAC1D,OAAO;QACL,uBAAuB;QACvB,4BAA4B;QAC5B,yBAAyB;QACzB,oBAAoB;QACpB,gBAAgB;QAChB,eAAe;QACf,sBAAsB;QACtB,gBAAgB;QAChB,wBAAwB;QACxB,qBAAqB;KACtB,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAA;AACtB,CAAC,CAAA;AAED,MAAM,CAAC,MAAM,mBAAmB,GAAG,IAAI,GAAG,CAAC;IACzC,6BAA6B;IAC7B,2BAA2B;IAC3B,iCAAiC;IACjC,+BAA+B;IAC/B,uBAAuB;IACvB,wBAAwB;IACxB,wBAAwB;IACxB,+BAA+B;IAC/B,+BAA+B;IAC/B,6BAA6B;CAC9B,CAAC,CAAA;AAEF,MAAM,CAAC,MAAM,sBAAsB,GAAG,IAAI,GAAG,CAAC;IAC5C,6BAA6B;IAC7B,2BAA2B;IAC3B,iCAAiC;IACjC,+BAA+B;CAChC,CAAC,CAAA;AAEF,MAAM,CAAC,MAAM,mBAAmB,GAAG,CAAC,SAAwB,EAAW,EAAE;IACvE,IAAI,CAAC,SAAS,IAAI,CAAC,SAAS,CAAC,SAAS,EAAE;QACtC,OAAO,KAAK,CAAA;KACb;IAED,MAAM,YAAY,GAAG,SAAS,CAAC,SAG9B,CAAA;IAED,KAAK,MAAM,EAAE,IAAI,MAAM,CAAC,MAAM,CAAC,YAAY,CAAC,EAAE;QAC5C,IAAI,mBAAmB,CAAC,GAAG,CAAC,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE;YAC5C,OAAO,IAAI,CAAA;SACZ;QACD,KAAK,MAAM,IAAI,IAAI,EAAE,CAAC,KAAK,EAAE;YAC3B,IAAI,mBAAmB,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;gBACtC,OAAO,IAAI,CAAA;aACZ;SACF;KACF;IAED,IAAI,SAAS,CAAC,WAAW,EAAE;QACzB,MAAM,WAAW,GAAG,SAAS,CAAC,WAA4D,CAAA;QAC1F,KAAK,MAAM,EAAE,IAAI,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC,EAAE;YAC3C,KAAK,MAAM,IAAI,IAAI,EAAE,CAAC,KAAK,EAAE;gBAC3B,IAAI,mBAAmB,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;oBACtC,OAAO,IAAI,CAAA;iBACZ;aACF;SACF;KACF;IAED,OAAO,KAAK,CAAA;AACd,CAAC,CAAA;AAED,MAAM,CAAC,MAAM,8BAA8B,GAAG,CAAC,SAAwB,EAAe,EAAE;IACtF,MAAM,KAAK,GAAG,IAAI,GAAG,EAAU,CAAA;IAC/B,IAAI,CAAC,SAAS,IAAI,CAAC,SAAS,CAAC,SAAS,EAAE;QACtC,OAAO,KAAK,CAAA;KACb;IAED,MAAM,mBAAmB,GAAG,IAAI,GAAG,CAAC;QAClC,uBAAuB;QACvB,wBAAwB;QACxB,wBAAwB;QACxB,+BAA+B;QAC/B,+BAA+B;QAC/B,6BAA6B;KAC9B,CAAC,CAAA;IAEF,MAAM,YAAY,GAAG,SAAS,CAAC,SAA0D,CAAA;IACzF,KAAK,MAAM,EAAE,IAAI,MAAM,CAAC,MAAM,CAAC,YAAY,CAAC,EAAE;QAC5C,KAAK,MAAM,IAAI,IAAI,EAAE,CAAC,KAAK,EAAE;YAC3B,IAAI,mBAAmB,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;gBACtC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;aACrB;SACF;KACF;IAED,IAAI,SAAS,CAAC,WAAW,EAAE;QACzB,MAAM,WAAW,GAAG,SAAS,CAAC,WAA4D,CAAA;QAC1F,KAAK,MAAM,EAAE,IAAI,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC,EAAE;YAC3C,KAAK,MAAM,IAAI,IAAI,EAAE,CAAC,KAAK,EAAE;gBAC3B,IAAI,mBAAmB,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;oBACtC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;iBACrB;aACF;SACF;KACF;IAED,OAAO,KAAK,CAAA;AACd,CAAC,CAAA"}
@@ -9,14 +9,23 @@ export declare const generateInvoiceGenerateRouteCode: (settings: UIDLInvoiceSet
9
9
  * against it keep pointing at a valid invoice. What a merchant corrected on the
10
10
  * invoice itself (customer details, notes, payment method) wins over the order;
11
11
  * the lines and every figure are recomputed from the order. The old PDF is
12
- * replaced — and its runtime-storage copy deleted — and the customer is never
13
- * emailed.
12
+ * replaced — and its runtime-storage copy deleted.
13
+ *
14
+ * The customer is emailed once: by the regeneration that gives an invoice its
15
+ * FIRST PDF — one whose PDF failed at payment, so the payment's invoice email
16
+ * never went out — and only when the store emails invoices (Invoice Email
17
+ * Delivery). It is the payment's email: the same sender, template, attachment,
18
+ * link and language, recorded in the sent-email ledger and on the order's
19
+ * history. Which write gives the first PDF, the database decides (see
20
+ * `replaceInvoice` and `storeInvoicePdf`), so a second regeneration, a double
21
+ * click, two requests at once or a retried payment finishing the same invoice
22
+ * never send it again; a failed send costs the merchant nothing.
14
23
  *
15
24
  * Unlike `/generate`, which the payment webhook calls server-to-server, this
16
25
  * route is reached from the merchant's browser only, so it checks the session
17
26
  * itself: signed in, with an admin role.
18
27
  */
19
- export declare const generateInvoiceRegenerateRouteCode: () => string;
28
+ export declare const generateInvoiceRegenerateRouteCode: (settings: UIDLInvoiceSettings) => string;
20
29
  /**
21
30
  * GET /api/invoices/[id]/pdf — the invoice PDF kept in the database, the link
22
31
  * an order shows when runtime storage is not configured.
@@ -1 +1 @@
1
- {"version":3,"file":"api-routes-code.d.ts","sourceRoot":"","sources":["../../../src/invoice/api-routes-code.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAA;AA2DhE,eAAO,MAAM,gCAAgC,aAAc,mBAAmB,KAAG,MAsYhF,CAAA;AAKD;;;;;;;;;;;;;;;GAeG;AACH,eAAO,MAAM,kCAAkC,QAAO,MAmNrD,CAAA;AAED;;;;;;;;GAQG;AACH,eAAO,MAAM,2BAA2B,QAAO,MAsF9C,CAAA"}
1
+ {"version":3,"file":"api-routes-code.d.ts","sourceRoot":"","sources":["../../../src/invoice/api-routes-code.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAA;AA+FhE,eAAO,MAAM,gCAAgC,aAAc,mBAAmB,KAAG,MAgahF,CAAA;AAoCD;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,eAAO,MAAM,kCAAkC,aAAc,mBAAmB,KAAG,MA8PlF,CAAA;AAED;;;;;;;;GAQG;AACH,eAAO,MAAM,2BAA2B,QAAO,MAsF9C,CAAA"}
@@ -53,6 +53,39 @@ async function invoiceCaller(req) {
53
53
  userId: userId != null ? String(userId) : null,
54
54
  };
55
55
  }`;
56
+ /**
57
+ * The order-history line of an invoice email the provider accepted: an
58
+ * `order-email-sent` line of the email's purpose, keyed on the invoice, so the
59
+ * email is on its order's history once, whichever route sent it. The strings
60
+ * are data in the merchant's database, owned by teleport-gui's
61
+ * `order-event-types.ts` and `EmailTemplatePurpose.INVOICE_EMAIL`.
62
+ */
63
+ const INVOICE_EMAIL_EVENT = { type: 'order-email-sent', purpose: 'invoice-email' };
64
+ /** Who sent an invoice email, as the order's history names them. */
65
+ const INVOICE_EMAIL_SENDERS = {
66
+ // The store's own code: the payment webhook's invoice step, the checkout.
67
+ store: { actor: '', actorType: 'system' },
68
+ // A signed-in admin: the admin panel's Regenerate, or an invoice issued by hand.
69
+ admin: { actor: 'Store admin', actorType: 'merchant' },
70
+ };
71
+ /** `recordInvoiceEmailSent(invoiceData, sender)`, as emitted source; needs `dataAccess`. */
72
+ const RECORD_INVOICE_EMAIL_CODE = `
73
+ var INVOICE_EMAIL_EVENT = ${JSON.stringify(INVOICE_EMAIL_EVENT)};
74
+ var INVOICE_EMAIL_SENDERS = ${JSON.stringify(INVOICE_EMAIL_SENDERS)};
75
+
76
+ // Writes the order's history line for an invoice email the provider accepted.
77
+ // The key is the invoice's, so the line is written once per invoice email.
78
+ async function recordInvoiceEmailSent(invoiceData, sender) {
79
+ if (!invoiceData.orderId) return;
80
+ await dataAccess.recordOrderEvent({
81
+ type: INVOICE_EMAIL_EVENT.type,
82
+ dedupeKey: INVOICE_EMAIL_EVENT.type + ':' + invoiceData.id + ':' + INVOICE_EMAIL_EVENT.purpose,
83
+ orderId: invoiceData.orderId,
84
+ payload: { purpose: INVOICE_EMAIL_EVENT.purpose, to: invoiceData.customerEmail },
85
+ actor: sender.actor,
86
+ actorType: sender.actorType,
87
+ });
88
+ }`;
56
89
  export const generateInvoiceGenerateRouteCode = (settings) => {
57
90
  var _a;
58
91
  const prefix = settings.invoicePrefix || 'INV-';
@@ -86,6 +119,7 @@ var INVOICE_PREFIX = ${JSON.stringify(prefix)};
86
119
  var UNFINISHED_INVOICE_STALE_SECONDS = 900;
87
120
 
88
121
  ${INVOICE_CALLER_CODE}
122
+ ${emailEnabled ? RECORD_INVOICE_EMAIL_CODE : ''}
89
123
 
90
124
  // ---------------------------------------------------------------------------
91
125
  // Waiting for the order's line items to be fully written.
@@ -121,6 +155,21 @@ function sleepMs(ms) {
121
155
  return new Promise(function (resolve) { setTimeout(resolve, ms); });
122
156
  }
123
157
 
158
+ // The answer for an invoice the order already has: its number and its PDF.
159
+ function issuedInvoiceAnswer(invoice, currency) {
160
+ var pdfUrl = invoice.pdf_url || ('/api/invoices/' + invoice.id + '/pdf');
161
+ return {
162
+ success: true,
163
+ alreadyIssued: true,
164
+ invoiceId: invoice.id,
165
+ invoiceNumber: invoice.invoice_number,
166
+ storageUrl: pdfUrl.indexOf('/api/invoices/') === 0 ? '' : pdfUrl,
167
+ pdfUrl: pdfUrl,
168
+ total: Number(invoice.total) || 0,
169
+ currency: invoice.currency || currency,
170
+ };
171
+ }
172
+
124
173
  async function hydrateOrderWhenSettled(orderId) {
125
174
  var deadline = Date.now() + SETTLE_TIMEOUT_MS;
126
175
  var lastCount = -1;
@@ -261,17 +310,7 @@ module.exports = async function handler(req, res) {
261
310
  if (!reservation.created) {
262
311
  if (Number(held.pdf_size_bytes) > 0) {
263
312
  console.info('[invoice] Order ' + body.orderId + ' already has invoice ' + held.invoice_number + ' — returning it');
264
- var heldPdfUrl = held.pdf_url || ('/api/invoices/' + held.id + '/pdf');
265
- res.status(200).json({
266
- success: true,
267
- alreadyIssued: true,
268
- invoiceId: held.id,
269
- invoiceNumber: held.invoice_number,
270
- storageUrl: heldPdfUrl.indexOf('/api/invoices/') === 0 ? '' : heldPdfUrl,
271
- pdfUrl: heldPdfUrl,
272
- total: Number(held.total) || 0,
273
- currency: held.currency || currency,
274
- });
313
+ res.status(200).json(issuedInvoiceAnswer(held, currency));
275
314
  return;
276
315
  }
277
316
  // Reserved, never finished: another request is rendering it now, or the
@@ -305,7 +344,18 @@ ${emailEnabled
305
344
  console.info('[invoice] PDF generated: ' + pdfBuffer.length + ' bytes for ' + invoiceData.invoiceNumber);
306
345
 
307
346
  invoiceData.pdfUrl = '/api/invoices/' + invoiceData.id + '/pdf';
308
- await dataAccess.storeInvoicePdf(invoiceData.id, pdfBuffer, invoiceData.pdfUrl);
347
+ // The PDF is written only on an invoice that has none, and the invoice's
348
+ // first PDF is what its email is claimed by (see storeInvoicePdf). A
349
+ // regeneration that gave a reserved invoice its PDF while this request
350
+ // rendered it — a retried payment finishing a stale reservation — emailed
351
+ // the buyer itself, so this request answers with that invoice and sends
352
+ // nothing.
353
+ var stored = await dataAccess.storeInvoicePdf(invoiceData.id, pdfBuffer, invoiceData.pdfUrl);
354
+ if (!stored.firstPdf) {
355
+ console.info('[invoice] Invoice ' + invoiceNumber + ' was given its PDF by a regeneration meanwhile — returning it');
356
+ res.status(200).json(issuedInvoiceAnswer((await dataAccess.getInvoiceById(invoiceData.id)) || held, currency));
357
+ return;
358
+ }
309
359
  console.info('[invoice] PDF stored — teleport_invoices.id=' + invoiceData.id + ', number=' + invoiceData.invoiceNumber + ', pdf_size_bytes=' + pdfBuffer.length + ', items=' + items.length + ' (accessible at ' + invoiceData.pdfUrl + ')');
310
360
 
311
361
  var safeFileName = String(invoiceNumber || invoiceData.id).replace(/[^a-zA-Z0-9._-]/g, '_') + '.pdf';
@@ -373,9 +423,11 @@ ${emailEnabled
373
423
  ${emailEnabled
374
424
  ? `
375
425
  if (invoiceData.customerEmail) {
426
+ var emailed = false;
376
427
  try {
377
428
  var emailResult = await emailSender.sendInvoiceEmail(invoiceData, pdfBuffer);
378
- if (emailResult && emailResult.success) {
429
+ emailed = !!(emailResult && emailResult.success);
430
+ if (emailed) {
379
431
  console.info('[invoice] Email delivery OK — to=' + invoiceData.customerEmail + ', messageId=' + (emailResult.messageId || '(empty)'));
380
432
  } else {
381
433
  console.error('[invoice] Email delivery FAILED — to=' + invoiceData.customerEmail + ', error=' + (emailResult && emailResult.error ? emailResult.error : 'unknown'));
@@ -383,6 +435,13 @@ ${emailEnabled
383
435
  } catch (emailErr) {
384
436
  console.error('[invoice] Email delivery threw — to=' + invoiceData.customerEmail + ', error=' + (emailErr && emailErr.message ? emailErr.message : emailErr));
385
437
  }
438
+ if (emailed) {
439
+ try {
440
+ await recordInvoiceEmailSent(invoiceData, caller.admin ? INVOICE_EMAIL_SENDERS.admin : INVOICE_EMAIL_SENDERS.store);
441
+ } catch (recordErr) {
442
+ console.error('[invoice] Invoice ' + invoiceNumber + ' was emailed, but the order history could not record it — ' + (recordErr && recordErr.message));
443
+ }
444
+ }
386
445
  } else {
387
446
  console.info('[invoice] Skipping email delivery — invoiceData.customerEmail is empty. (Check teleport_orders.billing_email for order ' + (body.orderId || '(no orderId)') + ')');
388
447
  }
@@ -436,6 +495,36 @@ ${emailEnabled
436
495
  };
437
496
  /** The roles allowed to rebuild an invoice (the admin panel is the only caller). */
438
497
  const REGENERATE_INVOICE_ROLES = INVOICE_ADMIN_ROLES;
498
+ /** The regenerate route's `emailFirstInvoice`, as emitted source. */
499
+ const generateFirstInvoiceEmailCode = () => `${RECORD_INVOICE_EMAIL_CODE}
500
+
501
+ var REGENERATE_SOURCE_REF = 'api/invoices/[id]/regenerate';
502
+
503
+ // The invoice email the payment would have sent: the same sender, template,
504
+ // attachment and link, in the buyer's language — the one stamped on the order
505
+ // at checkout, else the store's main language, never the language of this
506
+ // request, which is the merchant's. The sender records it in the sent-email
507
+ // ledger; the order's history records it once the provider accepted it. A
508
+ // failure is logged and goes no further: the merchant has the PDF either way.
509
+ async function emailFirstInvoice(invoiceData, pdfBuffer, order) {
510
+ if (!invoiceData.customerEmail) return;
511
+ invoiceData.locale = emailLocale.normalizeEmailLocale(order && order.locale) || emailLocale.DEFAULT_EMAIL_LOCALE;
512
+ try {
513
+ var sent = await emailSender.sendInvoiceEmail(invoiceData, pdfBuffer, REGENERATE_SOURCE_REF);
514
+ if (!sent || !sent.success) {
515
+ throw new Error((sent && sent.error) || 'the email provider did not accept it');
516
+ }
517
+ } catch (sendErr) {
518
+ console.error('[invoice] Regenerate: invoice ' + invoiceData.invoiceNumber + ' could not be emailed to its customer — ' + (sendErr && sendErr.message));
519
+ return;
520
+ }
521
+ try {
522
+ await recordInvoiceEmailSent(invoiceData, INVOICE_EMAIL_SENDERS.admin);
523
+ } catch (recordErr) {
524
+ console.error('[invoice] Regenerate: invoice ' + invoiceData.invoiceNumber + ' was emailed, but the order history could not record it — ' + (recordErr && recordErr.message));
525
+ }
526
+ }
527
+ `;
439
528
  /**
440
529
  * POST /api/invoices/[id]/regenerate — the admin panel's "Regenerate" action.
441
530
  *
@@ -445,23 +534,43 @@ const REGENERATE_INVOICE_ROLES = INVOICE_ADMIN_ROLES;
445
534
  * against it keep pointing at a valid invoice. What a merchant corrected on the
446
535
  * invoice itself (customer details, notes, payment method) wins over the order;
447
536
  * the lines and every figure are recomputed from the order. The old PDF is
448
- * replaced — and its runtime-storage copy deleted — and the customer is never
449
- * emailed.
537
+ * replaced — and its runtime-storage copy deleted.
538
+ *
539
+ * The customer is emailed once: by the regeneration that gives an invoice its
540
+ * FIRST PDF — one whose PDF failed at payment, so the payment's invoice email
541
+ * never went out — and only when the store emails invoices (Invoice Email
542
+ * Delivery). It is the payment's email: the same sender, template, attachment,
543
+ * link and language, recorded in the sent-email ledger and on the order's
544
+ * history. Which write gives the first PDF, the database decides (see
545
+ * `replaceInvoice` and `storeInvoicePdf`), so a second regeneration, a double
546
+ * click, two requests at once or a retried payment finishing the same invoice
547
+ * never send it again; a failed send costs the merchant nothing.
450
548
  *
451
549
  * Unlike `/generate`, which the payment webhook calls server-to-server, this
452
550
  * route is reached from the merchant's browser only, so it checks the session
453
551
  * itself: signed in, with an admin role.
454
552
  */
455
- export const generateInvoiceRegenerateRouteCode = () => {
553
+ export const generateInvoiceRegenerateRouteCode = (settings) => {
554
+ var _a;
555
+ const emailEnabled = ((_a = settings.emailDelivery) === null || _a === void 0 ? void 0 : _a.enabled) === true;
456
556
  return `/**
457
557
  * POST /api/invoices/[id]/regenerate
458
558
  * Rebuilds one invoice from its order, in place, for the admin panel. Same
459
- * number, id and dates; a freshly rendered PDF replaces the old one; no email.
559
+ * number, id and dates; a freshly rendered PDF replaces the old one.${emailEnabled
560
+ ? `
561
+ * The first PDF an invoice ever gets is emailed to its customer, once.`
562
+ : `
563
+ * No email: this store does not email invoices.`}
460
564
  */
461
565
 
462
566
  var dataAccess = require('../../../../utils/invoices/data-access');
463
567
  var pdfGenerator = require('../../../../utils/invoices/pdf-generator');
464
568
  var invoiceAssembly = require('../../../../utils/invoices/invoice-assembly');
569
+ ${emailEnabled
570
+ ? `var emailSender = require('../../../../utils/invoices/email-sender');
571
+ var sentEmailLog = require('../../../../utils/email/sent-email-log');
572
+ var emailLocale = require('../../../../utils/email/email-locale');`
573
+ : ''}
465
574
 
466
575
  ${generateCommonJsSessionTokenResolverCode()}
467
576
  ${ROLE_OF_TOKEN_CODE}
@@ -547,7 +656,7 @@ async function findInvoice(invoiceId) {
547
656
  throw err;
548
657
  }
549
658
  }
550
-
659
+ ${emailEnabled ? generateFirstInvoiceEmailCode() : ''}
551
660
  module.exports = async function handler(req, res) {
552
661
  if (req.method !== 'POST') {
553
662
  res.setHeader('Allow', 'POST');
@@ -606,7 +715,12 @@ module.exports = async function handler(req, res) {
606
715
  invoiceData.pdfSizeBytes = pdfBuffer.length;
607
716
  invoiceData.pdfUrl = '/api/invoices/' + invoiceData.id + '/pdf';
608
717
 
609
- await dataAccess.replaceInvoice(invoiceData.id, invoiceData, invoiceData.items);
718
+ ${emailEnabled
719
+ ? ` var replaced = await dataAccess.replaceInvoice(invoiceData.id, invoiceData, invoiceData.items);
720
+ // This regeneration gave the invoice its first PDF, so the payment's
721
+ // invoice email never went out: this one sends it.
722
+ var emailsCustomer = !!(replaced && replaced.firstPdf);`
723
+ : ` await dataAccess.replaceInvoice(invoiceData.id, invoiceData, invoiceData.items);`}
610
724
  console.info('[invoice] Regenerated ' + invoiceData.invoiceNumber + ' (id=' + invoiceData.id + ', items=' + invoiceData.items.length + ', pdf_size_bytes=' + pdfBuffer.length + ')');
611
725
 
612
726
  // The new PDF's public copy. The row already serves the new bytes through
@@ -629,7 +743,15 @@ module.exports = async function handler(req, res) {
629
743
  if (storageKey) {
630
744
  await invoiceAssembly.deleteStoredInvoicePdf(storageKey);
631
745
  }
632
- res.status(500).json({ success: false, error: MESSAGES.orderNotUpdated });
746
+ ${emailEnabled
747
+ ? ` // The invoice has its first PDF all the same — served from the database,
748
+ // its public copy just went — and no later regeneration will send it.
749
+ if (emailsCustomer) {
750
+ await emailFirstInvoice(invoiceData, pdfBuffer, hydrated.order);
751
+ }
752
+ await sentEmailLog.settleSentEmailLog();
753
+ `
754
+ : ''} res.status(500).json({ success: false, error: MESSAGES.orderNotUpdated });
633
755
  return;
634
756
  }
635
757
 
@@ -647,7 +769,16 @@ module.exports = async function handler(req, res) {
647
769
  if (previousStorageKey && previousStorageKey !== storageKey) {
648
770
  await invoiceAssembly.deleteStoredInvoicePdf(previousStorageKey);
649
771
  }
650
-
772
+ ${emailEnabled
773
+ ? `
774
+ if (emailsCustomer) {
775
+ await emailFirstInvoice(invoiceData, pdfBuffer, hydrated.order);
776
+ }
777
+ // The email's ledger row is written in the background — land it before
778
+ // replying, a serverless function may be frozen the instant it responds.
779
+ await sentEmailLog.settleSentEmailLog();
780
+ `
781
+ : ''}
651
782
  res.status(200).json({
652
783
  success: true,
653
784
  invoiceId: invoiceData.id,
@@ -1 +1 @@
1
- {"version":3,"file":"api-routes-code.js","sourceRoot":"","sources":["../../../src/invoice/api-routes-code.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,wCAAwC,EAAE,MAAM,4BAA4B,CAAA;AACrF,OAAO,EAAE,kBAAkB,EAAE,MAAM,4BAA4B,CAAA;AAE/D;;;;GAIG;AACH,MAAM,mBAAmB,GAAG,CAAC,OAAO,CAAC,CAAA;AAErC;;;;;;;;;GASG;AACH,MAAM,mBAAmB,GAAG,GAAG,wCAAwC,EAAE;EACvE,kBAAkB;;4BAEQ,IAAI,CAAC,SAAS,CAAC,mBAAmB,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAiC7D,CAAA;AAEF,MAAM,CAAC,MAAM,gCAAgC,GAAG,CAAC,QAA6B,EAAU,EAAE;;IACxF,MAAM,MAAM,GAAG,QAAQ,CAAC,aAAa,IAAI,MAAM,CAAA;IAC/C,MAAM,YAAY,GAAG,QAAQ,CAAC,qBAAqB,KAAK,KAAK,CAAA;IAC7D,MAAM,YAAY,GAAG,CAAA,MAAA,QAAQ,CAAC,aAAa,0CAAE,OAAO,MAAK,IAAI,CAAA;IAE7D,OAAO;;;;;;;;;;;;;;;;EAiBP,YAAY;QACV,CAAC,CAAC;;gEAE0D;QAC5D,CAAC,CAAC,EACN;;uBAEuB,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC;;;;;EAK3C,mBAAmB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EA2MnB,YAAY;QACV,CAAC,CAAC;;;;;;;;;;CAUL;QACG,CAAC,CAAC,EACN;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAwEE,YAAY;QACV,CAAC,CAAC;;;;;;;;;;;;;;;CAeL;QACG,CAAC,CAAC;;CAGN;;;;;;;;;;;EAYE,YAAY;QACV,CAAC,CAAC;;;CAGL;QACG,CAAC,CAAC,EACN;;;;;;;;;;;;;;;;;;;;EAqBE,YAAY;QACV,CAAC,CAAC;CACL;QACG,CAAC,CAAC,EACN;;;;CAIC,CAAA;AACD,CAAC,CAAA;AAED,oFAAoF;AACpF,MAAM,wBAAwB,GAAG,mBAAmB,CAAA;AAEpD;;;;;;;;;;;;;;;GAeG;AACH,MAAM,CAAC,MAAM,kCAAkC,GAAG,GAAW,EAAE;IAC7D,OAAO;;;;;;;;;;EAUP,wCAAwC,EAAE;EAC1C,kBAAkB;;iCAEa,IAAI,CAAC,SAAS,CAAC,wBAAwB,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAoMxE,CAAA;AACD,CAAC,CAAA;AAED;;;;;;;;GAQG;AACH,MAAM,CAAC,MAAM,2BAA2B,GAAG,GAAW,EAAE;IACtD,OAAO;;;;;;;EAOP,mBAAmB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA6EpB,CAAA;AACD,CAAC,CAAA"}
1
+ {"version":3,"file":"api-routes-code.js","sourceRoot":"","sources":["../../../src/invoice/api-routes-code.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"data-access-code.d.ts","sourceRoot":"","sources":["../../../src/invoice/data-access-code.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAA;AAEhF,eAAO,MAAM,sBAAsB,aACvB,mBAAmB,kBACb,cAAc,GAAG,IAAI,oBACnB,OAAO,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,KAC/C,MA2CF,CAAA;AAgqBD,eAAO,MAAM,oBAAoB,YAAa,MAAM,KAAG,MAsItD,CAAA"}
1
+ {"version":3,"file":"data-access-code.d.ts","sourceRoot":"","sources":["../../../src/invoice/data-access-code.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAA;AAEhF,eAAO,MAAM,sBAAsB,aACvB,mBAAmB,kBACb,cAAc,GAAG,IAAI,oBACnB,OAAO,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,KAC/C,MA8CF,CAAA;AAmxBD,eAAO,MAAM,oBAAoB,YAAa,MAAM,KAAG,MAsItD,CAAA"}