@teleporthq/teleport-plugin-next-workflows 0.43.75 → 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 (248) hide show
  1. package/__tests__/_helpers/fake-store-database.ts +428 -0
  2. package/__tests__/_helpers/invoice-store.ts +382 -0
  3. package/__tests__/booking-calendar-feed-route.test.ts +494 -0
  4. package/__tests__/custom-node-result-taken-branch.test.ts +107 -0
  5. package/__tests__/data-api-date-parser.test.ts +45 -0
  6. package/__tests__/email-locale-senders.test.ts +3 -1
  7. package/__tests__/email-sender-name.test.ts +513 -0
  8. package/__tests__/graph-utils-topological-order.test.ts +155 -1
  9. package/__tests__/invoice-billing-details.test.ts +384 -0
  10. package/__tests__/invoice-data-access-replace.test.ts +236 -2
  11. package/__tests__/invoice-order-items-settle.test.ts +1 -1
  12. package/__tests__/invoice-payment-email.test.ts +191 -0
  13. package/__tests__/invoice-regenerate-email.test.ts +288 -0
  14. package/__tests__/invoice-regenerate-route.test.ts +9 -7
  15. package/__tests__/invoice-reservation.test.ts +1 -1
  16. package/__tests__/invoice-tender.test.ts +1 -1
  17. package/__tests__/middleware-admin-panel-roles.test.ts +127 -0
  18. package/__tests__/page-arrival-remount.test.ts +247 -0
  19. package/__tests__/payment-drivers-module.test.ts +19 -0
  20. package/__tests__/raw-query-error-code.test.ts +47 -0
  21. package/__tests__/runtime-template-token-resolution.test.ts +16 -0
  22. package/__tests__/segment-reply-changed-keys.test.ts +31 -0
  23. package/__tests__/segment-route-skipped-branch.test.ts +101 -0
  24. package/__tests__/segment-splitter-checkout-order.test.ts +306 -0
  25. package/__tests__/streaming-on-end-env-filter.test.ts +18 -18
  26. package/__tests__/streaming-on-end-order.test.ts +387 -0
  27. package/dist/cjs/account-delete-route-generator.d.ts +1 -0
  28. package/dist/cjs/account-delete-route-generator.d.ts.map +1 -1
  29. package/dist/cjs/account-delete-route-generator.js +2 -1
  30. package/dist/cjs/account-delete-route-generator.js.map +1 -1
  31. package/dist/cjs/api-route-generator.d.ts.map +1 -1
  32. package/dist/cjs/api-route-generator.js +23 -13
  33. package/dist/cjs/api-route-generator.js.map +1 -1
  34. package/dist/cjs/auth-generator.d.ts +1 -0
  35. package/dist/cjs/auth-generator.d.ts.map +1 -1
  36. package/dist/cjs/auth-generator.js +77 -28
  37. package/dist/cjs/auth-generator.js.map +1 -1
  38. package/dist/cjs/booking-calendar-feed-route-generator.d.ts +28 -0
  39. package/dist/cjs/booking-calendar-feed-route-generator.d.ts.map +1 -0
  40. package/dist/cjs/booking-calendar-feed-route-generator.js +296 -0
  41. package/dist/cjs/booking-calendar-feed-route-generator.js.map +1 -0
  42. package/dist/cjs/data-api-route-generator.d.ts.map +1 -1
  43. package/dist/cjs/data-api-route-generator.js +6 -1
  44. package/dist/cjs/data-api-route-generator.js.map +1 -1
  45. package/dist/cjs/executor-generator.d.ts.map +1 -1
  46. package/dist/cjs/executor-generator.js +39 -28
  47. package/dist/cjs/executor-generator.js.map +1 -1
  48. package/dist/cjs/graph-utils.d.ts +31 -1
  49. package/dist/cjs/graph-utils.d.ts.map +1 -1
  50. package/dist/cjs/graph-utils.js +112 -10
  51. package/dist/cjs/graph-utils.js.map +1 -1
  52. package/dist/cjs/index.d.ts +1 -1
  53. package/dist/cjs/index.d.ts.map +1 -1
  54. package/dist/cjs/index.js +2 -1
  55. package/dist/cjs/index.js.map +1 -1
  56. package/dist/cjs/invoice/api-routes-code.d.ts +12 -3
  57. package/dist/cjs/invoice/api-routes-code.d.ts.map +1 -1
  58. package/dist/cjs/invoice/api-routes-code.js +152 -21
  59. package/dist/cjs/invoice/api-routes-code.js.map +1 -1
  60. package/dist/cjs/invoice/data-access-code.d.ts.map +1 -1
  61. package/dist/cjs/invoice/data-access-code.js +133 -21
  62. package/dist/cjs/invoice/data-access-code.js.map +1 -1
  63. package/dist/cjs/invoice/email-sender-code.d.ts.map +1 -1
  64. package/dist/cjs/invoice/email-sender-code.js +15 -25
  65. package/dist/cjs/invoice/email-sender-code.js.map +1 -1
  66. package/dist/cjs/invoice/index.js +1 -1
  67. package/dist/cjs/invoice/index.js.map +1 -1
  68. package/dist/cjs/invoice/invoice-assembly-code.d.ts.map +1 -1
  69. package/dist/cjs/invoice/invoice-assembly-code.js +50 -6
  70. package/dist/cjs/invoice/invoice-assembly-code.js.map +1 -1
  71. package/dist/cjs/invoice/invoice-html-code.d.ts.map +1 -1
  72. package/dist/cjs/invoice/invoice-html-code.js +13 -2
  73. package/dist/cjs/invoice/invoice-html-code.js.map +1 -1
  74. package/dist/cjs/nodes/data/data-raw-query.d.ts.map +1 -1
  75. package/dist/cjs/nodes/data/data-raw-query.js +11 -1
  76. package/dist/cjs/nodes/data/data-raw-query.js.map +1 -1
  77. package/dist/cjs/nodes/email/email-mailgun.d.ts.map +1 -1
  78. package/dist/cjs/nodes/email/email-mailgun.js +4 -2
  79. package/dist/cjs/nodes/email/email-mailgun.js.map +1 -1
  80. package/dist/cjs/nodes/email/email-postmark.d.ts.map +1 -1
  81. package/dist/cjs/nodes/email/email-postmark.js +5 -2
  82. package/dist/cjs/nodes/email/email-postmark.js.map +1 -1
  83. package/dist/cjs/nodes/email/email-resend.d.ts.map +1 -1
  84. package/dist/cjs/nodes/email/email-resend.js +5 -2
  85. package/dist/cjs/nodes/email/email-resend.js.map +1 -1
  86. package/dist/cjs/nodes/email/email-sendgrid.d.ts.map +1 -1
  87. package/dist/cjs/nodes/email/email-sendgrid.js +8 -2
  88. package/dist/cjs/nodes/email/email-sendgrid.js.map +1 -1
  89. package/dist/cjs/nodes/general/general-custom-js.d.ts.map +1 -1
  90. package/dist/cjs/nodes/general/general-custom-js.js +11 -0
  91. package/dist/cjs/nodes/general/general-custom-js.js.map +1 -1
  92. package/dist/cjs/nodes/storage/storage-local-remove.d.ts.map +1 -1
  93. package/dist/cjs/nodes/storage/storage-local-remove.js +2 -0
  94. package/dist/cjs/nodes/storage/storage-local-remove.js.map +1 -1
  95. package/dist/cjs/nodes/storage/storage-local-set.d.ts.map +1 -1
  96. package/dist/cjs/nodes/storage/storage-local-set.js +4 -0
  97. package/dist/cjs/nodes/storage/storage-local-set.js.map +1 -1
  98. package/dist/cjs/page-arrival.d.ts +10 -0
  99. package/dist/cjs/page-arrival.d.ts.map +1 -0
  100. package/dist/cjs/page-arrival.js +86 -0
  101. package/dist/cjs/page-arrival.js.map +1 -0
  102. package/dist/cjs/payments/index.d.ts +10 -4
  103. package/dist/cjs/payments/index.d.ts.map +1 -1
  104. package/dist/cjs/payments/index.js +18 -7
  105. package/dist/cjs/payments/index.js.map +1 -1
  106. package/dist/cjs/segment-splitter.d.ts.map +1 -1
  107. package/dist/cjs/segment-splitter.js +65 -27
  108. package/dist/cjs/segment-splitter.js.map +1 -1
  109. package/dist/cjs/transactional-email-code.d.ts.map +1 -1
  110. package/dist/cjs/transactional-email-code.js +32 -18
  111. package/dist/cjs/transactional-email-code.js.map +1 -1
  112. package/dist/cjs/tsconfig.tsbuildinfo +1 -1
  113. package/dist/cjs/workflow-component-plugin.d.ts.map +1 -1
  114. package/dist/cjs/workflow-component-plugin.js +35 -149
  115. package/dist/cjs/workflow-component-plugin.js.map +1 -1
  116. package/dist/cjs/workflow-project-plugin.d.ts.map +1 -1
  117. package/dist/cjs/workflow-project-plugin.js +16 -4
  118. package/dist/cjs/workflow-project-plugin.js.map +1 -1
  119. package/dist/cjs/workflow-scope.d.ts +19 -0
  120. package/dist/cjs/workflow-scope.d.ts.map +1 -0
  121. package/dist/cjs/workflow-scope.js +147 -0
  122. package/dist/cjs/workflow-scope.js.map +1 -0
  123. package/dist/esm/account-delete-route-generator.d.ts +1 -0
  124. package/dist/esm/account-delete-route-generator.d.ts.map +1 -1
  125. package/dist/esm/account-delete-route-generator.js +2 -1
  126. package/dist/esm/account-delete-route-generator.js.map +1 -1
  127. package/dist/esm/api-route-generator.d.ts.map +1 -1
  128. package/dist/esm/api-route-generator.js +23 -13
  129. package/dist/esm/api-route-generator.js.map +1 -1
  130. package/dist/esm/auth-generator.d.ts +1 -0
  131. package/dist/esm/auth-generator.d.ts.map +1 -1
  132. package/dist/esm/auth-generator.js +77 -28
  133. package/dist/esm/auth-generator.js.map +1 -1
  134. package/dist/esm/booking-calendar-feed-route-generator.d.ts +28 -0
  135. package/dist/esm/booking-calendar-feed-route-generator.d.ts.map +1 -0
  136. package/dist/esm/booking-calendar-feed-route-generator.js +291 -0
  137. package/dist/esm/booking-calendar-feed-route-generator.js.map +1 -0
  138. package/dist/esm/data-api-route-generator.d.ts.map +1 -1
  139. package/dist/esm/data-api-route-generator.js +6 -1
  140. package/dist/esm/data-api-route-generator.js.map +1 -1
  141. package/dist/esm/executor-generator.d.ts.map +1 -1
  142. package/dist/esm/executor-generator.js +39 -28
  143. package/dist/esm/executor-generator.js.map +1 -1
  144. package/dist/esm/graph-utils.d.ts +31 -1
  145. package/dist/esm/graph-utils.d.ts.map +1 -1
  146. package/dist/esm/graph-utils.js +109 -9
  147. package/dist/esm/graph-utils.js.map +1 -1
  148. package/dist/esm/index.d.ts +1 -1
  149. package/dist/esm/index.d.ts.map +1 -1
  150. package/dist/esm/index.js +1 -1
  151. package/dist/esm/index.js.map +1 -1
  152. package/dist/esm/invoice/api-routes-code.d.ts +12 -3
  153. package/dist/esm/invoice/api-routes-code.d.ts.map +1 -1
  154. package/dist/esm/invoice/api-routes-code.js +152 -21
  155. package/dist/esm/invoice/api-routes-code.js.map +1 -1
  156. package/dist/esm/invoice/data-access-code.d.ts.map +1 -1
  157. package/dist/esm/invoice/data-access-code.js +133 -21
  158. package/dist/esm/invoice/data-access-code.js.map +1 -1
  159. package/dist/esm/invoice/email-sender-code.d.ts.map +1 -1
  160. package/dist/esm/invoice/email-sender-code.js +15 -25
  161. package/dist/esm/invoice/email-sender-code.js.map +1 -1
  162. package/dist/esm/invoice/index.js +1 -1
  163. package/dist/esm/invoice/index.js.map +1 -1
  164. package/dist/esm/invoice/invoice-assembly-code.d.ts.map +1 -1
  165. package/dist/esm/invoice/invoice-assembly-code.js +50 -6
  166. package/dist/esm/invoice/invoice-assembly-code.js.map +1 -1
  167. package/dist/esm/invoice/invoice-html-code.d.ts.map +1 -1
  168. package/dist/esm/invoice/invoice-html-code.js +13 -2
  169. package/dist/esm/invoice/invoice-html-code.js.map +1 -1
  170. package/dist/esm/nodes/data/data-raw-query.d.ts.map +1 -1
  171. package/dist/esm/nodes/data/data-raw-query.js +11 -1
  172. package/dist/esm/nodes/data/data-raw-query.js.map +1 -1
  173. package/dist/esm/nodes/email/email-mailgun.d.ts.map +1 -1
  174. package/dist/esm/nodes/email/email-mailgun.js +4 -2
  175. package/dist/esm/nodes/email/email-mailgun.js.map +1 -1
  176. package/dist/esm/nodes/email/email-postmark.d.ts.map +1 -1
  177. package/dist/esm/nodes/email/email-postmark.js +5 -2
  178. package/dist/esm/nodes/email/email-postmark.js.map +1 -1
  179. package/dist/esm/nodes/email/email-resend.d.ts.map +1 -1
  180. package/dist/esm/nodes/email/email-resend.js +5 -2
  181. package/dist/esm/nodes/email/email-resend.js.map +1 -1
  182. package/dist/esm/nodes/email/email-sendgrid.d.ts.map +1 -1
  183. package/dist/esm/nodes/email/email-sendgrid.js +8 -2
  184. package/dist/esm/nodes/email/email-sendgrid.js.map +1 -1
  185. package/dist/esm/nodes/general/general-custom-js.d.ts.map +1 -1
  186. package/dist/esm/nodes/general/general-custom-js.js +11 -0
  187. package/dist/esm/nodes/general/general-custom-js.js.map +1 -1
  188. package/dist/esm/nodes/storage/storage-local-remove.d.ts.map +1 -1
  189. package/dist/esm/nodes/storage/storage-local-remove.js +2 -0
  190. package/dist/esm/nodes/storage/storage-local-remove.js.map +1 -1
  191. package/dist/esm/nodes/storage/storage-local-set.d.ts.map +1 -1
  192. package/dist/esm/nodes/storage/storage-local-set.js +4 -0
  193. package/dist/esm/nodes/storage/storage-local-set.js.map +1 -1
  194. package/dist/esm/page-arrival.d.ts +10 -0
  195. package/dist/esm/page-arrival.d.ts.map +1 -0
  196. package/dist/esm/page-arrival.js +81 -0
  197. package/dist/esm/page-arrival.js.map +1 -0
  198. package/dist/esm/payments/index.d.ts +10 -4
  199. package/dist/esm/payments/index.d.ts.map +1 -1
  200. package/dist/esm/payments/index.js +16 -6
  201. package/dist/esm/payments/index.js.map +1 -1
  202. package/dist/esm/segment-splitter.d.ts.map +1 -1
  203. package/dist/esm/segment-splitter.js +66 -28
  204. package/dist/esm/segment-splitter.js.map +1 -1
  205. package/dist/esm/transactional-email-code.d.ts.map +1 -1
  206. package/dist/esm/transactional-email-code.js +32 -18
  207. package/dist/esm/transactional-email-code.js.map +1 -1
  208. package/dist/esm/tsconfig.tsbuildinfo +1 -1
  209. package/dist/esm/workflow-component-plugin.d.ts.map +1 -1
  210. package/dist/esm/workflow-component-plugin.js +32 -146
  211. package/dist/esm/workflow-component-plugin.js.map +1 -1
  212. package/dist/esm/workflow-project-plugin.d.ts.map +1 -1
  213. package/dist/esm/workflow-project-plugin.js +16 -4
  214. package/dist/esm/workflow-project-plugin.js.map +1 -1
  215. package/dist/esm/workflow-scope.d.ts +19 -0
  216. package/dist/esm/workflow-scope.d.ts.map +1 -0
  217. package/dist/esm/workflow-scope.js +142 -0
  218. package/dist/esm/workflow-scope.js.map +1 -0
  219. package/package.json +4 -4
  220. package/src/account-delete-route-generator.ts +3 -1
  221. package/src/api-route-generator.ts +23 -13
  222. package/src/auth-generator.ts +83 -26
  223. package/src/booking-calendar-feed-route-generator.ts +293 -0
  224. package/src/data-api-route-generator.ts +6 -1
  225. package/src/executor-generator.ts +39 -28
  226. package/src/graph-utils.ts +143 -11
  227. package/src/index.ts +1 -0
  228. package/src/invoice/api-routes-code.ts +166 -21
  229. package/src/invoice/data-access-code.ts +139 -21
  230. package/src/invoice/email-sender-code.ts +15 -25
  231. package/src/invoice/index.ts +1 -1
  232. package/src/invoice/invoice-assembly-code.ts +50 -6
  233. package/src/invoice/invoice-html-code.ts +13 -2
  234. package/src/nodes/data/data-raw-query.ts +11 -1
  235. package/src/nodes/email/email-mailgun.ts +11 -2
  236. package/src/nodes/email/email-postmark.ts +12 -2
  237. package/src/nodes/email/email-resend.ts +12 -2
  238. package/src/nodes/email/email-sendgrid.ts +15 -2
  239. package/src/nodes/general/general-custom-js.ts +10 -0
  240. package/src/nodes/storage/storage-local-remove.ts +4 -0
  241. package/src/nodes/storage/storage-local-set.ts +6 -0
  242. package/src/page-arrival.ts +115 -0
  243. package/src/payments/index.ts +18 -5
  244. package/src/segment-splitter.ts +90 -36
  245. package/src/transactional-email-code.ts +32 -21
  246. package/src/workflow-component-plugin.ts +43 -188
  247. package/src/workflow-project-plugin.ts +17 -4
  248. package/src/workflow-scope.ts +184 -0
