@pvh-afl/core 1.2.40 → 1.2.42

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 (55) hide show
  1. package/dist/integrations/commerce/commerce.types.d.ts +2 -0
  2. package/dist/integrations/commerce/commerce.types.d.ts.map +1 -1
  3. package/dist/integrations/commerce/shopify.service.d.ts.map +1 -1
  4. package/dist/integrations/commerce/shopify.service.js +14 -0
  5. package/dist/integrations/commerce/shopify.service.js.map +1 -1
  6. package/dist/integrations/engagement/index.d.ts +2 -0
  7. package/dist/integrations/engagement/index.d.ts.map +1 -1
  8. package/dist/integrations/engagement/index.js +2 -0
  9. package/dist/integrations/engagement/index.js.map +1 -1
  10. package/dist/integrations/engagement/netcore-email.service.d.ts.map +1 -1
  11. package/dist/integrations/engagement/netcore-email.service.js +3 -1
  12. package/dist/integrations/engagement/netcore-email.service.js.map +1 -1
  13. package/dist/integrations/engagement/netcore-whatsapp.service.d.ts +29 -0
  14. package/dist/integrations/engagement/netcore-whatsapp.service.d.ts.map +1 -0
  15. package/dist/integrations/engagement/netcore-whatsapp.service.js +171 -0
  16. package/dist/integrations/engagement/netcore-whatsapp.service.js.map +1 -0
  17. package/dist/integrations/engagement/netcore-whatsapp.types.d.ts +46 -0
  18. package/dist/integrations/engagement/netcore-whatsapp.types.d.ts.map +1 -0
  19. package/dist/integrations/engagement/netcore-whatsapp.types.js +3 -0
  20. package/dist/integrations/engagement/netcore-whatsapp.types.js.map +1 -0
  21. package/dist/integrations/integrations.module.d.ts.map +1 -1
  22. package/dist/integrations/integrations.module.js +3 -0
  23. package/dist/integrations/integrations.module.js.map +1 -1
  24. package/dist/notifications/index.d.ts +2 -0
  25. package/dist/notifications/index.d.ts.map +1 -1
  26. package/dist/notifications/index.js +2 -0
  27. package/dist/notifications/index.js.map +1 -1
  28. package/dist/notifications/notifications.module.d.ts +2 -2
  29. package/dist/notifications/notifications.module.d.ts.map +1 -1
  30. package/dist/notifications/notifications.module.js +5 -4
  31. package/dist/notifications/notifications.module.js.map +1 -1
  32. package/dist/notifications/order-email.mapper.d.ts +27 -0
  33. package/dist/notifications/order-email.mapper.d.ts.map +1 -1
  34. package/dist/notifications/order-email.mapper.js +53 -9
  35. package/dist/notifications/order-email.mapper.js.map +1 -1
  36. package/dist/notifications/order-email.service.d.ts.map +1 -1
  37. package/dist/notifications/order-email.service.js +3 -0
  38. package/dist/notifications/order-email.service.js.map +1 -1
  39. package/dist/notifications/order-notification.types.d.ts +7 -1
  40. package/dist/notifications/order-notification.types.d.ts.map +1 -1
  41. package/dist/notifications/order-notification.types.js +2 -0
  42. package/dist/notifications/order-notification.types.js.map +1 -1
  43. package/dist/notifications/order-whatsapp.mapper.d.ts +47 -0
  44. package/dist/notifications/order-whatsapp.mapper.d.ts.map +1 -0
  45. package/dist/notifications/order-whatsapp.mapper.js +107 -0
  46. package/dist/notifications/order-whatsapp.mapper.js.map +1 -0
  47. package/dist/notifications/order-whatsapp.service.d.ts +27 -0
  48. package/dist/notifications/order-whatsapp.service.d.ts.map +1 -0
  49. package/dist/notifications/order-whatsapp.service.js +127 -0
  50. package/dist/notifications/order-whatsapp.service.js.map +1 -0
  51. package/dist/notifications/order.source.d.ts +11 -0
  52. package/dist/notifications/order.source.d.ts.map +1 -1
  53. package/dist/notifications/order.source.js +4 -0
  54. package/dist/notifications/order.source.js.map +1 -1
  55. package/package.json +1 -1
@@ -5,5 +5,7 @@ tslib_1.__exportStar(require("./order-notification.types"), exports);
5
5
  tslib_1.__exportStar(require("./order.source"), exports);
6
6
  tslib_1.__exportStar(require("./order-email.mapper"), exports);
7
7
  tslib_1.__exportStar(require("./order-email.service"), exports);
8
+ tslib_1.__exportStar(require("./order-whatsapp.mapper"), exports);
9
+ tslib_1.__exportStar(require("./order-whatsapp.service"), exports);
8
10
  tslib_1.__exportStar(require("./notifications.module"), exports);
9
11
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/notifications/index.ts"],"names":[],"mappings":";;;AAAA,qEAA2C;AAC3C,yDAA+B;AAC/B,+DAAqC;AACrC,gEAAsC;AACtC,iEAAuC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/notifications/index.ts"],"names":[],"mappings":";;;AAAA,qEAA2C;AAC3C,yDAA+B;AAC/B,+DAAqC;AACrC,gEAAsC;AACtC,kEAAwC;AACxC,mEAAyC;AACzC,iEAAuC"}
@@ -1,8 +1,8 @@
1
1
  /**
2
2
  * Order notifications, shared by every brand.
3
3
  *
4
- * `OrderSource` is channel-neutral, so WhatsApp and SMS senders added later
5
- * consume the same snapshot rather than re-querying Shopify.
4
+ * `OrderSource` is channel-neutral, so the email and WhatsApp senders consume
5
+ * the same snapshot rather than each re-querying Shopify.
6
6
  */
