@iann29/rastro 0.1.0-alpha.1 → 0.1.0-alpha.3

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 (68) hide show
  1. package/README.md +80 -18
  2. package/dist/component/_generated/api.d.ts +4 -0
  3. package/dist/component/_generated/api.d.ts.map +1 -1
  4. package/dist/component/_generated/api.js.map +1 -1
  5. package/dist/component/_generated/component.d.ts +10 -0
  6. package/dist/component/_generated/component.d.ts.map +1 -1
  7. package/dist/component/_generated/server.d.ts +4 -0
  8. package/dist/component/_generated/server.d.ts.map +1 -1
  9. package/dist/component/_generated/server.js.map +1 -1
  10. package/dist/component/constants.d.ts +2 -0
  11. package/dist/component/constants.d.ts.map +1 -1
  12. package/dist/component/constants.js +2 -0
  13. package/dist/component/constants.js.map +1 -1
  14. package/dist/component/convex.config.d.ts +6 -1
  15. package/dist/component/convex.config.js +9 -1
  16. package/dist/component/convex.config.js.map +1 -1
  17. package/dist/component/diagnostics.d.ts +9 -0
  18. package/dist/component/diagnostics.d.ts.map +1 -0
  19. package/dist/component/diagnostics.js +47 -0
  20. package/dist/component/diagnostics.js.map +1 -0
  21. package/dist/component/eventStore.d.ts +18 -8
  22. package/dist/component/eventStore.d.ts.map +1 -1
  23. package/dist/component/eventStore.js +134 -147
  24. package/dist/component/eventStore.js.map +1 -1
  25. package/dist/component/geo.d.ts +71 -0
  26. package/dist/component/geo.d.ts.map +1 -0
  27. package/dist/component/geo.js +610 -0
  28. package/dist/component/geo.js.map +1 -0
  29. package/dist/component/http.d.ts.map +1 -1
  30. package/dist/component/http.js +124 -11
  31. package/dist/component/http.js.map +1 -1
  32. package/dist/component/ingest.d.ts.map +1 -1
  33. package/dist/component/ingest.js +34 -14
  34. package/dist/component/ingest.js.map +1 -1
  35. package/dist/component/reports.d.ts +8 -8
  36. package/dist/component/reports.d.ts.map +1 -1
  37. package/dist/component/reports.js +10 -30
  38. package/dist/component/reports.js.map +1 -1
  39. package/dist/component/schema.d.ts +47 -52
  40. package/dist/component/schema.js +21 -20
  41. package/dist/component/schema.js.map +1 -1
  42. package/dist/component/validators.d.ts +49 -49
  43. package/dist/component/validators.d.ts.map +1 -1
  44. package/dist/component/validators.js +4 -11
  45. package/dist/component/validators.js.map +1 -1
  46. package/dist/tracker/generated.d.ts +4 -4
  47. package/dist/tracker/generated.d.ts.map +1 -1
  48. package/dist/tracker/generated.js +4 -4
  49. package/dist/tracker/generated.js.map +1 -1
  50. package/dist/tracker/tracker.js +7 -6
  51. package/dist/tracker/tracker.js.map +1 -1
  52. package/dist/tracker.min.js +1 -1
  53. package/docs/benchmarks/2026-08-20-realistic.md +1 -1
  54. package/package.json +1 -1
  55. package/scripts/benchmark-ingest.mjs +81 -32
  56. package/src/component/_generated/api.ts +4 -0
  57. package/src/component/_generated/component.ts +13 -0
  58. package/src/component/_generated/server.ts +4 -0
  59. package/src/component/constants.ts +2 -0
  60. package/src/component/convex.config.ts +11 -1
  61. package/src/component/diagnostics.ts +64 -0
  62. package/src/component/eventStore.ts +195 -178
  63. package/src/component/geo.ts +779 -0
  64. package/src/component/http.ts +184 -17
  65. package/src/component/ingest.ts +49 -15
  66. package/src/component/reports.ts +12 -38
  67. package/src/component/schema.ts +23 -21
  68. package/src/component/validators.ts +7 -12
