@hartl-services/medusa-base 0.4.0 → 1.0.0

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 (235) hide show
  1. package/.medusa/server/src/admin/index.js +1517 -87
  2. package/.medusa/server/src/admin/index.mjs +1518 -88
  3. package/.medusa/server/src/api/admin/email/messages/[id]/resends/route.js +24 -0
  4. package/.medusa/server/src/api/admin/email/messages/[id]/route.js +12 -0
  5. package/.medusa/server/src/api/admin/email/messages/route.js +12 -0
  6. package/.medusa/server/src/api/admin/email/terms-versions/[id]/download/route.js +16 -0
  7. package/.medusa/server/src/api/admin/email/terms-versions/route.js +47 -0
  8. package/.medusa/server/src/api/admin/orders/[id]/documents/[document_id]/download/route.js +21 -0
  9. package/.medusa/server/src/api/admin/orders/[id]/documents/[document_id]/regenerate/route.js +38 -0
  10. package/.medusa/server/src/api/admin/orders/[id]/documents/regenerate/route.js +32 -0
  11. package/.medusa/server/src/api/admin/orders/[id]/documents/route.js +36 -0
  12. package/.medusa/server/src/api/admin/orders/[id]/packing-lists/[fulfillment_id]/download/route.js +24 -0
  13. package/.medusa/server/src/api/admin/orders/[id]/packing-lists/[fulfillment_id]/retry/route.js +44 -0
  14. package/.medusa/server/src/api/admin/orders/[id]/packing-lists/route.js +82 -0
  15. package/.medusa/server/src/api/document-download-response.js +16 -0
  16. package/.medusa/server/src/api/document-response.js +23 -0
  17. package/.medusa/server/src/api/files/[asset]/route.js +24 -0
  18. package/.medusa/server/src/api/files/file-response.js +43 -0
  19. package/.medusa/server/src/api/files/gateway-options.js +31 -0
  20. package/.medusa/server/src/api/files/private/[token]/route.js +29 -0
  21. package/.medusa/server/src/api/files/upload/[token]/route.js +66 -0
  22. package/.medusa/server/src/api/middlewares.js +168 -1
  23. package/.medusa/server/src/api/packing-list-response.js +22 -0
  24. package/.medusa/server/src/api/route.js +27 -0
  25. package/.medusa/server/src/api/store/documents/[id]/download/route.js +21 -0
  26. package/.medusa/server/src/api/store/documents/[id]/route.js +15 -0
  27. package/.medusa/server/src/api/store/documents/route.js +11 -0
  28. package/.medusa/server/src/api/terms-download-response.js +12 -0
  29. package/.medusa/server/src/documents/config/index.js +18 -0
  30. package/.medusa/server/src/documents/paths/documents.js +6 -0
  31. package/.medusa/server/src/documents/paths/index.js +18 -0
  32. package/.medusa/server/src/documents/plugin-features.js +24 -0
  33. package/.medusa/server/src/documents/schemas/documents.js +18 -0
  34. package/.medusa/server/src/documents/schemas/index.js +18 -0
  35. package/.medusa/server/src/documents/scripts/verify-documents-file-storage.js +55 -0
  36. package/.medusa/server/src/documents/templates/financial-document.js +142 -0
  37. package/.medusa/server/src/documents/templates/format.js +31 -0
  38. package/.medusa/server/src/documents/templates/html-factory.js +40 -0
  39. package/.medusa/server/src/documents/templates/html-utils.js +13 -0
  40. package/.medusa/server/src/documents/templates/layout.js +97 -0
  41. package/.medusa/server/src/documents/templates/packing-list.js +50 -0
  42. package/.medusa/server/src/documents/types/admin-api.js +3 -0
  43. package/.medusa/server/src/documents/types/document-summary.js +3 -0
  44. package/.medusa/server/src/documents/types/documents.js +3 -0
  45. package/.medusa/server/src/documents/types/html-factory.js +6 -0
  46. package/.medusa/server/src/documents/types/index.js +22 -0
  47. package/.medusa/server/src/documents/types/store-api.js +3 -0
  48. package/.medusa/server/src/documents/utils/document-merchant.js +22 -0
  49. package/.medusa/server/src/documents/utils/html-to-pdf.js +61 -0
  50. package/.medusa/server/src/documents/utils/private-file-storage.js +64 -0
  51. package/.medusa/server/src/documents/utils/resolve-services.js +7 -0
  52. package/.medusa/server/src/email/application/handle-invite-event.js +312 -0
  53. package/.medusa/server/src/email/application/handle-password-reset-event.js +354 -0
  54. package/.medusa/server/src/email/config/index.js +84 -0
  55. package/.medusa/server/src/email/config/notification-module.js +20 -0
  56. package/.medusa/server/src/email/domain/business-keys.js +50 -0
  57. package/.medusa/server/src/email/domain/documents-fact-fingerprint.js +7 -0
  58. package/.medusa/server/src/email/domain/event-schemas.js +36 -0
  59. package/.medusa/server/src/email/domain/failure-classification.js +53 -0
  60. package/.medusa/server/src/email/plugin-features.js +31 -0
  61. package/.medusa/server/src/email/rendering/default-templates.js +91 -0
  62. package/.medusa/server/src/email/rendering/render-email.js +37 -0
  63. package/.medusa/server/src/email/rendering/resolve-shop-configuration.js +48 -0
  64. package/.medusa/server/src/email/types/email-kinds.js +18 -0
  65. package/.medusa/server/src/email/types/index.js +21 -0
  66. package/.medusa/server/src/email/types/shop-configuration.js +3 -0
  67. package/.medusa/server/src/email/types/smtp-configuration.js +3 -0
  68. package/.medusa/server/src/email/types/template-data.js +79 -0
  69. package/.medusa/server/src/files/config/index.js +256 -0
  70. package/.medusa/server/src/files/gateway/index.js +115 -0
  71. package/.medusa/server/src/files/types/index.js +6 -0
  72. package/.medusa/server/src/files/types/public.js +6 -0
  73. package/.medusa/server/src/jobs/document-fact-publication-reconciliation.js +18 -0
  74. package/.medusa/server/src/jobs/document-resolution-reconciliation.js +20 -0
  75. package/.medusa/server/src/jobs/packing-list-reconciliation.js +49 -0
  76. package/.medusa/server/src/jobs/reconcile-email-attempts.js +63 -0
  77. package/.medusa/server/src/jobs/reconcile-pending-email-messages.js +41 -0
  78. package/.medusa/server/src/jobs/retry-email-messages.js +27 -0
  79. package/.medusa/server/src/migration-scripts/dismiss-orphaned-cart-promotion-links.js +26 -0
  80. package/.medusa/server/src/modules/documents/domain/cancellation-snapshot.js +97 -0
  81. package/.medusa/server/src/modules/documents/domain/document-number.js +36 -0
  82. package/.medusa/server/src/modules/documents/domain/document-resolution.js +24 -0
  83. package/.medusa/server/src/modules/documents/domain/issuance-rules.js +37 -0
  84. package/.medusa/server/src/modules/documents/domain/merchant.js +86 -0
  85. package/.medusa/server/src/modules/documents/domain/options.js +40 -0
  86. package/.medusa/server/src/modules/documents/domain/packing-list.js +90 -0
  87. package/.medusa/server/src/modules/documents/domain/snapshot-normalization.js +17 -0
  88. package/.medusa/server/src/modules/documents/domain/tax-breakdown.js +66 -0
  89. package/.medusa/server/src/modules/documents/index.js +15 -0
  90. package/.medusa/server/src/modules/documents/loaders/assert-private-file-storage.js +20 -0
  91. package/.medusa/server/src/modules/documents/migrations/Migration20260827061749.js +75 -0
  92. package/.medusa/server/src/modules/documents/migrations/Migration20260830111207.js +28 -0
  93. package/.medusa/server/src/modules/documents/models/document-artifact.js +25 -0
  94. package/.medusa/server/src/modules/documents/models/document-number-sequence.js +29 -0
  95. package/.medusa/server/src/modules/documents/models/document.js +82 -0
  96. package/.medusa/server/src/modules/documents/models/order-cancellation-resolution.js +51 -0
  97. package/.medusa/server/src/modules/documents/models/packing-list-revision.js +36 -0
  98. package/.medusa/server/src/modules/documents/models/packing-list.js +27 -0
  99. package/.medusa/server/src/modules/documents/models/refund-document-resolution.js +66 -0
  100. package/.medusa/server/src/modules/documents/models/shipment-invoice-assignment.js +51 -0
  101. package/.medusa/server/src/modules/documents/models/shipment-invoice-coordinator.js +44 -0
  102. package/.medusa/server/src/modules/documents/service.js +1701 -0
  103. package/.medusa/server/src/modules/email/domain/attachment.js +25 -0
  104. package/.medusa/server/src/modules/email/domain/message-state.js +69 -0
  105. package/.medusa/server/src/modules/email/index.js +13 -0
  106. package/.medusa/server/src/modules/email/migrations/Migration20260826173422.js +32 -0
  107. package/.medusa/server/src/modules/email/migrations/Migration20260827172945.js +16 -0
  108. package/.medusa/server/src/modules/email/migrations/Migration20260827194804.js +22 -0
  109. package/.medusa/server/src/modules/email/migrations/Migration20260906195205.js +16 -0
  110. package/.medusa/server/src/modules/email/models/email-attempt.js +56 -0
  111. package/.medusa/server/src/modules/email/models/email-message.js +71 -0
  112. package/.medusa/server/src/modules/email/models/email-terms-version.js +37 -0
  113. package/.medusa/server/src/modules/email/service.js +1285 -0
  114. package/.medusa/server/src/providers/s3-cache/cache/atomic-write.js +25 -0
  115. package/.medusa/server/src/providers/s3-cache/cache/cache-manager.js +115 -0
  116. package/.medusa/server/src/providers/s3-cache/cache/keyed-lock.js +28 -0
  117. package/.medusa/server/src/providers/s3-cache/index.js +8 -0
  118. package/.medusa/server/src/providers/s3-cache/object-key.js +53 -0
  119. package/.medusa/server/src/providers/s3-cache/s3-cache-file.js +229 -0
  120. package/.medusa/server/src/providers/s3-cache/s3-object-store.js +86 -0
  121. package/.medusa/server/src/providers/smtp/index.js +8 -0
  122. package/.medusa/server/src/providers/smtp/service.js +236 -0
  123. package/.medusa/server/src/providers/smtp/types.js +11 -0
  124. package/.medusa/server/src/public/config.js +186 -0
  125. package/.medusa/server/src/public/gateway.js +19 -0
  126. package/.medusa/server/src/public/instrumentation.js +56 -0
  127. package/.medusa/server/src/public/shop-config.js +12 -0
  128. package/.medusa/server/src/public/shop-types.js +24 -0
  129. package/.medusa/server/src/shop-config/build-food-shop-config.js +248 -0
  130. package/.medusa/server/src/shop-config/options.js +71 -0
  131. package/.medusa/server/src/subscribers/affiliate-consignment-reminder-due.js +26 -0
  132. package/.medusa/server/src/subscribers/documents-order-canceled.js +24 -0
  133. package/.medusa/server/src/subscribers/documents-order-cancellation-ready.js +26 -0
  134. package/.medusa/server/src/subscribers/documents-refund-ready.js +24 -0
  135. package/.medusa/server/src/subscribers/documents-shipment-created.js +36 -0
  136. package/.medusa/server/src/subscribers/documents-shipment-invoice-assignment-decided.js +26 -0
  137. package/.medusa/server/src/subscribers/email-order-canceled.js +28 -0
  138. package/.medusa/server/src/subscribers/email-shipment-created.js +32 -0
  139. package/.medusa/server/src/subscribers/order-placed.js +27 -0
  140. package/.medusa/server/src/subscribers/packing-list-allocation-revised.js +32 -0
  141. package/.medusa/server/src/subscribers/packing-list-fulfillment-canceled.js +54 -0
  142. package/.medusa/server/src/subscribers/packing-list-fulfillment-created.js +31 -0
  143. package/.medusa/server/src/subscribers/password-reset.js +23 -0
  144. package/.medusa/server/src/subscribers/payment-refunded.js +38 -0
  145. package/.medusa/server/src/subscribers/return-received.js +27 -0
  146. package/.medusa/server/src/subscribers/return-requested.js +27 -0
  147. package/.medusa/server/src/subscribers/user-invite.js +23 -0
  148. package/.medusa/server/src/utils/cart-promotion-links.js +101 -0
  149. package/.medusa/server/src/workflows/documents/issue-cancellation-after-refund.js +246 -0
  150. package/.medusa/server/src/workflows/documents/issue-document.js +163 -0
  151. package/.medusa/server/src/workflows/documents/issue-invoice-after-shipment.js +521 -0
  152. package/.medusa/server/src/workflows/documents/issue-packing-list.js +384 -0
  153. package/.medusa/server/src/workflows/documents/publish-document-facts.js +53 -0
  154. package/.medusa/server/src/workflows/documents/reconcile-document-resolutions.js +48 -0
  155. package/.medusa/server/src/workflows/documents/reconcile-order-cancellation.js +92 -0
  156. package/.medusa/server/src/workflows/documents/regenerate-issued-document.js +61 -0
  157. package/.medusa/server/src/workflows/email/dispatch-email-message.js +299 -0
  158. package/.medusa/server/src/workflows/email/documents-required-facts.js +30 -0
  159. package/.medusa/server/src/workflows/email/prepare-affiliate-reminder-email.js +58 -0
  160. package/.medusa/server/src/workflows/email/prepare-order-canceled-email.js +64 -0
  161. package/.medusa/server/src/workflows/email/prepare-order-received-email.js +56 -0
  162. package/.medusa/server/src/workflows/email/prepare-refund-email.js +47 -0
  163. package/.medusa/server/src/workflows/email/prepare-return-email.js +75 -0
  164. package/.medusa/server/src/workflows/email/prepare-shipment-email.js +82 -0
  165. package/.medusa/server/src/workflows/email/retry-email-messages.js +31 -0
  166. package/.medusa/server/src/workflows/hooks/dismiss-deleted-promotion-cart-links.js +23 -0
  167. package/README.md +1619 -7
  168. package/dist/documents/config/index.d.ts +11 -0
  169. package/dist/documents/config/index.js +17 -0
  170. package/dist/documents/templates/financial-document.d.ts +3 -0
  171. package/dist/documents/templates/financial-document.js +141 -0
  172. package/dist/documents/templates/format.d.ts +16 -0
  173. package/dist/documents/templates/format.js +30 -0
  174. package/dist/documents/templates/html-factory.d.ts +11 -0
  175. package/dist/documents/templates/html-factory.js +39 -0
  176. package/dist/documents/templates/html-utils.d.ts +2 -0
  177. package/dist/documents/templates/html-utils.js +12 -0
  178. package/dist/documents/templates/layout.d.ts +17 -0
  179. package/dist/documents/templates/layout.js +96 -0
  180. package/dist/documents/templates/packing-list.d.ts +3 -0
  181. package/dist/documents/templates/packing-list.js +49 -0
  182. package/dist/documents/types/admin-api.d.ts +1 -0
  183. package/dist/documents/types/admin-api.js +2 -0
  184. package/dist/documents/types/document-summary.d.ts +1 -0
  185. package/dist/documents/types/document-summary.js +2 -0
  186. package/dist/documents/types/documents.d.ts +174 -0
  187. package/dist/documents/types/documents.js +2 -0
  188. package/dist/documents/types/html-factory.d.ts +7 -0
  189. package/dist/documents/types/html-factory.js +5 -0
  190. package/dist/documents/types/index.d.ts +5 -0
  191. package/dist/documents/types/index.js +21 -0
  192. package/dist/documents/types/store-api.d.ts +1 -0
  193. package/dist/documents/types/store-api.js +2 -0
  194. package/dist/email/config/index.d.ts +17 -0
  195. package/dist/email/config/index.js +83 -0
  196. package/dist/email/config/notification-module.d.ts +22 -0
  197. package/dist/email/config/notification-module.js +19 -0
  198. package/dist/email/types/email-kinds.d.ts +15 -0
  199. package/dist/email/types/email-kinds.js +17 -0
  200. package/dist/email/types/index.d.ts +4 -0
  201. package/dist/email/types/index.js +20 -0
  202. package/dist/email/types/shop-configuration.d.ts +43 -0
  203. package/dist/email/types/shop-configuration.js +2 -0
  204. package/dist/email/types/smtp-configuration.d.ts +9 -0
  205. package/dist/email/types/smtp-configuration.js +2 -0
  206. package/dist/email/types/template-data.d.ts +100 -0
  207. package/dist/email/types/template-data.js +78 -0
  208. package/dist/files/config/index.d.ts +32 -0
  209. package/dist/files/config/index.js +255 -0
  210. package/dist/files/gateway/index.d.ts +30 -0
  211. package/dist/files/gateway/index.js +114 -0
  212. package/dist/files/types/index.d.ts +2 -0
  213. package/dist/files/types/index.js +5 -0
  214. package/dist/files/types/public.d.ts +90 -0
  215. package/dist/files/types/public.js +5 -0
  216. package/dist/modules/documents/domain/merchant.d.ts +22 -0
  217. package/dist/modules/documents/domain/merchant.js +85 -0
  218. package/dist/modules/documents/domain/options.d.ts +34 -0
  219. package/dist/modules/documents/domain/options.js +39 -0
  220. package/dist/public/config.d.ts +59 -0
  221. package/dist/public/config.js +185 -0
  222. package/dist/public/gateway.d.ts +2 -0
  223. package/dist/public/gateway.js +18 -0
  224. package/dist/public/instrumentation.d.ts +12 -0
  225. package/dist/public/instrumentation.js +55 -0
  226. package/dist/public/shop-config.d.ts +8 -0
  227. package/dist/public/shop-config.js +11 -0
  228. package/dist/public/shop-types.d.ts +7 -0
  229. package/dist/public/shop-types.js +23 -0
  230. package/dist/public/types.d.ts +17 -1
  231. package/dist/shop-config/build-food-shop-config.d.ts +44 -0
  232. package/dist/shop-config/build-food-shop-config.js +247 -0
  233. package/dist/shop-config/options.d.ts +41 -0
  234. package/dist/shop-config/options.js +70 -0
  235. package/package.json +48 -5
