@huloglobal/vendure-plugin-email-tracking 0.2.0 → 0.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,5 +1,5 @@
1
1
  import { DeepPartial, VendureEntity } from '@vendure/core';
2
- export type EmailLogStatus = 'sent' | 'failed' | 'deferred' | 'bounced' | 'complained';
2
+ export type EmailLogStatus = 'sent' | 'failed' | 'deferred' | 'bounced' | 'complained' | 'suppressed';
3
3
  /**
4
4
  * One row per outgoing email. Captures send metadata + engagement:
5
5
  * - Send: who, what, when, related order/invoice/customer/application,
@@ -1 +1 @@
1
- {"version":3,"file":"email-log.entity.d.ts","sourceRoot":"","sources":["../src/email-log.entity.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAG3D,MAAM,MAAM,cAAc,GACpB,MAAM,GACN,QAAQ,GACR,UAAU,GACV,SAAS,GACT,YAAY,CAAC;AAEnB;;;;;;;;;;;GAWG;AACH,qBACa,QAAS,SAAQ,aAAa;gBAC3B,KAAK,CAAC,EAAE,WAAW,CAAC,QAAQ,CAAC;IAIzC;;;kEAG8D;IAG9D,IAAI,EAAG,MAAM,CAAC;IAId,SAAS,EAAG,MAAM,CAAC;IAGnB,OAAO,EAAG,MAAM,CAAC;IAEjB,qDAAqD;IAErD,WAAW,EAAG,MAAM,CAAC;IAErB,6DAA6D;IAE7D,GAAG,EAAG,MAAM,CAAC;IAEb,wEAAwE;IAExE,OAAO,EAAG,MAAM,CAAC;IAEjB,sEAAsE;IAEtE,OAAO,EAAG,MAAM,CAAC;IAGjB,SAAS,EAAG,MAAM,CAAC;IAKnB,UAAU,EAAG,MAAM,CAAC;IAIpB,OAAO,EAAG,MAAM,CAAC;IAIjB,SAAS,EAAG,MAAM,CAAC;IAGnB,SAAS,EAAG,MAAM,CAAC;IAGnB,aAAa,EAAG,MAAM,CAAC;IAKvB,MAAM,EAAG,cAAc,CAAC;IAGxB,YAAY,EAAG,MAAM,CAAC;IAGtB,aAAa,EAAG,MAAM,CAAC;IAGvB,YAAY,EAAG,MAAM,CAAC;IAItB,SAAS,EAAG,MAAM,CAAC;IAGnB,aAAa,EAAG,IAAI,CAAC;IAGrB,YAAY,EAAG,IAAI,CAAC;IAGpB,WAAW,EAAG,MAAM,CAAC;IAGrB,kBAAkB,EAAG,MAAM,CAAC;IAE5B;oEACgE;IAEhE,SAAS,EAAG,MAAM,CAAC;IAGnB,UAAU,EAAG,MAAM,CAAC;IAEpB;uEACmE;IAEnE,UAAU,EAAG,MAAM,CAAC;IAGpB,cAAc,EAAG,IAAI,CAAC;IAEtB;;+CAE2C;IAE3C,OAAO,EAAG,OAAO,CAAC;CACrB"}
1
+ {"version":3,"file":"email-log.entity.d.ts","sourceRoot":"","sources":["../src/email-log.entity.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAG3D,MAAM,MAAM,cAAc,GACpB,MAAM,GACN,QAAQ,GACR,UAAU,GACV,SAAS,GACT,YAAY,GACZ,YAAY,CAAC;AAEnB;;;;;;;;;;;GAWG;AACH,qBACa,QAAS,SAAQ,aAAa;gBAC3B,KAAK,CAAC,EAAE,WAAW,CAAC,QAAQ,CAAC;IAIzC;;;kEAG8D;IAG9D,IAAI,EAAG,MAAM,CAAC;IAId,SAAS,EAAG,MAAM,CAAC;IAGnB,OAAO,EAAG,MAAM,CAAC;IAEjB,qDAAqD;IAErD,WAAW,EAAG,MAAM,CAAC;IAErB,6DAA6D;IAE7D,GAAG,EAAG,MAAM,CAAC;IAEb,wEAAwE;IAExE,OAAO,EAAG,MAAM,CAAC;IAEjB,sEAAsE;IAEtE,OAAO,EAAG,MAAM,CAAC;IAGjB,SAAS,EAAG,MAAM,CAAC;IAKnB,UAAU,EAAG,MAAM,CAAC;IAIpB,OAAO,EAAG,MAAM,CAAC;IAIjB,SAAS,EAAG,MAAM,CAAC;IAGnB,SAAS,EAAG,MAAM,CAAC;IAGnB,aAAa,EAAG,MAAM,CAAC;IAKvB,MAAM,EAAG,cAAc,CAAC;IAGxB,YAAY,EAAG,MAAM,CAAC;IAGtB,aAAa,EAAG,MAAM,CAAC;IAGvB,YAAY,EAAG,MAAM,CAAC;IAItB,SAAS,EAAG,MAAM,CAAC;IAGnB,aAAa,EAAG,IAAI,CAAC;IAGrB,YAAY,EAAG,IAAI,CAAC;IAGpB,WAAW,EAAG,MAAM,CAAC;IAGrB,kBAAkB,EAAG,MAAM,CAAC;IAE5B;oEACgE;IAEhE,SAAS,EAAG,MAAM,CAAC;IAGnB,UAAU,EAAG,MAAM,CAAC;IAEpB;uEACmE;IAEnE,UAAU,EAAG,MAAM,CAAC;IAGpB,cAAc,EAAG,IAAI,CAAC;IAEtB;;+CAE2C;IAE3C,OAAO,EAAG,OAAO,CAAC;CACrB"}
@@ -1 +1 @@
1
- {"version":3,"file":"email-log.entity.js","sourceRoot":"","sources":["../src/email-log.entity.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"email-log.entity.js","sourceRoot":"","sources":["../src/email-log.entity.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,18 @@
1
+ import { DeepPartial, VendureEntity } from '@vendure/core';
2
+ /**
3
+ * Per-recipient send suppression. When a row exists for an email address
4
+ * the EmailTrackingService refuses to call SMTP on subsequent sends and
5
+ * marks the would-be EmailLog row as `status='suppressed'`.
6
+ *
7
+ * Populated automatically from hard bounces and complaints; the admin
8
+ * can also add / remove entries manually via the Email Log UI.
9
+ */
10
+ export declare class EmailSuppression extends VendureEntity {
11
+ constructor(input?: DeepPartial<EmailSuppression>);
12
+ recipient: string;
13
+ /** Why this address is suppressed. */
14
+ reason: 'hard-bounce' | 'complaint' | 'manual' | 'unsubscribe' | string;
15
+ note: string;
16
+ channelId: number;
17
+ }
18
+ //# sourceMappingURL=email-suppression.entity.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"email-suppression.entity.d.ts","sourceRoot":"","sources":["../src/email-suppression.entity.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAG3D;;;;;;;GAOG;AACH,qBACa,gBAAiB,SAAQ,aAAa;gBACnC,KAAK,CAAC,EAAE,WAAW,CAAC,gBAAgB,CAAC;IAMjD,SAAS,EAAG,MAAM,CAAC;IAEnB,sCAAsC;IAEtC,MAAM,EAAG,aAAa,GAAG,WAAW,GAAG,QAAQ,GAAG,aAAa,GAAG,MAAM,CAAC;IAGzE,IAAI,EAAG,MAAM,CAAC;IAGd,SAAS,EAAG,MAAM,CAAC;CACtB"}
@@ -0,0 +1,50 @@
1
+ "use strict";
2
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
3
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
4
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
5
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
6
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
7
+ };
8
+ var __metadata = (this && this.__metadata) || function (k, v) {
9
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
10
+ };
11
+ Object.defineProperty(exports, "__esModule", { value: true });
12
+ exports.EmailSuppression = void 0;
13
+ const core_1 = require("@vendure/core");
14
+ const typeorm_1 = require("typeorm");
15
+ /**
16
+ * Per-recipient send suppression. When a row exists for an email address
17
+ * the EmailTrackingService refuses to call SMTP on subsequent sends and
18
+ * marks the would-be EmailLog row as `status='suppressed'`.
19
+ *
20
+ * Populated automatically from hard bounces and complaints; the admin
21
+ * can also add / remove entries manually via the Email Log UI.
22
+ */
23
+ let EmailSuppression = class EmailSuppression extends core_1.VendureEntity {
24
+ constructor(input) {
25
+ super(input);
26
+ }
27
+ };
28
+ exports.EmailSuppression = EmailSuppression;
29
+ __decorate([
30
+ (0, typeorm_1.Index)({ unique: true }),
31
+ (0, typeorm_1.Column)({ type: 'varchar', length: 320 }),
32
+ __metadata("design:type", String)
33
+ ], EmailSuppression.prototype, "recipient", void 0);
34
+ __decorate([
35
+ (0, typeorm_1.Column)({ type: 'varchar', length: 32 }),
36
+ __metadata("design:type", String)
37
+ ], EmailSuppression.prototype, "reason", void 0);
38
+ __decorate([
39
+ (0, typeorm_1.Column)({ type: 'text', nullable: true }),
40
+ __metadata("design:type", String)
41
+ ], EmailSuppression.prototype, "note", void 0);
42
+ __decorate([
43
+ (0, typeorm_1.Column)({ type: 'int', nullable: true }),
44
+ __metadata("design:type", Number)
45
+ ], EmailSuppression.prototype, "channelId", void 0);
46
+ exports.EmailSuppression = EmailSuppression = __decorate([
47
+ (0, typeorm_1.Entity)(),
48
+ __metadata("design:paramtypes", [Object])
49
+ ], EmailSuppression);
50
+ //# sourceMappingURL=email-suppression.entity.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"email-suppression.entity.js","sourceRoot":"","sources":["../src/email-suppression.entity.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,wCAA2D;AAC3D,qCAAgD;AAEhD;;;;;;;GAOG;AAEI,IAAM,gBAAgB,GAAtB,MAAM,gBAAiB,SAAQ,oBAAa;IAC/C,YAAY,KAAqC;QAC7C,KAAK,CAAC,KAAK,CAAC,CAAC;IACjB,CAAC;CAeJ,CAAA;AAlBY,4CAAgB;AAOzB;IAFC,IAAA,eAAK,EAAC,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC;IACvB,IAAA,gBAAM,EAAC,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC;;mDACtB;AAInB;IADC,IAAA,gBAAM,EAAC,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC;;gDACiC;AAGzE;IADC,IAAA,gBAAM,EAAC,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;;8CAC3B;AAGd;IADC,IAAA,gBAAM,EAAC,EAAE,IAAI,EAAE,KAAK,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;;mDACrB;2BAjBV,gBAAgB;IAD5B,IAAA,gBAAM,GAAE;;GACI,gBAAgB,CAkB5B"}
@@ -47,5 +47,18 @@ export declare class EmailTrackingController {
47
47
  logSummary(ctx: RequestContext, req: Request, res: Response): Promise<Response<any, Record<string, any>> | undefined>;
48
48
  /** Admin: full detail for one event including the clicks JSON. */
49
49
  logDetail(ctx: RequestContext, idParam: string, res: Response): Promise<Response<any, Record<string, any>> | undefined>;
50
+ /** Admin: per-template aggregates — open rate + CTR by `type`.
51
+ * Drives the "By template" tab in the admin UI. */
52
+ byTemplate(ctx: RequestContext, req: Request, res: Response): Promise<Response<any, Record<string, any>> | undefined>;
53
+ /** Admin: CSV export of the log with the same filters as the list view. */
54
+ exportCsv(ctx: RequestContext, req: Request, res: Response): Promise<Response<any, Record<string, any>> | undefined>;
55
+ /** Admin: list suppression entries. */
56
+ listSuppression(ctx: RequestContext, req: Request, res: Response): Promise<Response<any, Record<string, any>> | undefined>;
57
+ /** Admin: manually suppress a recipient (e.g. when the customer asks
58
+ * to be removed). */
59
+ addSuppression(ctx: RequestContext, body: any, res: Response): Promise<Response<any, Record<string, any>> | undefined>;
60
+ /** Admin: lift a suppression (recipient asked to be re-subscribed,
61
+ * or it was a transient hard bounce). */
62
+ deleteSuppression(ctx: RequestContext, recipient: string, res: Response): Promise<Response<any, Record<string, any>> | undefined>;
50
63
  }
