medusajs-documents-plugin 0.0.0-stage → 1.1.2

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 (41) hide show
  1. package/.medusa/server/src/admin/index.js +2441 -0
  2. package/.medusa/server/src/admin/index.mjs +2442 -0
  3. package/.medusa/server/src/api/admin/documents/[id]/document/route.js +36 -0
  4. package/.medusa/server/src/api/admin/documents/[id]/send/route.js +41 -0
  5. package/.medusa/server/src/api/admin/documents/[id]/sync-zoho/route.js +68 -0
  6. package/.medusa/server/src/api/admin/documents/custom/route.js +48 -0
  7. package/.medusa/server/src/api/admin/documents/manual/route.js +46 -0
  8. package/.medusa/server/src/api/admin/documents/route.js +36 -0
  9. package/.medusa/server/src/api/admin/documents/settings/route.js +44 -0
  10. package/.medusa/server/src/api/admin/documents/templates/preview/route.js +159 -0
  11. package/.medusa/server/src/api/admin/documents/zoho/list/route.js +51 -0
  12. package/.medusa/server/src/api/documents/[id]/document/route.js +36 -0
  13. package/.medusa/server/src/api/documents/r/[code]/route.js +29 -0
  14. package/.medusa/server/src/api/documents/templates/preview/route.js +159 -0
  15. package/.medusa/server/src/api/store/documents/r/[code]/route.js +22 -0
  16. package/.medusa/server/src/index.js +27 -0
  17. package/.medusa/server/src/modules/documents/index.js +13 -0
  18. package/.medusa/server/src/modules/documents/migrations/Migration20261012164601.js +23 -0
  19. package/.medusa/server/src/modules/documents/migrations/Migration20261014150000.js +20 -0
  20. package/.medusa/server/src/modules/documents/migrations/Migration20261015160000.js +46 -0
  21. package/.medusa/server/src/modules/documents/models/document-link.js +12 -0
  22. package/.medusa/server/src/modules/documents/models/document-record.js +33 -0
  23. package/.medusa/server/src/modules/documents/models/document-settings.js +79 -0
  24. package/.medusa/server/src/modules/documents/service.js +587 -0
  25. package/.medusa/server/src/services/notification-sender.js +612 -0
  26. package/.medusa/server/src/services/order-notification-templates.js +510 -0
  27. package/.medusa/server/src/services/pdf-post-processor.js +64 -0
  28. package/.medusa/server/src/services/pdfkit-generator.js +438 -0
  29. package/.medusa/server/src/services/zoho-books.js +221 -0
  30. package/.medusa/server/src/subscribers/order-documents.js +424 -0
  31. package/.medusa/server/src/subscribers/repair-documents.js +216 -0
  32. package/.medusa/server/src/utils/integrate.js +37 -0
  33. package/.medusa/server/src/utils/payment-link.js +69 -0
  34. package/.medusa/server/src/workflows/create-manual-document.js +27 -0
  35. package/.medusa/server/src/workflows/generate-document.js +24 -0
  36. package/.medusa/server/src/workflows/index.js +20 -0
  37. package/.medusa/server/src/workflows/send-document-notification.js +41 -0
  38. package/CHANGELOG.md +87 -0
  39. package/LICENSE +21 -0
  40. package/README.md +201 -2
  41. package/package.json +86 -4