@@ -1,4 +1,5 @@
1
- import { MAX_EVENTS_PER_SESSION_WINDOW, RATE_LIMIT_WINDOW_MS, } from "./constants.js";
1
+ import { JOURNEY_READ_BYTE_RESERVE, JOURNEY_READ_DOCUMENT_RESERVE, MAX_EVENTS_PER_SESSION_WINDOW, RATE_LIMIT_WINDOW_MS, } from "./constants.js";
2
+ import { fail } from "./errors.js";
2
3
  export function eventBucketStart(timestamp) {
3
4
  return Math.floor(timestamp / RATE_LIMIT_WINDOW_MS) * RATE_LIMIT_WINDOW_MS;
4
5
  }
@@ -6,58 +7,43 @@ export function eventBatchKey(sessionId, bucketStart) {
6
7
  return JSON.stringify([sessionId, bucketStart]);
7
8
  }
8
9
  export async function inspectTelemetryMinute(ctx, input) {
9
- const [legacyEvents, batches] = await loadTelemetryMinute(ctx, input);
10
- const eventIds = new Set([
11
- ...legacyEvents.map((event) => event.eventId),
12
- ...batches.flatMap((batch) => batch.events.map((event) => event.eventId)),
13
- ]);
14
- if (legacyEvents.length > MAX_EVENTS_PER_SESSION_WINDOW) {
15
- await Promise.all([...input.candidateEventIds]
16
- .filter((eventId) => !eventIds.has(eventId))
17
- .map(async (eventId) => {
18
- const legacy = await findLegacyTelemetry(ctx, {
19
- ...input,
20
- eventId,
21
- });
22
- if (legacy)
23
- eventIds.add(eventId);
24
- }));
25
- }
10
+ const batches = await loadTelemetryMinute(ctx, input);
11
+ const eventIds = new Set(batches.flatMap((batch) => batch.events.map((event) => event.eventId)));
26
12
  return {
27
13
  eventIds,
28
- persistedCount: telemetryMinuteCount(legacyEvents, batches),
14
+ persistedCount: telemetryMinuteCount(batches),
29
15
  };
30
16
  }