@@ -21,7 +21,7 @@ ${generateGetInvoiceByIdCode(dsType, invoicesTable)}
21
21
 
22
22
  ${generateUpdateInvoiceCode(dsType, invoicesTable)}
23
23
 
24
- ${generateStoreInvoicePdfCode(dsType)}
24
+ ${generateStoreInvoicePdfCode(dsType, invoicesTable)}
25
25
 
26
26
  ${generateGetOrderWithItemsCode(dsType)}
27
27
 
@@ -29,6 +29,8 @@ ${generateReplaceInvoiceCode(dsType, invoicesTable, invoiceItemsTable)}
29
29
 
30
30
  ${generateLinkOrderToInvoiceCode(dsType)}
31
31
 
32
+ ${generateRecordOrderEventCode(dsType)}
33
+
32
34
  module.exports = {
33
35
  getClient: getClient,
34
36
  reserveInvoice: reserveInvoice,
@@ -39,6 +41,7 @@ module.exports = {
39
41
  getOrderWithItems: getOrderWithItems,
40
42
  replaceInvoice: replaceInvoice,
41
43
  linkOrderToInvoice: linkOrderToInvoice,
44
+ recordOrderEvent: recordOrderEvent,
42
45
  };
43
46
  `;
44
47
  };
@@ -334,18 +337,45 @@ ${cutoff}
334
337
  return result.rowCount > 0;
335
338
  }`;
336
339
  }