@@ -0,0 +1,29 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.GET = GET;
4
+ const documents_1 = require("../../../../modules/documents");
5
+ // GET /documents/r/:code (Public shortlink redirect - no publishable API key or admin auth required)
6
+ async function GET(req, res) {
7
+ const code = req.params.code;
8
+ try {
9
+ const documentService = req.scope.resolve(documents_1.DOCUMENTS_MODULE);
10
+ const links = await documentService.listDocumentLinks({ shortcode: code });
11
+ if (links && links.length > 0) {
12
+ let targetUrl = links[0].url;
13
+ // If relative URL, prepend backend origin
14
+ if (targetUrl.startsWith("/")) {
15
+ const host = req.get("host") || "localhost:9000";
16
+ const protocol = req.protocol || "http";
17
+ targetUrl = `${protocol}://${host}${targetUrl}`;
18
+ }
19
+ res.setHeader("Location", targetUrl);
20
+ return res.status(302).send("Redirecting...");
21
+ }
22
+ return res.status(404).send("Document link not found or expired.");
23
+ }
24
+ catch (err) {
25
+ req.scope.resolve("logger")?.error(`[Documents-Public] Error resolving shortlink ${code}: ${err.message}`);
26
+ return res.status(500).send("Error resolving document link");
27
+ }
28
+ }
29
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm91dGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBpL2RvY3VtZW50cy9yL1tjb2RlXS9yb3V0ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUtBLGtCQXVCQztBQTNCRCw2REFBaUU7QUFHakUscUdBQXFHO0FBQzlGLEtBQUssVUFBVSxHQUFHLENBQUMsR0FBb0MsRUFBRSxHQUFtQjtJQUNqRixNQUFNLElBQUksR0FBRyxHQUFHLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQztJQUM3QixJQUFJLENBQUM7UUFDSCxNQUFNLGVBQWUsR0FBMEIsR0FBRyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsNEJBQWdCLENBQUMsQ0FBQztRQUNuRixNQUFNLEtBQUssR0FBRyxNQUFNLGVBQWUsQ0FBQyxpQkFBaUIsQ0FBQyxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO1FBRTNFLElBQUksS0FBSyxJQUFJLEtBQUssQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUM7WUFDOUIsSUFBSSxTQUFTLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQztZQUM3QiwwQ0FBMEM7WUFDMUMsSUFBSSxTQUFTLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUM7Z0JBQzlCLE1BQU0sSUFBSSxHQUFHLEdBQUcsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLElBQUksZ0JBQWdCLENBQUM7Z0JBQ2pELE1BQU0sUUFBUSxHQUFHLEdBQUcsQ0FBQyxRQUFRLElBQUksTUFBTSxDQUFDO2dCQUN4QyxTQUFTLEdBQUcsR0FBRyxRQUFRLE1BQU0sSUFBSSxHQUFHLFNBQVMsRUFBRSxDQUFDO1lBQ2xELENBQUM7WUFDRCxHQUFHLENBQUMsU0FBUyxDQUFDLFVBQVUsRUFBRSxTQUFTLENBQUMsQ0FBQztZQUNyQyxPQUFPLEdBQUcsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLENBQUM7UUFDaEQsQ0FBQztRQUVELE9BQU8sR0FBRyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMscUNBQXFDLENBQUMsQ0FBQztJQUNyRSxDQUFDO0lBQUMsT0FBTyxHQUFRLEVBQUUsQ0FBQztRQUNsQixHQUFHLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsRUFBRSxLQUFLLENBQUMsZ0RBQWdELElBQUksS0FBSyxHQUFHLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQztRQUMzRyxPQUFPLEdBQUcsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLCtCQUErQixDQUFDLENBQUM7SUFDL0QsQ0FBQztBQUNILENBQUMifQ==
@@ -0,0 +1,159 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.GET = GET;
4
+ const documents_1 = require("../../../../modules/documents");
5
+ const pdfkit_generator_1 = require("../../../../services/pdfkit-generator");
6
+ // GET /documents/templates/preview?style=modern | classic | minimal&type=invoice | receipt | packing_slip | estimate | custom | job_card
7
+ async function GET(req, res) {
8
+ try {
9
+ const documentService = req.scope.resolve(documents_1.DOCUMENTS_MODULE);
10
+ const settings = (await documentService.getSettings().catch(() => ({}))) || {};
11
+ const rawStyle = String(req.query.style || "").trim().toLowerCase();
12
+ const style = ["modern", "classic", "minimal"].includes(rawStyle) ? rawStyle : "modern";
13
+ const rawType = String(req.query.type || "").trim().toLowerCase();
14
+ const validTypes = ["invoice", "receipt", "packing_slip", "estimate", "custom", "job_card"];
15
+ const type = (validTypes.includes(rawType) ? rawType : "invoice");
16
+ const isJobCard = type === "job_card";
17
+ const isCustom = type === "custom";
18
+ const isReceipt = type === "receipt";
19
+ const isPackingSlip = type === "packing_slip";
20
+ const isEstimate = type === "estimate";
21
+ const companyName = settings.company_name || "Urban Device Care Ltd";
22
+ const sampleData = {
23
+ display_id: isJobCard
24
+ ? "JOB-1042"
25
+ : isReceipt
26
+ ? "REC-4019"
27
+ : isPackingSlip
28
+ ? "PKG-8821"
29
+ : isEstimate
30
+ ? "EST-3091"
31
+ : isCustom
32
+ ? "CERT-7701"
33
+ : "INV-1092",
34
+ title: isJobCard
35
+ ? "Repair Job Card"
36
+ : type === "invoice"
37
+ ? "Tax Invoice"
38
+ : isReceipt
39
+ ? "Payment Receipt"
40
+ : isPackingSlip
41
+ ? "Packing Slip"
42
+ : isEstimate
43
+ ? "Quotation / Estimate"
44
+ : "Warranty Certificate",
45
+ type: type,
46
+ date: new Date().toISOString().split("T")[0],
47
+ due_date: (type === "invoice" || isEstimate)
48
+ ? new Date(Date.now() + 14 * 86400000).toISOString().split("T")[0]
49
+ : undefined,
50
+ customer: {
51
+ name: "Jane Doe",
52
+ email: "jane.doe@example.com",
53
+ phone: "+44 7911 123456",
54
+ address: "221B Baker Street, Marylebone, London, NW1 6XE",
55
+ },
56
+ company: {
57
+ name: companyName,
58
+ logo_url: settings.pdf_logo_url,
59
+ address: settings.pdf_address || "123 High Street, Tech Park, London",
60
+ phone: settings.pdf_phone || "+44 20 7946 0991",
61
+ email: settings.pdf_email || "support@urbandevicecare.co.uk",
62
+ website: settings.pdf_website || "www.urbandevicecare.co.uk",
63
+ payment_details: settings.pdf_payment_details || "Bank: Barclays | Acct: 12345678 | Sort: 20-00-00",
64
+ terms: settings.pdf_terms || "Payment is due within 14 days of invoice date. Thank you for your business.",
65
+ },
66
+ items: isJobCard
67
+ ? [
68
+ { title: "Initial Physical Inspection & Safety Boot Test", quantity: 1, unit_price: 0, total: 0 },
69
+ { title: "OEM OLED Display Replacement & Digitizer Calibration", quantity: 1, unit_price: 0, total: 0 },
70
+ { title: "TrueTone & Ambient Light Sensor Transfer", quantity: 1, unit_price: 0, total: 0 },
71
+ { title: "Battery Health Diagnostic & Load Testing", quantity: 1, unit_price: 0, total: 0 },
72
+ { title: "Final Multi-Point Bench Clearance & Sanitization", quantity: 1, unit_price: 0, total: 0 },
73
+ ]
74
+ : isCustom
75
+ ? [
76
+ {
77
+ title: "OEM Component & Hardware Warranty",
78
+ description: "90-Day Comprehensive Hardware Protection",
79
+ quantity: 1,
80
+ unit_price: 0,
81
+ total: 0,
82
+ },
83
+ {
84
+ title: "Workshop Quality Clearance",
85
+ description: "Multi-Point Hardware Bench Certification",
86
+ quantity: 1,
87
+ unit_price: 0,
88
+ total: 0,
89
+ },
90
+ ]
91
+ : [
92
+ {
93
+ title: "Apple iPhone 14 Screen Replacement",
94
+ description: "OEM Grade OLED Assembly with TrueTone restoration",
95
+ quantity: 1,
96
+ unit_price: 189.0,
97
+ total: 189.0,
98
+ },
99
+ {
100
+ title: "Diagnostic & Workshop Labor Fee",
101
+ description: "Full device diagnostic and multi-point hardware inspection",
102
+ quantity: 1,
103
+ unit_price: 45.0,
104
+ total: 45.0,
105
+ },
106
+ {
107
+ title: "Tempered Glass Screen Protector",
108
+ description: "9H Hardness Edge-to-Edge protection",
109
+ quantity: 1,
110
+ unit_price: 15.0,
111
+ total: 15.0,
112
+ },
113
+ ],
114
+ subtotal: (isJobCard || isPackingSlip || isCustom) ? undefined : 249.0,
115
+ tax_total: (isJobCard || isPackingSlip || isCustom) ? undefined : 24.9,
116
+ discount_total: (isJobCard || isPackingSlip || isCustom) ? undefined : 10.0,
117
+ total: (isJobCard || isPackingSlip || isCustom) ? 0 : 263.9,
118
+ currency_code: "usd",
119
+ payment_status: isReceipt ? "paid" : "unpaid",
120
+ payment_link: (type === "invoice" || isEstimate) ? "https://store.urbandevicecare.co.uk/pay/sample-preview-token" : undefined,
121
+ qr_url: (type === "invoice" || isEstimate || isJobCard) ? "https://store.urbandevicecare.co.uk/track/JOB-1042" : undefined,
122
+ notes: isJobCard
123
+ ? "Customer acknowledges device physical intake condition and workshop repair terms."
124
+ : isReceipt
125
+ ? "Payment received in full via Paystack. Thank you for your custom!"
126
+ : isPackingSlip
127
+ ? "Please inspect contents immediately upon receipt. Keep this slip for your delivery records."
128
+ : isEstimate
129
+ ? "This quotation is valid for 30 calendar days from the date of issue."
130
+ : isCustom
131
+ ? "Retain this warranty certificate for official warranty claim verification."
132
+ : "Please scan the QR code to complete payment securely via Paystack.",
133
+ body_text: isCustom
134
+ ? "This official certificate verifies that the aforementioned device has undergone professional repairs with genuine OEM-specification components and has passed our multi-point quality assurance inspection.\n\nAll hardware replacements and associated workshop labor are covered under our comprehensive 90-day warranty against defects in parts and workmanship."
135
+ : undefined,
136
+ custom_fields: isJobCard
137
+ ? {
138
+ "Device Model": "Apple iPhone 14 Pro Max",
139
+ "Serial / IMEI": "F2LZ90K8MD6R",
140
+ "Technician": "Alex Morgan",
141
+ "Reported Fault": "Cracked front glass, intermittent touch on upper quadrant",
142
+ "Cosmetic Condition": "Light casing scuffs; screen fractured",
143
+ "Accessories Left": "None (Unit only)",
144
+ }
145
+ : undefined,
146
+ };
147
+ const pdfBuffer = await pdfkit_generator_1.PDFKitGenerator.generate(sampleData, style);
148
+ res.setHeader("Content-Type", "application/pdf");
149
+ res.setHeader("Content-Disposition", `inline; filename="preview-${style}-${type}.pdf"`);
150
+ res.setHeader("Content-Length", String(pdfBuffer.length));
151
+ res.setHeader("Cache-Control", "no-cache, no-store, must-revalidate");
152
+ return res.send(pdfBuffer);
153
+ }
154
+ catch (err) {
155
+ req.scope.resolve("logger")?.error(`[Documents-API] Error generating preview: ${err.message}`);
156
+ return res.status(500).send(`Failed to generate preview: ${err.message}`);
157
+ }
158
+ }
159
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm91dGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBpL2RvY3VtZW50cy90ZW1wbGF0ZXMvcHJldmlldy9yb3V0ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQU1BLGtCQTZKQztBQWxLRCw2REFBaUU7QUFFakUsNEVBQXNGO0FBRXRGLHlJQUF5STtBQUNsSSxLQUFLLFVBQVUsR0FBRyxDQUFDLEdBQWtCLEVBQUUsR0FBbUI7SUFDL0QsSUFBSSxDQUFDO1FBQ0gsTUFBTSxlQUFlLEdBQTBCLEdBQUcsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLDRCQUFnQixDQUFDLENBQUM7UUFDbkYsTUFBTSxRQUFRLEdBQUcsQ0FBQyxNQUFNLGVBQWUsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxLQUFLLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDO1FBRS9FLE1BQU0sUUFBUSxHQUFHLE1BQU0sQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLEtBQUssSUFBSSxFQUFFLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxXQUFXLEVBQUUsQ0FBQztRQUNwRSxNQUFNLEtBQUssR0FBRyxDQUFDLFFBQVEsRUFBRSxTQUFTLEVBQUUsU0FBUyxDQUFDLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQztRQUV4RixNQUFNLE9BQU8sR0FBRyxNQUFNLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxJQUFJLElBQUksRUFBRSxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUMsV0FBVyxFQUFFLENBQUM7UUFDbEUsTUFBTSxVQUFVLEdBQUcsQ0FBQyxTQUFTLEVBQUUsU0FBUyxFQUFFLGNBQWMsRUFBRSxVQUFVLEVBQUUsUUFBUSxFQUFFLFVBQVUsQ0FBQyxDQUFDO1FBQzVGLE1BQU0sSUFBSSxHQUFH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
@@ -0,0 +1,22 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.GET = GET;
4
+ const documents_1 = require("../../../../../modules/documents");
5
+ // GET /store/documents/r/:code
6
+ async function GET(req, res) {
7
+ const code = req.params.code;
8
+ const documentService = req.scope.resolve(documents_1.DOCUMENTS_MODULE);
9
+ const links = await documentService.listDocumentLinks({ shortcode: code });
10
+ if (links && links.length > 0) {
11
+ let targetUrl = links[0].url;
12
+ if (targetUrl.startsWith("/")) {
13
+ const host = req.get("host") || "localhost:9000";
14
+ const protocol = req.protocol || "http";
15
+ targetUrl = `${protocol}://${host}${targetUrl}`;
16
+ }
17
+ res.setHeader("Location", targetUrl);
18
+ return res.status(302).send("Redirecting...");
19
+ }
20
+ return res.status(404).send("Document link not found or expired.");
21
+ }
22
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm91dGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBpL3N0b3JlL2RvY3VtZW50cy9yL1tjb2RlXS9yb3V0ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUtBLGtCQWtCQztBQXRCRCxnRUFBb0U7QUFHcEUsK0JBQStCO0FBQ3hCLEtBQUssVUFBVSxHQUFHLENBQUMsR0FBb0MsRUFBRSxHQUFtQjtJQUNqRixNQUFNLElBQUksR0FBRyxHQUFHLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQztJQUM3QixNQUFNLGVBQWUsR0FBMEIsR0FBRyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsNEJBQWdCLENBQUMsQ0FBQztJQUVuRixNQUFNLEtBQUssR0FBRyxNQUFNLGVBQWUsQ0FBQyxpQkFBaUIsQ0FBQyxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO0lBRTNFLElBQUksS0FBSyxJQUFJLEtBQUssQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUM7UUFDOUIsSUFBSSxTQUFTLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQztRQUM3QixJQUFJLFNBQVMsQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQztZQUM5QixNQUFNLElBQUksR0FBRyxHQUFHLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxJQUFJLGdCQUFnQixDQUFDO1lBQ2pELE1BQU0sUUFBUSxHQUFHLEdBQUcsQ0FBQyxRQUFRLElBQUksTUFBTSxDQUFDO1lBQ3hDLFNBQVMsR0FBRyxHQUFHLFFBQVEsTUFBTSxJQUFJLEdBQUcsU0FBUyxFQUFFLENBQUM7UUFDbEQsQ0FBQztRQUNELEdBQUcsQ0FBQyxTQUFTLENBQUMsVUFBVSxFQUFFLFNBQVMsQ0FBQyxDQUFDO1FBQ3JDLE9BQU8sR0FBRyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztJQUNoRCxDQUFDO0lBRUQsT0FBTyxHQUFHLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxxQ0FBcUMsQ0FBQyxDQUFDO0FBQ3JFLENBQUMifQ==
@@ -0,0 +1,27 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
+ };
16
+ var __importDefault = (this && this.__importDefault) || function (mod) {
17
+ return (mod && mod.__esModule) ? mod : { "default": mod };
18
+ };
19
+ Object.defineProperty(exports, "__esModule", { value: true });
20
+ exports.delegateDocumentGeneration = exports.DOCUMENTS_MODULE = exports.default = void 0;
21
+ var documents_1 = require("./modules/documents");
22
+ Object.defineProperty(exports, "default", { enumerable: true, get: function () { return __importDefault(documents_1).default; } });
23
+ Object.defineProperty(exports, "DOCUMENTS_MODULE", { enumerable: true, get: function () { return documents_1.DOCUMENTS_MODULE; } });
24
+ __exportStar(require("./workflows"), exports);
25
+ var integrate_1 = require("./utils/integrate");
26
+ Object.defineProperty(exports, "delegateDocumentGeneration", { enumerable: true, get: function () { return integrate_1.delegateDocumentGeneration; } });
27
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSxpREFBZ0U7QUFBdkQscUhBQUEsT0FBTyxPQUFBO0FBQUUsNkdBQUEsZ0JBQWdCLE9BQUE7QUFDbEMsOENBQTRCO0FBQzVCLCtDQUErRDtBQUF0RCx1SEFBQSwwQkFBMEIsT0FBQSJ9
@@ -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.DOCUMENTS_MODULE = void 0;
7
+ const service_1 = __importDefault(require("./service"));
8
+ const utils_1 = require("@medusajs/framework/utils");
9
+ exports.DOCUMENTS_MODULE = "documents";
10
+ exports.default = (0, utils_1.Module)(exports.DOCUMENTS_MODULE, {
11
+ service: service_1.default,
12
+ });
13
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvbW9kdWxlcy9kb2N1bWVudHMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQUEsd0RBQThDO0FBQzlDLHFEQUFtRDtBQUV0QyxRQUFBLGdCQUFnQixHQUFHLFdBQVcsQ0FBQztBQUU1QyxrQkFBZSxJQUFBLGNBQU0sRUFBQyx3QkFBZ0IsRUFBRTtJQUN0QyxPQUFPLEVBQUUsaUJBQXFCO0NBQy9CLENBQUMsQ0FBQyJ9
@@ -0,0 +1,23 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.Migration20261012164601 = void 0;
4
+ const migrations_1 = require("@medusajs/framework/mikro-orm/migrations");
5
+ class Migration20261012164601 extends migrations_1.Migration {
6
+ async up() {
7
+ this.addSql(`alter table if exists "document_link" drop constraint if exists "document_link_shortcode_unique";`);
8
+ this.addSql(`create table if not exists "document_link" ("id" text not null, "shortcode" text not null, "url" text not null, "metadata" jsonb null, "created_at" timestamptz not null default now(), "updated_at" timestamptz not null default now(), "deleted_at" timestamptz null, constraint "document_link_pkey" primary key ("id"));`);
9
+ this.addSql(`CREATE UNIQUE INDEX IF NOT EXISTS "IDX_document_link_shortcode_unique" ON "document_link" ("shortcode") WHERE deleted_at IS NULL;`);
10
+ this.addSql(`CREATE INDEX IF NOT EXISTS "IDX_document_link_deleted_at" ON "document_link" ("deleted_at") WHERE deleted_at IS NULL;`);
11
+ this.addSql(`create table if not exists "document_record" ("id" text not null, "display_id" text not null, "title" text not null default 'Document', "type" text not null, "source" text not null default 'pdfkit', "status" text not null default 'draft', "customer_name" text null, "customer_email" text null, "customer_phone" text null, "order_id" text null, "repair_ticket_id" text null, "zoho_document_id" text null, "total_amount" integer not null default 0, "currency_code" text not null default 'usd', "payment_status" text not null default 'unpaid', "payment_link" text null, "short_payment_link" text null, "pdf_url" text null, "short_pdf_link" text null, "metadata" jsonb null, "created_at" timestamptz not null default now(), "updated_at" timestamptz not null default now(), "deleted_at" timestamptz null, constraint "document_record_pkey" primary key ("id"));`);
12
+ this.addSql(`CREATE INDEX IF NOT EXISTS "IDX_document_record_deleted_at" ON "document_record" ("deleted_at") WHERE deleted_at IS NULL;`);
13
+ this.addSql(`create table if not exists "document_settings" ("id" text not null, "email_notifications_enabled" boolean not null default true, "sms_notifications_enabled" boolean not null default true, "whatsapp_notifications_enabled" boolean not null default true, "event_order_placed_enabled" boolean not null default true, "event_order_completed_enabled" boolean not null default true, "event_payment_captured_enabled" boolean not null default true, "event_order_fulfillment_enabled" boolean not null default true, "event_repair_status_changed_enabled" boolean not null default true, "event_repair_compliance_enabled" boolean not null default true, "event_repair_created_enabled" boolean not null default true, "event_repair_completed_enabled" boolean not null default true, "event_repair_reminder_enabled" boolean not null default true, "zoho_books_enabled" boolean not null default false, "zoho_client_id" text null, "zoho_client_secret" text null, "zoho_refresh_token" text null, "zoho_organization_id" text null, "zoho_domain" text not null default 'com', "zoho_invoice_terms" text null, "zoho_invoice_notes" text null, "zoho_estimate_terms" text null, "zoho_payment_terms_days" integer not null default 0, "zoho_tax_inclusive" boolean not null default false, "zoho_invoice_prefix" text not null default 'INV-', "zoho_include_payment_qr" boolean not null default true, "zoho_custom_field_payment_link" text null, "company_name" text not null default 'Company Store', "storefront_url" text null, "pdf_logo_url" text null, "pdf_address" text null, "pdf_phone" text null, "pdf_email" text null, "pdf_website" text null, "pdf_payment_details" text null, "pdf_terms" text null, "invoice_template" text not null default 'modern', "packing_slip_template" text not null default 'modern', "receipt_template" text not null default 'modern', "estimate_template" text not null default 'modern', "job_card_template" text not null default 'modern', "custom_doc_template" text not null default 'modern', "email_subject_template" text null, "email_body_template" text null, "sms_body_template" text null, "whatsapp_body_template" text null, "created_at" timestamptz not null default now(), "updated_at" timestamptz not null default now(), "deleted_at" timestamptz null, constraint "document_settings_pkey" primary key ("id"));`);
14
+ this.addSql(`CREATE INDEX IF NOT EXISTS "IDX_document_settings_deleted_at" ON "document_settings" ("deleted_at") WHERE deleted_at IS NULL;`);
15
+ }
16
+ async down() {
17
+ this.addSql(`drop table if exists "document_link" cascade;`);
18
+ this.addSql(`drop table if exists "document_record" cascade;`);
19
+ this.addSql(`drop table if exists "document_settings" cascade;`);
20
+ }
21
+ }
22
+ exports.Migration20261012164601 = Migration20261012164601;
23
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTWlncmF0aW9uMjAyNjEwMTIxNjQ2MDEuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvbW9kdWxlcy9kb2N1bWVudHMvbWlncmF0aW9ucy9NaWdyYXRpb24yMDI2MTAxMjE2NDYwMS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSx5RUFBcUU7QUFFckUsTUFBYSx1QkFBd0IsU0FBUSxzQkFBUztJQUUzQyxLQUFLLENBQUMsRUFBRTtRQUNmLElBQUksQ0FBQyxNQUFNLENBQUMsbUdBQW1HLENBQUMsQ0FBQztRQUNqSCxJQUFJLENBQUMsTUFBTSxDQUFDLDhUQUE4VCxDQUFDLENBQUM7UUFDNVUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxtSUFBbUksQ0FBQyxDQUFDO1FBQ2pKLElBQUksQ0FBQyxNQUFNLENBQUMsdUhBQXVILENBQUMsQ0FBQztRQUVySSxJQUFJLENBQUMsTUFBTSxDQUFDLHcxQkFBdzFCLENBQUMsQ0FBQztRQUN0MkIsSUFBSSxDQUFDLE1BQU0sQ0FBQywySEFBMkgsQ0FBQyxDQUFDO1FBRXpJLElBQUksQ0FBQyxNQUFNLENBQUMsaXdFQUFpd0UsQ0FBQyxDQUFDO1FBQy93RSxJQUFJLENBQUMsTUFBTSxDQUFDLCtIQUErSCxDQUFDLENBQUM7SUFDL0ksQ0FBQztJQUVRLEtBQUssQ0FBQyxJQUFJO1FBQ2pCLElBQUksQ0FBQyxNQUFNLENBQUMsK0NBQStDLENBQUMsQ0FBQztRQUM3RCxJQUFJLENBQUMsTUFBTSxDQUFDLGlEQUFpRCxDQUFDLENBQUM7UUFDL0QsSUFBSSxDQUFDLE1BQU0sQ0FBQyxtREFBbUQsQ0FBQyxDQUFDO0lBQ25FLENBQUM7Q0FFRjtBQXJCRCwwREFxQkMifQ==
@@ -0,0 +1,20 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.Migration20261014150000 = void 0;
4
+ const migrations_1 = require("@medusajs/framework/mikro-orm/migrations");
5
+ class Migration20261014150000 extends migrations_1.Migration {
6
+ async up() {
7
+ this.addSql(`alter table if exists "document_settings" add column if not exists "email_subject_template" text null;`);
8
+ this.addSql(`alter table if exists "document_settings" add column if not exists "email_body_template" text null;`);
9
+ this.addSql(`alter table if exists "document_settings" add column if not exists "sms_body_template" text null;`);
10
+ this.addSql(`alter table if exists "document_settings" add column if not exists "whatsapp_body_template" text null;`);
11
+ }
12
+ async down() {
13
+ this.addSql(`alter table if exists "document_settings" drop column if exists "email_subject_template";`);
14
+ this.addSql(`alter table if exists "document_settings" drop column if exists "email_body_template";`);
15
+ this.addSql(`alter table if exists "document_settings" drop column if exists "sms_body_template";`);
16
+ this.addSql(`alter table if exists "document_settings" drop column if exists "whatsapp_body_template";`);
17
+ }
18
+ }
19
+ exports.Migration20261014150000 = Migration20261014150000;
20
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTWlncmF0aW9uMjAyNjEwMTQxNTAwMDAuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvbW9kdWxlcy9kb2N1bWVudHMvbWlncmF0aW9ucy9NaWdyYXRpb24yMDI2MTAxNDE1MDAwMC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSx5RUFBcUU7QUFFckUsTUFBYSx1QkFBd0IsU0FBUSxzQkFBUztJQUUzQyxLQUFLLENBQUMsRUFBRTtRQUNmLElBQUksQ0FBQyxNQUFNLENBQUMsd0dBQXdHLENBQUMsQ0FBQztRQUN0SCxJQUFJLENBQUMsTUFBTSxDQUFDLHFHQUFxRyxDQUFDLENBQUM7UUFDbkgsSUFBSSxDQUFDLE1BQU0sQ0FBQyxtR0FBbUcsQ0FBQyxDQUFDO1FBQ2pILElBQUksQ0FBQyxNQUFNLENBQUMsd0dBQXdHLENBQUMsQ0FBQztJQUN4SCxDQUFDO0lBRVEsS0FBSyxDQUFDLElBQUk7UUFDakIsSUFBSSxDQUFDLE1BQU0sQ0FBQywyRkFBMkYsQ0FBQyxDQUFDO1FBQ3pHLElBQUksQ0FBQyxNQUFNLENBQUMsd0ZBQXdGLENBQUMsQ0FBQztRQUN0RyxJQUFJLENBQUMsTUFBTSxDQUFDLHNGQUFzRixDQUFDLENBQUM7UUFDcEcsSUFBSSxDQUFDLE1BQU0sQ0FBQywyRkFBMkYsQ0FBQyxDQUFDO0lBQzNHLENBQUM7Q0FFRjtBQWhCRCwwREFnQkMifQ==
@@ -0,0 +1,46 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.Migration20261015160000 = void 0;
4
+ const migrations_1 = require("@medusajs/framework/mikro-orm/migrations");
5
+ class Migration20261015160000 extends migrations_1.Migration {
6
+ async up() {
7
+ this.addSql(`alter table if exists "document_settings" add column if not exists "event_order_canceled_enabled" boolean not null default true;`);
8
+ this.addSql(`alter table if exists "document_settings" add column if not exists "order_placed_email_subject" text null;`);
9
+ this.addSql(`alter table if exists "document_settings" add column if not exists "order_placed_email_template" text null;`);
10
+ this.addSql(`alter table if exists "document_settings" add column if not exists "order_placed_sms_template" text null;`);
11
+ this.addSql(`alter table if exists "document_settings" add column if not exists "order_placed_whatsapp_template" text null;`);
12
+ this.addSql(`alter table if exists "document_settings" add column if not exists "order_payment_email_subject" text null;`);
13
+ this.addSql(`alter table if exists "document_settings" add column if not exists "order_payment_email_template" text null;`);
14
+ this.addSql(`alter table if exists "document_settings" add column if not exists "order_payment_sms_template" text null;`);
15
+ this.addSql(`alter table if exists "document_settings" add column if not exists "order_payment_whatsapp_template" text null;`);
16
+ this.addSql(`alter table if exists "document_settings" add column if not exists "order_fulfillment_email_subject" text null;`);
17
+ this.addSql(`alter table if exists "document_settings" add column if not exists "order_fulfillment_email_template" text null;`);
18
+ this.addSql(`alter table if exists "document_settings" add column if not exists "order_fulfillment_sms_template" text null;`);
19
+ this.addSql(`alter table if exists "document_settings" add column if not exists "order_fulfillment_whatsapp_template" text null;`);
20
+ this.addSql(`alter table if exists "document_settings" add column if not exists "order_canceled_email_subject" text null;`);
21
+ this.addSql(`alter table if exists "document_settings" add column if not exists "order_canceled_email_template" text null;`);
22
+ this.addSql(`alter table if exists "document_settings" add column if not exists "order_canceled_sms_template" text null;`);
23
+ this.addSql(`alter table if exists "document_settings" add column if not exists "order_canceled_whatsapp_template" text null;`);
24
+ }
25
+ async down() {
26
+ this.addSql(`alter table if exists "document_settings" drop column if exists "event_order_canceled_enabled";`);
27
+ this.addSql(`alter table if exists "document_settings" drop column if exists "order_placed_email_subject";`);
28
+ this.addSql(`alter table if exists "document_settings" drop column if exists "order_placed_email_template";`);
29
+ this.addSql(`alter table if exists "document_settings" drop column if exists "order_placed_sms_template";`);
30
+ this.addSql(`alter table if exists "document_settings" drop column if exists "order_placed_whatsapp_template";`);
31
+ this.addSql(`alter table if exists "document_settings" drop column if exists "order_payment_email_subject";`);
32
+ this.addSql(`alter table if exists "document_settings" drop column if exists "order_payment_email_template";`);
33
+ this.addSql(`alter table if exists "document_settings" drop column if exists "order_payment_sms_template";`);
34
+ this.addSql(`alter table if exists "document_settings" drop column if exists "order_payment_whatsapp_template";`);
35
+ this.addSql(`alter table if exists "document_settings" drop column if exists "order_fulfillment_email_subject";`);
36
+ this.addSql(`alter table if exists "document_settings" drop column if exists "order_fulfillment_email_template";`);
37
+ this.addSql(`alter table if exists "document_settings" drop column if exists "order_fulfillment_sms_template";`);
38
+ this.addSql(`alter table if exists "document_settings" drop column if exists "order_fulfillment_whatsapp_template";`);
39
+ this.addSql(`alter table if exists "document_settings" drop column if exists "order_canceled_email_subject";`);
40
+ this.addSql(`alter table if exists "document_settings" drop column if exists "order_canceled_email_template";`);
41
+ this.addSql(`alter table if exists "document_settings" drop column if exists "order_canceled_sms_template";`);
42
+ this.addSql(`alter table if exists "document_settings" drop column if exists "order_canceled_whatsapp_template";`);
43
+ }
44
+ }
45
+ exports.Migration20261015160000 = Migration20261015160000;
46
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTWlncmF0aW9uMjAyNjEwMTUxNjAwMDAuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvbW9kdWxlcy9kb2N1bWVudHMvbWlncmF0aW9ucy9NaWdyYXRpb24yMDI2MTAxNTE2MDAwMC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSx5RUFBcUU7QUFFckUsTUFBYSx1QkFBd0IsU0FBUSxzQkFBUztJQUUzQyxLQUFLLENBQUMsRUFBRTtRQUNmLElBQUksQ0FBQyxNQUFNLENBQUMsa0lBQWtJLENBQUMsQ0FBQztRQUNoSixJQUFJLENBQUMsTUFBTSxDQUFDLDRHQUE0RyxDQUFDLENBQUM7UUFDMUgsSUFBSSxDQUFDLE1BQU0sQ0FBQyw2R0FBNkcsQ0FBQyxDQUFDO1FBQzNILElBQUksQ0FBQyxNQUFNLENBQUMsMkdBQTJHLENBQUMsQ0FBQztRQUN6SCxJQUFJLENBQUMsTUFBTSxDQUFDLGdIQUFnSCxDQUFDLENBQUM7UUFFOUgsSUFBSSxDQUFDLE1BQU0sQ0FBQyw2R0FBNkcsQ0FBQyxDQUFDO1FBQzNILElBQUksQ0FBQyxNQUFNLENBQUMsOEdBQThHLENBQUMsQ0FBQztRQUM1SCxJQUFJLENBQUMsTUFBTSxDQUFDLDRHQUE0RyxDQUFDLENBQUM7UUFDMUgsSUFBSSxDQUFDLE1BQU0sQ0FBQyxpSEFBaUgsQ0FBQyxDQUFDO1FBRS9ILElBQUksQ0FBQyxNQUFNLENBQUMsaUhBQWlILENBQUMsQ0FBQztRQUMvSCxJQUFJLENBQUMsTUFBTSxDQUFDLGtIQUFrSCxDQUFDLENBQUM7UUFDaEksSUFBSSxDQUFDLE1BQU0sQ0FBQyxnSEFBZ0gsQ0FBQyxDQUFDO1FBQzlILElBQUksQ0FBQyxNQUFNLENBQUMscUhBQXFILENBQUMsQ0FBQztRQUVuSSxJQUFJLENBQUMsTUFBTSxDQUFDLDhHQUE4RyxDQUFDLENBQUM7UUFDNUgsSUFBSSxDQUFDLE1BQU0sQ0FBQywrR0FBK0csQ0FBQyxDQUFDO1FBQzdILElBQUksQ0FBQyxNQUFNLENBQUMsNkdBQTZHLENBQUMsQ0FBQztRQUMzSCxJQUFJLENBQUMsTUFBTSxDQUFDLGtIQUFrSCxDQUFDLENBQUM7SUFDbEksQ0FBQztJQUVRLEtBQUssQ0FBQyxJQUFJO1FBQ2pCLElBQUksQ0FBQyxNQUFNLENBQUMsaUdBQWlHLENBQUMsQ0FBQztRQUMvRyxJQUFJLENBQUMsTUFBTSxDQUFDLCtGQUErRixDQUFDLENBQUM7UUFDN0csSUFBSSxDQUFDLE1BQU0sQ0FBQyxnR0FBZ0csQ0FBQyxDQUFDO1FBQzlHLElBQUksQ0FBQyxNQUFNLENBQUMsOEZBQThGLENBQUMsQ0FBQztRQUM1RyxJQUFJLENBQUMsTUFBTSxDQUFDLG1HQUFtRyxDQUFDLENBQUM7UUFFakgsSUFBSSxDQUFDLE1BQU0sQ0FBQyxnR0FBZ0csQ0FBQyxDQUFDO1FBQzlHLElBQUksQ0FBQyxNQUFNLENBQUMsaUdBQWlHLENBQUMsQ0FBQztRQUMvRyxJQUFJLENBQUMsTUFBTSxDQUFDLCtGQUErRixDQUFDLENBQUM7UUFDN0csSUFBSSxDQUFDLE1BQU0sQ0FBQyxvR0FBb0csQ0FBQyxDQUFDO1FBRWxILElBQUksQ0FBQyxNQUFNLENBQUMsb0dBQW9HLENBQUMsQ0FBQztRQUNsSCxJQUFJLENBQUMsTUFBTSxDQUFDLHFHQUFxRyxDQUFDLENBQUM7UUFDbkgsSUFBSSxDQUFDLE1BQU0sQ0FBQyxtR0FBbUcsQ0FBQyxDQUFDO1FBQ2pILElBQUksQ0FBQyxNQUFNLENBQUMsd0dBQXdHLENBQUMsQ0FBQztRQUV0SCxJQUFJLENBQUMsTUFBTSxDQUFDLGlHQUFpRyxDQUFDLENBQUM7UUFDL0csSUFBSSxDQUFDLE1BQU0sQ0FBQyxrR0FBa0csQ0FBQyxDQUFDO1FBQ2hILElBQUksQ0FBQyxNQUFNLENBQUMsZ0dBQWdHLENBQUMsQ0FBQztRQUM5RyxJQUFJLENBQUMsTUFBTSxDQUFDLHFHQUFxRyxDQUFDLENBQUM7SUFDckgsQ0FBQztDQUVGO0FBaERELDBEQWdEQyJ9
@@ -0,0 +1,12 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.DocumentLink = void 0;
4
+ const utils_1 = require("@medusajs/framework/utils");
5
+ exports.DocumentLink = utils_1.model.define("document_link", {
6
+ id: utils_1.model.id().primaryKey(),
7
+ shortcode: utils_1.model.text().unique(),
8
+ url: utils_1.model.text(),
9
+ metadata: utils_1.model.json().nullable(),
10
+ });
11
+ exports.default = exports.DocumentLink;
12
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZG9jdW1lbnQtbGluay5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9tb2R1bGVzL2RvY3VtZW50cy9tb2RlbHMvZG9jdW1lbnQtbGluay50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSxxREFBa0Q7QUFFckMsUUFBQSxZQUFZLEdBQUcsYUFBSyxDQUFDLE1BQU0sQ0FBQyxlQUFlLEVBQUU7SUFDeEQsRUFBRSxFQUFFLGFBQUssQ0FBQyxFQUFFLEVBQUUsQ0FBQyxVQUFVLEVBQUU7SUFDM0IsU0FBUyxFQUFFLGFBQUssQ0FBQyxJQUFJLEVBQUUsQ0FBQyxNQUFNLEVBQUU7SUFDaEMsR0FBRyxFQUFFLGFBQUssQ0FBQyxJQUFJLEVBQUU7SUFDakIsUUFBUSxFQUFFLGFBQUssQ0FBQyxJQUFJLEVBQUUsQ0FBQyxRQUFRLEVBQUU7Q0FDbEMsQ0FBQyxDQUFDO0FBRUgsa0JBQWUsb0JBQVksQ0FBQyJ9
@@ -0,0 +1,33 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.DocumentRecord = void 0;
4
+ const utils_1 = require("@medusajs/framework/utils");
5
+ exports.DocumentRecord = utils_1.model.define("document_record", {
6
+ id: utils_1.model.id().primaryKey(),
7
+ display_id: utils_1.model.text(), // e.g. "INV-1001", "DOC-501", "RCPT-1001"
8
+ title: utils_1.model.text().default("Document"), // e.g. "Tax Invoice", "Packing Slip", "Warranty Certificate"
9
+ type: utils_1.model.text(), // "invoice" | "receipt" | "estimate" | "packing_slip" | "custom"
10
+ source: utils_1.model.text().default("pdfkit"), // "zoho" | "pdfkit"
11
+ status: utils_1.model.text().default("draft"), // "draft" | "sent" | "paid" | "unpaid" | "void"
12
+ // Recipient details
13
+ customer_name: utils_1.model.text().nullable(),
14
+ customer_email: utils_1.model.text().nullable(),
15
+ customer_phone: utils_1.model.text().nullable(),
16
+ // Relationships / references
17
+ order_id: utils_1.model.text().nullable(),
18
+ repair_ticket_id: utils_1.model.text().nullable(),
19
+ zoho_document_id: utils_1.model.text().nullable(), // ID from Zoho Books API
20
+ // Financial fields
21
+ total_amount: utils_1.model.number().default(0),
22
+ currency_code: utils_1.model.text().default("usd"),
23
+ payment_status: utils_1.model.text().default("unpaid"), // "paid" | "unpaid" | "not_applicable"
24
+ // Links
25
+ payment_link: utils_1.model.text().nullable(),
26
+ short_payment_link: utils_1.model.text().nullable(),
27
+ pdf_url: utils_1.model.text().nullable(),
28
+ short_pdf_link: utils_1.model.text().nullable(),
29
+ // Structured custom data & line items
30
+ metadata: utils_1.model.json().nullable(),
31
+ });
32
+ exports.default = exports.DocumentRecord;
33
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZG9jdW1lbnQtcmVjb3JkLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL21vZHVsZXMvZG9jdW1lbnRzL21vZGVscy9kb2N1bWVudC1yZWNvcmQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEscURBQWtEO0FBRXJDLFFBQUEsY0FBYyxHQUFHLGFBQUssQ0FBQyxNQUFNLENBQUMsaUJBQWlCLEVBQUU7SUFDNUQsRUFBRSxFQUFFLGFBQUssQ0FBQyxFQUFFLEVBQUUsQ0FBQyxVQUFVLEVBQUU7SUFDM0IsVUFBVSxFQUFFLGFBQUssQ0FBQyxJQUFJLEVBQUUsRUFBRSwwQ0FBMEM7SUFDcEUsS0FBSyxFQUFFLGFBQUssQ0FBQyxJQUFJLEVBQUUsQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLEVBQUUsNkRBQTZEO0lBQ3RHLElBQUksRUFBRSxhQUFLLENBQUMsSUFBSSxFQUFFLEVBQUUsaUVBQWlFO0lBQ3JGLE1BQU0sRUFBRSxhQUFLLENBQUMsSUFBSSxFQUFFLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxFQUFFLG9CQUFvQjtJQUM1RCxNQUFNLEVBQUUsYUFBSyxDQUFDLElBQUksRUFBRSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsRUFBRSxnREFBZ0Q7SUFFdkYsb0JBQW9CO0lBQ3BCLGFBQWEsRUFBRSxhQUFLLENBQUMsSUFBSSxFQUFFLENBQUMsUUFBUSxFQUFFO0lBQ3RDLGNBQWMsRUFBRSxhQUFLLENBQUMsSUFBSSxFQUFFLENBQUMsUUFBUSxFQUFFO0lBQ3ZDLGNBQWMsRUFBRSxhQUFLLENBQUMsSUFBSSxFQUFFLENBQUMsUUFBUSxFQUFFO0lBRXZDLDZCQUE2QjtJQUM3QixRQUFRLEVBQUUsYUFBSyxDQUFDLElBQUksRUFBRSxDQUFDLFFBQVEsRUFBRTtJQUNqQyxnQkFBZ0IsRUFBRSxhQUFLLENBQUMsSUFBSSxFQUFFLENBQUMsUUFBUSxFQUFFO0lBQ3pDLGdCQUFnQixFQUFFLGFBQUssQ0FBQyxJQUFJLEVBQUUsQ0FBQyxRQUFRLEVBQUUsRUFBRSx5QkFBeUI7SUFFcEUsbUJBQW1CO0lBQ25CLFlBQVksRUFBRSxhQUFLLENBQUMsTUFBTSxFQUFFLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQztJQUN2QyxhQUFhLEVBQUUsYUFBSyxDQUFDLElBQUksRUFBRSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUM7SUFDMUMsY0FBYyxFQUFFLGFBQUssQ0FBQyxJQUFJLEVBQUUsQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLEVBQUUsdUNBQXVDO0lBRXZGLFFBQVE7SUFDUixZQUFZLEVBQUUsYUFBSyxDQUFDLElBQUksRUFBRSxDQUFDLFFBQVEsRUFBRTtJQUNyQyxrQkFBa0IsRUFBRSxhQUFLLENBQUMsSUFBSSxFQUFFLENBQUMsUUFBUSxFQUFFO0lBQzNDLE9BQU8sRUFBRSxhQUFLLENBQUMsSUFBSSxFQUFFLENBQUMsUUFBUSxFQUFFO0lBQ2hDLGNBQWMsRUFBRSxhQUFLLENBQUMsSUFBSSxFQUFFLENBQUMsUUFBUSxFQUFFO0lBRXZDLHNDQUFzQztJQUN0QyxRQUFRLEVBQUUsYUFBSyxDQUFDLElBQUksRUFBRSxDQUFDLFFBQVEsRUFBRTtDQUNsQyxDQUFDLENBQUM7QUFFSCxrQkFBZSxzQkFBYyxDQUFDIn0=
@@ -0,0 +1,79 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.DocumentSettings = void 0;
4
+ const utils_1 = require("@medusajs/framework/utils");
5
+ exports.DocumentSettings = utils_1.model.define("document_settings", {
6
+ id: utils_1.model.id().primaryKey(),
7
+ // Notification channels
8
+ email_notifications_enabled: utils_1.model.boolean().default(true),
9
+ sms_notifications_enabled: utils_1.model.boolean().default(true),
10
+ whatsapp_notifications_enabled: utils_1.model.boolean().default(true),
11
+ // Automation / Event Subscribers on/off toggles
12
+ event_order_placed_enabled: utils_1.model.boolean().default(true),
13
+ event_order_completed_enabled: utils_1.model.boolean().default(true),
14
+ event_payment_captured_enabled: utils_1.model.boolean().default(true),
15
+ event_order_fulfillment_enabled: utils_1.model.boolean().default(true),
16
+ event_order_canceled_enabled: utils_1.model.boolean().default(true),
17
+ event_repair_status_changed_enabled: utils_1.model.boolean().default(true),
18
+ event_repair_compliance_enabled: utils_1.model.boolean().default(true),
19
+ event_repair_created_enabled: utils_1.model.boolean().default(true),
20
+ event_repair_completed_enabled: utils_1.model.boolean().default(true),
21
+ event_repair_reminder_enabled: utils_1.model.boolean().default(true),
22
+ // Zoho Books Credentials
23
+ zoho_books_enabled: utils_1.model.boolean().default(false),
24
+ zoho_client_id: utils_1.model.text().nullable(),
25
+ zoho_client_secret: utils_1.model.text().nullable(),
26
+ zoho_refresh_token: utils_1.model.text().nullable(),
27
+ zoho_organization_id: utils_1.model.text().nullable(),
28
+ zoho_domain: utils_1.model.text().default("com"),
29
+ // Exposed Zoho Customizations
30
+ zoho_invoice_terms: utils_1.model.text().nullable(),
31
+ zoho_invoice_notes: utils_1.model.text().nullable(),
32
+ zoho_estimate_terms: utils_1.model.text().nullable(),
33
+ zoho_payment_terms_days: utils_1.model.number().default(0),
34
+ zoho_tax_inclusive: utils_1.model.boolean().default(false),
35
+ zoho_invoice_prefix: utils_1.model.text().default("INV-"),
36
+ zoho_include_payment_qr: utils_1.model.boolean().default(true),
37
+ zoho_custom_field_payment_link: utils_1.model.text().nullable(),
38
+ // Company Details & PDF Branding
39
+ company_name: utils_1.model.text().default("Company Store"),
40
+ storefront_url: utils_1.model.text().nullable(),
41
+ pdf_logo_url: utils_1.model.text().nullable(),
42
+ pdf_address: utils_1.model.text().nullable(),
43
+ pdf_phone: utils_1.model.text().nullable(),
44
+ pdf_email: utils_1.model.text().nullable(),
45
+ pdf_website: utils_1.model.text().nullable(),
46
+ pdf_payment_details: utils_1.model.text().nullable(),
47
+ pdf_terms: utils_1.model.text().nullable(),
48
+ // PDFKit Template Selections
49
+ invoice_template: utils_1.model.text().default("modern"),
50
+ packing_slip_template: utils_1.model.text().default("modern"),
51
+ receipt_template: utils_1.model.text().default("modern"),
52
+ estimate_template: utils_1.model.text().default("modern"),
53
+ job_card_template: utils_1.model.text().default("modern"),
54
+ custom_doc_template: utils_1.model.text().default("modern"),
55
+ // Customizable Notification Body & Subject Templates (Global / Document-level)
56
+ email_subject_template: utils_1.model.text().nullable(),
57
+ email_body_template: utils_1.model.text().nullable(),
58
+ sms_body_template: utils_1.model.text().nullable(),
59
+ whatsapp_body_template: utils_1.model.text().nullable(),
60
+ // Dedicated Store Order Notification Templates
61
+ order_placed_email_subject: utils_1.model.text().nullable(),
62
+ order_placed_email_template: utils_1.model.text().nullable(),
63
+ order_placed_sms_template: utils_1.model.text().nullable(),
64
+ order_placed_whatsapp_template: utils_1.model.text().nullable(),
65
+ order_payment_email_subject: utils_1.model.text().nullable(),
66
+ order_payment_email_template: utils_1.model.text().nullable(),
67
+ order_payment_sms_template: utils_1.model.text().nullable(),
68
+ order_payment_whatsapp_template: utils_1.model.text().nullable(),
69
+ order_fulfillment_email_subject: utils_1.model.text().nullable(),
70
+ order_fulfillment_email_template: utils_1.model.text().nullable(),
71
+ order_fulfillment_sms_template: utils_1.model.text().nullable(),
72
+ order_fulfillment_whatsapp_template: utils_1.model.text().nullable(),
73
+ order_canceled_email_subject: utils_1.model.text().nullable(),
74
+ order_canceled_email_template: utils_1.model.text().nullable(),
75
+ order_canceled_sms_template: utils_1.model.text().nullable(),
76
+ order_canceled_whatsapp_template: utils_1.model.text().nullable(),
77
+ });
78
+ exports.default = exports.DocumentSettings;
79
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZG9jdW1lbnQtc2V0dGluZ3MuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvbW9kdWxlcy9kb2N1bWVudHMvbW9kZWxzL2RvY3VtZW50LXNldHRpbmdzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLHFEQUFrRDtBQUVyQyxRQUFBLGdCQUFnQixHQUFHLGFBQUssQ0FBQyxNQUFNLENBQUMsbUJBQW1CLEVBQUU7SUFDaEUsRUFBRSxFQUFFLGFBQUssQ0FBQyxFQUFFLEVBQUUsQ0FBQyxVQUFVLEVBQUU7SUFFM0Isd0JBQXdCO0lBQ3hCLDJCQUEyQixFQUFFLGFBQUssQ0FBQyxPQUFPLEVBQUUsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDO0lBQzFELHlCQUF5QixFQUFFLGFBQUssQ0FBQyxPQUFPLEVBQUUsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDO0lBQ3hELDhCQUE4QixFQUFFLGFBQUssQ0FBQyxPQUFPLEVBQUUsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDO0lBRTdELGdEQUFnRDtJQUNoRCwwQkFBMEIsRUFBRSxhQUFLLENBQUMsT0FBTyxFQUFFLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQztJQUN6RCw2QkFBNkIsRUFBRSxhQUFLLENBQUMsT0FBTyxFQUFFLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQztJQUM1RCw4QkFBOEIsRUFBRSxhQUFLLENBQUMsT0FBTyxFQUFFLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQztJQUM3RCwrQkFBK0IsRUFBRSxhQUFLLENBQUMsT0FBTyxFQUFFLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQztJQUM5RCw0QkFBNEIsRUFBRSxhQUFLLENBQUMsT0FBTyxFQUFFLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQztJQUMzRCxtQ0FBbUMsRUFBRSxhQUFLLENBQUMsT0FBTyxFQUFFLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQztJQUNsRSwrQkFBK0IsRUFBRSxhQUFLLENBQUMsT0FBTyxFQUFFLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQztJQUM5RCw0QkFBNEIsRUFBRSxhQUFLLENBQUMsT0FBTyxFQUFFLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQztJQUMzRCw4QkFBOEIsRUFBRSxhQUFLLENBQUMsT0FBTyxFQUFFLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQztJQUM3RCw2QkFBNkIsRUFBRSxhQUFLLENBQUMsT0FBTyxFQUFFLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQztJQUU1RCx5QkFBeUI7SUFDekIsa0JBQWtCLEVBQUUsYUFBSyxDQUFDLE9BQU8sRUFBRSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUM7SUFDbEQsY0FBYyxFQUFFLGFBQUssQ0FBQyxJQUFJLEVBQUUsQ0FBQyxRQUFRLEVBQUU7SUFDdkMsa0JBQWtCLEVBQUUsYUFBSyxDQUFDLElBQUksRUFBRSxDQUFDLFFBQVEsRUFBRTtJQUMzQyxrQkFBa0IsRUFBRSxhQUFLLENBQUMsSUFBSSxFQUFFLENBQUMsUUFBUSxFQUFFO0lBQzNDLG9CQUFvQixFQUFFLGFBQUssQ0FBQyxJQUFJLEVBQUUsQ0FBQyxRQUFRLEVBQUU7SUFDN0MsV0FBVyxFQUFFLGFBQUssQ0FBQyxJQUFJLEVBQUUsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDO0lBRXhDLDhCQUE4QjtJQUM5QixrQkFBa0IsRUFBRSxhQUFLLENBQUMsSUFBSSxFQUFFLENBQUMsUUFBUSxFQUFFO0lBQzNDLGtCQUFrQixFQUFFLGFBQUssQ0FBQyxJQUFJLEVBQUUsQ0FBQyxRQUFRLEVBQUU7SUFDM0MsbUJBQW1CLEVBQUUsYUFBSyxDQUFDLElBQUksRUFBRSxDQUFDLFFBQVEsRUFBRTtJQUM1Qyx1QkFBdUIsRUFBRSxhQUFLLENBQUMsTUFBTSxFQUFFLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQztJQUNsRCxrQkFBa0IsRUFBRSxhQUFLLENBQUMsT0FBTyxFQUFFLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQztJQUNsRCxtQkFBbUIsRUFBRSxhQUFLLENBQUMsSUFBSSxFQUFFLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQztJQUNqRCx1QkFBdUIsRUFBRSxhQUFLLENBQUMsT0FBTyxFQUFFLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQztJQUN0RCw4QkFBOEIsRUFBRSxhQUFLLENBQUMsSUFBSSxFQUFFLENBQUMsUUFBUSxFQUFFO0lBRXZELGlDQUFpQztJQUNqQyxZQUFZLEVBQUUsYUFBSyxDQUFDLElBQUksRUFBRSxDQUFDLE9BQU8sQ0FBQyxlQUFlLENBQUM7SUFDbkQsY0FBYyxFQUFFLGFBQUssQ0FBQyxJQUFJLEVBQUUsQ0FBQyxRQUFRLEVBQUU7SUFDdkMsWUFBWSxFQUFFLGFBQUssQ0FBQyxJQUFJLEVBQUUsQ0FBQyxRQUFRLEVBQUU7SUFDckMsV0FBVyxFQUFFLGFBQUssQ0FBQyxJQUFJLEVBQUUsQ0FBQyxRQUFRLEVBQUU7SUFDcEMsU0FBUyxFQUFFLGFBQUssQ0FBQyxJQUFJLEVBQUUsQ0FBQyxRQUFRLEVBQUU7SUFDbEMsU0FBUyxFQUFFLGFBQUssQ0FBQyxJQUFJLEVBQUUsQ0FBQyxRQUFRLEVBQUU7SUFDbEMsV0FBVyxFQUFFLGFBQUssQ0FBQyxJQUFJLEVBQUUsQ0FBQyxRQUFRLEVBQUU7SUFDcEMsbUJBQW1CLEVBQUUsYUFBSyxDQUFDLElBQUksRUFBRSxDQUFDLFFBQVEsRUFBRTtJQUM1QyxTQUFTLEVBQUUsYUFBSyxDQUFDLElBQUksRUFBRSxDQUFDLFFBQVEsRUFBRTtJQUVsQyw2QkFBNkI7SUFDN0IsZ0JBQWdCLEVBQUUsYUFBSyxDQUFDLElBQUksRUFBRSxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUM7SUFDaEQscUJBQXFCLEVBQUUsYUFBSyxDQUFDLElBQUksRUFBRSxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUM7SUFDckQsZ0JBQWdCLEVBQUUsYUFBSyxDQUFDLElBQUksRUFBRSxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUM7SUFDaEQsaUJBQWlCLEVBQUUsYUFBSyxDQUFDLElBQUksRUFBRSxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUM7SUFDakQsaUJBQWlCLEVBQUUsYUFBSyxDQUFDLElBQUksRUFBRSxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUM7SUFDakQsbUJBQW1CLEVBQUUsYUFBSyxDQUFDLElBQUksRUFBRSxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUM7SUFFbkQsK0VBQStFO0lBQy9FLHNCQUFzQixFQUFFLGFBQUssQ0FBQyxJQUFJLEVBQUUsQ0FBQyxRQUFRLEVBQUU7SUFDL0MsbUJBQW1CLEVBQUUsYUFBSyxDQUFDLElBQUksRUFBRSxDQUFDLFFBQVEsRUFBRTtJQUM1QyxpQkFBaUIsRUFBRSxhQUFLLENBQUMsSUFBSSxFQUFFLENBQUMsUUFBUSxFQUFFO0lBQzFDLHNCQUFzQixFQUFFLGFBQUssQ0FBQyxJQUFJLEVBQUUsQ0FBQyxRQUFRLEVBQUU7SUFFL0MsK0NBQStDO0lBQy9DLDBCQUEwQixFQUFFLGFBQUssQ0FBQyxJQUFJLEVBQUUsQ0FBQyxRQUFRLEVBQUU7SUFDbkQsMkJBQTJCLEVBQUUsYUFBSyxDQUFDLElBQUksRUFBRSxDQUFDLFFBQVEsRUFBRTtJQUNwRCx5QkFBeUIsRUFBRSxhQUFLLENBQUMsSUFBSSxFQUFFLENBQUMsUUFBUSxFQUFFO0lBQ2xELDhCQUE4QixFQUFFLGFBQUssQ0FBQyxJQUFJLEVBQUUsQ0FBQyxRQUFRLEVBQUU7SUFFdkQsMkJBQTJCLEVBQUUsYUFBSyxDQUFDLElBQUksRUFBRSxDQUFDLFFBQVEsRUFBRTtJQUNwRCw0QkFBNEIsRUFBRSxhQUFLLENBQUMsSUFBSSxFQUFFLENBQUMsUUFBUSxFQUFFO0lBQ3JELDBCQUEwQixFQUFFLGFBQUssQ0FBQyxJQUFJLEVBQUUsQ0FBQyxRQUFRLEVBQUU7SUFDbkQsK0JBQStCLEVBQUUsYUFBSyxDQUFDLElBQUksRUFBRSxDQUFDLFFBQVEsRUFBRTtJQUV4RCwrQkFBK0IsRUFBRSxhQUFLLENBQUMsSUFBSSxFQUFFLENBQUMsUUFBUSxFQUFFO0lBQ3hELGdDQUFnQyxFQUFFLGFBQUssQ0FBQyxJQUFJLEVBQUUsQ0FBQyxRQUFRLEVBQUU7SUFDekQsOEJBQThCLEVBQUUsYUFBSyxDQUFDLElBQUksRUFBRSxDQUFDLFFBQVEsRUFBRTtJQUN2RCxtQ0FBbUMsRUFBRSxhQUFLLENBQUMsSUFBSSxFQUFFLENBQUMsUUFBUSxFQUFFO0lBRTVELDRCQUE0QixFQUFFLGFBQUssQ0FBQyxJQUFJLEVBQUUsQ0FBQyxRQUFRLEVBQUU7SUFDckQsNkJBQTZCLEVBQUUsYUFBSyxDQUFDLElBQUksRUFBRSxDQUFDLFFBQVEsRUFBRTtJQUN0RCwyQkFBMkIsRUFBRSxhQUFLLENBQUMsSUFBSSxFQUFFLENBQUMsUUFBUSxFQUFFO0lBQ3BELGdDQUFnQyxFQUFFLGFBQUssQ0FBQyxJQUFJLEVBQUUsQ0FBQyxRQUFRLEVBQUU7Q0FDMUQsQ0FBQyxDQUFDO0FBRUgsa0JBQWUsd0JBQWdCLENBQUMifQ==