51
64
  //# sourceMappingURL=email-tracking.controller.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"email-tracking.controller.d.ts","sourceRoot":"","sources":["../src/email-tracking.controller.ts"],"names":[],"mappings":"AACA,OAAO,EAA2B,cAAc,EAAE,uBAAuB,EAAE,MAAM,eAAe,CAAC;AACjG,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAE5C,OAAO,EAAE,oBAAoB,EAAE,MAAM,0BAA0B,CAAC;AA0BhE,qBACa,uBAAuB;IAE5B,OAAO,CAAC,UAAU;IAClB,OAAO,CAAC,QAAQ;gBADR,UAAU,EAAE,uBAAuB,EACnC,QAAQ,EAAE,oBAAoB;IAG1C;;;;;;OAMG;IAEG,IAAI,CAAc,OAAO,EAAE,MAAM,EAAS,GAAG,EAAE,OAAO,EAAS,GAAG,EAAE,QAAQ;IAalF;;;;;;OAMG;IAEG,KAAK,CAAc,OAAO,EAAE,MAAM,EAAc,CAAC,EAAE,MAAM,EAAS,GAAG,EAAE,OAAO,EAAS,GAAG,EAAE,QAAQ;IAc1G;;;;;;;;;;;;OAYG;IAEG,MAAM,CAAS,IAAI,EAAE,GAAG,EAAS,GAAG,EAAE,QAAQ;IAQpD;;;;;;OAMG;IAEG,OAAO,CAAQ,GAAG,EAAE,cAAc,EAAS,GAAG,EAAE,OAAO,EAAS,GAAG,EAAE,QAAQ;IAmCnF,oEAAoE;IAE9D,UAAU,CAAQ,GAAG,EAAE,cAAc,EAAS,GAAG,EAAE,OAAO,EAAS,GAAG,EAAE,QAAQ;IAmBtF,kEAAkE;IAE5D,SAAS,CAAQ,GAAG,EAAE,cAAc,EAAe,OAAO,EAAE,MAAM,EAAS,GAAG,EAAE,QAAQ;CAYjG"}