7
7
  export declare class NotificationsModule {
8
8
  }
@@ -1 +1 @@
1
- {"version":3,"file":"notifications.module.d.ts","sourceRoot":"","sources":["../../src/notifications/notifications.module.ts"],"names":[],"mappings":"AAKA;;;;;GAKG;AACH,qBAKa,mBAAmB;CAAG"}
1
+ {"version":3,"file":"notifications.module.d.ts","sourceRoot":"","sources":["../../src/notifications/notifications.module.ts"],"names":[],"mappings":"AAMA;;;;;GAKG;AACH,qBAKa,mBAAmB;CAAG"}
@@ -5,12 +5,13 @@ const tslib_1 = require("tslib");
5
5
  const common_1 = require("@nestjs/common");
6
6
  const integrations_module_1 = require("../integrations/integrations.module");
7
7
  const order_email_service_1 = require("./order-email.service");
8
+ const order_whatsapp_service_1 = require("./order-whatsapp.service");
8
9
  const order_source_1 = require("./order.source");
9
10
  /**
10
11
  * Order notifications, shared by every brand.
11
12
  *
12
- * `OrderSource` is channel-neutral, so WhatsApp and SMS senders added later
13
- * consume the same snapshot rather than re-querying Shopify.
13
+ * `OrderSource` is channel-neutral, so the email and WhatsApp senders consume
14
+ * the same snapshot rather than each re-querying Shopify.
14
15
  */
15
16
  let NotificationsModule = class NotificationsModule {
16
17
  };
@@ -18,8 +19,8 @@ exports.NotificationsModule = NotificationsModule;
18
19
  exports.NotificationsModule = NotificationsModule = tslib_1.__decorate([
19
20
  (0, common_1.Module)({
20
21
  imports: [integrations_module_1.IntegrationsModule],
21
- providers: [order_source_1.OrderSource, order_email_service_1.OrderEmailService],
22
- exports: [order_source_1.OrderSource, order_email_service_1.OrderEmailService],
22
+ providers: [order_source_1.OrderSource, order_email_service_1.OrderEmailService, order_whatsapp_service_1.OrderWhatsAppService],
23
+ exports: [order_source_1.OrderSource, order_email_service_1.OrderEmailService, order_whatsapp_service_1.OrderWhatsAppService],
23
24
  })
24
25
  ], NotificationsModule);
25
26
  //# sourceMappingURL=notifications.module.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"notifications.module.js","sourceRoot":"","sources":["../../src/notifications/notifications.module.ts"],"names":[],"mappings":";;;;AAAA,2CAAwC;AACxC,6EAAyE;AACzE,+DAA0D;AAC1D,iDAA6C;AAE7C;;;;;GAKG;AAMI,IAAM,mBAAmB,GAAzB,MAAM,mBAAmB;CAAG,CAAA;AAAtB,kDAAmB;8BAAnB,mBAAmB;IAL/B,IAAA,eAAM,EAAC;QACN,OAAO,EAAE,CAAC,wCAAkB,CAAC;QAC7B,SAAS,EAAE,CAAC,0BAAW,EAAE,uCAAiB,CAAC;QAC3C,OAAO,EAAE,CAAC,0BAAW,EAAE,uCAAiB,CAAC;KAC1C,CAAC;GACW,mBAAmB,CAAG"}
1
+ {"version":3,"file":"notifications.module.js","sourceRoot":"","sources":["../../src/notifications/notifications.module.ts"],"names":[],"mappings":";;;;AAAA,2CAAwC;AACxC,6EAAyE;AACzE,+DAA0D;AAC1D,qEAAgE;AAChE,iDAA6C;AAE7C;;;;;GAKG;AAMI,IAAM,mBAAmB,GAAzB,MAAM,mBAAmB;CAAG,CAAA;AAAtB,kDAAmB;8BAAnB,mBAAmB;IAL/B,IAAA,eAAM,EAAC;QACN,OAAO,EAAE,CAAC,wCAAkB,CAAC;QAC7B,SAAS,EAAE,CAAC,0BAAW,EAAE,uCAAiB,EAAE,6CAAoB,CAAC;QACjE,OAAO,EAAE,CAAC,0BAAW,EAAE,uCAAiB,EAAE,6CAAoB,CAAC;KAChE,CAAC;GACW,mBAAmB,CAAG"}
@@ -3,6 +3,33 @@ import { OrderEmailBranding, OrderEvent } from './order-notification.types';
3
3
  /** Money as the templates show it, e.g. `Rs. 2,245.00`. */
4
4
  export declare const formatMoney: (amount: number, currency: string) => string;
5
5
  export declare const escapeHtml: (value: string) => string;
