@antelopejs/dms-marketing 0.3.2 → 0.4.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 +18 -15
- package/dist/config.d.ts +1 -0
- package/dist/config.js +4 -0
- package/dist/config.js.map +1 -1
- package/dist/data-api/funnels.d.ts +2 -0
- package/dist/data-api/funnels.js +8 -1
- package/dist/data-api/funnels.js.map +1 -1
- package/dist/db/models/funnels.model.d.ts +2 -0
- package/dist/db/models/funnels.model.js +9 -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_events.model.d.ts +22 -0
- package/dist/db/models/marketing_events.model.js +70 -5
- package/dist/db/models/marketing_events.model.js.map +1 -1
- package/dist/db/models/marketing_preferences.model.d.ts +25 -0
- package/dist/db/models/marketing_preferences.model.js +29 -0
- package/dist/db/models/marketing_preferences.model.js.map +1 -0
- package/dist/db/models/marketing_sessions.model.d.ts +2 -1
- package/dist/db/models/marketing_sessions.model.js +11 -1
- package/dist/db/models/marketing_sessions.model.js.map +1 -1
- package/dist/db/models/page_snapshots.model.d.ts +2 -1
- package/dist/db/models/page_snapshots.model.js +7 -7
- package/dist/db/models/page_snapshots.model.js.map +1 -1
- package/dist/db/models/website_statistics.model.d.ts +4 -1
- package/dist/db/models/website_statistics.model.js +15 -1
- package/dist/db/models/website_statistics.model.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_preferences.table.d.ts +6 -0
- package/dist/db/tables/marketing_preferences.table.js +31 -0
- package/dist/db/tables/marketing_preferences.table.js.map +1 -0
- package/dist/hooks/index.js +8 -0
- package/dist/hooks/index.js.map +1 -1
- package/dist/index.js +18 -2
- package/dist/index.js.map +1 -1
- package/dist/pages/acquisition/page.d.ts +9 -0
- package/dist/pages/acquisition/page.js +181 -0
- package/dist/pages/acquisition/page.js.map +1 -0
- package/dist/pages/all.d.ts +5 -1
- package/dist/pages/all.js +5 -1
- package/dist/pages/all.js.map +1 -1
- package/dist/pages/blocks.d.ts +18 -0
- package/dist/pages/blocks.js +56 -0
- package/dist/pages/blocks.js.map +1 -0
- package/dist/pages/funnel/page.d.ts +9 -0
- package/dist/pages/funnel/page.js +36 -0
- package/dist/pages/funnel/page.js.map +1 -0
- package/dist/pages/funnel-builder/page.d.ts +9 -0
- package/dist/pages/funnel-builder/page.js +29 -0
- package/dist/pages/funnel-builder/page.js.map +1 -0
- package/dist/pages/funnels/page.d.ts +1 -1
- package/dist/pages/funnels/page.js +200 -3
- package/dist/pages/funnels/page.js.map +1 -1
- package/dist/pages/index.d.ts +1 -0
- package/dist/pages/index.js +1 -0
- package/dist/pages/index.js.map +1 -1
- package/dist/pages/{campaigns → install}/page.d.ts +3 -3
- package/dist/pages/{campaigns → install}/page.js +14 -12
- package/dist/pages/install/page.js.map +1 -0
- package/dist/pages/module.d.ts +3 -0
- package/dist/pages/module.js +30 -3
- package/dist/pages/module.js.map +1 -1
- package/dist/pages/overview/page.d.ts +1 -1
- package/dist/pages/overview/page.js +122 -3
- package/dist/pages/overview/page.js.map +1 -1
- package/dist/pages/pages/page.d.ts +1 -1
- package/dist/pages/pages/page.js +9 -4
- package/dist/pages/pages/page.js.map +1 -1
- package/dist/pages/quick-actions.d.ts +1 -0
- package/dist/pages/quick-actions.js +25 -0
- package/dist/pages/quick-actions.js.map +1 -0
- package/dist/pages/settings/form.d.ts +2 -1
- package/dist/pages/settings/form.js +62 -20
- package/dist/pages/settings/form.js.map +1 -1
- package/dist/pages/settings/page.d.ts +4 -1
- package/dist/pages/settings/page.js +50 -4
- package/dist/pages/settings/page.js.map +1 -1
- package/dist/pages/websites/page.d.ts +11 -0
- package/dist/pages/websites/page.js +62 -0
- package/dist/pages/websites/page.js.map +1 -0
- package/dist/routes/blocks.d.ts +50 -0
- package/dist/routes/blocks.js +269 -0
- package/dist/routes/blocks.js.map +1 -0
- package/dist/routes/collect.d.ts +1 -2
- package/dist/routes/collect.js +19 -12
- package/dist/routes/collect.js.map +1 -1
- package/dist/routes/context.d.ts +8 -0
- package/dist/routes/context.js +54 -0
- package/dist/routes/context.js.map +1 -0
- package/dist/routes/experiments.js +2 -1
- package/dist/routes/experiments.js.map +1 -1
- package/dist/routes/funnels.d.ts +21 -3
- package/dist/routes/funnels.js +150 -7
- package/dist/routes/funnels.js.map +1 -1
- package/dist/routes/index.d.ts +2 -0
- package/dist/routes/index.js +2 -0
- package/dist/routes/index.js.map +1 -1
- package/dist/routes/settings.d.ts +6 -1
- package/dist/routes/settings.js +65 -4
- package/dist/routes/settings.js.map +1 -1
- package/dist/routes/snapshot.d.ts +1 -1
- package/dist/routes/snapshot.js +24 -25
- package/dist/routes/snapshot.js.map +1 -1
- package/dist/routes/stats.d.ts +14 -23
- package/dist/routes/stats.js +73 -97
- package/dist/routes/stats.js.map +1 -1
- package/dist/routes/tracker.js +6 -4
- package/dist/routes/tracker.js.map +1 -1
- package/dist/routes/websites.d.ts +4 -0
- package/dist/routes/websites.js +111 -12
- package/dist/routes/websites.js.map +1 -1
- package/dist/services/acquisition-report.d.ts +62 -0
- package/dist/services/acquisition-report.js +181 -0
- package/dist/services/acquisition-report.js.map +1 -0
- package/dist/services/acquisition.d.ts +9 -3
- package/dist/services/acquisition.js +35 -5
- package/dist/services/acquisition.js.map +1 -1
- package/dist/services/catalog.d.ts +3 -0
- package/dist/services/catalog.js +17 -0
- package/dist/services/catalog.js.map +1 -0
- package/dist/services/collect.d.ts +1 -2
- package/dist/services/collect.js +49 -24
- package/dist/services/collect.js.map +1 -1
- package/dist/services/composed.d.ts +9 -0
- package/dist/services/composed.js +62 -0
- package/dist/services/composed.js.map +1 -0
- package/dist/services/context.d.ts +20 -0
- package/dist/services/context.js +76 -0
- package/dist/services/context.js.map +1 -0
- package/dist/services/dashboard.d.ts +74 -0
- package/dist/services/dashboard.js +343 -0
- package/dist/services/dashboard.js.map +1 -0
- package/dist/services/experiments/results.d.ts +12 -1
- package/dist/services/experiments/results.js +19 -2
- package/dist/services/experiments/results.js.map +1 -1
- package/dist/services/experiments/stats.d.ts +7 -1
- package/dist/services/experiments/stats.js +43 -5
- package/dist/services/experiments/stats.js.map +1 -1
- package/dist/services/funnel-report.d.ts +64 -0
- package/dist/services/funnel-report.js +280 -0
- package/dist/services/funnel-report.js.map +1 -0
- package/dist/services/funnels/compute.d.ts +2 -0
- package/dist/services/funnels/compute.js +25 -13
- package/dist/services/funnels/compute.js.map +1 -1
- package/dist/services/funnels/results.js +4 -1
- package/dist/services/funnels/results.js.map +1 -1
- package/dist/services/funnels/step-path.d.ts +4 -0
- package/dist/services/funnels/step-path.js +47 -0
- package/dist/services/funnels/step-path.js.map +1 -0
- package/dist/services/funnels-table.d.ts +31 -0
- package/dist/services/funnels-table.js +230 -0
- package/dist/services/funnels-table.js.map +1 -0
- package/dist/services/heatmap.d.ts +15 -3
- package/dist/services/heatmap.js +54 -11
- package/dist/services/heatmap.js.map +1 -1
- package/dist/services/hourly-traffic.d.ts +4 -0
- package/dist/services/hourly-traffic.js +35 -0
- package/dist/services/hourly-traffic.js.map +1 -0
- package/dist/services/origin-guard.d.ts +9 -1
- package/dist/services/origin-guard.js +46 -1
- package/dist/services/origin-guard.js.map +1 -1
- package/dist/services/period.d.ts +26 -1
- package/dist/services/period.js +99 -9
- package/dist/services/period.js.map +1 -1
- package/dist/services/prune.d.ts +6 -0
- package/dist/services/prune.js +35 -0
- package/dist/services/prune.js.map +1 -1
- package/dist/services/request-body.d.ts +1 -2
- package/dist/services/request-body.js +10 -36
- package/dist/services/request-body.js.map +1 -1
- package/dist/services/request-meta.d.ts +0 -1
- package/dist/services/request-meta.js +0 -11
- package/dist/services/request-meta.js.map +1 -1
- package/dist/services/rollups.d.ts +25 -0
- package/dist/services/rollups.js +102 -0
- package/dist/services/rollups.js.map +1 -0
- package/dist/services/sessionize.d.ts +5 -1
- package/dist/services/sessionize.js +52 -10
- package/dist/services/sessionize.js.map +1 -1
- package/dist/services/settings.d.ts +41 -2
- package/dist/services/settings.js +219 -6
- package/dist/services/settings.js.map +1 -1
- package/dist/services/snapshots.d.ts +3 -2
- package/dist/services/snapshots.js +110 -9
- 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/url.js +12 -4
- package/dist/services/url.js.map +1 -1
- package/dist/services/website-hosts.d.ts +15 -0
- package/dist/services/website-hosts.js +67 -0
- package/dist/services/website-hosts.js.map +1 -0
- package/dist/services/website-report.d.ts +40 -0
- package/dist/services/website-report.js +84 -0
- package/dist/services/website-report.js.map +1 -0
- package/dist/types/constants.d.ts +14 -2
- package/dist/types/constants.js +17 -6
- package/dist/types/constants.js.map +1 -1
- package/dist/types/events.d.ts +221 -68
- package/dist/types/events.js +60 -11
- package/dist/types/events.js.map +1 -1
- package/dist/types/snapshots.d.ts +6 -0
- package/dist/types/snapshots.js +2 -0
- package/dist/types/snapshots.js.map +1 -1
- package/dist/types/statistics.d.ts +2 -1
- package/dist/types/statistics.js +9 -2
- package/dist/types/statistics.js.map +1 -1
- package/dist/utils/experiment-type.js +1 -1
- package/dist/utils/experiment-type.js.map +1 -1
- package/dist/utils/funnel-steps-type.d.ts +21 -3
- package/dist/utils/funnel-steps-type.js +7 -2
- package/dist/utils/funnel-steps-type.js.map +1 -1
- package/frontend-vue/app/components/ChannelsCard.vue +265 -0
- package/frontend-vue/app/components/Context.vue +479 -0
- package/frontend-vue/app/components/ExperimentInput.vue +3 -1
- package/frontend-vue/app/components/ExperimentReport.vue +736 -0
- package/frontend-vue/app/components/FirstRun.vue +60 -0
- package/frontend-vue/app/components/FunnelBuilder.vue +1595 -0
- package/frontend-vue/app/components/FunnelFigure.vue +640 -0
- package/frontend-vue/app/components/FunnelReport.vue +532 -0
- package/frontend-vue/app/components/FunnelStepsInput.vue +3 -1
- package/frontend-vue/app/components/FunnelTemplates.vue +161 -0
- package/frontend-vue/app/components/HeatmapCanvas.vue +11 -4
- package/frontend-vue/app/components/InstallGuide.vue +753 -0
- package/frontend-vue/app/components/PagePreview.vue +889 -416
- package/frontend-vue/app/components/PagesExplorer.vue +552 -0
- package/frontend-vue/app/components/ScrollDepthOverlay.vue +48 -20
- package/frontend-vue/app/components/TopListTabs.vue +317 -0
- package/frontend-vue/app/components/TrackerSnippet.vue +50 -16
- package/frontend-vue/app/components/VariationsInput.vue +15 -5
- package/frontend-vue/app/components/WebsitesGrid.vue +799 -0
- package/frontend-vue/app/composables/useContextLink.ts +16 -0
- package/frontend-vue/app/composables/useExperiment.ts +1 -2
- package/frontend-vue/app/composables/useFunnelSteps.ts +1 -2
- package/frontend-vue/app/composables/useLatestRequest.ts +2 -4
- package/frontend-vue/app/composables/useMarketingApi.ts +298 -133
- package/frontend-vue/app/composables/useMarketingContext.ts +55 -0
- package/frontend-vue/app/composables/useMarketingRoutes.ts +80 -27
- package/frontend-vue/app/composables/useSnapshotFrame.ts +26 -4
- package/frontend-vue/app/constants.ts +22 -0
- package/frontend-vue/app/plugins/funnel-steps-data-type.client.ts +2 -1
- package/frontend-vue/app/utils/channels.ts +37 -0
- package/frontend-vue/app/utils/format.ts +132 -0
- package/frontend-vue/app/utils/funnel-draft.ts +264 -0
- package/frontend-vue/app/utils/heatmap.ts +82 -0
- package/frontend-vue/app/utils/heatmapPalette.ts +10 -0
- package/frontend-vue/app/utils/host-conflict.ts +48 -0
- package/frontend-vue/app/utils/sample-size.ts +17 -0
- package/frontend-vue/app/utils/snapshotViewportUnits.ts +15 -5
- package/frontend-vue/app/utils/snippet.ts +53 -0
- package/frontend-vue/app/utils/step-path.ts +32 -0
- package/frontend-vue/dms.frontend.ts +4 -3
- package/frontend-vue/i18n/locales/marketing-en-GB.json +1083 -316
- package/frontend-vue/i18n/locales/marketing-fr-FR.json +1087 -320
- package/frontend-vue/package.json +3 -0
- package/frontend-vue/tests/drafts.test.ts +3 -3
- package/frontend-vue/tests/format.test.ts +73 -0
- package/frontend-vue/tests/funnel-draft.test.ts +194 -0
- package/frontend-vue/tests/heatmap.test.ts +32 -0
- package/frontend-vue/tests/i18n.test.ts +87 -4
- package/frontend-vue/tests/latest-request.test.ts +6 -3
- package/frontend-vue/tests/locale-typography.test.ts +115 -0
- package/frontend-vue/tests/registration.test.ts +21 -11
- package/frontend-vue/tests/routes.test.ts +67 -7
- package/frontend-vue/tests/server-parity.test.ts +77 -0
- package/frontend-vue/tests/stubs/frontend-module.ts +18 -3
- package/package.json +9 -7
- package/static/snapshot.js +46 -16
- package/static/tracker.js +139 -48
- package/dist/pages/campaigns/page.js.map +0 -1
- package/frontend-vue/app/components/CampaignsView.vue +0 -330
- package/frontend-vue/app/components/FunnelDetail.vue +0 -1026
- package/frontend-vue/app/components/FunnelsView.vue +0 -493
- package/frontend-vue/app/components/NoWebsiteState.vue +0 -18
- package/frontend-vue/app/components/OverviewView.vue +0 -493
- package/frontend-vue/app/components/PagesView.vue +0 -391
- package/frontend-vue/app/components/TextKpiCard.vue +0 -28
- package/frontend-vue/app/components/TopListTabsCard.vue +0 -162
- package/frontend-vue/app/composables/useChildId.ts +0 -13
- package/frontend-vue/app/composables/useMarketingPeriod.ts +0 -65
- package/frontend-vue/app/composables/useMarketingWebsiteForm.ts +0 -69
- package/frontend-vue/app/composables/useMarketingWebsites.ts +0 -80
- package/frontend-vue/app/utils/dmsComponent.ts +0 -18
- package/frontend-vue/tests/period.test.ts +0 -35
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.normalizeHostname = normalizeHostname;
|
|
4
|
+
exports.isValidHostname = isValidHostname;
|
|
5
|
+
exports.findHostConflict = findHostConflict;
|
|
6
|
+
exports.recordAcceptedSource = recordAcceptedSource;
|
|
7
|
+
exports.lastAcceptedSource = lastAcceptedSource;
|
|
8
|
+
const constants_1 = require("@/types/constants");
|
|
9
|
+
const bounded_cache_1 = require("./bounded-cache");
|
|
10
|
+
const url_1 = require("./url");
|
|
11
|
+
const SCHEME = /^[a-z][a-z0-9+.-]*:\/\//;
|
|
12
|
+
const TRAILING_DOT = /\.$/;
|
|
13
|
+
const HOSTNAME = /^(?!-)[a-z0-9-]{1,63}(?<!-)(\.(?!-)[a-z0-9-]{1,63}(?<!-))*$/;
|
|
14
|
+
const IPV6_HOST = /^\[[0-9a-f:.]+\]$/;
|
|
15
|
+
function normalizeHostname(value) {
|
|
16
|
+
const text = value.trim().toLowerCase();
|
|
17
|
+
try {
|
|
18
|
+
const url = new URL(SCHEME.test(text) ? text : `http://${text}`);
|
|
19
|
+
return url.hostname.replace(TRAILING_DOT, "");
|
|
20
|
+
}
|
|
21
|
+
catch {
|
|
22
|
+
return text;
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
function isValidHostname(hostname) {
|
|
26
|
+
return (hostname !== "null" &&
|
|
27
|
+
hostname.length <= constants_1.MAX_DOMAIN_LENGTH &&
|
|
28
|
+
(HOSTNAME.test(hostname) || IPV6_HOST.test(hostname)));
|
|
29
|
+
}
|
|
30
|
+
function declaredHosts(website) {
|
|
31
|
+
return [website.domain, ...(website.extraDomains ?? [])]
|
|
32
|
+
.map(url_1.toBareHostname)
|
|
33
|
+
.filter((host) => host !== undefined);
|
|
34
|
+
}
|
|
35
|
+
function findHostConflict(candidate, websites) {
|
|
36
|
+
const taken = new Map();
|
|
37
|
+
for (const website of websites) {
|
|
38
|
+
if (website._id === candidate._id) {
|
|
39
|
+
continue;
|
|
40
|
+
}
|
|
41
|
+
for (const host of declaredHosts(website)) {
|
|
42
|
+
taken.set(host, website);
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
const fields = [
|
|
46
|
+
["domain", [candidate.domain]],
|
|
47
|
+
["extraDomains", candidate.extraDomains ?? []],
|
|
48
|
+
];
|
|
49
|
+
for (const [field, hosts] of fields) {
|
|
50
|
+
for (const hostname of hosts.map(url_1.toBareHostname)) {
|
|
51
|
+
const website = hostname ? taken.get(hostname) : undefined;
|
|
52
|
+
if (hostname && website) {
|
|
53
|
+
return { field, hostname, website };
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
return undefined;
|
|
58
|
+
}
|
|
59
|
+
const ACCEPTED_SOURCES_TTL_MS = 60 * constants_1.MS_PER_MINUTE;
|
|
60
|
+
const acceptedSources = new bounded_cache_1.BoundedCache(ACCEPTED_SOURCES_TTL_MS);
|
|
61
|
+
function recordAcceptedSource(websiteId, hostname) {
|
|
62
|
+
acceptedSources.set(websiteId, { hostname, at: Date.now() });
|
|
63
|
+
}
|
|
64
|
+
function lastAcceptedSource(websiteId) {
|
|
65
|
+
return acceptedSources.get(websiteId)?.value;
|
|
66
|
+
}
|
|
67
|
+
//# sourceMappingURL=website-hosts.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"website-hosts.js","sourceRoot":"","sources":["../../src/services/website-hosts.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import type { Website } from "@/db/tables/websites.table";
|
|
2
|
+
import { type ContextWebsite } from "./context";
|
|
3
|
+
import { type RejectedSource } from "./origin-guard";
|
|
4
|
+
export interface WebsiteCard extends ContextWebsite {
|
|
5
|
+
extraDomains: string[];
|
|
6
|
+
snapshotsEnabled: boolean;
|
|
7
|
+
snapshotMaskText: boolean;
|
|
8
|
+
createdAt: number;
|
|
9
|
+
sessions: number;
|
|
10
|
+
pages: number;
|
|
11
|
+
funnels: number;
|
|
12
|
+
snapshots: number;
|
|
13
|
+
sampleRate: number;
|
|
14
|
+
rejected: RejectedSource[];
|
|
15
|
+
}
|
|
16
|
+
export declare function websitesSummary(tenantId: string, websites: Website[]): Promise<WebsiteCard[]>;
|
|
17
|
+
export interface WebsiteDeletionImpact {
|
|
18
|
+
sessions: number;
|
|
19
|
+
pageviews: number;
|
|
20
|
+
since: number | null;
|
|
21
|
+
funnels: number;
|
|
22
|
+
snapshots: number;
|
|
23
|
+
}
|
|
24
|
+
export declare function websiteDeletionImpact(website: Website): Promise<WebsiteDeletionImpact>;
|
|
25
|
+
export interface ConnectionVisit {
|
|
26
|
+
at: number;
|
|
27
|
+
url: string;
|
|
28
|
+
host?: string;
|
|
29
|
+
browser?: string;
|
|
30
|
+
deviceType?: string;
|
|
31
|
+
}
|
|
32
|
+
export interface ConnectionStatus {
|
|
33
|
+
website: ContextWebsite;
|
|
34
|
+
createdAt: number;
|
|
35
|
+
checkedAt: number;
|
|
36
|
+
visit: ConnectionVisit | null;
|
|
37
|
+
lastActivityAt: number | null;
|
|
38
|
+
rejected: RejectedSource[];
|
|
39
|
+
}
|
|
40
|
+
export declare function connectionStatus(website: Website, since?: number): Promise<ConnectionStatus>;
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.websitesSummary = websitesSummary;
|
|
4
|
+
exports.websiteDeletionImpact = websiteDeletionImpact;
|
|
5
|
+
exports.connectionStatus = connectionStatus;
|
|
6
|
+
const interface_database_decorators_1 = require("@antelopejs/interface-database-decorators");
|
|
7
|
+
const db_1 = require("@/db");
|
|
8
|
+
const config_1 = require("@/config");
|
|
9
|
+
const context_1 = require("./context");
|
|
10
|
+
const origin_guard_1 = require("./origin-guard");
|
|
11
|
+
const period_1 = require("./period");
|
|
12
|
+
const rollups_1 = require("./rollups");
|
|
13
|
+
const website_hosts_1 = require("./website-hosts");
|
|
14
|
+
const CARD_WINDOW_DAYS = 30;
|
|
15
|
+
async function cardOf(website, activity) {
|
|
16
|
+
const rows = await (0, rollups_1.readRollups)(website, (0, period_1.trailingWindow)(CARD_WINDOW_DAYS));
|
|
17
|
+
const [funnels, snapshots] = await Promise.all([
|
|
18
|
+
(0, interface_database_decorators_1.GetModel)(db_1.FunnelsModel, website.tenantId).listByWebsite(website._id),
|
|
19
|
+
(0, interface_database_decorators_1.GetModel)(db_1.PageSnapshotsModel, website.tenantId).countByWebsite(website._id),
|
|
20
|
+
]);
|
|
21
|
+
return {
|
|
22
|
+
...(0, context_1.toContextWebsite)(website, activity),
|
|
23
|
+
extraDomains: website.extraDomains ?? [],
|
|
24
|
+
snapshotsEnabled: website.snapshotsEnabled,
|
|
25
|
+
snapshotMaskText: website.snapshotMaskText ?? false,
|
|
26
|
+
createdAt: new Date(website.createdAt).getTime(),
|
|
27
|
+
sessions: (0, rollups_1.sumRollups)(rows).sessions,
|
|
28
|
+
pages: Object.keys((0, rollups_1.mergeDimension)(rows, "topPages")).length,
|
|
29
|
+
funnels: funnels.length,
|
|
30
|
+
snapshots,
|
|
31
|
+
sampleRate: (0, config_1.getConfig)().heatmapSampleRate,
|
|
32
|
+
rejected: (0, origin_guard_1.listRejectedSources)(website._id),
|
|
33
|
+
};
|
|
34
|
+
}
|
|
35
|
+
async function websitesSummary(tenantId, websites) {
|
|
36
|
+
const activity = await (0, context_1.loadWebsiteActivity)(tenantId, websites);
|
|
37
|
+
return Promise.all(websites.map((website) => cardOf(website, activity)));
|
|
38
|
+
}
|
|
39
|
+
async function websiteDeletionImpact(website) {
|
|
40
|
+
const [days, funnels, snapshots] = await Promise.all([
|
|
41
|
+
(0, interface_database_decorators_1.GetModel)(db_1.WebsiteStatisticsModel, website.tenantId).getCounters(website._id),
|
|
42
|
+
(0, interface_database_decorators_1.GetModel)(db_1.FunnelsModel, website.tenantId).listByWebsite(website._id),
|
|
43
|
+
(0, interface_database_decorators_1.GetModel)(db_1.PageSnapshotsModel, website.tenantId).countByWebsite(website._id),
|
|
44
|
+
]);
|
|
45
|
+
return {
|
|
46
|
+
sessions: days.reduce((sum, day) => sum + (day.sessions ?? 0), 0),
|
|
47
|
+
pageviews: days.reduce((sum, day) => sum + (day.pageviews ?? 0), 0),
|
|
48
|
+
since: days.length > 0 ? Math.min(...days.map((day) => day.day)) : null,
|
|
49
|
+
funnels: funnels.length,
|
|
50
|
+
snapshots,
|
|
51
|
+
};
|
|
52
|
+
}
|
|
53
|
+
const RECENT_VISIT_DAYS = 90;
|
|
54
|
+
async function connectionStatus(website, since) {
|
|
55
|
+
const createdAt = new Date(website.createdAt).getTime();
|
|
56
|
+
const checkedAt = Date.now();
|
|
57
|
+
const from = Math.max(since ?? createdAt, (0, period_1.periodStart)(RECENT_VISIT_DAYS).getTime());
|
|
58
|
+
const [pageview, latest] = await Promise.all([
|
|
59
|
+
(0, interface_database_decorators_1.GetModel)(db_1.MarketingEventsModel, website.tenantId).getLatestPageview(website._id, new Date(from)),
|
|
60
|
+
(0, interface_database_decorators_1.GetModel)(db_1.MarketingSessionsModel, website.tenantId).getLatest(website._id),
|
|
61
|
+
]);
|
|
62
|
+
const lastActivityAt = latest ? new Date(latest.lastSeenAt).getTime() : null;
|
|
63
|
+
const activity = new Map(lastActivityAt === null ? [] : [[website._id, lastActivityAt]]);
|
|
64
|
+
return {
|
|
65
|
+
website: (0, context_1.toContextWebsite)(website, activity),
|
|
66
|
+
createdAt,
|
|
67
|
+
checkedAt,
|
|
68
|
+
visit: pageview ? await visitOf(website, pageview, from) : null,
|
|
69
|
+
lastActivityAt,
|
|
70
|
+
rejected: (0, origin_guard_1.listRejectedSources)(website._id),
|
|
71
|
+
};
|
|
72
|
+
}
|
|
73
|
+
async function visitOf(website, pageview, from) {
|
|
74
|
+
const session = await (0, interface_database_decorators_1.GetModel)(db_1.MarketingSessionsModel, website.tenantId).get(pageview.sessionId);
|
|
75
|
+
const source = (0, website_hosts_1.lastAcceptedSource)(website._id);
|
|
76
|
+
return {
|
|
77
|
+
at: new Date(pageview.timestamp).getTime(),
|
|
78
|
+
url: pageview.url,
|
|
79
|
+
host: source && source.at >= from ? source.hostname : undefined,
|
|
80
|
+
browser: session?.browser,
|
|
81
|
+
deviceType: session?.deviceType ?? "desktop",
|
|
82
|
+
};
|
|
83
|
+
}
|
|
84
|
+
//# sourceMappingURL=website-report.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"website-report.js","sourceRoot":"","sources":["../../src/services/website-report.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,7 +1,11 @@
|
|
|
1
1
|
export declare const MARKETING_MODULE_ID = "marketing";
|
|
2
2
|
export declare const OVERVIEW_PAGE_ID = "overview";
|
|
3
|
+
export declare const MARKETING_MODULE_PATH = "/modules/marketing";
|
|
3
4
|
export declare const FRONTEND_MODULE_NAME = "@antelopejs/dms-marketing-frontend-vue";
|
|
5
|
+
export declare const MS_PER_SECOND = 1000;
|
|
4
6
|
export declare const MS_PER_MINUTE: number;
|
|
7
|
+
export declare const SECONDS_PER_MINUTE = 60;
|
|
8
|
+
export declare const SECONDS_PER_HOUR: number;
|
|
5
9
|
export declare const MS_PER_HOUR: number;
|
|
6
10
|
export declare const MS_PER_DAY: number;
|
|
7
11
|
export declare const MAX_QUERY_PERIOD_DAYS = 90;
|
|
@@ -22,6 +26,8 @@ export declare const MAX_NAME_LENGTH = 100;
|
|
|
22
26
|
export declare const MAX_DOMAIN_LENGTH = 253;
|
|
23
27
|
export declare const MAX_EXTRA_DOMAINS = 20;
|
|
24
28
|
export declare const MAX_SCREEN_AND_LANGUAGE_CHARS = 16;
|
|
29
|
+
export declare const MAX_CLICK_SELECTOR_LENGTH = 120;
|
|
30
|
+
export declare const MAX_COLLECT_BODY_BYTES: number;
|
|
25
31
|
export declare const MIN_FUNNEL_STEPS = 1;
|
|
26
32
|
export declare const MAX_FUNNEL_STEPS = 10;
|
|
27
33
|
export declare const MAX_FUNNEL_STEP_VALUE_LENGTH = 500;
|
|
@@ -30,13 +36,18 @@ export declare const DEFAULT_CONVERSION_WINDOW_HOURS = 24;
|
|
|
30
36
|
export declare const MIN_EXPERIMENT_VARIATIONS = 2;
|
|
31
37
|
export declare const MAX_EXPERIMENT_VARIATIONS = 8;
|
|
32
38
|
export declare const MAX_EXPERIMENT_KEY_LENGTH = 64;
|
|
39
|
+
export declare const EXPERIMENT_KEY_PATTERN: RegExp;
|
|
33
40
|
export declare const ASSIGNMENT_HASH_HEX_CHARS = 8;
|
|
34
41
|
export declare const EXPERIMENT_SIGNIFICANCE_LEVEL = 0.05;
|
|
35
42
|
export declare const EXPERIMENT_SRM_P_THRESHOLD = 0.001;
|
|
36
43
|
export declare const MIN_OUTCOMES_PER_CELL = 5;
|
|
44
|
+
export declare const MIN_DECISION_DAYS = 7;
|
|
45
|
+
export declare const MIN_DECISION_CONVERSIONS = 50;
|
|
46
|
+
export declare const FUNNEL_SUMMARY_CACHE_TTL_MS = 30000;
|
|
47
|
+
export declare const RAW_COVERAGE_CACHE_TTL_MS: number;
|
|
37
48
|
export declare const MAX_ENTRIES_PER_TOP_MAP = 50;
|
|
38
49
|
export declare const CAMPAIGN_KEY_SEPARATOR = "\u001F";
|
|
39
|
-
export declare const TOP_MAPS_RETENTION_DAYS
|
|
50
|
+
export declare const TOP_MAPS_RETENTION_DAYS: number;
|
|
40
51
|
export declare const DEFAULT_PAGES_LIST_LIMIT = 100;
|
|
41
52
|
export declare const MAX_PAGES_LIST_LIMIT = 200;
|
|
42
53
|
export declare const MAX_FUNNEL_EVENTS = 200000;
|
|
@@ -64,8 +75,9 @@ export declare const MAX_EVENTS_PER_WINDOW_PER_SOURCE = 600;
|
|
|
64
75
|
export declare const RATE_LIMIT_MAX_SOURCES = 50000;
|
|
65
76
|
export declare const MAX_SNAPSHOTS_PER_WINDOW_PER_SOURCE = 3;
|
|
66
77
|
export declare const TRACKER_CACHE_MAX_AGE_SECONDS = 3600;
|
|
78
|
+
export declare const PAUSED_TRACKER_CACHE_MAX_AGE_SECONDS = 60;
|
|
67
79
|
export declare const API_BASE_PATH = "/api/marketing";
|
|
68
80
|
export declare const HTTP_BAD_REQUEST = 400;
|
|
69
81
|
export declare const HTTP_FORBIDDEN = 403;
|
|
70
82
|
export declare const HTTP_NOT_FOUND = 404;
|
|
71
|
-
export declare const
|
|
83
|
+
export declare const HTTP_CONFLICT = 409;
|
package/dist/types/constants.js
CHANGED
|
@@ -1,12 +1,15 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.
|
|
4
|
-
exports.
|
|
3
|
+
exports.TOP_MAPS_RETENTION_DAYS = exports.CAMPAIGN_KEY_SEPARATOR = 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.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_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.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;
|
|
5
5
|
exports.MARKETING_MODULE_ID = "marketing";
|
|
6
6
|
exports.OVERVIEW_PAGE_ID = "overview";
|
|
7
|
+
exports.MARKETING_MODULE_PATH = `/modules/${exports.MARKETING_MODULE_ID}`;
|
|
7
8
|
exports.FRONTEND_MODULE_NAME = "@antelopejs/dms-marketing-frontend-vue";
|
|
8
|
-
|
|
9
|
-
exports.MS_PER_MINUTE = 60 * MS_PER_SECOND;
|
|
9
|
+
exports.MS_PER_SECOND = 1_000;
|
|
10
|
+
exports.MS_PER_MINUTE = 60 * exports.MS_PER_SECOND;
|
|
11
|
+
exports.SECONDS_PER_MINUTE = 60;
|
|
12
|
+
exports.SECONDS_PER_HOUR = 60 * exports.SECONDS_PER_MINUTE;
|
|
10
13
|
exports.MS_PER_HOUR = 60 * exports.MS_PER_MINUTE;
|
|
11
14
|
exports.MS_PER_DAY = 24 * exports.MS_PER_HOUR;
|
|
12
15
|
const DAYS_PER_MONTH = 30;
|
|
@@ -29,6 +32,8 @@ exports.MAX_NAME_LENGTH = 100;
|
|
|
29
32
|
exports.MAX_DOMAIN_LENGTH = 253;
|
|
30
33
|
exports.MAX_EXTRA_DOMAINS = 20;
|
|
31
34
|
exports.MAX_SCREEN_AND_LANGUAGE_CHARS = 16;
|
|
35
|
+
exports.MAX_CLICK_SELECTOR_LENGTH = 120;
|
|
36
|
+
exports.MAX_COLLECT_BODY_BYTES = 256 * 1024;
|
|
32
37
|
exports.MIN_FUNNEL_STEPS = 1;
|
|
33
38
|
exports.MAX_FUNNEL_STEPS = 10;
|
|
34
39
|
exports.MAX_FUNNEL_STEP_VALUE_LENGTH = 500;
|
|
@@ -37,13 +42,18 @@ exports.DEFAULT_CONVERSION_WINDOW_HOURS = 24;
|
|
|
37
42
|
exports.MIN_EXPERIMENT_VARIATIONS = 2;
|
|
38
43
|
exports.MAX_EXPERIMENT_VARIATIONS = 8;
|
|
39
44
|
exports.MAX_EXPERIMENT_KEY_LENGTH = 64;
|
|
45
|
+
exports.EXPERIMENT_KEY_PATTERN = /^[a-z0-9][a-z0-9_-]*$/;
|
|
40
46
|
exports.ASSIGNMENT_HASH_HEX_CHARS = 8;
|
|
41
47
|
exports.EXPERIMENT_SIGNIFICANCE_LEVEL = 0.05;
|
|
42
48
|
exports.EXPERIMENT_SRM_P_THRESHOLD = 0.001;
|
|
43
49
|
exports.MIN_OUTCOMES_PER_CELL = 5;
|
|
50
|
+
exports.MIN_DECISION_DAYS = 7;
|
|
51
|
+
exports.MIN_DECISION_CONVERSIONS = 50;
|
|
52
|
+
exports.FUNNEL_SUMMARY_CACHE_TTL_MS = 30_000;
|
|
53
|
+
exports.RAW_COVERAGE_CACHE_TTL_MS = 10 * 60_000;
|
|
44
54
|
exports.MAX_ENTRIES_PER_TOP_MAP = 50;
|
|
45
55
|
exports.CAMPAIGN_KEY_SEPARATOR = "\u001f";
|
|
46
|
-
exports.TOP_MAPS_RETENTION_DAYS = exports.MAX_QUERY_PERIOD_DAYS;
|
|
56
|
+
exports.TOP_MAPS_RETENTION_DAYS = DAYS_PER_YEAR + exports.MAX_QUERY_PERIOD_DAYS;
|
|
47
57
|
exports.DEFAULT_PAGES_LIST_LIMIT = 100;
|
|
48
58
|
exports.MAX_PAGES_LIST_LIMIT = 200;
|
|
49
59
|
exports.MAX_FUNNEL_EVENTS = 200_000;
|
|
@@ -71,9 +81,10 @@ exports.MAX_EVENTS_PER_WINDOW_PER_SOURCE = 600;
|
|
|
71
81
|
exports.RATE_LIMIT_MAX_SOURCES = 50_000;
|
|
72
82
|
exports.MAX_SNAPSHOTS_PER_WINDOW_PER_SOURCE = 3;
|
|
73
83
|
exports.TRACKER_CACHE_MAX_AGE_SECONDS = 3600;
|
|
84
|
+
exports.PAUSED_TRACKER_CACHE_MAX_AGE_SECONDS = 60;
|
|
74
85
|
exports.API_BASE_PATH = "/api/marketing";
|
|
75
86
|
exports.HTTP_BAD_REQUEST = 400;
|
|
76
87
|
exports.HTTP_FORBIDDEN = 403;
|
|
77
88
|
exports.HTTP_NOT_FOUND = 404;
|
|
78
|
-
exports.
|
|
89
|
+
exports.HTTP_CONFLICT = 409;
|
|
79
90
|
//# sourceMappingURL=constants.js.map
|
|
@@ -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,oBAAoB,GAAG,wCAAwC,CAAC;
|
|
1
|
+
{"version":3,"file":"constants.js","sourceRoot":"","sources":["../../src/types/constants.ts"],"names":[],"mappings":"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"}
|