337
- // Puts the rendered PDF on the reserved row; `pdf_size_bytes` is what marks
338
- // the invoice finished (see `claimStaleInvoice`).
339
- function generateStoreInvoicePdfCode(dsType) {
340
- const pdfData = dsType === 'supabase' ? `pdfBuffer.toString('base64')` : 'pdfBuffer';
341
- return `
340
+ // Puts the rendered PDF on the reserved row — only while the row has none —
341
+ // and resolves to `{ firstPdf }`: whether this write gave the invoice its
342
+ // first PDF. `pdf_size_bytes` marks the invoice finished (see
343
+ // `claimStaleInvoice`), and the invoice's first PDF is what its email is
344
+ // claimed by: `replaceInvoice` writes first under the same condition, so of a
345
+ // retried payment finishing a stale invoice and a regeneration racing it, one
346
+ // writes the PDF and emails the buyer, and the other is told it was not first.
347
+ function generateStoreInvoicePdfCode(dsType, table) {
348
+ if (dsType === 'supabase') {
349
+ return `
342
350
  async function storeInvoicePdf(invoiceId, pdfBuffer, pdfUrl) {
343
- return updateInvoice(invoiceId, {
344
- pdf_data: ${pdfData},
351
+ var result = await getClient().from('${table}').update({
352
+ pdf_data: pdfBuffer.toString('base64'),
345
353
  pdf_size_bytes: pdfBuffer.length,
346
354
  pdf_content_type: 'application/pdf',
347
355
  pdf_url: pdfUrl,
348
- });
356
+ updated_at: new Date().toISOString(),
357
+ }).eq('id', invoiceId).is('pdf_size_bytes', null).select('id');
358
+ if (result.error) throw new Error(result.error.message);
359
+ return { firstPdf: !!(result.data && result.data.length > 0) };
360
+ }`;
361
+ }
362
+ if (dsType === 'mysql' || dsType === 'mariadb' || dsType === 'tidb') {
363
+ return `
364
+ async function storeInvoicePdf(invoiceId, pdfBuffer, pdfUrl) {
365
+ var [result] = await getClient().execute(
366
+ 'UPDATE ${table} SET pdf_data = ?, pdf_size_bytes = ?, pdf_content_type = ?, pdf_url = ?, updated_at = ? WHERE id = ? AND pdf_size_bytes IS NULL',
367
+ [pdfBuffer, pdfBuffer.length, 'application/pdf', pdfUrl, new Date().toISOString(), invoiceId]
368
+ );
369
+ return { firstPdf: !!(result && result.affectedRows > 0) };
370
+ }`;
371
+ }
372
+ return `
373
+ async function storeInvoicePdf(invoiceId, pdfBuffer, pdfUrl) {
374
+ var result = await getClient().query(
375
+ 'UPDATE ${table} SET pdf_data = $1, pdf_size_bytes = $2, pdf_content_type = $3, pdf_url = $4, updated_at = $5 WHERE id = $6 AND pdf_size_bytes IS NULL',
376
+ [pdfBuffer, pdfBuffer.length, 'application/pdf', pdfUrl, new Date().toISOString(), invoiceId]
377
+ );
378
+ return { firstPdf: result.rowCount > 0 };
349
379
  }`;
350
380
  }
351
381
  function generateInsertInvoiceItemsCode(dsType, table) {
@@ -530,6 +560,15 @@ async function getOrderWithItems(orderId) {
530
560
  // points at it (the order, the sent-email ledger) stays valid. Postgres and
531
561
  // MySQL do it in one transaction, and Supabase undoes its steps, so a failure
532
562
  // leaves the old invoice whole.
563
+ //
564
+ // Resolves to `{ firstPdf }`: whether this write gave the invoice its first
565
+ // PDF — one whose PDF never came at payment, so its buyer was never emailed
566
+ // it. The database decides: the row is first written only where it has no PDF
567
+ // (the `pdf_size_bytes IS NULL` that `claimStaleInvoice` reads as
568
+ // "unfinished"), and of two regenerations racing for the same invoice the
569
+ // second waits for the first's row lock, then finds the PDF and matches
570
+ // nothing. `storeInvoicePdf` writes the payment's PDF under the same
571
+ // condition, so exactly one write is ever told `firstPdf: true`.
533
572
  function generateReplaceInvoiceCode(dsType, table, itemsTable) {
534
573
  if (dsType === 'supabase') {
535
574
  return `
@@ -549,18 +588,23 @@ async function replaceInvoice(invoiceId, invoiceData, items) {
549
588
  var insertedIds = (inserted || []).map(function (row) { return row.id; });
550
589
  var written = null;
551
590
  try {
552
- var record = await writeInvoiceRecord(mapInvoiceReplacementToRecord(invoiceData), async function (fields) {
553
- var result = await client.from('${table}').update(fields).eq('id', invoiceId).select('id');
554
- if (result.error) throw new Error(result.error.message);
555
- if (!result.data || result.data.length === 0) throw new Error('Invoice ' + invoiceId + ' no longer exists');
591
+ var outcome = await writeInvoiceRecord(mapInvoiceReplacementToRecord(invoiceData), async function (fields) {
592
+ var first = await client.from('${table}').update(fields).eq('id', invoiceId).is('pdf_size_bytes', null).select('id');
593
+ if (first.error) throw new Error(first.error.message);
594
+ var firstPdf = !!(first.data && first.data.length > 0);
595
+ if (!firstPdf) {
596
+ var result = await client.from('${table}').update(fields).eq('id', invoiceId).select('id');
597
+ if (result.error) throw new Error(result.error.message);
598
+ if (!result.data || result.data.length === 0) throw new Error('Invoice ' + invoiceId + ' no longer exists');
599
+ }
556
600
  written = fields;
557
- return fields;
601
+ return { firstPdf: firstPdf };
558
602
  });
559
603
  if (previousIds.length > 0) {
560
604
  var removed = await client.from('${itemsTable}').delete().in('id', previousIds);
561
605
  if (removed.error) throw new Error(removed.error.message);
562
606
  }
563
- return record;
607
+ return outcome;
564
608
  } catch (err) {
565
609
  if (written) {
566
610
  var restored = {};
@@ -588,12 +632,17 @@ async function replaceInvoice(invoiceId, invoiceData, items) {
588
632
  var setClauses = columns.map(function(k) { return quoteIdent(k) + ' = ?'; }).join(', ');
589
633
  var values = columns.map(function(k) { return fields[k]; });
590
634
  values.push(invoiceId);
591
- var [updated] = await conn.execute('UPDATE ${table} SET ' + setClauses + ' WHERE id = ?', values);
592
- if (!updated || !updated.affectedRows) throw new Error('Invoice ' + invoiceId + ' no longer exists');
635
+ var update = 'UPDATE ${table} SET ' + setClauses + ' WHERE id = ?';
636
+ var [first] = await conn.execute(update + ' AND pdf_size_bytes IS NULL', values);
637
+ var firstPdf = !!(first && first.affectedRows > 0);
638
+ if (!firstPdf) {
639
+ var [updated] = await conn.execute(update, values);
640
+ if (!updated || !updated.affectedRows) throw new Error('Invoice ' + invoiceId + ' no longer exists');
641
+ }
593
642
  await conn.execute('DELETE FROM ${itemsTable} WHERE invoice_id = ?', [invoiceId]);
594
643
  await insertInvoiceItemRows(conn, invoiceId, items);
595
644
  await conn.commit();
596
- return fields;
645
+ return { firstPdf: firstPdf };
597
646
  } catch (err) {
598
647
  try { await conn.rollback(); } catch (_rollbackErr) {}
599
648
  throw err;
@@ -616,12 +665,16 @@ async function replaceInvoice(invoiceId, invoiceData, items) {
616
665
  values.push(invoiceId);
617
666
  // The UPDATE takes the row lock first, so two regenerations of the same
618
667
  // invoice run one after the other instead of interleaving their lines.
619
- var updated = await client.query('UPDATE ${table} SET ' + setClauses + ' WHERE id = $' + values.length, values);
620
- if (!updated.rowCount) throw new Error('Invoice ' + invoiceId + ' no longer exists');
668
+ var update = 'UPDATE ${table} SET ' + setClauses + ' WHERE id = $' + values.length;
669
+ var firstPdf = (await client.query(update + ' AND pdf_size_bytes IS NULL', values)).rowCount > 0;
670
+ if (!firstPdf) {
671
+ var updated = await client.query(update, values);
672
+ if (!updated.rowCount) throw new Error('Invoice ' + invoiceId + ' no longer exists');
673
+ }
621
674
  await client.query('DELETE FROM ${itemsTable} WHERE invoice_id = $1', [invoiceId]);
622
675
  await insertInvoiceItemRows(client, invoiceId, items);
623
676
  await client.query('COMMIT');
624
- return fields;
677
+ return { firstPdf: firstPdf };
625
678
  } catch (err) {
626
679
  try { await client.query('ROLLBACK'); } catch (_rollbackErr) {}
627
680
  throw err;
@@ -678,6 +731,65 @@ async function linkOrderToInvoice(orderId, invoiceId, invoiceNumber, pdfUrl) {
678
731
  return result.rowCount > 0;
679
732
  }`;
680
733
  }
734
+ // One line of an order's history: a row of the activity log the editor
735
+ // provisions (`teleport_events`) and both order timelines read. Written like
736
+ // every line the store's workflows write — teleport-gui's
737
+ // `constants/order-event-types.ts` owns the vocabulary — so a replay collides
738
+ // on the UNIQUE `dedupe_key` and adds nothing. `event` is
739
+ // `{ type, dedupeKey, orderId, payload, actor, actorType }`.
740
+ function generateRecordOrderEventCode(dsType) {
741
+ const row = `
742
+ var ORDER_EVENTS_TABLE = 'teleport_events';
743
+ var ORDER_EVENT_DEDUPE_KEY_MAX_LENGTH = 255;
744
+
745
+ function orderEventRow(event) {
746
+ return {
747
+ id: require('crypto').randomUUID(),
748
+ event_type: event.type,
749
+ dedupe_key: String(event.dedupeKey).slice(0, ORDER_EVENT_DEDUPE_KEY_MAX_LENGTH),
750
+ order_id: event.orderId || null,
751
+ payload: JSON.stringify(event.payload || {}),
752
+ actor: event.actor || '',
753
+ actor_type: event.actorType,
754
+ // Logged; a dispatcher claims the rows it delivers itself.
755
+ status: 'recorded',
756
+ };
757
+ }`;
758
+ if (dsType === 'supabase') {
759
+ return `${row}
760
+
761
+ async function recordOrderEvent(event) {
762
+ var result = await getClient()
763
+ .from(ORDER_EVENTS_TABLE)
764
+ .upsert(orderEventRow(event), { onConflict: 'dedupe_key', ignoreDuplicates: true });
765
+ if (result.error) throw new Error(result.error.message);
766
+ }`;
767
+ }
768
+ if (dsType === 'mysql' || dsType === 'mariadb' || dsType === 'tidb') {
769
+ return `${row}
770
+
771
+ async function recordOrderEvent(event) {
772
+ var record = orderEventRow(event);
773
+ var columns = Object.keys(record);
774
+ var placeholders = columns.map(function() { return '?'; }).join(', ');
775
+ await getClient().execute(
776
+ 'INSERT INTO ' + ORDER_EVENTS_TABLE + ' (' + columns.join(', ') + ') VALUES (' + placeholders + ') ON DUPLICATE KEY UPDATE dedupe_key = dedupe_key',
777
+ columns.map(function(k) { return record[k]; })
778
+ );
779
+ }`;
780
+ }
781
+ return `${row}
782
+
783
+ async function recordOrderEvent(event) {
784
+ var record = orderEventRow(event);
785
+ var columns = Object.keys(record);
786
+ var placeholders = columns.map(function(_, i) { return '$' + (i + 1); }).join(', ');
787
+ await getClient().query(
788
+ 'INSERT INTO ' + ORDER_EVENTS_TABLE + ' (' + columns.join(', ') + ') VALUES (' + placeholders + ') ON CONFLICT (dedupe_key) DO NOTHING',
789
+ columns.map(function(k) { return record[k]; })
790
+ );
791
+ }`;
792
+ }
681
793
  export const getRecordMappingCode = (dsType) => `
682
794
  function mapInvoiceToRecord(data) {
683
795
  return {
@@ -1 +1 @@
1
- {"version":3,"file":"data-access-code.js","sourceRoot":"","sources":["../../../src/invoice/data-access-code.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"data-access-code.js","sourceRoot":"","sources":["../../../src/invoice/data-access-code.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"email-sender-code.d.ts","sourceRoot":"","sources":["../../../src/invoice/email-sender-code.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,wBAAwB,EAAE,MAAM,4BAA4B,CAAA;AAErE,eAAO,MAAM,uBAAuB,kBAAmB,wBAAwB,KAAG,MAqGjF,CAAA;AAqND,eAAO,MAAM,4BAA4B,aAAc,MAAM,GAAG,IAAI,KAAG,OAAO,MAAM,EAAE,MAAM,CAkB3F,CAAA"}
1
+ {"version":3,"file":"email-sender-code.d.ts","sourceRoot":"","sources":["../../../src/invoice/email-sender-code.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,wBAAwB,EAAE,MAAM,4BAA4B,CAAA;AAGrE,eAAO,MAAM,uBAAuB,kBAAmB,wBAAwB,KAAG,MA2GjF,CAAA;AAoMD,eAAO,MAAM,4BAA4B,aAAc,MAAM,GAAG,IAAI,KAAG,OAAO,MAAM,EAAE,MAAM,CAkB3F,CAAA"}
@@ -1,3 +1,4 @@
1
+ import { EmailSender } from '@teleporthq/teleport-shared';
1
2
  export const generateEmailSenderCode = (emailDelivery) => {
2
3
  if (!emailDelivery || !emailDelivery.enabled || !emailDelivery.provider) {
3
4
  return `module.exports = { sendInvoiceEmail: async function() { return { success: false, error: 'Email delivery not configured' }; } };`;
@@ -29,6 +30,8 @@ var BODY_TEMPLATE = ${JSON.stringify(bodyTemplate)};
29
30
  // Per-language copies of the subject/body (main language excluded), chosen by
30
31
  // the locale the generate route resolved for the invoice (the order's).
31
32
  var LOCALIZED_TEMPLATES = ${JSON.stringify(localizedTemplates)};
33
+ ${EmailSender.generateEmailSenderHelperCode()}
34
+ var SENDER = __emailSender(${JSON.stringify({ from: fromEmail, name: fromName })});
32
35
 
33
36
  function resolveSecretKey(keyName) {
34
37
  var envName = SECRET_KEYS[keyName];
@@ -48,7 +51,8 @@ function buildEmailData(invoiceData) {
48
51
  subject: replacePlaceholders(copy.subject, data),
49
52
  body: replacePlaceholders(copy.body, data),
50
53
  to: invoiceData.customerEmail || '',
51
- from: ${JSON.stringify(fromName ? `${fromName} <${fromEmail}>` : fromEmail)},
54
+ from: SENDER.header,
55
+ sender: SENDER,
52
56
  templateData: data,
53
57
  };
54
58
  }
@@ -59,7 +63,9 @@ function attachmentName(invoiceData) {
59
63
 
60
64
  ${generateProviderSendFunction(emailDelivery.provider)}
61
65
 
62
- async function sendInvoiceEmail(invoiceData, pdfBuffer) {
66
+ // sourceRef names the route that sent it in the ledger: the payment's
67
+ // generate route unless the caller says otherwise.
68
+ async function sendInvoiceEmail(invoiceData, pdfBuffer, sourceRef) {
63
69
  var emailData = buildEmailData(invoiceData);
64
70
  if (!emailData.to) return { success: false, error: 'No customer email provided' };
65
71
  var result;
@@ -73,6 +79,7 @@ async function sendInvoiceEmail(invoiceData, pdfBuffer) {
73
79
  audience: 'customer',
74
80
  to: emailData.to,
75
81
  from: emailData.from,
82
+ fromName: emailData.sender.name,
76
83
  subject: emailData.subject,
77
84
  html: emailData.body,
78
85
  payload: emailData.templateData,
@@ -87,7 +94,7 @@ async function sendInvoiceEmail(invoiceData, pdfBuffer) {
87
94
  status: result && result.success ? 'sent' : 'failed',
88
95
  error: result && !result.success ? result.error : null,
89
96
  source: 'invoice',
90
- sourceRef: 'api/invoices/generate',
97
+ sourceRef: sourceRef || 'api/invoices/generate',
91
98
  orderId: invoiceData.orderId,
92
99
  referenceType: 'invoice',
93
100
  referenceId: invoiceData.id,
@@ -133,9 +140,12 @@ async function sendInvoiceEmailWithProvider(emailData, invoiceData, pdfBuffer) {
133
140
  var apiKey = resolveSecretKey('apiKey');
134
141
  if (!apiKey) return { success: false, error: 'SendGrid API key not configured' };
135
142
  sgMail.setApiKey(apiKey);
143
+ // SendGrid reads a "Name <email>" string's name verbatim, quotes included,
144
+ // so a named sender goes as its two parts.
145
+ var sender = emailData.sender;
136
146
  var msg = {
137
147
  to: emailData.to,
138
- from: emailData.from,
148
+ from: sender.name ? { email: sender.email, name: sender.name } : sender.email,
139
149
  subject: emailData.subject,
140
150
  html: emailData.body,
141
151
  attachments: [{
@@ -208,26 +218,6 @@ async function sendInvoiceEmailWithProvider(emailData, invoiceData, pdfBuffer) {
208
218
  }`;
209
219
  case 'mailersend':
210
220
  return `
211
- // Pulls "name" and "email" out of the RFC-5322-ish \`from\` string the
212
- // builder assembles. Three shapes in the wild:
213
- // 1. "Acme Billing <billing@acme.com>" → name="Acme Billing", email="billing@acme.com"
214
- // 2. "billing@acme.com" → name="", email="billing@acme.com"
215
- // 3. "" → {}, caller handles the fallback
216
- // The old implementation used naive \`.replace()\` chains that produced
217
- // \`name="billing@acme.com"\` in case (2) — MailerSend accepts that but the
218
- // email then appears in the recipient's client with itself as the sender
219
- // name, which is ugly. Kept as a pure helper (no fallbacks baked in) so
220
- // the caller decides what to do when a field is missing.
221
- function parseFromString(from) {
222
- var str = String(from || '').trim();
223
- if (!str) return { name: '', email: '' };
224
- var m = /^(.*)<([^<>]+)>\\s*$/.exec(str);
225
- if (m) {
226
- return { name: m[1].trim(), email: m[2].trim() };
227
- }
228
- return { name: '', email: str };
229
- }
230
-
231
221
  async function sendInvoiceEmailWithProvider(emailData, invoiceData, pdfBuffer) {
232
222
  var invoiceNumber = invoiceData && invoiceData.invoiceNumber ? invoiceData.invoiceNumber : '(no number)';
233
223
  try {
@@ -247,7 +237,7 @@ async function sendInvoiceEmailWithProvider(emailData, invoiceData, pdfBuffer) {
247
237
 
248
238
  var mailerSend = new MailerSend({ apiKey: apiKey });
249
239
 
250
- var parsedFrom = parseFromString(emailData.from);
240
+ var parsedFrom = emailData.sender;
251
241
  if (!parsedFrom.email) {
252
242
  console.error('[invoice-email][mailersend] skip — from address is empty (set invoiceSettings.emailDelivery.fromEmail)');
253
243
  return { success: false, error: 'Sender email not configured' };
@@ -1 +1 @@
1
- {"version":3,"file":"email-sender-code.js","sourceRoot":"","sources":["../../../src/invoice/email-sender-code.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,uBAAuB,GAAG,CAAC,aAAuC,EAAU,EAAE;IACzF,IAAI,CAAC,aAAa,IAAI,CAAC,aAAa,CAAC,OAAO,IAAI,CAAC,aAAa,CAAC,QAAQ,EAAE;QACvE,OAAO,iIAAiI,CAAA;KACzI;IAED,MAAM,cAAc,GAAG,IAAI,CAAC,SAAS,CAAC,aAAa,CAAC,UAAU,IAAI,EAAE,CAAC,CAAA;IACrE,MAAM,SAAS,GAAG,aAAa,CAAC,SAAS,IAAI,EAAE,CAAA;IAC/C,MAAM,QAAQ,GAAG,aAAa,CAAC,QAAQ,IAAI,EAAE,CAAA;IAC7C,MAAM,eAAe,GAAG,aAAa,CAAC,OAAO,IAAI,2BAA2B,CAAA;IAC5E,MAAM,YAAY,GAAG,aAAa,CAAC,IAAI,IAAI,2CAA2C,CAAA;IACtF,MAAM,kBAAkB,GAAG,aAAa,CAAC,kBAAkB,IAAI,EAAE,CAAA;IAEjE,OAAO;;eAEM,aAAa,CAAC,QAAQ;;;;;;;;;;;;;oBAajB,cAAc;yBACT,IAAI,CAAC,SAAS,CAAC,eAAe,CAAC;sBAClC,IAAI,CAAC,SAAS,CAAC,YAAY,CAAC;;;4BAGtB,IAAI,CAAC,SAAS,CAAC,kBAAkB,CAAC;;;;;;;;;;;;;;;;;;;;YAoBlD,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,QAAQ,KAAK,SAAS,GAAG,CAAC,CAAC,CAAC,SAAS,CAAC;;;;;;;;;EAS7E,4BAA4B,CAAC,aAAa,CAAC,QAAQ,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;gBAyBtC,IAAI,CAAC,SAAS,CAAC,aAAa,CAAC,QAAQ,CAAC;;;;;;;;;;;;;;CAcrD,CAAA;AACD,CAAC,CAAA;AAED,SAAS,4BAA4B,CAAC,QAAgB;IACpD,QAAQ,QAAQ,EAAE;QAChB,KAAK,QAAQ;YACX,OAAO;;;;;;;;;;;;;;;;;;;;;;;EAuBX,CAAA;QAEE,KAAK,UAAU;YACb,OAAO;;;;;;;;;;;;;;;;;;;;;;;;EAwBX,CAAA;QAEE,KAAK,SAAS;YACZ,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;EA4BX,CAAA;QAEE,KAAK,UAAU;YACb,OAAO;;;;;;;;;;;;;;;;;;;;;;;EAuBX,CAAA;QAEE,KAAK,YAAY;YACf,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAwFX,CAAA;QAEE;YACE,OAAO;;iEAEoD,QAAQ;EACvE,CAAA;KACC;AACH,CAAC;AAED,MAAM,CAAC,MAAM,4BAA4B,GAAG,CAAC,QAAuB,EAA0B,EAAE;IAC9F,IAAI,CAAC,QAAQ,EAAE;QACb,OAAO,EAAE,CAAA;KACV;IACD,QAAQ,QAAQ,EAAE;QAChB,KAAK,QAAQ;YACX,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAA;QAC7B,KAAK,UAAU;YACb,OAAO,EAAE,gBAAgB,EAAE,QAAQ,EAAE,CAAA;QACvC,KAAK,SAAS;YACZ,OAAO,EAAE,YAAY,EAAE,SAAS,EAAE,WAAW,EAAE,QAAQ,EAAE,CAAA;QAC3D,KAAK,UAAU;YACb,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,CAAA;QAC/B,KAAK,YAAY;YACf,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,CAAA;QACjC;YACE,OAAO,EAAE,CAAA;KACZ;AACH,CAAC,CAAA"}
1
+ {"version":3,"file":"email-sender-code.js","sourceRoot":"","sources":["../../../src/invoice/email-sender-code.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,MAAM,6BAA6B,CAAA;AAEzD,MAAM,CAAC,MAAM,uBAAuB,GAAG,CAAC,aAAuC,EAAU,EAAE;IACzF,IAAI,CAAC,aAAa,IAAI,CAAC,aAAa,CAAC,OAAO,IAAI,CAAC,aAAa,CAAC,QAAQ,EAAE;QACvE,OAAO,iIAAiI,CAAA;KACzI;IAED,MAAM,cAAc,GAAG,IAAI,CAAC,SAAS,CAAC,aAAa,CAAC,UAAU,IAAI,EAAE,CAAC,CAAA;IACrE,MAAM,SAAS,GAAG,aAAa,CAAC,SAAS,IAAI,EAAE,CAAA;IAC/C,MAAM,QAAQ,GAAG,aAAa,CAAC,QAAQ,IAAI,EAAE,CAAA;IAC7C,MAAM,eAAe,GAAG,aAAa,CAAC,OAAO,IAAI,2BAA2B,CAAA;IAC5E,MAAM,YAAY,GAAG,aAAa,CAAC,IAAI,IAAI,2CAA2C,CAAA;IACtF,MAAM,kBAAkB,GAAG,aAAa,CAAC,kBAAkB,IAAI,EAAE,CAAA;IAEjE,OAAO;;eAEM,aAAa,CAAC,QAAQ;;;;;;;;;;;;;oBAajB,cAAc;yBACT,IAAI,CAAC,SAAS,CAAC,eAAe,CAAC;sBAClC,IAAI,CAAC,SAAS,CAAC,YAAY,CAAC;;;4BAGtB,IAAI,CAAC,SAAS,CAAC,kBAAkB,CAAC;EAC5D,WAAW,CAAC,6BAA6B,EAAE;6BAChB,IAAI,CAAC,SAAS,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EA8B9E,4BAA4B,CAAC,aAAa,CAAC,QAAQ,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;gBA4BtC,IAAI,CAAC,SAAS,CAAC,aAAa,CAAC,QAAQ,CAAC;;;;;;;;;;;;;;CAcrD,CAAA;AACD,CAAC,CAAA;AAED,SAAS,4BAA4B,CAAC,QAAgB;IACpD,QAAQ,QAAQ,EAAE;QAChB,KAAK,QAAQ;YACX,OAAO;;;;;;;;;;;;;;;;;;;;;;;EAuBX,CAAA;QAEE,KAAK,UAAU;YACb,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;EA2BX,CAAA;QAEE,KAAK,SAAS;YACZ,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;EA4BX,CAAA;QAEE,KAAK,UAAU;YACb,OAAO;;;;;;;;;;;;;;;;;;;;;;;EAuBX,CAAA;QAEE,KAAK,YAAY;YACf,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAoEX,CAAA;QAEE;YACE,OAAO;;iEAEoD,QAAQ;EACvE,CAAA;KACC;AACH,CAAC;AAED,MAAM,CAAC,MAAM,4BAA4B,GAAG,CAAC,QAAuB,EAA0B,EAAE;IAC9F,IAAI,CAAC,QAAQ,EAAE;QACb,OAAO,EAAE,CAAA;KACV;IACD,QAAQ,QAAQ,EAAE;QAChB,KAAK,QAAQ;YACX,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAA;QAC7B,KAAK,UAAU;YACb,OAAO,EAAE,gBAAgB,EAAE,QAAQ,EAAE,CAAA;QACvC,KAAK,SAAS;YACZ,OAAO,EAAE,YAAY,EAAE,SAAS,EAAE,WAAW,EAAE,QAAQ,EAAE,CAAA;QAC3D,KAAK,UAAU;YACb,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,CAAA;QAC/B,KAAK,YAAY;YACf,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,CAAA;QACjC;YACE,OAAO,EAAE,CAAA;KACZ;AACH,CAAC,CAAA"}
@@ -127,7 +127,7 @@ export const generateInvoiceFiles = (invoiceSettings, structure, dataSourceType,
127
127
  {
128
128
  name: 'regenerate',
129
129
  fileType: FileType.JS,
130
- content: generateInvoiceRegenerateRouteCode(),
130
+ content: generateInvoiceRegenerateRouteCode(invoiceSettings),
131
131
  },
132
132
  ],
133
133
  });
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/invoice/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/invoice/index.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"invoice-assembly-code.d.ts","sourceRoot":"","sources":["../../../src/invoice/invoice-assembly-code.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAA;AAIhE;;;;;;;;GAQG;AACH,eAAO,MAAM,2BAA2B,aAAc,mBAAmB,KAAG,MAof3E,CAAA"}
1
+ {"version":3,"file":"invoice-assembly-code.d.ts","sourceRoot":"","sources":["../../../src/invoice/invoice-assembly-code.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAA;AAIhE;;;;;;;;GAQG;AACH,eAAO,MAAM,2BAA2B,aAAc,mBAAmB,KAAG,MAgiB3E,CAAA"}
@@ -31,6 +31,36 @@ var TEMPLATE_DOCUMENT = ${templateDocumentJson};
31
31
  ${REGIONAL_INVOICE_TAX_CODE}
32
32
  ${ProductOptions.generateProductOptionsHelperCode()}
33
33
 
34
+ // The invoice details an order's metadata (JSON text) carries beside its
35
+ // billing columns — the keys \`ORDER_BILLING_METADATA_KEYS\` (teleport-gui)
36
+ // writes: the address in its parts, the company and the buyer's tax or VAT
37
+ // number. Every part is '' when the order has none or its metadata is no JSON
38
+ // object.
39
+ function readOrderBillingMetadata(raw) {
40
+ var parsed = raw;
41
+ if (typeof raw === 'string') {
42
+ try {
43
+ parsed = JSON.parse(raw);
44
+ } catch (e) {
45
+ parsed = null;
46
+ }
47
+ }
48
+ var meta = parsed && typeof parsed === 'object' && !Array.isArray(parsed) ? parsed : {};
49
+ function part(key) {
50
+ var value = meta[key];
51
+ return value === null || value === undefined ? '' : String(value).trim();
52
+ }
53
+ return {
54
+ taxId: part('billingTaxId'),
55
+ company: part('billingCompany'),
56
+ street: part('billingStreet'),
57
+ city: part('billingCity'),
58
+ postalCode: part('billingPostalCode'),
59
+ region: part('billingRegion'),
60
+ country: part('billingCountry'),
61
+ };
62
+ }
63
+
34
64
  // The product options an order line was bought with: the short one-line label
35
65
  // (after the name) and every answer in full, one per line (the description).
36
66
  // Same rule as the order emails: a current snapshot names its options, while
@@ -414,15 +444,28 @@ function assembleInvoiceData(body, hydratedOrder, hydratedItems) {
414
444
  // field but the order has one, use it. Kept permissive on field
415
445
  // names (billing_* wins, falls back to shipping_*) because a buyer
416
446
  // who checked "bill to a different address" has both on the order.
447
+ //
448
+ // An order whose buyer gave invoice details of their own (a booking's
449
+ // "Add invoice details", a store checkout's "Billing Details") carries them
450
+ // in its metadata as well: the address in its parts, the company and the tax
451
+ // or VAT number. Those parts are the invoice's address — never mixed with a
452
+ // shipping address — the company is printed under the buyer's name, and the
453
+ // number is the buyer's VAT.
417
454
  var orderRow = orderShippingSource;
455
+ var orderBilling = readOrderBillingMetadata(orderRow.metadata);
456
+ var billedApart = !!(orderBilling.street || orderBilling.city || orderBilling.country);
418
457
  var fallbackCustomerName =
419
458
  orderRow.billing_name || orderRow.shipping_name || orderRow.customer_name || '';
420
459
  var fallbackCustomerEmail = orderRow.billing_email || orderRow.customer_email || '';
421
- var fallbackCustomerAddress = orderRow.billing_address || orderRow.shipping_address || '';
422
- var fallbackCustomerCity = orderRow.shipping_city || '';
423
- var fallbackCustomerState = orderRow.shipping_state || '';
424
- var fallbackCustomerZip = orderRow.shipping_zip || '';
425
- var fallbackCustomerCountry = orderRow.shipping_country || '';
460
+ var fallbackCustomerAddress = billedApart
461
+ ? orderBilling.street
462
+ : orderRow.billing_address || orderRow.shipping_address || '';
463
+ var fallbackCustomerCity = billedApart ? orderBilling.city : orderRow.shipping_city || '';
464
+ var fallbackCustomerState = billedApart ? orderBilling.region : orderRow.shipping_state || '';
465
+ var fallbackCustomerZip = billedApart ? orderBilling.postalCode : orderRow.shipping_zip || '';
466
+ var fallbackCustomerCountry = billedApart
467
+ ? orderBilling.country
468
+ : orderRow.shipping_country || '';
426
469
  var fallbackPaymentMethod = orderRow.payment_method || '';
427
470
  var fallbackPaymentProvider = orderRow.payment_provider || '';
428
471
  var fallbackPaymentIntentId = orderRow.payment_intent_id || '';
@@ -444,7 +487,8 @@ function assembleInvoiceData(body, hydratedOrder, hydratedItems) {
444
487
  customerState: body.customerState || fallbackCustomerState || '',
445
488
  customerZip: body.customerZip || fallbackCustomerZip || '',
446
489
  customerCountry: body.customerCountry || fallbackCustomerCountry || '',
447
- customerVat: body.customerVat || '',
490
+ customerVat: body.customerVat || orderBilling.taxId || '',
491
+ customerCompany: body.customerCompany || orderBilling.company || '',
448
492
  companyName: pdfGenerator.COMPANY_DETAILS.companyName || '',
449
493
  companyAddress: pdfGenerator.COMPANY_DETAILS.companyAddress || '',
450
494
  companyCity: pdfGenerator.COMPANY_DETAILS.companyCity || '',
@@ -1 +1 @@
1
- {"version":3,"file":"invoice-assembly-code.js","sourceRoot":"","sources":["../../../src/invoice/invoice-assembly-code.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAA;AAC5D,OAAO,EAAE,yBAAyB,EAAE,MAAM,6BAA6B,CAAA;AAEvE;;;;;;;;GAQG;AACH,MAAM,CAAC,MAAM,2BAA2B,GAAG,CAAC,QAA6B,EAAU,EAAE;;IACnF,MAAM,cAAc,GAAG,QAAQ,CAAC,cAAc,IAAI,CAAC,CAAA;IACnD,MAAM,kBAAkB,GAAG,QAAQ,CAAC,kBAAkB,KAAK,IAAI,CAAA;IAC/D,MAAM,oBAAoB,GAAG,CAAA,MAAA,QAAQ,CAAC,QAAQ,0CAAE,QAAQ;QACtD,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,QAAQ,CAAC,QAAQ,CAAC;QAC5C,CAAC,CAAC,MAAM,CAAA;IAEV,OAAO;;;;;;;;yBAQgB,cAAc;;8BAET,kBAAkB;0BACtB,oBAAoB;EAC5C,yBAAyB;EACzB,cAAc,CAAC,gCAAgC,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA+dlD,CAAA;AACD,CAAC,CAAA"}
1
+ {"version":3,"file":"invoice-assembly-code.js","sourceRoot":"","sources":["../../../src/invoice/invoice-assembly-code.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAA;AAC5D,OAAO,EAAE,yBAAyB,EAAE,MAAM,6BAA6B,CAAA;AAEvE;;;;;;;;GAQG;AACH,MAAM,CAAC,MAAM,2BAA2B,GAAG,CAAC,QAA6B,EAAU,EAAE;;IACnF,MAAM,cAAc,GAAG,QAAQ,CAAC,cAAc,IAAI,CAAC,CAAA;IACnD,MAAM,kBAAkB,GAAG,QAAQ,CAAC,kBAAkB,KAAK,IAAI,CAAA;IAC/D,MAAM,oBAAoB,GAAG,CAAA,MAAA,QAAQ,CAAC,QAAQ,0CAAE,QAAQ;QACtD,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,QAAQ,CAAC,QAAQ,CAAC;QAC5C,CAAC,CAAC,MAAM,CAAA;IAEV,OAAO;;;;;;;;yBAQgB,cAAc;;8BAET,kBAAkB;0BACtB,oBAAoB;EAC5C,yBAAyB;EACzB,cAAc,CAAC,gCAAgC,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA2gBlD,CAAA;AACD,CAAC,CAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"invoice-html-code.d.ts","sourceRoot":"","sources":["../../../src/invoice/invoice-html-code.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAA;AA4HhE,eAAO,MAAM,uBAAuB,aACxB,mBAAmB,uBACR,OAAO,iBACb,OAAO,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,GAAG,SAAS,KACxD,MAmgCF,CAAA"}
1
+ {"version":3,"file":"invoice-html-code.d.ts","sourceRoot":"","sources":["../../../src/invoice/invoice-html-code.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAA;AA4HhE,eAAO,MAAM,uBAAuB,aACxB,mBAAmB,uBACR,OAAO,iBACb,OAAO,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,GAAG,SAAS,KACxD,MA8gCF,CAAA"}
@@ -335,9 +335,13 @@ function buildInvoiceDataScope(invoiceData) {
335
335
  // sample — right for a company address, wrong for a code or a card tail: an
336
336
  // order without a voucher must not print the designer's "SAVE20".
337
337
  var realInvoiceNeverSampled = { voucherCode: voucherCode, giftCardLast4: giftCardLast4 };
338
+ // The buyer and their payment are never sampled either: an order with no
339
+ // city (a booking, a pickup, a download) must not print the designer's
340
+ // sample customer's, nor a card it was not paid with.
338
341
 
339
342
  var realCustomer = {
340
343
  name: invoiceData.customerName || '',
344
+ company: invoiceData.customerCompany || '',
341
345
  email: invoiceData.customerEmail || '',
342
346
  address: invoiceData.customerAddress || '',
343
347
  city: invoiceData.customerCity || '',
@@ -346,6 +350,12 @@ function buildInvoiceDataScope(invoiceData) {
346
350
  country: invoiceData.customerCountry || '',
347
351
  vat: invoiceData.customerVat || '',
348
352
  };
353
+ // The "Bill to" lines a buyer may leave out show only when they did not
354
+ // (string flags: the template compares strings, as with \`hasShipping\`).
355
+ realCustomer.hasCompany = realCustomer.company ? 'true' : 'false';
356
+ realCustomer.hasZip = realCustomer.zip ? 'true' : 'false';
357
+ realCustomer.hasCountry = realCustomer.country ? 'true' : 'false';
358
+ realCustomer.hasVat = realCustomer.vat ? 'true' : 'false';
349
359
 
350
360
  var realPayment = {
351
361
  method: invoiceData.paymentMethod || '',
@@ -442,8 +452,8 @@ function buildInvoiceDataScope(invoiceData) {
442
452
  invoiceData: {
443
453
  Company: mergeWithDefaults(realCompany, defaults.Company),
444
454
  Invoice: Object.assign(mergeWithDefaults(realInvoice, defaults.Invoice), realInvoiceNeverSampled),
445
- Customer: mergeWithDefaults(realCustomer, defaults.Customer),
446
- Payment: mergeWithDefaults(realPayment, defaults.Payment),
455
+ Customer: realCustomer,
456
+ Payment: realPayment,
447
457
  Products: realProducts.length > 0 ? realProducts : (defaults.Products || []),
448
458
  },
449
459
  };
@@ -952,6 +962,7 @@ function buildFallbackInvoiceHtml(scope) {
952
962
  escapeHtml(comp.city || '') + '<br/>' +
953
963
  escapeHtml(comp.email || '') + '</div>');
954
964
  parts.push('<div style="flex:1;"><strong>' + escapeHtml(cust.name || '') + '</strong><br/>' +
965
+ (cust.company ? escapeHtml(cust.company) + '<br/>' : '') +
955
966
  escapeHtml(cust.email || '') + '<br/>' +
956
967
  escapeHtml(cust.address || '') + '<br/>' +
957
968
  escapeHtml(cust.city || '') + '</div>');
@@ -1 +1 @@
1
- {"version":3,"file":"invoice-html-code.js","sourceRoot":"","sources":["../../../src/invoice/invoice-html-code.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"invoice-html-code.js","sourceRoot":"","sources":["../../../src/invoice/invoice-html-code.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"data-raw-query.d.ts","sourceRoot":"","sources":["../../../../src/nodes/data/data-raw-query.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAmB,MAAM,UAAU,CAAA;AA8ChE,eAAO,MAAM,YAAY,EAAE,oBAM1B,CAAA"}
1
+ {"version":3,"file":"data-raw-query.d.ts","sourceRoot":"","sources":["../../../../src/nodes/data/data-raw-query.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAmB,MAAM,UAAU,CAAA;AAwDhE,eAAO,MAAM,YAAY,EAAE,oBAM1B,CAAA"}
@@ -28,7 +28,17 @@ async function data_raw_query(config, context) {
28
28
  });
29
29
  const data = await response.json();
30
30
  if (!response.ok) {
31
- return { rows: [], result: [], error: data.error || 'Raw query failed' };
31
+ const failure = {
32
+ rows: [],
33
+ result: [],
34
+ error: data.error || 'Raw query failed',
35
+ };
36
+ // The database's SQLSTATE (the route keeps its message in the server log): a
37
+ // statement that raises on purpose is told apart from a broken one by it.
38
+ if (data.code) {
39
+ failure.code = data.code;
40
+ }
41
+ return failure;
32
42
  }
33
43
  const rows = data.rows || [];
34
44
  return { rows, result: rows };
@@ -1 +1 @@
1
- {"version":3,"file":"data-raw-query.js","sourceRoot":"","sources":["../../../../src/nodes/data/data-raw-query.ts"],"names":[],"mappings":"AAAA,OAAO,EAAwB,eAAe,EAAE,MAAM,UAAU,CAAA;AAEhE,KAAK,UAAU,cAAc,CAAC,MAAW,EAAE,OAAY;IACrD,MAAM,YAAY,GAAG,MAAM,CAAC,YAAY,CAAA;IACxC,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAA;IAC1B,4EAA4E;IAC5E,+EAA+E;IAC/E,2EAA2E;IAC3E,gFAAgF;IAChF,yEAAyE;IACzE,MAAM,MAAM,GAAG,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAA;IAChE,MAAM,OAAO,GAAG,CAAC,OAAO,IAAI,OAAO,CAAC,SAAS,CAAC,IAAI,EAAE,CAAA;IAEpD,yEAAyE;IACzE,uEAAuE;IACvE,oEAAoE;IACpE,sEAAsE;IACtE,gEAAgE;IAChE,MAAM,iBAAiB,GAAG,CAAC,OAAO,IAAI,OAAO,CAAC,iBAAiB,CAAC,IAAI,EAAE,CAAA;IACtE,MAAM,KAAK,GAAI,UAAkB,CAAC,OAAO,IAAK,UAAkB,CAAC,OAAO,CAAC,GAAG,CAAA;IAE5E,IAAI;QACF,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,OAAO,GAAG,YAAY,GAAG,YAAY,GAAG,YAAY,EAAE;YACjF,MAAM,EAAE,MAAM;YACd,OAAO,kBACL,cAAc,EAAE,kBAAkB;gBAClC,yEAAyE;gBACzE,kEAAkE;gBAClE,8DAA8D;gBAC9D,wBAAwB,EAAE,CAAC,KAAK,IAAI,KAAK,CAAC,eAAe,CAAC,IAAI,EAAE,IAC7D,iBAAiB,CACrB;YACD,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC;SACxC,CAAC,CAAA;QAEF,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAA;QAElC,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE;YAChB,OAAO,EAAE,IAAI,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,IAAI,kBAAkB,EAAE,CAAA;SACzE;QACD,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,IAAI,EAAE,CAAA;QAC5B,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,CAAA;KAC9B;IAAC,OAAO,GAAY,EAAE;QACrB,OAAO,EAAE,IAAI,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,KAAK,EAAG,GAAa,CAAC,OAAO,EAAE,CAAA;KAC/D;AACH,CAAC;AACD,MAAM,CAAC,MAAM,YAAY,GAAyB;IAChD,QAAQ,EAAE,gBAAgB;IAC1B,YAAY,EAAE,QAAQ;IACtB,eAAe;QACb,OAAO,eAAe,CAAC,cAAc,CAAC,CAAA;IACxC,CAAC;CACF,CAAA"}
1
+ {"version":3,"file":"data-raw-query.js","sourceRoot":"","sources":["../../../../src/nodes/data/data-raw-query.ts"],"names":[],"mappings":"AAAA,OAAO,EAAwB,eAAe,EAAE,MAAM,UAAU,CAAA;AAEhE,KAAK,UAAU,cAAc,CAAC,MAAW,EAAE,OAAY;IACrD,MAAM,YAAY,GAAG,MAAM,CAAC,YAAY,CAAA;IACxC,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAA;IAC1B,4EAA4E;IAC5E,+EAA+E;IAC/E,2EAA2E;IAC3E,gFAAgF;IAChF,yEAAyE;IACzE,MAAM,MAAM,GAAG,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAA;IAChE,MAAM,OAAO,GAAG,CAAC,OAAO,IAAI,OAAO,CAAC,SAAS,CAAC,IAAI,EAAE,CAAA;IAEpD,yEAAyE;IACzE,uEAAuE;IACvE,oEAAoE;IACpE,sEAAsE;IACtE,gEAAgE;IAChE,MAAM,iBAAiB,GAAG,CAAC,OAAO,IAAI,OAAO,CAAC,iBAAiB,CAAC,IAAI,EAAE,CAAA;IACtE,MAAM,KAAK,GAAI,UAAkB,CAAC,OAAO,IAAK,UAAkB,CAAC,OAAO,CAAC,GAAG,CAAA;IAE5E,IAAI;QACF,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,OAAO,GAAG,YAAY,GAAG,YAAY,GAAG,YAAY,EAAE;YACjF,MAAM,EAAE,MAAM;YACd,OAAO,kBACL,cAAc,EAAE,kBAAkB;gBAClC,yEAAyE;gBACzE,kEAAkE;gBAClE,8DAA8D;gBAC9D,wBAAwB,EAAE,CAAC,KAAK,IAAI,KAAK,CAAC,eAAe,CAAC,IAAI,EAAE,IAC7D,iBAAiB,CACrB;YACD,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC;SACxC,CAAC,CAAA;QAEF,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAA;QAElC,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE;YAChB,MAAM,OAAO,GAA4B;gBACvC,IAAI,EAAE,EAAE;gBACR,MAAM,EAAE,EAAE;gBACV,KAAK,EAAE,IAAI,CAAC,KAAK,IAAI,kBAAkB;aACxC,CAAA;YACD,6EAA6E;YAC7E,0EAA0E;YAC1E,IAAI,IAAI,CAAC,IAAI,EAAE;gBACb,OAAO,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,CAAA;aACzB;YACD,OAAO,OAAO,CAAA;SACf;QACD,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,IAAI,EAAE,CAAA;QAC5B,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,CAAA;KAC9B;IAAC,OAAO,GAAY,EAAE;QACrB,OAAO,EAAE,IAAI,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,KAAK,EAAG,GAAa,CAAC,OAAO,EAAE,CAAA;KAC/D;AACH,CAAC;AACD,MAAM,CAAC,MAAM,YAAY,GAAyB;IAChD,QAAQ,EAAE,gBAAgB;IAC1B,YAAY,EAAE,QAAQ;IACtB,eAAe;QACb,OAAO,eAAe,CAAC,cAAc,CAAC,CAAA;IACxC,CAAC;CACF,CAAA"}