6
+ /**
7
+ * Shopify gateway names are raw and often provider-prefixed — `Gokwik UPI`,
8
+ * `manual`, `ReturnPrime`. `labels` renames them for the customer, who never
9
+ * saw the provider; anything unmapped keeps today's behaviour so a new gateway
10
+ * degrades to its raw name rather than vanishing.
11
+ *
12
+ * Short names are acronyms (UPI, COD, EMI) so they upper-case whole.
13
+ */
14
+ export declare const prettyGateway: (name: string, labels?: Readonly<Record<string, string>>) => string;
15
+ /**
16
+ * Payment method as the customer should see it.
17
+ *
18
+ * Shopify records a gateway only once a payment is taken, so a COD or unpaid
19
+ * order has none. The checkout provider tags the order with the method, so that
20
+ * is the fallback. Returns '' when neither is available and the caller decides
21
+ * what to show.
22
+ */
23
+ export declare const REFUND_EVENTS: ReadonlySet<OrderEvent>;
24
+ export declare const resolvePaymentMethod: (order: OrderSnapshot, paymentTags?: readonly string[],
25
+ /**
26
+ * Shown instead of the tag on a refund for a gateway-less (COD) order: the
27
+ * customer paid the courier in cash, so the money cannot go back the way it
28
+ * came and is settled to a bank account instead.
29
+ */
30
+ codRefundLabel?: string,
31
+ /** Customer-facing renames for raw gateway names. */
32
+ gatewayLabels?: Readonly<Record<string, string>>) => string;
6
33
  export declare const renderItemsHtml: (items: OrderSnapshot["items"], currency: string, branding: OrderEmailBranding) => string;
7
34
  export declare const renderAddressHtml: (lines: string[]) => string;
