@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
package/README.md
CHANGED
|
@@ -12,7 +12,7 @@ first-party.
|
|
|
12
12
|
No external service, no cookie; data stays in the project's MongoDB.
|
|
13
13
|
|
|
14
14
|
<p align="center">
|
|
15
|
-
<img src="docs/screenshots/overview.png" alt="Overview:
|
|
15
|
+
<img src="docs/screenshots/overview.png" alt="Overview: the website and period bar, four KPI cards with their change and sparkline, the session-quality strip, the traffic chart against the previous period, the device split and four tabbed top lists" width="900">
|
|
16
16
|
</p>
|
|
17
17
|
<p align="center">
|
|
18
18
|
<em>The Overview page — every panel reads pre-aggregated daily rollups, never raw events.</em>
|
|
@@ -22,15 +22,16 @@ No external service, no cookie; data stays in the project's MongoDB.
|
|
|
22
22
|
|
|
23
23
|
| Feature | Where | Guide |
|
|
24
24
|
|---|---|---|
|
|
25
|
-
| **Traffic overview** — pageviews, sessions, visitors,
|
|
26
|
-
| **
|
|
27
|
-
| **
|
|
28
|
-
| **Funnels & A/B** — ordered conversion journeys with per-step drop-off, optionally split into server-assigned variations scored with significance | `/modules/marketing/funnels` | [usage/funnels.md](docs/usage/funnels.md) |
|
|
25
|
+
| **Traffic overview** — pageviews, sessions, new visitors and custom events with their change, session quality, traffic chart, device split, top content/acquisition/audience/event lists | `/modules/marketing/overview` | [usage/overview.md](docs/usage/overview.md) |
|
|
26
|
+
| **Acquisition** — direct/organic/social/email/referral/paid split, UTM campaign table (source × medium × campaign), top referrers and UTM details | `/modules/marketing/acquisition` | [usage/acquisition.md](docs/usage/acquisition.md) |
|
|
27
|
+
| **Pages & heatmaps** — clicks and scroll depth drawn over a snapshot of any tracked page | `/modules/marketing/pages` | [usage/heatmap.md](docs/usage/heatmap.md) |
|
|
28
|
+
| **Funnels & A/B tests** — ordered conversion journeys with per-step drop-off, optionally split into server-assigned variations scored with significance; a report page and a builder per funnel | `/modules/marketing/funnels` | [usage/funnels.md](docs/usage/funnels.md) |
|
|
29
|
+
| **Websites & install guide** — the tracked sites, their live state and capture options; a guided tracker install that checks the first pageview | `/modules/marketing/websites` | [install.md](docs/install.md#2-register-a-website) |
|
|
29
30
|
| **First-party tracker** — cookieless script, SPA-aware, custom events API | visitor sites | [usage/tracking.md](docs/usage/tracking.md) |
|
|
30
31
|
| **Settings** — collection switch, retentions, heatmap sampling | `/modules/marketing/settings` | [usage/settings.md](docs/usage/settings.md) |
|
|
31
32
|
|
|
32
33
|
<p align="center">
|
|
33
|
-
<img src="docs/screenshots/heatmap.png" alt="
|
|
34
|
+
<img src="docs/screenshots/heatmap.png" alt="Pages & heatmaps: the tracked pages with their views and heat bars on the left, and on the right the click heatmap of the selected page drawn over its snapshot, with count pins on the hottest elements and the Most clicked list beside it" width="900">
|
|
34
35
|
</p>
|
|
35
36
|
<p align="center">
|
|
36
37
|
<em>Click heatmap over the page itself. Clicks are anchored to the element
|
|
@@ -38,7 +39,7 @@ No external service, no cookie; data stays in the project's MongoDB.
|
|
|
38
39
|
</p>
|
|
39
40
|
|
|
40
41
|
<p align="center">
|
|
41
|
-
<img src="docs/screenshots/
|
|
42
|
+
<img src="docs/screenshots/funnel.png" alt="Funnel report: entered, completed, end-to-end and biggest-loss KPIs over the steps figure, each step with its share of entered sessions and the sessions lost before the next one, the worst step flagged" width="900">
|
|
42
43
|
</p>
|
|
43
44
|
<p align="center">
|
|
44
45
|
<em>Conversion funnels with per-step drop-off. Computed at read time over
|
|
@@ -46,12 +47,12 @@ No external service, no cookie; data stays in the project's MongoDB.
|
|
|
46
47
|
</p>
|
|
47
48
|
|
|
48
49
|
<p align="center">
|
|
49
|
-
<img src="docs/screenshots/experiments.png" alt="A
|
|
50
|
+
<img src="docs/screenshots/experiments.png" alt="A/B test report: the verdict sentence with the relative lift, the confidence and the exposed sessions, the sample ratio check, then each arm step by step with A neutral and B in the primary colour" width="900">
|
|
50
51
|
</p>
|
|
51
52
|
<p align="center">
|
|
52
|
-
<em>The same funnel split into A/B arms
|
|
53
|
-
|
|
54
|
-
|
|
53
|
+
<em>The same funnel split into A/B arms, arm against arm at every step.
|
|
54
|
+
Verdicts answer "not enough data" rather than overclaim — a sample too
|
|
55
|
+
thin shows raw counts, never bars.</em>
|
|
55
56
|
</p>
|
|
56
57
|
|
|
57
58
|
## What makes it hold
|
|
@@ -92,8 +93,8 @@ The reasoning behind each choice is in
|
|
|
92
93
|
- **[Usage guides](docs/usage/)** — one per feature, linked in the table above.
|
|
93
94
|
- **[Architecture](docs/architecture.md)** — data flow, tenancy, auth model,
|
|
94
95
|
event contract, HTTP surface, heatmap internals, phasing.
|
|
95
|
-
- **[Known issues](KNOWN-ISSUES.md)** —
|
|
96
|
-
|
|
96
|
+
- **[Known issues](KNOWN-ISSUES.md)** — the defects found end-to-end and
|
|
97
|
+
how each was closed; none is open.
|
|
97
98
|
|
|
98
99
|
## Status
|
|
99
100
|
|
|
@@ -119,8 +120,10 @@ pnpm test # backend suite, then the frontend module's vitest suite
|
|
|
119
120
|
```
|
|
120
121
|
|
|
121
122
|
The admin surfaces ship as a DMS frontend module in `frontend-vue/`: a Vue 3
|
|
122
|
-
project whose root `dms.frontend.ts`
|
|
123
|
-
|
|
123
|
+
project whose root `dms.frontend.ts` declares the `DmsMarketing` component
|
|
124
|
+
prefix and registers every component of `app/components/` under it, plus its
|
|
125
|
+
own i18n catalogs. The pages themselves are declared backend-side as trees
|
|
126
|
+
of DMS blocks ([architecture.md](docs/architecture.md#frontend-layout)). It is a separate project
|
|
124
127
|
with a lockfile of its own, published inside this package's tarball and
|
|
125
128
|
materialized by the DMS frontend loader (`ajs dms`) into the console's Inertia
|
|
126
129
|
workspace. Its own vitest suite runs through `pnpm test`.
|
package/dist/config.d.ts
CHANGED
|
@@ -10,4 +10,5 @@ export interface DmsMarketingConfig {
|
|
|
10
10
|
}
|
|
11
11
|
export declare function setConfig(input?: Partial<DmsMarketingConfig>): void;
|
|
12
12
|
export declare function applyConfigOverrides(overrides: Partial<DmsMarketingConfig>): void;
|
|
13
|
+
export declare function getBaseConfig(): DmsMarketingConfig;
|
|
13
14
|
export declare function getConfig(): DmsMarketingConfig;
|
package/dist/config.js
CHANGED
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.setConfig = setConfig;
|
|
4
4
|
exports.applyConfigOverrides = applyConfigOverrides;
|
|
5
|
+
exports.getBaseConfig = getBaseConfig;
|
|
5
6
|
exports.getConfig = getConfig;
|
|
6
7
|
const defu_1 = require("defu");
|
|
7
8
|
const constants_1 = require("./types/constants");
|
|
@@ -29,6 +30,9 @@ function applyConfigOverrides(overrides) {
|
|
|
29
30
|
runtimeOverrides = overrides;
|
|
30
31
|
mergeEffective();
|
|
31
32
|
}
|
|
33
|
+
function getBaseConfig() {
|
|
34
|
+
return baseConfig;
|
|
35
|
+
}
|
|
32
36
|
function getConfig() {
|
|
33
37
|
return globalConfig;
|
|
34
38
|
}
|
package/dist/config.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":";;AAuDA,8BAGC;AAED,oDAKC;AAED,8BAEC;
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":";;AAuDA,8BAGC;AAED,oDAKC;AAGD,sCAEC;AAED,8BAEC;AA1ED,+BAA4B;AAC5B,iDAM2B;AA6B3B,MAAM,cAAc,GAAuB;IACzC,cAAc,EAAE,IAAI;IACpB,kBAAkB,EAAE,2CAA+B;IACnD,mBAAmB,EAAE,2CAA+B;IACpD,iBAAiB,EAAE,yCAA6B;IAChD,kBAAkB,EAAE,2CAA+B;IACnD,iBAAiB,EAAE,wCAA4B;IAC/C,iBAAiB,EAAE,EAAE;IACrB,iBAAiB,EAAE,EAAE;CACtB,CAAC;AAEF,IAAI,UAAU,GAAuB,cAAc,CAAC;AACpD,IAAI,YAAY,GAAuB,cAAc,CAAC;AACtD,IAAI,gBAAgB,GAAgC,EAAE,CAAC;AAEvD,SAAS,cAAc;IACrB,YAAY,GAAG,IAAA,WAAI,EAAC,gBAAgB,EAAE,UAAU,CAAC,CAAC;AACpD,CAAC;AAED,SAAgB,SAAS,CAAC,KAAmC;IAC3D,UAAU,GAAG,IAAA,WAAI,EAAC,KAAK,IAAI,EAAE,EAAE,cAAc,CAAC,CAAC;IAC/C,cAAc,EAAE,CAAC;AACnB,CAAC;AAED,SAAgB,oBAAoB,CAClC,SAAsC;IAEtC,gBAAgB,GAAG,SAAS,CAAC;IAC7B,cAAc,EAAE,CAAC;AACnB,CAAC;AAGD,SAAgB,aAAa;IAC3B,OAAO,UAAU,CAAC;AACpB,CAAC;AAED,SAAgB,SAAS;IACvB,OAAO,YAAY,CAAC;AACtB,CAAC"}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { type DataControllerCallback } from "@antelopejs/interface-data-api";
|
|
2
2
|
import { FunnelsModel } from "@/db";
|
|
3
3
|
import { Funnel, type FunnelExperiment, type FunnelStep } from "@/db/tables/funnels.table";
|
|
4
|
+
export declare function editedExperiment(parsed: Record<string, unknown>, current: Funnel, websiteId: string): FunnelExperiment | null;
|
|
4
5
|
declare const funnelsDataAPI_base: import("@antelopejs/interface-core/decorators").Class<import("@antelopejs/interface-data-api").ExtractDefCallbacks<{
|
|
5
6
|
new: DataControllerCallback;
|
|
6
7
|
edit: DataControllerCallback;
|
|
@@ -10,6 +11,7 @@ declare const funnelsDataAPI_base: import("@antelopejs/interface-core/decorators
|
|
|
10
11
|
select: import("@antelopejs/interface-data-api").DataControllerCallbackWithOptions<any>;
|
|
11
12
|
count: DataControllerCallback;
|
|
12
13
|
countBatch: import("@antelopejs/interface-data-api").DataControllerCallbackWithOptions<any>;
|
|
14
|
+
summary: import("@antelopejs/interface-data-api").DataControllerCallbackWithOptions<any>;
|
|
13
15
|
archive: DataControllerCallback;
|
|
14
16
|
restore: DataControllerCallback;
|
|
15
17
|
}> & {
|
package/dist/data-api/funnels.js
CHANGED
|
@@ -10,6 +10,7 @@ var __metadata = (this && this.__metadata) || function (k, v) {
|
|
|
10
10
|
};
|
|
11
11
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
12
|
exports.funnelsDataAPI = void 0;
|
|
13
|
+
exports.editedExperiment = editedExperiment;
|
|
13
14
|
const interface_api_1 = require("@antelopejs/interface-api");
|
|
14
15
|
const interface_data_api_1 = require("@antelopejs/interface-data-api");
|
|
15
16
|
const metadata_1 = require("@antelopejs/interface-data-api/metadata");
|
|
@@ -116,6 +117,12 @@ function resolveExperiment(requested, current, websiteId) {
|
|
|
116
117
|
runs: lifecycleRuns(existing, currentStatus, status),
|
|
117
118
|
};
|
|
118
119
|
}
|
|
120
|
+
function editedExperiment(parsed, current, websiteId) {
|
|
121
|
+
const requested = "experiment" in parsed
|
|
122
|
+
? parseExperiment(parsed)
|
|
123
|
+
: (current.experiment ?? null);
|
|
124
|
+
return resolveExperiment(requested, current, websiteId);
|
|
125
|
+
}
|
|
119
126
|
async function assertUniqueKey(ctx, websiteId, key, excludeId) {
|
|
120
127
|
if (await tenantFunnels(ctx).hasKey(websiteId, key, excludeId)) {
|
|
121
128
|
throw badRequest(DUPLICATE_KEY_MESSAGE);
|
|
@@ -154,7 +161,7 @@ function withEditChecks(base) {
|
|
|
154
161
|
const websiteId = typeof parsed.websiteId === "string"
|
|
155
162
|
? parsed.websiteId
|
|
156
163
|
: current.websiteId;
|
|
157
|
-
const experiment =
|
|
164
|
+
const experiment = editedExperiment(parsed, current, websiteId);
|
|
158
165
|
if (experiment) {
|
|
159
166
|
await assertUniqueKey(ctx, websiteId, experiment.key, current._id);
|
|
160
167
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"funnels.js","sourceRoot":"","sources":["../../src/data-api/funnels.ts"],"names":[],"mappings":";;;;;;;;;;;;
|
|
1
|
+
{"version":3,"file":"funnels.js","sourceRoot":"","sources":["../../src/data-api/funnels.ts"],"names":[],"mappings":"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"}
|
|
@@ -18,6 +18,8 @@ declare const FunnelsModel_base: {
|
|
|
18
18
|
validate(obj: unknown, options?: import("@antelopejs/interface-database-decorators").ValidateInputOptions): import("@antelopejs/interface-database-decorators").ValidationResult;
|
|
19
19
|
};
|
|
20
20
|
export declare class FunnelsModel extends FunnelsModel_base {
|
|
21
|
+
deleteByWebsite(websiteId: string): Promise<number>;
|
|
22
|
+
listByWebsite(websiteId: string): Promise<Funnel[]>;
|
|
21
23
|
listRunning(websiteId: string): Promise<Funnel[]>;
|
|
22
24
|
hasKey(websiteId: string, key: string, excludeId?: string): Promise<boolean>;
|
|
23
25
|
listWebsiteIdsOf(ids: string[]): Promise<string[]>;
|
|
@@ -5,6 +5,15 @@ const interface_database_decorators_1 = require("@antelopejs/interface-database-
|
|
|
5
5
|
const funnels_table_1 = require("../tables/funnels.table");
|
|
6
6
|
const RUNNING_STATUS = "running";
|
|
7
7
|
class FunnelsModel extends (0, interface_database_decorators_1.BasicDataModel)(funnels_table_1.Funnel, funnels_table_1.funnelsTableName) {
|
|
8
|
+
async deleteByWebsite(websiteId) {
|
|
9
|
+
return this.table.getAll(websiteId, "websiteId").delete().run();
|
|
10
|
+
}
|
|
11
|
+
async listByWebsite(websiteId) {
|
|
12
|
+
return this.table
|
|
13
|
+
.getAll(websiteId, "websiteId")
|
|
14
|
+
.orderBy("createdAt", "desc")
|
|
15
|
+
.run();
|
|
16
|
+
}
|
|
8
17
|
async listRunning(websiteId) {
|
|
9
18
|
return this.table
|
|
10
19
|
.getAll(websiteId, "websiteId")
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"funnels.model.js","sourceRoot":"","sources":["../../../src/db/models/funnels.model.ts"],"names":[],"mappings":";;;AAAA,6FAA2E;AAC3E,2DAIiC;AAEjC,MAAM,cAAc,GAAG,SAAS,CAAC;AAEjC,MAAa,YAAa,SAAQ,IAAA,8CAAc,EAAC,sBAAM,EAAE,gCAAgB,CAAC;
|
|
1
|
+
{"version":3,"file":"funnels.model.js","sourceRoot":"","sources":["../../../src/db/models/funnels.model.ts"],"names":[],"mappings":";;;AAAA,6FAA2E;AAC3E,2DAIiC;AAEjC,MAAM,cAAc,GAAG,SAAS,CAAC;AAEjC,MAAa,YAAa,SAAQ,IAAA,8CAAc,EAAC,sBAAM,EAAE,gCAAgB,CAAC;IACxE,KAAK,CAAC,eAAe,CAAC,SAAiB;QACrC,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,SAAS,EAAE,WAAW,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC;IAClE,CAAC;IAED,KAAK,CAAC,aAAa,CAAC,SAAiB;QACnC,OAAO,IAAI,CAAC,KAAK;aACd,MAAM,CAAC,SAAS,EAAE,WAAW,CAAC;aAC9B,OAAO,CAAC,WAAW,EAAE,MAAM,CAAC;aAC5B,GAAG,EAAE,CAAC;IACX,CAAC;IAGD,KAAK,CAAC,WAAW,CAAC,SAAiB;QACjC,OAAO,IAAI,CAAC,KAAK;aACd,MAAM,CAAC,SAAS,EAAE,WAAW,CAAC;aAC9B,MAAM,CAAC,CAAC,GAAG,EAAE,EAAE,CACd,GAAG;aACA,GAAG,CAAC,YAAY,CAAC;aACjB,IAAI,EAAoB;aACxB,GAAG,CAAC,QAAQ,CAAC;aACb,EAAE,CAAC,cAAc,CAAC,CACtB;aACA,GAAG,EAAE,CAAC;IACX,CAAC;IAQD,KAAK,CAAC,MAAM,CACV,SAAiB,EACjB,GAAW,EACX,SAAkB;QAElB,IAAI,CAAC,GAAG,IAAI,CAAC,KAAK;aACf,MAAM,CAAC,SAAS,EAAE,WAAW,CAAC;aAC9B,MAAM,CAAC,CAAC,GAAG,EAAE,EAAE,CACd,GAAG,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC,IAAI,EAAoB,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAClE,CAAC;QACJ,IAAI,SAAS,KAAK,SAAS,EAAE,CAAC;YAC5B,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC;QACtD,CAAC;QACD,OAAO,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC;IACrC,CAAC;IAMD,KAAK,CAAC,gBAAgB,CAAC,GAAa;QAClC,IAAI,GAAG,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACrB,OAAO,EAAE,CAAC;QACZ,CAAC;QACD,OAAO,IAAI,CAAC,KAAK;aACd,MAAM,CAAC,GAAG,CAAC;aACX,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;aAClC,QAAQ,EAAE;aACV,GAAG,EAAE,CAAC;IACX,CAAC;CACF;AA9DD,oCA8DC"}
|
package/dist/db/models/index.js
CHANGED
|
@@ -16,6 +16,7 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
|
16
16
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
17
|
__exportStar(require("./funnels.model"), exports);
|
|
18
18
|
__exportStar(require("./marketing_events.model"), exports);
|
|
19
|
+
__exportStar(require("./marketing_preferences.model"), exports);
|
|
19
20
|
__exportStar(require("./marketing_sessions.model"), exports);
|
|
20
21
|
__exportStar(require("./marketing_settings.model"), exports);
|
|
21
22
|
__exportStar(require("./page_snapshots.model"), exports);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/db/models/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,kDAAgC;AAChC,2DAAyC;AACzC,6DAA2C;AAC3C,6DAA2C;AAC3C,yDAAuC;AACvC,6DAA2C;AAC3C,mDAAiC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/db/models/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,kDAAgC;AAChC,2DAAyC;AACzC,gEAA8C;AAC9C,6DAA2C;AAC3C,6DAA2C;AAC3C,yDAAuC;AACvC,6DAA2C;AAC3C,mDAAiC"}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { type Table } from "@antelopejs/interface-database";
|
|
2
2
|
import { type EventKind } from "@/types";
|
|
3
3
|
import { MarketingEvent } from "../tables/marketing_events.table";
|
|
4
|
+
type PageviewRow = Pick<MarketingEvent, "timestamp" | "url" | "sessionId">;
|
|
4
5
|
export interface EventRangeQuery<F extends keyof MarketingEvent> {
|
|
5
6
|
websiteIds: string[];
|
|
6
7
|
since: Date;
|
|
@@ -20,6 +21,22 @@ export interface ScrollDepthBucket {
|
|
|
20
21
|
depth: number;
|
|
21
22
|
views: number;
|
|
22
23
|
}
|
|
24
|
+
export type SampleRateQuery = Omit<ScrollDepthQuery, "url">;
|
|
25
|
+
export interface HourlyCountQuery {
|
|
26
|
+
websiteIds: string[];
|
|
27
|
+
since: Date;
|
|
28
|
+
until: Date;
|
|
29
|
+
kind: EventKind;
|
|
30
|
+
perSession: boolean;
|
|
31
|
+
}
|
|
32
|
+
export interface HourlyCountBucket {
|
|
33
|
+
hour: number;
|
|
34
|
+
count: number;
|
|
35
|
+
}
|
|
36
|
+
export interface SampleRateBucket {
|
|
37
|
+
sample: number;
|
|
38
|
+
views: number;
|
|
39
|
+
}
|
|
23
40
|
declare const MarketingEventsModel_base: {
|
|
24
41
|
new (database: import("@antelopejs/interface-database").SchemaInstance<any>): {
|
|
25
42
|
readonly table: Table<MarketingEvent>;
|
|
@@ -41,9 +58,14 @@ declare const MarketingEventsModel_base: {
|
|
|
41
58
|
export declare class MarketingEventsModel extends MarketingEventsModel_base {
|
|
42
59
|
queryRange<F extends keyof MarketingEvent>(query: EventRangeQuery<F>): Promise<Pick<MarketingEvent, F | "timestamp">[]>;
|
|
43
60
|
countScrollDepths(query: ScrollDepthQuery): Promise<ScrollDepthBucket[]>;
|
|
61
|
+
countDeclaredSampleRates(query: SampleRateQuery): Promise<SampleRateBucket[]>;
|
|
62
|
+
countHourly(query: HourlyCountQuery): Promise<HourlyCountBucket[]>;
|
|
44
63
|
insertMany(events: MarketingEvent[]): Promise<number>;
|
|
45
64
|
deleteHeatmapEvents(websiteId: string, url?: string): Promise<number>;
|
|
65
|
+
countHeatmapEvents(websiteId: string, url?: string): Promise<number>;
|
|
66
|
+
private heatmapEvents;
|
|
46
67
|
deleteOlderThan(cutoff: Date): Promise<number>;
|
|
47
68
|
deleteByWebsite(websiteId: string): Promise<number>;
|
|
69
|
+
getLatestPageview(websiteId: string, since: Date): Promise<PageviewRow | undefined>;
|
|
48
70
|
}
|
|
49
71
|
export {};
|
|
@@ -8,6 +8,7 @@ const constants_1 = require("@/types/constants");
|
|
|
8
8
|
const marketing_events_table_1 = require("../tables/marketing_events.table");
|
|
9
9
|
const EPOCH_LOWER_BOUND = new Date(0);
|
|
10
10
|
const SCROLL_KIND = "scroll";
|
|
11
|
+
const PAGEVIEW_KIND = "pageview";
|
|
11
12
|
class MarketingEventsModel extends (0, interface_database_decorators_1.BasicDataModel)(marketing_events_table_1.MarketingEvent, marketing_events_table_1.marketingEventsTableName) {
|
|
12
13
|
async queryRange(query) {
|
|
13
14
|
if (query.websiteIds.length === 0) {
|
|
@@ -54,6 +55,56 @@ class MarketingEventsModel extends (0, interface_database_decorators_1.BasicData
|
|
|
54
55
|
}))
|
|
55
56
|
.run();
|
|
56
57
|
}
|
|
58
|
+
async countDeclaredSampleRates(query) {
|
|
59
|
+
if (query.websiteIds.length === 0) {
|
|
60
|
+
return [];
|
|
61
|
+
}
|
|
62
|
+
return this.table
|
|
63
|
+
.getAll(query.websiteIds, "websiteId")
|
|
64
|
+
.filter((doc) => doc.key("timestamp").ge(query.since))
|
|
65
|
+
.filter((doc) => doc.key("timestamp").le(query.until))
|
|
66
|
+
.filter((doc) => doc.key("kind").eq(PAGEVIEW_KIND))
|
|
67
|
+
.filter((doc) => {
|
|
68
|
+
const sample = doc.key("data").cast().key("sample");
|
|
69
|
+
return sample.ge(0).and(sample.le(1));
|
|
70
|
+
})
|
|
71
|
+
.map((doc) => ({
|
|
72
|
+
sample: doc.key("data").cast().key("sample"),
|
|
73
|
+
}))
|
|
74
|
+
.group("sample", (stream, sample) => ({
|
|
75
|
+
sample,
|
|
76
|
+
views: stream.count(),
|
|
77
|
+
}))
|
|
78
|
+
.run();
|
|
79
|
+
}
|
|
80
|
+
async countHourly(query) {
|
|
81
|
+
if (query.websiteIds.length === 0) {
|
|
82
|
+
return [];
|
|
83
|
+
}
|
|
84
|
+
const sinceSeconds = query.since.getTime() / constants_1.MS_PER_SECOND;
|
|
85
|
+
const hours = this.table
|
|
86
|
+
.getAll(query.websiteIds, "websiteId")
|
|
87
|
+
.filter((doc) => doc.key("timestamp").ge(query.since))
|
|
88
|
+
.filter((doc) => doc.key("timestamp").le(query.until))
|
|
89
|
+
.filter((doc) => doc.key("kind").eq(query.kind))
|
|
90
|
+
.map((doc) => ({
|
|
91
|
+
sessionId: doc.key("sessionId"),
|
|
92
|
+
hour: doc
|
|
93
|
+
.key("timestamp")
|
|
94
|
+
.epoch()
|
|
95
|
+
.sub(sinceSeconds)
|
|
96
|
+
.mul(constants_1.MS_PER_SECOND)
|
|
97
|
+
.round()
|
|
98
|
+
.div(constants_1.MS_PER_HOUR)
|
|
99
|
+
.floor(),
|
|
100
|
+
}));
|
|
101
|
+
const counted = query.perSession
|
|
102
|
+
? hours.group("sessionId", (stream) => ({ hour: stream.min("hour") }))
|
|
103
|
+
: hours;
|
|
104
|
+
return counted
|
|
105
|
+
.group("hour", (stream, hour) => ({ hour, count: stream.count() }))
|
|
106
|
+
.run();
|
|
107
|
+
}
|
|
57
108
|
async insertMany(events) {
|
|
58
109
|
if (events.length === 0) {
|
|
59
110
|
return 0;
|
|
@@ -63,13 +114,16 @@ class MarketingEventsModel extends (0, interface_database_decorators_1.BasicData
|
|
|
63
114
|
return ids.length;
|
|
64
115
|
}
|
|
65
116
|
async deleteHeatmapEvents(websiteId, url) {
|
|
66
|
-
|
|
117
|
+
return this.heatmapEvents(websiteId, url).delete().run();
|
|
118
|
+
}
|
|
119
|
+
async countHeatmapEvents(websiteId, url) {
|
|
120
|
+
return this.heatmapEvents(websiteId, url).count().run();
|
|
121
|
+
}
|
|
122
|
+
heatmapEvents(websiteId, url) {
|
|
123
|
+
const events = this.table
|
|
67
124
|
.getAll([websiteId], "websiteId")
|
|
68
125
|
.filter((doc) => interface_database_1.ValueProxy.constant(types_1.HEATMAP_EVENT_KINDS).includes(doc.key("kind")));
|
|
69
|
-
|
|
70
|
-
q = q.filter((doc) => doc.key("url").eq(url));
|
|
71
|
-
}
|
|
72
|
-
return q.delete().run();
|
|
126
|
+
return url ? events.filter((doc) => doc.key("url").eq(url)) : events;
|
|
73
127
|
}
|
|
74
128
|
async deleteOlderThan(cutoff) {
|
|
75
129
|
return this.table
|
|
@@ -80,6 +134,17 @@ class MarketingEventsModel extends (0, interface_database_decorators_1.BasicData
|
|
|
80
134
|
async deleteByWebsite(websiteId) {
|
|
81
135
|
return this.table.getAll([websiteId], "websiteId").delete().run();
|
|
82
136
|
}
|
|
137
|
+
async getLatestPageview(websiteId, since) {
|
|
138
|
+
const rows = (await this.table
|
|
139
|
+
.getAll([websiteId], "websiteId")
|
|
140
|
+
.filter((doc) => doc.key("timestamp").ge(since))
|
|
141
|
+
.filter((doc) => doc.key("kind").eq(PAGEVIEW_KIND))
|
|
142
|
+
.orderBy("timestamp", "desc")
|
|
143
|
+
.slice(0, 1)
|
|
144
|
+
.pluck("timestamp", "url", "sessionId")
|
|
145
|
+
.run());
|
|
146
|
+
return rows[0];
|
|
147
|
+
}
|
|
83
148
|
}
|
|
84
149
|
exports.MarketingEventsModel = MarketingEventsModel;
|
|
85
150
|
//# sourceMappingURL=marketing_events.model.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"marketing_events.model.js","sourceRoot":"","sources":["../../../src/db/models/marketing_events.model.ts"],"names":[],"mappings":";;;AAAA,uEAAwE;AACxE,6FAA2E;AAC3E,mCAIiB;AACjB,
|
|
1
|
+
{"version":3,"file":"marketing_events.model.js","sourceRoot":"","sources":["../../../src/db/models/marketing_events.model.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { MarketingPreferences } from "../tables/marketing_preferences.table";
|
|
2
|
+
declare const MarketingPreferencesModel_base: {
|
|
3
|
+
new (database: import("@antelopejs/interface-database").SchemaInstance<any>): {
|
|
4
|
+
readonly table: import("@antelopejs/interface-database").Table<MarketingPreferences>;
|
|
5
|
+
readonly database: import("@antelopejs/interface-database").SchemaInstance<any>;
|
|
6
|
+
get(id: string): PromiseLike<MarketingPreferences | undefined>;
|
|
7
|
+
getBy(index: keyof MarketingPreferences, ...keys: any[]): PromiseLike<MarketingPreferences[]>;
|
|
8
|
+
getAll(): PromiseLike<MarketingPreferences[]>;
|
|
9
|
+
insert(obj: import("@antelopejs/interface-database-decorators").DeepPartial<MarketingPreferences> | import("@antelopejs/interface-database-decorators").DeepPartial<MarketingPreferences>[], options?: import("@antelopejs/interface-database-decorators").ValidateOptions): Promise<string[]>;
|
|
10
|
+
update(id: string, obj: import("@antelopejs/interface-database-decorators").DeepPartial<MarketingPreferences>, options?: import("@antelopejs/interface-database-decorators").ValidateOptions): Promise<number>;
|
|
11
|
+
update(obj: import("@antelopejs/interface-database-decorators").DeepPartial<MarketingPreferences>, options?: import("@antelopejs/interface-database-decorators").ValidateOptions): Promise<number>;
|
|
12
|
+
delete(id: string): Promise<number>;
|
|
13
|
+
};
|
|
14
|
+
readonly schemaName: string;
|
|
15
|
+
fromPlainData(obj: any): MarketingPreferences;
|
|
16
|
+
fromDatabase(obj: any): MarketingPreferences | undefined;
|
|
17
|
+
toDatabase(obj: any): Record<string, any>;
|
|
18
|
+
validate(obj: unknown, options?: import("@antelopejs/interface-database-decorators").ValidateInputOptions): import("@antelopejs/interface-database-decorators").ValidationResult;
|
|
19
|
+
};
|
|
20
|
+
export declare class MarketingPreferencesModel extends MarketingPreferencesModel_base {
|
|
21
|
+
getWebsiteId(userId: string): Promise<string | undefined>;
|
|
22
|
+
setWebsiteId(userId: string, websiteId: string): Promise<void>;
|
|
23
|
+
forget(userId: string): Promise<void>;
|
|
24
|
+
}
|
|
25
|
+
export {};
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.MarketingPreferencesModel = void 0;
|
|
4
|
+
const interface_database_decorators_1 = require("@antelopejs/interface-database-decorators");
|
|
5
|
+
const marketing_preferences_table_1 = require("../tables/marketing_preferences.table");
|
|
6
|
+
class MarketingPreferencesModel extends (0, interface_database_decorators_1.BasicDataModel)(marketing_preferences_table_1.MarketingPreferences, marketing_preferences_table_1.marketingPreferencesTableName) {
|
|
7
|
+
async getWebsiteId(userId) {
|
|
8
|
+
const row = await this.table.get(userId).run();
|
|
9
|
+
return row?.websiteId;
|
|
10
|
+
}
|
|
11
|
+
async setWebsiteId(userId, websiteId) {
|
|
12
|
+
const existing = await this.table.get(userId).run();
|
|
13
|
+
if (existing) {
|
|
14
|
+
await this.table
|
|
15
|
+
.get(userId)
|
|
16
|
+
.update({ websiteId, updatedAt: new Date() })
|
|
17
|
+
.run();
|
|
18
|
+
return;
|
|
19
|
+
}
|
|
20
|
+
await this.table
|
|
21
|
+
.insert({ _id: userId, websiteId, updatedAt: new Date() })
|
|
22
|
+
.run();
|
|
23
|
+
}
|
|
24
|
+
async forget(userId) {
|
|
25
|
+
await this.table.get(userId).delete().run();
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
exports.MarketingPreferencesModel = MarketingPreferencesModel;
|
|
29
|
+
//# sourceMappingURL=marketing_preferences.model.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"marketing_preferences.model.js","sourceRoot":"","sources":["../../../src/db/models/marketing_preferences.model.ts"],"names":[],"mappings":";;;AAAA,6FAA2E;AAC3E,uFAG+C;AAE/C,MAAa,yBAA0B,SAAQ,IAAA,8CAAc,EAC3D,kDAAoB,EACpB,2DAA6B,CAC9B;IACC,KAAK,CAAC,YAAY,CAAC,MAAc;QAC/B,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC;QAC/C,OAAO,GAAG,EAAE,SAAS,CAAC;IACxB,CAAC;IAED,KAAK,CAAC,YAAY,CAAC,MAAc,EAAE,SAAiB;QAClD,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC;QACpD,IAAI,QAAQ,EAAE,CAAC;YACb,MAAM,IAAI,CAAC,KAAK;iBACb,GAAG,CAAC,MAAM,CAAC;iBACX,MAAM,CAAC,EAAE,SAAS,EAAE,SAAS,EAAE,IAAI,IAAI,EAAE,EAAE,CAAC;iBAC5C,GAAG,EAAE,CAAC;YACT,OAAO;QACT,CAAC;QACD,MAAM,IAAI,CAAC,KAAK;aACb,MAAM,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,SAAS,EAAE,SAAS,EAAE,IAAI,IAAI,EAAE,EAAE,CAAC;aACzD,GAAG,EAAE,CAAC;IACX,CAAC;IAED,KAAK,CAAC,MAAM,CAAC,MAAc;QACzB,MAAM,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC;IAC9C,CAAC;CACF;AA1BD,8DA0BC"}
|
|
@@ -2,7 +2,7 @@ import { MarketingSession } from "../tables/marketing_sessions.table";
|
|
|
2
2
|
export interface SessionActivityDelta {
|
|
3
3
|
pageviews: number;
|
|
4
4
|
events: number;
|
|
5
|
-
lastSeenAt
|
|
5
|
+
lastSeenAt?: Date;
|
|
6
6
|
exitUrl?: string;
|
|
7
7
|
}
|
|
8
8
|
declare const MarketingSessionsModel_base: {
|
|
@@ -27,6 +27,7 @@ export declare class MarketingSessionsModel extends MarketingSessionsModel_base
|
|
|
27
27
|
findLatestForVisitor(websiteId: string, visitorId: string): Promise<MarketingSession | undefined>;
|
|
28
28
|
getLastActivityByWebsites(websiteIds: string[]): Promise<Map<string, number>>;
|
|
29
29
|
recordActivity(sessionId: string, delta: SessionActivityDelta): Promise<void>;
|
|
30
|
+
getLatest(websiteId: string): Promise<MarketingSession | undefined>;
|
|
30
31
|
deleteOlderThan(cutoff: Date): Promise<number>;
|
|
31
32
|
deleteByWebsite(websiteId: string): Promise<number>;
|
|
32
33
|
}
|
|
@@ -38,11 +38,21 @@ class MarketingSessionsModel extends (0, interface_database_decorators_1.BasicDa
|
|
|
38
38
|
.update((doc) => ({
|
|
39
39
|
pageviewsCount: doc.key("pageviewsCount").add(delta.pageviews),
|
|
40
40
|
eventsCount: doc.key("eventsCount").add(delta.events),
|
|
41
|
-
|
|
41
|
+
...(delta.lastSeenAt !== undefined && {
|
|
42
|
+
lastSeenAt: delta.lastSeenAt,
|
|
43
|
+
}),
|
|
42
44
|
...(delta.exitUrl !== undefined && { exitUrl: delta.exitUrl }),
|
|
43
45
|
}))
|
|
44
46
|
.run();
|
|
45
47
|
}
|
|
48
|
+
async getLatest(websiteId) {
|
|
49
|
+
const rows = await this.table
|
|
50
|
+
.getAll(websiteId, "websiteId")
|
|
51
|
+
.orderBy("lastSeenAt", "desc")
|
|
52
|
+
.slice(0, 1)
|
|
53
|
+
.run();
|
|
54
|
+
return rows[0];
|
|
55
|
+
}
|
|
46
56
|
async deleteOlderThan(cutoff) {
|
|
47
57
|
return (0, retention_1.deleteExpiredRows)(this.table, "lastSeenAt", cutoff);
|
|
48
58
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"marketing_sessions.model.js","sourceRoot":"","sources":["../../../src/db/models/marketing_sessions.model.ts"],"names":[],"mappings":";;;AAAA,6FAA2E;AAC3E,iFAG4C;AAC5C,2CAAgD;
|
|
1
|
+
{"version":3,"file":"marketing_sessions.model.js","sourceRoot":"","sources":["../../../src/db/models/marketing_sessions.model.ts"],"names":[],"mappings":"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"}
|
|
@@ -19,9 +19,10 @@ declare const PageSnapshotsModel_base: {
|
|
|
19
19
|
};
|
|
20
20
|
export declare class PageSnapshotsModel extends PageSnapshotsModel_base {
|
|
21
21
|
getByPath(websiteId: string, url: string): Promise<PageSnapshot[]>;
|
|
22
|
-
countByWebsite(websiteId: string): Promise<number>;
|
|
22
|
+
countByWebsite(websiteId: string, url?: string): Promise<number>;
|
|
23
23
|
upsert(row: PageSnapshot): Promise<void>;
|
|
24
24
|
deleteByWebsite(websiteId: string, url?: string): Promise<number>;
|
|
25
25
|
deleteOlderThan(cutoff: Date): Promise<number>;
|
|
26
|
+
private byWebsite;
|
|
26
27
|
}
|
|
27
28
|
export {};
|
|
@@ -11,22 +11,22 @@ class PageSnapshotsModel extends (0, interface_database_decorators_1.BasicDataMo
|
|
|
11
11
|
.filter((doc) => doc.key("url").eq(url))
|
|
12
12
|
.run();
|
|
13
13
|
}
|
|
14
|
-
async countByWebsite(websiteId) {
|
|
15
|
-
return this.
|
|
14
|
+
async countByWebsite(websiteId, url) {
|
|
15
|
+
return this.byWebsite(websiteId, url).count().run();
|
|
16
16
|
}
|
|
17
17
|
async upsert(row) {
|
|
18
18
|
await this.table.insert(row, { conflict: "replace" }).run();
|
|
19
19
|
}
|
|
20
20
|
async deleteByWebsite(websiteId, url) {
|
|
21
|
-
|
|
22
|
-
if (url) {
|
|
23
|
-
q = q.filter((doc) => doc.key("url").eq(url));
|
|
24
|
-
}
|
|
25
|
-
return q.delete().run();
|
|
21
|
+
return this.byWebsite(websiteId, url).delete().run();
|
|
26
22
|
}
|
|
27
23
|
async deleteOlderThan(cutoff) {
|
|
28
24
|
return (0, retention_1.deleteExpiredRows)(this.table, "capturedAt", cutoff);
|
|
29
25
|
}
|
|
26
|
+
byWebsite(websiteId, url) {
|
|
27
|
+
const rows = this.table.getAll([websiteId], "websiteId");
|
|
28
|
+
return url ? rows.filter((doc) => doc.key("url").eq(url)) : rows;
|
|
29
|
+
}
|
|
30
30
|
}
|
|
31
31
|
exports.PageSnapshotsModel = PageSnapshotsModel;
|
|
32
32
|
//# sourceMappingURL=page_snapshots.model.js.map
|