1
+ {"version":3,"file":"email-tracking.controller.d.ts","sourceRoot":"","sources":["../src/email-tracking.controller.ts"],"names":[],"mappings":"AACA,OAAO,EAA2B,cAAc,EAAE,uBAAuB,EAAE,MAAM,eAAe,CAAC;AACjG,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAG5C,OAAO,EAAE,oBAAoB,EAAE,MAAM,0BAA0B,CAAC;AA0BhE,qBACa,uBAAuB;IAE5B,OAAO,CAAC,UAAU;IAClB,OAAO,CAAC,QAAQ;gBADR,UAAU,EAAE,uBAAuB,EACnC,QAAQ,EAAE,oBAAoB;IAG1C;;;;;;OAMG;IAEG,IAAI,CAAc,OAAO,EAAE,MAAM,EAAS,GAAG,EAAE,OAAO,EAAS,GAAG,EAAE,QAAQ;IAalF;;;;;;OAMG;IAEG,KAAK,CAAc,OAAO,EAAE,MAAM,EAAc,CAAC,EAAE,MAAM,EAAS,GAAG,EAAE,OAAO,EAAS,GAAG,EAAE,QAAQ;IAc1G;;;;;;;;;;;;OAYG;IAEG,MAAM,CAAS,IAAI,EAAE,GAAG,EAAS,GAAG,EAAE,QAAQ;IAQpD;;;;;;OAMG;IAEG,OAAO,CAAQ,GAAG,EAAE,cAAc,EAAS,GAAG,EAAE,OAAO,EAAS,GAAG,EAAE,QAAQ;IAmCnF,oEAAoE;IAE9D,UAAU,CAAQ,GAAG,EAAE,cAAc,EAAS,GAAG,EAAE,OAAO,EAAS,GAAG,EAAE,QAAQ;IAmBtF,kEAAkE;IAE5D,SAAS,CAAQ,GAAG,EAAE,cAAc,EAAe,OAAO,EAAE,MAAM,EAAS,GAAG,EAAE,QAAQ;IAa9F;uDACmD;IAE7C,UAAU,CAAQ,GAAG,EAAE,cAAc,EAAS,GAAG,EAAE,OAAO,EAAS,GAAG,EAAE,QAAQ;IA2BtF,2EAA2E;IAErE,SAAS,CAAQ,GAAG,EAAE,cAAc,EAAS,GAAG,EAAE,OAAO,EAAS,GAAG,EAAE,QAAQ;IA2CrF,uCAAuC;IAEjC,eAAe,CAAQ,GAAG,EAAE,cAAc,EAAS,GAAG,EAAE,OAAO,EAAS,GAAG,EAAE,QAAQ;IAc3F;yBACqB;IAEf,cAAc,CAAQ,GAAG,EAAE,cAAc,EAAU,IAAI,EAAE,GAAG,EAAS,GAAG,EAAE,QAAQ;IAaxF;6CACyC;IAEnC,iBAAiB,CAAQ,GAAG,EAAE,cAAc,EAAsB,SAAS,EAAE,MAAM,EAAS,GAAG,EAAE,QAAQ;CAKlH"}
@@ -16,6 +16,7 @@ exports.EmailTrackingController = void 0;
16
16
  const common_1 = require("@nestjs/common");
17
17
  const core_1 = require("@vendure/core");
18
18
  const email_log_entity_1 = require("./email-log.entity");
19
+ const email_suppression_entity_1 = require("./email-suppression.entity");
19
20
  const email_tracking_service_1 = require("./email-tracking.service");
20
21
  const loggerCtx = 'EmailTrackingController';
21
22
  // 1×1 transparent GIF (43 bytes) returned by the open-tracking endpoint.
@@ -201,6 +202,132 @@ let EmailTrackingController = class EmailTrackingController {
201
202
  catch { }
202
203
  return res.json({ ...row, clicks, opens, clicksJson: undefined, opensJson: undefined });
203
204
  }
