@antelopejs/dms-marketing 0.2.5 → 0.3.1
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 +1 -2
- package/dist/data-api/tenant-scope.d.ts +0 -2
- package/dist/data-api/tenant-scope.js +0 -2
- package/dist/data-api/tenant-scope.js.map +1 -1
- package/dist/db/models/marketing_sessions.model.js +15 -11
- package/dist/db/models/marketing_sessions.model.js.map +1 -1
- package/dist/db/models/marketing_settings.model.d.ts +2 -0
- package/dist/db/models/marketing_settings.model.js +18 -2
- package/dist/db/models/marketing_settings.model.js.map +1 -1
- package/dist/db/tables/marketing_sessions.table.js +3 -0
- package/dist/db/tables/marketing_sessions.table.js.map +1 -1
- package/dist/pages/module.d.ts +1 -1
- package/dist/pages/settings/form.d.ts +1 -1
- package/dist/pages/settings/page.d.ts +1 -1
- package/dist/services/experiments/assign.d.ts +1 -2
- package/dist/services/experiments/assign.js +0 -1
- package/dist/services/experiments/assign.js.map +1 -1
- package/dist/services/experiments/results.d.ts +2 -1
- package/dist/services/funnels/compute.d.ts +2 -1
- package/dist/services/ingest-guard.d.ts +2 -1
- package/dist/services/ingest-guard.js +1 -2
- package/dist/services/ingest-guard.js.map +1 -1
- package/dist/services/settings.js +13 -15
- package/dist/services/settings.js.map +1 -1
- package/dist/services/snapshots.d.ts +0 -1
- package/dist/services/snapshots.js +0 -1
- package/dist/services/snapshots.js.map +1 -1
- package/dist/types/constants.d.ts +0 -3
- package/dist/types/constants.js +7 -7
- package/dist/types/constants.js.map +1 -1
- package/dist/types/events.d.ts +21 -21
- package/dist/types/events.js +5 -5
- package/dist/types/events.js.map +1 -1
- package/dist/types/settings.d.ts +2 -2
- package/dist/types/snapshots.d.ts +20 -19
- package/dist/types/snapshots.js +3 -3
- package/dist/types/snapshots.js.map +1 -1
- package/dist/types/statistics.d.ts +3 -2
- package/dist/types/statistics.js +3 -4
- package/dist/types/statistics.js.map +1 -1
- package/dist/utils/experiment-type.d.ts +2 -2
- package/dist/utils/funnel-steps-type.d.ts +7 -7
- package/frontend-vue/tests/stubs/frontend-module.ts +1 -3
- package/package.json +11 -13
package/README.md
CHANGED
|
@@ -123,8 +123,7 @@ project whose root `dms.frontend.ts` registers every component under the
|
|
|
123
123
|
`DmsMarketing` prefix, plus its own i18n catalogs. It is a separate project
|
|
124
124
|
with a lockfile of its own, published inside this package's tarball and
|
|
125
125
|
materialized by the DMS frontend loader (`ajs dms`) into the console's Inertia
|
|
126
|
-
workspace.
|
|
127
|
-
the real loader — client bundle, SSR bundle and vue-tsc.
|
|
126
|
+
workspace. Its own vitest suite runs through `pnpm test`.
|
|
128
127
|
|
|
129
128
|
The interface this module implements is the workspace's other package,
|
|
130
129
|
`packages/interface-dms-marketing`, published under the same `@antelopejs`
|
|
@@ -1,8 +1,6 @@
|
|
|
1
1
|
import type { RequestContext } from "@antelopejs/interface-api";
|
|
2
2
|
import type { DataControllerCallback } from "@antelopejs/interface-data-api";
|
|
3
3
|
export type TenantGate = (ctx: RequestContext, id: string) => Promise<unknown>;
|
|
4
|
-
export declare function withTenantScope(base: DataControllerCallback): DataControllerCallback;
|
|
5
|
-
export declare function withTenantGate(gate: TenantGate): (base: DataControllerCallback) => DataControllerCallback;
|
|
6
4
|
export declare function tenantScopedReadRoutes(gate: TenantGate): {
|
|
7
5
|
get: DataControllerCallback;
|
|
8
6
|
list: DataControllerCallback;
|
|
@@ -1,7 +1,5 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.withTenantScope = withTenantScope;
|
|
4
|
-
exports.withTenantGate = withTenantGate;
|
|
5
3
|
exports.tenantScopedReadRoutes = tenantScopedReadRoutes;
|
|
6
4
|
const base_1 = require("@antelopejs/interface-dms/base");
|
|
7
5
|
const request_tenant_1 = require("@antelopejs/interface-dms/request-tenant");
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tenant-scope.js","sourceRoot":"","sources":["../../src/data-api/tenant-scope.ts"],"names":[],"mappings":";;
|
|
1
|
+
{"version":3,"file":"tenant-scope.js","sourceRoot":"","sources":["../../src/data-api/tenant-scope.ts"],"names":[],"mappings":";;AA8EA,wDAUC;AApFD,yDAAiE;AACjE,6EAA8E;AAkB9E,SAAS,eAAe,CAAC,IAA4B;IACnD,OAAO;QACL,GAAG,IAAI;QACP,IAAI,EAAE,KAAK,WAET,GAAmB,EACnB,UAAqC,EACrC,GAAG,IAAe;YAMlB,MAAM,MAAM,GAA8B;gBACxC,GAAG,UAAU;gBACb,OAAO,EAAE;oBACP,GAAG,UAAU,EAAE,OAAO;oBAGtB,QAAQ,EAAE,CAAC,IAAA,mCAAkB,EAAC,GAAG,CAAC,EAAE,IAAI,CAA2B;iBACpE;aACF,CAAC;YACF,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC,CAAC;QACpD,CAAC;KACF,CAAC;AACJ,CAAC;AAOD,SAAS,cAAc,CACrB,IAAgB;IAEhB,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;QAChB,GAAG,IAAI;QACP,IAAI,EAAE,KAAK,WAET,GAAmB,EACnB,MAAgC,EAChC,GAAG,IAAe;YAElB,MAAM,IAAI,CAAC,GAAG,EAAE,MAAM,CAAC,EAAE,CAAC,CAAC;YAC3B,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC,CAAC;QACpD,CAAC;KACF,CAAC,CAAC;AACL,CAAC;AAQD,SAAgB,sBAAsB,CAAC,IAAgB;IACrD,OAAO;QACL,GAAG,EAAE,cAAc,CAAC,IAAI,CAAC,CAAC,sBAAe,CAAC,GAAG,CAAC;QAC9C,IAAI,EAAE,eAAe,CAAC,sBAAe,CAAC,IAAI,CAAC;QAC3C,KAAK,EAAE,eAAe,CAAC,sBAAe,CAAC,KAAK,CAAC;QAC7C,MAAM,EAAE;YACN,GAAG,sBAAe,CAAC,MAAM;YACzB,QAAQ,EAAE,eAAe,CAAC,sBAAe,CAAC,MAAM,CAAC,QAAQ,CAAC;SAC3D;KACF,CAAC;AACJ,CAAC"}
|
|
@@ -15,18 +15,22 @@ class MarketingSessionsModel extends (0, interface_database_decorators_1.BasicDa
|
|
|
15
15
|
return results[0];
|
|
16
16
|
}
|
|
17
17
|
async getLastActivityByWebsites(websiteIds) {
|
|
18
|
-
|
|
19
|
-
|
|
18
|
+
const latest = await Promise.all(websiteIds.map(async (websiteId) => {
|
|
19
|
+
const rows = await this.table
|
|
20
|
+
.getAll(websiteId, "websiteId")
|
|
21
|
+
.orderBy("lastSeenAt", "desc")
|
|
22
|
+
.slice(0, 1)
|
|
23
|
+
.pluck("lastSeenAt")
|
|
24
|
+
.run();
|
|
25
|
+
return [websiteId, rows[0]?.lastSeenAt];
|
|
26
|
+
}));
|
|
27
|
+
const activity = new Map();
|
|
28
|
+
for (const [websiteId, lastSeenAt] of latest) {
|
|
29
|
+
if (lastSeenAt != null) {
|
|
30
|
+
activity.set(websiteId, new Date(lastSeenAt).getTime());
|
|
31
|
+
}
|
|
20
32
|
}
|
|
21
|
-
|
|
22
|
-
.getAll(websiteIds, "websiteId")
|
|
23
|
-
.group("websiteId", (stream, websiteId) => ({
|
|
24
|
-
websiteId,
|
|
25
|
-
lastSeenAt: stream.max("lastSeenAt"),
|
|
26
|
-
}))
|
|
27
|
-
.filter((row) => row.key("lastSeenAt").ne(null))
|
|
28
|
-
.run();
|
|
29
|
-
return new Map(rows.map((row) => [row.websiteId, new Date(row.lastSeenAt).getTime()]));
|
|
33
|
+
return activity;
|
|
30
34
|
}
|
|
31
35
|
async recordActivity(sessionId, delta) {
|
|
32
36
|
await this.table
|
|
@@ -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;AAShD,MAAa,sBAAuB,SAAQ,IAAA,8CAAc,EACxD,2CAAgB,EAChB,qDAA0B,CAC3B;IAMC,KAAK,CAAC,oBAAoB,CACxB,SAAiB,EACjB,SAAiB;QAEjB,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,KAAK;aAC7B,MAAM,CAAC,SAAS,EAAE,WAAW,CAAC;aAC9B,MAAM,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC,EAAE,CAAC,SAAS,CAAC,CAAC;aACnD,OAAO,CAAC,WAAW,EAAE,MAAM,CAAC;aAC5B,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC;aACX,GAAG,EAAE,CAAC;QACT,OAAO,OAAO,CAAC,CAAC,CAAC,CAAC;IACpB,CAAC;
|
|
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;AAShD,MAAa,sBAAuB,SAAQ,IAAA,8CAAc,EACxD,2CAAgB,EAChB,qDAA0B,CAC3B;IAMC,KAAK,CAAC,oBAAoB,CACxB,SAAiB,EACjB,SAAiB;QAEjB,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,KAAK;aAC7B,MAAM,CAAC,SAAS,EAAE,WAAW,CAAC;aAC9B,MAAM,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC,EAAE,CAAC,SAAS,CAAC,CAAC;aACnD,OAAO,CAAC,WAAW,EAAE,MAAM,CAAC;aAC5B,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC;aACX,GAAG,EAAE,CAAC;QACT,OAAO,OAAO,CAAC,CAAC,CAAC,CAAC;IACpB,CAAC;IAOD,KAAK,CAAC,yBAAyB,CAC7B,UAAoB;QAEpB,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,GAAG,CAC9B,UAAU,CAAC,GAAG,CAAC,KAAK,EAAE,SAAS,EAAE,EAAE;YACjC,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,KAAK;iBAC1B,MAAM,CAAC,SAAS,EAAE,WAAW,CAAC;iBAC9B,OAAO,CAAC,YAAY,EAAE,MAAM,CAAC;iBAC7B,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC;iBACX,KAAK,CAAC,YAAY,CAAC;iBACnB,GAAG,EAAE,CAAC;YACT,OAAO,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,UAAU,CAAU,CAAC;QACnD,CAAC,CAAC,CACH,CAAC;QACF,MAAM,QAAQ,GAAG,IAAI,GAAG,EAAkB,CAAC;QAC3C,KAAK,MAAM,CAAC,SAAS,EAAE,UAAU,CAAC,IAAI,MAAM,EAAE,CAAC;YAC7C,IAAI,UAAU,IAAI,IAAI,EAAE,CAAC;gBACvB,QAAQ,CAAC,GAAG,CAAC,SAAS,EAAE,IAAI,IAAI,CAAC,UAAU,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC;YAC1D,CAAC;QACH,CAAC;QACD,OAAO,QAAQ,CAAC;IAClB,CAAC;IAQD,KAAK,CAAC,cAAc,CAClB,SAAiB,EACjB,KAA2B;QAE3B,MAAM,IAAI,CAAC,KAAK;aACb,GAAG,CAAC,SAAS,CAAC;aACd,MAAM,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;YAChB,cAAc,EAAE,GAAG,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,SAAS,CAAC;YAC9D,WAAW,EAAE,GAAG,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC;YACrD,UAAU,EAAE,KAAK,CAAC,UAAU;YAC5B,GAAG,CAAC,KAAK,CAAC,OAAO,KAAK,SAAS,IAAI,EAAE,OAAO,EAAE,KAAK,CAAC,OAAO,EAAE,CAAC;SAC/D,CAAC,CAAC;aACF,GAAG,EAAE,CAAC;IACX,CAAC;IAED,KAAK,CAAC,eAAe,CAAC,MAAY;QAChC,OAAO,IAAA,6BAAiB,EAAC,IAAI,CAAC,KAAK,EAAE,YAAY,EAAE,MAAM,CAAC,CAAC;IAC7D,CAAC;IAED,KAAK,CAAC,eAAe,CAAC,SAAiB;QACrC,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,EAAE,WAAW,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC;IACpE,CAAC;CACF;AA9ED,wDA8EC"}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { MarketingSettings } from "../tables/marketing_settings.table";
|
|
2
|
+
export declare const MARKETING_SETTINGS_ID = "settings";
|
|
2
3
|
declare const MarketingSettingsModel_base: {
|
|
3
4
|
new (database: import("@antelopejs/interface-database").SchemaInstance<any>): {
|
|
4
5
|
readonly table: import("@antelopejs/interface-database").Table<MarketingSettings>;
|
|
@@ -19,5 +20,6 @@ declare const MarketingSettingsModel_base: {
|
|
|
19
20
|
};
|
|
20
21
|
export declare class MarketingSettingsModel extends MarketingSettingsModel_base {
|
|
21
22
|
getSingleton(): Promise<MarketingSettings | undefined>;
|
|
23
|
+
insertSingleton(doc: MarketingSettings): Promise<MarketingSettings>;
|
|
22
24
|
}
|
|
23
25
|
export {};
|
|
@@ -1,13 +1,29 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.MarketingSettingsModel = void 0;
|
|
3
|
+
exports.MarketingSettingsModel = exports.MARKETING_SETTINGS_ID = void 0;
|
|
4
4
|
const interface_database_decorators_1 = require("@antelopejs/interface-database-decorators");
|
|
5
5
|
const marketing_settings_table_1 = require("../tables/marketing_settings.table");
|
|
6
|
+
exports.MARKETING_SETTINGS_ID = "settings";
|
|
6
7
|
class MarketingSettingsModel extends (0, interface_database_decorators_1.BasicDataModel)(marketing_settings_table_1.MarketingSettings, marketing_settings_table_1.marketingSettingsTableName) {
|
|
7
8
|
async getSingleton() {
|
|
8
|
-
const row = await this.table.
|
|
9
|
+
const row = (await this.table.get(exports.MARKETING_SETTINGS_ID).run()) ??
|
|
10
|
+
(await this.table.nth(0).run());
|
|
9
11
|
return MarketingSettingsModel.fromDatabase(row);
|
|
10
12
|
}
|
|
13
|
+
async insertSingleton(doc) {
|
|
14
|
+
doc._id = exports.MARKETING_SETTINGS_ID;
|
|
15
|
+
try {
|
|
16
|
+
await this.insert(doc);
|
|
17
|
+
return doc;
|
|
18
|
+
}
|
|
19
|
+
catch (error) {
|
|
20
|
+
const winner = await this.getSingleton();
|
|
21
|
+
if (!winner) {
|
|
22
|
+
throw error;
|
|
23
|
+
}
|
|
24
|
+
return winner;
|
|
25
|
+
}
|
|
26
|
+
}
|
|
11
27
|
}
|
|
12
28
|
exports.MarketingSettingsModel = MarketingSettingsModel;
|
|
13
29
|
//# sourceMappingURL=marketing_settings.model.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"marketing_settings.model.js","sourceRoot":"","sources":["../../../src/db/models/marketing_settings.model.ts"],"names":[],"mappings":";;;AAAA,6FAA2E;AAC3E,iFAG4C;
|
|
1
|
+
{"version":3,"file":"marketing_settings.model.js","sourceRoot":"","sources":["../../../src/db/models/marketing_settings.model.ts"],"names":[],"mappings":";;;AAAA,6FAA2E;AAC3E,iFAG4C;AAO/B,QAAA,qBAAqB,GAAG,UAAU,CAAC;AAEhD,MAAa,sBAAuB,SAAQ,IAAA,8CAAc,EACxD,4CAAiB,EACjB,qDAA0B,CAC3B;IAGC,KAAK,CAAC,YAAY;QAChB,MAAM,GAAG,GACP,CAAC,MAAM,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,6BAAqB,CAAC,CAAC,GAAG,EAAE,CAAC;YACnD,CAAC,MAAM,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC;QAClC,OAAO,sBAAsB,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC;IAClD,CAAC;IASD,KAAK,CAAC,eAAe,CAAC,GAAsB;QAC1C,GAAG,CAAC,GAAG,GAAG,6BAAqB,CAAC;QAChC,IAAI,CAAC;YACH,MAAM,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;YACvB,OAAO,GAAG,CAAC;QACb,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,YAAY,EAAE,CAAC;YACzC,IAAI,CAAC,MAAM,EAAE,CAAC;gBACZ,MAAM,KAAK,CAAC;YACd,CAAC;YACD,OAAO,MAAM,CAAC;QAChB,CAAC;IACH,CAAC;CACF;AAjCD,wDAiCC"}
|
|
@@ -14,11 +14,13 @@ const interface_database_decorators_1 = require("@antelopejs/interface-database-
|
|
|
14
14
|
const constants_1 = require("@antelopejs/interface-dms/constants");
|
|
15
15
|
exports.marketingSessionsTableName = "marketing_sessions";
|
|
16
16
|
const VISITOR_SESSION_INDEX = "websiteId_visitorId_startedAt";
|
|
17
|
+
const LAST_ACTIVITY_INDEX = "websiteId_lastSeenAt";
|
|
17
18
|
let MarketingSession = class MarketingSession extends interface_database_decorators_1.Table {
|
|
18
19
|
};
|
|
19
20
|
exports.MarketingSession = MarketingSession;
|
|
20
21
|
__decorate([
|
|
21
22
|
(0, interface_database_decorators_1.Index)({ group: VISITOR_SESSION_INDEX }),
|
|
23
|
+
(0, interface_database_decorators_1.Index)({ group: LAST_ACTIVITY_INDEX }),
|
|
22
24
|
(0, interface_database_decorators_1.Field)("string"),
|
|
23
25
|
__metadata("design:type", String)
|
|
24
26
|
], MarketingSession.prototype, "websiteId", void 0);
|
|
@@ -33,6 +35,7 @@ __decorate([
|
|
|
33
35
|
__metadata("design:type", Date)
|
|
34
36
|
], MarketingSession.prototype, "startedAt", void 0);
|
|
35
37
|
__decorate([
|
|
38
|
+
(0, interface_database_decorators_1.Index)({ group: LAST_ACTIVITY_INDEX }),
|
|
36
39
|
(0, interface_database_decorators_1.Index)(),
|
|
37
40
|
(0, interface_database_decorators_1.Field)("date"),
|
|
38
41
|
__metadata("design:type", Date)
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"marketing_sessions.table.js","sourceRoot":"","sources":["../../../src/db/tables/marketing_sessions.table.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,6FAKmD;AACnD,mEAAyE;AAE5D,QAAA,0BAA0B,GAAG,oBAAoB,CAAC;AAS/D,MAAM,qBAAqB,GAAG,+BAA+B,CAAC;
|
|
1
|
+
{"version":3,"file":"marketing_sessions.table.js","sourceRoot":"","sources":["../../../src/db/tables/marketing_sessions.table.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,6FAKmD;AACnD,mEAAyE;AAE5D,QAAA,0BAA0B,GAAG,oBAAoB,CAAC;AAS/D,MAAM,qBAAqB,GAAG,+BAA+B,CAAC;AAO9D,MAAM,mBAAmB,GAAG,sBAAsB,CAAC;AAS5C,IAAM,gBAAgB,GAAtB,MAAM,gBAAiB,SAAQ,qCAAK;CAkF1C,CAAA;AAlFY,4CAAgB;AAInB;IAHP,IAAA,qCAAK,EAAC,EAAE,KAAK,EAAE,qBAAqB,EAAE,CAAC;IACvC,IAAA,qCAAK,EAAC,EAAE,KAAK,EAAE,mBAAmB,EAAE,CAAC;IACrC,IAAA,qCAAK,EAAC,QAAQ,CAAC;;mDACU;AAIlB;IAFP,IAAA,qCAAK,EAAC,EAAE,KAAK,EAAE,qBAAqB,EAAE,CAAC;IACvC,IAAA,qCAAK,EAAC,QAAQ,CAAC;;mDACU;AAIlB;IAFP,IAAA,qCAAK,EAAC,EAAE,KAAK,EAAE,qBAAqB,EAAE,CAAC;IACvC,IAAA,qCAAK,EAAC,MAAM,CAAC;8BACK,IAAI;mDAAC;AAOhB;IAHP,IAAA,qCAAK,EAAC,EAAE,KAAK,EAAE,mBAAmB,EAAE,CAAC;IACrC,IAAA,qCAAK,GAAE;IACP,IAAA,qCAAK,EAAC,MAAM,CAAC;8BACM,IAAI;oDAAC;AAGjB;IADP,IAAA,qCAAK,EAAC,SAAS,CAAC;;sDACa;AAGtB;IADP,IAAA,qCAAK,EAAC,QAAQ,CAAC;;kDACS;AAGjB;IADP,IAAA,qCAAK,EAAC,QAAQ,CAAC;;iDACQ;AAGhB;IADP,IAAA,qCAAK,EAAC,QAAQ,CAAC;;wDACe;AAGvB;IADP,IAAA,qCAAK,EAAC,QAAQ,CAAC;;qDACY;AAGpB;IADP,IAAA,qCAAK,EAAC,QAAQ,CAAC;;wDACgB;AAGxB;IADP,IAAA,qCAAK,EAAC,QAAQ,CAAC;;mDACW;AAGnB;IADP,IAAA,qCAAK,EAAC,QAAQ,CAAC;;mDACW;AAGnB;IADP,IAAA,qCAAK,EAAC,QAAQ,CAAC;;qDACa;AAGrB;IADP,IAAA,qCAAK,EAAC,QAAQ,CAAC;;iDACS;AAGjB;IADP,IAAA,qCAAK,EAAC,QAAQ,CAAC;;oDACY;AASpB;IADP,IAAA,qCAAK,EAAC,QAAQ,CAAC;;sDACc;AAGtB;IADP,IAAA,qCAAK,EAAC,QAAQ,CAAC;;iDACS;AAGjB;IADP,IAAA,qCAAK,EAAC,QAAQ,CAAC;;4CACI;AAGZ;IADP,IAAA,qCAAK,EAAC,QAAQ,CAAC;;oDACY;AAGpB;IADP,IAAA,qCAAK,EAAC,QAAQ,CAAC;;gDACQ;AAGhB;IADP,IAAA,qCAAK,EAAC,QAAQ,CAAC;;kDACU;AAKlB;IADP,IAAA,qCAAK,EAAC,QAAQ,CAAC;;iDACS;2BAjFd,gBAAgB;IAD5B,IAAA,6CAAa,EAAC,kCAA0B,EAAE,8BAAkB,CAAC;GACjD,gBAAgB,CAkF5B"}
|
package/dist/pages/module.d.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
export declare const marketingModule: import("@antelopejs/interface-dms
|
|
1
|
+
export declare const marketingModule: import("@antelopejs/interface-dms").CategoryInfo;
|
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
import { formSchema } from "@antelopejs/interface-dms/base";
|
|
2
|
-
export declare const marketingSettingsForm: import("@antelopejs/interface-dms/
|
|
2
|
+
export declare const marketingSettingsForm: import("@antelopejs/interface-dms/base").FormBuilder;
|
|
3
3
|
export declare const marketingSettingsFormSchema: ReturnType<typeof formSchema>;
|
|
@@ -4,6 +4,6 @@ declare const MarketingSettingsPage_base: {
|
|
|
4
4
|
location: string;
|
|
5
5
|
};
|
|
6
6
|
export declare class MarketingSettingsPage extends MarketingSettingsPage_base {
|
|
7
|
-
static content: import("@antelopejs/interface-dms/
|
|
7
|
+
static content: import("@antelopejs/interface-dms/base").FormBuilder;
|
|
8
8
|
}
|
|
9
9
|
export {};
|
|
@@ -1,5 +1,4 @@
|
|
|
1
|
-
import type { ExperimentVariation, Funnel
|
|
1
|
+
import type { ExperimentVariation, Funnel } from "@/db/tables/funnels.table";
|
|
2
2
|
export type AssignmentMap = Record<string, string>;
|
|
3
3
|
export declare function normalizedWeights(variations: ExperimentVariation[]): number[];
|
|
4
|
-
export declare function assignVariation(visitorId: string, experiment: FunnelExperiment): string | undefined;
|
|
5
4
|
export declare function assignAll(visitorId: string, funnels: Funnel[]): AssignmentMap;
|
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.normalizedWeights = normalizedWeights;
|
|
4
|
-
exports.assignVariation = assignVariation;
|
|
5
4
|
exports.assignAll = assignAll;
|
|
6
5
|
const node_crypto_1 = require("node:crypto");
|
|
7
6
|
const constants_1 = require("@/types/constants");
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"assign.js","sourceRoot":"","sources":["../../../src/services/experiments/assign.ts"],"names":[],"mappings":";;AAYA,8CAMC;
|
|
1
|
+
{"version":3,"file":"assign.js","sourceRoot":"","sources":["../../../src/services/experiments/assign.ts"],"names":[],"mappings":";;AAYA,8CAMC;AAqCD,8BAaC;AApED,6CAAyC;AAMzC,iDAA8D;AAM9D,SAAgB,iBAAiB,CAAC,UAAiC;IACjE,MAAM,KAAK,GAAG,UAAU,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IAC5E,IAAI,KAAK,IAAI,CAAC,EAAE,CAAC;QACf,OAAO,UAAU,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,CAAC,GAAG,UAAU,CAAC,MAAM,CAAC,CAAC;IACrD,CAAC;IACD,OAAO,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC;AAC9D,CAAC;AAOD,SAAS,QAAQ,CAAC,SAAiB,EAAE,aAAqB;IACxD,MAAM,GAAG,GAAG,IAAA,wBAAU,EAAC,QAAQ,CAAC;SAC7B,MAAM,CAAC,GAAG,SAAS,IAAI,aAAa,EAAE,CAAC;SACvC,MAAM,CAAC,KAAK,CAAC;SACb,KAAK,CAAC,CAAC,EAAE,qCAAyB,CAAC,CAAC;IACvC,MAAM,IAAI,GAAG,qCAAyB,GAAG,CAAC,CAAC;IAC3C,OAAO,MAAM,CAAC,QAAQ,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,IAAI,IAAI,CAAC;AAC9C,CAAC;AAGD,SAAS,eAAe,CACtB,SAAiB,EACjB,UAA4B;IAE5B,IAAI,UAAU,CAAC,UAAU,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACvC,OAAO,SAAS,CAAC;IACnB,CAAC;IACD,MAAM,MAAM,GAAG,QAAQ,CAAC,SAAS,EAAE,UAAU,CAAC,GAAG,CAAC,CAAC;IACnD,MAAM,OAAO,GAAG,iBAAiB,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC;IACzD,IAAI,UAAU,GAAG,CAAC,CAAC;IACnB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,UAAU,CAAC,UAAU,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACtD,UAAU,IAAI,OAAO,CAAC,CAAC,CAAC,CAAC;QACzB,IAAI,MAAM,GAAG,UAAU,EAAE,CAAC;YACxB,OAAO,UAAU,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC;QACtC,CAAC;IACH,CAAC;IAED,OAAO,UAAU,CAAC,UAAU,CAAC,UAAU,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC;AACrE,CAAC;AAED,SAAgB,SAAS,CAAC,SAAiB,EAAE,OAAiB;IAC5D,MAAM,WAAW,GAAkB,EAAE,CAAC;IACtC,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;QAC7B,MAAM,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC;QACrC,IAAI,CAAC,UAAU,EAAE,CAAC;YAChB,SAAS;QACX,CAAC;QACD,MAAM,SAAS,GAAG,eAAe,CAAC,SAAS,EAAE,UAAU,CAAC,CAAC;QACzD,IAAI,SAAS,KAAK,SAAS,EAAE,CAAC;YAC5B,WAAW,CAAC,UAAU,CAAC,GAAG,CAAC,GAAG,SAAS,CAAC;QAC1C,CAAC;IACH,CAAC;IACD,OAAO,WAAW,CAAC;AACrB,CAAC"}
|
|
@@ -2,7 +2,7 @@ import type { FunnelExperiment } from "@/db/tables/funnels.table";
|
|
|
2
2
|
import type { MarketingEvent } from "@/db/tables/marketing_events.table";
|
|
3
3
|
import { type FunnelComputation, type FunnelDefinition, type FunnelEvent } from "@/services/funnels/compute";
|
|
4
4
|
import { type SrmCheck } from "./stats";
|
|
5
|
-
|
|
5
|
+
interface VariationResult {
|
|
6
6
|
key: string;
|
|
7
7
|
exposedSessions: number;
|
|
8
8
|
computation: FunnelComputation;
|
|
@@ -18,3 +18,4 @@ export interface ExperimentResults {
|
|
|
18
18
|
}
|
|
19
19
|
export type ResultEvent = FunnelEvent & Pick<MarketingEvent, "data">;
|
|
20
20
|
export declare function computeExperimentResults(events: ResultEvent[], goal: FunnelDefinition, experiment: FunnelExperiment, truncated: boolean): ExperimentResults;
|
|
21
|
+
export {};
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import type { Funnel, FunnelStep } from "@/db/tables/funnels.table";
|
|
2
2
|
import type { MarketingEvent } from "@/db/tables/marketing_events.table";
|
|
3
3
|
export type FunnelDefinition = Pick<Funnel, "steps" | "conversionWindowMs">;
|
|
4
|
-
|
|
4
|
+
interface FunnelStepResult {
|
|
5
5
|
step: FunnelStep;
|
|
6
6
|
sessions: number;
|
|
7
7
|
conversionRate: number;
|
|
@@ -13,3 +13,4 @@ export interface FunnelComputation {
|
|
|
13
13
|
export type FunnelEvent = Pick<MarketingEvent, "sessionId" | "kind" | "url" | "name" | "timestamp">;
|
|
14
14
|
export declare function groupBySession<T extends Pick<MarketingEvent, "sessionId">>(events: T[]): Map<string, T[]>;
|
|
15
15
|
export declare function computeFunnelOverSessions(funnel: FunnelDefinition, sessions: Iterable<FunnelEvent[]>): FunnelComputation;
|
|
16
|
+
export {};
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
export declare function isAutomatedClient(userAgent: string): boolean;
|
|
2
|
-
|
|
2
|
+
declare class FixedWindowRateLimiter {
|
|
3
3
|
private readonly windowMs;
|
|
4
4
|
private readonly maxPerWindow;
|
|
5
5
|
private readonly maxSources;
|
|
@@ -9,3 +9,4 @@ export declare class FixedWindowRateLimiter {
|
|
|
9
9
|
}
|
|
10
10
|
export declare const collectRateLimiter: FixedWindowRateLimiter;
|
|
11
11
|
export declare const snapshotRateLimiter: FixedWindowRateLimiter;
|
|
12
|
+
export {};
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.snapshotRateLimiter = exports.collectRateLimiter =
|
|
3
|
+
exports.snapshotRateLimiter = exports.collectRateLimiter = void 0;
|
|
4
4
|
exports.isAutomatedClient = isAutomatedClient;
|
|
5
5
|
const helpers_1 = require("ua-parser-js/helpers");
|
|
6
6
|
const constants_1 = require("@/types/constants");
|
|
@@ -38,7 +38,6 @@ class FixedWindowRateLimiter {
|
|
|
38
38
|
return true;
|
|
39
39
|
}
|
|
40
40
|
}
|
|
41
|
-
exports.FixedWindowRateLimiter = FixedWindowRateLimiter;
|
|
42
41
|
exports.collectRateLimiter = new FixedWindowRateLimiter(constants_1.COLLECT_RATE_LIMIT_WINDOW_MS, constants_1.MAX_EVENTS_PER_WINDOW_PER_SOURCE, constants_1.RATE_LIMIT_MAX_SOURCES);
|
|
43
42
|
exports.snapshotRateLimiter = new FixedWindowRateLimiter(constants_1.COLLECT_RATE_LIMIT_WINDOW_MS, constants_1.MAX_SNAPSHOTS_PER_WINDOW_PER_SOURCE, constants_1.RATE_LIMIT_MAX_SOURCES);
|
|
44
43
|
//# sourceMappingURL=ingest-guard.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ingest-guard.js","sourceRoot":"","sources":["../../src/services/ingest-guard.ts"],"names":[],"mappings":";;;AAWA,8CAMC;AAjBD,kDAA6C;AAC7C,iDAK2B;AAC3B,mDAA6C;AAE7C,MAAM,qBAAqB,GAAG,8BAA8B,CAAC;AAE7D,SAAgB,iBAAiB,CAAC,SAAiB;IACjD,OAAO,CACL,SAAS,KAAK,EAAE;QAChB,qBAAqB,CAAC,IAAI,CAAC,SAAS,CAAC;QACrC,IAAA,eAAK,EAAC,SAAS,CAAC,CACjB,CAAC;AACJ,CAAC;AAOD,
|
|
1
|
+
{"version":3,"file":"ingest-guard.js","sourceRoot":"","sources":["../../src/services/ingest-guard.ts"],"names":[],"mappings":";;;AAWA,8CAMC;AAjBD,kDAA6C;AAC7C,iDAK2B;AAC3B,mDAA6C;AAE7C,MAAM,qBAAqB,GAAG,8BAA8B,CAAC;AAE7D,SAAgB,iBAAiB,CAAC,SAAiB;IACjD,OAAO,CACL,SAAS,KAAK,EAAE;QAChB,qBAAqB,CAAC,IAAI,CAAC,SAAS,CAAC;QACrC,IAAA,eAAK,EAAC,SAAS,CAAC,CACjB,CAAC;AACJ,CAAC;AAOD,MAAM,sBAAsB;IAIP;IACA;IACA;IALF,OAAO,GAAG,IAAI,GAAG,EAAuB,CAAC;IAE1D,YACmB,QAAgB,EAChB,YAAoB,EACpB,UAAkB;QAFlB,aAAQ,GAAR,QAAQ,CAAQ;QAChB,iBAAY,GAAZ,YAAY,CAAQ;QACpB,eAAU,GAAV,UAAU,CAAQ;IAClC,CAAC;IAEJ,OAAO,CAAC,GAAW,EAAE,MAAc;QACjC,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QACvB,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QACpC,MAAM,QAAQ,GACZ,KAAK,KAAK,SAAS,IAAI,GAAG,GAAG,KAAK,CAAC,WAAW,GAAG,IAAI,CAAC,QAAQ,CAAC;QACjE,MAAM,IAAI,GAAG,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;QACxC,IAAI,IAAI,GAAG,MAAM,GAAG,IAAI,CAAC,YAAY,EAAE,CAAC;YACtC,OAAO,KAAK,CAAC;QACf,CAAC;QACD,IAAI,QAAQ,EAAE,CAAC;YACb,KAAK,CAAC,KAAK,IAAI,MAAM,CAAC;QACxB,CAAC;aAAM,CAAC;YACN,IAAA,0BAAU,EACR,IAAI,CAAC,OAAO,EACZ,GAAG,EACH,EAAE,WAAW,EAAE,GAAG,EAAE,KAAK,EAAE,MAAM,EAAE,EACnC,IAAI,CAAC,UAAU,CAChB,CAAC;QACJ,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;CACF;AAEY,QAAA,kBAAkB,GAAG,IAAI,sBAAsB,CAC1D,wCAA4B,EAC5B,4CAAgC,EAChC,kCAAsB,CACvB,CAAC;AAEW,QAAA,mBAAmB,GAAG,IAAI,sBAAsB,CAC3D,wCAA4B,EAC5B,+CAAmC,EACnC,kCAAsB,CACvB,CAAC"}
|
|
@@ -74,27 +74,25 @@ function buildNextSettings(values, existing) {
|
|
|
74
74
|
return doc;
|
|
75
75
|
}
|
|
76
76
|
async function persistSettings(model, next, existing) {
|
|
77
|
-
const row = existing ??
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
77
|
+
const row = existing ??
|
|
78
|
+
(await model.getSingleton()) ??
|
|
79
|
+
(await createSingleton(model, next, cachedSecret || generateSecret()));
|
|
80
|
+
Object.assign(row, next);
|
|
81
|
+
await model.update(row);
|
|
82
|
+
}
|
|
83
|
+
async function createSingleton(model, doc, visitorHashSecret) {
|
|
84
|
+
const row = await model.insertSingleton({
|
|
85
|
+
...doc,
|
|
86
|
+
visitorHashSecret,
|
|
86
87
|
updatedAt: new Date(),
|
|
87
88
|
});
|
|
89
|
+
cachedSecret = row.visitorHashSecret;
|
|
90
|
+
return row;
|
|
88
91
|
}
|
|
89
92
|
async function loadSettings(model) {
|
|
90
93
|
let doc = await model.getSingleton();
|
|
91
94
|
if (!doc) {
|
|
92
|
-
doc =
|
|
93
|
-
...defaultDocument(),
|
|
94
|
-
visitorHashSecret: generateSecret(),
|
|
95
|
-
updatedAt: new Date(),
|
|
96
|
-
};
|
|
97
|
-
await model.insert(doc);
|
|
95
|
+
doc = await createSingleton(model, defaultDocument(), generateSecret());
|
|
98
96
|
}
|
|
99
97
|
else if (!doc.visitorHashSecret) {
|
|
100
98
|
doc.visitorHashSecret = generateSecret();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"settings.js","sourceRoot":"","sources":["../../src/services/settings.ts"],"names":[],"mappings":";;AA4BA,oDAGC;AA4CD,gDAaC;
|
|
1
|
+
{"version":3,"file":"settings.js","sourceRoot":"","sources":["../../src/services/settings.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
import type { Website } from "@/db/tables/websites.table";
|
|
2
2
|
import { type SnapshotColorScheme, type SnapshotLayout, type SnapshotRequestInput } from "@/types";
|
|
3
|
-
export declare function snapshotId(websiteId: string, layout: SnapshotLayout, url: string): string;
|
|
4
3
|
export declare function wantsSnapshot(website: Website, url: string, viewportWidth: number): Promise<boolean>;
|
|
5
4
|
export declare function storeSnapshot(website: Website, input: SnapshotRequestInput): Promise<boolean>;
|
|
6
5
|
export interface PageSnapshotPayload {
|
|
@@ -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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"}
|
|
@@ -1,12 +1,9 @@
|
|
|
1
1
|
export declare const MARKETING_MODULE_ID = "marketing";
|
|
2
2
|
export declare const OVERVIEW_PAGE_ID = "overview";
|
|
3
3
|
export declare const FRONTEND_MODULE_NAME = "@antelopejs/dms-marketing-frontend-vue";
|
|
4
|
-
export declare const MS_PER_SECOND = 1000;
|
|
5
4
|
export declare const MS_PER_MINUTE: number;
|
|
6
5
|
export declare const MS_PER_HOUR: number;
|
|
7
6
|
export declare const MS_PER_DAY: number;
|
|
8
|
-
export declare const DAYS_PER_MONTH = 30;
|
|
9
|
-
export declare const DAYS_PER_YEAR = 365;
|
|
10
7
|
export declare const MAX_QUERY_PERIOD_DAYS = 90;
|
|
11
8
|
export declare const DEFAULT_QUERY_PERIOD_DAYS = 7;
|
|
12
9
|
export declare const DEFAULT_SESSION_IDLE_TIMEOUT_MS: number;
|
package/dist/types/constants.js
CHANGED
|
@@ -1,21 +1,21 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
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 = exports.MAX_ENTRIES_PER_TOP_MAP = exports.MIN_OUTCOMES_PER_CELL = exports.EXPERIMENT_SRM_P_THRESHOLD = exports.EXPERIMENT_SIGNIFICANCE_LEVEL = exports.ASSIGNMENT_HASH_HEX_CHARS = 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_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.
|
|
4
|
-
exports.HTTP_PAYLOAD_TOO_LARGE = exports.HTTP_NOT_FOUND = exports.HTTP_FORBIDDEN = exports.HTTP_BAD_REQUEST = exports.API_BASE_PATH = 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 =
|
|
3
|
+
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 = exports.MAX_ENTRIES_PER_TOP_MAP = exports.MIN_OUTCOMES_PER_CELL = exports.EXPERIMENT_SRM_P_THRESHOLD = exports.EXPERIMENT_SIGNIFICANCE_LEVEL = exports.ASSIGNMENT_HASH_HEX_CHARS = 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_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.MS_PER_MINUTE = exports.FRONTEND_MODULE_NAME = exports.OVERVIEW_PAGE_ID = exports.MARKETING_MODULE_ID = void 0;
|
|
4
|
+
exports.HTTP_PAYLOAD_TOO_LARGE = exports.HTTP_NOT_FOUND = exports.HTTP_FORBIDDEN = exports.HTTP_BAD_REQUEST = exports.API_BASE_PATH = 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 = void 0;
|
|
5
5
|
exports.MARKETING_MODULE_ID = "marketing";
|
|
6
6
|
exports.OVERVIEW_PAGE_ID = "overview";
|
|
7
7
|
exports.FRONTEND_MODULE_NAME = "@antelopejs/dms-marketing-frontend-vue";
|
|
8
|
-
|
|
9
|
-
exports.MS_PER_MINUTE = 60 *
|
|
8
|
+
const MS_PER_SECOND = 1_000;
|
|
9
|
+
exports.MS_PER_MINUTE = 60 * MS_PER_SECOND;
|
|
10
10
|
exports.MS_PER_HOUR = 60 * exports.MS_PER_MINUTE;
|
|
11
11
|
exports.MS_PER_DAY = 24 * exports.MS_PER_HOUR;
|
|
12
|
-
|
|
13
|
-
|
|
12
|
+
const DAYS_PER_MONTH = 30;
|
|
13
|
+
const DAYS_PER_YEAR = 365;
|
|
14
14
|
exports.MAX_QUERY_PERIOD_DAYS = 90;
|
|
15
15
|
exports.DEFAULT_QUERY_PERIOD_DAYS = 7;
|
|
16
16
|
exports.DEFAULT_SESSION_IDLE_TIMEOUT_MS = 30 * exports.MS_PER_MINUTE;
|
|
17
17
|
exports.DEFAULT_RAW_EVENTS_RETENTION_MS = 90 * exports.MS_PER_DAY;
|
|
18
|
-
exports.DEFAULT_STATISTICS_RETENTION_MS = (
|
|
18
|
+
exports.DEFAULT_STATISTICS_RETENTION_MS = (DAYS_PER_YEAR + DAYS_PER_MONTH) * exports.MS_PER_DAY;
|
|
19
19
|
exports.MAX_STATISTICS_RETENTION_DAYS = 760;
|
|
20
20
|
exports.DEFAULT_HEATMAP_SAMPLE_RATIO = 0.1;
|
|
21
21
|
exports.MAX_COLLECT_BATCH_SIZE = 25;
|
|
@@ -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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"}
|
package/dist/types/events.d.ts
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import { z } from "zod";
|
|
2
|
-
|
|
2
|
+
declare const EVENT_KINDS: readonly ["pageview", "custom", "exposure", "click", "scroll"];
|
|
3
3
|
export type EventKind = (typeof EVENT_KINDS)[number];
|
|
4
4
|
export declare const HEATMAP_EVENT_KINDS: EventKind[];
|
|
5
|
-
|
|
5
|
+
declare const trackedEventSchema: z.ZodObject<{
|
|
6
6
|
kind: z.ZodEnum<["pageview", "custom", "exposure", "click", "scroll"]>;
|
|
7
7
|
url: z.ZodString;
|
|
8
8
|
referrer: z.ZodOptional<z.ZodString>;
|
|
@@ -13,25 +13,25 @@ export declare const trackedEventSchema: z.ZodObject<{
|
|
|
13
13
|
data: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
|
|
14
14
|
at: z.ZodOptional<z.ZodNumber>;
|
|
15
15
|
}, "strip", z.ZodTypeAny, {
|
|
16
|
+
kind: "custom" | "pageview" | "exposure" | "click" | "scroll";
|
|
16
17
|
url: string;
|
|
17
|
-
kind: "custom" | "click" | "scroll" | "pageview" | "exposure";
|
|
18
18
|
at?: number | undefined;
|
|
19
19
|
name?: string | undefined;
|
|
20
|
-
data?: Record<string, unknown> | undefined;
|
|
21
20
|
referrer?: string | undefined;
|
|
22
|
-
screen?: string | undefined;
|
|
23
21
|
title?: string | undefined;
|
|
22
|
+
screen?: string | undefined;
|
|
24
23
|
language?: string | undefined;
|
|
24
|
+
data?: Record<string, unknown> | undefined;
|
|
25
25
|
}, {
|
|
26
|
+
kind: "custom" | "pageview" | "exposure" | "click" | "scroll";
|
|
26
27
|
url: string;
|
|
27
|
-
kind: "custom" | "click" | "scroll" | "pageview" | "exposure";
|
|
28
28
|
at?: number | undefined;
|
|
29
29
|
name?: string | undefined;
|
|
30
|
-
data?: Record<string, unknown> | undefined;
|
|
31
30
|
referrer?: string | undefined;
|
|
32
|
-
screen?: string | undefined;
|
|
33
31
|
title?: string | undefined;
|
|
32
|
+
screen?: string | undefined;
|
|
34
33
|
language?: string | undefined;
|
|
34
|
+
data?: Record<string, unknown> | undefined;
|
|
35
35
|
}>;
|
|
36
36
|
export declare const collectRequestSchema: z.ZodObject<{
|
|
37
37
|
website: z.ZodString;
|
|
@@ -46,55 +46,54 @@ export declare const collectRequestSchema: z.ZodObject<{
|
|
|
46
46
|
data: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
|
|
47
47
|
at: z.ZodOptional<z.ZodNumber>;
|
|
48
48
|
}, "strip", z.ZodTypeAny, {
|
|
49
|
+
kind: "custom" | "pageview" | "exposure" | "click" | "scroll";
|
|
49
50
|
url: string;
|
|
50
|
-
kind: "custom" | "click" | "scroll" | "pageview" | "exposure";
|
|
51
51
|
at?: number | undefined;
|
|
52
52
|
name?: string | undefined;
|
|
53
|
-
data?: Record<string, unknown> | undefined;
|
|
54
53
|
referrer?: string | undefined;
|
|
55
|
-
screen?: string | undefined;
|
|
56
54
|
title?: string | undefined;
|
|
55
|
+
screen?: string | undefined;
|
|
57
56
|
language?: string | undefined;
|
|
57
|
+
data?: Record<string, unknown> | undefined;
|
|
58
58
|
}, {
|
|
59
|
+
kind: "custom" | "pageview" | "exposure" | "click" | "scroll";
|
|
59
60
|
url: string;
|
|
60
|
-
kind: "custom" | "click" | "scroll" | "pageview" | "exposure";
|
|
61
61
|
at?: number | undefined;
|
|
62
62
|
name?: string | undefined;
|
|
63
|
-
data?: Record<string, unknown> | undefined;
|
|
64
63
|
referrer?: string | undefined;
|
|
65
|
-
screen?: string | undefined;
|
|
66
64
|
title?: string | undefined;
|
|
65
|
+
screen?: string | undefined;
|
|
67
66
|
language?: string | undefined;
|
|
67
|
+
data?: Record<string, unknown> | undefined;
|
|
68
68
|
}>, "many">;
|
|
69
69
|
}, "strip", z.ZodTypeAny, {
|
|
70
70
|
website: string;
|
|
71
71
|
events: {
|
|
72
|
+
kind: "custom" | "pageview" | "exposure" | "click" | "scroll";
|
|
72
73
|
url: string;
|
|
73
|
-
kind: "custom" | "click" | "scroll" | "pageview" | "exposure";
|
|
74
74
|
at?: number | undefined;
|
|
75
75
|
name?: string | undefined;
|
|
76
|
-
data?: Record<string, unknown> | undefined;
|
|
77
76
|
referrer?: string | undefined;
|
|
78
|
-
screen?: string | undefined;
|
|
79
77
|
title?: string | undefined;
|
|
78
|
+
screen?: string | undefined;
|
|
80
79
|
language?: string | undefined;
|
|
80
|
+
data?: Record<string, unknown> | undefined;
|
|
81
81
|
}[];
|
|
82
82
|
}, {
|
|
83
83
|
website: string;
|
|
84
84
|
events: {
|
|
85
|
+
kind: "custom" | "pageview" | "exposure" | "click" | "scroll";
|
|
85
86
|
url: string;
|
|
86
|
-
kind: "custom" | "click" | "scroll" | "pageview" | "exposure";
|
|
87
87
|
at?: number | undefined;
|
|
88
88
|
name?: string | undefined;
|
|
89
|
-
data?: Record<string, unknown> | undefined;
|
|
90
89
|
referrer?: string | undefined;
|
|
91
|
-
screen?: string | undefined;
|
|
92
90
|
title?: string | undefined;
|
|
91
|
+
screen?: string | undefined;
|
|
93
92
|
language?: string | undefined;
|
|
93
|
+
data?: Record<string, unknown> | undefined;
|
|
94
94
|
}[];
|
|
95
95
|
}>;
|
|
96
96
|
export type TrackedEventInput = z.infer<typeof trackedEventSchema>;
|
|
97
|
-
export type CollectRequestInput = z.infer<typeof collectRequestSchema>;
|
|
98
97
|
export interface ClickEventData {
|
|
99
98
|
x: number;
|
|
100
99
|
y: number;
|
|
@@ -112,3 +111,4 @@ export interface ExposureEventData {
|
|
|
112
111
|
experiment: string;
|
|
113
112
|
variation: string;
|
|
114
113
|
}
|
|
114
|
+
export {};
|
package/dist/types/events.js
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.collectRequestSchema = exports.
|
|
3
|
+
exports.collectRequestSchema = exports.HEATMAP_EVENT_KINDS = void 0;
|
|
4
4
|
const zod_1 = require("zod");
|
|
5
5
|
const constants_1 = require("./constants");
|
|
6
|
-
|
|
6
|
+
const EVENT_KINDS = [
|
|
7
7
|
"pageview",
|
|
8
8
|
"custom",
|
|
9
9
|
"exposure",
|
|
@@ -11,8 +11,8 @@ exports.EVENT_KINDS = [
|
|
|
11
11
|
"scroll",
|
|
12
12
|
];
|
|
13
13
|
exports.HEATMAP_EVENT_KINDS = ["click", "scroll"];
|
|
14
|
-
|
|
15
|
-
kind: zod_1.z.enum(
|
|
14
|
+
const trackedEventSchema = zod_1.z.object({
|
|
15
|
+
kind: zod_1.z.enum(EVENT_KINDS),
|
|
16
16
|
url: zod_1.z.string().min(1).max(constants_1.MAX_URL_LENGTH),
|
|
17
17
|
referrer: zod_1.z.string().max(constants_1.MAX_URL_LENGTH).optional(),
|
|
18
18
|
title: zod_1.z.string().max(constants_1.MAX_TITLE_LENGTH).optional(),
|
|
@@ -24,6 +24,6 @@ exports.trackedEventSchema = zod_1.z.object({
|
|
|
24
24
|
});
|
|
25
25
|
exports.collectRequestSchema = zod_1.z.object({
|
|
26
26
|
website: zod_1.z.string().min(1).max(constants_1.MAX_WEBSITE_ID_LENGTH),
|
|
27
|
-
events: zod_1.z.array(
|
|
27
|
+
events: zod_1.z.array(trackedEventSchema).min(1).max(constants_1.MAX_COLLECT_BATCH_SIZE),
|
|
28
28
|
});
|
|
29
29
|
//# sourceMappingURL=events.js.map
|
package/dist/types/events.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"events.js","sourceRoot":"","sources":["../../src/types/events.ts"],"names":[],"mappings":";;;AAAA,6BAAwB;AACxB,2CAOqB;
|
|
1
|
+
{"version":3,"file":"events.js","sourceRoot":"","sources":["../../src/types/events.ts"],"names":[],"mappings":";;;AAAA,6BAAwB;AACxB,2CAOqB;AAWrB,MAAM,WAAW,GAAG;IAClB,UAAU;IACV,QAAQ;IACR,UAAU;IACV,OAAO;IACP,QAAQ;CACA,CAAC;AAKE,QAAA,mBAAmB,GAAgB,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;AAEpE,MAAM,kBAAkB,GAAG,OAAC,CAAC,MAAM,CAAC;IAClC,IAAI,EAAE,OAAC,CAAC,IAAI,CAAC,WAAW,CAAC;IAEzB,GAAG,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,0BAAc,CAAC;IAC1C,QAAQ,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,0BAAc,CAAC,CAAC,QAAQ,EAAE;IACnD,KAAK,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,4BAAgB,CAAC,CAAC,QAAQ,EAAE;IAClD,MAAM,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,yCAA6B,CAAC,CAAC,QAAQ,EAAE;IAChE,QAAQ,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,yCAA6B,CAAC,CAAC,QAAQ,EAAE;IAElE,IAAI,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,iCAAqB,CAAC,CAAC,QAAQ,EAAE;IACtD,IAAI,EAAE,OAAC,CAAC,MAAM,CAAC,OAAC,CAAC,OAAO,EAAE,CAAC,CAAC,QAAQ,EAAE;IAEtC,EAAE,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE;CAC3C,CAAC,CAAC;AAEU,QAAA,oBAAoB,GAAG,OAAC,CAAC,MAAM,CAAC;IAC3C,OAAO,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,iCAAqB,CAAC;IACrD,MAAM,EAAE,OAAC,CAAC,KAAK,CAAC,kBAAkB,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,kCAAsB,CAAC;CACvE,CAAC,CAAC"}
|
package/dist/types/settings.d.ts
CHANGED
|
@@ -2,8 +2,8 @@ import type { DmsMarketingConfig } from "@/config";
|
|
|
2
2
|
type ConfigKeysOfType<T> = {
|
|
3
3
|
[K in keyof DmsMarketingConfig]: DmsMarketingConfig[K] extends T ? K : never;
|
|
4
4
|
}[keyof DmsMarketingConfig];
|
|
5
|
-
|
|
6
|
-
|
|
5
|
+
type NumericConfigKey = ConfigKeysOfType<number>;
|
|
6
|
+
type BooleanConfigKey = ConfigKeysOfType<boolean>;
|
|
7
7
|
interface SettingBase {
|
|
8
8
|
id: string;
|
|
9
9
|
labelKey: string;
|
|
@@ -3,7 +3,7 @@ export declare const SNAPSHOT_LAYOUTS: readonly ["desktop", "tablet", "phone"];
|
|
|
3
3
|
export type SnapshotLayout = (typeof SNAPSHOT_LAYOUTS)[number];
|
|
4
4
|
export declare function layoutOfWidth(width: number): SnapshotLayout;
|
|
5
5
|
export declare function isSnapshotLayout(value: unknown): value is SnapshotLayout;
|
|
6
|
-
|
|
6
|
+
declare const SNAPSHOT_COLOR_SCHEMES: readonly ["light", "dark"];
|
|
7
7
|
export type SnapshotColorScheme = (typeof SNAPSHOT_COLOR_SCHEMES)[number];
|
|
8
8
|
export declare const snapshotRequestSchema: z.ZodUnion<[z.ZodObject<{
|
|
9
9
|
website: z.ZodString;
|
|
@@ -12,11 +12,11 @@ export declare const snapshotRequestSchema: z.ZodUnion<[z.ZodObject<{
|
|
|
12
12
|
width: z.ZodNumber;
|
|
13
13
|
height: z.ZodNumber;
|
|
14
14
|
}, "strip", z.ZodTypeAny, {
|
|
15
|
-
height: number;
|
|
16
15
|
width: number;
|
|
17
|
-
}, {
|
|
18
16
|
height: number;
|
|
17
|
+
}, {
|
|
19
18
|
width: number;
|
|
19
|
+
height: number;
|
|
20
20
|
}>;
|
|
21
21
|
colorScheme: z.ZodOptional<z.ZodEnum<["light", "dark"]>>;
|
|
22
22
|
} & {
|
|
@@ -24,38 +24,38 @@ export declare const snapshotRequestSchema: z.ZodUnion<[z.ZodObject<{
|
|
|
24
24
|
width: z.ZodNumber;
|
|
25
25
|
height: z.ZodNumber;
|
|
26
26
|
}, "strip", z.ZodTypeAny, {
|
|
27
|
-
height: number;
|
|
28
27
|
width: number;
|
|
29
|
-
}, {
|
|
30
28
|
height: number;
|
|
29
|
+
}, {
|
|
31
30
|
width: number;
|
|
31
|
+
height: number;
|
|
32
32
|
}>;
|
|
33
33
|
html: z.ZodString;
|
|
34
34
|
}, "strip", z.ZodTypeAny, {
|
|
35
35
|
url: string;
|
|
36
|
-
html: string;
|
|
37
|
-
document: {
|
|
38
|
-
height: number;
|
|
39
|
-
width: number;
|
|
40
|
-
};
|
|
41
36
|
website: string;
|
|
42
37
|
viewport: {
|
|
38
|
+
width: number;
|
|
43
39
|
height: number;
|
|
40
|
+
};
|
|
41
|
+
document: {
|
|
44
42
|
width: number;
|
|
43
|
+
height: number;
|
|
45
44
|
};
|
|
45
|
+
html: string;
|
|
46
46
|
colorScheme?: "light" | "dark" | undefined;
|
|
47
47
|
}, {
|
|
48
48
|
url: string;
|
|
49
|
-
html: string;
|
|
50
|
-
document: {
|
|
51
|
-
height: number;
|
|
52
|
-
width: number;
|
|
53
|
-
};
|
|
54
49
|
website: string;
|
|
55
50
|
viewport: {
|
|
51
|
+
width: number;
|
|
56
52
|
height: number;
|
|
53
|
+
};
|
|
54
|
+
document: {
|
|
57
55
|
width: number;
|
|
56
|
+
height: number;
|
|
58
57
|
};
|
|
58
|
+
html: string;
|
|
59
59
|
colorScheme?: "light" | "dark" | undefined;
|
|
60
60
|
}>, z.ZodObject<{
|
|
61
61
|
website: z.ZodString;
|
|
@@ -64,11 +64,11 @@ export declare const snapshotRequestSchema: z.ZodUnion<[z.ZodObject<{
|
|
|
64
64
|
width: z.ZodNumber;
|
|
65
65
|
height: z.ZodNumber;
|
|
66
66
|
}, "strip", z.ZodTypeAny, {
|
|
67
|
-
height: number;
|
|
68
67
|
width: number;
|
|
69
|
-
}, {
|
|
70
68
|
height: number;
|
|
69
|
+
}, {
|
|
71
70
|
width: number;
|
|
71
|
+
height: number;
|
|
72
72
|
}>;
|
|
73
73
|
colorScheme: z.ZodOptional<z.ZodEnum<["light", "dark"]>>;
|
|
74
74
|
} & {
|
|
@@ -77,8 +77,8 @@ export declare const snapshotRequestSchema: z.ZodUnion<[z.ZodObject<{
|
|
|
77
77
|
url: string;
|
|
78
78
|
website: string;
|
|
79
79
|
viewport: {
|
|
80
|
-
height: number;
|
|
81
80
|
width: number;
|
|
81
|
+
height: number;
|
|
82
82
|
};
|
|
83
83
|
oversizeBytes: number;
|
|
84
84
|
colorScheme?: "light" | "dark" | undefined;
|
|
@@ -86,10 +86,11 @@ export declare const snapshotRequestSchema: z.ZodUnion<[z.ZodObject<{
|
|
|
86
86
|
url: string;
|
|
87
87
|
website: string;
|
|
88
88
|
viewport: {
|
|
89
|
-
height: number;
|
|
90
89
|
width: number;
|
|
90
|
+
height: number;
|
|
91
91
|
};
|
|
92
92
|
oversizeBytes: number;
|
|
93
93
|
colorScheme?: "light" | "dark" | undefined;
|
|
94
94
|
}>]>;
|
|
95
95
|
export type SnapshotRequestInput = z.infer<typeof snapshotRequestSchema>;
|
|
96
|
+
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.
|
|
3
|
+
exports.snapshotRequestSchema = exports.SNAPSHOT_LAYOUTS = void 0;
|
|
4
4
|
exports.layoutOfWidth = layoutOfWidth;
|
|
5
5
|
exports.isSnapshotLayout = isSnapshotLayout;
|
|
6
6
|
const zod_1 = require("zod");
|
|
@@ -18,7 +18,7 @@ function layoutOfWidth(width) {
|
|
|
18
18
|
function isSnapshotLayout(value) {
|
|
19
19
|
return exports.SNAPSHOT_LAYOUTS.includes(value);
|
|
20
20
|
}
|
|
21
|
-
|
|
21
|
+
const SNAPSHOT_COLOR_SCHEMES = ["light", "dark"];
|
|
22
22
|
const dimensionSchema = (max) => zod_1.z.object({
|
|
23
23
|
width: zod_1.z.number().int().min(1).max(max),
|
|
24
24
|
height: zod_1.z.number().int().min(1).max(max),
|
|
@@ -27,7 +27,7 @@ const snapshotPageSchema = zod_1.z.object({
|
|
|
27
27
|
website: zod_1.z.string().min(1).max(constants_1.MAX_WEBSITE_ID_LENGTH),
|
|
28
28
|
url: zod_1.z.string().min(1).max(constants_1.MAX_URL_LENGTH),
|
|
29
29
|
viewport: dimensionSchema(constants_1.MAX_SNAPSHOT_VIEWPORT_PX),
|
|
30
|
-
colorScheme: zod_1.z.enum(
|
|
30
|
+
colorScheme: zod_1.z.enum(SNAPSHOT_COLOR_SCHEMES).optional(),
|
|
31
31
|
});
|
|
32
32
|
exports.snapshotRequestSchema = zod_1.z.union([
|
|
33
33
|
snapshotPageSchema.extend({
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"snapshots.js","sourceRoot":"","sources":["../../src/types/snapshots.ts"],"names":[],"mappings":";;;AAwBA,sCAKC;AAED,4CAEC;AAjCD,6BAAwB;AACxB,2CAOqB;AAMR,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;
|
|
1
|
+
{"version":3,"file":"snapshots.js","sourceRoot":"","sources":["../../src/types/snapshots.ts"],"names":[],"mappings":";;;AAwBA,sCAKC;AAED,4CAEC;AAjCD,6BAAwB;AACxB,2CAOqB;AAMR,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;CACvD,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,5 +1,5 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
1
|
+
declare const TOP_DIMENSIONS: readonly ["topPages", "topEntryPages", "topExitPages", "topReferrers", "topUtmSources", "topUtmMediums", "topUtmCampaigns", "topUtmTerms", "topUtmContents", "topCampaigns", "topChannels", "topDevices", "topBrowsers", "topCountries", "topEvents", "topLanguages"];
|
|
2
|
+
declare const MARKETING_CHANNELS: readonly ["direct", "organic", "social", "referral", "paid"];
|
|
3
3
|
export type MarketingChannel = (typeof MARKETING_CHANNELS)[number];
|
|
4
4
|
export type TopDimension = (typeof TOP_DIMENSIONS)[number];
|
|
5
5
|
export declare function byDimension<T>(make: (dimension: TopDimension) => T): Record<TopDimension, T>;
|
|
@@ -36,3 +36,4 @@ export interface DeviceInfo {
|
|
|
36
36
|
os?: string;
|
|
37
37
|
deviceType?: string;
|
|
38
38
|
}
|
|
39
|
+
export {};
|
package/dist/types/statistics.js
CHANGED
|
@@ -1,8 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.MARKETING_CHANNELS = exports.TOP_DIMENSIONS = void 0;
|
|
4
3
|
exports.byDimension = byDimension;
|
|
5
|
-
|
|
4
|
+
const TOP_DIMENSIONS = [
|
|
6
5
|
"topPages",
|
|
7
6
|
"topEntryPages",
|
|
8
7
|
"topExitPages",
|
|
@@ -20,7 +19,7 @@ exports.TOP_DIMENSIONS = [
|
|
|
20
19
|
"topEvents",
|
|
21
20
|
"topLanguages",
|
|
22
21
|
];
|
|
23
|
-
|
|
22
|
+
const MARKETING_CHANNELS = [
|
|
24
23
|
"direct",
|
|
25
24
|
"organic",
|
|
26
25
|
"social",
|
|
@@ -28,6 +27,6 @@ exports.MARKETING_CHANNELS = [
|
|
|
28
27
|
"paid",
|
|
29
28
|
];
|
|
30
29
|
function byDimension(make) {
|
|
31
|
-
return Object.fromEntries(
|
|
30
|
+
return Object.fromEntries(TOP_DIMENSIONS.map((dimension) => [dimension, make(dimension)]));
|
|
32
31
|
}
|
|
33
32
|
//# sourceMappingURL=statistics.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"statistics.js","sourceRoot":"","sources":["../../src/types/statistics.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"statistics.js","sourceRoot":"","sources":["../../src/types/statistics.ts"],"names":[],"mappings":";;AAqDA,kCAMC;AAhDD,MAAM,cAAc,GAAG;IACrB,UAAU;IACV,eAAe;IACf,cAAc;IACd,cAAc;IACd,eAAe;IACf,eAAe;IACf,iBAAiB;IACjB,aAAa;IACb,gBAAgB;IAChB,cAAc;IACd,aAAa;IACb,YAAY;IACZ,aAAa;IACb,cAAc;IACd,WAAW;IACX,cAAc;CACN,CAAC;AAQX,MAAM,kBAAkB,GAAG;IACzB,QAAQ;IACR,SAAS;IACT,QAAQ;IACR,UAAU;IACV,MAAM;CACE,CAAC;AAWX,SAAgB,WAAW,CACzB,IAAoC;IAEpC,OAAO,MAAM,CAAC,WAAW,CACvB,cAAc,CAAC,GAAG,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC,SAAS,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CACrC,CAAC;AAC/B,CAAC"}
|
|
@@ -31,14 +31,14 @@ declare const experimentSchema: z.ZodObject<{
|
|
|
31
31
|
key: string;
|
|
32
32
|
weight: number;
|
|
33
33
|
}[];
|
|
34
|
-
status?: "
|
|
34
|
+
status?: "draft" | "running" | "stopped" | undefined;
|
|
35
35
|
}, {
|
|
36
36
|
key: string;
|
|
37
37
|
variations: {
|
|
38
38
|
key: string;
|
|
39
39
|
weight: number;
|
|
40
40
|
}[];
|
|
41
|
-
status?: "
|
|
41
|
+
status?: "draft" | "running" | "stopped" | undefined;
|
|
42
42
|
}>;
|
|
43
43
|
export type ExperimentInput = z.output<typeof experimentSchema>;
|
|
44
44
|
export declare function parseExperimentInput(raw: unknown): ExperimentInput | null;
|
|
@@ -4,11 +4,11 @@ declare const stepSchema: z.ZodObject<{
|
|
|
4
4
|
kind: z.ZodEnum<["url", "custom"]>;
|
|
5
5
|
value: z.ZodString;
|
|
6
6
|
}, "strip", z.ZodTypeAny, {
|
|
7
|
+
kind: "url" | "custom";
|
|
7
8
|
value: string;
|
|
8
|
-
kind: "custom" | "url";
|
|
9
9
|
}, {
|
|
10
|
+
kind: "url" | "custom";
|
|
10
11
|
value: string;
|
|
11
|
-
kind: "custom" | "url";
|
|
12
12
|
}>;
|
|
13
13
|
export type FunnelStepInput = z.output<typeof stepSchema>;
|
|
14
14
|
export declare function parseFunnelSteps(raw: unknown): FunnelStepInput[];
|
|
@@ -20,23 +20,23 @@ export declare class FunnelStepsType extends DataType {
|
|
|
20
20
|
kind: z.ZodEnum<["url", "custom"]>;
|
|
21
21
|
value: z.ZodString;
|
|
22
22
|
}, "strip", z.ZodTypeAny, {
|
|
23
|
+
kind: "url" | "custom";
|
|
23
24
|
value: string;
|
|
24
|
-
kind: "custom" | "url";
|
|
25
25
|
}, {
|
|
26
|
+
kind: "url" | "custom";
|
|
26
27
|
value: string;
|
|
27
|
-
kind: "custom" | "url";
|
|
28
28
|
}>, "many">]>, any, string | {
|
|
29
|
+
kind: "url" | "custom";
|
|
29
30
|
value: string;
|
|
30
|
-
kind: "custom" | "url";
|
|
31
31
|
}[]>, z.ZodArray<z.ZodObject<{
|
|
32
32
|
kind: z.ZodEnum<["url", "custom"]>;
|
|
33
33
|
value: z.ZodString;
|
|
34
34
|
}, "strip", z.ZodTypeAny, {
|
|
35
|
+
kind: "url" | "custom";
|
|
35
36
|
value: string;
|
|
36
|
-
kind: "custom" | "url";
|
|
37
37
|
}, {
|
|
38
|
+
kind: "url" | "custom";
|
|
38
39
|
value: string;
|
|
39
|
-
kind: "custom" | "url";
|
|
40
40
|
}>, "many">>;
|
|
41
41
|
}
|
|
42
42
|
export {};
|
|
@@ -3,9 +3,7 @@
|
|
|
3
3
|
*
|
|
4
4
|
* The real module only exists inside the Vue workspace the DMS frontend
|
|
5
5
|
* loader generates; these tests run the module's own sources directly, so the
|
|
6
|
-
* few SDK helpers they reach are stubbed with the same shapes.
|
|
7
|
-
* contract is checked by `pnpm test:frontend`, which builds this module
|
|
8
|
-
* through the loader for real.
|
|
6
|
+
* few SDK helpers they reach are stubbed with the same shapes.
|
|
9
7
|
*/
|
|
10
8
|
import type { Component, Plugin } from 'vue'
|
|
11
9
|
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@antelopejs/dms-marketing",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.3.1",
|
|
4
4
|
"license": "Apache-2.0",
|
|
5
5
|
"repository": {
|
|
6
6
|
"type": "git",
|
|
@@ -9,6 +9,7 @@
|
|
|
9
9
|
"files": [
|
|
10
10
|
"LICENSE",
|
|
11
11
|
"dist",
|
|
12
|
+
"!dist/.tsbuildinfo",
|
|
12
13
|
"frontend-vue",
|
|
13
14
|
"static"
|
|
14
15
|
],
|
|
@@ -29,12 +30,12 @@
|
|
|
29
30
|
"dependencies": {
|
|
30
31
|
"@antelopejs/interface-api": ">=0.0.13 <1.0.0",
|
|
31
32
|
"@antelopejs/interface-api-util": ">=0.1.2 <1.0.0",
|
|
32
|
-
"@antelopejs/interface-core": ">=0.
|
|
33
|
+
"@antelopejs/interface-core": ">=0.1.1 <1.0.0",
|
|
33
34
|
"@antelopejs/interface-data-api": ">=0.1.9 <1.0.0",
|
|
34
35
|
"@antelopejs/interface-database": ">=0.1.7 <1.0.0",
|
|
35
36
|
"@antelopejs/interface-database-decorators": ">=0.1.6 <1.0.0",
|
|
36
|
-
"@antelopejs/interface-dms": ">=0.
|
|
37
|
-
"@antelopejs/interface-dms-marketing": ">=0.
|
|
37
|
+
"@antelopejs/interface-dms": ">=0.2.0 <1.0.0",
|
|
38
|
+
"@antelopejs/interface-dms-marketing": ">=0.3.0 <1.0.0",
|
|
38
39
|
"defu": "^6.1.4",
|
|
39
40
|
"maxmind": "^5.0.7",
|
|
40
41
|
"node-cron": "^4.2.1",
|
|
@@ -42,11 +43,9 @@
|
|
|
42
43
|
"zod": "~3.24.4"
|
|
43
44
|
},
|
|
44
45
|
"devDependencies": {
|
|
45
|
-
"@antelopejs/core": ">=1.
|
|
46
|
-
"@antelopejs/
|
|
47
|
-
"@antelopejs/
|
|
48
|
-
"@antelopejs/interface-mongodb": ">=0.0.3 <1.0.0",
|
|
49
|
-
"@antelopejs/mongodb": "1.3.0",
|
|
46
|
+
"@antelopejs/core": ">=1.9.1 <2",
|
|
47
|
+
"@antelopejs/interface-mongodb": ">=0.0.5 <1.0.0",
|
|
48
|
+
"@antelopejs/mongodb": "1.3.1",
|
|
50
49
|
"@antelopejs/tooling-configs": ">=0.0.6 <1.0.0",
|
|
51
50
|
"@types/node": "^22.19.15",
|
|
52
51
|
"knip": "^6.34.0",
|
|
@@ -58,7 +57,7 @@
|
|
|
58
57
|
"release-it": "^19.2.4",
|
|
59
58
|
"release-it-changelogen": "^0.1.0",
|
|
60
59
|
"rimraf": "^6.1.3",
|
|
61
|
-
"typescript": "^
|
|
60
|
+
"typescript": "^6.0.3"
|
|
62
61
|
},
|
|
63
62
|
"antelopeJs": {
|
|
64
63
|
"baseUrl": "dist",
|
|
@@ -73,18 +72,17 @@
|
|
|
73
72
|
}
|
|
74
73
|
},
|
|
75
74
|
"scripts": {
|
|
76
|
-
"build": "pnpm --filter @antelopejs/interface-dms-marketing build && rimraf dist && tsc
|
|
75
|
+
"build": "pnpm --filter @antelopejs/interface-dms-marketing build && rimraf dist && tsc",
|
|
77
76
|
"test": "pnpm run test:backend && pnpm run test:layer",
|
|
78
77
|
"test:backend": "pnpm run build && ajs module test .",
|
|
79
78
|
"test:layer": "cd frontend-vue && pnpm test",
|
|
80
|
-
"test:frontend": "node scripts/check-frontend.mjs",
|
|
81
79
|
"dev": "ajs project run -w -p playground",
|
|
82
80
|
"frontend:dev": "cd playground && pnpm frontend:dev",
|
|
83
81
|
"lint": "oxlint && oxfmt --check . && cd frontend-vue && pnpm lint",
|
|
84
82
|
"lint:fix": "oxlint --fix --max-warnings=1000000 && oxfmt . && cd frontend-vue && pnpm lint:fix",
|
|
85
83
|
"format": "oxfmt . && cd frontend-vue && pnpm format",
|
|
86
84
|
"release": "pnpm --filter @antelopejs/interface-dms-marketing build && pnpm --dir frontend-vue install --frozen-lockfile && pnpm run lint && release-it",
|
|
87
|
-
"typecheck": "tsc
|
|
85
|
+
"typecheck": "tsc --noEmit",
|
|
88
86
|
"knip": "knip --dependencies",
|
|
89
87
|
"knip:all": "knip"
|
|
90
88
|
}
|