8
35
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"order-email.mapper.d.ts","sourceRoot":"","sources":["../../src/notifications/order-email.mapper.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAC/C,OAAO,EAAE,kBAAkB,EAAE,UAAU,EAAE,MAAM,4BAA4B,CAAC;AA+B5E,2DAA2D;AAC3D,eAAO,MAAM,WAAW,GAAI,QAAQ,MAAM,EAAE,UAAU,MAAM,KAAG,MAG9D,CAAC;AAEF,eAAO,MAAM,UAAU,GAAI,OAAO,MAAM,KAAG,MAKf,CAAC;AAsD7B,eAAO,MAAM,eAAe,GAC1B,OAAO,aAAa,CAAC,OAAO,CAAC,EAC7B,UAAU,MAAM,EAChB,UAAU,kBAAkB,KAC3B,MAKE,CAAC;AAEN,eAAO,MAAM,iBAAiB,GAAI,OAAO,MAAM,EAAE,KAAG,MACd,CAAC;AAEvC;;;;;GAKG;AACH,eAAO,MAAM,eAAe,GAC1B,OAAO,UAAU,EACjB,OAAO,aAAa,EACpB,UAAU,kBAAkB,EAC5B,cAAc,MAAM;AACpB,6EAA6E;AAC7E,eAAe,MAAM,KACpB,MAAM,CAAC,MAAM,EAAE,MAAM,CA2CvB,CAAC"}
1
+ {"version":3,"file":"order-email.mapper.d.ts","sourceRoot":"","sources":["../../src/notifications/order-email.mapper.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAC/C,OAAO,EAAE,kBAAkB,EAAE,UAAU,EAAE,MAAM,4BAA4B,CAAC;AA+B5E,2DAA2D;AAC3D,eAAO,MAAM,WAAW,GAAI,QAAQ,MAAM,EAAE,UAAU,MAAM,KAAG,MAG9D,CAAC;AAEF,eAAO,MAAM,UAAU,GAAI,OAAO,MAAM,KAAG,MAKf,CAAC;AAE7B;;;;;;;GAOG;AACH,eAAO,MAAM,aAAa,GACxB,MAAM,MAAM,EACZ,SAAQ,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAM,KAC5C,MAQF,CAAC;AAEF;;;;;;;GAOG;AACH,eAAO,MAAM,aAAa,EAAE,WAAW,CAAC,UAAU,CAGhD,CAAC;AAEH,eAAO,MAAM,oBAAoB,GAC/B,OAAO,aAAa,EACpB,cAAa,SAAS,MAAM,EAAO;AACnC;;;;GAIG;AACH,iBAAiB,MAAM;AACvB,qDAAqD;AACrD,gBAAe,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAM,KACnD,MAaF,CAAC;AA6CF,eAAO,MAAM,eAAe,GAC1B,OAAO,aAAa,CAAC,OAAO,CAAC,EAC7B,UAAU,MAAM,EAChB,UAAU,kBAAkB,KAC3B,MAKE,CAAC;AAEN,eAAO,MAAM,iBAAiB,GAAI,OAAO,MAAM,EAAE,KAAG,MACd,CAAC;AAEvC;;;;;GAKG;AACH,eAAO,MAAM,eAAe,GAC1B,OAAO,UAAU,EACjB,OAAO,aAAa,EACpB,UAAU,kBAAkB,EAC5B,cAAc,MAAM;AACpB,6EAA6E;AAC7E,eAAe,MAAM,KACpB,MAAM,CAAC,MAAM,EAAE,MAAM,CA+CvB,CAAC"}
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.buildAttributes = exports.renderAddressHtml = exports.renderItemsHtml = exports.escapeHtml = exports.formatMoney = void 0;
3
+ exports.buildAttributes = exports.renderAddressHtml = exports.renderItemsHtml = exports.resolvePaymentMethod = exports.REFUND_EVENTS = exports.prettyGateway = exports.escapeHtml = exports.formatMoney = void 0;
4
4
  /**
5
5
  * Turns an order into the flat `[%KEY%]` values Netcore substitutes.
6
6
  *
@@ -38,15 +38,60 @@ const escapeHtml = (value) => value
38
38
  .replace(/>/g, '&gt;')
39
39
  .replace(/"/g, '&quot;');
40
40
  exports.escapeHtml = escapeHtml;
41
- /** Gateway names arrive lower-cased; short ones are acronyms (UPI, COD, EMI). */
42
- const prettyGateway = (name) => {
41
+ /**
42
+ * Shopify gateway names are raw and often provider-prefixed — `Gokwik UPI`,
43
+ * `manual`, `ReturnPrime`. `labels` renames them for the customer, who never
44
+ * saw the provider; anything unmapped keeps today's behaviour so a new gateway
45
+ * degrades to its raw name rather than vanishing.
46
+ *
47
+ * Short names are acronyms (UPI, COD, EMI) so they upper-case whole.
48
+ */
49
+ const prettyGateway = (name, labels = {}) => {
43
50
  const trimmed = name.trim();
44
51
  if (!trimmed)
45
52
  return '';
53
+ const mapped = labels[trimmed.toLowerCase()];
54
+ if (mapped)
55
+ return mapped;
46
56
  return trimmed.length <= 4
47
57
  ? trimmed.toUpperCase()
48
58
  : trimmed.charAt(0).toUpperCase() + trimmed.slice(1);
49
59
  };
60
+ exports.prettyGateway = prettyGateway;
61
+ /**
62
+ * Payment method as the customer should see it.
63
+ *
64
+ * Shopify records a gateway only once a payment is taken, so a COD or unpaid
65
+ * order has none. The checkout provider tags the order with the method, so that
66
+ * is the fallback. Returns '' when neither is available and the caller decides
67
+ * what to show.
68
+ */
69
+ exports.REFUND_EVENTS = new Set([
70
+ 'refund_initiated',
71
+ 'refund_complete',
72
+ ]);
73
+ const resolvePaymentMethod = (order, paymentTags = [],
74
+ /**
75
+ * Shown instead of the tag on a refund for a gateway-less (COD) order: the
76
+ * customer paid the courier in cash, so the money cannot go back the way it
77
+ * came and is settled to a bank account instead.
78
+ */
79
+ codRefundLabel,
80
+ /** Customer-facing renames for raw gateway names. */
81
+ gatewayLabels = {}) => {
82
+ const gateways = order.paymentMethod
83
+ .split(',')
84
+ .map((name) => (0, exports.prettyGateway)(name, gatewayLabels))
85
+ .filter(Boolean)
86
+ .join(', ');
87
+ if (gateways)
88
+ return gateways;
89
+ if (codRefundLabel)
90
+ return codRefundLabel;
91
+ const known = paymentTags.map((tag) => tag.toLowerCase());
92
+ return (order.tags.find((tag) => known.includes(tag.trim().toLowerCase())) ?? '');
93
+ };
94
+ exports.resolvePaymentMethod = resolvePaymentMethod;
50
95
  const specRow = (label, value, { fontFamily, textColor }) => {
51
96
  const cell = `font-family:${fontFamily}; font-size:15px; line-height:26px; color:${textColor};`;
52
97
  return `<tr>
@@ -114,16 +159,15 @@ refundAmount) => {
114
159
  REFUND_AMOUNT: refundAmount === undefined ? '' : money(refundAmount),
115
160
  BILLING_ADDRESS_HTML: (0, exports.renderAddressHtml)(order.billingAddress),
116
161
  SHIPPING_ADDRESS_HTML: (0, exports.renderAddressHtml)(order.shippingAddress),
117
- PAYMENT_METHOD: order.paymentMethod
118
- .split(',')
119
- .map(prettyGateway)
120
- .filter(Boolean)
121
- .join(', '),
162
+ PAYMENT_METHOD: (0, exports.resolvePaymentMethod)(order, branding.paymentTags, exports.REFUND_EVENTS.has(event) ? branding.codRefundLabel : undefined, branding.gatewayLabels),
122
163
  SHIPPING_METHOD: order.shippingMethod,
123
164
  SUPPORT_PHONE: branding.supportPhone,
124
165
  SUPPORT_EMAIL: branding.supportEmail,
125
166
  };
126
- if (event === 'order_shipped') {
167
+ // Email keeps its tracking link on the packed event: Shopify assigns the
168
+ // tracking number when the fulfillment is created, and the shipped email has
169
+ // always gone out at that moment.
170
+ if (event === 'order_packed' || event === 'order_shipped') {
127
171
  // A carrier Shopify doesn't recognise yields a tracking number with no URL,
128
172
  // which would render the button pointing nowhere. Fall back to the order
129
173
  // status page so it always goes somewhere useful.
@@ -1 +1 @@
1
- {"version":3,"file":"order-email.mapper.js","sourceRoot":"","sources":["../../src/notifications/order-email.mapper.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"order-email.mapper.js","sourceRoot":"","sources":["../../src/notifications/order-email.mapper.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"order-email.service.d.ts","sourceRoot":"","sources":["../../src/notifications/order-email.service.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AACzD,OAAO,EAAE,mBAAmB,EAAE,MAAM,kDAAkD,CAAC;AAEvF,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAC7C,OAAO,EAEL,gBAAgB,EAChB,UAAU,EAGX,MAAM,4BAA4B,CAAC;AAmBpC;;;;;;;;GAQG;AACH,qBACa,iBAAiB;IAE1B,OAAO,CAAC,QAAQ,CAAC,aAAa;IAC9B,OAAO,CAAC,QAAQ,CAAC,OAAO;IACxB,OAAO,CAAC,QAAQ,CAAC,MAAM;gBAFN,aAAa,EAAE,aAAa,EAC5B,OAAO,EAAE,mBAAmB,EAC5B,MAAM,EAAE,WAAW;IAGhC,IAAI,CACR,KAAK,EAAE,MAAM,EACb,KAAK,EAAE,UAAU,EACjB,OAAO,EAAE,MAAM,GAAG,MAAM,EACxB,WAAW,CAAC,EAAE,MAAM,EACpB,YAAY,CAAC,EAAE,MAAM,GACpB,OAAO,CAAC,gBAAgB,CAAC;IAsE5B;;;;;OAKG;IACH,OAAO,CAAC,aAAa;IAgCrB,iFAAiF;IACjF,OAAO,CAAC,iBAAiB;CA8B1B"}
1
+ {"version":3,"file":"order-email.service.d.ts","sourceRoot":"","sources":["../../src/notifications/order-email.service.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AACzD,OAAO,EAAE,mBAAmB,EAAE,MAAM,kDAAkD,CAAC;AAEvF,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAC7C,OAAO,EAEL,gBAAgB,EAChB,UAAU,EAGX,MAAM,4BAA4B,CAAC;AAsBpC;;;;;;;;GAQG;AACH,qBACa,iBAAiB;IAE1B,OAAO,CAAC,QAAQ,CAAC,aAAa;IAC9B,OAAO,CAAC,QAAQ,CAAC,OAAO;IACxB,OAAO,CAAC,QAAQ,CAAC,MAAM;gBAFN,aAAa,EAAE,aAAa,EAC5B,OAAO,EAAE,mBAAmB,EAC5B,MAAM,EAAE,WAAW;IAGhC,IAAI,CACR,KAAK,EAAE,MAAM,EACb,KAAK,EAAE,UAAU,EACjB,OAAO,EAAE,MAAM,GAAG,MAAM,EACxB,WAAW,CAAC,EAAE,MAAM,EACpB,YAAY,CAAC,EAAE,MAAM,GACpB,OAAO,CAAC,gBAAgB,CAAC;IAsE5B;;;;;OAKG;IACH,OAAO,CAAC,aAAa;IAmCrB,iFAAiF;IACjF,OAAO,CAAC,iBAAiB;CA8B1B"}
@@ -106,6 +106,9 @@ let OrderEmailService = class OrderEmailService {
106
106
  fontFamily: options.fontFamily ?? '',
107
107
  textColor: options.textColor ?? '',
108
108
  discountLabel: options.discountLabel ?? '',
109
+ paymentTags: options.paymentTags ?? [],
110
+ codRefundLabel: options.codRefundLabel ?? '',
111
+ gatewayLabels: options.gatewayLabels ?? {},
109
112
  labels: {
110
113
  size: labels?.size ?? '',
111
114
  colour: labels?.colour ?? '',
@@ -1 +1 @@
1
- {"version":3,"file":"order-email.service.js","sourceRoot":"","sources":["../../src/notifications/order-email.service.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"order-email.service.js","sourceRoot":"","sources":["../../src/notifications/order-email.service.ts"],"names":[],"mappings":"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"}
@@ -4,7 +4,7 @@
4
4
  * The event list is channel-neutral: email, WhatsApp and SMS all react to the
5
5
  * same order lifecycle. Only the per-channel send settings differ.
6
6
  */
7
- export declare const ORDER_EVENTS: readonly ["order_confirmed", "order_shipped", "order_delivered", "order_cancelled", "return_initiated", "return_complete", "refund_initiated", "refund_complete"];
7
+ export declare const ORDER_EVENTS: readonly ["order_confirmed", "order_packed", "order_shipped", "order_delivered", "order_cancelled", "order_cancelled_by_seller", "return_initiated", "return_complete", "refund_initiated", "refund_complete"];
8
8
  export type OrderEvent = (typeof ORDER_EVENTS)[number];
9
9
  /**
10
10
  * Per-event email settings, read from the brand's
@@ -27,6 +27,12 @@ export interface OrderItemLabels {
27
27
  }
28
28
  /** Brand presentation values for the parts rendered in code. */
29
29
  export interface OrderEmailBranding {
30
+ /** Order tags naming a payment method, e.g. `COD`, used when Shopify has no gateway. */
31
+ paymentTags?: string[];
32
+ /** Refund wording for COD orders, e.g. "Bank Transfer". */
33
+ codRefundLabel?: string;
34
+ /** Customer-facing renames for raw Shopify gateway names, keyed lower-case. */
35
+ gatewayLabels?: Record<string, string>;
30
36
  logoUrl: string;
31
37
  supportPhone: string;
32
38
  supportEmail: string;
@@ -1 +1 @@
1
- {"version":3,"file":"order-notification.types.d.ts","sourceRoot":"","sources":["../../src/notifications/order-notification.types.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,eAAO,MAAM,YAAY,mKASf,CAAC;AAEX,MAAM,MAAM,UAAU,GAAG,CAAC,OAAO,YAAY,CAAC,CAAC,MAAM,CAAC,CAAC;AAEvD;;;GAGG;AACH,MAAM,WAAW,qBAAqB;IACpC,0CAA0C;IAC1C,UAAU,EAAE,MAAM,CAAC;IACnB,4DAA4D;IAC5D,OAAO,EAAE,MAAM,CAAC;IAChB,kFAAkF;IAClF,GAAG,CAAC,EAAE,MAAM,CAAC;CACd;AAED,yCAAyC;AACzC,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,gEAAgE;AAChE,MAAM,WAAW,kBAAkB;IACjC,OAAO,EAAE,MAAM,CAAC;IAChB,YAAY,EAAE,MAAM,CAAC;IACrB,YAAY,EAAE,MAAM,CAAC;IACrB,kFAAkF;IAClF,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,eAAe,CAAC;IACxB,aAAa,EAAE,MAAM,CAAC;CACvB;AAED,sEAAsE;AACtE,MAAM,MAAM,gBAAgB,GAAG,MAAM,GAAG,SAAS,GAAG,QAAQ,CAAC"}
1
+ {"version":3,"file":"order-notification.types.d.ts","sourceRoot":"","sources":["../../src/notifications/order-notification.types.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,eAAO,MAAM,YAAY,gNAWf,CAAC;AAEX,MAAM,MAAM,UAAU,GAAG,CAAC,OAAO,YAAY,CAAC,CAAC,MAAM,CAAC,CAAC;AAEvD;;;GAGG;AACH,MAAM,WAAW,qBAAqB;IACpC,0CAA0C;IAC1C,UAAU,EAAE,MAAM,CAAC;IACnB,4DAA4D;IAC5D,OAAO,EAAE,MAAM,CAAC;IAChB,kFAAkF;IAClF,GAAG,CAAC,EAAE,MAAM,CAAC;CACd;AAED,yCAAyC;AACzC,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,gEAAgE;AAChE,MAAM,WAAW,kBAAkB;IACjC,wFAAwF;IACxF,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;IACvB,2DAA2D;IAC3D,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,+EAA+E;IAC/E,aAAa,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACvC,OAAO,EAAE,MAAM,CAAC;IAChB,YAAY,EAAE,MAAM,CAAC;IACrB,YAAY,EAAE,MAAM,CAAC;IACrB,kFAAkF;IAClF,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,eAAe,CAAC;IACxB,aAAa,EAAE,MAAM,CAAC;CACvB;AAED,sEAAsE;AACtE,MAAM,MAAM,gBAAgB,GAAG,MAAM,GAAG,SAAS,GAAG,QAAQ,CAAC"}
@@ -9,9 +9,11 @@ Object.defineProperty(exports, "__esModule", { value: true });
9
9
  exports.ORDER_EVENTS = void 0;
10
10
  exports.ORDER_EVENTS = [
11
11
  'order_confirmed',
12
+ 'order_packed',
12
13
  'order_shipped',
13
14
  'order_delivered',
14
15
  'order_cancelled',
16
+ 'order_cancelled_by_seller',
15
17
  'return_initiated',
16
18
  'return_complete',
17
19
  'refund_initiated',
@@ -1 +1 @@
1
- {"version":3,"file":"order-notification.types.js","sourceRoot":"","sources":["../../src/notifications/order-notification.types.ts"],"names":[],"mappings":";AAAA;;;;;GAKG;;;AAEU,QAAA,YAAY,GAAG;IAC1B,iBAAiB;IACjB,eAAe;IACf,iBAAiB;IACjB,iBAAiB;IACjB,kBAAkB;IAClB,iBAAiB;IACjB,kBAAkB;IAClB,iBAAiB;CACT,CAAC"}
1
+ {"version":3,"file":"order-notification.types.js","sourceRoot":"","sources":["../../src/notifications/order-notification.types.ts"],"names":[],"mappings":";AAAA;;;;;GAKG;;;AAEU,QAAA,YAAY,GAAG;IAC1B,iBAAiB;IACjB,cAAc;IACd,eAAe;IACf,iBAAiB;IACjB,iBAAiB;IACjB,2BAA2B;IAC3B,kBAAkB;IAClB,iBAAiB;IACjB,kBAAkB;IAClB,iBAAiB;CACT,CAAC"}
@@ -0,0 +1,47 @@
1
+ import { OrderSnapshot } from './order.source';
2
+ import { OrderEvent } from './order-notification.types';
3
+ /**
4
+ * Values a WhatsApp template variable can be filled from. The brand config
5
+ * lists these in template order, so `{{1}}`, `{{2}}` … are declared as data
6
+ * rather than hardcoded per event.
7
+ */
8
+ export type WhatsAppField = 'customerName' | 'orderNumber' | 'products' | 'paymentMethod' | 'trackingUrl' | 'amount' | 'refundTimeframe' | 'expectedDelivery' | 'supportPhone' | 'supportEmail';
9
+ export interface OrderWhatsAppBranding {
10
+ /**
11
+ * Order tags that name a payment method, e.g. `COD`. Used only when Shopify
12
+ * records no gateway — the checkout provider tags the order even when the
13
+ * payment itself has not been captured.
14
+ */
15
+ paymentTags?: string[];
16
+ /** Refund wording for a COD order, e.g. "Bank Transfer". */
17
+ codRefundLabel: string;
18
+ /** Customer-facing renames for raw Shopify gateway names, keyed lower-case. */
19
+ gatewayLabels: Readonly<Record<string, string>>;
20
+ supportPhone: string;
21
+ supportEmail: string;
22
+ /** Copy for "your refund will reflect within …". Business wording, not order data. */
23
+ refundTimeframe: string;
24
+ /**
25
+ * Substituted when a value resolves empty. WhatsApp rejects a send with a
26
+ * blank variable, so every field that can be absent needs one.
27
+ */
28
+ fallbacks: Partial<Record<WhatsAppField, string>>;
29
+ }
30
+ /**
31
+ * One line describing every item, comma-joined.
32
+ *
33
+ * WhatsApp variables cannot contain newlines or tabs, so the email layout's
34
+ * per-item table collapses to `Title (Size/Colour) x2`. A long order is
35
+ * truncated rather than risking Meta's length limit.
36
+ */
37
+ export declare const renderProducts: (items: OrderSnapshot["items"]) => string;
38
+ export declare const formatEdd: (note: string | null) => string;
39
+ /**
40
+ * Build the positional `attributes` array for one template.
41
+ *
42
+ * `fields` comes from brand config and must match the approved template's
43
+ * variable order. Any value that resolves empty takes its configured fallback,
44
+ * because WhatsApp rejects the whole send on a blank variable.
45
+ */
46
+ export declare const buildWhatsAppAttributes: (fields: readonly WhatsAppField[], event: OrderEvent, order: OrderSnapshot, branding: OrderWhatsAppBranding, trackingUrl?: string, refundAmount?: number) => string[];
47
+ //# sourceMappingURL=order-whatsapp.mapper.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"order-whatsapp.mapper.d.ts","sourceRoot":"","sources":["../../src/notifications/order-whatsapp.mapper.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAM/C,OAAO,EAAE,UAAU,EAAE,MAAM,4BAA4B,CAAC;AAExD;;;;GAIG;AACH,MAAM,MAAM,aAAa,GACrB,cAAc,GACd,aAAa,GACb,UAAU,GACV,eAAe,GACf,aAAa,GACb,QAAQ,GACR,iBAAiB,GACjB,kBAAkB,GAClB,cAAc,GACd,cAAc,CAAC;AAEnB,MAAM,WAAW,qBAAqB;IACpC;;;;OAIG;IACH,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;IACvB,4DAA4D;IAC5D,cAAc,EAAE,MAAM,CAAC;IACvB,+EAA+E;IAC/E,aAAa,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;IAChD,YAAY,EAAE,MAAM,CAAC;IACrB,YAAY,EAAE,MAAM,CAAC;IACrB,sFAAsF;IACtF,eAAe,EAAE,MAAM,CAAC;IACxB;;;OAGG;IACH,SAAS,EAAE,OAAO,CAAC,MAAM,CAAC,aAAa,EAAE,MAAM,CAAC,CAAC,CAAC;CACnD;AAKD;;;;;;GAMG;AACH,eAAO,MAAM,cAAc,GAAI,OAAO,aAAa,CAAC,OAAO,CAAC,KAAG,MAuB9D,CAAC;AAmBF,eAAO,MAAM,SAAS,GAAI,MAAM,MAAM,GAAG,IAAI,KAAG,MAO/C,CAAC;AA6CF;;;;;;GAMG;AACH,eAAO,MAAM,uBAAuB,GAClC,QAAQ,SAAS,aAAa,EAAE,EAChC,OAAO,UAAU,EACjB,OAAO,aAAa,EACpB,UAAU,qBAAqB,EAC/B,cAAc,MAAM,EACpB,eAAe,MAAM,KACpB,MAAM,EAML,CAAC"}
@@ -0,0 +1,107 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.buildWhatsAppAttributes = exports.formatEdd = exports.renderProducts = void 0;
4
+ const order_email_mapper_1 = require("./order-email.mapper");
5
+ /** Max characters for the joined product list before it is summarised. */
6
+ const PRODUCTS_MAX_LENGTH = 700;
7
+ /**
8
+ * One line describing every item, comma-joined.
9
+ *
10
+ * WhatsApp variables cannot contain newlines or tabs, so the email layout's
11
+ * per-item table collapses to `Title (Size/Colour) x2`. A long order is
12
+ * truncated rather than risking Meta's length limit.
13
+ */
14
+ const renderProducts = (items) => {
15
+ const parts = items.map((item) => {
16
+ const variant = [item.size, item.colour].filter(Boolean).join('/');
17
+ // Quantity is always shown, including x1: on a refund message the customer
18
+ // needs to tell one unit from three, and an absent qty reads as ambiguous.
19
+ return `${item.title}${variant ? ` (${variant})` : ''} x${item.quantity}`;
20
+ });
21
+ const joined = parts.join(', ');
22
+ if (joined.length <= PRODUCTS_MAX_LENGTH)
23
+ return joined;
24
+ // Keep whole item names: drop from the end until the remainder plus the
25
+ // "and N more" suffix fits.
26
+ const kept = [];
27
+ let length = 0;
28
+ for (const part of parts) {
29
+ const suffix = ` and ${parts.length - kept.length - 1} more`;
30
+ if (length + part.length + 2 + suffix.length > PRODUCTS_MAX_LENGTH)
31
+ break;
32
+ kept.push(part);
33
+ length += part.length + 2;
34
+ }
35
+ const remaining = parts.length - kept.length;
36
+ return remaining > 0 ? `${kept.join(', ')} and ${remaining} more` : kept.join(', ');
37
+ };
38
+ exports.renderProducts = renderProducts;
39
+ /** Collapse whitespace: WhatsApp rejects newlines, tabs and long space runs. */
40
+ const flatten = (value) => value.replace(/\s+/g, ' ').trim();
41
+ /**
42
+ * Resolve one template variable. Returns '' when there is no value, so the
43
+ * caller can apply the fallback and keep that decision in one place.
44
+ */
45
+ /**
46
+ * Pull the estimated delivery date out of the order note.
47
+ *
48
+ * The checkout provider writes `EDD: 26-09-2026` (day first). Returns '' when
49
+ * absent or unparseable, so the caller's fallback applies rather than showing
50
+ * a half-parsed date.
51
+ */
52
+ const EDD_PATTERN = /EDD:\s*(\d{1,2})-(\d{1,2})-(\d{4})/i;
53
+ const MONTHS = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'];
54
+ const formatEdd = (note) => {
55
+ const match = note?.match(EDD_PATTERN);
56
+ if (!match)
57
+ return '';
58
+ const [, day, month, year] = match;
59
+ const monthName = MONTHS[Number(month) - 1];
60
+ if (!monthName)
61
+ return '';
62
+ return `${Number(day)} ${monthName} ${year}`;
63
+ };
64
+ exports.formatEdd = formatEdd;
65
+ const resolve = (field, event, order, branding, trackingUrl, refundAmount) => {
66
+ switch (field) {
67
+ case 'customerName':
68
+ return order.customerName;
69
+ case 'orderNumber':
70
+ return order.orderNumber;
71
+ case 'products':
72
+ return (0, exports.renderProducts)(order.items);
73
+ case 'paymentMethod':
74
+ return (0, order_email_mapper_1.resolvePaymentMethod)(order, branding.paymentTags, order_email_mapper_1.REFUND_EVENTS.has(event) ? branding.codRefundLabel : undefined, branding.gatewayLabels);
75
+ case 'trackingUrl':
76
+ // Same three-level fallback as email: the parcel's link, the order's, then
77
+ // Shopify's order-status page.
78
+ return trackingUrl ?? order.trackingUrl ?? order.orderStatusUrl ?? '';
79
+ case 'amount':
80
+ return refundAmount === undefined
81
+ ? ''
82
+ : (0, order_email_mapper_1.formatMoney)(refundAmount, order.currency);
83
+ case 'refundTimeframe':
84
+ return branding.refundTimeframe;
85
+ case 'expectedDelivery':
86
+ return (0, exports.formatEdd)(order.note);
87
+ case 'supportPhone':
88
+ return branding.supportPhone;
89
+ case 'supportEmail':
90
+ return branding.supportEmail;
91
+ default:
92
+ return '';
93
+ }
94
+ };
95
+ /**
96
+ * Build the positional `attributes` array for one template.
97
+ *
98
+ * `fields` comes from brand config and must match the approved template's
99
+ * variable order. Any value that resolves empty takes its configured fallback,
100
+ * because WhatsApp rejects the whole send on a blank variable.
101
+ */
102
+ const buildWhatsAppAttributes = (fields, event, order, branding, trackingUrl, refundAmount) => fields.map((field) => {
103
+ const value = flatten(resolve(field, event, order, branding, trackingUrl, refundAmount));
104
+ return value || flatten(branding.fallbacks[field] ?? '');
105
+ });
106
+ exports.buildWhatsAppAttributes = buildWhatsAppAttributes;
107
+ //# sourceMappingURL=order-whatsapp.mapper.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"order-whatsapp.mapper.js","sourceRoot":"","sources":["../../src/notifications/order-whatsapp.mapper.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,27 @@
1
+ import { ConfigService } from '../config/config.service';
2
+ import { NetcoreWhatsAppService } from '../integrations/engagement/netcore-whatsapp.service';
3
+ import { OrderSource } from './order.source';
4
+ import { OrderEmailResult, OrderEvent } from './order-notification.types';
5
+ /**
6
+ * Sends one order lifecycle WhatsApp message for any brand.
7
+ *
8
+ * Mirrors `OrderEmailService` and reuses the same `OrderSource` snapshot, so a
9
+ * brand adds WhatsApp with configuration rather than code.
10
+ *
11
+ * Two behaviours differ from email deliberately:
12
+ *
13
+ * - An order with no phone number is skipped, not failed. Email always has an
14
+ * address; a phone is optional on a Shopify order.
15
+ * - The variable order lives in config, because an approved template cannot be
16
+ * reordered without Meta re-approving it.
17
+ */
18
+ export declare class OrderWhatsAppService {
19
+ private readonly configService;
20
+ private readonly whatsapp;
21
+ private readonly source;
22
+ constructor(configService: ConfigService, whatsapp: NetcoreWhatsAppService, source: OrderSource);
23
+ send(brand: string, event: OrderEvent, orderId: string | number, trackingUrl?: string, refundAmount?: number): Promise<OrderEmailResult>;
24
+ private buildBranding;
25
+ private configureProvider;
26
+ }
27
+ //# sourceMappingURL=order-whatsapp.service.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"order-whatsapp.service.d.ts","sourceRoot":"","sources":["../../src/notifications/order-whatsapp.service.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AACzD,OAAO,EAAE,sBAAsB,EAAE,MAAM,qDAAqD,CAAC;AAM7F,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAC7C,OAAO,EAAE,gBAAgB,EAAE,UAAU,EAAE,MAAM,4BAA4B,CAAC;AAyB1E;;;;;;;;;;;;GAYG;AACH,qBACa,oBAAoB;IAE7B,OAAO,CAAC,QAAQ,CAAC,aAAa;IAC9B,OAAO,CAAC,QAAQ,CAAC,QAAQ;IACzB,OAAO,CAAC,QAAQ,CAAC,MAAM;gBAFN,aAAa,EAAE,aAAa,EAC5B,QAAQ,EAAE,sBAAsB,EAChC,MAAM,EAAE,WAAW;IAGhC,IAAI,CACR,KAAK,EAAE,MAAM,EACb,KAAK,EAAE,UAAU,EACjB,OAAO,EAAE,MAAM,GAAG,MAAM,EACxB,WAAW,CAAC,EAAE,MAAM,EACpB,YAAY,CAAC,EAAE,MAAM,GACpB,OAAO,CAAC,gBAAgB,CAAC;IAgE5B,OAAO,CAAC,aAAa;IAwBrB,OAAO,CAAC,iBAAiB;CAmB1B"}