@rudderhq/server 0.7.0 → 0.7.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/dist/bootstrap/register-api-routes.js +1 -1
- package/dist/bootstrap/register-api-routes.js.map +1 -1
- package/dist/bundled-plugins/plugin-linear/dist/worker.js +3 -1
- package/dist/bundled-plugins/plugin-linear/dist/worker.js.map +2 -2
- package/dist/product-analytics-collector-config.d.ts +33 -0
- package/dist/product-analytics-collector-config.d.ts.map +1 -0
- package/dist/product-analytics-collector-config.js +67 -0
- package/dist/product-analytics-collector-config.js.map +1 -0
- package/dist/product-analytics-collector-server.d.ts +26 -0
- package/dist/product-analytics-collector-server.d.ts.map +1 -0
- package/dist/product-analytics-collector-server.js +150 -0
- package/dist/product-analytics-collector-server.js.map +1 -0
- package/dist/routes/instance-settings.d.ts +1 -0
- package/dist/routes/instance-settings.d.ts.map +1 -1
- package/dist/routes/instance-settings.js +58 -0
- package/dist/routes/instance-settings.js.map +1 -1
- package/dist/routes/product-analytics-collector-report.d.ts +7 -0
- package/dist/routes/product-analytics-collector-report.d.ts.map +1 -0
- package/dist/routes/product-analytics-collector-report.js +159 -0
- package/dist/routes/product-analytics-collector-report.js.map +1 -0
- package/dist/routes/product-analytics-collector.d.ts +14 -2
- package/dist/routes/product-analytics-collector.d.ts.map +1 -1
- package/dist/routes/product-analytics-collector.js +141 -4
- package/dist/routes/product-analytics-collector.js.map +1 -1
- package/dist/routes/product-analytics.d.ts.map +1 -1
- package/dist/routes/product-analytics.js +40 -3
- package/dist/routes/product-analytics.js.map +1 -1
- package/dist/services/instance-settings.d.ts.map +1 -1
- package/dist/services/instance-settings.js +4 -0
- package/dist/services/instance-settings.js.map +1 -1
- package/dist/services/product-analytics-collector-maintenance.d.ts +25 -0
- package/dist/services/product-analytics-collector-maintenance.d.ts.map +1 -0
- package/dist/services/product-analytics-collector-maintenance.js +309 -0
- package/dist/services/product-analytics-collector-maintenance.js.map +1 -0
- package/dist/services/product-analytics-collector-maintenance.test.d.ts +2 -0
- package/dist/services/product-analytics-collector-maintenance.test.d.ts.map +1 -0
- package/dist/services/product-analytics-collector-maintenance.test.js +14 -0
- package/dist/services/product-analytics-collector-maintenance.test.js.map +1 -0
- package/dist/services/product-analytics-collector.d.ts +75 -3
- package/dist/services/product-analytics-collector.d.ts.map +1 -1
- package/dist/services/product-analytics-collector.js +363 -12
- package/dist/services/product-analytics-collector.js.map +1 -1
- package/dist/services/product-analytics-collector.test.js +25 -0
- package/dist/services/product-analytics-collector.test.js.map +1 -1
- package/dist/services/product-analytics-fixture.d.ts +7 -0
- package/dist/services/product-analytics-fixture.d.ts.map +1 -0
- package/dist/services/product-analytics-fixture.js +65 -0
- package/dist/services/product-analytics-fixture.js.map +1 -0
- package/dist/services/product-analytics-prd-gates.test.d.ts +2 -0
- package/dist/services/product-analytics-prd-gates.test.d.ts.map +1 -0
- package/dist/services/product-analytics-prd-gates.test.js +135 -0
- package/dist/services/product-analytics-prd-gates.test.js.map +1 -0
- package/dist/services/product-analytics.d.ts +17 -5
- package/dist/services/product-analytics.d.ts.map +1 -1
- package/dist/services/product-analytics.js +94 -12
- package/dist/services/product-analytics.js.map +1 -1
- package/package.json +17 -14
- package/ui-dist/assets/{LibraryLiveSurface-DeUIV5N_.js → LibraryLiveSurface-CZED7oKj.js} +1 -1
- package/ui-dist/assets/{abnfDiagram-VRR7QNED-BaoLM9Pd.js → abnfDiagram-VRR7QNED-BoPyIoAq.js} +1 -1
- package/ui-dist/assets/{arc-Cx0L6o2z.js → arc-DTYs4RCH.js} +1 -1
- package/ui-dist/assets/{architectureDiagram-ZJ3FMSHR-zVfZP7v4.js → architectureDiagram-ZJ3FMSHR-BGfp2S_3.js} +1 -1
- package/ui-dist/assets/{blockDiagram-677ZJIJ3-BiWWFP9R.js → blockDiagram-677ZJIJ3-aW0EGIUf.js} +1 -1
- package/ui-dist/assets/{c4Diagram-LMCZKHZV-CX65GSJ6.js → c4Diagram-LMCZKHZV--1itKgA2.js} +1 -1
- package/ui-dist/assets/channel-DLNwhPnC.js +1 -0
- package/ui-dist/assets/{chunk-2Q5K7J3B-CH6PlelX.js → chunk-2Q5K7J3B-ZIqIozPQ.js} +1 -1
- package/ui-dist/assets/{chunk-32BRIVSS-C7ZEXYO8.js → chunk-32BRIVSS-DiwBEZVQ.js} +1 -1
- package/ui-dist/assets/{chunk-5VM5RSS4-CyInWuue.js → chunk-5VM5RSS4-CLOrTmL8.js} +1 -1
- package/ui-dist/assets/{chunk-EX3LRPZG-D58qFIdM.js → chunk-EX3LRPZG-D6xZzF47.js} +1 -1
- package/ui-dist/assets/{chunk-JWPE2WC7-CJ3Qx30f.js → chunk-JWPE2WC7-B9tYvTZl.js} +1 -1
- package/ui-dist/assets/{chunk-MOJQB5TN-BO4bKVLH.js → chunk-MOJQB5TN-D_qo-SzM.js} +1 -1
- package/ui-dist/assets/{chunk-RYQCIY6F-DxBmxcYc.js → chunk-RYQCIY6F-ChPHGc2P.js} +1 -1
- package/ui-dist/assets/{chunk-V7JOEXUC-Chdnd6Lq.js → chunk-V7JOEXUC-Dk6GbZYp.js} +1 -1
- package/ui-dist/assets/{chunk-VR4S4FIN-GkW_x_pD.js → chunk-VR4S4FIN-B6AREC1T.js} +1 -1
- package/ui-dist/assets/{chunk-XXDRQBXY-BJyBGcSF.js → chunk-XXDRQBXY-CUyO-JUr.js} +1 -1
- package/ui-dist/assets/classDiagram-OUVF2IWQ-JsIc-rlc.js +1 -0
- package/ui-dist/assets/classDiagram-v2-EOCWNBFH-JsIc-rlc.js +1 -0
- package/ui-dist/assets/{cose-bilkent-JH36ORCC-BWP2r8TX.js → cose-bilkent-JH36ORCC-BCxIInLZ.js} +1 -1
- package/ui-dist/assets/{cynefin-VYW2F7L2-C08dfI3w.js → cynefin-VYW2F7L2-DqsnpnHA.js} +1 -1
- package/ui-dist/assets/{cynefinDiagram-TSTJHNR4-h6dXjTaO.js → cynefinDiagram-TSTJHNR4-BD7QQNLW.js} +1 -1
- package/ui-dist/assets/{dagre-VKFMJZFB-CWDgoFQD.js → dagre-VKFMJZFB-DaE160f7.js} +1 -1
- package/ui-dist/assets/{diagram-FQU43EPY-CK1j48d-.js → diagram-FQU43EPY-DZ0c59y8.js} +1 -1
- package/ui-dist/assets/{diagram-G47NLZAW-CoSiG57q.js → diagram-G47NLZAW-C_413g5E.js} +1 -1
- package/ui-dist/assets/{diagram-NH7WQ7WH-DRG-xXGQ.js → diagram-NH7WQ7WH-D_o9pXB-.js} +1 -1
- package/ui-dist/assets/{diagram-OA4YK3LP-D04mMwYs.js → diagram-OA4YK3LP-BI2xMqiW.js} +1 -1
- package/ui-dist/assets/{diagram-WEI45ONY-ZkC1ZQMq.js → diagram-WEI45ONY-hhM8R_14.js} +1 -1
- package/ui-dist/assets/{ebnfDiagram-CCIWWBDH-BxMIw9PZ.js → ebnfDiagram-CCIWWBDH-DfFgEtmG.js} +1 -1
- package/ui-dist/assets/{erDiagram-Q63AITRT-B4Zwbn84.js → erDiagram-Q63AITRT-CCw4ysHK.js} +1 -1
- package/ui-dist/assets/{flowDiagram-23GEKE2U-D5pYz8Px.js → flowDiagram-23GEKE2U-CzC1SMmo.js} +1 -1
- package/ui-dist/assets/{ganttDiagram-NO4QXBWP-RSramodc.js → ganttDiagram-NO4QXBWP-CbPJIrIw.js} +1 -1
- package/ui-dist/assets/{gitGraphDiagram-IHSO6WYX-BFQfCkMd.js → gitGraphDiagram-IHSO6WYX-jCxJ66_C.js} +1 -1
- package/ui-dist/assets/{graph-DuSS8poS.js → graph-BfNZ9Jzj.js} +1 -1
- package/ui-dist/assets/{index-DRbt_Svi.js → index-B3h9Vdxx.js} +1 -1
- package/ui-dist/assets/{index-9U78M9Np.js → index-B8q4cbOz.js} +1 -1
- package/ui-dist/assets/{index-olsHIcXs.js → index-BE1vSI6a.js} +1 -1
- package/ui-dist/assets/{index-B-NP8fOI.js → index-BKn4zRjf.js} +1 -1
- package/ui-dist/assets/{index-BKXUkeeU.js → index-BULll2e0.js} +1 -1
- package/ui-dist/assets/{index-BpvytaKr.js → index-BjxRqzZK.js} +1 -1
- package/ui-dist/assets/{index-Cyq94-QT.js → index-Bwo-C8W5.js} +1 -1
- package/ui-dist/assets/{index-BADa8mxG.js → index-ByUFNj0O.js} +1 -1
- package/ui-dist/assets/{index-CHbXMgL0.js → index-Chop-Dpa.js} +1 -1
- package/ui-dist/assets/{index-BU0KLNTt.js → index-Ck-ZNQeD.js} +541 -528
- package/ui-dist/assets/index-CxPYXL3t.css +1 -0
- package/ui-dist/assets/{index-wZlfBtwh.js → index-D00XdcOq.js} +1 -1
- package/ui-dist/assets/{index-BGcgy63z.js → index-D_K-9VDs.js} +1 -1
- package/ui-dist/assets/{index-DzdRgH-y.js → index-DiMDROQY.js} +1 -1
- package/ui-dist/assets/{index-5tzBDABj.js → index-DmjAbzHq.js} +1 -1
- package/ui-dist/assets/{index-De3vaw_P.js → index-SkHIC7Ma.js} +1 -1
- package/ui-dist/assets/{infoDiagram-FWYZ7A6U-f5i4pO3J.js → infoDiagram-FWYZ7A6U-BkDimGw3.js} +1 -1
- package/ui-dist/assets/{ishikawaDiagram-FXEZZL3T-CVEdv5i_.js → ishikawaDiagram-FXEZZL3T-BAyUfn6x.js} +1 -1
- package/ui-dist/assets/{journeyDiagram-5HDEW3XC-Cvp7vWcy.js → journeyDiagram-5HDEW3XC-DlbpTZHG.js} +1 -1
- package/ui-dist/assets/{kanban-definition-HUTT4EX6-C6dURjjK.js → kanban-definition-HUTT4EX6-Cd67S14K.js} +1 -1
- package/ui-dist/assets/{layout-DxdOu9MY.js → layout-Dc4YEiCC.js} +1 -1
- package/ui-dist/assets/{linear-CRi8RB_7.js → linear-BhRsbD_5.js} +1 -1
- package/ui-dist/assets/{map-BlpDrw_l.js → map-CEWybj6z.js} +1 -1
- package/ui-dist/assets/{mermaid.core-2Gz9YusH.js → mermaid.core-CqqAFYNg.js} +4 -4
- package/ui-dist/assets/{mindmap-definition-LN4V7U3C-BmSjJLTI.js → mindmap-definition-LN4V7U3C-CCb-XmEi.js} +1 -1
- package/ui-dist/assets/{pegDiagram-2B236MQR-BTUboUw8.js → pegDiagram-2B236MQR-CqUV14VZ.js} +1 -1
- package/ui-dist/assets/{pieDiagram-ENE6RG2P-CVPP8SYv.js → pieDiagram-ENE6RG2P-Dn_M_GRM.js} +1 -1
- package/ui-dist/assets/{quadrantDiagram-ABIIQ3AL-BG4FmirT.js → quadrantDiagram-ABIIQ3AL-rAEhJDr2.js} +1 -1
- package/ui-dist/assets/{railroadDiagram-RFXS5EU6-DFRNo9hF.js → railroadDiagram-RFXS5EU6-iE2o_jkH.js} +1 -1
- package/ui-dist/assets/{requirementDiagram-TGXJPOKE-DpnVF9qP.js → requirementDiagram-TGXJPOKE-BFyKBR1h.js} +1 -1
- package/ui-dist/assets/{sankeyDiagram-HTMAVEWB-D1ETFdSE.js → sankeyDiagram-HTMAVEWB-DRa_2YB6.js} +1 -1
- package/ui-dist/assets/{sequenceDiagram-DBY2YBRQ-CNqzB_AL.js → sequenceDiagram-DBY2YBRQ-BG8VIjD7.js} +1 -1
- package/ui-dist/assets/{sizeCapture-X5ZJPWSS-DuoMCjdH.js → sizeCapture-X5ZJPWSS-CS1xlbzG.js} +1 -1
- package/ui-dist/assets/{stateDiagram-2N3HPSRC-fmHeKL8l.js → stateDiagram-2N3HPSRC-BSl2RUJ1.js} +1 -1
- package/ui-dist/assets/stateDiagram-v2-6OUMAXLB-DUVNSzI8.js +1 -0
- package/ui-dist/assets/{swimlanes-5IMT3BWC-hjosaIhT.js → swimlanes-5IMT3BWC-BT8Hrm9J.js} +2 -2
- package/ui-dist/assets/swimlanesDiagram-G3AALYLV-DfLFj7sh.js +8 -0
- package/ui-dist/assets/{timeline-definition-FHXFAJF6-xoMEClc-.js → timeline-definition-FHXFAJF6-CfYIqEuQ.js} +1 -1
- package/ui-dist/assets/{vennDiagram-L72KCM5P-sdSXQfX-.js → vennDiagram-L72KCM5P-C8zBH7o9.js} +1 -1
- package/ui-dist/assets/{wardleyDiagram-EHGQE667-BbQBSKlD.js → wardleyDiagram-EHGQE667-D5HyFfI9.js} +1 -1
- package/ui-dist/assets/{xychartDiagram-FW5EYKEG-BfAtadyK.js → xychartDiagram-FW5EYKEG-CGItJmLx.js} +1 -1
- package/ui-dist/index.html +2 -2
- package/ui-dist/assets/channel-CHc3ibOz.js +0 -1
- package/ui-dist/assets/classDiagram-OUVF2IWQ-9iLZpz3t.js +0 -1
- package/ui-dist/assets/classDiagram-v2-EOCWNBFH-9iLZpz3t.js +0 -1
- package/ui-dist/assets/index-QrRs-r-4.css +0 -1
- package/ui-dist/assets/stateDiagram-v2-6OUMAXLB-DajAVikh.js +0 -1
- package/ui-dist/assets/swimlanesDiagram-G3AALYLV-DJjG9OJ-.js +0 -8
|
@@ -1,5 +1,7 @@
|
|
|
1
|
+
import { privateProductAnalyticsCollectorEvents, privateProductAnalyticsCollectorInstallations, privateProductAnalyticsCollectorQualityCounters, privateProductAnalyticsCollectorSubjects, } from "@rudderhq/db";
|
|
2
|
+
import { and, eq, sql } from "drizzle-orm";
|
|
1
3
|
import { createHash } from "node:crypto";
|
|
2
|
-
import { PRODUCT_ANALYTICS_EVENT_NAMES } from "./product-analytics.js";
|
|
4
|
+
import { PRODUCT_ANALYTICS_EVENT_NAMES, PRODUCT_ANALYTICS_EVENT_PROPERTY_ALLOWLIST } from "./product-analytics.js";
|
|
3
5
|
const MAX_BATCH_EVENTS = 100;
|
|
4
6
|
const MAX_BATCH_BYTES = 64 * 1024;
|
|
5
7
|
const MAX_EVENT_BYTES = 2 * 1024;
|
|
@@ -10,6 +12,7 @@ const SENSITIVE_KEY = /(prompt|transcript|title|description|body|content|url|tok
|
|
|
10
12
|
const EVENT_NAMES = new Set(PRODUCT_ANALYTICS_EVENT_NAMES);
|
|
11
13
|
export class InMemoryProductAnalyticsCollectorStore {
|
|
12
14
|
installations = new Map();
|
|
15
|
+
subjects = new Map();
|
|
13
16
|
events = new Map();
|
|
14
17
|
getInstallationState(installationId) {
|
|
15
18
|
return this.installations.get(installationId) ?? null;
|
|
@@ -17,6 +20,12 @@ export class InMemoryProductAnalyticsCollectorStore {
|
|
|
17
20
|
setInstallationState(installationId, state) {
|
|
18
21
|
this.installations.set(installationId, { ...state });
|
|
19
22
|
}
|
|
23
|
+
getSubjectState(installationId, analyticsSubject) {
|
|
24
|
+
return this.subjects.get(`${installationId}\u0000${analyticsSubject}`) ?? null;
|
|
25
|
+
}
|
|
26
|
+
setSubjectState(installationId, analyticsSubject, state) {
|
|
27
|
+
this.subjects.set(`${installationId}\u0000${analyticsSubject}`, { ...state });
|
|
28
|
+
}
|
|
20
29
|
getEvent(eventId) {
|
|
21
30
|
return this.events.get(eventId) ?? null;
|
|
22
31
|
}
|
|
@@ -41,13 +50,81 @@ function canonicalJson(value) {
|
|
|
41
50
|
}
|
|
42
51
|
return JSON.stringify(value);
|
|
43
52
|
}
|
|
44
|
-
function
|
|
53
|
+
export function hashProductAnalyticsCollectorPayload(value) {
|
|
45
54
|
return createHash("sha256").update(canonicalJson(value)).digest("hex");
|
|
46
55
|
}
|
|
56
|
+
/**
|
|
57
|
+
* Build a privacy-safe collector dashboard without exposing installation IDs.
|
|
58
|
+
* The central deployment can persist the same dimensions in SQL rollups; this
|
|
59
|
+
* pure projection is also the deterministic contract fixture for those jobs.
|
|
60
|
+
*/
|
|
61
|
+
export function buildProductAnalyticsCollectorDashboard(events, options = {}) {
|
|
62
|
+
const privacyThreshold = Number.isInteger(options.privacyThreshold) && (options.privacyThreshold ?? 0) > 0
|
|
63
|
+
? options.privacyThreshold
|
|
64
|
+
: 10;
|
|
65
|
+
const rollupGroups = new Map();
|
|
66
|
+
const firstSeenByInstallation = new Map();
|
|
67
|
+
let lateEventCount = 0;
|
|
68
|
+
let backfillEventCount = 0;
|
|
69
|
+
let missingPseudonymousInstallationCount = 0;
|
|
70
|
+
for (const event of events) {
|
|
71
|
+
const occurredAt = new Date(event.occurredAt);
|
|
72
|
+
const effectiveAt = new Date(event.effectiveAt);
|
|
73
|
+
if (event.late || effectiveAt.getTime() !== occurredAt.getTime())
|
|
74
|
+
lateEventCount += 1;
|
|
75
|
+
if (event.isBackfill)
|
|
76
|
+
backfillEventCount += 1;
|
|
77
|
+
if (!event.pseudonymousInstallationId)
|
|
78
|
+
missingPseudonymousInstallationCount += 1;
|
|
79
|
+
const day = occurredAt.toISOString().slice(0, 10);
|
|
80
|
+
const key = `${day}\u0000${event.eventName}\u0000${event.origin}`;
|
|
81
|
+
const group = rollupGroups.get(key) ?? { day, eventName: event.eventName, origin: event.origin, eventCount: 0, installations: new Set() };
|
|
82
|
+
group.eventCount += 1;
|
|
83
|
+
group.installations.add(event.installationId);
|
|
84
|
+
rollupGroups.set(key, group);
|
|
85
|
+
const firstSeenDay = firstSeenByInstallation.get(event.installationId);
|
|
86
|
+
if (!firstSeenDay || day < firstSeenDay)
|
|
87
|
+
firstSeenByInstallation.set(event.installationId, day);
|
|
88
|
+
}
|
|
89
|
+
const rollups = [...rollupGroups.values()]
|
|
90
|
+
.sort((left, right) => left.day.localeCompare(right.day) || left.eventName.localeCompare(right.eventName) || left.origin.localeCompare(right.origin))
|
|
91
|
+
.map((group) => {
|
|
92
|
+
const contributingInstallations = group.installations.size;
|
|
93
|
+
const suppressed = contributingInstallations < privacyThreshold;
|
|
94
|
+
return {
|
|
95
|
+
day: group.day,
|
|
96
|
+
eventName: group.eventName,
|
|
97
|
+
origin: group.origin,
|
|
98
|
+
eventCount: suppressed ? null : group.eventCount,
|
|
99
|
+
contributingInstallations,
|
|
100
|
+
suppressed,
|
|
101
|
+
};
|
|
102
|
+
});
|
|
103
|
+
const cohorts = [...firstSeenByInstallation.values()].reduce((counts, day) => {
|
|
104
|
+
counts.set(day, (counts.get(day) ?? 0) + 1);
|
|
105
|
+
return counts;
|
|
106
|
+
}, new Map());
|
|
107
|
+
return {
|
|
108
|
+
rollups,
|
|
109
|
+
cohorts: [...cohorts.entries()].sort(([left], [right]) => left.localeCompare(right)).map(([firstSeenDay, installationCount]) => ({
|
|
110
|
+
firstSeenDay,
|
|
111
|
+
installationCount: installationCount < privacyThreshold ? null : installationCount,
|
|
112
|
+
suppressed: installationCount < privacyThreshold,
|
|
113
|
+
})),
|
|
114
|
+
quality: {
|
|
115
|
+
acceptedEventCount: events.length,
|
|
116
|
+
lateEventCount,
|
|
117
|
+
backfillEventCount,
|
|
118
|
+
missingPseudonymousInstallationCount,
|
|
119
|
+
suppressedRollupCount: rollups.filter((rollup) => rollup.suppressed).length,
|
|
120
|
+
privacyThreshold,
|
|
121
|
+
},
|
|
122
|
+
};
|
|
123
|
+
}
|
|
47
124
|
function reject(code, eventId, late = false) {
|
|
48
125
|
return { eventId, status: "rejected", errorCode: code, late };
|
|
49
126
|
}
|
|
50
|
-
function
|
|
127
|
+
export function validateProductAnalyticsCollectorEvent(value, now = new Date()) {
|
|
51
128
|
if (!value || typeof value !== "object" || Array.isArray(value))
|
|
52
129
|
return reject("invalid_schema", "unknown");
|
|
53
130
|
const event = value;
|
|
@@ -69,10 +146,10 @@ function validateEvent(value) {
|
|
|
69
146
|
const occurredAt = new Date(event.occurredAt);
|
|
70
147
|
if (Number.isNaN(occurredAt.getTime()))
|
|
71
148
|
return reject("invalid_event", event.eventId);
|
|
72
|
-
const
|
|
73
|
-
if (occurredAt.getTime() >
|
|
149
|
+
const nowMs = now.getTime();
|
|
150
|
+
if (occurredAt.getTime() > nowMs + MAX_FUTURE_SKEW_MS)
|
|
74
151
|
return reject("future_event", event.eventId);
|
|
75
|
-
const late =
|
|
152
|
+
const late = nowMs - occurredAt.getTime() > MAX_LATE_EVENT_MS;
|
|
76
153
|
if (!["production", "development", "test"].includes(String(event.environment)))
|
|
77
154
|
return reject("invalid_event", event.eventId, late);
|
|
78
155
|
if (!["development", "preview", "canary", "stable"].includes(String(event.releaseChannel)))
|
|
@@ -96,10 +173,13 @@ function validateEvent(value) {
|
|
|
96
173
|
if (!event.properties || typeof event.properties !== "object" || Array.isArray(event.properties))
|
|
97
174
|
return reject("invalid_event", event.eventId, late);
|
|
98
175
|
for (const [key, property] of Object.entries(event.properties)) {
|
|
99
|
-
|
|
176
|
+
const allowlist = PRODUCT_ANALYTICS_EVENT_PROPERTY_ALLOWLIST[event.eventName];
|
|
177
|
+
if (!allowlist?.has(key) || SENSITIVE_KEY.test(key) || !isScalar(property) || (typeof property === "string" && property.length > 80) || (typeof property === "number" && !Number.isFinite(property))) {
|
|
100
178
|
return reject("invalid_event", event.eventId, late);
|
|
101
179
|
}
|
|
102
180
|
}
|
|
181
|
+
if (event.pseudonymousInstallationId === null || typeof event.pseudonymousInstallationId !== "string")
|
|
182
|
+
return reject("invalid_event", event.eventId, late);
|
|
103
183
|
const serialized = JSON.stringify(event);
|
|
104
184
|
if (Buffer.byteLength(serialized, "utf8") > MAX_EVENT_BYTES)
|
|
105
185
|
return reject("too_large", event.eventId, late);
|
|
@@ -120,19 +200,25 @@ export function createProductAnalyticsCollector(store = new InMemoryProductAnaly
|
|
|
120
200
|
if (events.length > MAX_BATCH_EVENTS || Buffer.byteLength(serializedBatch, "utf8") > MAX_BATCH_BYTES) {
|
|
121
201
|
return { accepted: 0, duplicate: 0, rejected: [{ eventId: "batch", status: "rejected", errorCode: "too_large", late: false }], receivedAt: now.toISOString() };
|
|
122
202
|
}
|
|
123
|
-
const installationState =
|
|
203
|
+
const installationState = authorization.mode === "account_linked" && authorization.analyticsSubject
|
|
204
|
+
? store.getSubjectState?.(authorization.installationId, authorization.analyticsSubject)
|
|
205
|
+
: store.getInstallationState(authorization.installationId);
|
|
124
206
|
if (!installationState || installationState.revoked || installationState.consentEpoch !== authorization.consentEpoch || installationState.consentVersion !== authorization.consentVersion) {
|
|
125
207
|
return { accepted: 0, duplicate: 0, rejected: events.map((value) => reject("revoked", typeof value?.eventId === "string" ? String(value.eventId) : "unknown")), receivedAt: now.toISOString() };
|
|
126
208
|
}
|
|
127
209
|
const acks = [];
|
|
128
210
|
for (const value of events) {
|
|
129
|
-
const result =
|
|
211
|
+
const result = validateProductAnalyticsCollectorEvent(value, now);
|
|
130
212
|
if ("status" in result) {
|
|
131
213
|
acks.push(result);
|
|
132
214
|
continue;
|
|
133
215
|
}
|
|
216
|
+
if (authorization.pseudonymousInstallationId && result.event.pseudonymousInstallationId !== authorization.pseudonymousInstallationId) {
|
|
217
|
+
acks.push(reject("invalid_event", result.event.eventId, result.late));
|
|
218
|
+
continue;
|
|
219
|
+
}
|
|
134
220
|
const existing = store.getEvent(result.event.eventId);
|
|
135
|
-
const payloadSha256 =
|
|
221
|
+
const payloadSha256 = hashProductAnalyticsCollectorPayload(result.event);
|
|
136
222
|
if (existing) {
|
|
137
223
|
acks.push(existing.payloadSha256 === payloadSha256
|
|
138
224
|
? { eventId: result.event.eventId, status: "duplicate", late: result.late }
|
|
@@ -147,6 +233,8 @@ export function createProductAnalyticsCollector(store = new InMemoryProductAnaly
|
|
|
147
233
|
consentEpoch: authorization.consentEpoch,
|
|
148
234
|
payloadSha256,
|
|
149
235
|
receivedAt: now.toISOString(),
|
|
236
|
+
effectiveAt: (result.late ? now : new Date(result.event.occurredAt)).toISOString(),
|
|
237
|
+
late: result.late,
|
|
150
238
|
});
|
|
151
239
|
acks.push({ eventId: result.event.eventId, status: "accepted", late: result.late });
|
|
152
240
|
}
|
|
@@ -158,15 +246,278 @@ export function createProductAnalyticsCollector(store = new InMemoryProductAnaly
|
|
|
158
246
|
};
|
|
159
247
|
}
|
|
160
248
|
function advanceConsent(input) {
|
|
161
|
-
const current =
|
|
249
|
+
const current = input.analyticsSubject
|
|
250
|
+
? store.getSubjectState?.(input.installationId, input.analyticsSubject)
|
|
251
|
+
: store.getInstallationState(input.installationId);
|
|
162
252
|
// Consent epochs are monotonic. Treat an equal or older epoch as already
|
|
163
253
|
// applied so a replay cannot change revocation state without a new epoch.
|
|
164
254
|
if (current && input.consentEpoch <= current.consentEpoch)
|
|
165
255
|
return current;
|
|
166
256
|
const next = { consentVersion: input.consentVersion, consentEpoch: input.consentEpoch, revoked: input.revoked };
|
|
167
|
-
|
|
257
|
+
if (input.analyticsSubject)
|
|
258
|
+
store.setSubjectState?.(input.installationId, input.analyticsSubject, next);
|
|
259
|
+
else
|
|
260
|
+
store.setInstallationState(input.installationId, next);
|
|
168
261
|
return next;
|
|
169
262
|
}
|
|
170
263
|
return { ingestBatch, advanceConsent, store };
|
|
171
264
|
}
|
|
265
|
+
/**
|
|
266
|
+
* PostgreSQL-backed collector used by the private telemetry deployment. The
|
|
267
|
+
* local app never mounts this route, so these tables can live in a separately
|
|
268
|
+
* permissioned database/schema in production while sharing the same contract.
|
|
269
|
+
*/
|
|
270
|
+
export function createProductAnalyticsPersistentCollector(db) {
|
|
271
|
+
async function recordQualityCounters(input) {
|
|
272
|
+
const day = input.now.toISOString().slice(0, 10);
|
|
273
|
+
await db.insert(privateProductAnalyticsCollectorQualityCounters).values({
|
|
274
|
+
day,
|
|
275
|
+
receivedBatches: 1,
|
|
276
|
+
acceptedEvents: input.acceptedEvents,
|
|
277
|
+
duplicateEvents: input.duplicateEvents,
|
|
278
|
+
rejectedEvents: input.rejectedEvents,
|
|
279
|
+
lateEvents: input.lateEvents,
|
|
280
|
+
updatedAt: input.now,
|
|
281
|
+
}).onConflictDoUpdate({
|
|
282
|
+
target: privateProductAnalyticsCollectorQualityCounters.day,
|
|
283
|
+
set: {
|
|
284
|
+
receivedBatches: sql `${privateProductAnalyticsCollectorQualityCounters.receivedBatches} + 1`,
|
|
285
|
+
acceptedEvents: sql `${privateProductAnalyticsCollectorQualityCounters.acceptedEvents} + ${input.acceptedEvents}`,
|
|
286
|
+
duplicateEvents: sql `${privateProductAnalyticsCollectorQualityCounters.duplicateEvents} + ${input.duplicateEvents}`,
|
|
287
|
+
rejectedEvents: sql `${privateProductAnalyticsCollectorQualityCounters.rejectedEvents} + ${input.rejectedEvents}`,
|
|
288
|
+
lateEvents: sql `${privateProductAnalyticsCollectorQualityCounters.lateEvents} + ${input.lateEvents}`,
|
|
289
|
+
updatedAt: input.now,
|
|
290
|
+
},
|
|
291
|
+
});
|
|
292
|
+
}
|
|
293
|
+
async function readState(installationId) {
|
|
294
|
+
const [row] = await db.select({
|
|
295
|
+
mode: privateProductAnalyticsCollectorInstallations.mode,
|
|
296
|
+
consentVersion: privateProductAnalyticsCollectorInstallations.consentVersion,
|
|
297
|
+
consentEpoch: privateProductAnalyticsCollectorInstallations.consentEpoch,
|
|
298
|
+
revoked: privateProductAnalyticsCollectorInstallations.revoked,
|
|
299
|
+
analyticsSubject: privateProductAnalyticsCollectorInstallations.analyticsSubject,
|
|
300
|
+
}).from(privateProductAnalyticsCollectorInstallations)
|
|
301
|
+
.where(eq(privateProductAnalyticsCollectorInstallations.installationId, installationId)).limit(1);
|
|
302
|
+
return row ?? null;
|
|
303
|
+
}
|
|
304
|
+
async function readSubjectState(installationId, analyticsSubject) {
|
|
305
|
+
const [row] = await db.select({
|
|
306
|
+
consentVersion: privateProductAnalyticsCollectorSubjects.consentVersion,
|
|
307
|
+
consentEpoch: privateProductAnalyticsCollectorSubjects.consentEpoch,
|
|
308
|
+
revoked: sql `${privateProductAnalyticsCollectorSubjects.revokedAt} IS NOT NULL`,
|
|
309
|
+
}).from(privateProductAnalyticsCollectorSubjects)
|
|
310
|
+
.where(and(eq(privateProductAnalyticsCollectorSubjects.installationId, installationId), eq(privateProductAnalyticsCollectorSubjects.analyticsSubject, analyticsSubject))).limit(1);
|
|
311
|
+
return row ?? null;
|
|
312
|
+
}
|
|
313
|
+
async function ensureState(authorization, now) {
|
|
314
|
+
void now;
|
|
315
|
+
// A signed assertion proves identity, not consent. The Identity ledger
|
|
316
|
+
// sync hook must establish this row before upload is accepted.
|
|
317
|
+
return readState(authorization.installationId);
|
|
318
|
+
}
|
|
319
|
+
async function ensureSubjectState(authorization, now) {
|
|
320
|
+
const analyticsSubject = authorization.analyticsSubject;
|
|
321
|
+
if (!analyticsSubject)
|
|
322
|
+
return null;
|
|
323
|
+
const existing = await readSubjectState(authorization.installationId, analyticsSubject);
|
|
324
|
+
void now;
|
|
325
|
+
// Do not advance or create a subject row from assertion claims. A grant
|
|
326
|
+
// must arrive through the private Identity consent sync hook.
|
|
327
|
+
return existing;
|
|
328
|
+
}
|
|
329
|
+
async function ingestBatch(input) {
|
|
330
|
+
const now = input.now ?? new Date();
|
|
331
|
+
const events = Array.isArray(input.events) ? input.events : null;
|
|
332
|
+
if (!events) {
|
|
333
|
+
await recordQualityCounters({ now, acceptedEvents: 0, duplicateEvents: 0, rejectedEvents: 1, lateEvents: 0 });
|
|
334
|
+
return { accepted: 0, duplicate: 0, rejected: [{ eventId: "batch", status: "rejected", errorCode: "invalid_schema", late: false }], receivedAt: now.toISOString() };
|
|
335
|
+
}
|
|
336
|
+
const serializedBatch = JSON.stringify(events) ?? "";
|
|
337
|
+
if (events.length > MAX_BATCH_EVENTS || Buffer.byteLength(serializedBatch, "utf8") > MAX_BATCH_BYTES) {
|
|
338
|
+
await recordQualityCounters({ now, acceptedEvents: 0, duplicateEvents: 0, rejectedEvents: 1, lateEvents: 0 });
|
|
339
|
+
return { accepted: 0, duplicate: 0, rejected: [{ eventId: "batch", status: "rejected", errorCode: "too_large", late: false }], receivedAt: now.toISOString() };
|
|
340
|
+
}
|
|
341
|
+
const installationState = await ensureState(input.authorization, now);
|
|
342
|
+
const state = input.authorization.mode === "account_linked"
|
|
343
|
+
? await ensureSubjectState(input.authorization, now)
|
|
344
|
+
: installationState?.mode === "anonymous" ? installationState : null;
|
|
345
|
+
if (input.authorization.mode === "account_linked" && !input.authorization.analyticsSubject) {
|
|
346
|
+
return { accepted: 0, duplicate: 0, rejected: events.map((value) => reject("invalid_schema", typeof value?.eventId === "string" ? String(value.eventId) : "unknown")), receivedAt: now.toISOString() };
|
|
347
|
+
}
|
|
348
|
+
if (!state || state.revoked || state.consentEpoch !== input.authorization.consentEpoch || state.consentVersion !== input.authorization.consentVersion) {
|
|
349
|
+
return { accepted: 0, duplicate: 0, rejected: events.map((value) => reject("revoked", typeof value?.eventId === "string" ? String(value.eventId) : "unknown")), receivedAt: now.toISOString() };
|
|
350
|
+
}
|
|
351
|
+
const acknowledgements = [];
|
|
352
|
+
for (const value of events) {
|
|
353
|
+
const result = validateProductAnalyticsCollectorEvent(value, now);
|
|
354
|
+
if ("status" in result) {
|
|
355
|
+
acknowledgements.push(result);
|
|
356
|
+
continue;
|
|
357
|
+
}
|
|
358
|
+
if (input.authorization.pseudonymousInstallationId && result.event.pseudonymousInstallationId !== input.authorization.pseudonymousInstallationId) {
|
|
359
|
+
acknowledgements.push(reject("invalid_event", result.event.eventId, result.late));
|
|
360
|
+
continue;
|
|
361
|
+
}
|
|
362
|
+
const payloadSha256 = hashProductAnalyticsCollectorPayload(result.event);
|
|
363
|
+
const [existing] = await db.select({ payloadSha256: privateProductAnalyticsCollectorEvents.payloadSha256 })
|
|
364
|
+
.from(privateProductAnalyticsCollectorEvents).where(eq(privateProductAnalyticsCollectorEvents.eventId, result.event.eventId)).limit(1);
|
|
365
|
+
if (existing) {
|
|
366
|
+
acknowledgements.push(existing.payloadSha256 === payloadSha256
|
|
367
|
+
? { eventId: result.event.eventId, status: "duplicate", late: result.late }
|
|
368
|
+
: { eventId: result.event.eventId, status: "rejected", errorCode: "conflict", late: result.late });
|
|
369
|
+
continue;
|
|
370
|
+
}
|
|
371
|
+
const [inserted] = await db.insert(privateProductAnalyticsCollectorEvents).values({
|
|
372
|
+
eventId: result.event.eventId,
|
|
373
|
+
installationId: input.authorization.installationId,
|
|
374
|
+
analyticsSubject: input.authorization.mode === "account_linked" ? input.authorization.analyticsSubject ?? null : null,
|
|
375
|
+
eventName: result.event.eventName,
|
|
376
|
+
schemaVersion: result.event.schemaVersion,
|
|
377
|
+
occurredAt: new Date(result.event.occurredAt),
|
|
378
|
+
receivedAt: now,
|
|
379
|
+
effectiveAt: result.late ? now : new Date(result.event.occurredAt),
|
|
380
|
+
environment: result.event.environment,
|
|
381
|
+
appVersion: result.event.appVersion,
|
|
382
|
+
releaseChannel: result.event.releaseChannel,
|
|
383
|
+
deploymentMode: result.event.deploymentMode,
|
|
384
|
+
coarsePlatform: null,
|
|
385
|
+
actorKind: result.event.actorKind,
|
|
386
|
+
origin: result.event.origin,
|
|
387
|
+
isInternal: false,
|
|
388
|
+
pseudonymousInstallationId: result.event.pseudonymousInstallationId,
|
|
389
|
+
pseudonymousOrgId: result.event.pseudonymousOrgId,
|
|
390
|
+
pseudonymousWorkId: result.event.pseudonymousWorkId,
|
|
391
|
+
pseudonymousWorkCycleId: result.event.pseudonymousWorkCycleId,
|
|
392
|
+
pseudonymousRootRunId: result.event.pseudonymousRootRunId,
|
|
393
|
+
pseudonymousRunId: result.event.pseudonymousRunId,
|
|
394
|
+
completionRevision: result.event.completionRevision,
|
|
395
|
+
properties: result.event.properties,
|
|
396
|
+
confidence: result.event.confidence,
|
|
397
|
+
isBackfill: result.event.isBackfill,
|
|
398
|
+
late: result.late,
|
|
399
|
+
consentVersion: input.authorization.consentVersion,
|
|
400
|
+
consentEpoch: input.authorization.consentEpoch,
|
|
401
|
+
payloadSha256,
|
|
402
|
+
}).onConflictDoNothing({ target: privateProductAnalyticsCollectorEvents.eventId }).returning({ eventId: privateProductAnalyticsCollectorEvents.eventId });
|
|
403
|
+
// A concurrent request may win the event-id race after the read above.
|
|
404
|
+
// Do not increment a rollup for that loser: it is a duplicate (or a
|
|
405
|
+
// conflict if the winning payload has a different digest).
|
|
406
|
+
if (!inserted) {
|
|
407
|
+
const [winner] = await db.select({ payloadSha256: privateProductAnalyticsCollectorEvents.payloadSha256 })
|
|
408
|
+
.from(privateProductAnalyticsCollectorEvents)
|
|
409
|
+
.where(eq(privateProductAnalyticsCollectorEvents.eventId, result.event.eventId)).limit(1);
|
|
410
|
+
acknowledgements.push(winner?.payloadSha256 === payloadSha256
|
|
411
|
+
? { eventId: result.event.eventId, status: "duplicate", late: result.late }
|
|
412
|
+
: { eventId: result.event.eventId, status: "rejected", errorCode: "conflict", late: result.late });
|
|
413
|
+
continue;
|
|
414
|
+
}
|
|
415
|
+
acknowledgements.push({ eventId: result.event.eventId, status: "accepted", late: result.late });
|
|
416
|
+
}
|
|
417
|
+
await db.update(privateProductAnalyticsCollectorInstallations).set({ lastSeenAt: now, updatedAt: now }).where(eq(privateProductAnalyticsCollectorInstallations.installationId, input.authorization.installationId));
|
|
418
|
+
const accepted = acknowledgements.filter((ack) => ack.status === "accepted").length;
|
|
419
|
+
const duplicate = acknowledgements.filter((ack) => ack.status === "duplicate").length;
|
|
420
|
+
const rejected = acknowledgements.filter((ack) => ack.status === "rejected");
|
|
421
|
+
await recordQualityCounters({
|
|
422
|
+
now,
|
|
423
|
+
acceptedEvents: accepted,
|
|
424
|
+
duplicateEvents: duplicate,
|
|
425
|
+
rejectedEvents: rejected.length,
|
|
426
|
+
lateEvents: acknowledgements.filter((ack) => ack.late).length,
|
|
427
|
+
});
|
|
428
|
+
return { accepted, duplicate, rejected, receivedAt: now.toISOString() };
|
|
429
|
+
}
|
|
430
|
+
async function advanceConsent(input) {
|
|
431
|
+
if (input.analyticsSubject) {
|
|
432
|
+
const now = new Date();
|
|
433
|
+
// Keep an installation row for account-linked subjects as well. Reports
|
|
434
|
+
// use this row for installation cohorts, while the subject table remains
|
|
435
|
+
// the authorization source for per-user uploads on shared installations.
|
|
436
|
+
const installation = await readState(input.installationId);
|
|
437
|
+
if (!installation) {
|
|
438
|
+
await db.insert(privateProductAnalyticsCollectorInstallations).values({
|
|
439
|
+
installationId: input.installationId,
|
|
440
|
+
mode: "account_linked",
|
|
441
|
+
consentVersion: input.consentVersion,
|
|
442
|
+
// Subject consent must never become installation-wide consent. The
|
|
443
|
+
// row exists for cohort reporting until an anonymous decision creates
|
|
444
|
+
// its own installation-scoped authorization state.
|
|
445
|
+
consentEpoch: 0,
|
|
446
|
+
revoked: true,
|
|
447
|
+
analyticsSubject: null,
|
|
448
|
+
firstSeenAt: now,
|
|
449
|
+
lastSeenAt: now,
|
|
450
|
+
updatedAt: now,
|
|
451
|
+
}).onConflictDoNothing({ target: privateProductAnalyticsCollectorInstallations.installationId });
|
|
452
|
+
}
|
|
453
|
+
const current = await readSubjectState(input.installationId, input.analyticsSubject);
|
|
454
|
+
if (current && input.consentEpoch <= current.consentEpoch)
|
|
455
|
+
return current;
|
|
456
|
+
const [row] = current
|
|
457
|
+
? await db.update(privateProductAnalyticsCollectorSubjects).set({
|
|
458
|
+
consentVersion: input.consentVersion,
|
|
459
|
+
consentEpoch: input.consentEpoch,
|
|
460
|
+
revokedAt: input.revoked ? now : null,
|
|
461
|
+
updatedAt: now,
|
|
462
|
+
}).where(and(eq(privateProductAnalyticsCollectorSubjects.installationId, input.installationId), eq(privateProductAnalyticsCollectorSubjects.analyticsSubject, input.analyticsSubject), eq(privateProductAnalyticsCollectorSubjects.consentEpoch, current.consentEpoch))).returning({
|
|
463
|
+
consentVersion: privateProductAnalyticsCollectorSubjects.consentVersion,
|
|
464
|
+
consentEpoch: privateProductAnalyticsCollectorSubjects.consentEpoch,
|
|
465
|
+
revoked: sql `${privateProductAnalyticsCollectorSubjects.revokedAt} IS NOT NULL`,
|
|
466
|
+
})
|
|
467
|
+
: await db.insert(privateProductAnalyticsCollectorSubjects).values({
|
|
468
|
+
installationId: input.installationId,
|
|
469
|
+
analyticsSubject: input.analyticsSubject,
|
|
470
|
+
consentVersion: input.consentVersion,
|
|
471
|
+
consentEpoch: input.consentEpoch,
|
|
472
|
+
revokedAt: input.revoked ? now : null,
|
|
473
|
+
consentedAt: now,
|
|
474
|
+
updatedAt: now,
|
|
475
|
+
}).onConflictDoNothing({ target: [privateProductAnalyticsCollectorSubjects.installationId, privateProductAnalyticsCollectorSubjects.analyticsSubject] }).returning({
|
|
476
|
+
consentVersion: privateProductAnalyticsCollectorSubjects.consentVersion,
|
|
477
|
+
consentEpoch: privateProductAnalyticsCollectorSubjects.consentEpoch,
|
|
478
|
+
revoked: sql `${privateProductAnalyticsCollectorSubjects.revokedAt} IS NOT NULL`,
|
|
479
|
+
});
|
|
480
|
+
return row ?? await readSubjectState(input.installationId, input.analyticsSubject) ?? { consentVersion: input.consentVersion, consentEpoch: input.consentEpoch, revoked: input.revoked };
|
|
481
|
+
}
|
|
482
|
+
// Anonymous consent has its own epoch stream. Retry a bounded number of
|
|
483
|
+
// times when a concurrent subject sync inserts the cohort sentinel between
|
|
484
|
+
// our compare-and-set update and installation insert.
|
|
485
|
+
for (let attempt = 0; attempt < 3; attempt += 1) {
|
|
486
|
+
const current = await readState(input.installationId);
|
|
487
|
+
if (current?.mode === "anonymous" && input.consentEpoch <= current.consentEpoch)
|
|
488
|
+
return current;
|
|
489
|
+
const [row] = await db.update(privateProductAnalyticsCollectorInstallations).set({
|
|
490
|
+
mode: "anonymous",
|
|
491
|
+
consentVersion: input.consentVersion,
|
|
492
|
+
consentEpoch: input.consentEpoch,
|
|
493
|
+
revoked: input.revoked,
|
|
494
|
+
updatedAt: new Date(),
|
|
495
|
+
}).where(current
|
|
496
|
+
? and(eq(privateProductAnalyticsCollectorInstallations.installationId, input.installationId), eq(privateProductAnalyticsCollectorInstallations.consentEpoch, current.consentEpoch))
|
|
497
|
+
: eq(privateProductAnalyticsCollectorInstallations.installationId, input.installationId)).returning({
|
|
498
|
+
consentVersion: privateProductAnalyticsCollectorInstallations.consentVersion,
|
|
499
|
+
consentEpoch: privateProductAnalyticsCollectorInstallations.consentEpoch,
|
|
500
|
+
revoked: privateProductAnalyticsCollectorInstallations.revoked,
|
|
501
|
+
});
|
|
502
|
+
if (row)
|
|
503
|
+
return row;
|
|
504
|
+
const [created] = await db.insert(privateProductAnalyticsCollectorInstallations).values({
|
|
505
|
+
installationId: input.installationId,
|
|
506
|
+
mode: "anonymous",
|
|
507
|
+
consentVersion: input.consentVersion,
|
|
508
|
+
consentEpoch: input.consentEpoch,
|
|
509
|
+
revoked: input.revoked,
|
|
510
|
+
}).onConflictDoNothing({ target: privateProductAnalyticsCollectorInstallations.installationId }).returning({
|
|
511
|
+
consentVersion: privateProductAnalyticsCollectorInstallations.consentVersion,
|
|
512
|
+
consentEpoch: privateProductAnalyticsCollectorInstallations.consentEpoch,
|
|
513
|
+
revoked: privateProductAnalyticsCollectorInstallations.revoked,
|
|
514
|
+
});
|
|
515
|
+
if (created)
|
|
516
|
+
return created;
|
|
517
|
+
}
|
|
518
|
+
const winner = await readState(input.installationId);
|
|
519
|
+
return winner ?? { consentVersion: input.consentVersion, consentEpoch: input.consentEpoch, revoked: input.revoked };
|
|
520
|
+
}
|
|
521
|
+
return { ingestBatch, advanceConsent };
|
|
522
|
+
}
|
|
172
523
|
//# sourceMappingURL=product-analytics-collector.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"product-analytics-collector.js","sourceRoot":"","sources":["../../src/services/product-analytics-collector.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"product-analytics-collector.js","sourceRoot":"","sources":["../../src/services/product-analytics-collector.ts"],"names":[],"mappings":"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"}
|
|
@@ -39,6 +39,13 @@ function createCollector() {
|
|
|
39
39
|
return createProductAnalyticsCollector(store);
|
|
40
40
|
}
|
|
41
41
|
describe("product analytics collector", () => {
|
|
42
|
+
it("does not bootstrap consent from an assertion authorization", () => {
|
|
43
|
+
const collector = createProductAnalyticsCollector(new InMemoryProductAnalyticsCollectorStore());
|
|
44
|
+
const result = collector.ingestBatch({ authorization, events: [event()] });
|
|
45
|
+
expect(result.accepted).toBe(0);
|
|
46
|
+
expect(result.rejected[0]).toMatchObject({ errorCode: "revoked" });
|
|
47
|
+
expect(collector.store.listEvents()).toHaveLength(0);
|
|
48
|
+
});
|
|
42
49
|
it("accepts a valid event and treats the same payload as a duplicate", () => {
|
|
43
50
|
const collector = createCollector();
|
|
44
51
|
const first = collector.ingestBatch({ authorization, events: [event()] });
|
|
@@ -65,6 +72,11 @@ describe("product analytics collector", () => {
|
|
|
65
72
|
expect(result.rejected.map((ack) => ack.errorCode)).toEqual(["invalid_event", "future_event"]);
|
|
66
73
|
expect(collector.store.listEvents()).toHaveLength(0);
|
|
67
74
|
});
|
|
75
|
+
it("rejects properties outside the event contract", () => {
|
|
76
|
+
const collector = createCollector();
|
|
77
|
+
const result = collector.ingestBatch({ authorization, events: [event({ properties: { unexpected_dimension: true } })] });
|
|
78
|
+
expect(result.rejected[0]).toMatchObject({ errorCode: "invalid_event" });
|
|
79
|
+
});
|
|
68
80
|
it("rejects old consent epochs after revocation", () => {
|
|
69
81
|
const collector = createCollector();
|
|
70
82
|
collector.advanceConsent({ installationId, consentVersion: "v1", consentEpoch: 2, revoked: true });
|
|
@@ -77,5 +89,18 @@ describe("product analytics collector", () => {
|
|
|
77
89
|
const replay = collector.advanceConsent({ installationId, consentVersion: "v1", consentEpoch: 2, revoked: false });
|
|
78
90
|
expect(replay).toEqual({ consentVersion: "v1", consentEpoch: 2, revoked: true });
|
|
79
91
|
});
|
|
92
|
+
it("isolates account-linked consent by subject on a shared installation", () => {
|
|
93
|
+
const store = new InMemoryProductAnalyticsCollectorStore();
|
|
94
|
+
store.setSubjectState(installationId, "user-a", { consentVersion: "v1", consentEpoch: 1, revoked: false });
|
|
95
|
+
store.setSubjectState(installationId, "user-b", { consentVersion: "v1", consentEpoch: 1, revoked: false });
|
|
96
|
+
const collector = createProductAnalyticsCollector(store);
|
|
97
|
+
const authA = { ...authorization, mode: "account_linked", analyticsSubject: "user-a" };
|
|
98
|
+
const authB = { ...authorization, mode: "account_linked", analyticsSubject: "user-b" };
|
|
99
|
+
expect(collector.ingestBatch({ authorization: authA, events: [event()] }).accepted).toBe(1);
|
|
100
|
+
expect(collector.ingestBatch({ authorization: authB, events: [event({ eventId: "33333333-3333-4333-8333-333333333333" })] }).accepted).toBe(1);
|
|
101
|
+
collector.advanceConsent({ installationId, analyticsSubject: "user-a", consentVersion: "v1", consentEpoch: 2, revoked: true });
|
|
102
|
+
expect(collector.ingestBatch({ authorization: authA, events: [event({ eventId: "44444444-4444-4444-8444-444444444444" })] }).rejected[0]?.errorCode).toBe("revoked");
|
|
103
|
+
expect(collector.ingestBatch({ authorization: authB, events: [event({ eventId: "55555555-5555-4555-8555-555555555555" })] }).accepted).toBe(1);
|
|
104
|
+
});
|
|
80
105
|
});
|
|
81
106
|
//# sourceMappingURL=product-analytics-collector.test.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"product-analytics-collector.test.js","sourceRoot":"","sources":["../../src/services/product-analytics-collector.test.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"product-analytics-collector.test.js","sourceRoot":"","sources":["../../src/services/product-analytics-collector.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import type { ProductAnalyticsCollectorAuthorization, ProductAnalyticsCollectorDashboardEvent, ProductAnalyticsCollectorEvent } from "./product-analytics-collector.js";
|
|
2
|
+
export declare const PRODUCT_ANALYTICS_FIXTURE_NOW = "2026-08-04T00:00:00.000Z";
|
|
3
|
+
export declare const PRODUCT_ANALYTICS_FIXTURE_INSTALLATIONS: readonly ["11111111-1111-4111-8111-111111111111", "11111111-1111-4111-8111-111111111112", "11111111-1111-4111-8111-111111111113"];
|
|
4
|
+
export declare const PRODUCT_ANALYTICS_FIXTURE_AUTHORIZATION: ProductAnalyticsCollectorAuthorization;
|
|
5
|
+
export declare function productAnalyticsFixtureEvent(index: number, overrides?: Partial<ProductAnalyticsCollectorEvent>): ProductAnalyticsCollectorEvent;
|
|
6
|
+
export declare function productAnalyticsFixtureDashboardEvents(count?: number): ProductAnalyticsCollectorDashboardEvent[];
|
|
7
|
+
//# sourceMappingURL=product-analytics-fixture.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"product-analytics-fixture.d.ts","sourceRoot":"","sources":["../../src/services/product-analytics-fixture.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,sCAAsC,EACtC,uCAAuC,EACvC,8BAA8B,EAC/B,MAAM,kCAAkC,CAAC;AAE1C,eAAO,MAAM,6BAA6B,6BAA6B,CAAC;AACxE,eAAO,MAAM,uCAAuC,mIAI1C,CAAC;AAEX,eAAO,MAAM,uCAAuC,EAAE,sCAMrD,CAAC;AAIF,wBAAgB,4BAA4B,CAC1C,KAAK,EAAE,MAAM,EACb,SAAS,GAAE,OAAO,CAAC,8BAA8B,CAAM,GACtD,8BAA8B,CAkChC;AAMD,wBAAgB,sCAAsC,CAAC,KAAK,SAAK,GAAG,uCAAuC,EAAE,CAW5G"}
|