@iann29/rastro 0.1.0-alpha.8 → 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (105) hide show
  1. package/README.md +274 -75
  2. package/agent/integration.md +223 -65
  3. package/agent/manifest.json +34 -13
  4. package/agent/manifest.schema.json +53 -11
  5. package/dist/client/federation.d.ts +196 -11
  6. package/dist/client/federation.d.ts.map +1 -1
  7. package/dist/client/federation.js +160 -6
  8. package/dist/client/federation.js.map +1 -1
  9. package/dist/client/heat.d.ts +37 -0
  10. package/dist/client/heat.d.ts.map +1 -0
  11. package/dist/client/heat.js +43 -0
  12. package/dist/client/heat.js.map +1 -0
  13. package/dist/client/index.d.ts +448 -105
  14. package/dist/client/index.d.ts.map +1 -1
  15. package/dist/client/index.js +207 -17
  16. package/dist/client/index.js.map +1 -1
  17. package/dist/component/_generated/api.d.ts +6 -0
  18. package/dist/component/_generated/api.d.ts.map +1 -1
  19. package/dist/component/_generated/api.js.map +1 -1
  20. package/dist/component/_generated/component.d.ts +53 -16
  21. package/dist/component/_generated/component.d.ts.map +1 -1
  22. package/dist/component/constants.d.ts +5 -1
  23. package/dist/component/constants.d.ts.map +1 -1
  24. package/dist/component/constants.js +8 -1
  25. package/dist/component/constants.js.map +1 -1
  26. package/dist/component/coverage.d.ts +9 -0
  27. package/dist/component/coverage.d.ts.map +1 -1
  28. package/dist/component/coverage.js +36 -6
  29. package/dist/component/coverage.js.map +1 -1
  30. package/dist/component/eventStore.d.ts +1 -1
  31. package/dist/component/geo.d.ts +2 -0
  32. package/dist/component/geo.d.ts.map +1 -1
  33. package/dist/component/geo.js +56 -19
  34. package/dist/component/geo.js.map +1 -1
  35. package/dist/component/http.d.ts.map +1 -1
  36. package/dist/component/http.js +49 -27
  37. package/dist/component/http.js.map +1 -1
  38. package/dist/component/ingest.d.ts +1 -1
  39. package/dist/component/ingest.d.ts.map +1 -1
  40. package/dist/component/ingest.js +252 -305
  41. package/dist/component/ingest.js.map +1 -1
  42. package/dist/component/localTime.d.ts +25 -0
  43. package/dist/component/localTime.d.ts.map +1 -0
  44. package/dist/component/localTime.js +126 -0
  45. package/dist/component/localTime.js.map +1 -0
  46. package/dist/component/reports.d.ts +46 -15
  47. package/dist/component/reports.d.ts.map +1 -1
  48. package/dist/component/reports.js +193 -38
  49. package/dist/component/reports.js.map +1 -1
  50. package/dist/component/retention.js +26 -8
  51. package/dist/component/retention.js.map +1 -1
  52. package/dist/component/rollupStore.d.ts +320 -0
  53. package/dist/component/rollupStore.d.ts.map +1 -0
  54. package/dist/component/rollupStore.js +596 -0
  55. package/dist/component/rollupStore.js.map +1 -0
  56. package/dist/component/rollups.d.ts +20 -0
  57. package/dist/component/rollups.d.ts.map +1 -0
  58. package/dist/component/rollups.js +73 -0
  59. package/dist/component/rollups.js.map +1 -0
  60. package/dist/component/sanitize.d.ts +5 -0
  61. package/dist/component/sanitize.d.ts.map +1 -1
  62. package/dist/component/sanitize.js +15 -0
  63. package/dist/component/sanitize.js.map +1 -1
  64. package/dist/component/schema.d.ts +349 -15
  65. package/dist/component/schema.js +25 -0
  66. package/dist/component/schema.js.map +1 -1
  67. package/dist/component/sites.d.ts +12 -0
  68. package/dist/component/sites.d.ts.map +1 -1
  69. package/dist/component/sites.js +30 -0
  70. package/dist/component/sites.js.map +1 -1
  71. package/dist/component/validators.d.ts +41 -20
  72. package/dist/component/validators.d.ts.map +1 -1
  73. package/dist/component/validators.js +24 -3
  74. package/dist/component/validators.js.map +1 -1
  75. package/dist/tracker/generated.d.ts +7 -4
  76. package/dist/tracker/generated.d.ts.map +1 -1
  77. package/dist/tracker/generated.js +7 -4
  78. package/dist/tracker/generated.js.map +1 -1
  79. package/dist/tracker/tracker.d.ts +1 -1
  80. package/dist/tracker/tracker.d.ts.map +1 -1
  81. package/dist/tracker/tracker.js +24 -2
  82. package/dist/tracker/tracker.js.map +1 -1
  83. package/dist/tracker.min.js +1 -1
  84. package/docs/federation-setup.md +104 -27
  85. package/docs/federation.md +168 -31
  86. package/docs/upgrading.md +191 -16
  87. package/llms.txt +9 -7
  88. package/package.json +2 -1
  89. package/src/component/_generated/api.ts +6 -0
  90. package/src/component/_generated/component.ts +50 -12
  91. package/src/component/constants.ts +8 -1
  92. package/src/component/coverage.ts +46 -6
  93. package/src/component/geo.ts +82 -28
  94. package/src/component/http.ts +62 -26
  95. package/src/component/ingest.ts +378 -440
  96. package/src/component/localTime.ts +167 -0
  97. package/src/component/reports.ts +261 -39
  98. package/src/component/retention.ts +25 -7
  99. package/src/component/rollupStore.ts +799 -0
  100. package/src/component/rollups.ts +82 -0
  101. package/src/component/sanitize.ts +14 -0
  102. package/src/component/schema.ts +35 -0
  103. package/src/component/sites.ts +32 -0
  104. package/src/component/validators.ts +28 -1
  105. package/src/tracker/generated.ts +12 -0