31
17
  export async function findTelemetry(ctx, siteId, event) {
32
18
  const bucketStart = eventBucketStart(event.timestamp);
33
- const [legacyEvents, batches] = await loadTelemetryMinute(ctx, {
19
+ const batches = await loadTelemetryMinute(ctx, {
34
20
  siteId,
35
21
  sessionId: event.sessionId,
36
22
  bucketStart,
37
23
  });
38
- const persistedCount = telemetryMinuteCount(legacyEvents, batches);
39
- let legacyEvent = legacyEvents.find((candidate) => candidate.eventId === event.eventId);
40
- if (!legacyEvent &&
41
- legacyEvents.length > MAX_EVENTS_PER_SESSION_WINDOW) {
42
- legacyEvent = await findLegacyTelemetry(ctx, {
43
- siteId,
44
- sessionId: event.sessionId,
45
- bucketStart,
46
- eventId: event.eventId,
47
- }) ?? undefined;
48
- }
24
+ const persistedCount = telemetryMinuteCount(batches);
49
25
  const saturated = persistedCount >= MAX_EVENTS_PER_SESSION_WINDOW;
50
- if (legacyEvent)
51
- return { match: legacyEvent, saturated };
52
- const batch = batches.find((candidate) => candidate.events.some((nested) => nested.eventId === event.eventId));
26
+ let batch;
27
+ let nestedEvent;
28
+ for (const candidate of batches) {
29
+ nestedEvent = candidate.events.find((nested) => nested.eventId === event.eventId);
30
+ if (nestedEvent) {
31
+ batch = candidate;
32
+ break;
33
+ }
34
+ }
53
35
  return {
54
- match: batch
55
- ? { sessionId: batch.sessionId, visitorId: batch.visitorId }
36
+ match: batch && nestedEvent
37
+ ? {
38
+ sessionId: batch.sessionId,
39
+ visitorId: batch.visitorId,
40
+ ...eventContext(nestedEvent),
41
+ }
56
42
  : null,
57
43
  saturated,
58
44
  };
59
45
  }
60
- export function bufferEventBatch(siteId, event, buffer) {
46
+ export function bufferEventBatch(siteId, event, buffer, country) {
61
47
  const bucketStart = eventBucketStart(event.timestamp);
62
48
  const key = eventBatchKey(event.sessionId, bucketStart);
63
49
  const existing = buffer.get(key);
@@ -65,7 +51,7 @@ export function bufferEventBatch(siteId, event, buffer) {
65
51
  if (existing.visitorId !== event.visitorId) {
66
52
  throw new Error("event batch visitor does not match its session");
67
53
  }
68
- existing.events.push(eventForBatch(event));
54
+ existing.events.push(eventForBatch(event, country));
69
55
  return;
70
56
  }
71
57
  buffer.set(key, {
@@ -73,16 +59,16 @@ export function bufferEventBatch(siteId, event, buffer) {
73
59
  sessionId: event.sessionId,
74
60
  visitorId: event.visitorId,
75
61
  bucketStart,
76
- events: [eventForBatch(event)],
62
+ events: [eventForBatch(event, country)],
77
63
  });
78
64
  }
79
- export async function insertEventBatch(ctx, siteId, event) {
65
+ export async function insertEventBatch(ctx, siteId, event, country) {
80
66
  await ctx.db.insert("eventBatches", {
81
67
  siteId,
82
68
  sessionId: event.sessionId,
83
69
  visitorId: event.visitorId,
84
70
  bucketStart: eventBucketStart(event.timestamp),
85
- events: [eventForBatch(event)],
71
+ events: [eventForBatch(event, country)],
86
72
  });
87
73
  }
88
74
  export async function flushEventBatches(ctx, buffer) {
@@ -98,8 +84,7 @@ export async function loadSessionJourneyEvents(ctx, input) {
98
84
  // be read completely before applying the cursor.
99
85
  const loadBatches = async () => {
100
86
  const batches = [];
101
- let eventCount = 0;
102
- const requiredEvents = input.resultLimit + MAX_EVENTS_PER_SESSION_WINDOW;
87
+ let qualifyingEvents = 0;
103
88
  let completedBucket;
104
89
  const query = ctx.db
105
90
  .query("eventBatches")
@@ -114,68 +99,22 @@ export async function loadSessionJourneyEvents(ctx, input) {
114
99
  break;
115
100
  }
116
101
  batches.push(batch);
117
- eventCount += batch.events.length;
118
- if (eventCount >= requiredEvents)
102
+ qualifyingEvents += batch.events.reduce((count, _event, index) => {
103
+ const event = eventFromBatch(batch, index);
104
+ return count + Number(event.timestamp >= input.from &&
105
+ event.timestamp <= input.to &&
106
+ (!input.cursor ||
107
+ compareJourneyEventToCursor(event, input.cursor) > 0));
108
+ }, 0);
109
+ if (qualifyingEvents >= input.resultLimit) {
119
110
  completedBucket = batch.bucketStart;
111
+ }
120
112
  }
121
113
  return batches;
122
114
  };
123
- const loadLegacyEvents = async () => {
124
- const take = input.resultLimit + 1;
125
- if (!input.cursor) {
126
- return ctx.db
127
- .query("events")
128
- .withIndex("by_siteId_and_sessionId_and_timestamp", (range) => range
129
- .eq("siteId", input.siteId)
130
- .eq("sessionId", input.sessionId)
131
- .gte("timestamp", input.from)
132
- .lte("timestamp", input.to))
133
- .order("asc")
134
- .take(take);
135
- }
136
- const rows = await ctx.db
137
- .query("events")
138
- .withIndex("by_siteId_and_sessionId_and_timestamp", (range) => range
139
- .eq("siteId", input.siteId)
140
- .eq("sessionId", input.sessionId)
141
- .eq("timestamp", input.cursor.timestamp)
142
- .gt("_creationTime", input.cursor.creationTime))
143
- .order("asc")
144
- .take(take);
145
- if (rows.length < take) {
146
- rows.push(...await ctx.db
147
- .query("events")
148
- .withIndex("by_siteId_and_sessionId_and_timestamp", (range) => range
149
- .eq("siteId", input.siteId)
150
- .eq("sessionId", input.sessionId)
151
- .gt("timestamp", input.cursor.timestamp)
152
- .lte("timestamp", input.to))
153
- .order("asc")
154
- .take(take - rows.length));
155
- }
156
- return rows;
157
- };
158
- const [legacyEvents, batches] = await Promise.all([
159
- loadLegacyEvents(),
160
- loadBatches(),
161
- ]);
162
- const rows = legacyEvents.map((event) => ({
163
- ...event,
164
- _id: String(event._id),
165
- }));
166
- for (const batch of batches) {
167
- for (let index = 0; index < batch.events.length; index += 1) {
168
- const event = batch.events[index];
169
- rows.push({
170
- ...event,
171
- _id: `eventBatch:${batch._id}:${index.toString().padStart(3, "0")}`,
172
- _creationTime: batch._creationTime,
173
- siteId: batch.siteId,
174
- sessionId: batch.sessionId,
175
- visitorId: batch.visitorId,
176
- });
177
- }
178
- }
115
+ const batches = await loadBatches();
116
+ const rows = [];
117
+ appendBatchEvents(rows, batches);
179
118
  return rows
180
119
  .filter((event) => event.timestamp >= input.from &&
181
120
  event.timestamp <= input.to &&
@@ -183,6 +122,42 @@ export async function loadSessionJourneyEvents(ctx, input) {
183
122
  .sort(compareJourneyEvents)
184
123
  .slice(0, input.resultLimit);
185
124
  }
125
+ export async function loadVisitorJourneyEvents(ctx, input) {
126
+ const firstBucket = eventBucketStart(input.from);
127
+ const lastBucket = eventBucketStart(input.to);
128
+ const loadBatches = async () => {
129
+ const batches = [];
130
+ let qualifyingEvents = 0;
131
+ let completedBucket;
132
+ const query = ctx.db
133
+ .query("eventBatches")
134
+ .withIndex("by_siteId_and_visitorId_and_bucketStart", (range) => range
135
+ .eq("siteId", input.siteId)
136
+ .eq("visitorId", input.visitorId)
137
+ .gte("bucketStart", firstBucket)
138
+ .lte("bucketStart", lastBucket))
139
+ .order("asc");
140
+ for await (const batch of query) {
141
+ if (completedBucket !== undefined && batch.bucketStart !== completedBucket) {
142
+ break;
143
+ }
144
+ batches.push(batch);
145
+ await requireJourneyReadHeadroom(ctx);
146
+ qualifyingEvents += batch.events.filter((event) => event.timestamp >= input.from && event.timestamp <= input.to).length;
147
+ if (qualifyingEvents >= input.resultLimit) {
148
+ completedBucket = batch.bucketStart;
149
+ }
150
+ }
151
+ return batches;
152
+ };
153
+ const batches = await loadBatches();
154
+ const rows = [];
155
+ appendBatchEvents(rows, batches);
156
+ return rows
157
+ .filter((event) => event.timestamp >= input.from && event.timestamp <= input.to)
158
+ .sort(compareJourneyEvents)
159
+ .slice(0, input.resultLimit);
160
+ }
186
161
  export function compareJourneyEvents(left, right) {
187
162
  return left.timestamp - right.timestamp ||
188
163
  left._creationTime - right._creationTime ||
@@ -221,61 +196,32 @@ export async function hydrateEventContexts(ctx, rows) {
221
196
  export async function deleteTelemetryBefore(ctx, input) {
222
197
  const batchCutoff = eventBucketStart(input.before);
223
198
  const limit = input.batchSize + 1;
224
- const [legacyEvents, batches] = await Promise.all([
225
- ctx.db
226
- .query("events")
227
- .withIndex("by_siteId_and_timestamp", (range) => range.eq("siteId", input.siteId).lt("timestamp", input.before))
228
- .take(limit),
229
- ctx.db
230
- .query("eventBatches")
231
- .withIndex("by_siteId_and_bucketStart", (range) => range.eq("siteId", input.siteId).lt("bucketStart", batchCutoff))
232
- .take(limit),
233
- ]);
234
- const rows = [...legacyEvents, ...batches].slice(0, input.batchSize);
199
+ const batches = await ctx.db
200
+ .query("eventBatches")
201
+ .withIndex("by_siteId_and_bucketStart", (range) => range.eq("siteId", input.siteId).lt("bucketStart", batchCutoff))
202
+ .take(limit);
203
+ const rows = batches.slice(0, input.batchSize);
235
204
  for (const row of rows) {
236
- if ("bucketStart" in row) {
237
- await ctx.db.delete("eventBatches", row._id);
238
- }
239
- else {
240
- await ctx.db.delete("events", row._id);
241
- }
205
+ await ctx.db.delete("eventBatches", row._id);
242
206
  }
243
207
  return {
244
208
  deleted: rows.length,
245
- hasMore: legacyEvents.length + batches.length > input.batchSize,
209
+ hasMore: batches.length > input.batchSize,
246
210
  };
247
211
  }
248
212
  async function loadTelemetryMinute(ctx, input) {
249
- return Promise.all([
250
- ctx.db
251
- .query("events")
252
- .withIndex("by_siteId_and_sessionId_and_timestamp", (range) => range
253
- .eq("siteId", input.siteId)
254
- .eq("sessionId", input.sessionId)
255
- .gte("timestamp", input.bucketStart)
256
- .lt("timestamp", input.bucketStart + RATE_LIMIT_WINDOW_MS))
257
- .take(MAX_EVENTS_PER_SESSION_WINDOW + 1),
258
- ctx.db
259
- .query("eventBatches")
260
- .withIndex("by_siteId_and_sessionId_and_bucketStart", (range) => range
261
- .eq("siteId", input.siteId)
262
- .eq("sessionId", input.sessionId)
263
- .eq("bucketStart", input.bucketStart))
264
- .take(MAX_EVENTS_PER_SESSION_WINDOW + 1),
265
- ]);
266
- }
267
- async function findLegacyTelemetry(ctx, input) {
268
- const candidates = await ctx.db
269
- .query("events")
270
- .withIndex("by_siteId_and_eventId", (range) => range.eq("siteId", input.siteId).eq("eventId", input.eventId))
271
- .take(2);
272
- return candidates.find((candidate) => candidate.sessionId === input.sessionId &&
273
- eventBucketStart(candidate.timestamp) === input.bucketStart) ?? null;
213
+ return ctx.db
214
+ .query("eventBatches")
215
+ .withIndex("by_siteId_and_sessionId_and_bucketStart", (range) => range
216
+ .eq("siteId", input.siteId)
217
+ .eq("sessionId", input.sessionId)
218
+ .eq("bucketStart", input.bucketStart))
219
+ .take(MAX_EVENTS_PER_SESSION_WINDOW + 1);
274
220
  }
275
- function telemetryMinuteCount(legacyEvents, batches) {
276
- return legacyEvents.length + batches.reduce((total, batch) => total + batch.events.length, 0);
221
+ function telemetryMinuteCount(batches) {
222
+ return batches.reduce((total, batch) => total + batch.events.length, 0);
277
223
  }
278
- function eventForBatch(event) {
224
+ function eventForBatch(event, country) {
279
225
  return {
280
226
  eventId: event.eventId,
281
227
  sessionId: event.sessionId,
@@ -294,8 +240,49 @@ function eventForBatch(event) {
294
240
  : {}),
295
241
  ...(event.currency ? { currency: event.currency } : {}),
296
242
  ...(event.affiliateSlug ? { affiliateSlug: event.affiliateSlug } : {}),
243
+ aggregateCountry: country,
297
244
  };
298
245
  }
246
+ function appendBatchEvents(rows, batches) {
247
+ for (const batch of batches) {
248
+ for (let index = 0; index < batch.events.length; index += 1) {
249
+ rows.push(eventFromBatch(batch, index));
250
+ }
251
+ }
252
+ }
253
+ function eventFromBatch(batch, index) {
254
+ const { aggregateCountry: _aggregateCountry, ...event } = batch.events[index];
255
+ void _aggregateCountry;
256
+ return {
257
+ ...event,
258
+ _id: `eventBatch:${batch._id}:${index.toString().padStart(3, "0")}`,
259
+ _creationTime: batch._creationTime,
260
+ siteId: batch.siteId,
261
+ sessionId: batch.sessionId,
262
+ visitorId: batch.visitorId,
263
+ };
264
+ }
265
+ function eventContext(event) {
266
+ return {
267
+ ...(event.country ? { country: event.country } : {}),
268
+ ...(event.city ? { city: event.city } : {}),
269
+ ...(event.latitude !== undefined ? { latitude: event.latitude } : {}),
270
+ ...(event.longitude !== undefined ? { longitude: event.longitude } : {}),
271
+ ...(event.browser ? { browser: event.browser } : {}),
272
+ ...(event.os ? { os: event.os } : {}),
273
+ ...(event.device ? { device: event.device } : {}),
274
+ };
275
+ }
276
+ async function requireJourneyReadHeadroom(ctx) {
277
+ const metrics = await ctx.meta.getTransactionMetrics();
278
+ if (metrics.bytesRead.remaining < JOURNEY_READ_BYTE_RESERVE ||
279
+ metrics.documentsRead.remaining < JOURNEY_READ_DOCUMENT_RESERVE) {
280
+ fail("LIMIT_EXCEEDED", "visitor journey exceeds the safe read budget", {
281
+ bytesRead: metrics.bytesRead.used,
282
+ documentsRead: metrics.documentsRead.used,
283
+ });
284
+ }
285
+ }
299
286
  function compareJourneyEventToCursor(event, cursor) {
300
287
  return event.timestamp - cursor.timestamp ||
301
288
  event._creationTime - cursor.creationTime ||
@@ -1 +1 @@
1
- {"version":3,"file":"eventStore.js","sourceRoot":"","sources":["../../src/component/eventStore.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"eventStore.js","sourceRoot":"","sources":["../../src/component/eventStore.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,71 @@
1
+ import { type IngestContext } from "./validators.js";
2
+ export type GeoIpProvider = "ipinfo" | "ipwhois";
3
+ export type GeoIpStatus = "disabled" | "ready" | "missingToken";
4
+ export type IpKind = "public" | "private" | "invalid" | "unavailable";
5
+ export type ClientIpSource = "native" | "forwarded" | "unavailable";
6
+ type GeoContext = Pick<IngestContext, "country" | "city" | "latitude" | "longitude">;
7
+ type Fetcher = (input: string | URL | Request, init?: RequestInit) => Promise<Response>;
8
+ export declare const probe: import("convex/server").RegisteredAction<"internal", {
9
+ ip?: string | undefined;
10
+ }, Promise<{
11
+ ipAvailable: boolean;
12
+ requestIpKind: IpKind;
13
+ provider: "ipinfo" | "ipwhois" | null;
14
+ status: GeoIpStatus;
15
+ location: GeoContext | null;
16
+ }>>;
17
+ export declare const claimEnrichment: import("convex/server").RegisteredMutation<"internal", {
18
+ dailyLimit: number;
19
+ events: {
20
+ eventId: string;
21
+ sequence: number;
22
+ sessionId: string;
23
+ timestamp: number;
24
+ visitorId: string;
25
+ }[];
26
+ siteId: import("convex/values").GenericId<"sites">;
27
+ }, Promise<{
28
+ sessionIds: string[];
29
+ events: {
30
+ sessionId: string;
31
+ timestamp: number;
32
+ priorCountry: string;
33
+ }[];
34
+ }>>;
35
+ export declare const applyEnrichment: import("convex/server").RegisteredMutation<"internal", {
36
+ context: {
37
+ city?: string | undefined;
38
+ country?: string | undefined;
39
+ latitude?: number | undefined;
40
+ longitude?: number | undefined;
41
+ };
42
+ events: {
43
+ priorCountry: string;
44
+ sessionId: string;
45
+ timestamp: number;
46
+ }[];
47
+ sessionIds: string[];
48
+ siteId: import("convex/values").GenericId<"sites">;
49
+ }, Promise<number>>;
50
+ export declare function geoIpDailyLimit(value: string | undefined): number;
51
+ export declare function geoIpStatus(provider: GeoIpProvider | undefined, token: string | undefined): GeoIpStatus;
52
+ export declare function readRequestMetadata(ctx: {
53
+ meta: {
54
+ getRequestMetadata(): Promise<{
55
+ ip: string | null;
56
+ userAgent: string | null;
57
+ }>;
58
+ };
59
+ }): Promise<{
60
+ ip: string | null;
61
+ userAgent: string | null;
62
+ }>;
63
+ export declare function resolveGeoIp(ip: string, provider: GeoIpProvider, token: string | undefined, fetcher?: Fetcher): Promise<GeoContext | undefined>;
64
+ export declare function classifyIp(ip: string | null): IpKind;
65
+ export declare function resolveClientIp(nativeIp: string | null, headers: Headers, trustProxy?: boolean): {
66
+ ip: string | null;
67
+ source: ClientIpSource;
68
+ };
69
+ export declare function isTrustedProxyRequest(nativeIp: string | null, trustProxy: boolean): boolean;
70
+ export {};
71
+ //# sourceMappingURL=geo.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"geo.d.ts","sourceRoot":"","sources":["../../src/component/geo.ts"],"names":[],"mappings":"AAiBA,OAAO,EAEL,KAAK,aAAa,EACnB,MAAM,iBAAiB,CAAC;AAEzB,MAAM,MAAM,aAAa,GAAG,QAAQ,GAAG,SAAS,CAAC;AACjD,MAAM,MAAM,WAAW,GAAG,UAAU,GAAG,OAAO,GAAG,cAAc,CAAC;AAChE,MAAM,MAAM,MAAM,GAAG,QAAQ,GAAG,SAAS,GAAG,SAAS,GAAG,aAAa,CAAC;AACtE,MAAM,MAAM,cAAc,GAAG,QAAQ,GAAG,WAAW,GAAG,aAAa,CAAC;AAEpE,KAAK,UAAU,GAAG,IAAI,CACpB,aAAa,EACb,SAAS,GAAG,MAAM,GAAG,UAAU,GAAG,WAAW,CAC9C,CAAC;AAEF,KAAK,OAAO,GAAG,CACb,KAAK,EAAE,MAAM,GAAG,GAAG,GAAG,OAAO,EAC7B,IAAI,CAAC,EAAE,WAAW,KACf,OAAO,CAAC,QAAQ,CAAC,CAAC;AA2BvB,eAAO,MAAM,KAAK;;;;;;;;GAmChB,CAAC;AAEH,eAAO,MAAM,eAAe;;;;;;;;;;;;;mBAkIX,MAAM;mBACN,MAAM;sBACH,MAAM;;GA4BxB,CAAC;AAEH,eAAO,MAAM,eAAe;;;;;;;;;;;;;;mBAyD1B,CAAC;AAEH,wBAAgB,eAAe,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,CAQjE;AAED,wBAAgB,WAAW,CACzB,QAAQ,EAAE,aAAa,GAAG,SAAS,EACnC,KAAK,EAAE,MAAM,GAAG,SAAS,GACxB,WAAW,CAIb;AAED,wBAAsB,mBAAmB,CAAC,GAAG,EAAE;IAC7C,IAAI,EAAE;QACJ,kBAAkB,IAAI,OAAO,CAAC;YAC5B,EAAE,EAAE,MAAM,GAAG,IAAI,CAAC;YAClB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;SAC1B,CAAC,CAAC;KACJ,CAAC;CACH,GAAG,OAAO,CAAC;IAAE,EAAE,EAAE,MAAM,GAAG,IAAI,CAAC;IAAC,SAAS,EAAE,MAAM,GAAG,IAAI,CAAA;CAAE,CAAC,CAQ3D;AAED,wBAAsB,YAAY,CAChC,EAAE,EAAE,MAAM,EACV,QAAQ,EAAE,aAAa,EACvB,KAAK,EAAE,MAAM,GAAG,SAAS,EACzB,OAAO,GAAE,OAAe,GACvB,OAAO,CAAC,UAAU,GAAG,SAAS,CAAC,CA0BjC;AAED,wBAAgB,UAAU,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI,GAAG,MAAM,CAOpD;AAED,wBAAgB,eAAe,CAC7B,QAAQ,EAAE,MAAM,GAAG,IAAI,EACvB,OAAO,EAAE,OAAO,EAChB,UAAU,UAAQ,GACjB;IAAE,EAAE,EAAE,MAAM,GAAG,IAAI,CAAC;IAAC,MAAM,EAAE,cAAc,CAAA;CAAE,CAqB/C;AAED,wBAAgB,qBAAqB,CACnC,QAAQ,EAAE,MAAM,GAAG,IAAI,EACvB,UAAU,EAAE,OAAO,GAClB,OAAO,CAET"}