@@ -0,0 +1,25 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.emailAttachmentId = exports.EmailAttachmentSchema = exports.EmailTermsAttachmentSchema = void 0;
4
+ const zod_1 = require("@medusajs/framework/zod");
5
+ const documents_1 = require("@hartl-services/medusa-food-supplements-contracts/events/documents");
6
+ exports.EmailTermsAttachmentSchema = zod_1.z
7
+ .object({
8
+ source: zod_1.z.literal("terms"),
9
+ terms_version_id: zod_1.z.string().min(1),
10
+ file_id: zod_1.z.string().min(1),
11
+ filename: zod_1.z.string().min(1),
12
+ content_type: zod_1.z.literal("application/pdf"),
13
+ byte_size: zod_1.z.number().int().positive(),
14
+ sha256: zod_1.z.string().regex(/^[0-9a-f]{64}$/),
15
+ })
16
+ .strict();
17
+ exports.EmailAttachmentSchema = zod_1.z.union([
18
+ documents_1.DocumentsEmailArtifactSchema,
19
+ exports.EmailTermsAttachmentSchema,
20
+ ]);
21
+ const emailAttachmentId = (attachment) => "source" in attachment
22
+ ? `terms:${attachment.terms_version_id}`
23
+ : attachment.artifact_id;
24
+ exports.emailAttachmentId = emailAttachmentId;
25
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXR0YWNobWVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9tb2R1bGVzL2VtYWlsL2RvbWFpbi9hdHRhY2htZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLGlEQUE0QztBQUM1QyxrR0FHNEU7QUFFL0QsUUFBQSwwQkFBMEIsR0FBRyxPQUFDO0tBQ3hDLE1BQU0sQ0FBQztJQUNOLE1BQU0sRUFBRSxPQUFDLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQztJQUMxQixnQkFBZ0IsRUFBRSxPQUFDLENBQUMsTUFBTSxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztJQUNuQyxPQUFPLEVBQUUsT0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFDMUIsUUFBUSxFQUFFLE9BQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQzNCLFlBQVksRUFBRSxPQUFDLENBQUMsT0FBTyxDQUFDLGlCQUFpQixDQUFDO0lBQzFDLFNBQVMsRUFBRSxPQUFDLENBQUMsTUFBTSxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUMsUUFBUSxFQUFFO0lBQ3RDLE1BQU0sRUFBRSxPQUFDLENBQUMsTUFBTSxFQUFFLENBQUMsS0FBSyxDQUFDLGdCQUFnQixDQUFDO0NBQzNDLENBQUM7S0FDRCxNQUFNLEVBQUUsQ0FBQztBQUVDLFFBQUEscUJBQXFCLEdBQUcsT0FBQyxDQUFDLEtBQUssQ0FBQztJQUMzQyx3Q0FBNEI7SUFDNUIsa0NBQTBCO0NBQzNCLENBQUMsQ0FBQztBQUtJLE1BQU0saUJBQWlCLEdBQUcsQ0FBQyxVQUEyQixFQUFVLEVBQUUsQ0FDdkUsUUFBUSxJQUFJLFVBQVU7SUFDcEIsQ0FBQyxDQUFDLFNBQVMsVUFBVSxDQUFDLGdCQUFnQixFQUFFO0lBQ3hDLENBQUMsQ0FBQyxVQUFVLENBQUMsV0FBVyxDQUFDO0FBSGhCLFFBQUEsaUJBQWlCLHFCQUdEIn0=
@@ -0,0 +1,69 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.statusAfterPredecessor = exports.isTerminalMessageStatus = exports.hasRequiredFacts = exports.canonicalizeFacts = exports.isEmailSafeStatusCode = exports.EMAIL_SAFE_STATUS_CODES = exports.EMAIL_ATTEMPT_STATUSES = exports.EMAIL_MESSAGE_STATUSES = void 0;
4
+ exports.EMAIL_MESSAGE_STATUSES = [
5
+ "pending",
6
+ "ready",
7
+ "sending",
8
+ "retry_pending",
9
+ "sent",
10
+ "failed",
11
+ "unknown",
12
+ "suppressed",
13
+ ];
14
+ exports.EMAIL_ATTEMPT_STATUSES = [
15
+ "processing",
16
+ "sent",
17
+ "failed",
18
+ "unknown",
19
+ ];
20
+ exports.EMAIL_SAFE_STATUS_CODES = [
21
+ "attachment_invalid",
22
+ "attachment_unavailable",
23
+ "attempt_lease_lost",
24
+ "connection_failed",
25
+ "invalid_content",
26
+ "lease_expired",
27
+ "notifications_disabled",
28
+ "outcome_unknown",
29
+ "payload_expired",
30
+ "password_reset_requires_ephemeral_context",
31
+ "permanent_rejection",
32
+ "predecessor_failed",
33
+ "predecessor_suppressed",
34
+ "recipient_invalid",
35
+ "render_failed",
36
+ "resource_unavailable",
37
+ "retry_exhausted",
38
+ "template_data_invalid",
39
+ "temporary_rejection",
40
+ ];
41
+ const isEmailSafeStatusCode = (value) => typeof value === "string" &&
42
+ exports.EMAIL_SAFE_STATUS_CODES.includes(value);
43
+ exports.isEmailSafeStatusCode = isEmailSafeStatusCode;
44
+ const canonicalizeFacts = (facts) => [...new Set(facts.map((fact) => fact.trim()).filter(Boolean))].sort((left, right) => left.localeCompare(right));
45
+ exports.canonicalizeFacts = canonicalizeFacts;
46
+ const hasRequiredFacts = (requiredFacts, receivedFacts) => {
47
+ const received = new Set(receivedFacts);
48
+ return requiredFacts.every((fact) => received.has(fact));
49
+ };
50
+ exports.hasRequiredFacts = hasRequiredFacts;
51
+ const isTerminalMessageStatus = (status) => status === "sent" ||
52
+ status === "failed" ||
53
+ status === "unknown" ||
54
+ status === "suppressed";
55
+ exports.isTerminalMessageStatus = isTerminalMessageStatus;
56
+ const statusAfterPredecessor = (predecessorStatus) => {
57
+ if (predecessorStatus === null || predecessorStatus === "sent") {
58
+ return { status: "ready", terminal_code: null };
59
+ }
60
+ if (predecessorStatus === "suppressed") {
61
+ return { status: "suppressed", terminal_code: "predecessor_suppressed" };
62
+ }
63
+ if (predecessorStatus === "failed" || predecessorStatus === "unknown") {
64
+ return { status: "failed", terminal_code: "predecessor_failed" };
65
+ }
66
+ return { status: "pending", terminal_code: null };
67
+ };
68
+ exports.statusAfterPredecessor = statusAfterPredecessor;
69
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVzc2FnZS1zdGF0ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9tb2R1bGVzL2VtYWlsL2RvbWFpbi9tZXNzYWdlLXN0YXRlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFhLFFBQUEsc0JBQXNCLEdBQUc7SUFDcEMsU0FBUztJQUNULE9BQU87SUFDUCxTQUFTO0lBQ1QsZUFBZTtJQUNmLE1BQU07SUFDTixRQUFRO0lBQ1IsU0FBUztJQUNULFlBQVk7Q0FDSixDQUFDO0FBRUUsUUFBQSxzQkFBc0IsR0FBRztJQUNwQyxZQUFZO0lBQ1osTUFBTTtJQUNOLFFBQVE7SUFDUixTQUFTO0NBQ0QsQ0FBQztBQUtFLFFBQUEsdUJBQXVCLEdBQUc7SUFDckMsb0JBQW9CO0lBQ3BCLHdCQUF3QjtJQUN4QixvQkFBb0I7SUFDcEIsbUJBQW1CO0lBQ25CLGlCQUFpQjtJQUNqQixlQUFlO0lBQ2Ysd0JBQXdCO0lBQ3hCLGlCQUFpQjtJQUNqQixpQkFBaUI7SUFDakIsMkNBQTJDO0lBQzNDLHFCQUFxQjtJQUNyQixvQkFBb0I7SUFDcEIsd0JBQXdCO0lBQ3hCLG1CQUFtQjtJQUNuQixlQUFlO0lBQ2Ysc0JBQXNCO0lBQ3RCLGlCQUFpQjtJQUNqQix1QkFBdUI7SUFDdkIscUJBQXFCO0NBQ2IsQ0FBQztBQUlKLE1BQU0scUJBQXFCLEdBQUcsQ0FDbkMsS0FBYyxFQUNnQixFQUFFLENBQ2hDLE9BQU8sS0FBSyxLQUFLLFFBQVE7SUFDeEIsK0JBQTZDLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBSnBELFFBQUEscUJBQXFCLHlCQUkrQjtBQUUxRCxNQUFNLGlCQUFpQixHQUFHLENBQUMsS0FBd0IsRUFBWSxFQUFFLENBQ3RFLENBQUMsR0FBRyxJQUFJLEdBQUcsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FDakUsQ0FBQyxJQUFJLEVBQUUsS0FBSyxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxDQUMzQyxDQUFDO0FBSFMsUUFBQSxpQkFBaUIscUJBRzFCO0FBRUcsTUFBTSxnQkFBZ0IsR0FBRyxDQUM5QixhQUFnQyxFQUNoQyxhQUFnQyxFQUN2QixFQUFFO0lBQ1gsTUFBTSxRQUFRLEdBQUcsSUFBSSxHQUFHLENBQUMsYUFBYSxDQUFDLENBQUM7SUFDeEMsT0FBTyxhQUFhLENBQUMsS0FBSyxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7QUFDM0QsQ0FBQyxDQUFDO0FBTlcsUUFBQSxnQkFBZ0Isb0JBTTNCO0FBRUssTUFBTSx1QkFBdUIsR0FBRyxDQUFDLE1BQTBCLEVBQVcsRUFBRSxDQUM3RSxNQUFNLEtBQUssTUFBTTtJQUNqQixNQUFNLEtBQUssUUFBUTtJQUNuQixNQUFNLEtBQUssU0FBUztJQUNwQixNQUFNLEtBQUssWUFBWSxDQUFDO0FBSmIsUUFBQSx1QkFBdUIsMkJBSVY7QUFFbkIsTUFBTSxzQkFBc0IsR0FBRyxDQUNwQyxpQkFBNEMsRUFJM0MsRUFBRTtJQUNILElBQUksaUJBQWlCLEtBQUssSUFBSSxJQUFJLGlCQUFpQixLQUFLLE1BQU0sRUFBRSxDQUFDO1FBQy9ELE9BQU8sRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLGFBQWEsRUFBRSxJQUFJLEVBQUUsQ0FBQztJQUNsRCxDQUFDO0lBQ0QsSUFBSSxpQkFBaUIsS0FBSyxZQUFZLEVBQUUsQ0FBQztRQUN2QyxPQUFPLEVBQUUsTUFBTSxFQUFFLFlBQVksRUFBRSxhQUFhLEVBQUUsd0JBQXdCLEVBQUUsQ0FBQztJQUMzRSxDQUFDO0lBQ0QsSUFBSSxpQkFBaUIsS0FBSyxRQUFRLElBQUksaUJBQWlCLEtBQUssU0FBUyxFQUFFLENBQUM7UUFDdEUsT0FBTyxFQUFFLE1BQU0sRUFBRSxRQUFRLEVBQUUsYUFBYSxFQUFFLG9CQUFvQixFQUFFLENBQUM7SUFDbkUsQ0FBQztJQUNELE9BQU8sRUFBRSxNQUFNLEVBQUUsU0FBUyxFQUFFLGFBQWEsRUFBRSxJQUFJLEVBQUUsQ0FBQztBQUNwRCxDQUFDLENBQUM7QUFoQlcsUUFBQSxzQkFBc0IsMEJBZ0JqQyJ9
@@ -0,0 +1,13 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.EMAIL_MODULE = void 0;
7
+ const utils_1 = require("@medusajs/framework/utils");
8
+ const service_1 = __importDefault(require("./service"));
9
+ exports.EMAIL_MODULE = "email";
10
+ exports.default = (0, utils_1.Module)(exports.EMAIL_MODULE, {
11
+ service: service_1.default,
12
+ });
13
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvbW9kdWxlcy9lbWFpbC9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7QUFBQSxxREFBbUQ7QUFFbkQsd0RBQTJDO0FBRTlCLFFBQUEsWUFBWSxHQUFHLE9BQU8sQ0FBQztBQUVwQyxrQkFBZSxJQUFBLGNBQU0sRUFBQyxvQkFBWSxFQUFFO0lBQ2xDLE9BQU8sRUFBRSxpQkFBa0I7Q0FDNUIsQ0FBQyxDQUFDIn0=
@@ -0,0 +1,32 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.Migration20260826173422 = void 0;
4
+ const migrations_1 = require("@medusajs/framework/mikro-orm/migrations");
5
+ class Migration20260826173422 extends migrations_1.Migration {
6
+ async up() {
7
+ this.addSql(`alter table if exists "email_attempt" drop constraint if exists "email_attempt_message_number_unique";`);
8
+ this.addSql(`alter table if exists "email_message" drop constraint if exists "email_message_business_key_unique";`);
9
+ this.addSql(`create table if not exists "email_message" ("id" text not null, "kind" text check ("kind" in ('order.received', 'order.shipped', 'order.canceled', 'order.return_requested', 'order.return_received', 'order.refunded', 'auth.password_reset', 'affiliate.consignment_report_due')) not null, "business_key" text not null, "resource_type" text not null, "resource_id" text null, "recipient" text null, "template_data" jsonb null, "attachments" jsonb not null default '[]', "status" text check ("status" in ('pending', 'ready', 'sending', 'retry_pending', 'sent', 'failed', 'unknown', 'suppressed')) not null default 'pending', "required_facts" jsonb not null default '[]', "received_facts" jsonb not null default '[]', "predecessor_message_id" text null, "trigger" text not null default 'automatic', "request_id" text null, "requested_by_admin_id" text null, "original_message_id" text null, "next_attempt_at" timestamptz null, "sent_at" timestamptz null, "failed_at" timestamptz null, "payload_expires_at" timestamptz null, "terminal_code" text null, "created_at" timestamptz not null default now(), "updated_at" timestamptz not null default now(), "deleted_at" timestamptz null, constraint "email_message_pkey" primary key ("id"));`);
10
+ this.addSql(`CREATE INDEX IF NOT EXISTS "IDX_email_message_predecessor_message_id" ON "email_message" ("predecessor_message_id") WHERE deleted_at IS NULL;`);
11
+ this.addSql(`CREATE INDEX IF NOT EXISTS "IDX_email_message_deleted_at" ON "email_message" ("deleted_at") WHERE deleted_at IS NULL;`);
12
+ this.addSql(`CREATE UNIQUE INDEX IF NOT EXISTS "IDX_email_message_business_key_unique" ON "email_message" ("business_key");`);
13
+ this.addSql(`CREATE INDEX IF NOT EXISTS "IDX_email_message_resource" ON "email_message" ("resource_type", "resource_id") WHERE deleted_at IS NULL;`);
14
+ this.addSql(`CREATE INDEX IF NOT EXISTS "IDX_email_message_status_next_attempt_at" ON "email_message" ("status", "next_attempt_at") WHERE deleted_at IS NULL;`);
15
+ this.addSql(`CREATE INDEX IF NOT EXISTS "IDX_email_message_original_message_id" ON "email_message" ("original_message_id") WHERE deleted_at IS NULL AND original_message_id IS NOT NULL;`);
16
+ this.addSql(`create table if not exists "email_attempt" ("id" text not null, "message_id" text not null, "attempt_number" integer not null, "status" text check ("status" in ('processing', 'sent', 'failed', 'unknown')) not null default 'processing', "attempt_token" text null, "lease_started_at" timestamptz null, "lease_expires_at" timestamptz null, "notification_id" text null, "failure_code" text null, "started_at" timestamptz not null, "finished_at" timestamptz null, "created_at" timestamptz not null default now(), "updated_at" timestamptz not null default now(), "deleted_at" timestamptz null, constraint "email_attempt_pkey" primary key ("id"), constraint CHK_email_attempt_attempt_number_positive check (attempt_number > 0), constraint CHK_email_attempt_lease_order check (lease_started_at is null or lease_expires_at is null or lease_expires_at > lease_started_at), constraint CHK_email_attempt_state_fields check (((status = 'processing' and attempt_token is not null and lease_started_at is not null and lease_expires_at is not null and finished_at is null) or (status in ('sent', 'failed', 'unknown') and attempt_token is null and finished_at is not null))));`);
17
+ this.addSql(`CREATE INDEX IF NOT EXISTS "IDX_email_attempt_message_id" ON "email_attempt" ("message_id") WHERE deleted_at IS NULL;`);
18
+ this.addSql(`CREATE INDEX IF NOT EXISTS "IDX_email_attempt_deleted_at" ON "email_attempt" ("deleted_at") WHERE deleted_at IS NULL;`);
19
+ this.addSql(`CREATE UNIQUE INDEX IF NOT EXISTS "IDX_email_attempt_message_number_unique" ON "email_attempt" ("message_id", "attempt_number");`);
20
+ this.addSql(`CREATE INDEX IF NOT EXISTS "IDX_email_attempt_status_lease_expires_at" ON "email_attempt" ("status", "lease_expires_at") WHERE deleted_at IS NULL;`);
21
+ this.addSql(`alter table if exists "email_message" add constraint "email_message_predecessor_message_id_foreign" foreign key ("predecessor_message_id") references "email_message" ("id") on update cascade on delete set null;`);
22
+ this.addSql(`alter table if exists "email_attempt" add constraint "email_attempt_message_id_foreign" foreign key ("message_id") references "email_message" ("id") on update cascade;`);
23
+ }
24
+ async down() {
25
+ this.addSql(`alter table if exists "email_message" drop constraint if exists "email_message_predecessor_message_id_foreign";`);
26
+ this.addSql(`alter table if exists "email_attempt" drop constraint if exists "email_attempt_message_id_foreign";`);
27
+ this.addSql(`drop table if exists "email_message" cascade;`);
28
+ this.addSql(`drop table if exists "email_attempt" cascade;`);
29
+ }
30
+ }
31
+ exports.Migration20260826173422 = Migration20260826173422;
32
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTWlncmF0aW9uMjAyNjA4MjYxNzM0MjIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvbW9kdWxlcy9lbWFpbC9taWdyYXRpb25zL01pZ3JhdGlvbjIwMjYwODI2MTczNDIyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLHlFQUFxRTtBQUVyRSxNQUFhLHVCQUF3QixTQUFRLHNCQUFTO0lBQzNDLEtBQUssQ0FBQyxFQUFFO1FBQ2YsSUFBSSxDQUFDLE1BQU0sQ0FDVCx3R0FBd0csQ0FDekcsQ0FBQztRQUNGLElBQUksQ0FBQyxNQUFNLENBQ1Qsc0dBQXNHLENBQ3ZHLENBQUM7UUFDRixJQUFJLENBQUMsTUFBTSxDQUNULDRzQ0FBNHNDLENBQzdzQyxDQUFDO1FBQ0YsSUFBSSxDQUFDLE1BQU0sQ0FDVCwrSUFBK0ksQ0FDaEosQ0FBQztRQUNGLElBQUksQ0FBQyxNQUFNLENBQ1QsdUhBQXVILENBQ3hILENBQUM7UUFDRixJQUFJLENBQUMsTUFBTSxDQUNULGdIQUFnSCxDQUNqSCxDQUFDO1FBQ0YsSUFBSSxDQUFDLE1BQU0sQ0FDVCx1SUFBdUksQ0FDeEksQ0FBQztRQUNGLElBQUksQ0FBQyxNQUFNLENBQ1Qsa0pBQWtKLENBQ25KLENBQUM7UUFDRixJQUFJLENBQUMsTUFBTSxDQUNULDZLQUE2SyxDQUM5SyxDQUFDO1FBRUYsSUFBSSxDQUFDLE1BQU0sQ0FDVCx5b0NBQXlvQyxDQUMxb0MsQ0FBQztRQUNGLElBQUksQ0FBQyxNQUFNLENBQ1QsdUhBQXVILENBQ3hILENBQUM7UUFDRixJQUFJLENBQUMsTUFBTSxDQUNULHVIQUF1SCxDQUN4SCxDQUFDO1FBQ0YsSUFBSSxDQUFDLE1BQU0sQ0FDVCxrSUFBa0ksQ0FDbkksQ0FBQztRQUNGLElBQUksQ0FBQyxNQUFNLENBQ1Qsb0pBQW9KLENBQ3JKLENBQUM7UUFFRixJQUFJLENBQUMsTUFBTSxDQUNULG9OQUFvTixDQUNyTixDQUFDO1FBRUYsSUFBSSxDQUFDLE1BQU0sQ0FDVCx5S0FBeUssQ0FDMUssQ0FBQztJQUNKLENBQUM7SUFFUSxLQUFLLENBQUMsSUFBSTtRQUNqQixJQUFJLENBQUMsTUFBTSxDQUNULGlIQUFpSCxDQUNsSCxDQUFDO1FBRUYsSUFBSSxDQUFDLE1BQU0sQ0FDVCxxR0FBcUcsQ0FDdEcsQ0FBQztRQUVGLElBQUksQ0FBQyxNQUFNLENBQUMsK0NBQStDLENBQUMsQ0FBQztRQUU3RCxJQUFJLENBQUMsTUFBTSxDQUFDLCtDQUErQyxDQUFDLENBQUM7SUFDL0QsQ0FBQztDQUNGO0FBcEVELDBEQW9FQyJ9
@@ -0,0 +1,16 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.Migration20260827172945 = void 0;
4
+ const migrations_1 = require("@medusajs/framework/mikro-orm/migrations");
5
+ class Migration20260827172945 extends migrations_1.Migration {
6
+ async up() {
7
+ this.addSql(`alter table if exists "email_message" drop constraint if exists "email_message_kind_check";`);
8
+ this.addSql(`alter table if exists "email_message" add constraint "email_message_kind_check" check("kind" in ('order.received', 'order.received.admin', 'order.shipped', 'order.canceled', 'order.return_requested', 'order.return_received', 'order.refunded', 'auth.password_reset', 'affiliate.consignment_report_due'));`);
9
+ }
10
+ async down() {
11
+ this.addSql(`alter table if exists "email_message" drop constraint if exists "email_message_kind_check";`);
12
+ this.addSql(`alter table if exists "email_message" add constraint "email_message_kind_check" check("kind" in ('order.received', 'order.shipped', 'order.canceled', 'order.return_requested', 'order.return_received', 'order.refunded', 'auth.password_reset', 'affiliate.consignment_report_due'));`);
13
+ }
14
+ }
15
+ exports.Migration20260827172945 = Migration20260827172945;
16
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTWlncmF0aW9uMjAyNjA4MjcxNzI5NDUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvbW9kdWxlcy9lbWFpbC9taWdyYXRpb25zL01pZ3JhdGlvbjIwMjYwODI3MTcyOTQ1LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLHlFQUFxRTtBQUVyRSxNQUFhLHVCQUF3QixTQUFRLHNCQUFTO0lBQzNDLEtBQUssQ0FBQyxFQUFFO1FBQ2YsSUFBSSxDQUFDLE1BQU0sQ0FDVCw2RkFBNkYsQ0FDOUYsQ0FBQztRQUVGLElBQUksQ0FBQyxNQUFNLENBQ1QsaVRBQWlULENBQ2xULENBQUM7SUFDSixDQUFDO0lBRVEsS0FBSyxDQUFDLElBQUk7UUFDakIsSUFBSSxDQUFDLE1BQU0sQ0FDVCw2RkFBNkYsQ0FDOUYsQ0FBQztRQUVGLElBQUksQ0FBQyxNQUFNLENBQ1QseVJBQXlSLENBQzFSLENBQUM7SUFDSixDQUFDO0NBQ0Y7QUFwQkQsMERBb0JDIn0=
@@ -0,0 +1,22 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.Migration20260827194804 = void 0;
4
+ const migrations_1 = require("@medusajs/framework/mikro-orm/migrations");
5
+ class Migration20260827194804 extends migrations_1.Migration {
6
+ async up() {
7
+ this.addSql(`alter table if exists "email_terms_version" drop constraint if exists "email_terms_version_file_id_unique";`);
8
+ this.addSql(`alter table if exists "email_terms_version" drop constraint if exists "email_terms_version_request_id_unique";`);
9
+ this.addSql(`create table if not exists "email_terms_version" ("id" text not null, "request_id" text not null, "filename" text not null, "file_id" text not null, "effective_at" timestamptz not null, "byte_size" integer not null, "sha256" text not null, "created_at" timestamptz not null default now(), "updated_at" timestamptz not null default now(), "deleted_at" timestamptz null, constraint "email_terms_version_pkey" primary key ("id"));`);
10
+ this.addSql(`CREATE INDEX IF NOT EXISTS "IDX_email_terms_version_deleted_at" ON "email_terms_version" ("deleted_at") WHERE deleted_at IS NULL;`);
11
+ this.addSql(`CREATE UNIQUE INDEX IF NOT EXISTS "IDX_email_terms_version_request_id_unique" ON "email_terms_version" ("request_id");`);
12
+ this.addSql(`CREATE UNIQUE INDEX IF NOT EXISTS "IDX_email_terms_version_file_id_unique" ON "email_terms_version" ("file_id");`);
13
+ this.addSql(`CREATE INDEX IF NOT EXISTS "IDX_email_terms_version_effective_at" ON "email_terms_version" ("effective_at") WHERE deleted_at IS NULL;`);
14
+ this.addSql(`alter table if exists "email_terms_version" add constraint "chk_email_terms_version_byte_size" check ("byte_size" > 0 and "byte_size" <= 5242880);`);
15
+ this.addSql(`alter table if exists "email_terms_version" add constraint "chk_email_terms_version_sha256" check ("sha256" ~ '^[0-9a-f]{64}$');`);
16
+ }
17
+ async down() {
18
+ this.addSql(`drop table if exists "email_terms_version" cascade;`);
19
+ }
20
+ }
21
+ exports.Migration20260827194804 = Migration20260827194804;
22
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTWlncmF0aW9uMjAyNjA4MjcxOTQ4MDQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvbW9kdWxlcy9lbWFpbC9taWdyYXRpb25zL01pZ3JhdGlvbjIwMjYwODI3MTk0ODA0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLHlFQUFxRTtBQUVyRSxNQUFhLHVCQUF3QixTQUFRLHNCQUFTO0lBQzNDLEtBQUssQ0FBQyxFQUFFO1FBQ2YsSUFBSSxDQUFDLE1BQU0sQ0FDVCw2R0FBNkcsQ0FDOUcsQ0FBQztRQUNGLElBQUksQ0FBQyxNQUFNLENBQ1QsZ0hBQWdILENBQ2pILENBQUM7UUFDRixJQUFJLENBQUMsTUFBTSxDQUNULDZhQUE2YSxDQUM5YSxDQUFDO1FBQ0YsSUFBSSxDQUFDLE1BQU0sQ0FDVCxtSUFBbUksQ0FDcEksQ0FBQztRQUNGLElBQUksQ0FBQyxNQUFNLENBQ1Qsd0hBQXdILENBQ3pILENBQUM7UUFDRixJQUFJLENBQUMsTUFBTSxDQUNULGtIQUFrSCxDQUNuSCxDQUFDO1FBQ0YsSUFBSSxDQUFDLE1BQU0sQ0FDVCx1SUFBdUksQ0FDeEksQ0FBQztRQUNGLElBQUksQ0FBQyxNQUFNLENBQ1Qsb0pBQW9KLENBQ3JKLENBQUM7UUFDRixJQUFJLENBQUMsTUFBTSxDQUNULGtJQUFrSSxDQUNuSSxDQUFDO0lBQ0osQ0FBQztJQUVRLEtBQUssQ0FBQyxJQUFJO1FBQ2pCLElBQUksQ0FBQyxNQUFNLENBQUMscURBQXFELENBQUMsQ0FBQztJQUNyRSxDQUFDO0NBQ0Y7QUFsQ0QsMERBa0NDIn0=
@@ -0,0 +1,16 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.Migration20260906195205 = void 0;
4
+ const migrations_1 = require("@medusajs/framework/mikro-orm/migrations");
5
+ class Migration20260906195205 extends migrations_1.Migration {
6
+ async up() {
7
+ this.addSql(`alter table if exists "email_message" drop constraint if exists "email_message_kind_check";`);
8
+ this.addSql(`alter table if exists "email_message" add constraint "email_message_kind_check" check("kind" in ('order.received', 'order.received.admin', 'order.shipped', 'order.canceled', 'order.return_requested', 'order.return_received', 'order.refunded', 'auth.password_reset', 'affiliate.consignment_report_due', 'user.invite'));`);
9
+ }
10
+ async down() {
11
+ this.addSql(`alter table if exists "email_message" drop constraint if exists "email_message_kind_check";`);
12
+ this.addSql(`alter table if exists "email_message" add constraint "email_message_kind_check" check("kind" in ('order.received', 'order.received.admin', 'order.shipped', 'order.canceled', 'order.return_requested', 'order.return_received', 'order.refunded', 'auth.password_reset', 'affiliate.consignment_report_due'));`);
13
+ }
14
+ }
15
+ exports.Migration20260906195205 = Migration20260906195205;
16
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTWlncmF0aW9uMjAyNjA5MDYxOTUyMDUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvbW9kdWxlcy9lbWFpbC9taWdyYXRpb25zL01pZ3JhdGlvbjIwMjYwOTA2MTk1MjA1LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLHlFQUFxRTtBQUVyRSxNQUFhLHVCQUF3QixTQUFRLHNCQUFTO0lBRTNDLEtBQUssQ0FBQyxFQUFFO1FBQ2YsSUFBSSxDQUFDLE1BQU0sQ0FBQyw2RkFBNkYsQ0FBQyxDQUFDO1FBRTNHLElBQUksQ0FBQyxNQUFNLENBQUMsZ1VBQWdVLENBQUMsQ0FBQztJQUNoVixDQUFDO0lBRVEsS0FBSyxDQUFDLElBQUk7UUFDakIsSUFBSSxDQUFDLE1BQU0sQ0FBQyw2RkFBNkYsQ0FBQyxDQUFDO1FBRTNHLElBQUksQ0FBQyxNQUFNLENBQUMsaVRBQWlULENBQUMsQ0FBQztJQUNqVSxDQUFDO0NBRUY7QUFkRCwwREFjQyJ9
@@ -0,0 +1,56 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ const utils_1 = require("@medusajs/framework/utils");
7
+ const message_state_1 = require("../domain/message-state");
8
+ const email_message_1 = __importDefault(require("./email-message"));
9
+ const EmailAttempt = utils_1.model
10
+ .define({
11
+ name: "email_attempt",
12
+ tableName: "email_attempt",
13
+ }, {
14
+ id: utils_1.model.id({ prefix: "emat" }).primaryKey(),
15
+ message: utils_1.model.belongsTo(() => email_message_1.default, {
16
+ mappedBy: "attempts",
17
+ }),
18
+ attempt_number: utils_1.model.number(),
19
+ status: utils_1.model.enum([...message_state_1.EMAIL_ATTEMPT_STATUSES]).default("processing"),
20
+ attempt_token: utils_1.model.text().nullable(),
21
+ lease_started_at: utils_1.model.dateTime().nullable(),
22
+ lease_expires_at: utils_1.model.dateTime().nullable(),
23
+ notification_id: utils_1.model.text().nullable(),
24
+ failure_code: utils_1.model.text().nullable(),
25
+ started_at: utils_1.model.dateTime(),
26
+ finished_at: utils_1.model.dateTime().nullable(),
27
+ })
28
+ .indexes([
29
+ {
30
+ name: "IDX_email_attempt_message_number_unique",
31
+ on: ["message_id", "attempt_number"],
32
+ unique: true,
33
+ where: null,
34
+ },
35
+ {
36
+ name: "IDX_email_attempt_status_lease_expires_at",
37
+ on: ["status", "lease_expires_at"],
38
+ where: "deleted_at IS NULL",
39
+ },
40
+ ])
41
+ .checks([
42
+ {
43
+ name: "CHK_email_attempt_attempt_number_positive",
44
+ expression: ({ attempt_number }) => `${attempt_number} > 0`,
45
+ },
46
+ {
47
+ name: "CHK_email_attempt_lease_order",
48
+ expression: ({ lease_started_at, lease_expires_at }) => `${lease_started_at} is null or ${lease_expires_at} is null or ${lease_expires_at} > ${lease_started_at}`,
49
+ },
50
+ {
51
+ name: "CHK_email_attempt_state_fields",
52
+ expression: ({ status, attempt_token, lease_started_at, lease_expires_at, finished_at, }) => `((${status} = 'processing' and ${attempt_token} is not null and ${lease_started_at} is not null and ${lease_expires_at} is not null and ${finished_at} is null) or (${status} in ('sent', 'failed', 'unknown') and ${attempt_token} is null and ${finished_at} is not null))`,
53
+ },
54
+ ]);
55
+ exports.default = EmailAttempt;
56
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW1haWwtYXR0ZW1wdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9tb2R1bGVzL2VtYWlsL21vZGVscy9lbWFpbC1hdHRlbXB0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUEscURBQWtEO0FBRWxELDJEQUFpRTtBQUNqRSxvRUFBMkM7QUFFM0MsTUFBTSxZQUFZLEdBQUcsYUFBSztLQUN2QixNQUFNLENBQ0w7SUFDRSxJQUFJLEVBQUUsZUFBZTtJQUNyQixTQUFTLEVBQUUsZUFBZTtDQUMzQixFQUNEO0lBQ0UsRUFBRSxFQUFFLGFBQUssQ0FBQyxFQUFFLENBQUMsRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLENBQUMsQ0FBQyxVQUFVLEVBQUU7SUFDN0MsT0FBTyxFQUFFLGFBQUssQ0FBQyxTQUFTLENBQUMsR0FBRyxFQUFFLENBQUMsdUJBQVksRUFBRTtRQUMzQyxRQUFRLEVBQUUsVUFBVTtLQUNyQixDQUFDO0lBQ0YsY0FBYyxFQUFFLGFBQUssQ0FBQyxNQUFNLEVBQUU7SUFDOUIsTUFBTSxFQUFFLGFBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLHNDQUFzQixDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsWUFBWSxDQUFDO0lBQ3JFLGFBQWEsRUFBRSxhQUFLLENBQUMsSUFBSSxFQUFFLENBQUMsUUFBUSxFQUFFO0lBQ3RDLGdCQUFnQixFQUFFLGFBQUssQ0FBQyxRQUFRLEVBQUUsQ0FBQyxRQUFRLEVBQUU7SUFDN0MsZ0JBQWdCLEVBQUUsYUFBSyxDQUFDLFFBQVEsRUFBRSxDQUFDLFFBQVEsRUFBRTtJQUM3QyxlQUFlLEVBQUUsYUFBSyxDQUFDLElBQUksRUFBRSxDQUFDLFFBQVEsRUFBRTtJQUN4QyxZQUFZLEVBQUUsYUFBSyxDQUFDLElBQUksRUFBRSxDQUFDLFFBQVEsRUFBRTtJQUNyQyxVQUFVLEVBQUUsYUFBSyxDQUFDLFFBQVEsRUFBRTtJQUM1QixXQUFXLEVBQUUsYUFBSyxDQUFDLFFBQVEsRUFBRSxDQUFDLFFBQVEsRUFBRTtDQUN6QyxDQUNGO0tBQ0EsT0FBTyxDQUFDO0lBQ1A7UUFDRSxJQUFJLEVBQUUseUNBQXlDO1FBQy9DLEVBQUUsRUFBRSxDQUFDLFlBQVksRUFBRSxnQkFBZ0IsQ0FBQztRQUNwQyxNQUFNLEVBQUUsSUFBSTtRQUNaLEtBQUssRUFBRSxJQUFJO0tBQ1o7SUFDRDtRQUNFLElBQUksRUFBRSwyQ0FBMkM7UUFDakQsRUFBRSxFQUFFLENBQUMsUUFBUSxFQUFFLGtCQUFrQixDQUFDO1FBQ2xDLEtBQUssRUFBRSxvQkFBb0I7S0FDNUI7Q0FDRixDQUFDO0tBQ0QsTUFBTSxDQUFDO0lBQ047UUFDRSxJQUFJLEVBQUUsMkNBQTJDO1FBQ2pELFVBQVUsRUFBRSxDQUFDLEVBQUUsY0FBYyxFQUFFLEVBQUUsRUFBRSxDQUFDLEdBQUcsY0FBYyxNQUFNO0tBQzVEO0lBQ0Q7UUFDRSxJQUFJLEVBQUUsK0JBQStCO1FBQ3JDLFVBQVUsRUFBRSxDQUFDLEVBQUUsZ0JBQWdCLEVBQUUsZ0JBQWdCLEVBQUUsRUFBRSxFQUFFLENBQ3JELEdBQUcsZ0JBQWdCLGVBQWUsZ0JBQWdCLGVBQWUsZ0JBQWdCLE1BQU0sZ0JBQWdCLEVBQUU7S0FDNUc7SUFDRDtRQUNFLElBQUksRUFBRSxnQ0FBZ0M7UUFDdEMsVUFBVSxFQUFFLENBQUMsRUFDWCxNQUFNLEVBQ04sYUFBYSxFQUNiLGdCQUFnQixFQUNoQixnQkFBZ0IsRUFDaEIsV0FBVyxHQUNaLEVBQUUsRUFBRSxDQUNILEtBQUssTUFBTSx1QkFBdUIsYUFBYSxvQkFBb0IsZ0JBQWdCLG9CQUFvQixnQkFBZ0Isb0JBQW9CLFdBQVcsaUJBQWlCLE1BQU0seUNBQXlDLGFBQWEsZ0JBQWdCLFdBQVcsZ0JBQWdCO0tBQ2pSO0NBQ0YsQ0FBQyxDQUFDO0FBRUwsa0JBQWUsWUFBWSxDQUFDIn0=
@@ -0,0 +1,71 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ const utils_1 = require("@medusajs/framework/utils");
7
+ const types_1 = require("../../../email/types");
8
+ const message_state_1 = require("../domain/message-state");
9
+ const email_attempt_1 = __importDefault(require("./email-attempt"));
10
+ const EmailMessage = utils_1.model
11
+ .define({
12
+ name: "email_message",
13
+ tableName: "email_message",
14
+ }, {
15
+ id: utils_1.model.id({ prefix: "emsg" }).primaryKey(),
16
+ kind: utils_1.model.enum([...types_1.EMAIL_KINDS]),
17
+ business_key: utils_1.model.text(),
18
+ resource_type: utils_1.model.text(),
19
+ resource_id: utils_1.model.text().nullable(),
20
+ recipient: utils_1.model.text().nullable(),
21
+ template_data: utils_1.model.json().nullable(),
22
+ attachments: utils_1.model.json().default([]),
23
+ status: utils_1.model.enum([...message_state_1.EMAIL_MESSAGE_STATUSES]).default("pending"),
24
+ required_facts: utils_1.model.json().default([]),
25
+ received_facts: utils_1.model.json().default([]),
26
+ predecessor_message: utils_1.model
27
+ .belongsTo(() => EmailMessage, {
28
+ mappedBy: "dependent_messages",
29
+ })
30
+ .nullable(),
31
+ dependent_messages: utils_1.model.hasMany(() => EmailMessage, {
32
+ mappedBy: "predecessor_message",
33
+ }),
34
+ attempts: utils_1.model.hasMany(() => email_attempt_1.default, {
35
+ mappedBy: "message",
36
+ }),
37
+ trigger: utils_1.model.text().default("automatic"),
38
+ request_id: utils_1.model.text().nullable(),
39
+ requested_by_admin_id: utils_1.model.text().nullable(),
40
+ original_message_id: utils_1.model.text().nullable(),
41
+ next_attempt_at: utils_1.model.dateTime().nullable(),
42
+ sent_at: utils_1.model.dateTime().nullable(),
43
+ failed_at: utils_1.model.dateTime().nullable(),
44
+ payload_expires_at: utils_1.model.dateTime().nullable(),
45
+ terminal_code: utils_1.model.text().nullable(),
46
+ })
47
+ .indexes([
48
+ {
49
+ name: "IDX_email_message_business_key_unique",
50
+ on: ["business_key"],
51
+ unique: true,
52
+ where: null,
53
+ },
54
+ {
55
+ name: "IDX_email_message_resource",
56
+ on: ["resource_type", "resource_id"],
57
+ where: "deleted_at IS NULL",
58
+ },
59
+ {
60
+ name: "IDX_email_message_status_next_attempt_at",
61
+ on: ["status", "next_attempt_at"],
62
+ where: "deleted_at IS NULL",
63
+ },
64
+ {
65
+ name: "IDX_email_message_original_message_id",
66
+ on: ["original_message_id"],
67
+ where: "deleted_at IS NULL AND original_message_id IS NOT NULL",
68
+ },
69
+ ]);
70
+ exports.default = EmailMessage;
71
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW1haWwtbWVzc2FnZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9tb2R1bGVzL2VtYWlsL21vZGVscy9lbWFpbC1tZXNzYWdlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUEscURBQWtEO0FBRWxELGdEQUFtRDtBQUVuRCwyREFBaUU7QUFDakUsb0VBQTJDO0FBRTNDLE1BQU0sWUFBWSxHQUFHLGFBQUs7S0FDdkIsTUFBTSxDQUNMO0lBQ0UsSUFBSSxFQUFFLGVBQWU7SUFDckIsU0FBUyxFQUFFLGVBQWU7Q0FDM0IsRUFDRDtJQUNFLEVBQUUsRUFBRSxhQUFLLENBQUMsRUFBRSxDQUFDLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxDQUFDLENBQUMsVUFBVSxFQUFFO0lBQzdDLElBQUksRUFBRSxhQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxtQkFBVyxDQUFDLENBQUM7SUFDbEMsWUFBWSxFQUFFLGFBQUssQ0FBQyxJQUFJLEVBQUU7SUFDMUIsYUFBYSxFQUFFLGFBQUssQ0FBQyxJQUFJLEVBQUU7SUFDM0IsV0FBVyxFQUFFLGFBQUssQ0FBQyxJQUFJLEVBQUUsQ0FBQyxRQUFRLEVBQUU7SUFDcEMsU0FBUyxFQUFFLGFBQUssQ0FBQyxJQUFJLEVBQUUsQ0FBQyxRQUFRLEVBQUU7SUFDbEMsYUFBYSxFQUFFLGFBQUssQ0FBQyxJQUFJLEVBQUUsQ0FBQyxRQUFRLEVBQUU7SUFDdEMsV0FBVyxFQUFFLGFBQUssQ0FBQyxJQUFJLEVBQXFCLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQztJQUN4RCxNQUFNLEVBQUUsYUFBSyxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsc0NBQXNCLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUM7SUFDbEUsY0FBYyxFQUFFLGFBQUssQ0FBQyxJQUFJLEVBQVksQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDO0lBQ2xELGNBQWMsRUFBRSxhQUFLLENBQUMsSUFBSSxFQUFZLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQztJQUNsRCxtQkFBbUIsRUFBRSxhQUFLO1NBQ3ZCLFNBQVMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxZQUFZLEVBQUU7UUFDN0IsUUFBUSxFQUFFLG9CQUFvQjtLQUMvQixDQUFDO1NBQ0QsUUFBUSxFQUFFO0lBQ2Isa0JBQWtCLEVBQUUsYUFBSyxDQUFDLE9BQU8sQ0FBQyxHQUFHLEVBQUUsQ0FBQyxZQUFZLEVBQUU7UUFDcEQsUUFBUSxFQUFFLHFCQUFxQjtLQUNoQyxDQUFDO0lBQ0YsUUFBUSxFQUFFLGFBQUssQ0FBQyxPQUFPLENBQUMsR0FBRyxFQUFFLENBQUMsdUJBQVksRUFBRTtRQUMxQyxRQUFRLEVBQUUsU0FBUztLQUNwQixDQUFDO0lBQ0YsT0FBTyxFQUFFLGFBQUssQ0FBQyxJQUFJLEVBQUUsQ0FBQyxPQUFPLENBQUMsV0FBVyxDQUFDO0lBQzFDLFVBQVUsRUFBRSxhQUFLLENBQUMsSUFBSSxFQUFFLENBQUMsUUFBUSxFQUFFO0lBQ25DLHFCQUFxQixFQUFFLGFBQUssQ0FBQyxJQUFJLEVBQUUsQ0FBQyxRQUFRLEVBQUU7SUFDOUMsbUJBQW1CLEVBQUUsYUFBSyxDQUFDLElBQUksRUFBRSxDQUFDLFFBQVEsRUFBRTtJQUM1QyxlQUFlLEVBQUUsYUFBSyxDQUFDLFFBQVEsRUFBRSxDQUFDLFFBQVEsRUFBRTtJQUM1QyxPQUFPLEVBQUUsYUFBSyxDQUFDLFFBQVEsRUFBRSxDQUFDLFFBQVEsRUFBRTtJQUNwQyxTQUFTLEVBQUUsYUFBSyxDQUFDLFFBQVEsRUFBRSxDQUFDLFFBQVEsRUFBRTtJQUN0QyxrQkFBa0IsRUFBRSxhQUFLLENBQUMsUUFBUSxFQUFFLENBQUMsUUFBUSxFQUFFO0lBQy9DLGFBQWEsRUFBRSxhQUFLLENBQUMsSUFBSSxFQUFFLENBQUMsUUFBUSxFQUFFO0NBQ3ZDLENBQ0Y7S0FDQSxPQUFPLENBQUM7SUFDUDtRQUNFLElBQUksRUFBRSx1Q0FBdUM7UUFDN0MsRUFBRSxFQUFFLENBQUMsY0FBYyxDQUFDO1FBQ3BCLE1BQU0sRUFBRSxJQUFJO1FBQ1osS0FBSyxFQUFFLElBQUk7S0FDWjtJQUNEO1FBQ0UsSUFBSSxFQUFFLDRCQUE0QjtRQUNsQyxFQUFFLEVBQUUsQ0FBQyxlQUFlLEVBQUUsYUFBYSxDQUFDO1FBQ3BDLEtBQUssRUFBRSxvQkFBb0I7S0FDNUI7SUFDRDtRQUNFLElBQUksRUFBRSwwQ0FBMEM7UUFDaEQsRUFBRSxFQUFFLENBQUMsUUFBUSxFQUFFLGlCQUFpQixDQUFDO1FBQ2pDLEtBQUssRUFBRSxvQkFBb0I7S0FDNUI7SUFDRDtRQUNFLElBQUksRUFBRSx1Q0FBdUM7UUFDN0MsRUFBRSxFQUFFLENBQUMscUJBQXFCLENBQUM7UUFDM0IsS0FBSyxFQUFFLHdEQUF3RDtLQUNoRTtDQUNGLENBQUMsQ0FBQztBQUVMLGtCQUFlLFlBQVksQ0FBQyJ9
@@ -0,0 +1,37 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const utils_1 = require("@medusajs/framework/utils");
4
+ const EmailTermsVersion = utils_1.model
5
+ .define({
6
+ name: "email_terms_version",
7
+ tableName: "email_terms_version",
8
+ }, {
9
+ id: utils_1.model.id({ prefix: "eterm" }).primaryKey(),
10
+ request_id: utils_1.model.text(),
11
+ filename: utils_1.model.text(),
12
+ file_id: utils_1.model.text(),
13
+ effective_at: utils_1.model.dateTime(),
14
+ byte_size: utils_1.model.number(),
15
+ sha256: utils_1.model.text(),
16
+ })
17
+ .indexes([
18
+ {
19
+ name: "IDX_email_terms_version_request_id_unique",
20
+ on: ["request_id"],
21
+ unique: true,
22
+ where: null,
23
+ },
24
+ {
25
+ name: "IDX_email_terms_version_file_id_unique",
26
+ on: ["file_id"],
27
+ unique: true,
28
+ where: null,
29
+ },
30
+ {
31
+ name: "IDX_email_terms_version_effective_at",
32
+ on: ["effective_at"],
33
+ where: "deleted_at IS NULL",
34
+ },
35
+ ]);
36
+ exports.default = EmailTermsVersion;
37
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW1haWwtdGVybXMtdmVyc2lvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9tb2R1bGVzL2VtYWlsL21vZGVscy9lbWFpbC10ZXJtcy12ZXJzaW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBQUEscURBQWtEO0FBRWxELE1BQU0saUJBQWlCLEdBQUcsYUFBSztLQUM1QixNQUFNLENBQ0w7SUFDRSxJQUFJLEVBQUUscUJBQXFCO0lBQzNCLFNBQVMsRUFBRSxxQkFBcUI7Q0FDakMsRUFDRDtJQUNFLEVBQUUsRUFBRSxhQUFLLENBQUMsRUFBRSxDQUFDLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxDQUFDLENBQUMsVUFBVSxFQUFFO0lBQzlDLFVBQVUsRUFBRSxhQUFLLENBQUMsSUFBSSxFQUFFO0lBQ3hCLFFBQVEsRUFBRSxhQUFLLENBQUMsSUFBSSxFQUFFO0lBQ3RCLE9BQU8sRUFBRSxhQUFLLENBQUMsSUFBSSxFQUFFO0lBQ3JCLFlBQVksRUFBRSxhQUFLLENBQUMsUUFBUSxFQUFFO0lBQzlCLFNBQVMsRUFBRSxhQUFLLENBQUMsTUFBTSxFQUFFO0lBQ3pCLE1BQU0sRUFBRSxhQUFLLENBQUMsSUFBSSxFQUFFO0NBQ3JCLENBQ0Y7S0FDQSxPQUFPLENBQUM7SUFDUDtRQUNFLElBQUksRUFBRSwyQ0FBMkM7UUFDakQsRUFBRSxFQUFFLENBQUMsWUFBWSxDQUFDO1FBQ2xCLE1BQU0sRUFBRSxJQUFJO1FBQ1osS0FBSyxFQUFFLElBQUk7S0FDWjtJQUNEO1FBQ0UsSUFBSSxFQUFFLHdDQUF3QztRQUM5QyxFQUFFLEVBQUUsQ0FBQyxTQUFTLENBQUM7UUFDZixNQUFNLEVBQUUsSUFBSTtRQUNaLEtBQUssRUFBRSxJQUFJO0tBQ1o7SUFDRDtRQUNFLElBQUksRUFBRSxzQ0FBc0M7UUFDNUMsRUFBRSxFQUFFLENBQUMsY0FBYyxDQUFDO1FBQ3BCLEtBQUssRUFBRSxvQkFBb0I7S0FDNUI7Q0FDRixDQUFDLENBQUM7QUFFTCxrQkFBZSxpQkFBaUIsQ0FBQyJ9