@@ -4,8 +4,29 @@ export declare const FEDERATED_ANALYTICS_CLAIMS: Readonly<{
4
4
  readonly connectionId: "rastro_connection_id";
5
5
  readonly organizationId: "rastro_organization_id";
6
6
  readonly permissions: "rastro_permissions";
7
+ /**
8
+ * Optional: the sites the token may read, a subset of the grant. A public
9
+ * link's token carries the sites the link was created for.
10
+ */
11
+ readonly siteIds: "rastro_site_ids";
7
12
  }>;
8
13
  export declare const FEDERATED_ANALYTICS_READ_PERMISSION = "analytics:read";
14
+ /**
15
+ * The opt-in write scope. A token carries it only for organization owners and
16
+ * admins, and a host honors it only when its local grant lists it too: both
17
+ * sides must agree before any configuration function runs.
18
+ */
19
+ export declare const FEDERATED_ANALYTICS_CONFIGURE_PERMISSION = "analytics:configure";
20
+ /**
21
+ * The permission a public link's token carries instead of `analytics:read`.
22
+ * It reaches only the overview, the live visitors, the site summaries, the
23
+ * coverage and the connection status — never sessions, journeys, conversions
24
+ * or the configure scope — and a host honors it only when its local grant lists
25
+ * it, so a customer decides twice before a dashboard goes public. A host from
26
+ * before this permission rejects the token whole, which is the safe failure.
27
+ */
28
+ export declare const FEDERATED_ANALYTICS_PUBLIC_PERMISSION = "analytics:public";
29
+ export declare const FEDERATED_ANALYTICS_PERMISSIONS: readonly ["analytics:read", "analytics:configure", "analytics:public"];
9
30
  export declare const FEDERATED_ANALYTICS_ERROR_CODES: Readonly<{
10
31
  readonly UNAUTHENTICATED: "FEDERATION_UNAUTHENTICATED";
11
32
  readonly ISSUER_MISMATCH: "FEDERATION_ISSUER_MISMATCH";
@@ -13,6 +34,8 @@ export declare const FEDERATED_ANALYTICS_ERROR_CODES: Readonly<{
13
34
  readonly CONNECTION_DENIED: "FEDERATION_CONNECTION_DENIED";
14
35
  readonly INVALID_SCOPE: "FEDERATION_INVALID_SCOPE";
15
36
  readonly SITE_DENIED: "FEDERATION_SITE_DENIED";
37
+ readonly CONFIGURE_FORBIDDEN: "FEDERATION_CONFIGURE_FORBIDDEN";
38
+ readonly PUBLIC_FORBIDDEN: "FEDERATION_PUBLIC_FORBIDDEN";
16
39
  }>;
17
40
  /**
18
41
  * The protocol-v1 baseline every compatible host must serve. Newer hosts may
@@ -35,6 +58,42 @@ export declare const FEDERATED_ANALYTICS_REQUIRED_FUNCTIONS: Readonly<{
35
58
  readonly dataCoverage: "dataCoverage";
36
59
  }>;
37
60
  export declare const FEDERATED_ANALYTICS_REQUIRED_CAPABILITIES: readonly ["siteSummaries", "overview", "liveVisitors", "sessions", "sessionJourney", "conversions", "visitorJourney", "goals", "funnels", "affiliates", "dataCoverage"];
61
+ /**
62
+ * The optional configuration surface behind the `configure` capability. Every
63
+ * function here requires the configure permission on the token and on the
64
+ * host's grant; a host that keeps its grants read-only never runs them.
65
+ */
66
+ export declare const FEDERATED_ANALYTICS_CONFIGURE_FUNCTIONS: Readonly<{
67
+ readonly siteSettings: "siteSettings";
68
+ readonly updateSite: "updateSite";
69
+ readonly listGoals: "listGoals";
70
+ readonly upsertGoal: "upsertGoal";
71
+ readonly removeGoal: "removeGoal";
72
+ readonly listFunnels: "listFunnels";
73
+ readonly upsertFunnel: "upsertFunnel";
74
+ readonly removeFunnel: "removeFunnel";
75
+ readonly listAffiliates: "listAffiliates";
76
+ readonly upsertAffiliate: "upsertAffiliate";
77
+ readonly removeAffiliate: "removeAffiliate";
78
+ readonly retentionStatus: "retentionStatus";
79
+ readonly setRetentionPolicy: "setRetentionPolicy";
80
+ readonly disableRetentionPolicy: "disableRetentionPolicy";
81
+ }>;
82
+ /**
83
+ * The functions a public token may run: the aggregate overview (redacted of
84
+ * revenue, conversions, goals, campaigns and custom events), the live visitors
85
+ * (with the visitor identity replaced by the session id), the redacted site
86
+ * summaries, the coverage and the connection status. Everything else on the
87
+ * surface needs a reader's token.
88
+ */
89
+ export declare const FEDERATED_ANALYTICS_PUBLIC_FUNCTIONS: Readonly<{
90
+ readonly manifest: "manifest";
91
+ readonly connectionStatus: "connectionStatus";
92
+ readonly listSites: "listSites";
93
+ readonly overview: "overview";
94
+ readonly liveVisitors: "liveVisitors";
95
+ readonly dataCoverage: "dataCoverage";
96
+ }>;
38
97
  export declare const FEDERATED_ANALYTICS_CONNECTOR_MANIFEST: Readonly<{
39
98
  readonly protocol: "amage-rastro-analytics";
40
99
  readonly protocolVersion: 1;
@@ -53,10 +112,24 @@ export declare const FEDERATED_ANALYTICS_CONNECTOR_MANIFEST: Readonly<{
53
112
  readonly funnelsReport: "funnelsReport";
54
113
  readonly affiliatesReport: "affiliatesReport";
55
114
  readonly dataCoverage: "dataCoverage";
115
+ readonly siteSettings: "siteSettings";
116
+ readonly updateSite: "updateSite";
117
+ readonly listGoals: "listGoals";
118
+ readonly upsertGoal: "upsertGoal";
119
+ readonly removeGoal: "removeGoal";
120
+ readonly listFunnels: "listFunnels";
121
+ readonly upsertFunnel: "upsertFunnel";
122
+ readonly removeFunnel: "removeFunnel";
123
+ readonly listAffiliates: "listAffiliates";
124
+ readonly upsertAffiliate: "upsertAffiliate";
125
+ readonly removeAffiliate: "removeAffiliate";
126
+ readonly retentionStatus: "retentionStatus";
127
+ readonly setRetentionPolicy: "setRetentionPolicy";
128
+ readonly disableRetentionPolicy: "disableRetentionPolicy";
56
129
  readonly vitalsReport: "vitalsReport";
57
130
  readonly siteMap: "siteMap";
58
131
  }>;
59
- readonly capabilities: readonly ["siteSummaries", "overview", "liveVisitors", "sessions", "sessionJourney", "conversions", "visitorJourney", "goals", "funnels", "affiliates", "dataCoverage", "vitals", "siteMap"];
132
+ readonly capabilities: readonly ["siteSummaries", "overview", "liveVisitors", "sessions", "sessionJourney", "conversions", "visitorJourney", "goals", "funnels", "affiliates", "dataCoverage", "vitals", "siteMap", "localDays", "configure"];
60
133
  readonly limits: Readonly<{
61
134
  readonly maxSitesPerRequest: 10;
62
135
  readonly maxSitesPerConnection: 10;
@@ -67,11 +140,18 @@ export declare const FEDERATED_ANALYTICS_CONNECTOR_MANIFEST: Readonly<{
67
140
  }>;
68
141
  export type FederatedAnalyticsErrorCode = (typeof FEDERATED_ANALYTICS_ERROR_CODES)[keyof typeof FEDERATED_ANALYTICS_ERROR_CODES];
69
142
  export type FederatedAnalyticsCapability = (typeof FEDERATED_ANALYTICS_CONNECTOR_MANIFEST.capabilities)[number];
143
+ export type FederatedAnalyticsPermission = (typeof FEDERATED_ANALYTICS_PERMISSIONS)[number];
70
144
  export type FederatedAnalyticsManifest = ReturnType<typeof createFederatedAnalyticsManifest>;
71
145
  export interface FederatedAnalyticsConnection {
72
146
  connectionId: string;
73
147
  organizationId: string;
74
148
  siteIds: readonly string[];
149
+ /**
150
+ * What the host lets this connection do. Absent means read only; listing
151
+ * `analytics:configure` lets owners and admins of the dashboard organization
152
+ * manage goals, funnels, affiliates, site settings, and retention.
153
+ */
154
+ permissions?: readonly FederatedAnalyticsPermission[];
75
155
  revokedAt?: number;
76
156
  }
77
157
  export interface FederatedAnalyticsIdentity {
@@ -85,34 +165,65 @@ export interface FederatedSiteSummary {
85
165
  currency: string;
86
166
  timezone: string | null;
87
167
  cookieless: boolean;
168
+ /**
169
+ * The site's calendar days, when the host keeps them (alpha.11): the
170
+ * timezone its daily overview buckets follow and the instant from which
171
+ * they are complete. `null` for a site without a timezone, or whose zone
172
+ * never leaves UTC. Hosts before alpha.11 omit the field.
173
+ */
174
+ localDays: {
175
+ timezone: string;
176
+ since: number;
177
+ } | null;
88
178
  }
89
179
  export interface FederatedAnalyticsConnectionStatus {
90
180
  status: "connected";
91
181
  protocolVersion: 1;
92
182
  capabilities: FederatedAnalyticsCapability[];
183
+ /** The permissions both the token and the host's grant agree on. */
184
+ permissions: FederatedAnalyticsPermission[];
93
185
  siteCount: number;
94
186
  }
187
+ /** A resolved connection plus the permissions this request may act with. */
188
+ export type AuthorizedFederatedAnalyticsConnection = FederatedAnalyticsConnection & {
189
+ effectivePermissions: FederatedAnalyticsPermission[];
190
+ };
95
191
  export type ResolveFederatedAnalyticsConnection = (ctx: AnalyticsAuthorizationContext, identity: FederatedAnalyticsIdentity) => FederatedAnalyticsConnection | null | Promise<FederatedAnalyticsConnection | null>;
96
192
  export interface FederatedAnalyticsAuthorizerOptions {
97
193
  issuer: string;
98
194
  resolveConnection: ResolveFederatedAnalyticsConnection;
99
195
  }
196
+ export declare const federatedAnalyticsPermissionValidator: import("convex/values").VUnion<"analytics:configure" | "analytics:public" | "analytics:read", [import("convex/values").VLiteral<"analytics:read", "required">, import("convex/values").VLiteral<"analytics:configure", "required">, import("convex/values").VLiteral<"analytics:public", "required">], "required", never>;
100
197
  export declare const federatedAnalyticsManifestValidator: import("convex/values").VObject<{
101
- capabilities: ("affiliates" | "conversions" | "dataCoverage" | "funnels" | "goals" | "liveVisitors" | "overview" | "sessionJourney" | "sessions" | "siteMap" | "siteSummaries" | "visitorJourney" | "vitals")[];
198
+ capabilities: ("affiliates" | "configure" | "conversions" | "dataCoverage" | "funnels" | "goals" | "liveVisitors" | "localDays" | "overview" | "sessionJourney" | "sessions" | "siteMap" | "siteSummaries" | "visitorJourney" | "vitals")[];
102
199
  functions: {
103
200
  affiliatesReport: "affiliatesReport";
104
201
  connectionStatus: "connectionStatus";
105
202
  dataCoverage: "dataCoverage";
203
+ disableRetentionPolicy: "disableRetentionPolicy";
106
204
  funnelsReport: "funnelsReport";
107
205
  goalsReport: "goalsReport";
206
+ listAffiliates: "listAffiliates";
108
207
  listConversions: "listConversions";
208
+ listFunnels: "listFunnels";
209
+ listGoals: "listGoals";
109
210
  listSessions: "listSessions";
110
211
  listSites: "listSites";
111
212
  liveVisitors: "liveVisitors";
112
213
  manifest: "manifest";
113
214
  overview: "overview";
215
+ removeAffiliate: "removeAffiliate";
216
+ removeFunnel: "removeFunnel";
217
+ removeGoal: "removeGoal";
218
+ retentionStatus: "retentionStatus";
114
219
  sessionJourney: "sessionJourney";
220
+ setRetentionPolicy: "setRetentionPolicy";
115
221
  siteMap: "siteMap";
222
+ siteSettings: "siteSettings";
223
+ updateSite: "updateSite";
224
+ upsertAffiliate: "upsertAffiliate";
225
+ upsertFunnel: "upsertFunnel";
226
+ upsertGoal: "upsertGoal";
116
227
  visitorJourney: "visitorJourney";
117
228
  vitalsReport: "vitalsReport";
118
229
  };
@@ -134,16 +245,30 @@ export declare const federatedAnalyticsManifestValidator: import("convex/values"
134
245
  affiliatesReport: "affiliatesReport";
135
246
  connectionStatus: "connectionStatus";
136
247
  dataCoverage: "dataCoverage";
248
+ disableRetentionPolicy: "disableRetentionPolicy";
137
249
  funnelsReport: "funnelsReport";
138
250
  goalsReport: "goalsReport";
251
+ listAffiliates: "listAffiliates";
139
252
  listConversions: "listConversions";
253
+ listFunnels: "listFunnels";
254
+ listGoals: "listGoals";
140
255
  listSessions: "listSessions";
141
256
  listSites: "listSites";
142
257
  liveVisitors: "liveVisitors";
143
258
  manifest: "manifest";
144
259
  overview: "overview";
260
+ removeAffiliate: "removeAffiliate";
261
+ removeFunnel: "removeFunnel";
262
+ removeGoal: "removeGoal";
263
+ retentionStatus: "retentionStatus";
145
264
  sessionJourney: "sessionJourney";
265
+ setRetentionPolicy: "setRetentionPolicy";
146
266
  siteMap: "siteMap";
267
+ siteSettings: "siteSettings";
268
+ updateSite: "updateSite";
269
+ upsertAffiliate: "upsertAffiliate";
270
+ upsertFunnel: "upsertFunnel";
271
+ upsertGoal: "upsertGoal";
147
272
  visitorJourney: "visitorJourney";
148
273
  vitalsReport: "vitalsReport";
149
274
  }, {
@@ -162,8 +287,22 @@ export declare const federatedAnalyticsManifestValidator: import("convex/values"
162
287
  dataCoverage: import("convex/values").VLiteral<"dataCoverage", "required">;
163
288
  vitalsReport: import("convex/values").VLiteral<"vitalsReport", "required">;
164
289
  siteMap: import("convex/values").VLiteral<"siteMap", "required">;
165
- }, "required", "affiliatesReport" | "connectionStatus" | "dataCoverage" | "funnelsReport" | "goalsReport" | "listConversions" | "listSessions" | "listSites" | "liveVisitors" | "manifest" | "overview" | "sessionJourney" | "siteMap" | "visitorJourney" | "vitalsReport">;
166
- capabilities: import("convex/values").VArray<("affiliates" | "conversions" | "dataCoverage" | "funnels" | "goals" | "liveVisitors" | "overview" | "sessionJourney" | "sessions" | "siteMap" | "siteSummaries" | "visitorJourney" | "vitals")[], import("convex/values").VUnion<"affiliates" | "conversions" | "dataCoverage" | "funnels" | "goals" | "liveVisitors" | "overview" | "sessionJourney" | "sessions" | "siteMap" | "siteSummaries" | "visitorJourney" | "vitals", [import("convex/values").VLiteral<"siteSummaries", "required">, import("convex/values").VLiteral<"overview", "required">, import("convex/values").VLiteral<"liveVisitors", "required">, import("convex/values").VLiteral<"sessions", "required">, import("convex/values").VLiteral<"sessionJourney", "required">, import("convex/values").VLiteral<"conversions", "required">, import("convex/values").VLiteral<"visitorJourney", "required">, import("convex/values").VLiteral<"goals", "required">, import("convex/values").VLiteral<"funnels", "required">, import("convex/values").VLiteral<"affiliates", "required">, import("convex/values").VLiteral<"dataCoverage", "required">, import("convex/values").VLiteral<"vitals", "required">, import("convex/values").VLiteral<"siteMap", "required">], "required", never>, "required">;
290
+ siteSettings: import("convex/values").VLiteral<"siteSettings", "required">;
291
+ updateSite: import("convex/values").VLiteral<"updateSite", "required">;
292
+ listGoals: import("convex/values").VLiteral<"listGoals", "required">;
293
+ upsertGoal: import("convex/values").VLiteral<"upsertGoal", "required">;
294
+ removeGoal: import("convex/values").VLiteral<"removeGoal", "required">;
295
+ listFunnels: import("convex/values").VLiteral<"listFunnels", "required">;
296
+ upsertFunnel: import("convex/values").VLiteral<"upsertFunnel", "required">;
297
+ removeFunnel: import("convex/values").VLiteral<"removeFunnel", "required">;
298
+ listAffiliates: import("convex/values").VLiteral<"listAffiliates", "required">;
299
+ upsertAffiliate: import("convex/values").VLiteral<"upsertAffiliate", "required">;
300
+ removeAffiliate: import("convex/values").VLiteral<"removeAffiliate", "required">;
301
+ retentionStatus: import("convex/values").VLiteral<"retentionStatus", "required">;
302
+ setRetentionPolicy: import("convex/values").VLiteral<"setRetentionPolicy", "required">;
303
+ disableRetentionPolicy: import("convex/values").VLiteral<"disableRetentionPolicy", "required">;
304
+ }, "required", "affiliatesReport" | "connectionStatus" | "dataCoverage" | "disableRetentionPolicy" | "funnelsReport" | "goalsReport" | "listAffiliates" | "listConversions" | "listFunnels" | "listGoals" | "listSessions" | "listSites" | "liveVisitors" | "manifest" | "overview" | "removeAffiliate" | "removeFunnel" | "removeGoal" | "retentionStatus" | "sessionJourney" | "setRetentionPolicy" | "siteMap" | "siteSettings" | "updateSite" | "upsertAffiliate" | "upsertFunnel" | "upsertGoal" | "visitorJourney" | "vitalsReport">;
305
+ capabilities: import("convex/values").VArray<("affiliates" | "configure" | "conversions" | "dataCoverage" | "funnels" | "goals" | "liveVisitors" | "localDays" | "overview" | "sessionJourney" | "sessions" | "siteMap" | "siteSummaries" | "visitorJourney" | "vitals")[], import("convex/values").VUnion<"affiliates" | "configure" | "conversions" | "dataCoverage" | "funnels" | "goals" | "liveVisitors" | "localDays" | "overview" | "sessionJourney" | "sessions" | "siteMap" | "siteSummaries" | "visitorJourney" | "vitals", [import("convex/values").VLiteral<"siteSummaries", "required">, import("convex/values").VLiteral<"overview", "required">, import("convex/values").VLiteral<"liveVisitors", "required">, import("convex/values").VLiteral<"sessions", "required">, import("convex/values").VLiteral<"sessionJourney", "required">, import("convex/values").VLiteral<"conversions", "required">, import("convex/values").VLiteral<"visitorJourney", "required">, import("convex/values").VLiteral<"goals", "required">, import("convex/values").VLiteral<"funnels", "required">, import("convex/values").VLiteral<"affiliates", "required">, import("convex/values").VLiteral<"dataCoverage", "required">, import("convex/values").VLiteral<"vitals", "required">, import("convex/values").VLiteral<"siteMap", "required">, import("convex/values").VLiteral<"localDays", "required">, import("convex/values").VLiteral<"configure", "required">], "required", never>, "required">;
167
306
  limits: import("convex/values").VObject<{
168
307
  maxJourneyEvents: number;
169
308
  maxLiveVisitors: number;
@@ -177,21 +316,43 @@ export declare const federatedAnalyticsManifestValidator: import("convex/values"
177
316
  maxLiveVisitors: import("convex/values").VFloat64<number, "required">;
178
317
  maxJourneyEvents: import("convex/values").VFloat64<number, "required">;
179
318
  }, "required", "maxJourneyEvents" | "maxLiveVisitors" | "maxReportRangeDays" | "maxSitesPerConnection" | "maxSitesPerRequest">;
180
- }, "required", "capabilities" | "functions" | "functions.affiliatesReport" | "functions.connectionStatus" | "functions.dataCoverage" | "functions.funnelsReport" | "functions.goalsReport" | "functions.listConversions" | "functions.listSessions" | "functions.listSites" | "functions.liveVisitors" | "functions.manifest" | "functions.overview" | "functions.sessionJourney" | "functions.siteMap" | "functions.visitorJourney" | "functions.vitalsReport" | "limits" | "limits.maxJourneyEvents" | "limits.maxLiveVisitors" | "limits.maxReportRangeDays" | "limits.maxSitesPerConnection" | "limits.maxSitesPerRequest" | "moduleName" | "protocol" | "protocolVersion">;
319
+ }, "required", "capabilities" | "functions" | "functions.affiliatesReport" | "functions.connectionStatus" | "functions.dataCoverage" | "functions.disableRetentionPolicy" | "functions.funnelsReport" | "functions.goalsReport" | "functions.listAffiliates" | "functions.listConversions" | "functions.listFunnels" | "functions.listGoals" | "functions.listSessions" | "functions.listSites" | "functions.liveVisitors" | "functions.manifest" | "functions.overview" | "functions.removeAffiliate" | "functions.removeFunnel" | "functions.removeGoal" | "functions.retentionStatus" | "functions.sessionJourney" | "functions.setRetentionPolicy" | "functions.siteMap" | "functions.siteSettings" | "functions.updateSite" | "functions.upsertAffiliate" | "functions.upsertFunnel" | "functions.upsertGoal" | "functions.visitorJourney" | "functions.vitalsReport" | "limits" | "limits.maxJourneyEvents" | "limits.maxLiveVisitors" | "limits.maxReportRangeDays" | "limits.maxSitesPerConnection" | "limits.maxSitesPerRequest" | "moduleName" | "protocol" | "protocolVersion">;
181
320
  export declare const federatedAnalyticsConnectionStatusValidator: import("convex/values").VObject<{
182
- capabilities: ("affiliates" | "conversions" | "dataCoverage" | "funnels" | "goals" | "liveVisitors" | "overview" | "sessionJourney" | "sessions" | "siteMap" | "siteSummaries" | "visitorJourney" | "vitals")[];
321
+ capabilities: ("affiliates" | "configure" | "conversions" | "dataCoverage" | "funnels" | "goals" | "liveVisitors" | "localDays" | "overview" | "sessionJourney" | "sessions" | "siteMap" | "siteSummaries" | "visitorJourney" | "vitals")[];
322
+ permissions: ("analytics:configure" | "analytics:public" | "analytics:read")[];
183
323
  protocolVersion: 1;
184
324
  siteCount: number;
185
325
  status: "connected";
186
326
  }, {
187
327
  status: import("convex/values").VLiteral<"connected", "required">;
188
328
  protocolVersion: import("convex/values").VLiteral<1, "required">;
189
- capabilities: import("convex/values").VArray<("affiliates" | "conversions" | "dataCoverage" | "funnels" | "goals" | "liveVisitors" | "overview" | "sessionJourney" | "sessions" | "siteMap" | "siteSummaries" | "visitorJourney" | "vitals")[], import("convex/values").VUnion<"affiliates" | "conversions" | "dataCoverage" | "funnels" | "goals" | "liveVisitors" | "overview" | "sessionJourney" | "sessions" | "siteMap" | "siteSummaries" | "visitorJourney" | "vitals", [import("convex/values").VLiteral<"siteSummaries", "required">, import("convex/values").VLiteral<"overview", "required">, import("convex/values").VLiteral<"liveVisitors", "required">, import("convex/values").VLiteral<"sessions", "required">, import("convex/values").VLiteral<"sessionJourney", "required">, import("convex/values").VLiteral<"conversions", "required">, import("convex/values").VLiteral<"visitorJourney", "required">, import("convex/values").VLiteral<"goals", "required">, import("convex/values").VLiteral<"funnels", "required">, import("convex/values").VLiteral<"affiliates", "required">, import("convex/values").VLiteral<"dataCoverage", "required">, import("convex/values").VLiteral<"vitals", "required">, import("convex/values").VLiteral<"siteMap", "required">], "required", never>, "required">;
329
+ capabilities: import("convex/values").VArray<("affiliates" | "configure" | "conversions" | "dataCoverage" | "funnels" | "goals" | "liveVisitors" | "localDays" | "overview" | "sessionJourney" | "sessions" | "siteMap" | "siteSummaries" | "visitorJourney" | "vitals")[], import("convex/values").VUnion<"affiliates" | "configure" | "conversions" | "dataCoverage" | "funnels" | "goals" | "liveVisitors" | "localDays" | "overview" | "sessionJourney" | "sessions" | "siteMap" | "siteSummaries" | "visitorJourney" | "vitals", [import("convex/values").VLiteral<"siteSummaries", "required">, import("convex/values").VLiteral<"overview", "required">, import("convex/values").VLiteral<"liveVisitors", "required">, import("convex/values").VLiteral<"sessions", "required">, import("convex/values").VLiteral<"sessionJourney", "required">, import("convex/values").VLiteral<"conversions", "required">, import("convex/values").VLiteral<"visitorJourney", "required">, import("convex/values").VLiteral<"goals", "required">, import("convex/values").VLiteral<"funnels", "required">, import("convex/values").VLiteral<"affiliates", "required">, import("convex/values").VLiteral<"dataCoverage", "required">, import("convex/values").VLiteral<"vitals", "required">, import("convex/values").VLiteral<"siteMap", "required">, import("convex/values").VLiteral<"localDays", "required">, import("convex/values").VLiteral<"configure", "required">], "required", never>, "required">;
330
+ permissions: import("convex/values").VArray<("analytics:configure" | "analytics:public" | "analytics:read")[], import("convex/values").VUnion<"analytics:configure" | "analytics:public" | "analytics:read", [import("convex/values").VLiteral<"analytics:read", "required">, import("convex/values").VLiteral<"analytics:configure", "required">, import("convex/values").VLiteral<"analytics:public", "required">], "required", never>, "required">;
190
331
  siteCount: import("convex/values").VFloat64<number, "required">;
191
- }, "required", "capabilities" | "protocolVersion" | "siteCount" | "status">;
332
+ }, "required", "capabilities" | "permissions" | "protocolVersion" | "siteCount" | "status">;
333
+ /**
334
+ * The permissions a request may act with: those the token claims that the
335
+ * host's grant also lists. Reading needs no listing — a grant is a read grant
336
+ * by definition — so a token claiming `analytics:read` always reads, and the
337
+ * configure scope rides on it. A public token claims `analytics:public`
338
+ * instead of reading, and holds it only when the grant lists it.
339
+ */
340
+ export declare function effectiveFederatedPermissions(claimed: readonly string[], connection: Pick<FederatedAnalyticsConnection, "permissions">): FederatedAnalyticsPermission[];
341
+ /**
342
+ * Whether `effective` permissions reach an operation that needs `required`:
343
+ * `analytics:public` names an operation a public token may run, and a reader
344
+ * or a configurer reaches it too; `analytics:read` needs a reader.
345
+ */
346
+ export declare function federatedPermissionSatisfies(effective: readonly FederatedAnalyticsPermission[], required: FederatedAnalyticsPermission): boolean;
347
+ /** A public link's token: it holds the public permission and cannot read. */
348
+ export declare function isPublicFederatedAccess(effective: readonly FederatedAnalyticsPermission[]): boolean;
192
349
  export declare const federatedSiteSummaryValidator: import("convex/values").VObject<{
193
350
  cookieless: boolean;
194
351
  currency: string;
352
+ localDays: {
353
+ since: number;
354
+ timezone: string;
355
+ } | null;
195
356
  name: string;
196
357
  siteId: string;
197
358
  timezone: string | null;
@@ -201,7 +362,17 @@ export declare const federatedSiteSummaryValidator: import("convex/values").VObj
201
362
  currency: import("convex/values").VString<string, "required">;
202
363
  timezone: import("convex/values").VUnion<string | null, [import("convex/values").VString<string, "required">, import("convex/values").VNull<null, "required">], "required", never>;
203
364
  cookieless: import("convex/values").VBoolean<boolean, "required">;
204
- }, "required", "cookieless" | "currency" | "name" | "siteId" | "timezone">;
365
+ localDays: import("convex/values").VUnion<{
366
+ since: number;
367
+ timezone: string;
368
+ } | null, [import("convex/values").VObject<{
369
+ since: number;
370
+ timezone: string;
371
+ }, {
372
+ timezone: import("convex/values").VString<string, "required">;
373
+ since: import("convex/values").VFloat64<number, "required">;
374
+ }, "required", "since" | "timezone">, import("convex/values").VNull<null, "required">], "required", "since" | "timezone">;
375
+ }, "required", "cookieless" | "currency" | "localDays" | "localDays.since" | "localDays.timezone" | "name" | "siteId" | "timezone">;
205
376
  export declare function createFederatedAnalyticsManifest(): {
206
377
  protocol: "amage-rastro-analytics";
207
378
  protocolVersion: 1;
@@ -220,10 +391,24 @@ export declare function createFederatedAnalyticsManifest(): {
220
391
  funnelsReport: "funnelsReport";
221
392
  affiliatesReport: "affiliatesReport";
222
393
  dataCoverage: "dataCoverage";
394
+ siteSettings: "siteSettings";
395
+ updateSite: "updateSite";
396
+ listGoals: "listGoals";
397
+ upsertGoal: "upsertGoal";
398
+ removeGoal: "removeGoal";
399
+ listFunnels: "listFunnels";
400
+ upsertFunnel: "upsertFunnel";
401
+ removeFunnel: "removeFunnel";
402
+ listAffiliates: "listAffiliates";
403
+ upsertAffiliate: "upsertAffiliate";
404
+ removeAffiliate: "removeAffiliate";
405
+ retentionStatus: "retentionStatus";
406
+ setRetentionPolicy: "setRetentionPolicy";
407
+ disableRetentionPolicy: "disableRetentionPolicy";
223
408
  vitalsReport: "vitalsReport";
224
409
  siteMap: "siteMap";
225
410
  };
226
- capabilities: ("affiliates" | "conversions" | "dataCoverage" | "funnels" | "goals" | "liveVisitors" | "overview" | "sessionJourney" | "sessions" | "siteMap" | "siteSummaries" | "visitorJourney" | "vitals")[];
411
+ capabilities: ("affiliates" | "configure" | "conversions" | "dataCoverage" | "funnels" | "goals" | "liveVisitors" | "localDays" | "overview" | "sessionJourney" | "sessions" | "siteMap" | "siteSummaries" | "visitorJourney" | "vitals")[];
227
412
  limits: {
228
413
  maxSitesPerRequest: 10;
229
414
  maxSitesPerConnection: 10;
@@ -232,5 +417,5 @@ export declare function createFederatedAnalyticsManifest(): {
232
417
  maxJourneyEvents: 500;
233
418
  };
234
419
  };
235
- export declare function createFederatedAnalyticsConnectionAuthorizer(options: FederatedAnalyticsAuthorizerOptions): (ctx: AnalyticsAuthorizationContext, requestedSiteIds?: readonly string[]) => Promise<FederatedAnalyticsConnection>;
420
+ export declare function createFederatedAnalyticsConnectionAuthorizer(options: FederatedAnalyticsAuthorizerOptions): (ctx: AnalyticsAuthorizationContext, requestedSiteIds?: readonly string[], requiredPermission?: FederatedAnalyticsPermission) => Promise<AuthorizedFederatedAnalyticsConnection>;
236
421
  //# sourceMappingURL=federation.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"federation.d.ts","sourceRoot":"","sources":["../../src/client/federation.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAQlD,OAAO,KAAK,EAAE,6BAA6B,EAAE,MAAM,YAAY,CAAC;AAEhE,eAAO,MAAM,0BAA0B;2BACvB,sBAAsB;6BACpB,wBAAwB;0BAC3B,oBAAoB;EACxB,CAAC;AAEZ,eAAO,MAAM,mCAAmC,mBAAmB,CAAC;AAEpE,eAAO,MAAM,+BAA+B;8BACzB,4BAA4B;8BAC5B,4BAA4B;6BAC7B,2BAA2B;gCACxB,8BAA8B;4BAClC,0BAA0B;0BAC5B,wBAAwB;EAC5B,CAAC;AAGZ;;;;GAIG;AACH,eAAO,MAAM,sCAAsC;uBACvC,UAAU;+BACF,kBAAkB;wBACzB,WAAW;uBACZ,UAAU;2BACN,cAAc;2BACd,cAAc;6BACZ,gBAAgB;8BACf,iBAAiB;6BAClB,gBAAgB;0BACnB,aAAa;4BACX,eAAe;+BACZ,kBAAkB;2BACtB,cAAc;EACnB,CAAC;AACZ,eAAO,MAAM,yCAAyC,yKAY3C,CAAC;AAmBZ,eAAO,MAAM,sCAAsC;uBACvC,wBAAwB;8BACjB,CAAC;yBACN,kBAAkB;;2BAhDpB,UAAU;mCACF,kBAAkB;4BACzB,WAAW;2BACZ,UAAU;+BACN,cAAc;+BACd,cAAc;iCACZ,gBAAgB;kCACf,iBAAiB;iCAClB,gBAAgB;8BACnB,aAAa;gCACX,eAAe;mCACZ,kBAAkB;+BACtB,cAAc;+BAiBd,cAAc;0BACnB,SAAS;;;;;;;;;;EAsBT,CAAC;AAKZ,MAAM,MAAM,2BAA2B,GACrC,CAAC,OAAO,+BAA+B,CAAC,CAAC,MAAM,OAAO,+BAA+B,CAAC,CAAC;AACzF,MAAM,MAAM,4BAA4B,GACtC,CAAC,OAAO,sCAAsC,CAAC,YAAY,CAAC,CAAC,MAAM,CAAC,CAAC;AACvE,MAAM,MAAM,0BAA0B,GAAG,UAAU,CACjD,OAAO,gCAAgC,CACxC,CAAC;AAEF,MAAM,WAAW,4BAA4B;IAC3C,YAAY,EAAE,MAAM,CAAC;IACrB,cAAc,EAAE,MAAM,CAAC;IACvB,OAAO,EAAE,SAAS,MAAM,EAAE,CAAC;IAC3B,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,0BAA0B;IACzC,YAAY,EAAE,MAAM,CAAC;IACrB,cAAc,EAAE,MAAM,CAAC;IACvB,QAAQ,EAAE,YAAY,CAAC;CACxB;AAED,MAAM,WAAW,oBAAoB;IACnC,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,UAAU,EAAE,OAAO,CAAC;CACrB;AAED,MAAM,WAAW,kCAAkC;IACjD,MAAM,EAAE,WAAW,CAAC;IACpB,eAAe,EAAE,CAAC,CAAC;IACnB,YAAY,EAAE,4BAA4B,EAAE,CAAC;IAC7C,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,MAAM,mCAAmC,GAAG,CAChD,GAAG,EAAE,6BAA6B,EAClC,QAAQ,EAAE,0BAA0B,KAElC,4BAA4B,GAC5B,IAAI,GACJ,OAAO,CAAC,4BAA4B,GAAG,IAAI,CAAC,CAAC;AAEjD,MAAM,WAAW,mCAAmC;IAClD,MAAM,EAAE,MAAM,CAAC;IACf,iBAAiB,EAAE,mCAAmC,CAAC;CACxD;AAkBD,eAAO,MAAM,mCAAmC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;+oBA+B9C,CAAC;AAEH,eAAO,MAAM,2CAA2C;;;;;;;;;;2EAKtD,CAAC;AAEH,eAAO,MAAM,6BAA6B;;;;;;;;;;;;0EAMxC,CAAC;AAEH,wBAAgB,gCAAgC;cA5HpC,wBAAwB;qBACjB,CAAC;gBACN,kBAAkB;;kBAhDpB,UAAU;0BACF,kBAAkB;mBACzB,WAAW;kBACZ,UAAU;sBACN,cAAc;sBACd,cAAc;wBACZ,gBAAgB;yBACf,iBAAiB;wBAClB,gBAAgB;qBACnB,aAAa;uBACX,eAAe;0BACZ,kBAAkB;sBACtB,cAAc;sBAiBd,cAAc;iBACnB,SAAS;;;;;;;;;;EAmJnB;AAED,wBAAgB,4CAA4C,CAC1D,OAAO,EAAE,mCAAmC,SAUrC,6BAA6B,qBACf,SAAS,MAAM,EAAE,KACnC,OAAO,CAAC,4BAA4B,CAAC,CA0EzC"}
1
+ {"version":3,"file":"federation.d.ts","sourceRoot":"","sources":["../../src/client/federation.ts"],"names":[],"mappings":"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"}