@iann29/rastro 0.1.0-alpha.1 → 0.1.0-alpha.11
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 +693 -69
- package/agent/integration.md +801 -0
- package/agent/manifest.json +205 -0
- package/agent/manifest.schema.json +444 -0
- package/dist/client/federation.d.ts +381 -0
- package/dist/client/federation.d.ts.map +1 -0
- package/dist/client/federation.js +274 -0
- package/dist/client/federation.js.map +1 -0
- package/dist/client/index.d.ts +2673 -15
- package/dist/client/index.d.ts.map +1 -1
- package/dist/client/index.js +565 -33
- package/dist/client/index.js.map +1 -1
- package/dist/component/_generated/api.d.ts +22 -0
- package/dist/component/_generated/api.d.ts.map +1 -1
- package/dist/component/_generated/api.js.map +1 -1
- package/dist/component/_generated/component.d.ts +315 -4
- package/dist/component/_generated/component.d.ts.map +1 -1
- package/dist/component/_generated/server.d.ts +4 -0
- package/dist/component/_generated/server.d.ts.map +1 -1
- package/dist/component/_generated/server.js.map +1 -1
- package/dist/component/affiliates.d.ts.map +1 -1
- package/dist/component/affiliates.js +6 -2
- package/dist/component/affiliates.js.map +1 -1
- package/dist/component/cardinality.d.ts +12 -0
- package/dist/component/cardinality.d.ts.map +1 -0
- package/dist/component/cardinality.js +94 -0
- package/dist/component/cardinality.js.map +1 -0
- package/dist/component/constants.d.ts +28 -1
- package/dist/component/constants.d.ts.map +1 -1
- package/dist/component/constants.js +44 -1
- package/dist/component/constants.js.map +1 -1
- package/dist/component/convex.config.d.ts +6 -1
- package/dist/component/convex.config.js +9 -1
- package/dist/component/convex.config.js.map +1 -1
- package/dist/component/coverage.d.ts +27 -0
- package/dist/component/coverage.d.ts.map +1 -0
- package/dist/component/coverage.js +56 -0
- package/dist/component/coverage.js.map +1 -0
- package/dist/component/diagnostics.d.ts +9 -0
- package/dist/component/diagnostics.d.ts.map +1 -0
- package/dist/component/diagnostics.js +47 -0
- package/dist/component/diagnostics.js.map +1 -0
- package/dist/component/errors.d.ts +1 -1
- package/dist/component/errors.d.ts.map +1 -1
- package/dist/component/errors.js.map +1 -1
- package/dist/component/eventStore.d.ts +21 -9
- package/dist/component/eventStore.d.ts.map +1 -1
- package/dist/component/eventStore.js +142 -152
- package/dist/component/eventStore.js.map +1 -1
- package/dist/component/funnels.d.ts.map +1 -1
- package/dist/component/funnels.js +5 -3
- package/dist/component/funnels.js.map +1 -1
- package/dist/component/geo.d.ts +73 -0
- package/dist/component/geo.d.ts.map +1 -0
- package/dist/component/geo.js +648 -0
- package/dist/component/geo.js.map +1 -0
- package/dist/component/goals.d.ts.map +1 -1
- package/dist/component/goals.js +8 -5
- package/dist/component/goals.js.map +1 -1
- package/dist/component/guards.d.ts.map +1 -1
- package/dist/component/guards.js.map +1 -1
- package/dist/component/http.d.ts.map +1 -1
- package/dist/component/http.js +281 -62
- package/dist/component/http.js.map +1 -1
- package/dist/component/identity.d.ts +13 -0
- package/dist/component/identity.d.ts.map +1 -0
- package/dist/component/identity.js +58 -0
- package/dist/component/identity.js.map +1 -0
- package/dist/component/ingest.d.ts +3 -1
- package/dist/component/ingest.d.ts.map +1 -1
- package/dist/component/ingest.js +498 -95
- package/dist/component/ingest.js.map +1 -1
- package/dist/component/live.d.ts.map +1 -1
- package/dist/component/live.js +7 -6
- package/dist/component/live.js.map +1 -1
- package/dist/component/localTime.d.ts +25 -0
- package/dist/component/localTime.d.ts.map +1 -0
- package/dist/component/localTime.js +126 -0
- package/dist/component/localTime.js.map +1 -0
- package/dist/component/reports.d.ts +266 -10
- package/dist/component/reports.d.ts.map +1 -1
- package/dist/component/reports.js +1243 -137
- package/dist/component/reports.js.map +1 -1
- package/dist/component/retention.d.ts +75 -1
- package/dist/component/retention.d.ts.map +1 -1
- package/dist/component/retention.js +561 -38
- package/dist/component/retention.js.map +1 -1
- package/dist/component/rollupStore.d.ts +320 -0
- package/dist/component/rollupStore.d.ts.map +1 -0
- package/dist/component/rollupStore.js +596 -0
- package/dist/component/rollupStore.js.map +1 -0
- package/dist/component/rollups.d.ts +20 -0
- package/dist/component/rollups.d.ts.map +1 -0
- package/dist/component/rollups.js +73 -0
- package/dist/component/rollups.js.map +1 -0
- package/dist/component/sanitize.d.ts +24 -1
- package/dist/component/sanitize.d.ts.map +1 -1
- package/dist/component/sanitize.js +96 -16
- package/dist/component/sanitize.js.map +1 -1
- package/dist/component/schema.d.ts +687 -65
- package/dist/component/schema.js +187 -20
- package/dist/component/schema.js.map +1 -1
- package/dist/component/sites.d.ts +12 -0
- package/dist/component/sites.d.ts.map +1 -1
- package/dist/component/sites.js +41 -7
- package/dist/component/sites.js.map +1 -1
- package/dist/component/useragent.d.ts +9 -0
- package/dist/component/useragent.d.ts.map +1 -0
- package/dist/component/useragent.js +152 -0
- package/dist/component/useragent.js.map +1 -0
- package/dist/component/validators.d.ts +124 -69
- package/dist/component/validators.d.ts.map +1 -1
- package/dist/component/validators.js +35 -14
- package/dist/component/validators.js.map +1 -1
- package/dist/component/visitors.d.ts +19 -0
- package/dist/component/visitors.d.ts.map +1 -0
- package/dist/component/visitors.js +86 -0
- package/dist/component/visitors.js.map +1 -0
- package/dist/component/vitals.d.ts +41 -0
- package/dist/component/vitals.d.ts.map +1 -0
- package/dist/component/vitals.js +115 -0
- package/dist/component/vitals.js.map +1 -0
- package/dist/react/index.d.ts.map +1 -1
- package/dist/react/index.js.map +1 -1
- package/dist/tracker/generated.d.ts +11 -4
- package/dist/tracker/generated.d.ts.map +1 -1
- package/dist/tracker/generated.js +11 -4
- package/dist/tracker/generated.js.map +1 -1
- package/dist/tracker/tracker.d.ts +1 -1
- package/dist/tracker/tracker.d.ts.map +1 -1
- package/dist/tracker/tracker.js +57 -20
- package/dist/tracker/tracker.js.map +1 -1
- package/dist/tracker/vitals.d.ts +10 -0
- package/dist/tracker/vitals.d.ts.map +1 -0
- package/dist/tracker/vitals.js +140 -0
- package/dist/tracker/vitals.js.map +1 -0
- package/dist/tracker.min.js +1 -1
- package/dist/vitals.min.js +1 -0
- package/docs/benchmarks/2026-08-20-realistic.md +76 -76
- package/docs/benchmarks/2026-08-21-formal-certification.md +353 -0
- package/docs/benchmarks/2026-08-30-alpha6-recertification.md +206 -0
- package/docs/federation-setup.md +464 -0
- package/docs/federation.md +352 -0
- package/docs/upgrading.md +344 -0
- package/llms.txt +72 -0
- package/package.json +55 -11
- package/scripts/benchmark-ingest.mjs +175 -73
- package/scripts/generate-federation-keys.mjs +20 -0
- package/src/component/_generated/api.ts +22 -0
- package/src/component/_generated/component.ts +381 -4
- package/src/component/_generated/server.ts +4 -0
- package/src/component/affiliates.ts +20 -5
- package/src/component/cardinality.ts +117 -0
- package/src/component/constants.ts +44 -1
- package/src/component/convex.config.ts +11 -1
- package/src/component/coverage.ts +71 -0
- package/src/component/diagnostics.ts +65 -0
- package/src/component/errors.ts +2 -1
- package/src/component/eventStore.ts +217 -193
- package/src/component/funnels.ts +19 -16
- package/src/component/geo.ts +835 -0
- package/src/component/goals.ts +29 -21
- package/src/component/guards.ts +3 -1
- package/src/component/http.ts +404 -70
- package/src/component/identity.ts +74 -0
- package/src/component/ingest.ts +894 -188
- package/src/component/live.ts +13 -7
- package/src/component/localTime.ts +167 -0
- package/src/component/reports.ts +1872 -197
- package/src/component/retention.ts +788 -96
- package/src/component/rollupStore.ts +799 -0
- package/src/component/rollups.ts +82 -0
- package/src/component/sanitize.ts +144 -29
- package/src/component/schema.ts +217 -21
- package/src/component/sites.ts +59 -12
- package/src/component/useragent.ts +171 -0
- package/src/component/validators.ts +49 -14
- package/src/component/visitors.ts +116 -0
- package/src/component/vitals.ts +146 -0
package/src/component/goals.ts
CHANGED
|
@@ -8,10 +8,7 @@ import {
|
|
|
8
8
|
sanitizePath,
|
|
9
9
|
sanitizeSlug,
|
|
10
10
|
} from "./sanitize.js";
|
|
11
|
-
import {
|
|
12
|
-
goalFieldsValidator,
|
|
13
|
-
goalMatchTypeValidator,
|
|
14
|
-
} from "./validators.js";
|
|
11
|
+
import { goalFieldsValidator, goalMatchTypeValidator } from "./validators.js";
|
|
15
12
|
|
|
16
13
|
const goalDocumentValidator = goalFieldsValidator.extend({
|
|
17
14
|
_id: v.id("goals"),
|
|
@@ -31,14 +28,16 @@ export const upsert = mutation({
|
|
|
31
28
|
},
|
|
32
29
|
returns: v.id("goals"),
|
|
33
30
|
handler: async (ctx, args) => {
|
|
34
|
-
if (!(await ctx.db.get("sites", args.siteId)))
|
|
31
|
+
if (!(await ctx.db.get("sites", args.siteId)))
|
|
32
|
+
fail("NOT_FOUND", "site not found");
|
|
35
33
|
let key: string;
|
|
36
34
|
let matchValue: string;
|
|
37
35
|
try {
|
|
38
36
|
key = sanitizeSlug(args.key, "key");
|
|
39
|
-
matchValue =
|
|
40
|
-
|
|
41
|
-
|
|
37
|
+
matchValue =
|
|
38
|
+
args.matchType === "pageview"
|
|
39
|
+
? sanitizePath(args.matchValue)
|
|
40
|
+
: cleanString(args.matchValue, 80);
|
|
42
41
|
} catch (error) {
|
|
43
42
|
fail(
|
|
44
43
|
"INVALID_ARGUMENT",
|
|
@@ -49,7 +48,10 @@ export const upsert = mutation({
|
|
|
49
48
|
if (!name) fail("INVALID_ARGUMENT", "goal name is required");
|
|
50
49
|
if (!matchValue) fail("INVALID_ARGUMENT", "goal match value is required");
|
|
51
50
|
if (args.valueCents !== undefined && !isValidMoney(args.valueCents)) {
|
|
52
|
-
fail(
|
|
51
|
+
fail(
|
|
52
|
+
"INVALID_ARGUMENT",
|
|
53
|
+
"valueCents must be an integer between 0 and 1000000000",
|
|
54
|
+
);
|
|
53
55
|
}
|
|
54
56
|
|
|
55
57
|
const existingByKey = await ctx.db
|
|
@@ -69,14 +71,16 @@ export const upsert = mutation({
|
|
|
69
71
|
const now = Date.now();
|
|
70
72
|
if (goalId) {
|
|
71
73
|
const goal = await ctx.db.get("goals", goalId);
|
|
72
|
-
if (!goal || goal.siteId !== args.siteId)
|
|
74
|
+
if (!goal || goal.siteId !== args.siteId)
|
|
75
|
+
fail("NOT_FOUND", "goal not found");
|
|
73
76
|
if (
|
|
74
77
|
(args.active ?? goal.active) &&
|
|
75
|
-
goals.some(
|
|
76
|
-
candidate
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
78
|
+
goals.some(
|
|
79
|
+
(candidate) =>
|
|
80
|
+
candidate._id !== goalId &&
|
|
81
|
+
candidate.active &&
|
|
82
|
+
candidate.matchType === args.matchType &&
|
|
83
|
+
candidate.matchValue === matchValue,
|
|
80
84
|
)
|
|
81
85
|
) {
|
|
82
86
|
fail("CONFLICT", "another active goal already uses this matcher");
|
|
@@ -95,16 +99,19 @@ export const upsert = mutation({
|
|
|
95
99
|
|
|
96
100
|
if (
|
|
97
101
|
(args.active ?? true) &&
|
|
98
|
-
goals.some(
|
|
99
|
-
candidate
|
|
100
|
-
|
|
101
|
-
|
|
102
|
+
goals.some(
|
|
103
|
+
(candidate) =>
|
|
104
|
+
candidate.active &&
|
|
105
|
+
candidate.matchType === args.matchType &&
|
|
106
|
+
candidate.matchValue === matchValue,
|
|
102
107
|
)
|
|
103
108
|
) {
|
|
104
109
|
fail("CONFLICT", "another active goal already uses this matcher");
|
|
105
110
|
}
|
|
106
111
|
if (goals.length >= MAX_GOALS_PER_SITE) {
|
|
107
|
-
fail("LIMIT_EXCEEDED", "goal limit reached", {
|
|
112
|
+
fail("LIMIT_EXCEEDED", "goal limit reached", {
|
|
113
|
+
limit: MAX_GOALS_PER_SITE,
|
|
114
|
+
});
|
|
108
115
|
}
|
|
109
116
|
return await ctx.db.insert("goals", {
|
|
110
117
|
siteId: args.siteId,
|
|
@@ -136,7 +143,8 @@ export const remove = mutation({
|
|
|
136
143
|
returns: v.null(),
|
|
137
144
|
handler: async (ctx, args) => {
|
|
138
145
|
const goal = await ctx.db.get("goals", args.goalId);
|
|
139
|
-
if (!goal || goal.siteId !== args.siteId)
|
|
146
|
+
if (!goal || goal.siteId !== args.siteId)
|
|
147
|
+
fail("NOT_FOUND", "goal not found");
|
|
140
148
|
await ctx.db.delete("goals", args.goalId);
|
|
141
149
|
return null;
|
|
142
150
|
},
|
package/src/component/guards.ts
CHANGED