@antelopejs/dms-marketing 0.5.1 → 0.6.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/README.md +4 -4
- package/dist/config.d.ts +10 -1
- package/dist/config.js +29 -1
- package/dist/config.js.map +1 -1
- package/dist/db/models/funnels.model.d.ts +1 -0
- package/dist/db/models/funnels.model.js +18 -0
- package/dist/db/models/funnels.model.js.map +1 -1
- package/dist/db/models/index.d.ts +1 -0
- package/dist/db/models/index.js +1 -0
- package/dist/db/models/index.js.map +1 -1
- package/dist/db/models/marketing_imports.model.d.ts +27 -0
- package/dist/db/models/marketing_imports.model.js +38 -0
- package/dist/db/models/marketing_imports.model.js.map +1 -0
- package/dist/db/models/page_snapshots.model.d.ts +1 -0
- package/dist/db/models/page_snapshots.model.js +14 -0
- package/dist/db/models/page_snapshots.model.js.map +1 -1
- package/dist/db/models/websites.model.d.ts +1 -0
- package/dist/db/models/websites.model.js +29 -0
- package/dist/db/models/websites.model.js.map +1 -1
- package/dist/db/tables/funnels.table.d.ts +1 -0
- package/dist/db/tables/funnels.table.js +4 -0
- package/dist/db/tables/funnels.table.js.map +1 -1
- package/dist/db/tables/index.d.ts +1 -0
- package/dist/db/tables/index.js +1 -0
- package/dist/db/tables/index.js.map +1 -1
- package/dist/db/tables/marketing_imports.table.d.ts +15 -0
- package/dist/db/tables/marketing_imports.table.js +63 -0
- package/dist/db/tables/marketing_imports.table.js.map +1 -0
- package/dist/db/tables/page_snapshots.table.d.ts +1 -0
- package/dist/db/tables/page_snapshots.table.js +4 -0
- package/dist/db/tables/page_snapshots.table.js.map +1 -1
- package/dist/db/tables/websites.table.d.ts +1 -0
- package/dist/db/tables/websites.table.js +4 -0
- package/dist/db/tables/websites.table.js.map +1 -1
- package/dist/hooks/index.js +1 -0
- package/dist/hooks/index.js.map +1 -1
- package/dist/implementations/dms-marketing/index.d.ts +5 -1
- package/dist/implementations/dms-marketing/index.js +25 -0
- package/dist/implementations/dms-marketing/index.js.map +1 -1
- package/dist/index.d.ts +2 -2
- package/dist/index.js +4 -0
- package/dist/index.js.map +1 -1
- package/dist/routes/dashboard-tracking.d.ts +9 -0
- package/dist/routes/dashboard-tracking.js +57 -0
- package/dist/routes/dashboard-tracking.js.map +1 -0
- package/dist/routes/index.d.ts +1 -0
- package/dist/routes/index.js +1 -0
- package/dist/routes/index.js.map +1 -1
- package/dist/routes/stats.js.map +1 -1
- package/dist/routes/websites.js +12 -25
- package/dist/routes/websites.js.map +1 -1
- package/dist/services/analytics-import.d.ts +2 -0
- package/dist/services/analytics-import.js +294 -0
- package/dist/services/analytics-import.js.map +1 -0
- package/dist/services/collect.d.ts +20 -0
- package/dist/services/collect.js +43 -17
- package/dist/services/collect.js.map +1 -1
- package/dist/services/context.d.ts +8 -3
- package/dist/services/context.js +21 -7
- package/dist/services/context.js.map +1 -1
- package/dist/services/dashboard-tracking.d.ts +25 -0
- package/dist/services/dashboard-tracking.js +85 -0
- package/dist/services/dashboard-tracking.js.map +1 -0
- package/dist/services/dashboard.js +7 -3
- package/dist/services/dashboard.js.map +1 -1
- package/dist/services/declarations.d.ts +11 -0
- package/dist/services/declarations.js +64 -0
- package/dist/services/declarations.js.map +1 -0
- package/dist/services/declared-funnel.d.ts +2 -0
- package/dist/services/declared-funnel.js +230 -0
- package/dist/services/declared-funnel.js.map +1 -0
- package/dist/services/declared-snapshot.d.ts +2 -0
- package/dist/services/declared-snapshot.js +113 -0
- package/dist/services/declared-snapshot.js.map +1 -0
- package/dist/services/declared-website.d.ts +2 -0
- package/dist/services/declared-website.js +118 -0
- package/dist/services/declared-website.js.map +1 -0
- package/dist/services/geoip.js.map +1 -1
- package/dist/services/index.d.ts +1 -0
- package/dist/services/index.js +1 -0
- package/dist/services/index.js.map +1 -1
- package/dist/services/readiness.d.ts +2 -0
- package/dist/services/readiness.js +15 -0
- package/dist/services/readiness.js.map +1 -0
- package/dist/services/sessionize.d.ts +1 -0
- package/dist/services/sessionize.js +3 -0
- package/dist/services/sessionize.js.map +1 -1
- package/dist/services/snapshots.d.ts +3 -0
- package/dist/services/snapshots.js +6 -0
- package/dist/services/snapshots.js.map +1 -1
- package/dist/services/tenant-website.js +1 -0
- package/dist/services/tenant-website.js.map +1 -1
- package/dist/services/website-report.js +4 -3
- package/dist/services/website-report.js.map +1 -1
- package/dist/services/website-rules.d.ts +8 -0
- package/dist/services/website-rules.js +34 -0
- package/dist/services/website-rules.js.map +1 -0
- package/dist/types/constants.d.ts +3 -0
- package/dist/types/constants.js +5 -2
- package/dist/types/constants.js.map +1 -1
- package/dist/types/snapshots.d.ts +55 -0
- package/dist/types/snapshots.js +8 -1
- package/dist/types/snapshots.js.map +1 -1
- package/frontend-vue/app/components/Context.vue +5 -1
- package/frontend-vue/app/components/WebsitesGrid.vue +6 -2
- package/frontend-vue/app/composables/useMarketingApi.ts +12 -0
- package/frontend-vue/app/composables/useMarketingContext.ts +2 -1
- package/frontend-vue/app/constants.ts +6 -0
- package/frontend-vue/app/plugins/dashboard-tracking.client.ts +44 -0
- package/frontend-vue/app/utils/dashboard-tracker.ts +127 -0
- package/frontend-vue/app/utils/format.ts +6 -3
- package/frontend-vue/dms.frontend.ts +10 -0
- package/frontend-vue/i18n/locales/marketing-en-GB.json +2 -0
- package/frontend-vue/i18n/locales/marketing-fr-FR.json +2 -0
- package/frontend-vue/tests/dashboard-tracking.test.ts +219 -0
- package/frontend-vue/tests/format.test.ts +9 -0
- package/frontend-vue/tests/server-parity.test.ts +5 -0
- package/frontend-vue/tests/stubs/frontend-module.ts +7 -0
- package/package.json +2 -2
- package/skills/dms-marketing/SKILL.md +52 -2
- package/static/tracker.js +90 -5
- package/frontend-vue/pnpm-workspace.yaml +0 -2
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"snapshots.js","sourceRoot":"","sources":["../../src/services/snapshots.ts"],"names":[],"mappings":";;;;;
|
|
1
|
+
{"version":3,"file":"snapshots.js","sourceRoot":"","sources":["../../src/services/snapshots.ts"],"names":[],"mappings":"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"}
|
|
@@ -23,6 +23,7 @@ async function purgeWebsiteTrackingData(tenantId, websiteId) {
|
|
|
23
23
|
await (0, interface_database_decorators_1.GetModel)(db_1.WebsiteStatisticsModel, tenantId).deleteByWebsite(websiteId);
|
|
24
24
|
await (0, snapshots_1.deleteSnapshots)(tenantId, websiteId);
|
|
25
25
|
await (0, interface_database_decorators_1.GetModel)(db_1.FunnelsModel, tenantId).deleteByWebsite(websiteId);
|
|
26
|
+
await (0, interface_database_decorators_1.GetModel)(db_1.MarketingImportsModel, tenantId).deleteByWebsite(websiteId);
|
|
26
27
|
}
|
|
27
28
|
async function listTenantWebsites(tenantId) {
|
|
28
29
|
const websites = await (0, interface_database_decorators_1.GetModel)(db_1.WebsitesModel).getByTenant(tenantId);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tenant-website.js","sourceRoot":"","sources":["../../src/services/tenant-website.ts"],"names":[],"mappings":";;
|
|
1
|
+
{"version":3,"file":"tenant-website.js","sourceRoot":"","sources":["../../src/services/tenant-website.ts"],"names":[],"mappings":";;AAuBA,oDASC;AASD,4DAWC;AAMD,gDAaC;AAvED,6DAA4E;AAC5E,6FAAqE;AACrE,6EAA8E;AAC9E,6BAOc;AAEd,iDAAmD;AACnD,2CAA8C;AAE9C,MAAM,yBAAyB,GAAG,0CAA0C,CAAC;AAQtE,KAAK,UAAU,oBAAoB,CACxC,OAAuB,EACvB,EAAsB;IAEtB,MAAM,OAAO,GAAG,EAAE,CAAC,CAAC,CAAC,MAAM,IAAA,wCAAQ,EAAC,kBAAa,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IACvE,IAAI,CAAC,OAAO,IAAI,OAAO,CAAC,QAAQ,KAAK,IAAA,mCAAkB,EAAC,OAAO,CAAC,EAAE,CAAC;QACjE,MAAM,IAAI,0BAAU,CAAC,0BAAc,EAAE,yBAAyB,CAAC,CAAC;IAClE,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC;AASM,KAAK,UAAU,wBAAwB,CAC5C,QAAgB,EAChB,SAAiB;IAEjB,MAAM,IAAA,wCAAQ,EAAC,yBAAoB,EAAE,QAAQ,CAAC,CAAC,eAAe,CAAC,SAAS,CAAC,CAAC;IAC1E,MAAM,IAAA,wCAAQ,EAAC,2BAAsB,EAAE,QAAQ,CAAC,CAAC,eAAe,CAAC,SAAS,CAAC,CAAC;IAC5E,MAAM,IAAA,wCAAQ,EAAC,2BAAsB,EAAE,QAAQ,CAAC,CAAC,eAAe,CAAC,SAAS,CAAC,CAAC;IAC5E,MAAM,IAAA,2BAAe,EAAC,QAAQ,EAAE,SAAS,CAAC,CAAC;IAC3C,MAAM,IAAA,wCAAQ,EAAC,iBAAY,EAAE,QAAQ,CAAC,CAAC,eAAe,CAAC,SAAS,CAAC,CAAC;IAElE,MAAM,IAAA,wCAAQ,EAAC,0BAAqB,EAAE,QAAQ,CAAC,CAAC,eAAe,CAAC,SAAS,CAAC,CAAC;AAC7E,CAAC;AAMM,KAAK,UAAU,kBAAkB,CAAC,QAAgB;IACvD,MAAM,QAAQ,GAAG,MAAM,IAAA,wCAAQ,EAAC,kBAAa,CAAC,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC;IACrE,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACxB,OAAO,QAAQ,CAAC;IAClB,CAAC;IACD,MAAM,QAAQ,GAAG,MAAM,IAAA,wCAAQ,EAC7B,2BAAsB,EACtB,QAAQ,CACT,CAAC,yBAAyB,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;IAE9D,OAAO,CAAC,GAAG,QAAQ,CAAC,CAAC,IAAI,CACvB,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAClE,CAAC;AACJ,CAAC"}
|
|
@@ -55,14 +55,15 @@ async function connectionStatus(website, since) {
|
|
|
55
55
|
const createdAt = new Date(website.createdAt).getTime();
|
|
56
56
|
const checkedAt = Date.now();
|
|
57
57
|
const from = Math.max(since ?? createdAt, (0, period_1.periodStart)(RECENT_VISIT_DAYS).getTime());
|
|
58
|
-
const [pageview, latest] = await Promise.all([
|
|
58
|
+
const [pageview, latest, importedThrough] = await Promise.all([
|
|
59
59
|
(0, interface_database_decorators_1.GetModel)(db_1.MarketingEventsModel, website.tenantId).getLatestPageview(website._id, new Date(from)),
|
|
60
60
|
(0, interface_database_decorators_1.GetModel)(db_1.MarketingSessionsModel, website.tenantId).getLatest(website._id),
|
|
61
|
+
(0, context_1.loadImportedThrough)(website.tenantId, [website]),
|
|
61
62
|
]);
|
|
62
63
|
const lastActivityAt = latest ? new Date(latest.lastSeenAt).getTime() : null;
|
|
63
|
-
const
|
|
64
|
+
const lastActivity = new Map(lastActivityAt === null ? [] : [[website._id, lastActivityAt]]);
|
|
64
65
|
return {
|
|
65
|
-
website: (0, context_1.toContextWebsite)(website,
|
|
66
|
+
website: (0, context_1.toContextWebsite)(website, { lastActivity, importedThrough }),
|
|
66
67
|
createdAt,
|
|
67
68
|
checkedAt,
|
|
68
69
|
visit: pageview ? await visitOf(website, pageview, from) : null,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"website-report.js","sourceRoot":"","sources":["../../src/services/website-report.ts"],"names":[],"mappings":";;
|
|
1
|
+
{"version":3,"file":"website-report.js","sourceRoot":"","sources":["../../src/services/website-report.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
import type { Website } from "@/db/tables/websites.table";
|
|
3
|
+
import { type HostConflict } from "./website-hosts";
|
|
4
|
+
export declare const hostnameSchema: z.ZodEffects<z.ZodEffects<z.ZodString, string, string>, string, string>;
|
|
5
|
+
export declare const nameSchema: z.ZodString;
|
|
6
|
+
export declare const extraDomainsSchema: z.ZodArray<z.ZodEffects<z.ZodEffects<z.ZodString, string, string>, string, string>, "many">;
|
|
7
|
+
export declare function distinctExtraHosts(domain: string, hosts: string[]): string[];
|
|
8
|
+
export declare function tenantHostConflict(website: Website): Promise<HostConflict | undefined>;
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.extraDomainsSchema = exports.nameSchema = exports.hostnameSchema = void 0;
|
|
4
|
+
exports.distinctExtraHosts = distinctExtraHosts;
|
|
5
|
+
exports.tenantHostConflict = tenantHostConflict;
|
|
6
|
+
const interface_database_decorators_1 = require("@antelopejs/interface-database-decorators");
|
|
7
|
+
const zod_1 = require("zod");
|
|
8
|
+
const db_1 = require("@/db");
|
|
9
|
+
const constants_1 = require("@/types/constants");
|
|
10
|
+
const dashboard_tracking_1 = require("./dashboard-tracking");
|
|
11
|
+
const website_hosts_1 = require("./website-hosts");
|
|
12
|
+
const INVALID_HOSTNAME_MESSAGE = "$page.marketing.errors.invalid_hostname";
|
|
13
|
+
exports.hostnameSchema = zod_1.z
|
|
14
|
+
.string()
|
|
15
|
+
.trim()
|
|
16
|
+
.min(1)
|
|
17
|
+
.max(constants_1.MAX_DOMAIN_LENGTH)
|
|
18
|
+
.transform(website_hosts_1.normalizeHostname)
|
|
19
|
+
.refine(website_hosts_1.isValidHostname, { message: INVALID_HOSTNAME_MESSAGE });
|
|
20
|
+
exports.nameSchema = zod_1.z.string().trim().min(1).max(constants_1.MAX_NAME_LENGTH);
|
|
21
|
+
exports.extraDomainsSchema = zod_1.z
|
|
22
|
+
.array(exports.hostnameSchema)
|
|
23
|
+
.max(constants_1.MAX_EXTRA_DOMAINS);
|
|
24
|
+
function distinctExtraHosts(domain, hosts) {
|
|
25
|
+
return [...new Set(hosts)].filter((host) => host !== domain);
|
|
26
|
+
}
|
|
27
|
+
async function tenantHostConflict(website) {
|
|
28
|
+
if ((0, dashboard_tracking_1.isDashboardWebsite)(website)) {
|
|
29
|
+
return undefined;
|
|
30
|
+
}
|
|
31
|
+
const websites = await (0, interface_database_decorators_1.GetModel)(db_1.WebsitesModel).getByTenant(website.tenantId);
|
|
32
|
+
return (0, website_hosts_1.findHostConflict)(website, websites.filter((site) => !(0, dashboard_tracking_1.isDashboardWebsite)(site)));
|
|
33
|
+
}
|
|
34
|
+
//# sourceMappingURL=website-rules.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"website-rules.js","sourceRoot":"","sources":["../../src/services/website-rules.ts"],"names":[],"mappings":";;;AAyCA,gDAEC;AAQD,gDAWC;AA9DD,6FAAqE;AACrE,6BAAwB;AACxB,6BAAqC;AAErC,iDAI2B;AAC3B,6DAA0D;AAC1D,mDAKyB;AAEzB,MAAM,wBAAwB,GAAG,yCAAyC,CAAC;AAS9D,QAAA,cAAc,GAAG,OAAC;KAC5B,MAAM,EAAE;KACR,IAAI,EAAE;KACN,GAAG,CAAC,CAAC,CAAC;KACN,GAAG,CAAC,6BAAiB,CAAC;KACtB,SAAS,CAAC,iCAAiB,CAAC;KAC5B,MAAM,CAAC,+BAAe,EAAE,EAAE,OAAO,EAAE,wBAAwB,EAAE,CAAC,CAAC;AAErD,QAAA,UAAU,GAAG,OAAC,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,2BAAe,CAAC,CAAC;AAE3D,QAAA,kBAAkB,GAAG,OAAC;KAChC,KAAK,CAAC,sBAAc,CAAC;KACrB,GAAG,CAAC,6BAAiB,CAAC,CAAC;AAG1B,SAAgB,kBAAkB,CAAC,MAAc,EAAE,KAAe;IAChE,OAAO,CAAC,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,KAAK,MAAM,CAAC,CAAC;AAC/D,CAAC;AAQM,KAAK,UAAU,kBAAkB,CACtC,OAAgB;IAEhB,IAAI,IAAA,uCAAkB,EAAC,OAAO,CAAC,EAAE,CAAC;QAChC,OAAO,SAAS,CAAC;IACnB,CAAC;IACD,MAAM,QAAQ,GAAG,MAAM,IAAA,wCAAQ,EAAC,kBAAa,CAAC,CAAC,WAAW,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;IAC7E,OAAO,IAAA,gCAAgB,EACrB,OAAO,EACP,QAAQ,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,IAAA,uCAAkB,EAAC,IAAI,CAAC,CAAC,CACrD,CAAC;AACJ,CAAC"}
|
|
@@ -2,6 +2,7 @@ export declare const MARKETING_MODULE_ID = "marketing";
|
|
|
2
2
|
export declare const OVERVIEW_PAGE_ID = "overview";
|
|
3
3
|
export declare const MARKETING_MODULE_PATH = "/modules/marketing";
|
|
4
4
|
export declare const FRONTEND_MODULE_NAME = "@antelopejs/dms-marketing-frontend-vue";
|
|
5
|
+
export declare const FRONTEND_CONFIG_KEY = "dmsMarketing";
|
|
5
6
|
export declare const MS_PER_SECOND = 1000;
|
|
6
7
|
export declare const MS_PER_MINUTE: number;
|
|
7
8
|
export declare const SECONDS_PER_MINUTE = 60;
|
|
@@ -22,6 +23,7 @@ export declare const MAX_TITLE_LENGTH = 200;
|
|
|
22
23
|
export declare const MAX_EVENT_NAME_LENGTH = 50;
|
|
23
24
|
export declare const MAX_EVENT_DATA_BYTES = 4096;
|
|
24
25
|
export declare const MAX_WEBSITE_ID_LENGTH = 64;
|
|
26
|
+
export declare const DECLARED_ID_PATTERN: RegExp;
|
|
25
27
|
export declare const MAX_NAME_LENGTH = 100;
|
|
26
28
|
export declare const MAX_DOMAIN_LENGTH = 253;
|
|
27
29
|
export declare const MAX_EXTRA_DOMAINS = 20;
|
|
@@ -70,6 +72,7 @@ export declare const SESSION_CACHE_MAX_ENTRIES = 10000;
|
|
|
70
72
|
export declare const MAX_CACHE_ENTRIES = 1000;
|
|
71
73
|
export declare const WEBSITE_CACHE_TTL_MS = 30000;
|
|
72
74
|
export declare const EXPERIMENT_DEFINITIONS_CACHE_TTL_MS = 30000;
|
|
75
|
+
export declare const DASHBOARD_AUTH_PATHS: string[];
|
|
73
76
|
export declare const COLLECT_RATE_LIMIT_WINDOW_MS: number;
|
|
74
77
|
export declare const MAX_EVENTS_PER_WINDOW_PER_SOURCE = 600;
|
|
75
78
|
export declare const RATE_LIMIT_MAX_SOURCES = 50000;
|
package/dist/types/constants.js
CHANGED
|
@@ -1,11 +1,12 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.
|
|
4
|
-
exports.HTTP_CONFLICT = exports.HTTP_NOT_FOUND = exports.HTTP_FORBIDDEN = exports.HTTP_BAD_REQUEST = exports.API_BASE_PATH = exports.PAUSED_TRACKER_CACHE_MAX_AGE_SECONDS = exports.TRACKER_CACHE_MAX_AGE_SECONDS = exports.MAX_SNAPSHOTS_PER_WINDOW_PER_SOURCE = exports.RATE_LIMIT_MAX_SOURCES = exports.MAX_EVENTS_PER_WINDOW_PER_SOURCE = exports.COLLECT_RATE_LIMIT_WINDOW_MS = exports.EXPERIMENT_DEFINITIONS_CACHE_TTL_MS = exports.WEBSITE_CACHE_TTL_MS = exports.MAX_CACHE_ENTRIES = exports.SESSION_CACHE_MAX_ENTRIES = exports.VISITOR_SECRET_BYTES = exports.VISITOR_ID_HEX_LENGTH = exports.SNAPSHOT_CACHE_MAX_ENTRIES = exports.SNAPSHOT_PROMISE_TTL_MS = exports.SNAPSHOT_REFRESH_AGE_MS = exports.DEFAULT_SNAPSHOT_RETENTION_MS = exports.MAX_SNAPSHOT_DOCUMENT_PX = exports.MAX_SNAPSHOT_VIEWPORT_PX = exports.MAX_REPORTED_SNAPSHOT_BYTES = exports.MAX_SNAPSHOTS_PER_WEBSITE = exports.MAX_SNAPSHOT_BYTES = exports.MAX_ANCHORED_HEATMAP_CELLS = exports.SCROLL_DEPTH_SCALE = exports.HEATMAP_DIVISIONS_PER_AXIS = exports.MAX_HEATMAP_EVENTS = exports.MAX_FUNNEL_EVENTS = exports.MAX_PAGES_LIST_LIMIT = exports.DEFAULT_PAGES_LIST_LIMIT = void 0;
|
|
3
|
+
exports.MAX_ENTRIES_PER_TOP_MAP = exports.RAW_COVERAGE_CACHE_TTL_MS = exports.FUNNEL_SUMMARY_CACHE_TTL_MS = exports.MIN_DECISION_CONVERSIONS = exports.MIN_DECISION_DAYS = exports.MIN_OUTCOMES_PER_CELL = exports.EXPERIMENT_SRM_P_THRESHOLD = exports.EXPERIMENT_SIGNIFICANCE_LEVEL = exports.ASSIGNMENT_HASH_HEX_CHARS = exports.EXPERIMENT_KEY_PATTERN = exports.MAX_EXPERIMENT_KEY_LENGTH = exports.MAX_EXPERIMENT_VARIATIONS = exports.MIN_EXPERIMENT_VARIATIONS = exports.DEFAULT_CONVERSION_WINDOW_HOURS = exports.MAX_CONVERSION_WINDOW_HOURS = exports.MAX_FUNNEL_STEP_VALUE_LENGTH = exports.MAX_FUNNEL_STEPS = exports.MIN_FUNNEL_STEPS = exports.MAX_COLLECT_BODY_BYTES = exports.MAX_CLICK_SELECTOR_LENGTH = exports.MAX_SCREEN_AND_LANGUAGE_CHARS = exports.MAX_EXTRA_DOMAINS = exports.MAX_DOMAIN_LENGTH = exports.MAX_NAME_LENGTH = exports.DECLARED_ID_PATTERN = exports.MAX_WEBSITE_ID_LENGTH = exports.MAX_EVENT_DATA_BYTES = exports.MAX_EVENT_NAME_LENGTH = exports.MAX_TITLE_LENGTH = exports.MAX_URL_LENGTH = exports.MAX_TRUSTED_CLIENT_CLOCK_SKEW_MS = exports.MAX_COLLECT_BATCH_SIZE = exports.DEFAULT_HEATMAP_SAMPLE_RATIO = exports.MAX_STATISTICS_RETENTION_DAYS = exports.DEFAULT_STATISTICS_RETENTION_MS = exports.DEFAULT_RAW_EVENTS_RETENTION_MS = exports.DEFAULT_SESSION_IDLE_TIMEOUT_MS = exports.DEFAULT_QUERY_PERIOD_DAYS = exports.MAX_QUERY_PERIOD_DAYS = exports.MS_PER_DAY = exports.MS_PER_HOUR = exports.SECONDS_PER_HOUR = exports.SECONDS_PER_MINUTE = exports.MS_PER_MINUTE = exports.MS_PER_SECOND = exports.FRONTEND_CONFIG_KEY = exports.FRONTEND_MODULE_NAME = exports.MARKETING_MODULE_PATH = exports.OVERVIEW_PAGE_ID = exports.MARKETING_MODULE_ID = void 0;
|
|
4
|
+
exports.HTTP_CONFLICT = exports.HTTP_NOT_FOUND = exports.HTTP_FORBIDDEN = exports.HTTP_BAD_REQUEST = exports.API_BASE_PATH = exports.PAUSED_TRACKER_CACHE_MAX_AGE_SECONDS = exports.TRACKER_CACHE_MAX_AGE_SECONDS = exports.MAX_SNAPSHOTS_PER_WINDOW_PER_SOURCE = exports.RATE_LIMIT_MAX_SOURCES = exports.MAX_EVENTS_PER_WINDOW_PER_SOURCE = exports.COLLECT_RATE_LIMIT_WINDOW_MS = exports.DASHBOARD_AUTH_PATHS = exports.EXPERIMENT_DEFINITIONS_CACHE_TTL_MS = exports.WEBSITE_CACHE_TTL_MS = exports.MAX_CACHE_ENTRIES = exports.SESSION_CACHE_MAX_ENTRIES = exports.VISITOR_SECRET_BYTES = exports.VISITOR_ID_HEX_LENGTH = exports.SNAPSHOT_CACHE_MAX_ENTRIES = exports.SNAPSHOT_PROMISE_TTL_MS = exports.SNAPSHOT_REFRESH_AGE_MS = exports.DEFAULT_SNAPSHOT_RETENTION_MS = exports.MAX_SNAPSHOT_DOCUMENT_PX = exports.MAX_SNAPSHOT_VIEWPORT_PX = exports.MAX_REPORTED_SNAPSHOT_BYTES = exports.MAX_SNAPSHOTS_PER_WEBSITE = exports.MAX_SNAPSHOT_BYTES = exports.MAX_ANCHORED_HEATMAP_CELLS = exports.SCROLL_DEPTH_SCALE = exports.HEATMAP_DIVISIONS_PER_AXIS = exports.MAX_HEATMAP_EVENTS = exports.MAX_FUNNEL_EVENTS = exports.MAX_PAGES_LIST_LIMIT = exports.DEFAULT_PAGES_LIST_LIMIT = exports.TOP_MAPS_RETENTION_DAYS = exports.CAMPAIGN_KEY_SEPARATOR = void 0;
|
|
5
5
|
exports.MARKETING_MODULE_ID = "marketing";
|
|
6
6
|
exports.OVERVIEW_PAGE_ID = "overview";
|
|
7
7
|
exports.MARKETING_MODULE_PATH = `/modules/${exports.MARKETING_MODULE_ID}`;
|
|
8
8
|
exports.FRONTEND_MODULE_NAME = "@antelopejs/dms-marketing-frontend-vue";
|
|
9
|
+
exports.FRONTEND_CONFIG_KEY = "dmsMarketing";
|
|
9
10
|
exports.MS_PER_SECOND = 1_000;
|
|
10
11
|
exports.MS_PER_MINUTE = 60 * exports.MS_PER_SECOND;
|
|
11
12
|
exports.SECONDS_PER_MINUTE = 60;
|
|
@@ -28,6 +29,7 @@ exports.MAX_TITLE_LENGTH = 200;
|
|
|
28
29
|
exports.MAX_EVENT_NAME_LENGTH = 50;
|
|
29
30
|
exports.MAX_EVENT_DATA_BYTES = 4096;
|
|
30
31
|
exports.MAX_WEBSITE_ID_LENGTH = 64;
|
|
32
|
+
exports.DECLARED_ID_PATTERN = /^[A-Za-z0-9][A-Za-z0-9_-]{0,63}$/;
|
|
31
33
|
exports.MAX_NAME_LENGTH = 100;
|
|
32
34
|
exports.MAX_DOMAIN_LENGTH = 253;
|
|
33
35
|
exports.MAX_EXTRA_DOMAINS = 20;
|
|
@@ -76,6 +78,7 @@ exports.SESSION_CACHE_MAX_ENTRIES = 10_000;
|
|
|
76
78
|
exports.MAX_CACHE_ENTRIES = 1_000;
|
|
77
79
|
exports.WEBSITE_CACHE_TTL_MS = 30_000;
|
|
78
80
|
exports.EXPERIMENT_DEFINITIONS_CACHE_TTL_MS = 30_000;
|
|
81
|
+
exports.DASHBOARD_AUTH_PATHS = ["/auth/**"];
|
|
79
82
|
exports.COLLECT_RATE_LIMIT_WINDOW_MS = exports.MS_PER_MINUTE;
|
|
80
83
|
exports.MAX_EVENTS_PER_WINDOW_PER_SOURCE = 600;
|
|
81
84
|
exports.RATE_LIMIT_MAX_SOURCES = 50_000;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"constants.js","sourceRoot":"","sources":["../../src/types/constants.ts"],"names":[],"mappings":";;;;AAIa,QAAA,mBAAmB,GAAG,WAAW,CAAC;AAClC,QAAA,gBAAgB,GAAG,UAAU,CAAC;AAG9B,QAAA,qBAAqB,GAAG,YAAY,2BAAmB,EAAE,CAAC;AAG1D,QAAA,oBAAoB,GAAG,wCAAwC,CAAC;
|
|
1
|
+
{"version":3,"file":"constants.js","sourceRoot":"","sources":["../../src/types/constants.ts"],"names":[],"mappings":"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"}
|
|
@@ -99,4 +99,59 @@ export declare const snapshotRequestSchema: z.ZodUnion<[z.ZodObject<{
|
|
|
99
99
|
colorScheme?: "light" | "dark" | undefined;
|
|
100
100
|
}>]>;
|
|
101
101
|
export type SnapshotRequestInput = z.infer<typeof snapshotRequestSchema>;
|
|
102
|
+
export declare const snapshotDeclarationSchema: z.ZodObject<Omit<{
|
|
103
|
+
website: z.ZodString;
|
|
104
|
+
url: z.ZodString;
|
|
105
|
+
viewport: z.ZodObject<{
|
|
106
|
+
width: z.ZodNumber;
|
|
107
|
+
height: z.ZodNumber;
|
|
108
|
+
}, "strip", z.ZodTypeAny, {
|
|
109
|
+
width: number;
|
|
110
|
+
height: number;
|
|
111
|
+
}, {
|
|
112
|
+
width: number;
|
|
113
|
+
height: number;
|
|
114
|
+
}>;
|
|
115
|
+
colorScheme: z.ZodOptional<z.ZodEnum<["light", "dark"]>>;
|
|
116
|
+
token: z.ZodString;
|
|
117
|
+
}, "website" | "token"> & {
|
|
118
|
+
websiteId: z.ZodString;
|
|
119
|
+
document: z.ZodObject<{
|
|
120
|
+
width: z.ZodNumber;
|
|
121
|
+
height: z.ZodNumber;
|
|
122
|
+
}, "strip", z.ZodTypeAny, {
|
|
123
|
+
width: number;
|
|
124
|
+
height: number;
|
|
125
|
+
}, {
|
|
126
|
+
width: number;
|
|
127
|
+
height: number;
|
|
128
|
+
}>;
|
|
129
|
+
html: z.ZodString;
|
|
130
|
+
}, "strip", z.ZodTypeAny, {
|
|
131
|
+
url: string;
|
|
132
|
+
websiteId: string;
|
|
133
|
+
viewport: {
|
|
134
|
+
width: number;
|
|
135
|
+
height: number;
|
|
136
|
+
};
|
|
137
|
+
document: {
|
|
138
|
+
width: number;
|
|
139
|
+
height: number;
|
|
140
|
+
};
|
|
141
|
+
html: string;
|
|
142
|
+
colorScheme?: "light" | "dark" | undefined;
|
|
143
|
+
}, {
|
|
144
|
+
url: string;
|
|
145
|
+
websiteId: string;
|
|
146
|
+
viewport: {
|
|
147
|
+
width: number;
|
|
148
|
+
height: number;
|
|
149
|
+
};
|
|
150
|
+
document: {
|
|
151
|
+
width: number;
|
|
152
|
+
height: number;
|
|
153
|
+
};
|
|
154
|
+
html: string;
|
|
155
|
+
colorScheme?: "light" | "dark" | undefined;
|
|
156
|
+
}>;
|
|
102
157
|
export {};
|
package/dist/types/snapshots.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.snapshotRequestSchema = exports.SNAPSHOT_LAYOUTS = void 0;
|
|
3
|
+
exports.snapshotDeclarationSchema = exports.snapshotRequestSchema = exports.SNAPSHOT_LAYOUTS = void 0;
|
|
4
4
|
exports.layoutOfWidth = layoutOfWidth;
|
|
5
5
|
exports.isSnapshotLayout = isSnapshotLayout;
|
|
6
6
|
const zod_1 = require("zod");
|
|
@@ -40,4 +40,11 @@ exports.snapshotRequestSchema = zod_1.z.union([
|
|
|
40
40
|
oversizeBytes: zod_1.z.number().int().positive().max(constants_1.MAX_REPORTED_SNAPSHOT_BYTES),
|
|
41
41
|
}),
|
|
42
42
|
]);
|
|
43
|
+
exports.snapshotDeclarationSchema = snapshotPageSchema
|
|
44
|
+
.omit({ website: true, token: true })
|
|
45
|
+
.extend({
|
|
46
|
+
websiteId: zod_1.z.string().min(1),
|
|
47
|
+
document: dimensionSchema(constants_1.MAX_SNAPSHOT_DOCUMENT_PX),
|
|
48
|
+
html: zod_1.z.string().min(1).max(constants_1.MAX_SNAPSHOT_BYTES),
|
|
49
|
+
});
|
|
43
50
|
//# sourceMappingURL=snapshots.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"snapshots.js","sourceRoot":"","sources":["../../src/types/snapshots.ts"],"names":[],"mappings":";;;AA0BA,sCAKC;AAED,4CAEC;AAnCD,6BAAwB;AACxB,2CAOqB;AAErB,MAAM,yBAAyB,GAAG,EAAE,CAAC;AAMxB,QAAA,gBAAgB,GAAG,CAAC,SAAS,EAAE,QAAQ,EAAE,OAAO,CAAU,CAAC;AAIxE,MAAM,iBAAiB,GAAmC;IACxD,OAAO,EAAE,IAAI;IACb,MAAM,EAAE,GAAG;IACX,KAAK,EAAE,CAAC;CACT,CAAC;AAEF,SAAgB,aAAa,CAAC,KAAa;IACzC,OAAO,CACL,wBAAgB,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,KAAK,IAAI,iBAAiB,CAAC,MAAM,CAAC,CAAC;QACrE,OAAO,CACR,CAAC;AACJ,CAAC;AAED,SAAgB,gBAAgB,CAAC,KAAc;IAC7C,OAAO,wBAAgB,CAAC,QAAQ,CAAC,KAAuB,CAAC,CAAC;AAC5D,CAAC;AAED,MAAM,sBAAsB,GAAG,CAAC,OAAO,EAAE,MAAM,CAAU,CAAC;AAI1D,MAAM,eAAe,GAAG,CAAC,GAAW,EAAE,EAAE,CACtC,OAAC,CAAC,MAAM,CAAC;IACP,KAAK,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC;IACvC,MAAM,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC;CACzC,CAAC,CAAC;AAEL,MAAM,kBAAkB,GAAG,OAAC,CAAC,MAAM,CAAC;IAClC,OAAO,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,iCAAqB,CAAC;IAErD,GAAG,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,0BAAc,CAAC;IAC1C,QAAQ,EAAE,eAAe,CAAC,oCAAwB,CAAC;IACnD,WAAW,EAAE,OAAC,CAAC,IAAI,CAAC,sBAAsB,CAAC,CAAC,QAAQ,EAAE;IAEtD,KAAK,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,yBAAyB,CAAC;CACxD,CAAC,CAAC;AAGU,QAAA,qBAAqB,GAAG,OAAC,CAAC,KAAK,CAAC;IAC3C,kBAAkB,CAAC,MAAM,CAAC;QACxB,QAAQ,EAAE,eAAe,CAAC,oCAAwB,CAAC;QACnD,IAAI,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,8BAAkB,CAAC;KAChD,CAAC;IACF,kBAAkB,CAAC,MAAM,CAAC;QACxB,aAAa,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC,GAAG,CAAC,uCAA2B,CAAC;KAC5E,CAAC;CACH,CAAC,CAAC"}
|
|
1
|
+
{"version":3,"file":"snapshots.js","sourceRoot":"","sources":["../../src/types/snapshots.ts"],"names":[],"mappings":";;;AA0BA,sCAKC;AAED,4CAEC;AAnCD,6BAAwB;AACxB,2CAOqB;AAErB,MAAM,yBAAyB,GAAG,EAAE,CAAC;AAMxB,QAAA,gBAAgB,GAAG,CAAC,SAAS,EAAE,QAAQ,EAAE,OAAO,CAAU,CAAC;AAIxE,MAAM,iBAAiB,GAAmC;IACxD,OAAO,EAAE,IAAI;IACb,MAAM,EAAE,GAAG;IACX,KAAK,EAAE,CAAC;CACT,CAAC;AAEF,SAAgB,aAAa,CAAC,KAAa;IACzC,OAAO,CACL,wBAAgB,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,KAAK,IAAI,iBAAiB,CAAC,MAAM,CAAC,CAAC;QACrE,OAAO,CACR,CAAC;AACJ,CAAC;AAED,SAAgB,gBAAgB,CAAC,KAAc;IAC7C,OAAO,wBAAgB,CAAC,QAAQ,CAAC,KAAuB,CAAC,CAAC;AAC5D,CAAC;AAED,MAAM,sBAAsB,GAAG,CAAC,OAAO,EAAE,MAAM,CAAU,CAAC;AAI1D,MAAM,eAAe,GAAG,CAAC,GAAW,EAAE,EAAE,CACtC,OAAC,CAAC,MAAM,CAAC;IACP,KAAK,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC;IACvC,MAAM,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC;CACzC,CAAC,CAAC;AAEL,MAAM,kBAAkB,GAAG,OAAC,CAAC,MAAM,CAAC;IAClC,OAAO,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,iCAAqB,CAAC;IAErD,GAAG,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,0BAAc,CAAC;IAC1C,QAAQ,EAAE,eAAe,CAAC,oCAAwB,CAAC;IACnD,WAAW,EAAE,OAAC,CAAC,IAAI,CAAC,sBAAsB,CAAC,CAAC,QAAQ,EAAE;IAEtD,KAAK,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,yBAAyB,CAAC;CACxD,CAAC,CAAC;AAGU,QAAA,qBAAqB,GAAG,OAAC,CAAC,KAAK,CAAC;IAC3C,kBAAkB,CAAC,MAAM,CAAC;QACxB,QAAQ,EAAE,eAAe,CAAC,oCAAwB,CAAC;QACnD,IAAI,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,8BAAkB,CAAC;KAChD,CAAC;IACF,kBAAkB,CAAC,MAAM,CAAC;QACxB,aAAa,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC,GAAG,CAAC,uCAA2B,CAAC;KAC5E,CAAC;CACH,CAAC,CAAC;AAMU,QAAA,yBAAyB,GAAG,kBAAkB;KACxD,IAAI,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;KACpC,MAAM,CAAC;IACN,SAAS,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IAC5B,QAAQ,EAAE,eAAe,CAAC,oCAAwB,CAAC;IACnD,IAAI,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,8BAAkB,CAAC;CAChD,CAAC,CAAC"}
|
|
@@ -233,6 +233,7 @@ type DisplayState = ContextWebsite['state'] | 'idle'
|
|
|
233
233
|
const STATE_TONES: Record<DisplayState, string> = {
|
|
234
234
|
live: 'bg-success',
|
|
235
235
|
idle: 'bg-(--ui-text-muted)',
|
|
236
|
+
imported: 'bg-info',
|
|
236
237
|
waiting: 'bg-warning',
|
|
237
238
|
paused: 'bg-(--ui-text-dimmed)',
|
|
238
239
|
}
|
|
@@ -250,7 +251,10 @@ function displayState(site: ContextWebsite): DisplayState {
|
|
|
250
251
|
|
|
251
252
|
function stateLine(site: ContextWebsite): string {
|
|
252
253
|
const state = displayState(site)
|
|
253
|
-
if (
|
|
254
|
+
if (
|
|
255
|
+
(state === 'live' || state === 'idle' || state === 'imported') &&
|
|
256
|
+
site.lastActivityAt
|
|
257
|
+
) {
|
|
254
258
|
return t(`page.marketing.context.${state}`, {
|
|
255
259
|
ago: formatRelativeTime(site.lastActivityAt, now.value, locale.value),
|
|
256
260
|
})
|
|
@@ -75,8 +75,11 @@ const now = useMarketingNow(CLOCK_TICK_MS)
|
|
|
75
75
|
const readerZone = readerTimeZone()
|
|
76
76
|
|
|
77
77
|
function stateLine(card: MarketingWebsiteCard): string {
|
|
78
|
-
if (
|
|
79
|
-
|
|
78
|
+
if (
|
|
79
|
+
(card.state === 'live' || card.state === 'imported') &&
|
|
80
|
+
card.lastActivityAt
|
|
81
|
+
) {
|
|
82
|
+
return t(`page.marketing.context.${card.state}`, {
|
|
80
83
|
ago: formatRelativeTime(card.lastActivityAt, now.value, locale.value),
|
|
81
84
|
})
|
|
82
85
|
}
|
|
@@ -85,6 +88,7 @@ function stateLine(card: MarketingWebsiteCard): string {
|
|
|
85
88
|
|
|
86
89
|
const STATE_DOTS = {
|
|
87
90
|
live: 'bg-success',
|
|
91
|
+
imported: 'bg-info',
|
|
88
92
|
waiting: 'bg-warning',
|
|
89
93
|
paused: 'bg-(--ui-text-dimmed)',
|
|
90
94
|
} as const
|
|
@@ -392,6 +392,11 @@ export interface MarketingScrollDepth {
|
|
|
392
392
|
truncated: boolean
|
|
393
393
|
}
|
|
394
394
|
|
|
395
|
+
/** The website the dashboard's own pages report to (dashboardTracking). */
|
|
396
|
+
export interface MarketingDashboardTracking {
|
|
397
|
+
websiteId: string
|
|
398
|
+
}
|
|
399
|
+
|
|
395
400
|
// --- Facade -----------------------------------------------------------------
|
|
396
401
|
|
|
397
402
|
export function useMarketingApi() {
|
|
@@ -468,5 +473,12 @@ export function useMarketingApi() {
|
|
|
468
473
|
method: 'DELETE',
|
|
469
474
|
query: { id },
|
|
470
475
|
}),
|
|
476
|
+
|
|
477
|
+
// Provisions the signed-in workspace's dashboard website on first use.
|
|
478
|
+
dashboardTracking: () =>
|
|
479
|
+
$authFetch<MarketingDashboardTracking>(
|
|
480
|
+
'/api/marketing/dashboard-tracking',
|
|
481
|
+
{ method: 'POST' },
|
|
482
|
+
),
|
|
471
483
|
}
|
|
472
484
|
}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { computed, inject, type ComputedRef, type InjectionKey } from 'vue'
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
/** `imported`: data, but only from an import — nothing proves the tag collects. */
|
|
4
|
+
export type WebsiteState = 'live' | 'imported' | 'waiting' | 'paused'
|
|
4
5
|
|
|
5
6
|
export interface ContextWebsite {
|
|
6
7
|
id: string
|
|
@@ -13,6 +13,12 @@ export const MS_PER_DAY = 86_400_000
|
|
|
13
13
|
export const MAX_WEBSITE_NAME_LENGTH = 100
|
|
14
14
|
export const MAX_WEBSITE_DOMAIN_LENGTH = 253
|
|
15
15
|
|
|
16
|
+
/**
|
|
17
|
+
* Where the backend puts this module's public options (FRONTEND_CONFIG_KEY
|
|
18
|
+
* on the server): `sdk.options.public[MODULE_CONFIG_KEY]`.
|
|
19
|
+
*/
|
|
20
|
+
export const MODULE_CONFIG_KEY = 'dmsMarketing'
|
|
21
|
+
|
|
16
22
|
/** Longest period the routes read (MAX_QUERY_PERIOD_DAYS on the server). */
|
|
17
23
|
export const MAX_PERIOD_DAYS = 90
|
|
18
24
|
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
import {
|
|
2
|
+
defineDmsPlugin,
|
|
3
|
+
useDmsRuntimeConfig,
|
|
4
|
+
useDmsUserSession,
|
|
5
|
+
} from '#dms/frontend-module'
|
|
6
|
+
import { useMarketingApi } from '../composables/useMarketingApi'
|
|
7
|
+
import {
|
|
8
|
+
applyDashboardTracker,
|
|
9
|
+
type DashboardTrackingOptions,
|
|
10
|
+
followDashboardSession,
|
|
11
|
+
} from '../utils/dashboard-tracker'
|
|
12
|
+
import { trackerUrl } from '../utils/snippet'
|
|
13
|
+
|
|
14
|
+
/**
|
|
15
|
+
* Loads the tracker on every dashboard page while someone is signed in, on
|
|
16
|
+
* the website of their workspace. Registered by `dms.frontend.ts` only when
|
|
17
|
+
* the backend enables `dashboardTracking`; client-only, since the tag is the
|
|
18
|
+
* browser's business and the server render has no session to follow.
|
|
19
|
+
*/
|
|
20
|
+
export function dashboardTrackingPlugin(options: DashboardTrackingOptions) {
|
|
21
|
+
return defineDmsPlugin(() => {
|
|
22
|
+
const { loggedIn, session } = useDmsUserSession()
|
|
23
|
+
const config = useDmsRuntimeConfig()
|
|
24
|
+
const api = useMarketingApi()
|
|
25
|
+
// The public backend URL, where client sites load the tracker from too.
|
|
26
|
+
const src = trackerUrl(
|
|
27
|
+
String(
|
|
28
|
+
(config.public as { dms?: { baseURL?: string } }).dms?.baseURL ?? '',
|
|
29
|
+
),
|
|
30
|
+
)
|
|
31
|
+
|
|
32
|
+
followDashboardSession({
|
|
33
|
+
workspace: () =>
|
|
34
|
+
loggedIn.value ? (session.value?.activeTenantId ?? '') : null,
|
|
35
|
+
provision: async () => (await api.dashboardTracking()).websiteId,
|
|
36
|
+
apply: (websiteId) =>
|
|
37
|
+
applyDashboardTracker(document, {
|
|
38
|
+
src,
|
|
39
|
+
websiteId,
|
|
40
|
+
excludePaths: options.excludePaths,
|
|
41
|
+
}),
|
|
42
|
+
})
|
|
43
|
+
})
|
|
44
|
+
}
|
|
@@ -0,0 +1,127 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The tag that measures the dashboard itself, when the backend enables
|
|
3
|
+
* `dashboardTracking`: the same tracker client sites embed, inserted by the
|
|
4
|
+
* module instead of pasted. It is kept and retargeted, never reinserted: the
|
|
5
|
+
* tracker follows its `data-website-id` (see static/tracker.js), and a
|
|
6
|
+
* second copy would only be refused.
|
|
7
|
+
*/
|
|
8
|
+
import { watch, type WatchStopHandle } from 'vue'
|
|
9
|
+
import { MODULE_CONFIG_KEY } from '../constants'
|
|
10
|
+
|
|
11
|
+
export const DASHBOARD_TRACKER_ELEMENT_ID = 'dms-marketing-dashboard-tracker'
|
|
12
|
+
|
|
13
|
+
/** What the module's public options carry when the backend turns it on. */
|
|
14
|
+
export interface DashboardTrackingOptions {
|
|
15
|
+
/** Route patterns left uncounted, the sign-in pages included. */
|
|
16
|
+
excludePaths: string[]
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
/**
|
|
20
|
+
* The dashboard tag's options among the module's public ones, or null while
|
|
21
|
+
* the backend leaves it off — the default, under which the module registers
|
|
22
|
+
* nothing for it.
|
|
23
|
+
*/
|
|
24
|
+
export function dashboardTrackingOptions(
|
|
25
|
+
publicOptions: Record<string, unknown>,
|
|
26
|
+
): DashboardTrackingOptions | null {
|
|
27
|
+
const tracking = (
|
|
28
|
+
publicOptions[MODULE_CONFIG_KEY] as
|
|
29
|
+
{ dashboardTracking?: { excludePaths?: unknown } } | undefined
|
|
30
|
+
)?.dashboardTracking
|
|
31
|
+
if (!tracking || typeof tracking !== 'object') {
|
|
32
|
+
return null
|
|
33
|
+
}
|
|
34
|
+
const excludePaths = Array.isArray(tracking.excludePaths)
|
|
35
|
+
? tracking.excludePaths.filter(
|
|
36
|
+
(path): path is string => typeof path === 'string',
|
|
37
|
+
)
|
|
38
|
+
: []
|
|
39
|
+
return { excludePaths }
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
export interface DashboardTrackerTag {
|
|
43
|
+
src: string
|
|
44
|
+
/** Null pauses collection without removing the tracker. */
|
|
45
|
+
websiteId: string | null
|
|
46
|
+
excludePaths: string[]
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
/** The DOM this helper touches, so it runs against a stand-in in tests. */
|
|
50
|
+
type TagDocument = Pick<Document, 'getElementById' | 'createElement'> & {
|
|
51
|
+
head: Pick<HTMLHeadElement, 'appendChild'>
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
/**
|
|
55
|
+
* Points the tag at `websiteId`, inserting it the first time there is one.
|
|
56
|
+
* A null id before any insertion inserts nothing: a dashboard nobody signed
|
|
57
|
+
* into never loads the tracker.
|
|
58
|
+
*/
|
|
59
|
+
export function applyDashboardTracker(
|
|
60
|
+
doc: TagDocument,
|
|
61
|
+
tag: DashboardTrackerTag,
|
|
62
|
+
): void {
|
|
63
|
+
const existing = doc.getElementById(DASHBOARD_TRACKER_ELEMENT_ID)
|
|
64
|
+
if (existing) {
|
|
65
|
+
if (tag.websiteId) {
|
|
66
|
+
existing.setAttribute('data-website-id', tag.websiteId)
|
|
67
|
+
} else {
|
|
68
|
+
existing.removeAttribute('data-website-id')
|
|
69
|
+
}
|
|
70
|
+
return
|
|
71
|
+
}
|
|
72
|
+
if (!tag.websiteId) {
|
|
73
|
+
return
|
|
74
|
+
}
|
|
75
|
+
const script = doc.createElement('script')
|
|
76
|
+
script.id = DASHBOARD_TRACKER_ELEMENT_ID
|
|
77
|
+
script.async = true
|
|
78
|
+
script.src = tag.src
|
|
79
|
+
script.setAttribute('data-website-id', tag.websiteId)
|
|
80
|
+
if (tag.excludePaths.length > 0) {
|
|
81
|
+
script.setAttribute('data-exclude-paths', tag.excludePaths.join(','))
|
|
82
|
+
}
|
|
83
|
+
doc.head.appendChild(script)
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
export interface DashboardSessionBinding {
|
|
87
|
+
/** The signed-in workspace (tenant id, '' when none is named), or null
|
|
88
|
+
* while nobody is signed in. */
|
|
89
|
+
workspace: () => string | null
|
|
90
|
+
/** The website of the signed-in workspace, provisioned on first use. */
|
|
91
|
+
provision: () => Promise<string>
|
|
92
|
+
apply: (websiteId: string | null) => void
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
/**
|
|
96
|
+
* Keeps the tag on the website of whoever is signed in. Any change pauses it
|
|
97
|
+
* synchronously — before the navigation that follows a sign-out or a
|
|
98
|
+
* workspace switch — so no page of one workspace reaches another's site;
|
|
99
|
+
* the new website is set once the backend answers, if nothing changed
|
|
100
|
+
* meanwhile. A failure leaves it paused: measuring the dashboard must never
|
|
101
|
+
* get in its way.
|
|
102
|
+
*/
|
|
103
|
+
export function followDashboardSession(
|
|
104
|
+
binding: DashboardSessionBinding,
|
|
105
|
+
): WatchStopHandle {
|
|
106
|
+
let generation = 0
|
|
107
|
+
return watch(
|
|
108
|
+
binding.workspace,
|
|
109
|
+
async (workspace) => {
|
|
110
|
+
const current = ++generation
|
|
111
|
+
binding.apply(null)
|
|
112
|
+
if (workspace === null) {
|
|
113
|
+
return
|
|
114
|
+
}
|
|
115
|
+
let websiteId: string
|
|
116
|
+
try {
|
|
117
|
+
websiteId = await binding.provision()
|
|
118
|
+
} catch {
|
|
119
|
+
return
|
|
120
|
+
}
|
|
121
|
+
if (current === generation) {
|
|
122
|
+
binding.apply(websiteId)
|
|
123
|
+
}
|
|
124
|
+
},
|
|
125
|
+
{ immediate: true, flush: 'sync' },
|
|
126
|
+
)
|
|
127
|
+
}
|
|
@@ -144,12 +144,15 @@ export function formatShortDate(
|
|
|
144
144
|
}).format(at)
|
|
145
145
|
}
|
|
146
146
|
|
|
147
|
-
/**
|
|
147
|
+
/**
|
|
148
|
+
* "AS" for "Acme shop": the avatar of a website. Built from letters and
|
|
149
|
+
* digits only, so a dash or a dot in the name never becomes an initial.
|
|
150
|
+
*/
|
|
148
151
|
export function initials(name: string): string {
|
|
149
|
-
const words = name.
|
|
152
|
+
const words = name.split(/[^\p{L}\p{N}]+/u).filter(Boolean)
|
|
150
153
|
const letters =
|
|
151
154
|
words.length > 1
|
|
152
|
-
? words.slice(0, INITIALS_LENGTH).map((word) => word[0])
|
|
155
|
+
? words.slice(0, INITIALS_LENGTH).map((word) => [...word][0])
|
|
153
156
|
: [...(words[0] ?? '?')].slice(0, INITIALS_LENGTH)
|
|
154
157
|
return letters.join('').toUpperCase()
|
|
155
158
|
}
|
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
import { defineAsyncComponent, type Component } from 'vue'
|
|
2
2
|
import type { DmsFrontendModule } from '#dms/frontend-module'
|
|
3
|
+
import { dashboardTrackingPlugin } from './app/plugins/dashboard-tracking.client'
|
|
3
4
|
import funnelStepsDataType from './app/plugins/funnel-steps-data-type.client'
|
|
5
|
+
import { dashboardTrackingOptions } from './app/utils/dashboard-tracker'
|
|
4
6
|
|
|
5
7
|
interface VueModule {
|
|
6
8
|
default: Component
|
|
@@ -30,6 +32,14 @@ const frontendModule: DmsFrontendModule = {
|
|
|
30
32
|
// Client-only: the display it registers carries callables, which the SSR
|
|
31
33
|
// payload strips.
|
|
32
34
|
sdk.registerPlugin(funnelStepsDataType, { clientOnly: true })
|
|
35
|
+
// Only when the backend enables `dashboardTracking`: off, the dashboard
|
|
36
|
+
// loads no tracker and calls nothing.
|
|
37
|
+
const tracking = dashboardTrackingOptions(sdk.options.public)
|
|
38
|
+
if (tracking) {
|
|
39
|
+
sdk.registerPlugin(dashboardTrackingPlugin(tracking), {
|
|
40
|
+
clientOnly: true,
|
|
41
|
+
})
|
|
42
|
+
}
|
|
33
43
|
},
|
|
34
44
|
}
|
|
35
45
|
|