medusajs-documents-plugin 1.1.12 → 1.1.14

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.
@@ -62,13 +62,18 @@ async function repairDocumentsSubscriber({ event, container, }) {
62
62
  let customerName = "Valued Customer";
63
63
  let customerEmail = undefined;
64
64
  let customerPhone = undefined;
65
+ let customerCompanyName = ticket.company_name ||
66
+ ticket.customer?.company_name ||
67
+ ticket.metadata?.company_name;
65
68
  if (ticket.customer_id) {
66
69
  try {
67
70
  const customerModule = container.resolve("customer", { allowUnregistered: true });
68
71
  if (customerModule) {
69
72
  const c = await customerModule.retrieveCustomer(ticket.customer_id);
70
73
  if (c) {
71
- customerName = c.first_name ? `${c.first_name} ${c.last_name || ""}`.trim() : c.email;
74
+ customerCompanyName = customerCompanyName || c.company_name || c.metadata?.company_name;
75
+ const personalName = c.first_name ? `${c.first_name} ${c.last_name || ""}`.trim() : "";
76
+ customerName = customerCompanyName || personalName || c.email || customerName;
72
77
  customerEmail = c.email || undefined;
73
78
  customerPhone = c.phone || undefined;
74
79
  }
@@ -76,6 +81,11 @@ async function repairDocumentsSubscriber({ event, container, }) {
76
81
  }
77
82
  catch (e) { }
78
83
  }
84
+ else if (ticket.customer_name || customerCompanyName) {
85
+ customerName = customerCompanyName || ticket.customer_name;
86
+ customerEmail = ticket.customer_email || undefined;
87
+ customerPhone = ticket.customer_phone || undefined;
88
+ }
79
89
  const storeUrl = settings.storefront_url || process.env.STORE_URL || "http://localhost:3000";
80
90
  const paymentInfo = (0, payment_link_1.generateRepairPaymentLink)(ticket, storeUrl);
81
91
  // Fix 4: Build line items mapping inventory parts from product_variants as well as custom_parts
@@ -160,13 +170,40 @@ async function repairDocumentsSubscriber({ event, container, }) {
160
170
  docType = "job_card";
161
171
  docTitle = "Repair Job Card";
162
172
  }
173
+ const cleanTicketNumber = String(ticket.ticket_number || "").replace(/^(JOB-|RT-)+/i, "");
163
174
  const displayId = docType === "job_card"
164
- ? `JOB-${ticket.ticket_number}`
175
+ ? `JOB-${cleanTicketNumber}`
165
176
  : docType === "receipt"
166
- ? `RCPT-${ticket.ticket_number}`
177
+ ? `RCPT-${cleanTicketNumber}`
167
178
  : docType === "estimate"
168
- ? `EST-${ticket.ticket_number}`
169
- : `RT-${ticket.ticket_number}`;
179
+ ? `EST-${cleanTicketNumber}`
180
+ : `RT-${cleanTicketNumber}`;
181
+ let currencyCode = ticket.currency_code || ticket.metadata?.currency_code;
182
+ if (!currencyCode) {
183
+ try {
184
+ const storeModule = container.resolve("store", { allowUnregistered: true });
185
+ if (storeModule) {
186
+ const [store] = await storeModule.listStores();
187
+ if (store?.default_currency_code) {
188
+ currencyCode = store.default_currency_code;
189
+ }
190
+ }
191
+ }
192
+ catch (e) { }
193
+ }
194
+ if (!currencyCode) {
195
+ try {
196
+ const regionModule = container.resolve("region", { allowUnregistered: true });
197
+ if (regionModule) {
198
+ const [reg] = await regionModule.listRegions();
199
+ if (reg?.currency_code) {
200
+ currencyCode = reg.currency_code;
201
+ }
202
+ }
203
+ }
204
+ catch (e) { }
205
+ }
206
+ currencyCode = currencyCode || "kes";
170
207
  const totalEstimate = eventName === "repair.payment_received" && data.amount != null && Number(data.amount) > 0
171
208
  ? Number(data.amount)
172
209
  : Number(ticket.total_actual && ticket.total_actual > 0 ? ticket.total_actual : ticket.total_estimate || 0);
@@ -197,12 +234,13 @@ async function repairDocumentsSubscriber({ event, container, }) {
197
234
  order_id: data.order_id || ticket.order_id || ticket.metadata?.order_id,
198
235
  customer: {
199
236
  name: customerName,
237
+ company_name: customerCompanyName || undefined,
200
238
  email: customerEmail,
201
239
  phone: customerPhone,
202
240
  },
203
241
  items: lineItems,
204
242
  total: totalEstimate,
205
- currency_code: "usd",
243
+ currency_code: currencyCode,
206
244
  payment_status: isPaid ? "paid" : "unpaid",
207
245
  payment_link: paymentOrTrackingLink || undefined,
208
246
  auto_send: autoSend,
@@ -260,4 +298,4 @@ exports.config = {
260
298
  "repair.payment_received",
261
299
  ],
262
300
  };
263
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVwYWlyLWRvY3VtZW50cy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9zdWJzY3JpYmVycy9yZXBhaXItZG9jdW1lbnRzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQU1BLDRDQStRQztBQXBSRCxxREFBc0U7QUFDdEUsb0RBQXdEO0FBRXhELHdEQUFrRTtBQUVuRCxLQUFLLFVBQVUseUJBQXlCLENBQUMsRUFDdEQsS0FBSyxFQUNMLFNBQVMsR0FDVztJQUNwQixNQUFNLE1BQU0sR0FBRyxTQUFTLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQzNDLE1BQU0sU0FBUyxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUM7SUFDN0IsTUFBTSxJQUFJLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQztJQUV4QixNQUFNLENBQUMsSUFBSSxDQUFDLGlEQUFpRCxTQUFTLEdBQUcsQ0FBQyxDQUFDO0lBRTNFLElBQUksQ0FBQztRQUNILE1BQU0sZUFBZSxHQUEwQixTQUFTLENBQUMsT0FBTyxDQUFDLDRCQUFnQixFQUFFO1lBQ2pGLGlCQUFpQixFQUFFLElBQUk7U0FDeEIsQ0FBQyxDQUFDO1FBQ0gsSUFBSSxDQUFDLGVBQWU7WUFBRSxPQUFPO1FBRTdCLE1BQU0sUUFBUSxHQUFHLE1BQU0sZUFBZSxDQUFDLFdBQVcsRUFBRSxDQUFDO1FBRXJELHlGQUF5RjtRQUN6RixNQUFNLFdBQVcsR0FDZixTQUFTLEtBQUssa0JBQWtCO1lBQ2hDLENBQUMsU0FBUyxLQUFLLHVCQUF1QjtnQkFDcEMsQ0FBQyxJQUFJLENBQUMsTUFBTSxLQUFLLFdBQVcsSUFBSSxJQUFJLENBQUMsTUFBTSxLQUFLLFVBQVUsQ0FBQyxDQUFDLENBQUM7UUFFakUsdUJBQXVCO1FBQ3ZCLElBQUksV0FBVyxFQUFFLENBQUM7WUFDaEIsSUFBSSxDQUFDLFFBQVEsQ0FBQyw4QkFBOEIsRUFBRSxDQUFDO2dCQUM3QyxNQUFNLENBQUMsSUFBSSxDQUFD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
301
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVwYWlyLWRvY3VtZW50cy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9zdWJzY3JpYmVycy9yZXBhaXItZG9jdW1lbnRzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQU1BLDRDQW9UQztBQXpURCxxREFBc0U7QUFDdEUsb0RBQXdEO0FBRXhELHdEQUFrRTtBQUVuRCxLQUFLLFVBQVUseUJBQXlCLENBQUMsRUFDdEQsS0FBSyxFQUNMLFNBQVMsR0FDVztJQUNwQixNQUFNLE1BQU0sR0FBRyxTQUFTLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQzNDLE1BQU0sU0FBUyxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUM7SUFDN0IsTUFBTSxJQUFJLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQztJQUV4QixNQUFNLENBQUMsSUFBSSxDQUFDLGlEQUFpRCxTQUFTLEdBQUcsQ0FBQyxDQUFDO0lBRTNFLElBQUksQ0FBQztRQUNILE1BQU0sZUFBZSxHQUEwQixTQUFTLENBQUMsT0FBTyxDQUFDLDRCQUFnQixFQUFFO1lBQ2pGLGlCQUFpQixFQUFFLElBQUk7U0FDeEIsQ0FBQyxDQUFDO1FBQ0gsSUFBSSxDQUFDLGVBQWU7WUFBRSxPQUFPO1FBRTdCLE1BQU0sUUFBUSxHQUFHLE1BQU0sZUFBZSxDQUFDLFdBQVcsRUFBRSxDQUFDO1FBRXJELHlGQUF5RjtRQUN6RixNQUFNLFdBQVcsR0FDZixTQUFTLEtBQUssa0JBQWtCO1lBQ2hDLENBQUMsU0FBUyxLQUFLLHVCQUF1QjtnQkFDcEMsQ0FBQyxJQUFJLENBQUMsTUFBTSxLQUFLLFdBQVcsSUFBSSxJQUFJLENBQUMsTUFBTSxLQUFLLFVBQVUsQ0FBQyxDQUFDLENBQUM7UUFFakUsdUJBQXVCO1FBQ3ZCLElBQUksV0FBVyxFQUFFLENBQUM7WUFDaEIsSUFBSSxDQUFDLFFBQVEsQ0FBQyw4QkFBOEIsRUFBRSxDQUFDO2dCQUM3QyxNQUFNLENBQUMsSUFBSSxDQUFD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
@@ -0,0 +1,168 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.handleShortlinkRedirect = handleShortlinkRedirect;
4
+ const documents_1 = require("../modules/documents");
5
+ const service_1 = require("../modules/documents/service");
6
+ /**
7
+ * Universal safe shortlink redirection handler.
8
+ * Resolves shortcodes from documents module, repair module, or direct knex fallback,
9
+ * safely extracts host and protocol across Express and Fastify environments,
10
+ * and performs redirection without throwing 500 errors.
11
+ */
12
+ async function handleShortlinkRedirect(req, res, contextTag = "Shortlink") {
13
+ const code = req.params?.code;
14
+ if (!code || typeof code !== "string" || !code.trim()) {
15
+ return res.status(404).send("Link not found or expired.");
16
+ }
17
+ const cleanCode = code.trim();
18
+ try {
19
+ let targetUrl = null;
20
+ // 1. Resolve via DocumentModuleService
21
+ try {
22
+ const documentService = req.scope.resolve(documents_1.DOCUMENTS_MODULE, { allowUnregistered: true });
23
+ if (documentService) {
24
+ const links = await documentService.listDocumentLinks({ shortcode: cleanCode }).catch(() => []);
25
+ if (links && links.length > 0 && links[0].url) {
26
+ targetUrl = links[0].url;
27
+ }
28
+ }
29
+ }
30
+ catch (_) { }
31
+ // 2. Resolve via Repair Module if present
32
+ if (!targetUrl) {
33
+ try {
34
+ const repairModule = req.scope.resolve("repair", { allowUnregistered: true });
35
+ if (repairModule && typeof repairModule.listRepairLinks === "function") {
36
+ const links = await repairModule.listRepairLinks({ shortcode: cleanCode }).catch(() => []);
37
+ if (links && links.length > 0 && links[0].url) {
38
+ targetUrl = links[0].url;
39
+ }
40
+ }
41
+ }
42
+ catch (_) { }
43
+ }
44
+ // 3. Fallback direct SQL resolution using Knex
45
+ if (!targetUrl) {
46
+ try {
47
+ const pg = (0, service_1.getDatabaseConnection)(req.scope);
48
+ if (pg) {
49
+ // 3a. document_link table
50
+ try {
51
+ const row = await pg("document_link")
52
+ .where({ shortcode: cleanCode })
53
+ .first();
54
+ if (row && row.url) {
55
+ targetUrl = row.url;
56
+ }
57
+ }
58
+ catch (_) { }
59
+ // 3b. repair_link table
60
+ if (!targetUrl) {
61
+ try {
62
+ const row = await pg("repair_link")
63
+ .where({ shortcode: cleanCode })
64
+ .first();
65
+ if (row && row.url) {
66
+ targetUrl = row.url;
67
+ }
68
+ }
69
+ catch (_) { }
70
+ }
71
+ // 3c. document_record table (search short_payment_link or short_pdf_link)
72
+ if (!targetUrl) {
73
+ try {
74
+ const docRow = await pg("document_record")
75
+ .where(function () {
76
+ this.where("short_payment_link", "like", `%/r/${cleanCode}`)
77
+ .orWhere("short_payment_link", "like", `%/${cleanCode}`)
78
+ .orWhere("short_pdf_link", "like", `%/r/${cleanCode}`)
79
+ .orWhere("short_pdf_link", "like", `%/${cleanCode}`);
80
+ })
81
+ .first();
82
+ if (docRow) {
83
+ if (docRow.short_payment_link && docRow.short_payment_link.endsWith(cleanCode)) {
84
+ targetUrl = docRow.payment_link || docRow.short_payment_link;
85
+ }
86
+ else if (docRow.short_pdf_link && docRow.short_pdf_link.endsWith(cleanCode)) {
87
+ targetUrl = docRow.pdf_url || docRow.short_pdf_link;
88
+ }
89
+ }
90
+ }
91
+ catch (_) { }
92
+ }
93
+ // 3d. repair_ticket table (search short_payment_link)
94
+ if (!targetUrl) {
95
+ try {
96
+ const repRow = await pg("repair_ticket")
97
+ .where(function () {
98
+ this.where("short_payment_link", "like", `%/r/${cleanCode}`)
99
+ .orWhere("short_payment_link", "like", `%/${cleanCode}`);
100
+ })
101
+ .first();
102
+ if (repRow && repRow.payment_link && !repRow.payment_link.endsWith(cleanCode)) {
103
+ targetUrl = repRow.payment_link;
104
+ }
105
+ }
106
+ catch (_) { }
107
+ }
108
+ }
109
+ }
110
+ catch (_) { }
111
+ }
112
+ if (!targetUrl) {
113
+ return res.status(404).send("Link not found or expired.");
114
+ }
115
+ // Safe extraction of host and protocol
116
+ const getHeader = (name) => {
117
+ try {
118
+ if (typeof req.get === "function") {
119
+ const val = req.get(name);
120
+ if (val)
121
+ return val;
122
+ }
123
+ }
124
+ catch (_) { }
125
+ try {
126
+ if (req.headers && typeof req.headers === "object") {
127
+ const val = req.headers[name.toLowerCase()];
128
+ if (Array.isArray(val))
129
+ return val[0];
130
+ if (val != null)
131
+ return String(val);
132
+ }
133
+ }
134
+ catch (_) { }
135
+ return undefined;
136
+ };
137
+ const host = getHeader("x-forwarded-host") ||
138
+ getHeader("host") ||
139
+ req.hostname ||
140
+ "localhost:9000";
141
+ const forwardedProto = getHeader("x-forwarded-proto");
142
+ const protocol = (forwardedProto === "http" || forwardedProto === "https")
143
+ ? forwardedProto
144
+ : (req.protocol || (host.includes("localhost") || host.includes("127.0.0.1") ? "http" : "https"));
145
+ // Normalize any document path pointing to admin or legacy routes
146
+ if (targetUrl.includes("/documents/")) {
147
+ const docSubpath = targetUrl.slice(targetUrl.indexOf("/documents/")).replace(/\/admin\/documents\//, "/documents/");
148
+ targetUrl = `${protocol}://${host}${docSubpath}`;
149
+ }
150
+ else if (targetUrl.startsWith("/")) {
151
+ targetUrl = `${protocol}://${host}${targetUrl}`;
152
+ }
153
+ // Perform redirect safely
154
+ if (typeof res.redirect === "function") {
155
+ return res.redirect(targetUrl);
156
+ }
157
+ res.setHeader("Location", targetUrl);
158
+ return res.status(302).send("Redirecting...");
159
+ }
160
+ catch (err) {
161
+ try {
162
+ req.scope.resolve("logger", { allowUnregistered: true })?.error?.(`[${contextTag}] Error resolving /r/${cleanCode}: ${err.message}`);
163
+ }
164
+ catch (_) { }
165
+ return res.status(500).send("Error resolving link");
166
+ }
167
+ }
168
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2hvcnRsaW5rLXJlc29sdmVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL3V0aWxzL3Nob3J0bGluay1yZXNvbHZlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQVVBLDBEQWlLQztBQTFLRCxvREFBd0Q7QUFDeEQsMERBQTRGO0FBRTVGOzs7OztHQUtHO0FBQ0ksS0FBSyxVQUFVLHVCQUF1QixDQUMzQyxHQUFvQyxFQUNwQyxHQUFtQixFQUNuQixhQUFxQixXQUFXO0lBRWhDLE1BQU0sSUFBSSxHQUFHLEdBQUcsQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDO0lBQzlCLElBQUksQ0FBQyxJQUFJLElBQUksT0FBTyxJQUFJLEtBQUssUUFBUSxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxFQUFFLENBQUM7UUFDdEQsT0FBTyxHQUFHLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyw0QkFBNEIsQ0FBQyxDQUFDO0lBQzVELENBQUM7SUFFRCxNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7SUFFOUIsSUFBSSxDQUFDO1FBQ0gsSUFBSSxTQUFTLEdBQWtCLElBQUksQ0FBQztRQUVwQyx1Q0FBdUM7UUFDdkMsSUFBSSxDQUFDO1lBQ0gsTUFBTSxlQUFlLEdBQTBCLEdBQUcsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLDRCQUFnQixFQUFFLEVBQUUsaUJBQWlCLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztZQUNoSCxJQUFJLGVBQWUsRUFBRSxDQUFDO2dCQUNwQixNQUFNLEtBQUssR0FBRyxNQUFNLGVBQWUsQ0FBQyxpQkFBaUIsQ0FBQyxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQztnQkFDaEcsSUFBSSxLQUFLLElBQUksS0FBSyxDQUFDLE1BQU0sR0FBRyxDQUFDLElB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
package/CHANGELOG.md CHANGED
@@ -7,6 +7,45 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
7
7
 
8
8
  ---
9
9
 
10
+ ## [1.1.14] - 2026-10-16
11
+
12
+ ### Company Name Support, Shortlink 500 Fix, Duplicate Prefix Cleanup & Currency Improvements
13
+
14
+ - **Short Payment Link HTTP 500 Resolution**:
15
+ - Implemented universal `handleShortlinkRedirect` utility protecting against `TypeError: req.get is not a function` across Medusa v2 / Express / Fastify environments.
16
+ - Added safe extraction of `host` (`x-forwarded-host` -> `host` -> `req.hostname` -> `localhost:9000`) and `protocol` (`x-forwarded-proto` -> `req.protocol` -> `https`).
17
+ - Added multi-tier fallback lookup: checks `documents` module, `repair` module, `document_link` table, `repair_link` table, `document_record` table, and `repair_ticket` table.
18
+ - Safe redirect execution via `res.redirect` with fallback to `Location` header + HTTP 302.
19
+ - Updated all shortlink routes: `/r/:code`, `/documents/r/:code`, `/store/documents/r/:code`, and `/api/store/documents/r/:code`.
20
+ - **Customer Company Name Priority**:
21
+ - Prioritized customer `company_name` over personal name across document records, PDFKit generator, and Zoho Books contact synchronization.
22
+ - Updated Modern, Classic, and Minimal PDFKit templates to render `customerDisplayName = data.customer.company_name || data.customer.name` with `(Attn: ${name})` when personal contact name differs.
23
+ - Added `company_name` input fields to manual document and custom document modals in Admin UI.
24
+ - **Prevent Pushing Non-Zoho Documents to Zoho Books**:
25
+ - Disabled and hid the "Push Zoho" action button in Admin UI for non-Zoho document types (`job_card`, `packing_slip`, `custom`) and documents with zero or negative total amounts.
26
+ - Enforced strict validation in `POST /admin/documents/:id/sync-zoho`, rejecting non-Zoho document types and zero-amount documents with informative HTTP 400 messages.
27
+ - **Eliminate Duplicate `RT-` & `JOB-RT-` Reference Prefixes**:
28
+ - Normalized repair ticket number prefixes across `repair-documents` subscriber and document generator to prevent duplicate prefixes such as `RT-RT-...` and `JOB-RT-...`.
29
+ - Output clean formatted reference IDs like `RT-1792156525673-SNL9QH` and `JOB-1792156525673-SNL9QH`.
30
+ - **Live Zoho Books Invoices UI & Hover Tooltip Refresh Button**:
31
+ - Converted the "Refresh Live Zoho" / "View Live Zoho" button in the filter bar and the Live Zoho table header into dedicated `IconButton` components wrapped with interactive hover tooltips (`<Tooltip content="Refresh Live Zoho Books Invoices">`).
32
+ - Live Zoho Books invoices table is permanently visible and automatically synchronized on initial mount, tab switches, and on-demand refreshes.
33
+ - **Default Document Types to Invoices**:
34
+ - Filter bar, preview modal, and manual document creation form now default to `"invoice"` (Tax Invoice / Invoices).
35
+ - **Currency Formatting Defaulted to KES**:
36
+ - Set default currency to `KES` (Kenya Shillings / `KSh 1,500.00`) across all Admin UI tables, amount summaries, PDFKit templates, and notification dispatches when not explicitly overridden by store region settings.
37
+
38
+ ---
39
+
40
+ ## [1.1.13] - 2026-10-16
41
+
42
+ ### Live Zoho Books Invoices View Enhancements
43
+
44
+ - Added persistent Live Zoho Books Invoices table to the Documents Hub.
45
+ - Automatically queries Zoho API upon mounting with localized empty states.
46
+
47
+ ---
48
+
10
49
  ## [1.1.12] - 2026-10-16
11
50
 
12
51
  ### Admin UI Enhancements: Auto-fetch Live Zoho Documents & Invoices Default Filter
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "medusajs-documents-plugin",
3
- "version": "1.1.12",
3
+ "version": "1.1.14",
4
4
  "description": "Comprehensive document generation and management module for Medusa v2 with Zoho Books integration, PDFKit fallback, QR codes, shortlinks, multi-channel notifications and unified admin hub.",
5
5
  "author": "Urban Device Care <info@urbandevicecare.co.uk>",
6
6
  "license": "MIT",