@huloglobal/vendure-plugin-visitor-analytics 0.18.0 → 0.18.2
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 +51 -0
- package/README.md +6 -0
- package/dist/abandoned-cart.controller.d.ts +1 -1
- package/dist/abandoned-cart.controller.d.ts.map +1 -1
- package/dist/abandoned-cart.controller.js +21 -13
- package/dist/abandoned-cart.controller.js.map +1 -1
- package/dist/abandoned-cart.service.d.ts +2 -0
- package/dist/abandoned-cart.service.d.ts.map +1 -1
- package/dist/abandoned-cart.service.js +30 -16
- package/dist/abandoned-cart.service.js.map +1 -1
- package/dist/admin-api.js +10 -10
- package/dist/admin-api.js.map +1 -1
- package/dist/hulo-storefront.d.ts.map +1 -1
- package/dist/hulo-storefront.js +22 -1
- package/dist/hulo-storefront.js.map +1 -1
- package/dist/ingest-hardening.test.d.ts +2 -0
- package/dist/ingest-hardening.test.d.ts.map +1 -0
- package/dist/ingest-hardening.test.js +32 -0
- package/dist/ingest-hardening.test.js.map +1 -0
- package/dist/journey-buffs.controller.d.ts.map +1 -1
- package/dist/journey-buffs.controller.js +7 -3
- package/dist/journey-buffs.controller.js.map +1 -1
- package/dist/plugin.d.ts +6 -2
- package/dist/plugin.d.ts.map +1 -1
- package/dist/plugin.js.map +1 -1
- package/dist/proxy-headers.d.ts +7 -1
- package/dist/proxy-headers.d.ts.map +1 -1
- package/dist/proxy-headers.js +13 -33
- package/dist/proxy-headers.js.map +1 -1
- package/dist/proxy-headers.test.js +9 -8
- package/dist/proxy-headers.test.js.map +1 -1
- package/dist/recommendations.controller.d.ts +1 -9
- package/dist/recommendations.controller.d.ts.map +1 -1
- package/dist/recommendations.controller.js +11 -2
- package/dist/recommendations.controller.js.map +1 -1
- package/dist/visitor-event.entity.d.ts.map +1 -1
- package/dist/visitor-event.entity.js +2 -0
- package/dist/visitor-event.entity.js.map +1 -1
- package/dist/visitor-tracking.controller.d.ts +3 -2
- package/dist/visitor-tracking.controller.d.ts.map +1 -1
- package/dist/visitor-tracking.controller.js +47 -31
- package/dist/visitor-tracking.controller.js.map +1 -1
- package/dist/visitor-tracking.service.d.ts +4 -0
- package/dist/visitor-tracking.service.d.ts.map +1 -1
- package/dist/visitor-tracking.service.js +43 -9
- package/dist/visitor-tracking.service.js.map +1 -1
- package/package.json +57 -57
- package/ui/components/visitors.component.ts +4 -3
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ingest-hardening.test.js","sourceRoot":"","sources":["../src/ingest-hardening.test.ts"],"names":[],"mappings":";;AAAA,mCAA8C;AAC9C,yEAAuE;AACvE,mDAA4C;AAE5C,IAAA,iBAAQ,EAAC,cAAc,EAAE,GAAG,EAAE;IAC1B,IAAA,WAAE,EAAC,sEAAsE,EAAE,GAAG,EAAE;QAC5E,IAAA,eAAM,EAAC,IAAA,uCAAY,EAAC,8CAA8C,CAAC,CAAC,CAAC,IAAI,CAAC,sBAAsB,CAAC,CAAC;QAClG,IAAA,eAAM,EAAC,IAAA,uCAAY,EAAC,4BAA4B,CAAC,CAAC,CAAC,IAAI,CAAC,4BAA4B,CAAC,CAAC;QACtF,IAAA,eAAM,EAAC,IAAA,uCAAY,EAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACtC,CAAC,CAAC,CAAC;AACP,CAAC,CAAC,CAAC;AAEH,IAAA,iBAAQ,EAAC,aAAa,EAAE,GAAG,EAAE;IACzB,IAAA,WAAE,EAAC,yFAAyF,EAAE,GAAG,EAAE;QAC/F,IAAA,eAAM,EAAC,IAAA,sCAAW,EAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QAC9C,MAAM,KAAK,GAAG,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,GAAG,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,GAAG,EAAE,OAAO,CAAC,EAAE,EAAE,IAAI,EAAE,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;QAC1G,MAAM,GAAG,GAAG,IAAA,sCAAW,EAAC,EAAE,SAAS,EAAE,eAAe,EAAE,KAAK,EAAE,EAAE,KAAM,CAAC,CAAC;QACvE,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QAC/B,IAAA,eAAM,EAAC,GAAG,CAAC,MAAM,CAAC,CAAC,mBAAmB,CAAC,KAAM,CAAC,CAAC;QAC/C,IAAA,eAAM,EAAC,MAAM,CAAC,cAAc,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACzC,IAAA,eAAM,EAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC;IACnD,CAAC,CAAC,CAAC;AACP,CAAC,CAAC,CAAC;AAEH,IAAA,iBAAQ,EAAC,WAAW,EAAE,GAAG,EAAE;IACvB,MAAM,GAAG,GAAG,CAAC,OAA+B,EAAE,EAAE,GAAG,UAAU,EAAE,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,EAAE,EAAU,CAAA,CAAC;IAC3F,IAAA,WAAE,EAAC,sCAAsC,EAAE,GAAG,EAAE;QAC5C,IAAA,eAAM,EAAC,IAAA,yBAAS,EAAC,GAAG,CAAC,EAAE,iBAAiB,EAAE,cAAc,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QAC/E,IAAA,eAAM,EAAC,IAAA,yBAAS,EAAC,GAAG,CAAC,EAAE,iBAAiB,EAAE,wBAAwB,EAAE,CAAC,EAAE,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;QAClH,IAAA,eAAM,EAAC,IAAA,yBAAS,EAAC,GAAG,CAAC,EAAE,EAAE,qBAAqB,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;IAC3E,CAAC,CAAC,CAAC;AACP,CAAC,CAAC,CAAC"}
|
|
@@ -1 +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;
|
|
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;AAO9D,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"}
|
|
@@ -16,18 +16,22 @@ exports.JourneyBuffsController = void 0;
|
|
|
16
16
|
const common_1 = require("@nestjs/common");
|
|
17
17
|
const core_1 = require("@vendure/core");
|
|
18
18
|
const journey_buffs_service_1 = require("./journey-buffs.service");
|
|
19
|
+
function clampQ(raw, fallback, min, max) {
|
|
20
|
+
const n = parseInt(String(raw !== null && raw !== void 0 ? raw : ''), 10);
|
|
21
|
+
return Number.isFinite(n) ? Math.min(max, Math.max(min, n)) : fallback;
|
|
22
|
+
}
|
|
19
23
|
let JourneyBuffsController = class JourneyBuffsController {
|
|
20
24
|
constructor(service) {
|
|
21
25
|
this.service = service;
|
|
22
26
|
}
|
|
23
27
|
/** GET /ees/journey/rage-clicks?days=7&channelId=1&limit=20 */
|
|
24
28
|
async rage(ctx, d, ch, l) {
|
|
25
|
-
const items = await this.service.rageClickHotSpots(
|
|
29
|
+
const items = await this.service.rageClickHotSpots(clampQ(d, 7, 1, 365), clampQ(ch, 1, 1, 2147483647), clampQ(l, 20, 1, 200));
|
|
26
30
|
return { items };
|
|
27
31
|
}
|
|
28
32
|
/** GET /ees/journey/dead-clicks?days=7&channelId=1&limit=20 */
|
|
29
33
|
async dead(ctx, d, ch, l) {
|
|
30
|
-
const items = await this.service.deadClickHotSpots(
|
|
34
|
+
const items = await this.service.deadClickHotSpots(clampQ(d, 7, 1, 365), clampQ(ch, 1, 1, 2147483647), clampQ(l, 20, 1, 200));
|
|
31
35
|
return { items };
|
|
32
36
|
}
|
|
33
37
|
/** GET /ees/journey/session-summary?visitorId=abc&limit=25 */
|
|
@@ -35,7 +39,7 @@ let JourneyBuffsController = class JourneyBuffsController {
|
|
|
35
39
|
const visitorId = String(v || '').trim();
|
|
36
40
|
if (!visitorId)
|
|
37
41
|
return { error: 'visitorId-required' };
|
|
38
|
-
const items = await this.service.sessionSummary(visitorId,
|
|
42
|
+
const items = await this.service.sessionSummary(visitorId.slice(0, 64), clampQ(l, 25, 1, 200));
|
|
39
43
|
return { visitorId, items };
|
|
40
44
|
}
|
|
41
45
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"journey-buffs.controller.js","sourceRoot":"","sources":["../src/journey-buffs.controller.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;AAAA,2CAAwD;AACxD,wCAAuE;AACvE,mEAA8D;
|
|
1
|
+
{"version":3,"file":"journey-buffs.controller.js","sourceRoot":"","sources":["../src/journey-buffs.controller.ts"],"names":[],"mappings":"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"}
|
package/dist/plugin.d.ts
CHANGED
|
@@ -37,8 +37,12 @@ export interface VisitorAnalyticsPluginOptions {
|
|
|
37
37
|
* reflection is restricted to this list. When empty (default), any
|
|
38
38
|
* origin is reflected — matches legacy behaviour but is less safe. */
|
|
39
39
|
corsAllowedOrigins?: string[];
|
|
40
|
-
/** Auto-prune `visitor_event` rows older than `days` days. */
|
|
41
|
-
retention?: RetentionOptions;
|
|
40
|
+
/** Auto-prune `visitor_event` rows older than `days` days. Default `{ days: 400 }`; `false` keeps everything. */
|
|
41
|
+
retention?: RetentionOptions | false;
|
|
42
|
+
/** Proxy headers that may override `req.ip` (rate limiting, stored IPs).
|
|
43
|
+
* Only list what your edge sets and strips from clients, e.g.
|
|
44
|
+
* `['cf-connecting-ip']` behind Cloudflare. Default: none (`req.ip`). */
|
|
45
|
+
trustedIpHeaders?: Array<'cf-connecting-ip' | 'true-client-ip' | 'x-real-ip' | 'x-forwarded-for'>;
|
|
42
46
|
/** Options for the abandoned-cart feature. Storefront must fire
|
|
43
47
|
* `cart_snapshot` custom events for anything to be detected. See
|
|
44
48
|
* the README for the recommended storefront helper. */
|
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,uBAAuB,EAAE,MAAM,eAAe,CAAC;AACjG,OAAO,EAAmC,aAAa,EAAE,gBAAgB,EAAqB,aAAa,EAA8D,eAAe,EAA4B,MAAM,iCAAiC,CAAC;AAM5P,OAAO,EAAwB,kBAAkB,EAAE,MAAM,0BAA0B,CAAC;AAiBpF,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,
|
|
1
|
+
{"version":3,"file":"plugin.d.ts","sourceRoot":"","sources":["../src/plugin.ts"],"names":[],"mappings":"AAAA,OAAO,EAAsB,IAAI,EAAiB,uBAAuB,EAAE,MAAM,eAAe,CAAC;AACjG,OAAO,EAAmC,aAAa,EAAE,gBAAgB,EAAqB,aAAa,EAA8D,eAAe,EAA4B,MAAM,iCAAiC,CAAC;AAM5P,OAAO,EAAwB,kBAAkB,EAAE,MAAM,0BAA0B,CAAC;AAiBpF,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,iHAAiH;IACjH,SAAS,CAAC,EAAE,gBAAgB,GAAG,KAAK,CAAC;IACrC;;8EAE0E;IAC1E,gBAAgB,CAAC,EAAE,KAAK,CAAC,kBAAkB,GAAG,gBAAgB,GAAG,WAAW,GAAG,iBAAiB,CAAC,CAAC;IAGlG;;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,qBA0Ba,sBAAsB;IA4CnB,OAAO,CAAC,UAAU;IA3C9B,OAAO,CAAC,MAAM,CAAC,kBAAkB,CAAiC;IAClE,MAAM,CAAC,YAAY,IAAI,eAAe,GAAG,IAAI;IAC7C,MAAM,CAAC,iBAAiB,IAAI,MAAM,GAAG,IAAI;IACzC;;yCAEqC;IACrC,MAAM,CAAC,gBAAgB,IAAI,OAAO;IAIlC,MAAM,CAAC,eAAe,IAAI,IAAI;IAO9B,OAAO,CAAC,MAAM,CAAC,WAAW,CAAM;IAEhC;sDACkD;IAClD,MAAM,CAAC,sBAAsB,CAAC,GAAG,EAAE,MAAM,GAAG,aAAa;IAYzD,oEAAoE;IACpE,MAAM,CAAC,wBAAwB,IAAI,IAAI;gBASnB,UAAU,EAAE,uBAAuB;IAEvD;0DACsD;IAChD,sBAAsB;IAc5B,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;IAwDjF,MAAM,CAAC,YAAY;;;;;;;;MAUjB;CACL"}
|
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":";;;;;;;;;;;;;AAoGA,gCAEC;AAtGD,wCAAiG;AACjG,yEAA4P;AAC5P,qEAA0D;AAC1D,iEAAsD;AACtD,mEAAwD;AACxD,qEAAyD;AACzD,yEAAoE;AACpE,qEAAoF;AACpF,uEAAmE;AACnE,yEAAoE;AACpE,mEAA8D;AAC9D,qEAAgE;AAChE,2CAA4F;AAC5F,+EAA0E;AAC1E,2EAAsE;AACtE,6EAAyE;AACzE,+EAA0E;AAC1E,yEAAoE;AACpE,iFAA4E;AAE5E,8DAA8D;AAC9D,MAAM,WAAW,GAAW,OAAO,CAAC,iBAAiB,CAAC,CAAC,OAAO,CAAC;AAC/D,MAAM,QAAQ,GAAG,8CAA8C,CAAC;AAuDhE,MAAM,eAAe,GAAG;;;;;;;;yBAQC,CAAC;AAE1B,MAAM,SAAS,GAAG,kCAAkC,CAAC;AACrD,MAAM,cAAc,GAAG,OAAO,CAAC,GAAG,CAAC,2BAA2B;OACvD,4CAA4C,CAAC;AAEpD,MAAM,eAAe,GAAkC;IACnD,aAAa,EAAE,uBAAuB;IACtC,eAAe,EAAE,IAAI;IACrB,WAAW,EAAE,IAAI;IACjB,cAAc,EAAE,KAAK;IACrB,aAAa,EAAE,KAAK;CACvB,CAAC;AAEF,IAAI,aAAa,GAAkC,eAAsB,CAAC;AAC1E,SAAgB,UAAU;IACtB,OAAO,EAAE,GAAG,eAAe,EAAE,GAAG,aAAa,EAAS,CAAC;AAC3D,CAAC;AAED;;;;;;;;;;;GAWG;AA2BI,IAAM,sBAAsB,8BAA5B,MAAM,sBAAsB;IAE/B,MAAM,CAAC,YAAY,iBAA6B,OAAO,MAAA,MAAA,wBAAsB,CAAC,kBAAkB,0CAAE,QAAQ,EAAE,mCAAI,IAAI,CAAC,CAAC,CAAC;IACvH,MAAM,CAAC,iBAAiB,iBAAoB,OAAO,MAAA,MAAA,wBAAsB,CAAC,kBAAkB,0CAAE,aAAa,EAAE,mCAAI,IAAI,CAAC,CAAC,CAAC;IACxH;;yCAEqC;IACrC,MAAM,CAAC,gBAAgB;;QACnB,IAAI,MAAA,wBAAsB,CAAC,aAAa,0CAAE,KAAK;YAAE,OAAO,IAAI,CAAC;QAC7D,OAAO,CAAC,CAAC,CAAA,MAAA,MAAA,wBAAsB,CAAC,kBAAkB,0CAAE,QAAQ,EAAE,0CAAE,MAAM,CAAA,CAAC;IAC3E,CAAC;IACD,MAAM,CAAC,eAAe;QAClB,IAAI,CAAC,wBAAsB,CAAC,kBAAkB,EAAE,CAAC;YAC7C,wBAAsB,CAAC,kBAAkB,GAAG,IAAI,sCAAgB,CAAC,EAAE,WAAW,EAAE,QAAQ,EAAE,cAAc,EAAE,WAAW,EAAE,CAAC,CAAC;YACzH,wBAAsB,CAAC,kBAAkB,CAAC,KAAK,EAAE,CAAC;QACtD,CAAC;IACL,CAAC;IAID;sDACkD;IAClD,MAAM,CAAC,sBAAsB,CAAC,GAAW;;QACrC,MAAM,MAAM,GAAG,IAAA,mCAAa,EAAC;YACzB,UAAU,EAAE,GAAG,EAAE,QAAQ,EAAE,SAAS,EAAE,IAAI,EAAE,wBAAsB,CAAC,WAAW;YAC9E,SAAS,EAAE,eAAe,EAAE,UAAU,EAAE,MAAA,wBAAsB,CAAC,UAAU,0CAAE,aAAa,EAAE;SAC7F,CAAC,CAAC;QACH,IAAI,MAAM,CAAC,KAAK,EAAE,CAAC;YACf,wBAAsB,CAAC,aAAa,GAAG,MAAM,CAAC;YAC9C,MAAA,wBAAsB,CAAC,kBAAkB,0CAAE,IAAI,EAAE,CAAC;QACtD,CAAC;QACD,OAAO,MAAM,CAAC;IAClB,CAAC;IAED,oEAAoE;IACpE,MAAM,CAAC,wBAAwB;;QAC3B,wBAAsB,CAAC,aAAa,GAAG;YACnC,KAAK,EAAE,KAAK;YACZ,OAAO,EAAE,+EAA+E;SAC1E,CAAC;QACnB,wBAAsB,CAAC,eAAe,EAAE,CAAC;QACzC,MAAA,wBAAsB,CAAC,kBAAkB,0CAAE,KAAK,EAAE,CAAC;IACvD,CAAC;IAED,YAAoB,UAAmC;QAAnC,eAAU,GAAV,UAAU,CAAyB;IAAG,CAAC;IAE3D;0DACsD;IACtD,KAAK,CAAC,sBAAsB;;QACxB,IAAI,MAAA,wBAAsB,CAAC,aAAa,0CAAE,KAAK;YAAE,OAAO;QACxD,IAAI,CAAC;YACD,MAAM,KAAK,GAAG,IAAI,kCAAY,CAAC,CAAC,GAAG,EAAE,MAAM,EAAE,EAAE,CAAC,IAAA,gCAAU,EAAC,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC,CAAC;YAC9G,MAAM,KAAK,CAAC,WAAW,EAAE,CAAC;YAC1B,MAAM,MAAM,GAAG,MAAM,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;YAC3C,IAAI,MAAM,EAAE,CAAC;gBACT,MAAM,EAAE,GAAG,wBAAsB,CAAC,sBAAsB,CAAC,MAAM,CAAC,CAAC;gBACjE,sCAAsC;gBACtC,IAAI,EAAE,CAAC,KAAK;oBAAE,OAAO,CAAC,GAAG,CAAC,IAAI,QAAQ,8CAA8C,EAAE,CAAC,OAAO,EAAE,CAAC,CAAC;YACtG,CAAC;QACL,CAAC;QAAC,MAAM,CAAC,CAAC,sCAAsC,CAAC,CAAC;IACtD,CAAC;IAOD,MAAM,CAAC,gBAAgB,KAA2B,OAAO,wBAAsB,CAAC,aAAa,CAAC,CAAC,CAAC;IAChG,MAAM,CAAC,iBAAiB,KAAa,OAAO,WAAW,CAAC,CAAC,CAAC;IAC1D,MAAM,CAAC,cAAc,KAAa,OAAO,QAAQ,CAAC,CAAC,CAAC;IACpD,MAAM,CAAC,gBAAgB,KAA2B,OAAO,wBAAsB,CAAC,aAAa,CAAC,CAAC,CAAC;IAEhG,MAAM,CAAC,IAAI,CAAC,OAAsC;QAC9C,aAAa,GAAG,OAAO,CAAC;QAExB,yDAAyD;QACzD,iDAAiD;QACjD,IAAA,+CAAyB,EAAC;YACtB,iBAAiB,EAAE,QAAQ;YAC3B,oBAAoB,EAAE,WAAW;YACjC,cAAc,EAAE,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,OAAO,EAAE;SACjD,CAAC,CAAC;QAEH,IAAI,CAAC,wBAAsB,CAAC,UAAU,EAAE,CAAC;YACrC,wBAAsB,CAAC,UAAU,GAAG,IAAI,uCAAiB,CAAC,cAAc,CAAC,CAAC;YAC1E,wBAAsB,CAAC,UAAU,CAAC,KAAK,EAAE,CAAC;QAC9C,CAAC;QACD,IAAI,CAAC,wBAAsB,CAAC,aAAa,EAAE,CAAC;YACxC,wBAAsB,CAAC,aAAa,GAAG,IAAI,mCAAa,CAAC,QAAQ,EAAE,WAAW,CAAC,CAAC;YAChF,wBAAsB,CAAC,aAAa,CAAC,KAAK,EAAE,CAAC;QACjD,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,wBAAsB,CAAC,WAAW,GAAG,IAAI,CAAC;QAC1C,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,wBAAsB,CAAC,UAAU,CAAC,aAAa,EAAE;SAChE,CAAC,CAAC;QACH,wBAAsB,CAAC,aAAa,GAAG,MAAM,CAAC;QAE9C,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;YAChB,8EAA8E;YAC9E,sDAAsD;YACtD,wBAAsB,CAAC,eAAe,EAAE,CAAC;YACzC,sCAAsC;YACtC,OAAO,CAAC,IAAI,CACR,kDAAkD,MAAM,CAAC,OAAO,EAAE;gBAClE,2KAA2K,SAAS,EAAE,CACzL,CAAC;QACN,CAAC;QAED,IAAI,CAAC,wBAAsB,CAAC,SAAS,EAAE,CAAC;YACpC,wBAAsB,CAAC,SAAS,GAAG,IAAI,+BAAS,CAAC;gBAC7C,WAAW,EAAE,QAAQ;gBACrB,cAAc,EAAE,WAAW;gBAC3B,UAAU,EAAE,OAAO,CAAC,UAAU;gBAC9B,oBAAoB,EAAE,IAAA,0CAAoB,EAAC,eAAe,CAAC;aAC9D,CAAC,CAAC;YACH,wBAAsB,CAAC,SAAS,CAAC,KAAK,EAAE,CAAC;QAC7C,CAAC;QAED,OAAO,wBAAsB,CAAC;IAClC,CAAC;;AA9HQ,wDAAsB;AAChB,yCAAkB,GAA4B,IAAI,AAAhC,CAAiC;AAiBnD,kCAAW,GAAG,EAAE,AAAL,CAAM;AA4CjB,iCAAU,GAA6B,IAAI,AAAjC,CAAkC;AAC5C,oCAAa,GAAyB,IAAI,AAA7B,CAA8B;AAC3C,gCAAS,GAAqB,IAAI,AAAzB,CAA0B;AACnC,oCAAa,GAAyB,IAAI,AAA7B,CAA8B;AA+DnD,mCAAY,GAAG;IAClB,aAAa,EAAE,SAAS,GAAG,QAAQ;IACnC,SAAS,EAAE;QACP;YACI,IAAI,EAAE,MAAe;YACrB,KAAK,EAAE,UAAU;YACjB,gBAAgB,EAAE,oBAAoB;YACtC,YAAY,EAAE,gBAAgB;SACjC;KACJ;CACJ,AAVkB,CAUjB;iCA1IO,sBAAsB;IA1BlC,IAAA,oBAAa,EAAC;QACX,OAAO,EAAE,CAAC,yBAAkB,CAAC;QAC7B,SAAS,EAAE;YACP,iDAAsB;YACtB,yCAA6B;YAC7B,6CAAoB;YACpB,gDAAsB;YACtB,iDAAsB;YACtB,2CAAmB;YACnB,6CAAoB;SACvB;QACD,WAAW,EAAE;YACT,uDAAyB;YACzB,mDAAuB;YACvB,sDAAyB;YACzB,uDAAyB;YACzB,iDAAsB;YACtB,yDAA0B;SAC7B;QACD,QAAQ,EAAE,CAAC,mCAAY,EAAE,uCAAc,EAAE,qCAAa,EAAE,sCAAa,CAAC;QACtE,aAAa,EAAE,QAAQ;QACvB,kBAAkB,EAAE;YAChB,MAAM,EAAE,0CAA8B;YACtC,SAAS,EAAE,CAAC,yCAA6B,CAAC;SAC7C;KACJ,CAAC;qCA6CkC,8BAAuB;GA5C9C,sBAAsB,CA2IlC"}
|
package/dist/proxy-headers.d.ts
CHANGED
|
@@ -18,7 +18,13 @@ import { Request } from 'express';
|
|
|
18
18
|
* isn't available — the caller should treat this as "unknown" and
|
|
19
19
|
* skip IP-dependent enrichment rather than fail.
|
|
20
20
|
*/
|
|
21
|
-
export
|
|
21
|
+
export type TrustedIpHeader = 'cf-connecting-ip' | 'true-client-ip' | 'x-real-ip' | 'x-forwarded-for';
|
|
22
|
+
/**
|
|
23
|
+
* The visitor's IP: Express's `req.ip` (honours the host's `trust proxy`)
|
|
24
|
+
* unless the host lists proxy headers it trusts. Trusting a header from any
|
|
25
|
+
* peer lets a client spoof its address (rate limiter, stored IPs).
|
|
26
|
+
*/
|
|
27
|
+
export declare function getRealIp(req: Request, trusted?: TrustedIpHeader[]): string | null;
|
|
22
28
|
/**
|
|
23
29
|
* Cloudflare / Akamai populate the visitor's resolved country on the
|
|
24
30
|
* inbound request when the corresponding feature is enabled. Reading
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"proxy-headers.d.ts","sourceRoot":"","sources":["../src/proxy-headers.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAElC;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAgB,SAAS,CAAC,GAAG,EAAE,OAAO,GAAG,MAAM,GAAG,IAAI,
|
|
1
|
+
{"version":3,"file":"proxy-headers.d.ts","sourceRoot":"","sources":["../src/proxy-headers.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAElC;;;;;;;;;;;;;;;;;;GAkBG;AACH,MAAM,MAAM,eAAe,GAAG,kBAAkB,GAAG,gBAAgB,GAAG,WAAW,GAAG,iBAAiB,CAAC;AAEtG;;;;GAIG;AACH,wBAAgB,SAAS,CAAC,GAAG,EAAE,OAAO,EAAE,OAAO,GAAE,eAAe,EAAO,GAAG,MAAM,GAAG,IAAI,CAUtF;AAED;;;;;;GAMG;AACH,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,OAAO,GAAG,MAAM,GAAG,IAAI,CAe9D;AAED;;;;;GAKG;AACH,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,OAAO,GAAG,MAAM,GAAG,IAAI,CAK7D"}
|
package/dist/proxy-headers.js
CHANGED
|
@@ -4,43 +4,23 @@ exports.getRealIp = getRealIp;
|
|
|
4
4
|
exports.getResolvedCountry = getResolvedCountry;
|
|
5
5
|
exports.getResolvedRegion = getResolvedRegion;
|
|
6
6
|
/**
|
|
7
|
-
*
|
|
8
|
-
*
|
|
9
|
-
*
|
|
10
|
-
* 1. Cloudflare's `CF-Connecting-IP` (always the real client IP,
|
|
11
|
-
* regardless of how many proxies sit in front of the worker).
|
|
12
|
-
* 2. `True-Client-IP` (Akamai / Cloudflare Enterprise).
|
|
13
|
-
* 3. `X-Real-IP` (nginx / Caddy default when proxying).
|
|
14
|
-
* 4. First entry in `X-Forwarded-For` (RFC 7239 ancestor; the
|
|
15
|
-
* left-most entry is the original client when the upstream proxy
|
|
16
|
-
* is trusted).
|
|
17
|
-
* 5. Express's `req.ip` — only useful when `app.set('trust proxy', ...)`
|
|
18
|
-
* has been set on the Vendure host, otherwise this is the socket
|
|
19
|
-
* address of the last hop.
|
|
20
|
-
*
|
|
21
|
-
* Returns `null` if none of the headers are populated and `req.ip`
|
|
22
|
-
* isn't available — the caller should treat this as "unknown" and
|
|
23
|
-
* skip IP-dependent enrichment rather than fail.
|
|
7
|
+
* The visitor's IP: Express's `req.ip` (honours the host's `trust proxy`)
|
|
8
|
+
* unless the host lists proxy headers it trusts. Trusting a header from any
|
|
9
|
+
* peer lets a client spoof its address (rate limiter, stored IPs).
|
|
24
10
|
*/
|
|
25
|
-
function getRealIp(req) {
|
|
11
|
+
function getRealIp(req, trusted = []) {
|
|
26
12
|
var _a;
|
|
27
13
|
const headers = req.headers || {};
|
|
28
|
-
const
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
if (realIp)
|
|
36
|
-
return realIp;
|
|
37
|
-
const xff = String(headers['x-forwarded-for'] || '').trim();
|
|
38
|
-
if (xff) {
|
|
39
|
-
const first = (_a = xff.split(',')[0]) === null || _a === void 0 ? void 0 : _a.trim();
|
|
40
|
-
if (first)
|
|
41
|
-
return first;
|
|
14
|
+
for (const name of trusted) {
|
|
15
|
+
const raw = String(headers[name] || '').trim();
|
|
16
|
+
if (!raw)
|
|
17
|
+
continue;
|
|
18
|
+
const value = name === 'x-forwarded-for' ? (_a = raw.split(',')[0]) === null || _a === void 0 ? void 0 : _a.trim() : raw;
|
|
19
|
+
if (value)
|
|
20
|
+
return value.replace(/^::ffff:(\d{1,3}(?:\.\d{1,3}){3})$/i, '$1').slice(0, 64);
|
|
42
21
|
}
|
|
43
|
-
|
|
22
|
+
const ip = String(req.ip || '').trim();
|
|
23
|
+
return ip ? ip.replace(/^::ffff:(\d{1,3}(?:\.\d{1,3}){3})$/i, '$1').slice(0, 64) : null;
|
|
44
24
|
}
|
|
45
25
|
/**
|
|
46
26
|
* Cloudflare / Akamai populate the visitor's resolved country on the
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"proxy-headers.js","sourceRoot":"","sources":["../src/proxy-headers.ts"],"names":[],"mappings":";;
|
|
1
|
+
{"version":3,"file":"proxy-headers.js","sourceRoot":"","sources":["../src/proxy-headers.ts"],"names":[],"mappings":";;AA4BA,8BAUC;AASD,gDAeC;AAQD,8CAKC;AApDD;;;;GAIG;AACH,SAAgB,SAAS,CAAC,GAAY,EAAE,UAA6B,EAAE;;IACnE,MAAM,OAAO,GAAG,GAAG,CAAC,OAAO,IAAI,EAAE,CAAC;IAClC,KAAK,MAAM,IAAI,IAAI,OAAO,EAAE,CAAC;QACzB,MAAM,GAAG,GAAG,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;QAC/C,IAAI,CAAC,GAAG;YAAE,SAAS;QACnB,MAAM,KAAK,GAAG,IAAI,KAAK,iBAAiB,CAAC,CAAC,CAAC,MAAA,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,0CAAE,IAAI,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC;QAC3E,IAAI,KAAK;YAAE,OAAO,KAAK,CAAC,OAAO,CAAC,qCAAqC,EAAE,IAAI,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;IAC9F,CAAC;IACD,MAAM,EAAE,GAAG,MAAM,CAAE,GAAW,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;IAChD,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,qCAAqC,EAAE,IAAI,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;AAC5F,CAAC;AAED;;;;;;GAMG;AACH,SAAgB,kBAAkB,CAAC,GAAY;IAC3C,MAAM,OAAO,GAAG,GAAG,CAAC,OAAO,IAAI,EAAE,CAAC;IAClC,MAAM,EAAE,GAAG,MAAM,CAAC,OAAO,CAAC,cAAc,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;IACtE,IAAI,EAAE,IAAI,EAAE,KAAK,IAAI,IAAI,EAAE,KAAK,IAAI;QAAE,OAAO,EAAE,CAAC;IAEhD,MAAM,MAAM,GAAG,MAAM,CAAC,OAAO,CAAC,oBAAoB,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;IAClE,IAAI,MAAM,EAAE,CAAC;QACT,MAAM,CAAC,GAAG,MAAM,CAAC,KAAK,CAAC,0BAA0B,CAAC,CAAC;QACnD,IAAI,CAAC;YAAE,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC;IACrC,CAAC;IAED,MAAM,MAAM,GAAG,MAAM,CAAC,OAAO,CAAC,gBAAgB,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;IAC5E,IAAI,MAAM,IAAI,YAAY,CAAC,IAAI,CAAC,MAAM,CAAC;QAAE,OAAO,MAAM,CAAC;IAEvD,OAAO,IAAI,CAAC;AAChB,CAAC;AAED;;;;;GAKG;AACH,SAAgB,iBAAiB,CAAC,GAAY;IAC1C,MAAM,OAAO,GAAG,GAAG,CAAC,OAAO,IAAI,EAAE,CAAC;IAClC,MAAM,EAAE,GAAG,MAAM,CAAC,OAAO,CAAC,gBAAgB,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;IACxE,IAAI,EAAE,IAAI,iBAAiB,CAAC,IAAI,CAAC,EAAE,CAAC;QAAE,OAAO,EAAE,CAAC;IAChD,OAAO,IAAI,CAAC;AAChB,CAAC"}
|
|
@@ -4,19 +4,20 @@ const vitest_1 = require("vitest");
|
|
|
4
4
|
const proxy_headers_1 = require("./proxy-headers");
|
|
5
5
|
const req = (headers, ip) => ({ headers, ip });
|
|
6
6
|
(0, vitest_1.describe)('getRealIp', () => {
|
|
7
|
-
(0, vitest_1.it)('
|
|
7
|
+
(0, vitest_1.it)('uses req.ip by default and ignores every proxy header (they are client-spoofable)', () => {
|
|
8
8
|
(0, vitest_1.expect)((0, proxy_headers_1.getRealIp)(req({
|
|
9
9
|
'cf-connecting-ip': '1.1.1.1', 'true-client-ip': '2.2.2.2',
|
|
10
10
|
'x-real-ip': '3.3.3.3', 'x-forwarded-for': '4.4.4.4',
|
|
11
|
-
}, '5.5.5.5'))).toBe('
|
|
11
|
+
}, '5.5.5.5'))).toBe('5.5.5.5');
|
|
12
12
|
});
|
|
13
|
-
(0, vitest_1.it)('
|
|
14
|
-
|
|
15
|
-
(0, vitest_1.expect)((0, proxy_headers_1.getRealIp)(req({ 'x-real-ip': '3.3.3.3' }))).toBe('
|
|
16
|
-
(0, vitest_1.expect)((0, proxy_headers_1.getRealIp)(req({ '
|
|
13
|
+
(0, vitest_1.it)('honours only the headers the host trusts, in the order given', () => {
|
|
14
|
+
const all = ['cf-connecting-ip', 'true-client-ip', 'x-real-ip', 'x-forwarded-for'];
|
|
15
|
+
(0, vitest_1.expect)((0, proxy_headers_1.getRealIp)(req({ 'cf-connecting-ip': '1.1.1.1', 'x-real-ip': '3.3.3.3' }, '5.5.5.5'), [...all])).toBe('1.1.1.1');
|
|
16
|
+
(0, vitest_1.expect)((0, proxy_headers_1.getRealIp)(req({ 'true-client-ip': '2.2.2.2', 'x-real-ip': '3.3.3.3' }), [...all])).toBe('2.2.2.2');
|
|
17
|
+
(0, vitest_1.expect)((0, proxy_headers_1.getRealIp)(req({ 'x-forwarded-for': '4.4.4.4, 9.9.9.9' }), ['x-forwarded-for'])).toBe('4.4.4.4');
|
|
17
18
|
});
|
|
18
|
-
(0, vitest_1.it)('uses the left-most XFF entry', () => {
|
|
19
|
-
(0, vitest_1.expect)((0, proxy_headers_1.getRealIp)(req({ 'x-forwarded-for': ' 203.0.113.1 , 10.0.0.1 , 10.0.0.2 ' }))).toBe('203.0.113.1');
|
|
19
|
+
(0, vitest_1.it)('uses the left-most XFF entry when XFF is trusted', () => {
|
|
20
|
+
(0, vitest_1.expect)((0, proxy_headers_1.getRealIp)(req({ 'x-forwarded-for': ' 203.0.113.1 , 10.0.0.1 , 10.0.0.2 ' }), ['x-forwarded-for'])).toBe('203.0.113.1');
|
|
20
21
|
});
|
|
21
22
|
(0, vitest_1.it)('falls back to req.ip then null', () => {
|
|
22
23
|
(0, vitest_1.expect)((0, proxy_headers_1.getRealIp)(req({}, '5.5.5.5'))).toBe('5.5.5.5');
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"proxy-headers.test.js","sourceRoot":"","sources":["../src/proxy-headers.test.ts"],"names":[],"mappings":";;AAAA,mCAA8C;AAC9C,mDAAmF;AAEnF,MAAM,GAAG,GAAG,CAAC,OAA+B,EAAE,EAAW,EAAO,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC,CAAC;AAErF,IAAA,iBAAQ,EAAC,WAAW,EAAE,GAAG,EAAE;IACvB,IAAA,WAAE,EAAC,
|
|
1
|
+
{"version":3,"file":"proxy-headers.test.js","sourceRoot":"","sources":["../src/proxy-headers.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,13 +1,5 @@
|
|
|
1
1
|
import { RequestContext } from '@vendure/core';
|
|
2
2
|
import { RecommendationsService } from './recommendations.service';
|
|
3
|
-
/**
|
|
4
|
-
* Public + admin API for the co-view recommendations feature.
|
|
5
|
-
*
|
|
6
|
-
* The `also-viewed`, `personal` and `trending` endpoints are safe to
|
|
7
|
-
* hit from the storefront directly — they return only product ids +
|
|
8
|
-
* scores, no PII. Restricting them to Vendure admin would break the
|
|
9
|
-
* primary use case (rendering a recs rail on the product page).
|
|
10
|
-
*/
|
|
11
3
|
export declare class RecommendationsController {
|
|
12
4
|
private readonly service;
|
|
13
5
|
constructor(service: RecommendationsService);
|
|
@@ -47,7 +39,7 @@ export declare class RecommendationsController {
|
|
|
47
39
|
trending(chRaw?: string, hRaw?: string, lRaw?: string): Promise<{
|
|
48
40
|
channelId: number;
|
|
49
41
|
hours: number;
|
|
50
|
-
items:
|
|
42
|
+
items: any[];
|
|
51
43
|
}>;
|
|
52
44
|
/**
|
|
53
45
|
* Admin-only: manually kick the aggregation cron. Normally runs
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"recommendations.controller.d.ts","sourceRoot":"","sources":["../src/recommendations.controller.ts"],"names":[],"mappings":"AACA,OAAO,EAAO,cAAc,EAAqB,MAAM,eAAe,CAAC;AACvE,OAAO,EAAE,sBAAsB,EAAE,MAAM,2BAA2B,CAAC;
|
|
1
|
+
{"version":3,"file":"recommendations.controller.d.ts","sourceRoot":"","sources":["../src/recommendations.controller.ts"],"names":[],"mappings":"AACA,OAAO,EAAO,cAAc,EAAqB,MAAM,eAAe,CAAC;AACvE,OAAO,EAAE,sBAAsB,EAAE,MAAM,2BAA2B,CAAC;AAYnE,qBACa,yBAAyB;IACtB,OAAO,CAAC,QAAQ,CAAC,OAAO;gBAAP,OAAO,EAAE,sBAAsB;IAE5D;;;OAGG;IAEG,UAAU,CACQ,IAAI,CAAC,EAAE,MAAM,EACb,KAAK,CAAC,EAAE,MAAM,EACd,IAAI,CAAC,EAAE,MAAM;;;;;;;;;IAUrC;;;;;;OAMG;IAEG,QAAQ,CACU,IAAI,CAAC,EAAE,MAAM,EACb,KAAK,CAAC,EAAE,MAAM,EACd,IAAI,CAAC,EAAE,MAAM;;;;;;;;;IAUrC;;;OAGG;IAEG,QAAQ,CACU,KAAK,CAAC,EAAE,MAAM,EACd,IAAI,CAAC,EAAE,MAAM,EACb,IAAI,CAAC,EAAE,MAAM;;;;;IAerC;;;;OAIG;IAGG,YAAY,CAAQ,GAAG,EAAE,cAAc,EAAkB,IAAI,CAAC,EAAE,MAAM;;;;;CAK/E"}
|
|
@@ -24,6 +24,7 @@ const recommendations_service_1 = require("./recommendations.service");
|
|
|
24
24
|
* scores, no PII. Restricting them to Vendure admin would break the
|
|
25
25
|
* primary use case (rendering a recs rail on the product page).
|
|
26
26
|
*/
|
|
27
|
+
const TRENDING_CACHE = new Map();
|
|
27
28
|
let RecommendationsController = class RecommendationsController {
|
|
28
29
|
constructor(service) {
|
|
29
30
|
this.service = service;
|
|
@@ -63,9 +64,17 @@ let RecommendationsController = class RecommendationsController {
|
|
|
63
64
|
*/
|
|
64
65
|
async trending(chRaw, hRaw, lRaw) {
|
|
65
66
|
const channelId = parseInt(chRaw || '1', 10) || 1;
|
|
66
|
-
|
|
67
|
-
const
|
|
67
|
+
// Public and uncached before: a GROUP BY over a month of events per call. Cap the window and memoise for a minute.
|
|
68
|
+
const hours = Math.min(Math.max(1, parseInt(hRaw || '24', 10) || 24), 24 * 7);
|
|
69
|
+
const limit = Math.min(Math.max(1, parseInt(lRaw || '10', 10) || 10), 50);
|
|
70
|
+
const key = `${channelId}|${hours}|${limit}`;
|
|
71
|
+
const hit = TRENDING_CACHE.get(key);
|
|
72
|
+
if (hit && hit.exp > Date.now())
|
|
73
|
+
return { channelId, hours, items: hit.items };
|
|
68
74
|
const items = await this.service.trending(channelId, hours, limit);
|
|
75
|
+
if (TRENDING_CACHE.size > 200)
|
|
76
|
+
TRENDING_CACHE.clear();
|
|
77
|
+
TRENDING_CACHE.set(key, { items, exp: Date.now() + 60000 });
|
|
69
78
|
return { channelId, hours, items };
|
|
70
79
|
}
|
|
71
80
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"recommendations.controller.js","sourceRoot":"","sources":["../src/recommendations.controller.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;AAAA,2CAAwD;AACxD,wCAAuE;AACvE,uEAAmE;AAEnE;;;;;;;GAOG;
|
|
1
|
+
{"version":3,"file":"recommendations.controller.js","sourceRoot":"","sources":["../src/recommendations.controller.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"visitor-event.entity.d.ts","sourceRoot":"","sources":["../src/visitor-event.entity.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAG3D;;;;;;;;;;;;;;;;;;GAkBG;AACH,
|
|
1
|
+
{"version":3,"file":"visitor-event.entity.d.ts","sourceRoot":"","sources":["../src/visitor-event.entity.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAG3D;;;;;;;;;;;;;;;;;;GAkBG;AACH,qBAQa,YAAa,SAAQ,aAAa;gBAC/B,KAAK,CAAC,EAAE,WAAW,CAAC,YAAY,CAAC;IAG7C,SAAS,EAAG,MAAM,CAAC;IAGnB,SAAS,EAAG,MAAM,CAAC;IAGnB,UAAU,EAAG,MAAM,GAAG,IAAI,CAAC;IAG3B,SAAS,EAAG,MAAM,CAAC;IAGnB,IAAI,EAAG,UAAU,GAAG,QAAQ,GAAG,OAAO,GAAG,MAAM,CAAC;IAEhD,8EAA8E;IAE9E,GAAG,EAAG,MAAM,CAAC;IAEb;;0DAEsD;IAEtD,KAAK,EAAG,MAAM,GAAG,IAAI,CAAC;IAGtB,QAAQ,EAAG,MAAM,GAAG,IAAI,CAAC;IAEzB;+BAC2B;IAE3B,YAAY,EAAG,MAAM,GAAG,IAAI,CAAC;IAE7B;oDACgD;IAEhD,MAAM,EAAG,MAAM,GAAG,IAAI,CAAC;IAEvB,qEAAqE;IAErE,EAAE,EAAG,MAAM,GAAG,IAAI,CAAC;IAGnB,SAAS,EAAG,MAAM,GAAG,IAAI,CAAC;IAE1B,2DAA2D;IAE3D,OAAO,EAAG,MAAM,GAAG,IAAI,CAAC;IAGxB,cAAc,EAAG,MAAM,GAAG,IAAI,CAAC;IAG/B,EAAE,EAAG,MAAM,GAAG,IAAI,CAAC;IAGnB,SAAS,EAAG,MAAM,GAAG,IAAI,CAAC;IAG1B,MAAM,EAAG,MAAM,GAAG,IAAI,CAAC;IAEvB,wCAAwC;IAExC,cAAc,EAAG,MAAM,GAAG,IAAI,CAAC;IAG/B,OAAO,EAAG,MAAM,GAAG,IAAI,CAAC;IAGxB,MAAM,EAAG,MAAM,GAAG,IAAI,CAAC;IAGvB,IAAI,EAAG,MAAM,GAAG,IAAI,CAAC;IAGrB,QAAQ,EAAG,MAAM,GAAG,IAAI,CAAC;IAEzB,sDAAsD;IAEtD,IAAI,EAAG,MAAM,GAAG,IAAI,CAAC;IAUrB,SAAS,EAAG,MAAM,GAAG,IAAI,CAAC;IAG1B,SAAS,EAAG,MAAM,GAAG,IAAI,CAAC;IAG1B,WAAW,EAAG,MAAM,GAAG,IAAI,CAAC;IAG5B,OAAO,EAAG,MAAM,GAAG,IAAI,CAAC;IAGxB,UAAU,EAAG,MAAM,GAAG,IAAI,CAAC;IAE3B;;kEAE8D;IAE9D,cAAc,EAAG,MAAM,GAAG,IAAI,CAAC;IAE/B;;;kBAGc;IAGd,KAAK,EAAG,OAAO,CAAC;IAEhB;0CACsC;IAGtC,MAAM,EAAG,MAAM,GAAG,IAAI,CAAC;CAC1B"}
|
|
@@ -163,6 +163,8 @@ __decorate([
|
|
|
163
163
|
], VisitorEvent.prototype, "goalId", void 0);
|
|
164
164
|
exports.VisitorEvent = VisitorEvent = __decorate([
|
|
165
165
|
(0, typeorm_1.Entity)(),
|
|
166
|
+
(0, typeorm_1.Index)('visitor_event_created_idx', ['createdAt']),
|
|
167
|
+
(0, typeorm_1.Index)('visitor_event_channel_created_idx', ['channelId', 'createdAt']),
|
|
166
168
|
(0, typeorm_1.Index)('visitor_event_visitor_idx', ['visitorId', 'createdAt']),
|
|
167
169
|
(0, typeorm_1.Index)('visitor_event_session_idx', ['sessionId', 'createdAt']),
|
|
168
170
|
(0, typeorm_1.Index)('visitor_event_customer_idx', ['customerId']),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"visitor-event.entity.js","sourceRoot":"","sources":["../src/visitor-event.entity.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,wCAA2D;AAC3D,qCAAgD;AAEhD;;;;;;;;;;;;;;;;;;GAkBG;
|
|
1
|
+
{"version":3,"file":"visitor-event.entity.js","sourceRoot":"","sources":["../src/visitor-event.entity.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,13 +1,14 @@
|
|
|
1
1
|
import { OnApplicationBootstrap, OnModuleDestroy } from '@nestjs/common';
|
|
2
|
-
import { RequestContext, TransactionalConnection } from '@vendure/core';
|
|
2
|
+
import { ProcessContext, RequestContext, TransactionalConnection } from '@vendure/core';
|
|
3
3
|
import { Request, Response } from 'express';
|
|
4
4
|
import { VisitorTrackingService } from './visitor-tracking.service';
|
|
5
5
|
export declare class VisitorTrackingController implements OnApplicationBootstrap, OnModuleDestroy {
|
|
6
6
|
private connection;
|
|
7
7
|
private tracking;
|
|
8
|
+
private processContext;
|
|
8
9
|
private limiter;
|
|
9
10
|
private stopRetention;
|
|
10
|
-
constructor(connection: TransactionalConnection, tracking: VisitorTrackingService);
|
|
11
|
+
constructor(connection: TransactionalConnection, tracking: VisitorTrackingService, processContext: ProcessContext);
|
|
11
12
|
onApplicationBootstrap(): void;
|
|
12
13
|
onModuleDestroy(): void;
|
|
13
14
|
private rateLimited;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"visitor-tracking.controller.d.ts","sourceRoot":"","sources":["../src/visitor-tracking.controller.ts"],"names":[],"mappings":"AAAA,OAAO,EAAiC,sBAAsB,EAAE,eAAe,EAAqC,MAAM,gBAAgB,CAAC;AAS3I,OAAO,EAAmB,cAAc,EAAE,uBAAuB,EAAE,MAAM,eAAe,CAAC;
|
|
1
|
+
{"version":3,"file":"visitor-tracking.controller.d.ts","sourceRoot":"","sources":["../src/visitor-tracking.controller.ts"],"names":[],"mappings":"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"}
|