205
+ /** Admin: per-template aggregates — open rate + CTR by `type`.
206
+ * Drives the "By template" tab in the admin UI. */
207
+ async byTemplate(ctx, req, res) {
208
+ if (!requireAdmin(ctx, res, false))
209
+ return;
210
+ const days = Math.min(Math.max(parseInt(req.query.fromDays, 10) || 30, 1), 365);
211
+ const rows = await this.connection.rawConnection.query(`SELECT type,
212
+ COUNT(*) AS sent,
213
+ SUM(openCount > 0) AS opened,
214
+ SUM(clickCount > 0) AS clicked,
215
+ SUM(status='bounced' OR status='complained') AS bounced,
216
+ SUM(status='failed') AS failed,
217
+ SUM(status='suppressed') AS suppressed,
218
+ SUM(openCount) AS totalOpens,
219
+ SUM(clickCount) AS totalClicks
220
+ FROM email_log
221
+ WHERE createdAt >= DATE_SUB(NOW(), INTERVAL ? DAY)
222
+ GROUP BY type
223
+ ORDER BY sent DESC`, [days]);
224
+ return res.json({ days, types: rows.map((r) => ({
225
+ ...r,
226
+ openRate: r.sent > 0 ? (r.opened / r.sent) : 0,
227
+ clickRate: r.sent > 0 ? (r.clicked / r.sent) : 0,
228
+ ctor: r.opened > 0 ? (r.clicked / r.opened) : 0, // click-to-open
229
+ })) });
230
+ }
231
+ /** Admin: CSV export of the log with the same filters as the list view. */
232
+ async exportCsv(ctx, req, res) {
233
+ if (!requireAdmin(ctx, res, false))
234
+ return;
235
+ const q = req.query;
236
+ const where = [];
237
+ const params = [];
238
+ if (q.customerId) {
239
+ where.push('customerId = ?');
240
+ params.push(parseInt(q.customerId, 10));
241
+ }
242
+ if (q.orderId) {
243
+ where.push('orderId = ?');
244
+ params.push(parseInt(q.orderId, 10));
245
+ }
246
+ if (q.orderCode) {
247
+ where.push('orderCode = ?');
248
+ params.push(String(q.orderCode));
249
+ }
250
+ if (q.status) {
251
+ where.push('status = ?');
252
+ params.push(String(q.status));
253
+ }
254
+ if (q.type) {
255
+ where.push('type = ?');
256
+ params.push(String(q.type));
257
+ }
258
+ if (q.recipient) {
259
+ where.push('recipient LIKE ?');
260
+ params.push(`%${String(q.recipient)}%`);
261
+ }
262
+ if (q.from) {
263
+ where.push('createdAt >= ?');
264
+ params.push(new Date(String(q.from)));
265
+ }
266
+ if (q.to) {
267
+ where.push('createdAt <= ?');
268
+ params.push(new Date(String(q.to)));
269
+ }
270
+ const whereClause = where.length ? ` WHERE ${where.join(' AND ')}` : '';
271
+ const rows = await this.connection.rawConnection.query(`SELECT createdAt, type, recipient, subject, status,
272
+ openCount, clickCount, customerId, orderCode, invoiceId,
273
+ smtpMessageId, errorMessage
274
+ FROM email_log ${whereClause}
275
+ ORDER BY createdAt DESC LIMIT 50000`, params);
276
+ res.setHeader('Content-Type', 'text/csv; charset=utf-8');
277
+ res.setHeader('Content-Disposition', `attachment; filename="email-log-${new Date().toISOString().slice(0, 10)}.csv"`);
278
+ const esc = (v) => {
279
+ if (v === null || v === undefined)
280
+ return '';
281
+ const s = String(v).replace(/"/g, '""');
282
+ return /[",\n]/.test(s) ? `"${s}"` : s;
283
+ };
284
+ const header = 'createdAt,type,recipient,subject,status,openCount,clickCount,customerId,orderCode,invoiceId,smtpMessageId,errorMessage\n';
285
+ res.write(header);
286
+ for (const r of rows) {
287
+ res.write([
288
+ esc(r.createdAt instanceof Date ? r.createdAt.toISOString() : r.createdAt),
289
+ esc(r.type), esc(r.recipient), esc(r.subject), esc(r.status),
290
+ esc(r.openCount), esc(r.clickCount), esc(r.customerId),
291
+ esc(r.orderCode), esc(r.invoiceId),
292
+ esc(r.smtpMessageId), esc(r.errorMessage),
293
+ ].join(',') + '\n');
294
+ }
295
+ return res.end();
296
+ }
297
+ /** Admin: list suppression entries. */
298
+ async listSuppression(ctx, req, res) {
299
+ if (!requireAdmin(ctx, res, false))
300
+ return;
301
+ const take = Math.min(parseInt(String(req.query.take), 10) || 200, 1000);
302
+ const recipient = req.query.recipient;
303
+ const rows = recipient
304
+ ? await this.connection.rawConnection.getRepository(email_suppression_entity_1.EmailSuppression).find({
305
+ where: { recipient: String(recipient).toLowerCase() }, take,
306
+ })
307
+ : await this.connection.rawConnection.getRepository(email_suppression_entity_1.EmailSuppression).find({
308
+ order: { id: 'DESC' }, take,
309
+ });
310
+ return res.json({ items: rows, total: rows.length });
311
+ }
312
+ /** Admin: manually suppress a recipient (e.g. when the customer asks
313
+ * to be removed). */
314
+ async addSuppression(ctx, body, res) {
315
+ if (!requireAdmin(ctx, res, true))
316
+ return;
317
+ const recipient = String((body === null || body === void 0 ? void 0 : body.recipient) || '').trim();
318
+ if (!recipient.includes('@'))
319
+ return res.status(400).json({ error: 'Valid recipient required' });
320
+ const row = await this.tracking.addSuppression(recipient, String((body === null || body === void 0 ? void 0 : body.reason) || 'manual'), (body === null || body === void 0 ? void 0 : body.note) ? String(body.note) : undefined, (body === null || body === void 0 ? void 0 : body.channelId) ? Number(body.channelId) : undefined);
321
+ return res.json({ ok: true, row });
322
+ }
323
+ /** Admin: lift a suppression (recipient asked to be re-subscribed,
324
+ * or it was a transient hard bounce). */
325
+ async deleteSuppression(ctx, recipient, res) {
326
+ if (!requireAdmin(ctx, res, true))
327
+ return;
328
+ const removed = await this.tracking.removeSuppression(recipient);
329
+ return res.json({ ok: removed });
330
+ }
204
331
  };
205
332
  exports.EmailTrackingController = EmailTrackingController;
206
333
  __decorate([
@@ -257,6 +384,51 @@ __decorate([
257
384
  __metadata("design:paramtypes", [core_1.RequestContext, String, Object]),
258
385
  __metadata("design:returntype", Promise)
259
386
  ], EmailTrackingController.prototype, "logDetail", null);
387
+ __decorate([
388
+ (0, common_1.Get)('log/stats/by-template'),
389
+ __param(0, (0, core_1.Ctx)()),
390
+ __param(1, (0, common_1.Req)()),
391
+ __param(2, (0, common_1.Res)()),
392
+ __metadata("design:type", Function),
393
+ __metadata("design:paramtypes", [core_1.RequestContext, Object, Object]),
394
+ __metadata("design:returntype", Promise)
395
+ ], EmailTrackingController.prototype, "byTemplate", null);
396
+ __decorate([
397
+ (0, common_1.Get)('log/export.csv'),
398
+ __param(0, (0, core_1.Ctx)()),
399
+ __param(1, (0, common_1.Req)()),
400
+ __param(2, (0, common_1.Res)()),
401
+ __metadata("design:type", Function),
402
+ __metadata("design:paramtypes", [core_1.RequestContext, Object, Object]),
403
+ __metadata("design:returntype", Promise)
404
+ ], EmailTrackingController.prototype, "exportCsv", null);
405
+ __decorate([
406
+ (0, common_1.Get)('suppression'),
407
+ __param(0, (0, core_1.Ctx)()),
408
+ __param(1, (0, common_1.Req)()),
409
+ __param(2, (0, common_1.Res)()),
410
+ __metadata("design:type", Function),
411
+ __metadata("design:paramtypes", [core_1.RequestContext, Object, Object]),
412
+ __metadata("design:returntype", Promise)
413
+ ], EmailTrackingController.prototype, "listSuppression", null);
414
+ __decorate([
415
+ (0, common_1.Post)('suppression'),
416
+ __param(0, (0, core_1.Ctx)()),
417
+ __param(1, (0, common_1.Body)()),
418
+ __param(2, (0, common_1.Res)()),
419
+ __metadata("design:type", Function),
420
+ __metadata("design:paramtypes", [core_1.RequestContext, Object, Object]),
421
+ __metadata("design:returntype", Promise)
422
+ ], EmailTrackingController.prototype, "addSuppression", null);
423
+ __decorate([
424
+ (0, common_1.Delete)('suppression/:recipient'),
425
+ __param(0, (0, core_1.Ctx)()),
426
+ __param(1, (0, common_1.Param)('recipient')),
427
+ __param(2, (0, common_1.Res)()),
428
+ __metadata("design:type", Function),
429
+ __metadata("design:paramtypes", [core_1.RequestContext, String, Object]),
430
+ __metadata("design:returntype", Promise)
431
+ ], EmailTrackingController.prototype, "deleteSuppression", null);
260
432
  exports.EmailTrackingController = EmailTrackingController = __decorate([
261
433
  (0, common_1.Controller)('email-track'),
262
434
  __metadata("design:paramtypes", [core_1.TransactionalConnection,
@@ -1 +1 @@
1
- {"version":3,"file":"email-tracking.controller.js","sourceRoot":"","sources":["../src/email-tracking.controller.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"email-tracking.controller.js","sourceRoot":"","sources":["../src/email-tracking.controller.ts"],"names":[],"mappings":"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"}
@@ -1,6 +1,7 @@
1
1
  import { TransactionalConnection } from '@vendure/core';
2
2
  import * as nodemailer from 'nodemailer';
3
3
  import { EmailLog } from './email-log.entity';
4
+ import { EmailSuppression } from './email-suppression.entity';
4
5
  interface SendTrackedMeta {
5
6
  /** Logical email type — e.g. 'welcome', 'order-confirmation', 'invoice'. */
6
7
  type: string;
@@ -41,8 +42,14 @@ export declare class EmailTrackingService {
41
42
  /** Record a click + return the original URL so the controller can 302. */
42
43
  recordClick(id: number, url: string, ip: string | null, ua: string | null): Promise<string | null>;
43
44
  /** SMTP DSN (bounce / complaint) hook — wire up if you point Postmaster
44
- * Tools / a bounce-processor at /email-track/bounce. */
45
+ * Tools / a bounce-processor at /email-track/bounce. Hard bounces +
46
+ * complaints automatically add the recipient to the suppression list
47
+ * so the next send-attempt is refused. */
45
48
  recordBounce(messageId: string, status: 'bounced' | 'complained', reason?: string): Promise<boolean>;
49
+ /** Returns true if the recipient should be skipped at send-time. */
50
+ isSuppressed(recipient: string): Promise<boolean>;
51
+ addSuppression(recipient: string, reason: string, note?: string, channelId?: number): Promise<EmailSuppression>;
52
+ removeSuppression(recipient: string): Promise<boolean>;
46
53
  private firstAddress;
47
54
  }
48
55
  export {};
@@ -1 +1 @@
1
- {"version":3,"file":"email-tracking.service.d.ts","sourceRoot":"","sources":["../src/email-tracking.service.ts"],"names":[],"mappings":"AACA,OAAO,EAAU,uBAAuB,EAAE,MAAM,eAAe,CAAC;AAChE,OAAO,KAAK,UAAU,MAAM,YAAY,CAAC;AACzC,OAAO,EAAE,QAAQ,EAAkB,MAAM,oBAAoB,CAAC;AAK9D,UAAU,eAAe;IACrB,4EAA4E;IAC5E,IAAI,EAAE,MAAM,CAAC;IACb,wEAAwE;IACxE,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,qDAAqD;IACrD,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,aAAa,CAAC,EAAE,MAAM,CAAC;CAC1B;AAED,qBACa,oBAAoB;IACjB,OAAO,CAAC,UAAU;gBAAV,UAAU,EAAE,uBAAuB;IAEvD;;;;;;;;;OASG;IACG,WAAW,CACb,WAAW,EAAE,UAAU,CAAC,WAAW,EACnC,IAAI,EAAE,UAAU,CAAC,eAAe,EAChC,IAAI,EAAE,eAAe,GACtB,OAAO,CAAC,QAAQ,CAAC;IAwDpB,yEAAyE;IACzE,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,MAAM;IAW/C;;iDAE6C;IAC7C,OAAO,CAAC,YAAY;IAepB;;4DAEwD;IAClD,UAAU,CAAC,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,GAAG,IAAI,EAAE,EAAE,EAAE,MAAM,GAAG,IAAI;IAwBjE,0EAA0E;IACpE,WAAW,CAAC,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,GAAG,IAAI,EAAE,EAAE,EAAE,MAAM,GAAG,IAAI,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;IAuBxG;6DACyD;IACnD,YAAY,CAAC,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,GAAG,YAAY,EAAE,MAAM,CAAC,EAAE,MAAM;IAUvF,OAAO,CAAC,YAAY;CAOvB"}
1
+ {"version":3,"file":"email-tracking.service.d.ts","sourceRoot":"","sources":["../src/email-tracking.service.ts"],"names":[],"mappings":"AACA,OAAO,EAAU,uBAAuB,EAAE,MAAM,eAAe,CAAC;AAChE,OAAO,KAAK,UAAU,MAAM,YAAY,CAAC;AACzC,OAAO,EAAE,QAAQ,EAAkB,MAAM,oBAAoB,CAAC;AAC9D,OAAO,EAAE,gBAAgB,EAAE,MAAM,4BAA4B,CAAC;AAM9D,UAAU,eAAe;IACrB,4EAA4E;IAC5E,IAAI,EAAE,MAAM,CAAC;IACb,wEAAwE;IACxE,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,qDAAqD;IACrD,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,aAAa,CAAC,EAAE,MAAM,CAAC;CAC1B;AAED,qBACa,oBAAoB;IACjB,OAAO,CAAC,UAAU;gBAAV,UAAU,EAAE,uBAAuB;IAEvD;;;;;;;;;OASG;IACG,WAAW,CACb,WAAW,EAAE,UAAU,CAAC,WAAW,EACnC,IAAI,EAAE,UAAU,CAAC,eAAe,EAChC,IAAI,EAAE,eAAe,GACtB,OAAO,CAAC,QAAQ,CAAC;IA0EpB,yEAAyE;IACzE,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,MAAM;IAW/C;;iDAE6C;IAC7C,OAAO,CAAC,YAAY;IAepB;;4DAEwD;IAClD,UAAU,CAAC,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,GAAG,IAAI,EAAE,EAAE,EAAE,MAAM,GAAG,IAAI;IA4BjE,0EAA0E;IACpE,WAAW,CAAC,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,GAAG,IAAI,EAAE,EAAE,EAAE,MAAM,GAAG,IAAI,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;IAuBxG;;;+CAG2C;IACrC,YAAY,CAAC,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,GAAG,YAAY,EAAE,MAAM,CAAC,EAAE,MAAM;IAevF,oEAAoE;IAC9D,YAAY,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAOjD,cAAc,CAAC,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,gBAAgB,CAAC;IAoB/G,iBAAiB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAM5D,OAAO,CAAC,YAAY;CAOvB"}
@@ -13,7 +13,9 @@ exports.EmailTrackingService = void 0;
13
13
  const common_1 = require("@nestjs/common");
14
14
  const core_1 = require("@vendure/core");
15
15
  const email_log_entity_1 = require("./email-log.entity");
16
+ const email_suppression_entity_1 = require("./email-suppression.entity");
16
17
  const options_1 = require("./options");
18
+ const parse_ua_1 = require("./parse-ua");
17
19
  const loggerCtx = 'EmailTrackingService';
18
20
  let EmailTrackingService = class EmailTrackingService {
19
21
  constructor(connection) {
@@ -31,6 +33,23 @@ let EmailTrackingService = class EmailTrackingService {
31
33
  */
32
34
  async sendTracked(transporter, mail, meta) {
33
35
  const repo = this.connection.rawConnection.getRepository(email_log_entity_1.EmailLog);
36
+ const recipient = this.firstAddress(mail.to) || '';
37
+ // Suppression check — refuse to call SMTP for recipients on the
38
+ // suppression list, and record a `status='suppressed'` row so
39
+ // the admin can still see the attempt in the log.
40
+ if (recipient && await this.isSuppressed(recipient)) {
41
+ const suppressed = repo.create({
42
+ type: meta.type, recipient,
43
+ subject: String(mail.subject || ''),
44
+ fromAddress: this.firstAddress(mail.from),
45
+ channelId: meta.channelId || 1,
46
+ customerId: meta.customerId, orderId: meta.orderId, orderCode: meta.orderCode,
47
+ invoiceId: meta.invoiceId, applicationId: meta.applicationId,
48
+ status: 'suppressed', tracked: true,
49
+ errorMessage: 'Recipient is on the suppression list',
50
+ });
51
+ return await repo.save(suppressed);
52
+ }
34
53
  // Create the row up-front so the pixel/click URLs have an id to
35
54
  // reference. status starts as 'sent' optimistically; we update
36
55
  // it if the SMTP submit throws or returns 4xx/5xx.
@@ -138,10 +157,14 @@ let EmailTrackingService = class EmailTrackingService {
138
157
  opens = JSON.parse(row.opensJson || '[]');
139
158
  }
140
159
  catch { }
160
+ const parsed = (0, parse_ua_1.parseEmailClient)(ua);
141
161
  opens.push({
142
162
  ts: now.toISOString(),
143
163
  ip,
144
164
  ua: ua ? ua.slice(0, 300) : null,
165
+ client: parsed.client,
166
+ platform: parsed.platform,
167
+ isBot: parsed.isBot,
145
168
  });
146
169
  if (opens.length > 50)
147
170
  opens = opens.slice(-50);
@@ -178,7 +201,9 @@ let EmailTrackingService = class EmailTrackingService {
178
201
  return url;
179
202
  }
180
203
  /** SMTP DSN (bounce / complaint) hook — wire up if you point Postmaster
181
- * Tools / a bounce-processor at /email-track/bounce. */
204
+ * Tools / a bounce-processor at /email-track/bounce. Hard bounces +
205
+ * complaints automatically add the recipient to the suppression list
206
+ * so the next send-attempt is refused. */
182
207
  async recordBounce(messageId, status, reason) {
183
208
  const repo = this.connection.rawConnection.getRepository(email_log_entity_1.EmailLog);
184
209
  const row = await repo.findOne({ where: { smtpMessageId: messageId } });
@@ -188,8 +213,44 @@ let EmailTrackingService = class EmailTrackingService {
188
213
  if (reason)
189
214
  row.errorMessage = reason.slice(0, 2000);
190
215
  await repo.save(row);
216
+ if (row.recipient) {
217
+ const suppressionReason = status === 'complained' ? 'complaint' : 'hard-bounce';
218
+ await this.addSuppression(row.recipient, suppressionReason, reason || `Auto-added from ${status} on email #${row.id}`, row.channelId);
219
+ }
191
220
  return true;
192
221
  }
222
+ /** Returns true if the recipient should be skipped at send-time. */
223
+ async isSuppressed(recipient) {
224
+ if (!recipient)
225
+ return false;
226
+ const repo = this.connection.rawConnection.getRepository(email_suppression_entity_1.EmailSuppression);
227
+ const row = await repo.findOne({ where: { recipient: recipient.toLowerCase() } });
228
+ return !!row;
229
+ }
230
+ async addSuppression(recipient, reason, note, channelId) {
231
+ const repo = this.connection.rawConnection.getRepository(email_suppression_entity_1.EmailSuppression);
232
+ const lower = recipient.toLowerCase();
233
+ const existing = await repo.findOne({ where: { recipient: lower } });
234
+ if (existing) {
235
+ if (note && note !== existing.note) {
236
+ existing.note = note.slice(0, 2000);
237
+ return await repo.save(existing);
238
+ }
239
+ return existing;
240
+ }
241
+ const row = repo.create({
242
+ recipient: lower,
243
+ reason,
244
+ note: note ? note.slice(0, 2000) : null,
245
+ channelId: channelId || null,
246
+ });
247
+ return await repo.save(row);
248
+ }
249
+ async removeSuppression(recipient) {
250
+ const repo = this.connection.rawConnection.getRepository(email_suppression_entity_1.EmailSuppression);
251
+ const res = await repo.delete({ recipient: recipient.toLowerCase() });
252
+ return !!(res.affected && res.affected > 0);
253
+ }
193
254
  firstAddress(addr) {
194
255
  if (!addr)
195
256
  return undefined;
@@ -1 +1 @@
1
- {"version":3,"file":"email-tracking.service.js","sourceRoot":"","sources":["../src/email-tracking.service.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"email-tracking.service.js","sourceRoot":"","sources":["../src/email-tracking.service.ts"],"names":[],"mappings":"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"}
package/dist/index.d.ts CHANGED
@@ -12,5 +12,7 @@ export { EmailTrackingPlugin } from './plugin';
12
12
  export { TrackingEmailSender } from './tracking-email-sender';
13
13
  export { EmailTrackingService } from './email-tracking.service';
14
14
  export { EmailLog, EmailLogStatus } from './email-log.entity';
15
+ export { EmailSuppression } from './email-suppression.entity';
15
16
  export { EmailTrackingPluginOptions } from './options';
17
+ export { parseEmailClient, ParsedClient } from './parse-ua';
16
18
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,EAAE,mBAAmB,EAAE,MAAM,UAAU,CAAC;AAC/C,OAAO,EAAE,mBAAmB,EAAE,MAAM,yBAAyB,CAAC;AAC9D,OAAO,EAAE,oBAAoB,EAAE,MAAM,0BAA0B,CAAC;AAChE,OAAO,EAAE,QAAQ,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAC9D,OAAO,EAAE,0BAA0B,EAAE,MAAM,WAAW,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,EAAE,mBAAmB,EAAE,MAAM,UAAU,CAAC;AAC/C,OAAO,EAAE,mBAAmB,EAAE,MAAM,yBAAyB,CAAC;AAC9D,OAAO,EAAE,oBAAoB,EAAE,MAAM,0BAA0B,CAAC;AAChE,OAAO,EAAE,QAAQ,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAC9D,OAAO,EAAE,gBAAgB,EAAE,MAAM,4BAA4B,CAAC;AAC9D,OAAO,EAAE,0BAA0B,EAAE,MAAM,WAAW,CAAC;AACvD,OAAO,EAAE,gBAAgB,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC"}
package/dist/index.js CHANGED
@@ -10,7 +10,7 @@
10
10
  * code).
11
11
  */
12
12
  Object.defineProperty(exports, "__esModule", { value: true });
13
- exports.EmailLog = exports.EmailTrackingService = exports.TrackingEmailSender = exports.EmailTrackingPlugin = void 0;
13
+ exports.parseEmailClient = exports.EmailSuppression = exports.EmailLog = exports.EmailTrackingService = exports.TrackingEmailSender = exports.EmailTrackingPlugin = void 0;
14
14
  var plugin_1 = require("./plugin");
15
15
  Object.defineProperty(exports, "EmailTrackingPlugin", { enumerable: true, get: function () { return plugin_1.EmailTrackingPlugin; } });
16
16
  var tracking_email_sender_1 = require("./tracking-email-sender");
@@ -19,4 +19,8 @@ var email_tracking_service_1 = require("./email-tracking.service");
19
19
  Object.defineProperty(exports, "EmailTrackingService", { enumerable: true, get: function () { return email_tracking_service_1.EmailTrackingService; } });
20
20
  var email_log_entity_1 = require("./email-log.entity");
21
21
  Object.defineProperty(exports, "EmailLog", { enumerable: true, get: function () { return email_log_entity_1.EmailLog; } });
22
+ var email_suppression_entity_1 = require("./email-suppression.entity");
23
+ Object.defineProperty(exports, "EmailSuppression", { enumerable: true, get: function () { return email_suppression_entity_1.EmailSuppression; } });
24
+ var parse_ua_1 = require("./parse-ua");
25
+ Object.defineProperty(exports, "parseEmailClient", { enumerable: true, get: function () { return parse_ua_1.parseEmailClient; } });
22
26
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAAA;;;;;;;;;GASG;;;AAEH,mCAA+C;AAAtC,6GAAA,mBAAmB,OAAA;AAC5B,iEAA8D;AAArD,4HAAA,mBAAmB,OAAA;AAC5B,mEAAgE;AAAvD,8HAAA,oBAAoB,OAAA;AAC7B,uDAA8D;AAArD,4GAAA,QAAQ,OAAA"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAAA;;;;;;;;;GASG;;;AAEH,mCAA+C;AAAtC,6GAAA,mBAAmB,OAAA;AAC5B,iEAA8D;AAArD,4HAAA,mBAAmB,OAAA;AAC5B,mEAAgE;AAAvD,8HAAA,oBAAoB,OAAA;AAC7B,uDAA8D;AAArD,4GAAA,QAAQ,OAAA;AACjB,uEAA8D;AAArD,4HAAA,gBAAgB,OAAA;AAEzB,uCAA4D;AAAnD,4GAAA,gBAAgB,OAAA"}
@@ -0,0 +1,15 @@
1
+ /**
2
+ * Lightweight User-Agent → email-client classifier.
3
+ *
4
+ * We deliberately don't pull in the full `ua-parser-js` here — email
5
+ * clients have a small, well-known set of UA strings, and a tight
6
+ * 30-line classifier covers ~98% of real opens. Keeps the plugin's
7
+ * dependency footprint zero.
8
+ */
9
+ export interface ParsedClient {
10
+ client: string;
11
+ platform: string;
12
+ isBot: boolean;
13
+ }
14
+ export declare function parseEmailClient(ua: string | null | undefined): ParsedClient;
15
+ //# sourceMappingURL=parse-ua.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"parse-ua.d.ts","sourceRoot":"","sources":["../src/parse-ua.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH,MAAM,WAAW,YAAY;IACzB,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,OAAO,CAAC;CAClB;AAED,wBAAgB,gBAAgB,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GAAG,YAAY,CAwC5E"}
@@ -0,0 +1,71 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.parseEmailClient = parseEmailClient;
4
+ function parseEmailClient(ua) {
5
+ if (!ua)
6
+ return { client: 'unknown', platform: 'unknown', isBot: false };
7
+ const s = ua.toLowerCase();
8
+ // Bots / pre-fetchers — these inflate open counts.
9
+ if (/googleimageproxy|ggpht/.test(s))
10
+ return { client: 'Gmail (prefetch)', platform: 'web', isBot: true };
11
+ if (/yahoomailproxy|yahoo!.*proxy/.test(s))
12
+ return { client: 'Yahoo Mail (prefetch)', platform: 'web', isBot: true };
13
+ if (/microsoft.*officeprotectionservice|safelinks/.test(s))
14
+ return { client: 'Outlook SafeLinks', platform: 'web', isBot: true };
15
+ if (/bot|spider|crawler|preview|curl|wget|python-requests|axios|node-fetch|libwww/.test(s)) {
16
+ return { client: 'Bot / scanner', platform: 'unknown', isBot: true };
17
+ }
18
+ // Apple Mail family.
19
+ if (/applemail/.test(s) || /^mail\//.test(s) || /\bmail\/[\d.]+\b.*(iphone|ipad)/.test(s)) {
20
+ if (/iphone/.test(s))
21
+ return { client: 'Apple Mail', platform: 'iOS', isBot: false };
22
+ if (/ipad/.test(s))
23
+ return { client: 'Apple Mail', platform: 'iPadOS', isBot: false };
24
+ if (/mac os x|macintosh/.test(s))
25
+ return { client: 'Apple Mail', platform: 'macOS', isBot: false };
26
+ return { client: 'Apple Mail', platform: 'unknown', isBot: false };
27
+ }
28
+ // Outlook desktop + web.
29
+ if (/microsoft outlook/.test(s))
30
+ return { client: 'Outlook desktop', platform: detectOs(s), isBot: false };
31
+ if (/outlook-ios/.test(s))
32
+ return { client: 'Outlook mobile', platform: 'iOS', isBot: false };
33
+ if (/outlook-android/.test(s))
34
+ return { client: 'Outlook mobile', platform: 'Android', isBot: false };
35
+ if (/outlook\.live\.com|outlook\.office\.com|owa/.test(s))
36
+ return { client: 'Outlook web', platform: 'web', isBot: false };
37
+ // Gmail clients.
38
+ if (/gmail/.test(s) && /mobile/.test(s))
39
+ return { client: 'Gmail mobile', platform: /android/.test(s) ? 'Android' : 'iOS', isBot: false };
40
+ if (/gmail/.test(s))
41
+ return { client: 'Gmail web', platform: 'web', isBot: false };
42
+ // Yahoo / Thunderbird / others.
43
+ if (/thunderbird/.test(s))
44
+ return { client: 'Thunderbird', platform: detectOs(s), isBot: false };
45
+ if (/yahoo!.*mail|yahoomail/.test(s))
46
+ return { client: 'Yahoo Mail', platform: 'web', isBot: false };
47
+ // Fallback: it's almost certainly a browser preview.
48
+ if (/firefox/.test(s))
49
+ return { client: 'Firefox', platform: detectOs(s), isBot: false };
50
+ if (/chrome/.test(s))
51
+ return { client: 'Chrome', platform: detectOs(s), isBot: false };
52
+ if (/safari/.test(s))
53
+ return { client: 'Safari', platform: detectOs(s), isBot: false };
54
+ return { client: 'unknown', platform: detectOs(s), isBot: false };
55
+ }
56
+ function detectOs(s) {
57
+ if (/iphone/.test(s))
58
+ return 'iOS';
59
+ if (/ipad/.test(s))
60
+ return 'iPadOS';
61
+ if (/android/.test(s))
62
+ return 'Android';
63
+ if (/mac os x|macintosh/.test(s))
64
+ return 'macOS';
65
+ if (/windows/.test(s))
66
+ return 'Windows';
67
+ if (/linux/.test(s))
68
+ return 'Linux';
69
+ return 'unknown';
70
+ }
71
+ //# sourceMappingURL=parse-ua.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"parse-ua.js","sourceRoot":"","sources":["../src/parse-ua.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"plugin.d.ts","sourceRoot":"","sources":["../src/plugin.ts"],"names":[],"mappings":"AAAA,OAAO,EAAsB,IAAI,EAAiB,MAAM,eAAe,CAAC;AAMxE,OAAO,EAAE,0BAA0B,EAAgC,MAAM,WAAW,CAAC;AAmBrF;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+BG;AACH,qBAOa,mBAAmB;IAC5B,OAAO,CAAC,MAAM,CAAC,UAAU,CAAkC;IAE3D,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,0BAA0B,GAAG,IAAI,CAAC,mBAAmB,CAAC;IAgC3E,MAAM,CAAC,YAAY;;;;;;;;;;;;;MAejB;CACL"}
1
+ {"version":3,"file":"plugin.d.ts","sourceRoot":"","sources":["../src/plugin.ts"],"names":[],"mappings":"AAAA,OAAO,EAAsB,IAAI,EAAiB,MAAM,eAAe,CAAC;AAOxE,OAAO,EAAE,0BAA0B,EAAgC,MAAM,WAAW,CAAC;AAmBrF;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+BG;AACH,qBAOa,mBAAmB;IAC5B,OAAO,CAAC,MAAM,CAAC,UAAU,CAAkC;IAE3D,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,0BAA0B,GAAG,IAAI,CAAC,mBAAmB,CAAC;IAgC3E,MAAM,CAAC,YAAY;;;;;;;;;;;;;MAejB;CACL"}
package/dist/plugin.js CHANGED
@@ -11,6 +11,7 @@ exports.EmailTrackingPlugin = void 0;
11
11
  const core_1 = require("@vendure/core");
12
12
  const vendure_licence_sdk_1 = require("@huloglobal/vendure-licence-sdk");
13
13
  const email_log_entity_1 = require("./email-log.entity");
14
+ const email_suppression_entity_1 = require("./email-suppression.entity");
14
15
  const email_tracking_service_1 = require("./email-tracking.service");
15
16
  const email_tracking_controller_1 = require("./email-tracking.controller");
16
17
  const options_1 = require("./options");
@@ -111,7 +112,7 @@ exports.EmailTrackingPlugin = EmailTrackingPlugin = EmailTrackingPlugin_1 = __de
111
112
  imports: [core_1.PluginCommonModule],
112
113
  providers: [email_tracking_service_1.EmailTrackingService],
113
114
  controllers: [email_tracking_controller_1.EmailTrackingController],
114
- entities: [email_log_entity_1.EmailLog],
115
+ entities: [email_log_entity_1.EmailLog, email_suppression_entity_1.EmailSuppression],
115
116
  compatibility: '^3.0.0',
116
117
  })
117
118
  ], EmailTrackingPlugin);
@@ -1 +1 @@
1
- {"version":3,"file":"plugin.js","sourceRoot":"","sources":["../src/plugin.ts"],"names":[],"mappings":";;;;;;;;;;AAAA,wCAAwE;AACxE,yEAAmF;AACnF,yDAA8C;AAC9C,qEAAgE;AAChE,2EAAsE;AAEtE,uCAAqF;AAErF,uEAAuE;AACvE,qEAAqE;AACrE,qEAAqE;AACrE,MAAM,eAAe,GAAG;;;;;;;;yBAQC,CAAC;AAE1B,MAAM,SAAS,GAAG,+BAA+B,CAAC;AAClD,MAAM,cAAc,GAAG,OAAO,CAAC,GAAG,CAAC,2BAA2B;OACvD,4CAA4C,CAAC;AAEpD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+BG;AAQI,IAAM,mBAAmB,2BAAzB,MAAM,mBAAmB;IAG5B,MAAM,CAAC,IAAI,CAAC,OAAmC;QAC3C,IAAA,oBAAU,EAAC,OAAO,CAAC,CAAC;QAEpB,+DAA+D;QAC/D,kEAAkE;QAClE,IAAI,CAAC,qBAAmB,CAAC,UAAU,EAAE,CAAC;YAClC,qBAAmB,CAAC,UAAU,GAAG,IAAI,uCAAiB,CAAC,cAAc,CAAC,CAAC;YACvE,qBAAmB,CAAC,UAAU,CAAC,KAAK,EAAE,CAAC;QAC3C,CAAC;QAED,MAAM,IAAI,GAAG,CAAC,OAAO,CAAC,aAAa,IAAI,EAAE,CAAC;aACrC,OAAO,CAAC,cAAc,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;QACtD,MAAM,MAAM,GAAG,IAAA,mCAAa,EAAC;YACzB,UAAU,EAAE,OAAO,CAAC,UAAU;YAC9B,QAAQ,EAAE,SAAS;YACnB,IAAI;YACJ,SAAS,EAAE,eAAe;YAC1B,UAAU,EAAE,qBAAmB,CAAC,UAAU,CAAC,aAAa,EAAE;SAC7D,CAAC,CAAC;QACH,IAAA,0BAAgB,EAAC,MAAM,CAAC,CAAC;QAEzB,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;YAChB,sCAAsC;YACtC,OAAO,CAAC,IAAI,CACR,+CAA+C,MAAM,CAAC,OAAO,EAAE;gBAC/D,6FAA6F,SAAS,EAAE,CAC3G,CAAC;QACN,CAAC;QAED,OAAO,qBAAmB,CAAC;IAC/B,CAAC;;AAjCQ,kDAAmB;AACb,8BAAU,GAA6B,IAAI,AAAjC,CAAkC;AAkCpD,gCAAY,GAAG;IAClB,aAAa,EAAE,SAAS,GAAG,QAAQ;IACnC,SAAS,EAAE;QACP;YACI,IAAI,EAAE,MAAe;YACrB,KAAK,EAAE,WAAW;YAClB,gBAAgB,EAAE,qBAAqB;YACvC,YAAY,EAAE,gBAAgB;SACjC;QACD;YACI,IAAI,EAAE,QAAiB;YACvB,gBAAgB,EAAE,yBAAyB;YAC3C,YAAY,EAAE,mBAAmB;SACpC;KACJ;CACJ,AAfkB,CAejB;8BAlDO,mBAAmB;IAP/B,IAAA,oBAAa,EAAC;QACX,OAAO,EAAE,CAAC,yBAAkB,CAAC;QAC7B,SAAS,EAAE,CAAC,6CAAoB,CAAC;QACjC,WAAW,EAAE,CAAC,mDAAuB,CAAC;QACtC,QAAQ,EAAE,CAAC,2BAAQ,CAAC;QACpB,aAAa,EAAE,QAAQ;KAC1B,CAAC;GACW,mBAAmB,CAmD/B"}
1
+ {"version":3,"file":"plugin.js","sourceRoot":"","sources":["../src/plugin.ts"],"names":[],"mappings":";;;;;;;;;;AAAA,wCAAwE;AACxE,yEAAmF;AACnF,yDAA8C;AAC9C,yEAA8D;AAC9D,qEAAgE;AAChE,2EAAsE;AAEtE,uCAAqF;AAErF,uEAAuE;AACvE,qEAAqE;AACrE,qEAAqE;AACrE,MAAM,eAAe,GAAG;;;;;;;;yBAQC,CAAC;AAE1B,MAAM,SAAS,GAAG,+BAA+B,CAAC;AAClD,MAAM,cAAc,GAAG,OAAO,CAAC,GAAG,CAAC,2BAA2B;OACvD,4CAA4C,CAAC;AAEpD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+BG;AAQI,IAAM,mBAAmB,2BAAzB,MAAM,mBAAmB;IAG5B,MAAM,CAAC,IAAI,CAAC,OAAmC;QAC3C,IAAA,oBAAU,EAAC,OAAO,CAAC,CAAC;QAEpB,+DAA+D;QAC/D,kEAAkE;QAClE,IAAI,CAAC,qBAAmB,CAAC,UAAU,EAAE,CAAC;YAClC,qBAAmB,CAAC,UAAU,GAAG,IAAI,uCAAiB,CAAC,cAAc,CAAC,CAAC;YACvE,qBAAmB,CAAC,UAAU,CAAC,KAAK,EAAE,CAAC;QAC3C,CAAC;QAED,MAAM,IAAI,GAAG,CAAC,OAAO,CAAC,aAAa,IAAI,EAAE,CAAC;aACrC,OAAO,CAAC,cAAc,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;QACtD,MAAM,MAAM,GAAG,IAAA,mCAAa,EAAC;YACzB,UAAU,EAAE,OAAO,CAAC,UAAU;YAC9B,QAAQ,EAAE,SAAS;YACnB,IAAI;YACJ,SAAS,EAAE,eAAe;YAC1B,UAAU,EAAE,qBAAmB,CAAC,UAAU,CAAC,aAAa,EAAE;SAC7D,CAAC,CAAC;QACH,IAAA,0BAAgB,EAAC,MAAM,CAAC,CAAC;QAEzB,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;YAChB,sCAAsC;YACtC,OAAO,CAAC,IAAI,CACR,+CAA+C,MAAM,CAAC,OAAO,EAAE;gBAC/D,6FAA6F,SAAS,EAAE,CAC3G,CAAC;QACN,CAAC;QAED,OAAO,qBAAmB,CAAC;IAC/B,CAAC;;AAjCQ,kDAAmB;AACb,8BAAU,GAA6B,IAAI,AAAjC,CAAkC;AAkCpD,gCAAY,GAAG;IAClB,aAAa,EAAE,SAAS,GAAG,QAAQ;IACnC,SAAS,EAAE;QACP;YACI,IAAI,EAAE,MAAe;YACrB,KAAK,EAAE,WAAW;YAClB,gBAAgB,EAAE,qBAAqB;YACvC,YAAY,EAAE,gBAAgB;SACjC;QACD;YACI,IAAI,EAAE,QAAiB;YACvB,gBAAgB,EAAE,yBAAyB;YAC3C,YAAY,EAAE,mBAAmB;SACpC;KACJ;CACJ,AAfkB,CAejB;8BAlDO,mBAAmB;IAP/B,IAAA,oBAAa,EAAC;QACX,OAAO,EAAE,CAAC,yBAAkB,CAAC;QAC7B,SAAS,EAAE,CAAC,6CAAoB,CAAC;QACjC,WAAW,EAAE,CAAC,mDAAuB,CAAC;QACtC,QAAQ,EAAE,CAAC,2BAAQ,EAAE,2CAAgB,CAAC;QACtC,aAAa,EAAE,QAAQ;KAC1B,CAAC;GACW,mBAAmB,CAmD/B"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@huloglobal/vendure-plugin-email-tracking",
3
- "version": "0.2.0",
3
+ "version": "0.3.0",
4
4
  "description": "Track delivery, opens and clicks on every transactional email a Vendure server sends. Wraps the @vendure/email-plugin pipeline plus an exposed helper for plugin-authored sends, persists every event to a dedicated EmailLog table, and ships an admin UI for per-customer / per-order audit trails.",
5
5
  "license": "SEE LICENSE IN LICENSE",
6
6
  "author": "Wayne Garrison <wayne@garrison.me.uk>",
@@ -34,6 +34,7 @@ interface EmailDetail extends EmailRow {
34
34
  firstOpenIp: string | null;
35
35
  firstOpenUserAgent: string | null;
36
36
  clicks: Array<{ url: string; ts: string; ip: string | null; ua: string | null }>;
37
+ opens: Array<{ ts: string; ip: string | null; ua: string | null }>;
37
38
  }
38
39
 
39
40
  @Component({
@@ -171,18 +172,36 @@ interface EmailDetail extends EmailRow {
171
172
  <div *ngIf="detail.firstOpenUserAgent" style="font-size:11px;color:var(--color-component-color-300)">{{ detail.firstOpenUserAgent }}</div>
172
173
  </div>
173
174
  </div>
174
- <h5 style="margin-top:15px" *ngIf="detail.clicks.length > 0">Clicks ({{ detail.clickCount }})</h5>
175
+ <h5 style="margin-top:18px" *ngIf="detail.opens && detail.opens.length > 0">Open history ({{ detail.openCount }})</h5>
176
+ <table class="table table-compact" *ngIf="detail.opens && detail.opens.length > 0">
177
+ <thead><tr><th style="width:160px">Time</th><th style="width:140px">IP</th><th>User-Agent</th></tr></thead>
178
+ <tbody>
179
+ <tr *ngFor="let o of detail.opens">
180
+ <td>{{ o.ts | date:'medium' }}</td>
181
+ <td style="font-family:monospace;font-size:11px">{{ o.ip || '—' }}</td>
182
+ <td style="font-size:11px;color:var(--color-component-color-300)">{{ o.ua || '—' }}</td>
183
+ </tr>
184
+ </tbody>
185
+ </table>
186
+ <p *ngIf="detail.openCount > 50 && detail.opens && detail.opens.length === 50" class="help-text" style="margin:6px 0 0">
187
+ Showing the most recent 50 opens. Older opens contribute to the open count above.
188
+ </p>
189
+
190
+ <h5 style="margin-top:18px" *ngIf="detail.clicks.length > 0">Click history ({{ detail.clickCount }})</h5>
175
191
  <table class="table table-compact" *ngIf="detail.clicks.length > 0">
176
- <thead><tr><th>Time</th><th>URL</th><th>IP</th><th>UA</th></tr></thead>
192
+ <thead><tr><th style="width:160px">Time</th><th>URL</th><th style="width:140px">IP</th><th>User-Agent</th></tr></thead>
177
193
  <tbody>
178
194
  <tr *ngFor="let c of detail.clicks">
179
- <td>{{ c.ts | date:'short' }}</td>
195
+ <td>{{ c.ts | date:'medium' }}</td>
180
196
  <td style="font-family:monospace;font-size:11px;word-break:break-all"><a [href]="c.url" target="_blank">{{ c.url }}</a></td>
181
- <td>{{ c.ip }}</td>
182
- <td style="font-size:11px;color:var(--color-component-color-300)">{{ c.ua }}</td>
197
+ <td style="font-family:monospace;font-size:11px">{{ c.ip || '—' }}</td>
198
+ <td style="font-size:11px;color:var(--color-component-color-300)">{{ c.ua || '—' }}</td>
183
199
  </tr>
184
200
  </tbody>
185
201
  </table>
202
+ <p *ngIf="detail.clickCount > 50 && detail.clicks.length === 50" class="help-text" style="margin:6px 0 0">
203
+ Showing the most recent 50 clicks. Older clicks contribute to the click count above.
204
+ </p>
186
205
  </td>
187
206
  </tr>
188
207
  </ng-container>