@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.
- package/dist/email-log.entity.d.ts +1 -1
- package/dist/email-log.entity.d.ts.map +1 -1
- package/dist/email-log.entity.js.map +1 -1
- package/dist/email-suppression.entity.d.ts +18 -0
- package/dist/email-suppression.entity.d.ts.map +1 -0
- package/dist/email-suppression.entity.js +50 -0
- package/dist/email-suppression.entity.js.map +1 -0
- package/dist/email-tracking.controller.d.ts +13 -0
- package/dist/email-tracking.controller.d.ts.map +1 -1
- package/dist/email-tracking.controller.js +172 -0
- package/dist/email-tracking.controller.js.map +1 -1
- package/dist/email-tracking.service.d.ts +8 -1
- package/dist/email-tracking.service.d.ts.map +1 -1
- package/dist/email-tracking.service.js +62 -1
- package/dist/email-tracking.service.js.map +1 -1
- package/dist/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +5 -1
- package/dist/index.js.map +1 -1
- package/dist/parse-ua.d.ts +15 -0
- package/dist/parse-ua.d.ts.map +1 -0
- package/dist/parse-ua.js +71 -0
- package/dist/parse-ua.js.map +1 -0
- package/dist/plugin.d.ts.map +1 -1
- package/dist/plugin.js +2 -1
- package/dist/plugin.js.map +1 -1
- package/package.json +1 -1
- package/ui/components/email-log.component.ts +24 -5
|
@@ -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":";;;;;;;;;;;;AAAA,wCAA2D;AAC3D,qCAAgD;
|
|
1
|
+
{"version":3,"file":"email-log.entity.js","sourceRoot":"","sources":["../src/email-log.entity.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,wCAA2D;AAC3D,qCAAgD;AAUhD;;;;;;;;;;;GAWG;AAEI,IAAM,QAAQ,GAAd,MAAM,QAAS,SAAQ,oBAAa;IACvC,YAAY,KAA6B;QACrC,KAAK,CAAC,KAAK,CAAC,CAAC;IACjB,CAAC;CA0GJ,CAAA;AA7GY,4BAAQ;AAWjB;IAFC,IAAA,eAAK,GAAE;IACP,IAAA,gBAAM,GAAE;;sCACK;AAId;IAFC,IAAA,eAAK,GAAE;IACP,IAAA,gBAAM,GAAE;;2CACU;AAGnB;IADC,IAAA,gBAAM,EAAC,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC;;yCACxB;AAIjB;IADC,IAAA,gBAAM,EAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC;;6CACnB;AAIrB;IADC,IAAA,gBAAM,EAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC;;qCAC3B;AAIb;IADC,IAAA,gBAAM,EAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC;;yCACvB;AAIjB;IADC,IAAA,gBAAM,EAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;;yCACV;AAGjB;IADC,IAAA,gBAAM,EAAC,EAAE,IAAI,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC;;2CACjB;AAKnB;IAFC,IAAA,eAAK,GAAE;IACP,IAAA,gBAAM,EAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;;4CACP;AAIpB;IAFC,IAAA,eAAK,GAAE;IACP,IAAA,gBAAM,EAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;;yCACV;AAIjB;IAFC,IAAA,eAAK,GAAE;IACP,IAAA,gBAAM,EAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;;2CACR;AAGnB;IADC,IAAA,gBAAM,EAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;;2CACR;AAGnB;IADC,IAAA,gBAAM,EAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;;+CACJ;AAKvB;IAFC,IAAA,eAAK,GAAE;IACP,IAAA,gBAAM,EAAC,EAAE,IAAI,EAAE,SAAS,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC;;wCACrB;AAGxB;IADC,IAAA,gBAAM,EAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC;;8CAClB;AAGtB;IADC,IAAA,gBAAM,EAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC;;+CACjB;AAGvB;IADC,IAAA,gBAAM,EAAC,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;;8CACnB;AAItB;IADC,IAAA,gBAAM,EAAC,EAAE,IAAI,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC;;2CACjB;AAGnB;IADC,IAAA,gBAAM,EAAC,EAAE,IAAI,EAAE,UAAU,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;8BAC7B,IAAI;+CAAC;AAGrB;IADC,IAAA,gBAAM,EAAC,EAAE,IAAI,EAAE,UAAU,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;8BAC9B,IAAI;8CAAC;AAGpB;IADC,IAAA,gBAAM,EAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;;6CACN;AAGrB;IADC,IAAA,gBAAM,EAAC,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;;oDACb;AAK5B;IADC,IAAA,gBAAM,EAAC,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;;2CACtB;AAGnB;IADC,IAAA,gBAAM,EAAC,EAAE,IAAI,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC;;4CAChB;AAKpB;IADC,IAAA,gBAAM,EAAC,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;;4CACrB;AAGpB;IADC,IAAA,gBAAM,EAAC,EAAE,IAAI,EAAE,UAAU,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;8BAC5B,IAAI;gDAAC;AAMtB;IADC,IAAA,gBAAM,EAAC,EAAE,IAAI,EAAE,SAAS,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;;yCACzB;mBA5GT,QAAQ;IADpB,IAAA,gBAAM,GAAE;;GACI,QAAQ,CA6GpB"}
|
|
@@ -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;
|
|
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;
|
|
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
|
package/dist/index.d.ts.map
CHANGED
|
@@ -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"}
|
package/dist/parse-ua.js
ADDED
|
@@ -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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"}
|
package/dist/plugin.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"plugin.d.ts","sourceRoot":"","sources":["../src/plugin.ts"],"names":[],"mappings":"AAAA,OAAO,EAAsB,IAAI,EAAiB,MAAM,eAAe,CAAC;
|
|
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);
|
package/dist/plugin.js.map
CHANGED
|
@@ -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;
|
|
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.
|
|
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:
|
|
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>
|
|
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:'
|
|
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>
|