@huloglobal/vendure-plugin-visitor-analytics 0.7.0 → 0.8.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/CHANGELOG.md +83 -15
- package/dist/abandoned-cart.controller.d.ts +78 -0
- package/dist/abandoned-cart.controller.d.ts.map +1 -0
- package/dist/abandoned-cart.controller.js +251 -0
- package/dist/abandoned-cart.controller.js.map +1 -0
- package/dist/abandoned-cart.entity.d.ts +61 -0
- package/dist/abandoned-cart.entity.d.ts.map +1 -0
- package/dist/abandoned-cart.entity.js +143 -0
- package/dist/abandoned-cart.entity.js.map +1 -0
- package/dist/abandoned-cart.scanner.d.ts +34 -0
- package/dist/abandoned-cart.scanner.d.ts.map +1 -0
- package/dist/abandoned-cart.scanner.js +85 -0
- package/dist/abandoned-cart.scanner.js.map +1 -0
- package/dist/abandoned-cart.service.d.ts +92 -0
- package/dist/abandoned-cart.service.d.ts.map +1 -0
- package/dist/abandoned-cart.service.js +276 -0
- package/dist/abandoned-cart.service.js.map +1 -0
- package/dist/index.d.ts +6 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +13 -1
- package/dist/index.js.map +1 -1
- package/dist/journey-buffs.controller.d.ts +43 -0
- package/dist/journey-buffs.controller.d.ts.map +1 -0
- package/dist/journey-buffs.controller.js +79 -0
- package/dist/journey-buffs.controller.js.map +1 -0
- package/dist/journey-buffs.service.d.ts +53 -0
- package/dist/journey-buffs.service.d.ts.map +1 -0
- package/dist/journey-buffs.service.js +141 -0
- package/dist/journey-buffs.service.js.map +1 -0
- package/dist/plugin.d.ts +5 -0
- package/dist/plugin.d.ts.map +1 -1
- package/dist/plugin.js +28 -3
- package/dist/plugin.js.map +1 -1
- package/dist/product-co-view.entity.d.ts +19 -0
- package/dist/product-co-view.entity.d.ts.map +1 -0
- package/dist/product-co-view.entity.js +52 -0
- package/dist/product-co-view.entity.js.map +1 -0
- package/dist/recommendations.controller.d.ts +72 -0
- package/dist/recommendations.controller.d.ts.map +1 -0
- package/dist/recommendations.controller.js +123 -0
- package/dist/recommendations.controller.js.map +1 -0
- package/dist/recommendations.service.d.ts +62 -0
- package/dist/recommendations.service.d.ts.map +1 -0
- package/dist/recommendations.service.js +167 -0
- package/dist/recommendations.service.js.map +1 -0
- package/dist/search-analytics.controller.d.ts +36 -0
- package/dist/search-analytics.controller.d.ts.map +1 -0
- package/dist/search-analytics.controller.js +86 -0
- package/dist/search-analytics.controller.js.map +1 -0
- package/dist/search-analytics.service.d.ts +36 -0
- package/dist/search-analytics.service.d.ts.map +1 -0
- package/dist/search-analytics.service.js +105 -0
- package/dist/search-analytics.service.js.map +1 -0
- package/package.json +1 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"abandoned-cart.service.js","sourceRoot":"","sources":["../src/abandoned-cart.service.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
CHANGED
|
@@ -4,4 +4,10 @@
|
|
|
4
4
|
export { VisitorAnalyticsPlugin, VisitorAnalyticsPluginOptions } from './plugin';
|
|
5
5
|
export { VisitorTrackingService } from './visitor-tracking.service';
|
|
6
6
|
export { VisitorEvent } from './visitor-event.entity';
|
|
7
|
+
export { AbandonedCart, AbandonedCartStatus } from './abandoned-cart.entity';
|
|
8
|
+
export { ProductCoView } from './product-co-view.entity';
|
|
9
|
+
export { AbandonedCartService, CartSnapshotMeta, AbandonmentOptions, } from './abandoned-cart.service';
|
|
10
|
+
export { RecommendationsService } from './recommendations.service';
|
|
11
|
+
export { SearchAnalyticsService } from './search-analytics.service';
|
|
12
|
+
export { JourneyBuffsService } from './journey-buffs.service';
|
|
7
13
|
//# 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;;GAEG;AAEH,OAAO,EAAE,sBAAsB,EAAE,6BAA6B,EAAE,MAAM,UAAU,CAAC;AACjF,OAAO,EAAE,sBAAsB,EAAE,MAAM,4BAA4B,CAAC;AACpE,OAAO,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,sBAAsB,EAAE,6BAA6B,EAAE,MAAM,UAAU,CAAC;AACjF,OAAO,EAAE,sBAAsB,EAAE,MAAM,4BAA4B,CAAC;AACpE,OAAO,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AACtD,OAAO,EAAE,aAAa,EAAE,mBAAmB,EAAE,MAAM,yBAAyB,CAAC;AAC7E,OAAO,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AACzD,OAAO,EACH,oBAAoB,EACpB,gBAAgB,EAChB,kBAAkB,GACrB,MAAM,0BAA0B,CAAC;AAClC,OAAO,EAAE,sBAAsB,EAAE,MAAM,2BAA2B,CAAC;AACnE,OAAO,EAAE,sBAAsB,EAAE,MAAM,4BAA4B,CAAC;AACpE,OAAO,EAAE,mBAAmB,EAAE,MAAM,yBAAyB,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -3,11 +3,23 @@
|
|
|
3
3
|
* `@huloglobal/vendure-plugin-visitor-analytics` — public exports.
|
|
4
4
|
*/
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
-
exports.VisitorEvent = exports.VisitorTrackingService = exports.VisitorAnalyticsPlugin = void 0;
|
|
6
|
+
exports.JourneyBuffsService = exports.SearchAnalyticsService = exports.RecommendationsService = exports.AbandonedCartService = exports.ProductCoView = exports.AbandonedCart = exports.VisitorEvent = exports.VisitorTrackingService = exports.VisitorAnalyticsPlugin = void 0;
|
|
7
7
|
var plugin_1 = require("./plugin");
|
|
8
8
|
Object.defineProperty(exports, "VisitorAnalyticsPlugin", { enumerable: true, get: function () { return plugin_1.VisitorAnalyticsPlugin; } });
|
|
9
9
|
var visitor_tracking_service_1 = require("./visitor-tracking.service");
|
|
10
10
|
Object.defineProperty(exports, "VisitorTrackingService", { enumerable: true, get: function () { return visitor_tracking_service_1.VisitorTrackingService; } });
|
|
11
11
|
var visitor_event_entity_1 = require("./visitor-event.entity");
|
|
12
12
|
Object.defineProperty(exports, "VisitorEvent", { enumerable: true, get: function () { return visitor_event_entity_1.VisitorEvent; } });
|
|
13
|
+
var abandoned_cart_entity_1 = require("./abandoned-cart.entity");
|
|
14
|
+
Object.defineProperty(exports, "AbandonedCart", { enumerable: true, get: function () { return abandoned_cart_entity_1.AbandonedCart; } });
|
|
15
|
+
var product_co_view_entity_1 = require("./product-co-view.entity");
|
|
16
|
+
Object.defineProperty(exports, "ProductCoView", { enumerable: true, get: function () { return product_co_view_entity_1.ProductCoView; } });
|
|
17
|
+
var abandoned_cart_service_1 = require("./abandoned-cart.service");
|
|
18
|
+
Object.defineProperty(exports, "AbandonedCartService", { enumerable: true, get: function () { return abandoned_cart_service_1.AbandonedCartService; } });
|
|
19
|
+
var recommendations_service_1 = require("./recommendations.service");
|
|
20
|
+
Object.defineProperty(exports, "RecommendationsService", { enumerable: true, get: function () { return recommendations_service_1.RecommendationsService; } });
|
|
21
|
+
var search_analytics_service_1 = require("./search-analytics.service");
|
|
22
|
+
Object.defineProperty(exports, "SearchAnalyticsService", { enumerable: true, get: function () { return search_analytics_service_1.SearchAnalyticsService; } });
|
|
23
|
+
var journey_buffs_service_1 = require("./journey-buffs.service");
|
|
24
|
+
Object.defineProperty(exports, "JourneyBuffsService", { enumerable: true, get: function () { return journey_buffs_service_1.JourneyBuffsService; } });
|
|
13
25
|
//# 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;;GAEG;;;AAEH,mCAAiF;AAAxE,gHAAA,sBAAsB,OAAA;AAC/B,uEAAoE;AAA3D,kIAAA,sBAAsB,OAAA;AAC/B,+DAAsD;AAA7C,oHAAA,YAAY,OAAA"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAAA;;GAEG;;;AAEH,mCAAiF;AAAxE,gHAAA,sBAAsB,OAAA;AAC/B,uEAAoE;AAA3D,kIAAA,sBAAsB,OAAA;AAC/B,+DAAsD;AAA7C,oHAAA,YAAY,OAAA;AACrB,iEAA6E;AAApE,sHAAA,aAAa,OAAA;AACtB,mEAAyD;AAAhD,uHAAA,aAAa,OAAA;AACtB,mEAIkC;AAH9B,8HAAA,oBAAoB,OAAA;AAIxB,qEAAmE;AAA1D,iIAAA,sBAAsB,OAAA;AAC/B,uEAAoE;AAA3D,kIAAA,sBAAsB,OAAA;AAC/B,iEAA8D;AAArD,4HAAA,mBAAmB,OAAA"}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import { RequestContext } from '@vendure/core';
|
|
2
|
+
import { JourneyBuffsService } from './journey-buffs.service';
|
|
3
|
+
export declare class JourneyBuffsController {
|
|
4
|
+
private readonly service;
|
|
5
|
+
constructor(service: JourneyBuffsService);
|
|
6
|
+
/** GET /ees/journey/rage-clicks?days=7&channelId=1&limit=20 */
|
|
7
|
+
rage(ctx: RequestContext, d?: string, ch?: string, l?: string): Promise<{
|
|
8
|
+
items: {
|
|
9
|
+
url: string;
|
|
10
|
+
rageClicks: number;
|
|
11
|
+
uniqueVisitors: number;
|
|
12
|
+
}[];
|
|
13
|
+
}>;
|
|
14
|
+
/** GET /ees/journey/dead-clicks?days=7&channelId=1&limit=20 */
|
|
15
|
+
dead(ctx: RequestContext, d?: string, ch?: string, l?: string): Promise<{
|
|
16
|
+
items: {
|
|
17
|
+
url: string;
|
|
18
|
+
deadClicks: number;
|
|
19
|
+
uniqueVisitors: number;
|
|
20
|
+
}[];
|
|
21
|
+
}>;
|
|
22
|
+
/** GET /ees/journey/session-summary?visitorId=abc&limit=25 */
|
|
23
|
+
summary(ctx: RequestContext, v?: string, l?: string): Promise<{
|
|
24
|
+
error: string;
|
|
25
|
+
visitorId?: undefined;
|
|
26
|
+
items?: undefined;
|
|
27
|
+
} | {
|
|
28
|
+
visitorId: string;
|
|
29
|
+
items: {
|
|
30
|
+
sessionId: string;
|
|
31
|
+
startedAt: string;
|
|
32
|
+
endedAt: string;
|
|
33
|
+
durationSec: number;
|
|
34
|
+
pageCount: number;
|
|
35
|
+
addedToCart: boolean;
|
|
36
|
+
checkedOut: boolean;
|
|
37
|
+
rageClicked: boolean;
|
|
38
|
+
intent: "browse" | "consider" | "purchase" | "abandon" | "frustrate" | "bounce";
|
|
39
|
+
}[];
|
|
40
|
+
error?: undefined;
|
|
41
|
+
}>;
|
|
42
|
+
}
|
|
43
|
+
//# sourceMappingURL=journey-buffs.controller.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"journey-buffs.controller.d.ts","sourceRoot":"","sources":["../src/journey-buffs.controller.ts"],"names":[],"mappings":"AACA,OAAO,EAAO,cAAc,EAAqB,MAAM,eAAe,CAAC;AACvE,OAAO,EAAE,mBAAmB,EAAE,MAAM,yBAAyB,CAAC;AAE9D,qBACa,sBAAsB;IACnB,OAAO,CAAC,QAAQ,CAAC,OAAO;gBAAP,OAAO,EAAE,mBAAmB;IAEzD,+DAA+D;IAGzD,IAAI,CACC,GAAG,EAAE,cAAc,EACX,CAAC,CAAC,EAAE,MAAM,EACL,EAAE,CAAC,EAAE,MAAM,EACf,CAAC,CAAC,EAAE,MAAM;;;;;;;IAQ9B,+DAA+D;IAGzD,IAAI,CACC,GAAG,EAAE,cAAc,EACX,CAAC,CAAC,EAAE,MAAM,EACL,EAAE,CAAC,EAAE,MAAM,EACf,CAAC,CAAC,EAAE,MAAM;;;;;;;IAQ9B,8DAA8D;IAGxD,OAAO,CACF,GAAG,EAAE,cAAc,EACN,CAAC,CAAC,EAAE,MAAM,EACd,CAAC,CAAC,EAAE,MAAM;;;;;;;;;;;;;;;;;;;CAOjC"}
|
|
@@ -0,0 +1,79 @@
|
|
|
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
|
+
var __param = (this && this.__param) || function (paramIndex, decorator) {
|
|
12
|
+
return function (target, key) { decorator(target, key, paramIndex); }
|
|
13
|
+
};
|
|
14
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
15
|
+
exports.JourneyBuffsController = void 0;
|
|
16
|
+
const common_1 = require("@nestjs/common");
|
|
17
|
+
const core_1 = require("@vendure/core");
|
|
18
|
+
const journey_buffs_service_1 = require("./journey-buffs.service");
|
|
19
|
+
let JourneyBuffsController = class JourneyBuffsController {
|
|
20
|
+
constructor(service) {
|
|
21
|
+
this.service = service;
|
|
22
|
+
}
|
|
23
|
+
/** GET /ees/journey/rage-clicks?days=7&channelId=1&limit=20 */
|
|
24
|
+
async rage(ctx, d, ch, l) {
|
|
25
|
+
const items = await this.service.rageClickHotSpots(+(d || 7), +(ch || 1), +(l || 20));
|
|
26
|
+
return { items };
|
|
27
|
+
}
|
|
28
|
+
/** GET /ees/journey/dead-clicks?days=7&channelId=1&limit=20 */
|
|
29
|
+
async dead(ctx, d, ch, l) {
|
|
30
|
+
const items = await this.service.deadClickHotSpots(+(d || 7), +(ch || 1), +(l || 20));
|
|
31
|
+
return { items };
|
|
32
|
+
}
|
|
33
|
+
/** GET /ees/journey/session-summary?visitorId=abc&limit=25 */
|
|
34
|
+
async summary(ctx, v, l) {
|
|
35
|
+
const visitorId = String(v || '').trim();
|
|
36
|
+
if (!visitorId)
|
|
37
|
+
return { error: 'visitorId-required' };
|
|
38
|
+
const items = await this.service.sessionSummary(visitorId, +(l || 25));
|
|
39
|
+
return { visitorId, items };
|
|
40
|
+
}
|
|
41
|
+
};
|
|
42
|
+
exports.JourneyBuffsController = JourneyBuffsController;
|
|
43
|
+
__decorate([
|
|
44
|
+
(0, common_1.Get)('journey/rage-clicks'),
|
|
45
|
+
(0, core_1.Allow)(core_1.Permission.ReadCustomer),
|
|
46
|
+
__param(0, (0, core_1.Ctx)()),
|
|
47
|
+
__param(1, (0, common_1.Query)('days')),
|
|
48
|
+
__param(2, (0, common_1.Query)('channelId')),
|
|
49
|
+
__param(3, (0, common_1.Query)('limit')),
|
|
50
|
+
__metadata("design:type", Function),
|
|
51
|
+
__metadata("design:paramtypes", [core_1.RequestContext, String, String, String]),
|
|
52
|
+
__metadata("design:returntype", Promise)
|
|
53
|
+
], JourneyBuffsController.prototype, "rage", null);
|
|
54
|
+
__decorate([
|
|
55
|
+
(0, common_1.Get)('journey/dead-clicks'),
|
|
56
|
+
(0, core_1.Allow)(core_1.Permission.ReadCustomer),
|
|
57
|
+
__param(0, (0, core_1.Ctx)()),
|
|
58
|
+
__param(1, (0, common_1.Query)('days')),
|
|
59
|
+
__param(2, (0, common_1.Query)('channelId')),
|
|
60
|
+
__param(3, (0, common_1.Query)('limit')),
|
|
61
|
+
__metadata("design:type", Function),
|
|
62
|
+
__metadata("design:paramtypes", [core_1.RequestContext, String, String, String]),
|
|
63
|
+
__metadata("design:returntype", Promise)
|
|
64
|
+
], JourneyBuffsController.prototype, "dead", null);
|
|
65
|
+
__decorate([
|
|
66
|
+
(0, common_1.Get)('journey/session-summary'),
|
|
67
|
+
(0, core_1.Allow)(core_1.Permission.ReadCustomer),
|
|
68
|
+
__param(0, (0, core_1.Ctx)()),
|
|
69
|
+
__param(1, (0, common_1.Query)('visitorId')),
|
|
70
|
+
__param(2, (0, common_1.Query)('limit')),
|
|
71
|
+
__metadata("design:type", Function),
|
|
72
|
+
__metadata("design:paramtypes", [core_1.RequestContext, String, String]),
|
|
73
|
+
__metadata("design:returntype", Promise)
|
|
74
|
+
], JourneyBuffsController.prototype, "summary", null);
|
|
75
|
+
exports.JourneyBuffsController = JourneyBuffsController = __decorate([
|
|
76
|
+
(0, common_1.Controller)('ees'),
|
|
77
|
+
__metadata("design:paramtypes", [journey_buffs_service_1.JourneyBuffsService])
|
|
78
|
+
], JourneyBuffsController);
|
|
79
|
+
//# sourceMappingURL=journey-buffs.controller.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"journey-buffs.controller.js","sourceRoot":"","sources":["../src/journey-buffs.controller.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;AAAA,2CAAwD;AACxD,wCAAuE;AACvE,mEAA8D;AAGvD,IAAM,sBAAsB,GAA5B,MAAM,sBAAsB;IAC/B,YAA6B,OAA4B;QAA5B,YAAO,GAAP,OAAO,CAAqB;IAAG,CAAC;IAE7D,+DAA+D;IAGzD,AAAN,KAAK,CAAC,IAAI,CACC,GAAmB,EACX,CAAU,EACL,EAAW,EACf,CAAU;QAE1B,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,iBAAiB,CAC9C,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CACpC,CAAC;QACF,OAAO,EAAE,KAAK,EAAE,CAAC;IACrB,CAAC;IAED,+DAA+D;IAGzD,AAAN,KAAK,CAAC,IAAI,CACC,GAAmB,EACX,CAAU,EACL,EAAW,EACf,CAAU;QAE1B,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,iBAAiB,CAC9C,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CACpC,CAAC;QACF,OAAO,EAAE,KAAK,EAAE,CAAC;IACrB,CAAC;IAED,8DAA8D;IAGxD,AAAN,KAAK,CAAC,OAAO,CACF,GAAmB,EACN,CAAU,EACd,CAAU;QAE1B,MAAM,SAAS,GAAG,MAAM,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;QACzC,IAAI,CAAC,SAAS;YAAE,OAAO,EAAE,KAAK,EAAE,oBAAoB,EAAE,CAAC;QACvD,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,cAAc,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;QACvE,OAAO,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC;IAChC,CAAC;CACJ,CAAA;AA9CY,wDAAsB;AAMzB;IAFL,IAAA,YAAG,EAAC,qBAAqB,CAAC;IAC1B,IAAA,YAAK,EAAC,iBAAU,CAAC,YAAY,CAAC;IAE1B,WAAA,IAAA,UAAG,GAAE,CAAA;IACL,WAAA,IAAA,cAAK,EAAC,MAAM,CAAC,CAAA;IACb,WAAA,IAAA,cAAK,EAAC,WAAW,CAAC,CAAA;IAClB,WAAA,IAAA,cAAK,EAAC,OAAO,CAAC,CAAA;;qCAHH,qBAAc;;kDAS7B;AAKK;IAFL,IAAA,YAAG,EAAC,qBAAqB,CAAC;IAC1B,IAAA,YAAK,EAAC,iBAAU,CAAC,YAAY,CAAC;IAE1B,WAAA,IAAA,UAAG,GAAE,CAAA;IACL,WAAA,IAAA,cAAK,EAAC,MAAM,CAAC,CAAA;IACb,WAAA,IAAA,cAAK,EAAC,WAAW,CAAC,CAAA;IAClB,WAAA,IAAA,cAAK,EAAC,OAAO,CAAC,CAAA;;qCAHH,qBAAc;;kDAS7B;AAKK;IAFL,IAAA,YAAG,EAAC,yBAAyB,CAAC;IAC9B,IAAA,YAAK,EAAC,iBAAU,CAAC,YAAY,CAAC;IAE1B,WAAA,IAAA,UAAG,GAAE,CAAA;IACL,WAAA,IAAA,cAAK,EAAC,WAAW,CAAC,CAAA;IAClB,WAAA,IAAA,cAAK,EAAC,OAAO,CAAC,CAAA;;qCAFH,qBAAc;;qDAQ7B;iCA7CQ,sBAAsB;IADlC,IAAA,mBAAU,EAAC,KAAK,CAAC;qCAEwB,2CAAmB;GADhD,sBAAsB,CA8ClC"}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
import { TransactionalConnection } from '@vendure/core';
|
|
2
|
+
/**
|
|
3
|
+
* Zero-schema-cost enrichment endpoints for the per-visitor Journey
|
|
4
|
+
* drawer and store-wide UX signals.
|
|
5
|
+
*
|
|
6
|
+
* Each of these queries reads back over the existing `visitor_event`
|
|
7
|
+
* table where the storefront has fired named custom events. No new
|
|
8
|
+
* columns, no new tables — the storefront helper is documented in the
|
|
9
|
+
* plugin README and dispatches events into the existing
|
|
10
|
+
* `POST /ees/track` endpoint.
|
|
11
|
+
*/
|
|
12
|
+
export declare class JourneyBuffsService {
|
|
13
|
+
private connection;
|
|
14
|
+
constructor(connection: TransactionalConnection);
|
|
15
|
+
/**
|
|
16
|
+
* Store-wide rage-click hot spots — the URLs where visitors are
|
|
17
|
+
* most frustrated. `hulo.rageClick(url, selector)` on the
|
|
18
|
+
* storefront populates the underlying event.
|
|
19
|
+
*/
|
|
20
|
+
rageClickHotSpots(sinceDays?: number, channelId?: number, limit?: number): Promise<Array<{
|
|
21
|
+
url: string;
|
|
22
|
+
rageClicks: number;
|
|
23
|
+
uniqueVisitors: number;
|
|
24
|
+
}>>;
|
|
25
|
+
/**
|
|
26
|
+
* Dead-click hot spots — clicks on non-interactive elements. Same
|
|
27
|
+
* shape as rage-click aggregation but keyed on the `dead_click`
|
|
28
|
+
* event type. Useful for spotting elements that LOOK clickable
|
|
29
|
+
* (styled headings, disabled buttons, decorative cards).
|
|
30
|
+
*/
|
|
31
|
+
deadClickHotSpots(sinceDays?: number, channelId?: number, limit?: number): Promise<Array<{
|
|
32
|
+
url: string;
|
|
33
|
+
deadClicks: number;
|
|
34
|
+
uniqueVisitors: number;
|
|
35
|
+
}>>;
|
|
36
|
+
/**
|
|
37
|
+
* Per-visitor session summary — one row per session with a
|
|
38
|
+
* heuristic `intent` label. Used to enrich the Journey drawer
|
|
39
|
+
* with a one-line "what did this session do".
|
|
40
|
+
*/
|
|
41
|
+
sessionSummary(visitorId: string, limit?: number): Promise<Array<{
|
|
42
|
+
sessionId: string;
|
|
43
|
+
startedAt: string;
|
|
44
|
+
endedAt: string;
|
|
45
|
+
durationSec: number;
|
|
46
|
+
pageCount: number;
|
|
47
|
+
addedToCart: boolean;
|
|
48
|
+
checkedOut: boolean;
|
|
49
|
+
rageClicked: boolean;
|
|
50
|
+
intent: 'browse' | 'consider' | 'purchase' | 'abandon' | 'frustrate' | 'bounce';
|
|
51
|
+
}>>;
|
|
52
|
+
}
|
|
53
|
+
//# sourceMappingURL=journey-buffs.service.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"journey-buffs.service.d.ts","sourceRoot":"","sources":["../src/journey-buffs.service.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,uBAAuB,EAAE,MAAM,eAAe,CAAC;AAExD;;;;;;;;;GASG;AACH,qBACa,mBAAmB;IAChB,OAAO,CAAC,UAAU;gBAAV,UAAU,EAAE,uBAAuB;IAEvD;;;;OAIG;IACG,iBAAiB,CAAC,SAAS,SAAI,EAAE,SAAS,SAAI,EAAE,KAAK,SAAK,GAAG,OAAO,CAAC,KAAK,CAAC;QAC7E,GAAG,EAAE,MAAM,CAAC;QACZ,UAAU,EAAE,MAAM,CAAC;QACnB,cAAc,EAAE,MAAM,CAAC;KAC1B,CAAC,CAAC;IAwBH;;;;;OAKG;IACG,iBAAiB,CAAC,SAAS,SAAI,EAAE,SAAS,SAAI,EAAE,KAAK,SAAK,GAAG,OAAO,CAAC,KAAK,CAAC;QAC7E,GAAG,EAAE,MAAM,CAAC;QACZ,UAAU,EAAE,MAAM,CAAC;QACnB,cAAc,EAAE,MAAM,CAAC;KAC1B,CAAC,CAAC;IAwBH;;;;OAIG;IACG,cAAc,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,SAAK,GAAG,OAAO,CAAC,KAAK,CAAC;QAC/D,SAAS,EAAE,MAAM,CAAC;QAClB,SAAS,EAAE,MAAM,CAAC;QAClB,OAAO,EAAE,MAAM,CAAC;QAChB,WAAW,EAAE,MAAM,CAAC;QACpB,SAAS,EAAE,MAAM,CAAC;QAClB,WAAW,EAAE,OAAO,CAAC;QACrB,UAAU,EAAE,OAAO,CAAC;QACpB,WAAW,EAAE,OAAO,CAAC;QACrB,MAAM,EAAE,QAAQ,GAAG,UAAU,GAAG,UAAU,GAAG,SAAS,GAAG,WAAW,GAAG,QAAQ,CAAC;KACnF,CAAC,CAAC;CA+CN"}
|
|
@@ -0,0 +1,141 @@
|
|
|
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.JourneyBuffsService = void 0;
|
|
13
|
+
const common_1 = require("@nestjs/common");
|
|
14
|
+
const core_1 = require("@vendure/core");
|
|
15
|
+
/**
|
|
16
|
+
* Zero-schema-cost enrichment endpoints for the per-visitor Journey
|
|
17
|
+
* drawer and store-wide UX signals.
|
|
18
|
+
*
|
|
19
|
+
* Each of these queries reads back over the existing `visitor_event`
|
|
20
|
+
* table where the storefront has fired named custom events. No new
|
|
21
|
+
* columns, no new tables — the storefront helper is documented in the
|
|
22
|
+
* plugin README and dispatches events into the existing
|
|
23
|
+
* `POST /ees/track` endpoint.
|
|
24
|
+
*/
|
|
25
|
+
let JourneyBuffsService = class JourneyBuffsService {
|
|
26
|
+
constructor(connection) {
|
|
27
|
+
this.connection = connection;
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* Store-wide rage-click hot spots — the URLs where visitors are
|
|
31
|
+
* most frustrated. `hulo.rageClick(url, selector)` on the
|
|
32
|
+
* storefront populates the underlying event.
|
|
33
|
+
*/
|
|
34
|
+
async rageClickHotSpots(sinceDays = 7, channelId = 1, limit = 20) {
|
|
35
|
+
const since = new Date(Date.now() - sinceDays * 86400000);
|
|
36
|
+
const rows = await this.connection.rawConnection.query(`SELECT
|
|
37
|
+
url,
|
|
38
|
+
COUNT(*) AS rageClicks,
|
|
39
|
+
COUNT(DISTINCT visitorId) AS uniqueVisitors
|
|
40
|
+
FROM visitor_event
|
|
41
|
+
WHERE type = 'event'
|
|
42
|
+
AND meta LIKE '%"eventType":"rage_click"%'
|
|
43
|
+
AND channelId = ?
|
|
44
|
+
AND createdAt >= ?
|
|
45
|
+
GROUP BY url
|
|
46
|
+
ORDER BY rageClicks DESC
|
|
47
|
+
LIMIT ?`, [channelId, since, Math.min(Math.max(1, limit), 200)]);
|
|
48
|
+
return rows.map(r => ({
|
|
49
|
+
url: String(r.url || ''),
|
|
50
|
+
rageClicks: Number(r.rageClicks),
|
|
51
|
+
uniqueVisitors: Number(r.uniqueVisitors),
|
|
52
|
+
}));
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* Dead-click hot spots — clicks on non-interactive elements. Same
|
|
56
|
+
* shape as rage-click aggregation but keyed on the `dead_click`
|
|
57
|
+
* event type. Useful for spotting elements that LOOK clickable
|
|
58
|
+
* (styled headings, disabled buttons, decorative cards).
|
|
59
|
+
*/
|
|
60
|
+
async deadClickHotSpots(sinceDays = 7, channelId = 1, limit = 20) {
|
|
61
|
+
const since = new Date(Date.now() - sinceDays * 86400000);
|
|
62
|
+
const rows = await this.connection.rawConnection.query(`SELECT
|
|
63
|
+
url,
|
|
64
|
+
COUNT(*) AS deadClicks,
|
|
65
|
+
COUNT(DISTINCT visitorId) AS uniqueVisitors
|
|
66
|
+
FROM visitor_event
|
|
67
|
+
WHERE type = 'event'
|
|
68
|
+
AND meta LIKE '%"eventType":"dead_click"%'
|
|
69
|
+
AND channelId = ?
|
|
70
|
+
AND createdAt >= ?
|
|
71
|
+
GROUP BY url
|
|
72
|
+
ORDER BY deadClicks DESC
|
|
73
|
+
LIMIT ?`, [channelId, since, Math.min(Math.max(1, limit), 200)]);
|
|
74
|
+
return rows.map(r => ({
|
|
75
|
+
url: String(r.url || ''),
|
|
76
|
+
deadClicks: Number(r.deadClicks),
|
|
77
|
+
uniqueVisitors: Number(r.uniqueVisitors),
|
|
78
|
+
}));
|
|
79
|
+
}
|
|
80
|
+
/**
|
|
81
|
+
* Per-visitor session summary — one row per session with a
|
|
82
|
+
* heuristic `intent` label. Used to enrich the Journey drawer
|
|
83
|
+
* with a one-line "what did this session do".
|
|
84
|
+
*/
|
|
85
|
+
async sessionSummary(visitorId, limit = 25) {
|
|
86
|
+
const rows = await this.connection.rawConnection.query(`SELECT
|
|
87
|
+
sessionId,
|
|
88
|
+
MIN(createdAt) AS startedAt,
|
|
89
|
+
MAX(createdAt) AS endedAt,
|
|
90
|
+
COUNT(*) AS pageCount,
|
|
91
|
+
SUM(type = 'event' AND meta LIKE '%"eventType":"add_to_cart"%') > 0 AS addedToCart,
|
|
92
|
+
SUM(type = 'event' AND meta LIKE '%"eventType":"checkout_completed"%') > 0 AS checkedOut,
|
|
93
|
+
SUM(type = 'event' AND meta LIKE '%"eventType":"cart_snapshot"%') > 0 AS hadCartSnapshot,
|
|
94
|
+
SUM(type = 'event' AND meta LIKE '%"eventType":"rage_click"%') > 0 AS rageClicked
|
|
95
|
+
FROM visitor_event
|
|
96
|
+
WHERE visitorId = ?
|
|
97
|
+
GROUP BY sessionId
|
|
98
|
+
ORDER BY startedAt DESC
|
|
99
|
+
LIMIT ?`, [visitorId, Math.min(Math.max(1, limit), 200)]);
|
|
100
|
+
return rows.map(r => {
|
|
101
|
+
const start = new Date(r.startedAt);
|
|
102
|
+
const end = new Date(r.endedAt);
|
|
103
|
+
const durationSec = Math.max(0, Math.round((end.getTime() - start.getTime()) / 1000));
|
|
104
|
+
const pageCount = Number(r.pageCount);
|
|
105
|
+
const addedToCart = !!Number(r.addedToCart);
|
|
106
|
+
const checkedOut = !!Number(r.checkedOut);
|
|
107
|
+
const hadCartSnapshot = !!Number(r.hadCartSnapshot);
|
|
108
|
+
const rageClicked = !!Number(r.rageClicked);
|
|
109
|
+
let intent;
|
|
110
|
+
if (checkedOut)
|
|
111
|
+
intent = 'purchase';
|
|
112
|
+
else if (hadCartSnapshot || addedToCart)
|
|
113
|
+
intent = 'abandon';
|
|
114
|
+
else if (rageClicked)
|
|
115
|
+
intent = 'frustrate';
|
|
116
|
+
else if (pageCount <= 1 && durationSec < 15)
|
|
117
|
+
intent = 'bounce';
|
|
118
|
+
else if (pageCount >= 5)
|
|
119
|
+
intent = 'consider';
|
|
120
|
+
else
|
|
121
|
+
intent = 'browse';
|
|
122
|
+
return {
|
|
123
|
+
sessionId: String(r.sessionId),
|
|
124
|
+
startedAt: start.toISOString(),
|
|
125
|
+
endedAt: end.toISOString(),
|
|
126
|
+
durationSec,
|
|
127
|
+
pageCount,
|
|
128
|
+
addedToCart,
|
|
129
|
+
checkedOut,
|
|
130
|
+
rageClicked,
|
|
131
|
+
intent,
|
|
132
|
+
};
|
|
133
|
+
});
|
|
134
|
+
}
|
|
135
|
+
};
|
|
136
|
+
exports.JourneyBuffsService = JourneyBuffsService;
|
|
137
|
+
exports.JourneyBuffsService = JourneyBuffsService = __decorate([
|
|
138
|
+
(0, common_1.Injectable)(),
|
|
139
|
+
__metadata("design:paramtypes", [core_1.TransactionalConnection])
|
|
140
|
+
], JourneyBuffsService);
|
|
141
|
+
//# sourceMappingURL=journey-buffs.service.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"journey-buffs.service.js","sourceRoot":"","sources":["../src/journey-buffs.service.ts"],"names":[],"mappings":"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"}
|
package/dist/plugin.d.ts
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { Type } from '@vendure/core';
|
|
2
2
|
import { LicenceStatus, RetentionOptions, UpdateChecker } from '@huloglobal/vendure-licence-sdk';
|
|
3
|
+
import { AbandonmentOptions } from './abandoned-cart.service';
|
|
3
4
|
export interface VisitorAnalyticsPluginOptions {
|
|
4
5
|
/** Public host of the Vendure server. Used in licence host-match. */
|
|
5
6
|
publicBaseUrl: string;
|
|
@@ -38,6 +39,10 @@ export interface VisitorAnalyticsPluginOptions {
|
|
|
38
39
|
corsAllowedOrigins?: string[];
|
|
39
40
|
/** Auto-prune `visitor_event` rows older than `days` days. */
|
|
40
41
|
retention?: RetentionOptions;
|
|
42
|
+
/** Options for the abandoned-cart feature. Storefront must fire
|
|
43
|
+
* `cart_snapshot` custom events for anything to be detected. See
|
|
44
|
+
* the README for the recommended storefront helper. */
|
|
45
|
+
abandonment?: AbandonmentOptions;
|
|
41
46
|
}
|
|
42
47
|
declare const DEFAULT_OPTIONS: VisitorAnalyticsPluginOptions;
|
|
43
48
|
export declare function getOptions(): typeof DEFAULT_OPTIONS & VisitorAnalyticsPluginOptions;
|
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;AACxE,OAAO,EAAmC,aAAa,EAAE,gBAAgB,EAAqB,aAAa,EAA4C,MAAM,iCAAiC,CAAC;
|
|
1
|
+
{"version":3,"file":"plugin.d.ts","sourceRoot":"","sources":["../src/plugin.ts"],"names":[],"mappings":"AAAA,OAAO,EAAsB,IAAI,EAAiB,MAAM,eAAe,CAAC;AACxE,OAAO,EAAmC,aAAa,EAAE,gBAAgB,EAAqB,aAAa,EAA4C,MAAM,iCAAiC,CAAC;AAM/L,OAAO,EAAwB,kBAAkB,EAAE,MAAM,0BAA0B,CAAC;AAgBpF,MAAM,WAAW,6BAA6B;IAC1C,qEAAqE;IACrE,aAAa,EAAE,MAAM,CAAC;IACtB;;;gDAG4C;IAC5C,UAAU,CAAC,EAAE,MAAM,CAAC;IAGpB;6EACyE;IACzE,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B;;yEAEqE;IACrE,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB;;qEAEiE;IACjE,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB;;6CAEyC;IACzC,aAAa,CAAC,EAAE,OAAO,CAAC;IAGxB,mDAAmD;IACnD,SAAS,CAAC,EAAE;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAA;KAAE,CAAC;IACnD;;yEAEqE;IACrE,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB;;2EAEuE;IACvE,kBAAkB,CAAC,EAAE,MAAM,EAAE,CAAC;IAG9B,8DAA8D;IAC9D,SAAS,CAAC,EAAE,gBAAgB,CAAC;IAG7B;;4DAEwD;IACxD,WAAW,CAAC,EAAE,kBAAkB,CAAC;CACpC;AAgBD,QAAA,MAAM,eAAe,EAAE,6BAMtB,CAAC;AAGF,wBAAgB,UAAU,IAAI,OAAO,eAAe,GAAG,6BAA6B,CAEnF;AAED;;;;;;;;;;;GAWG;AACH,qBAyBa,sBAAsB;IAC/B,OAAO,CAAC,MAAM,CAAC,UAAU,CAAkC;IAC3D,OAAO,CAAC,MAAM,CAAC,aAAa,CAA8B;IAC1D,OAAO,CAAC,MAAM,CAAC,SAAS,CAA0B;IAClD,OAAO,CAAC,MAAM,CAAC,aAAa,CAA8B;IAE1D,MAAM,CAAC,gBAAgB,IAAI,aAAa,GAAG,IAAI;IAC/C,MAAM,CAAC,iBAAiB,IAAI,MAAM;IAClC,MAAM,CAAC,cAAc,IAAI,MAAM;IAC/B,MAAM,CAAC,gBAAgB,IAAI,aAAa,GAAG,IAAI;IAE/C,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,6BAA6B,GAAG,IAAI,CAAC,sBAAsB,CAAC;IAoDjF,MAAM,CAAC,YAAY;;;;;;;;MAUjB;CACL"}
|
package/dist/plugin.js
CHANGED
|
@@ -13,9 +13,20 @@ const core_1 = require("@vendure/core");
|
|
|
13
13
|
const vendure_licence_sdk_1 = require("@huloglobal/vendure-licence-sdk");
|
|
14
14
|
const conversion_goal_entity_1 = require("./conversion-goal.entity");
|
|
15
15
|
const visitor_event_entity_1 = require("./visitor-event.entity");
|
|
16
|
+
const abandoned_cart_entity_1 = require("./abandoned-cart.entity");
|
|
17
|
+
const product_co_view_entity_1 = require("./product-co-view.entity");
|
|
16
18
|
const visitor_tracking_service_1 = require("./visitor-tracking.service");
|
|
19
|
+
const abandoned_cart_service_1 = require("./abandoned-cart.service");
|
|
20
|
+
const recommendations_service_1 = require("./recommendations.service");
|
|
21
|
+
const search_analytics_service_1 = require("./search-analytics.service");
|
|
22
|
+
const journey_buffs_service_1 = require("./journey-buffs.service");
|
|
23
|
+
const abandoned_cart_scanner_1 = require("./abandoned-cart.scanner");
|
|
17
24
|
const admin_api_1 = require("./admin-api");
|
|
18
25
|
const visitor_tracking_controller_1 = require("./visitor-tracking.controller");
|
|
26
|
+
const abandoned_cart_controller_1 = require("./abandoned-cart.controller");
|
|
27
|
+
const recommendations_controller_1 = require("./recommendations.controller");
|
|
28
|
+
const search_analytics_controller_1 = require("./search-analytics.controller");
|
|
29
|
+
const journey_buffs_controller_1 = require("./journey-buffs.controller");
|
|
19
30
|
// eslint-disable-next-line @typescript-eslint/no-var-requires
|
|
20
31
|
const PKG_VERSION = require('../package.json').version;
|
|
21
32
|
const PKG_NAME = '@huloglobal/vendure-plugin-visitor-analytics';
|
|
@@ -122,9 +133,23 @@ VisitorAnalyticsPlugin.uiExtensions = {
|
|
|
122
133
|
exports.VisitorAnalyticsPlugin = VisitorAnalyticsPlugin = VisitorAnalyticsPlugin_1 = __decorate([
|
|
123
134
|
(0, core_1.VendurePlugin)({
|
|
124
135
|
imports: [core_1.PluginCommonModule],
|
|
125
|
-
providers: [
|
|
126
|
-
|
|
127
|
-
|
|
136
|
+
providers: [
|
|
137
|
+
visitor_tracking_service_1.VisitorTrackingService,
|
|
138
|
+
admin_api_1.VisitorAnalyticsAdminResolver,
|
|
139
|
+
abandoned_cart_service_1.AbandonedCartService,
|
|
140
|
+
recommendations_service_1.RecommendationsService,
|
|
141
|
+
search_analytics_service_1.SearchAnalyticsService,
|
|
142
|
+
journey_buffs_service_1.JourneyBuffsService,
|
|
143
|
+
abandoned_cart_scanner_1.AbandonedCartScanner,
|
|
144
|
+
],
|
|
145
|
+
controllers: [
|
|
146
|
+
visitor_tracking_controller_1.VisitorTrackingController,
|
|
147
|
+
abandoned_cart_controller_1.AbandonedCartController,
|
|
148
|
+
recommendations_controller_1.RecommendationsController,
|
|
149
|
+
search_analytics_controller_1.SearchAnalyticsController,
|
|
150
|
+
journey_buffs_controller_1.JourneyBuffsController,
|
|
151
|
+
],
|
|
152
|
+
entities: [visitor_event_entity_1.VisitorEvent, conversion_goal_entity_1.ConversionGoal, abandoned_cart_entity_1.AbandonedCart, product_co_view_entity_1.ProductCoView],
|
|
128
153
|
compatibility: '^3.0.0',
|
|
129
154
|
adminApiExtensions: {
|
|
130
155
|
schema: admin_api_1.visitorAnalyticsAdminApiSchema,
|
package/dist/plugin.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"plugin.js","sourceRoot":"","sources":["../src/plugin.ts"],"names":[],"mappings":";;;;;;;;;;
|
|
1
|
+
{"version":3,"file":"plugin.js","sourceRoot":"","sources":["../src/plugin.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Aggregate table for "customers who viewed X also viewed Y".
|
|
3
|
+
*
|
|
4
|
+
* Denormalised: we store both `(A, B)` and `(B, A)` so lookups by either
|
|
5
|
+
* side are a single indexed scan. Cheap on disk (int, int, int, int),
|
|
6
|
+
* expensive nowhere.
|
|
7
|
+
*
|
|
8
|
+
* Rebuilt by a nightly cron that walks recent `product_view` events per
|
|
9
|
+
* session, extracts all ordered pairs, and increments the counter. The
|
|
10
|
+
* scanner also decays old scores so trending products bubble up.
|
|
11
|
+
*/
|
|
12
|
+
export declare class ProductCoView {
|
|
13
|
+
productIdA: number;
|
|
14
|
+
productIdB: number;
|
|
15
|
+
channelId: number;
|
|
16
|
+
viewsTogether: number;
|
|
17
|
+
lastUpdated: Date;
|
|
18
|
+
}
|
|
19
|
+
//# sourceMappingURL=product-co-view.entity.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"product-co-view.entity.d.ts","sourceRoot":"","sources":["../src/product-co-view.entity.ts"],"names":[],"mappings":"AAEA;;;;;;;;;;GAUG;AACH,qBAEa,aAAa;IAEtB,UAAU,EAAG,MAAM,CAAC;IAGpB,UAAU,EAAG,MAAM,CAAC;IAGpB,SAAS,EAAG,MAAM,CAAC;IAGnB,aAAa,EAAG,MAAM,CAAC;IAGvB,WAAW,EAAG,IAAI,CAAC;CACtB"}
|
|
@@ -0,0 +1,52 @@
|
|
|
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.ProductCoView = void 0;
|
|
13
|
+
const typeorm_1 = require("typeorm");
|
|
14
|
+
/**
|
|
15
|
+
* Aggregate table for "customers who viewed X also viewed Y".
|
|
16
|
+
*
|
|
17
|
+
* Denormalised: we store both `(A, B)` and `(B, A)` so lookups by either
|
|
18
|
+
* side are a single indexed scan. Cheap on disk (int, int, int, int),
|
|
19
|
+
* expensive nowhere.
|
|
20
|
+
*
|
|
21
|
+
* Rebuilt by a nightly cron that walks recent `product_view` events per
|
|
22
|
+
* session, extracts all ordered pairs, and increments the counter. The
|
|
23
|
+
* scanner also decays old scores so trending products bubble up.
|
|
24
|
+
*/
|
|
25
|
+
let ProductCoView = class ProductCoView {
|
|
26
|
+
};
|
|
27
|
+
exports.ProductCoView = ProductCoView;
|
|
28
|
+
__decorate([
|
|
29
|
+
(0, typeorm_1.PrimaryColumn)({ type: 'int' }),
|
|
30
|
+
__metadata("design:type", Number)
|
|
31
|
+
], ProductCoView.prototype, "productIdA", void 0);
|
|
32
|
+
__decorate([
|
|
33
|
+
(0, typeorm_1.PrimaryColumn)({ type: 'int' }),
|
|
34
|
+
__metadata("design:type", Number)
|
|
35
|
+
], ProductCoView.prototype, "productIdB", void 0);
|
|
36
|
+
__decorate([
|
|
37
|
+
(0, typeorm_1.PrimaryColumn)({ type: 'int', default: 1 }),
|
|
38
|
+
__metadata("design:type", Number)
|
|
39
|
+
], ProductCoView.prototype, "channelId", void 0);
|
|
40
|
+
__decorate([
|
|
41
|
+
(0, typeorm_1.Column)({ type: 'int', default: 0 }),
|
|
42
|
+
__metadata("design:type", Number)
|
|
43
|
+
], ProductCoView.prototype, "viewsTogether", void 0);
|
|
44
|
+
__decorate([
|
|
45
|
+
(0, typeorm_1.Column)({ type: 'datetime', precision: 3 }),
|
|
46
|
+
__metadata("design:type", Date)
|
|
47
|
+
], ProductCoView.prototype, "lastUpdated", void 0);
|
|
48
|
+
exports.ProductCoView = ProductCoView = __decorate([
|
|
49
|
+
(0, typeorm_1.Entity)('product_co_view'),
|
|
50
|
+
(0, typeorm_1.Index)('product_co_view_score_idx', ['productIdA', 'channelId', 'viewsTogether'])
|
|
51
|
+
], ProductCoView);
|
|
52
|
+
//# sourceMappingURL=product-co-view.entity.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"product-co-view.entity.js","sourceRoot":"","sources":["../src/product-co-view.entity.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,qCAA+D;AAE/D;;;;;;;;;;GAUG;AAGI,IAAM,aAAa,GAAnB,MAAM,aAAa;CAezB,CAAA;AAfY,sCAAa;AAEtB;IADC,IAAA,uBAAa,EAAC,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC;;iDACX;AAGpB;IADC,IAAA,uBAAa,EAAC,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC;;iDACX;AAGpB;IADC,IAAA,uBAAa,EAAC,EAAE,IAAI,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC;;gDACxB;AAGnB;IADC,IAAA,gBAAM,EAAC,EAAE,IAAI,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC;;oDACb;AAGvB;IADC,IAAA,gBAAM,EAAC,EAAE,IAAI,EAAE,UAAU,EAAE,SAAS,EAAE,CAAC,EAAE,CAAC;8BAC7B,IAAI;kDAAC;wBAdV,aAAa;IAFzB,IAAA,gBAAM,EAAC,iBAAiB,CAAC;IACzB,IAAA,eAAK,EAAC,2BAA2B,EAAE,CAAC,YAAY,EAAE,WAAW,EAAE,eAAe,CAAC,CAAC;GACpE,aAAa,CAezB"}
|