@devtune/ai-traffic 0.10.0 → 0.11.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.
package/README.md CHANGED
@@ -14,6 +14,8 @@ Create a project-scoped server-side ingest key and expose it only to your server
14
14
  DEVTUNE_AI_TRAFFIC_INGEST_KEY=dt_ingest_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
15
15
  ```
16
16
 
17
+ On Vercel you can use a project ID instead of a key. See [Vercel without an ingest key](#vercel-without-an-ingest-key).
18
+
17
19
  ## Quickstarts
18
20
 
19
21
  ### Next.js
@@ -74,6 +76,34 @@ createServer((request, response) => {
74
76
 
75
77
  The hook records the final `response.statusCode` without blocking or changing the response.
76
78
 
79
+ ## Vercel without an ingest key
80
+
81
+ On Vercel, the sensor can authenticate with each deployment's Vercel OIDC token instead of an ingest key, so there is no long-lived secret to store. Vercel linking must be enabled for your DevTune account while it is in beta.
82
+
83
+ 1. In DevTune, open **Settings › Integrations › Edge middleware** and select **Add Vercel project**. Enter the Vercel team ID, shown as **Team ID** in the team's **Settings › General**, and the Vercel project ID, shown as **Project ID** in the project's **Settings › General**.
84
+ 2. Copy the **DevTune project ID** from the same page and add it to the Vercel project's environment variables. It is not a secret.
85
+
86
+ ```bash
87
+ DEVTUNE_AI_TRAFFIC_PROJECT_ID=3f0c9a52-6b1e-4d7a-9c2f-1a2b3c4d5e6f
88
+ ```
89
+
90
+ 3. Pass it as `projectId`. Keep `ingestKey` while you migrate:
91
+
92
+ ```ts
93
+ const trackAiTraffic = createDevTuneAiTrafficMiddleware({
94
+ projectId: process.env.DEVTUNE_AI_TRAFFIC_PROJECT_ID!,
95
+ ingestKey: process.env.DEVTUNE_AI_TRAFFIC_INGEST_KEY!,
96
+ });
97
+ ```
98
+
99
+ 4. Deploy. Once the linked project shows **Last seen** in DevTune, remove `ingestKey` and delete the `DEVTUNE_AI_TRAFFIC_INGEST_KEY` variable.
100
+
101
+ The same `projectId` option works for the Express and Node HTTP adapters running on Vercel.
102
+
103
+ When both options are set, the sensor sends with the Vercel token and falls back to the ingest key if Vercel or DevTune cannot verify it. With only `projectId`, nothing is sent from a host that is not Vercel, and the sensor logs one warning per process. If a link stays **Not seen yet** after a deploy that received crawler traffic, check both Vercel IDs.
104
+
105
+ The token is read from each incoming request, never from the environment, and is sent only to Vercel to obtain a token for DevTune. That token is cached in memory until shortly before it expires and is sent only to the ingest endpoint.
106
+
77
107
  ## Privacy by Design
78
108
 
79
109
  The sensor filters requests where your application runs. It uses a cheap user-agent hint before consulting the AI bot registry, and only matched machine hits are eligible to be forwarded. It uses no cookies, no fingerprinting, and no full request logs.
@@ -224,7 +254,7 @@ const trackAiTraffic = createDevTuneAiTrafficMiddleware({
224
254
 
225
255
  Because backing off lets the queue drain slower than traffic arrives, the queue itself is bounded. `maxQueuedEvents` defaults to 1000; past it the oldest events are shed with a sampled warning, so a sustained throttle cannot grow memory without limit.
226
256
 
227
- Non-429 responses and network errors are unchanged: the batch is dropped after a single attempt, so a hard outage never keeps the queue alive.
257
+ Non-429 responses and network errors are unchanged: the batch is dropped after a single attempt, so a hard outage never keeps the queue alive. The one exception is a `503` to a batch sent with a Vercel token and no ingest key configured: DevTune could not reach Vercel to verify the token, so it is retried like a `429` within the same budget.
228
258
 
229
259
  ### Status Semantics
230
260
 
@@ -12,6 +12,7 @@ exports.withDevTuneAiTrafficRoute = withDevTuneAiTrafficRoute;
12
12
  const registry_js_1 = require("./registry.js");
13
13
  const client_ip_js_1 = require("./client-ip.js");
14
14
  const version_js_1 = require("./version.js");
15
+ const vercel_oidc_js_1 = require("./vercel-oidc.js");
15
16
  exports.DEFAULT_INGEST_ENDPOINT = "https://devtune.ai/api/v1/llm-traffic/ingest";
16
17
  exports.DEFAULT_REGISTRY_URL = "https://devtune.ai/api/v1/llm-traffic/registry";
17
18
  const DEFAULT_REGISTRY_REVALIDATE_MS = 60 * 60 * 1000;
@@ -25,7 +26,9 @@ const MAX_EVENT_PATH_LENGTH = 2048;
25
26
  const MAX_EVENT_UA_LENGTH = 2048;
26
27
  const MAX_EVENT_URL_LENGTH = 4096;
27
28
  const MAX_EVENT_IP_LENGTH = 45;
29
+ const UNAUTHORIZED_STATUS = 401;
28
30
  const RATE_LIMITED_STATUS = 429;
31
+ const UNAVAILABLE_STATUS = 503;
29
32
  const DEFAULT_MAX_RETRY_ATTEMPTS = 3;
30
33
  const RETRY_ATTEMPTS_CEILING = 10;
31
34
  const RETRY_BASE_DELAY_MS = 250;
@@ -76,6 +79,11 @@ class DevTuneAiTrafficClient {
76
79
  maxRetryDelayMs;
77
80
  maxQueuedEvents;
78
81
  trustedProxy;
82
+ projectId;
83
+ keyCredential;
84
+ tokenExchanger;
85
+ vercelOidcToken = null;
86
+ warnedMissingVercelOidcToken = false;
79
87
  registry;
80
88
  refreshPromise = null;
81
89
  flushPromise = null;
@@ -83,9 +91,17 @@ class DevTuneAiTrafficClient {
83
91
  queue = [];
84
92
  constructor(options) {
85
93
  this.options = options;
86
- if (!options.ingestKey) {
87
- throw new Error("DevTune AI Traffic ingestKey is required");
94
+ if (!options.ingestKey && !options.projectId) {
95
+ throw new Error("DevTune AI Traffic needs an ingestKey or a projectId");
88
96
  }
97
+ // An empty string is an unset environment variable, so it counts as absent.
98
+ if (options.projectId && !(0, vercel_oidc_js_1.isDevTuneProjectId)(options.projectId)) {
99
+ throw new Error("DevTune AI Traffic projectId must be a DevTune project UUID");
100
+ }
101
+ this.projectId = options.projectId || null;
102
+ this.keyCredential = options.ingestKey
103
+ ? { headers: { authorization: `Bearer ${options.ingestKey}` }, vercelOidc: false }
104
+ : null;
89
105
  this.trustedProxy = options.trustedProxy ?? (0, client_ip_js_1.detectTrustedProxy)();
90
106
  this.endpoint = options.endpoint ?? exports.DEFAULT_INGEST_ENDPOINT;
91
107
  this.registryUrl = options.registryUrl ?? exports.DEFAULT_REGISTRY_URL;
@@ -101,6 +117,7 @@ class DevTuneAiTrafficClient {
101
117
  this.fetchImpl = options.fetch ?? fetch;
102
118
  this.logger = options.logger ?? null;
103
119
  this.now = options.now ?? (() => new Date());
120
+ this.tokenExchanger = new vercel_oidc_js_1.VercelOidcTokenExchanger(this.fetchImpl, () => this.now().getTime());
104
121
  this.random = options.random ?? Math.random;
105
122
  this.errorSampleRate = clampNumber(options.errorSampleRate ?? 0.01, 0, 1);
106
123
  this.maxRetryAttempts = clampInteger(options.maxRetryAttempts ?? DEFAULT_MAX_RETRY_ATTEMPTS, 0, RETRY_ATTEMPTS_CEILING);
@@ -129,6 +146,7 @@ class DevTuneAiTrafficClient {
129
146
  }
130
147
  trackRequest(request, waitUntilContext, responseStatus) {
131
148
  this.refreshRegistryIfStale(waitUntilContext);
149
+ this.captureVercelOidcToken(request);
132
150
  if (!this.mightTrackRequest(request) ||
133
151
  isPageInitiatedRequest(request) ||
134
152
  isFrameworkDataRequest(request)) {
@@ -329,19 +347,44 @@ class DevTuneAiTrafficClient {
329
347
  *
330
348
  * Every other failure keeps its previous behavior: one attempt, dropped, and
331
349
  * a sampled warning.
350
+ *
351
+ * On the Vercel OIDC path the credential is resolved before every attempt,
352
+ * retries included, so a drain or a backoff that outlives its token picks up
353
+ * one captured meanwhile instead of sending with one that has expired. The
354
+ * exchange is cached, so this costs nothing in the steady state. A 401 or 503 resends the same batch with the ingest key
355
+ * when one is configured, and the rest of the drain stays on the key. That
356
+ * resend is a change of credential, not a retry, so it spends no budget.
357
+ * Without a key a 503, which means DevTune could not reach Vercel's signing
358
+ * keys, is retried exactly like a 429.
332
359
  */
333
360
  async flushQueuedEvents() {
334
361
  let retryBudget = this.maxRetryAttempts;
362
+ let keyOnly = false;
363
+ const failedExchanges = new Map();
335
364
  while (this.queue.length > 0) {
336
365
  const batch = this.queue.splice(0, MAX_INGEST_BATCH_SIZE);
337
366
  let attempts = 0;
338
367
  for (;;) {
368
+ // The key path stays synchronous up to each send, as it always was.
369
+ const credential = !keyOnly && this.projectId && this.vercelOidcToken
370
+ ? await this.resolveVercelOidcCredential(this.projectId, this.vercelOidcToken, batch.length, failedExchanges)
371
+ : this.keyCredential;
372
+ if (credential === "drop-batch") {
373
+ break;
374
+ }
375
+ if (credential === null || credential === "drop-queue") {
376
+ if (credential === null) {
377
+ this.warnMissingVercelOidcTokenOnce(batch.length + this.queue.length);
378
+ }
379
+ this.queue.splice(0);
380
+ return;
381
+ }
339
382
  let response;
340
383
  try {
341
384
  response = await this.fetchImpl(this.endpoint, {
342
385
  body: JSON.stringify({ events: batch }),
343
386
  headers: {
344
- authorization: `Bearer ${this.options.ingestKey}`,
387
+ ...credential.headers,
345
388
  "content-type": "application/json",
346
389
  [version_js_1.SDK_VERSION_HEADER]: version_js_1.SDK_VERSION,
347
390
  },
@@ -350,11 +393,18 @@ class DevTuneAiTrafficClient {
350
393
  });
351
394
  }
352
395
  catch (error) {
353
- this.sampleWarn("DevTune AI Traffic ingest request failed", { error });
396
+ this.sampleWarn("DevTune AI Traffic ingest request failed", classifyFailure(error));
354
397
  break;
355
398
  }
356
399
  attempts += 1;
357
- if (response.status !== RATE_LIMITED_STATUS) {
400
+ if (credential.vercelOidc &&
401
+ this.keyCredential &&
402
+ (response.status === UNAUTHORIZED_STATUS || response.status === UNAVAILABLE_STATUS)) {
403
+ keyOnly = true;
404
+ continue;
405
+ }
406
+ if (response.status !== RATE_LIMITED_STATUS &&
407
+ !(credential.vercelOidc && response.status === UNAVAILABLE_STATUS)) {
358
408
  if (!response.ok) {
359
409
  this.sampleWarn("DevTune AI Traffic ingest request failed", {
360
410
  status: response.status,
@@ -376,6 +426,95 @@ class DevTuneAiTrafficClient {
376
426
  }
377
427
  }
378
428
  }
429
+ /**
430
+ * Keeps the most recent acceptable Vercel OIDC token seen on a request.
431
+ * Vercel only puts the token on requests, never in the environment, so it
432
+ * cannot be read when the client is built. Every token from one deployment
433
+ * carries the same identity, so the latest one can send events queued by
434
+ * earlier requests.
435
+ */
436
+ captureVercelOidcToken(request) {
437
+ if (!this.projectId) {
438
+ return;
439
+ }
440
+ const value = request.headers.get(vercel_oidc_js_1.VERCEL_OIDC_TOKEN_HEADER);
441
+ if (!value || value === this.vercelOidcToken?.value) {
442
+ return;
443
+ }
444
+ const expiresAtMs = (0, vercel_oidc_js_1.readVercelOidcTokenExpiry)(value, this.now().getTime());
445
+ if (expiresAtMs !== null) {
446
+ this.vercelOidcToken = { value, expiresAtMs };
447
+ }
448
+ }
449
+ /**
450
+ * Exchanges the captured Vercel OIDC token for one send attempt's
451
+ * credential. The token wins over the ingest key, so a customer can keep the
452
+ * key while migrating and then delete it; the key covers a token too close to
453
+ * expiry and a failed exchange.
454
+ *
455
+ * Without a key, a failure is reported with a sampled warning and resolves
456
+ * to what the caller drops. A token too close to expiry drops the whole
457
+ * queue, since nothing newer has been captured. A failed exchange drops only
458
+ * the current batch (`batchEvents`), because a newer token may have arrived
459
+ * while it ran; the drain then resolves again from the latest token.
460
+ * `failedExchanges` remembers the drain's failed tokens, so when the latest
461
+ * token is one that already failed the rest of the queue is dropped instead
462
+ * of exchanging it again.
463
+ */
464
+ async resolveVercelOidcCredential(projectId, token, batchEvents, failedExchanges) {
465
+ if (token.expiresAtMs - this.now().getTime() <= vercel_oidc_js_1.TOKEN_EXPIRY_MARGIN_MS) {
466
+ if (this.keyCredential) {
467
+ return this.keyCredential;
468
+ }
469
+ this.sampleWarn("DevTune AI Traffic dropped events: the Vercel OIDC token expired before it could be used", { droppedEvents: batchEvents + this.queue.length });
470
+ return "drop-queue";
471
+ }
472
+ const earlierFailure = failedExchanges.get(token.value);
473
+ if (earlierFailure) {
474
+ if (this.keyCredential) {
475
+ return this.keyCredential;
476
+ }
477
+ this.sampleWarn("DevTune AI Traffic could not exchange the Vercel OIDC token", {
478
+ droppedEvents: batchEvents + this.queue.length,
479
+ ...earlierFailure,
480
+ });
481
+ return "drop-queue";
482
+ }
483
+ try {
484
+ const exchangedToken = await this.tokenExchanger.exchange(token.value);
485
+ return {
486
+ headers: {
487
+ authorization: `Bearer ${exchangedToken}`,
488
+ [vercel_oidc_js_1.DEVTUNE_PROJECT_HEADER]: projectId,
489
+ },
490
+ vercelOidc: true,
491
+ };
492
+ }
493
+ catch (error) {
494
+ const failure = classifyFailure(error);
495
+ failedExchanges.set(token.value, failure);
496
+ if (this.keyCredential) {
497
+ return this.keyCredential;
498
+ }
499
+ this.sampleWarn("DevTune AI Traffic could not exchange the Vercel OIDC token", {
500
+ droppedEvents: batchEvents,
501
+ ...failure,
502
+ });
503
+ return "drop-batch";
504
+ }
505
+ }
506
+ /**
507
+ * With only `projectId` configured, a host that never sends a Vercel OIDC
508
+ * token can send nothing at all. That is a setup problem rather than a
509
+ * transient failure, so it is reported once per client instead of sampled.
510
+ */
511
+ warnMissingVercelOidcTokenOnce(droppedEvents) {
512
+ if (this.warnedMissingVercelOidcToken || this.errorSampleRate === 0) {
513
+ return;
514
+ }
515
+ this.warnedMissingVercelOidcToken = true;
516
+ this.logger?.warn("DevTune AI Traffic dropped events: projectId sends only from a Vercel deployment with OIDC enabled, and no ingestKey is set", { droppedEvents });
517
+ }
379
518
  resolveRetryDelayMs(retryAfterHeader, retryAttempts) {
380
519
  const retryAfterMs = parseRetryAfterMs(retryAfterHeader, this.now());
381
520
  const backoffMs = RETRY_BASE_DELAY_MS * 2 ** retryAttempts;
@@ -511,6 +650,27 @@ function isFrameworkDataRequest(request) {
511
650
  NEXT_DATA_PATH.test(url.pathname) ||
512
651
  FRAMEWORK_DATA_PATH_SUFFIXES.some((suffix) => url.pathname.endsWith(suffix)));
513
652
  }
653
+ /**
654
+ * Reduces a failed exchange or ingest send to a fixed kind and, when there is
655
+ * one, a status. A customer-supplied `fetch` can put a request's credential
656
+ * into an error's message, name or cause in any encoding, so warnings on these
657
+ * paths carry this classification and never any text from the error.
658
+ */
659
+ function classifyFailure(error) {
660
+ if (error instanceof vercel_oidc_js_1.VercelOidcExchangeError) {
661
+ return typeof error.status === "number"
662
+ ? { kind: error.kind, status: error.status }
663
+ : { kind: error.kind };
664
+ }
665
+ const name = isRecord(error) ? error.name : undefined;
666
+ if (name === "TimeoutError") {
667
+ return { kind: "timeout" };
668
+ }
669
+ if (name === "AbortError") {
670
+ return { kind: "aborted" };
671
+ }
672
+ return { kind: "network" };
673
+ }
514
674
  function parseRequestUrl(url) {
515
675
  try {
516
676
  return new URL(url);
@@ -1 +1 @@
1
- {"version":3,"file":"client.js","sourceRoot":"","sources":["../../src/client.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"client.js","sourceRoot":"","sources":["../../src/client.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,159 @@
1
+ "use strict";
2
+ /**
3
+ * ABOUTME: Vercel OIDC credentials for ingest, used instead of an ingest key on Vercel.
4
+ * Filters the per-request token header and exchanges it for DevTune's audience with a cache.
5
+ */
6
+ Object.defineProperty(exports, "__esModule", { value: true });
7
+ exports.VercelOidcTokenExchanger = exports.VercelOidcExchangeError = exports.TOKEN_EXPIRY_MARGIN_MS = exports.VERCEL_TOKEN_EXCHANGE_URL = exports.DEVTUNE_INGEST_AUDIENCE = exports.DEVTUNE_PROJECT_HEADER = exports.VERCEL_OIDC_TOKEN_HEADER = void 0;
8
+ exports.isDevTuneProjectId = isDevTuneProjectId;
9
+ exports.readVercelOidcTokenExpiry = readVercelOidcTokenExpiry;
10
+ /** Vercel sets this on every request to a deployment that has OIDC enabled. */
11
+ exports.VERCEL_OIDC_TOKEN_HEADER = "x-vercel-oidc-token";
12
+ /** Tells the ingest route which DevTune project's Vercel link to check the token against. */
13
+ exports.DEVTUNE_PROJECT_HEADER = "x-devtune-project";
14
+ exports.DEVTUNE_INGEST_AUDIENCE = "https://devtune.ai/ai-traffic-ingest";
15
+ exports.VERCEL_TOKEN_EXCHANGE_URL = "https://oidc.vercel.com/~token";
16
+ const VERCEL_OIDC_ISSUER = "https://oidc.vercel.com";
17
+ const MAX_TOKEN_LENGTH = 8_192;
18
+ const TOKEN_EXCHANGE_TIMEOUT_MS = 5_000;
19
+ const BASE64URL_SEGMENT = /^[A-Za-z0-9_-]+$/u;
20
+ const UUID_PATTERN = /^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/iu;
21
+ /** Tokens this close to expiry are neither captured, exchanged nor served from the cache. */
22
+ exports.TOKEN_EXPIRY_MARGIN_MS = 60_000;
23
+ function isDevTuneProjectId(value) {
24
+ return UUID_PATTERN.test(value);
25
+ }
26
+ /**
27
+ * Returns the token's expiry in milliseconds when the value looks like a live
28
+ * Vercel OIDC token, or null for anything else.
29
+ *
30
+ * The signature is not checked: the SDK has no way to, and the ingest route
31
+ * verifies it. This filter only keeps a client-supplied junk header, a token
32
+ * from another issuer or an expired token from replacing a good one.
33
+ */
34
+ function readVercelOidcTokenExpiry(value, nowMs) {
35
+ if (value.length > MAX_TOKEN_LENGTH) {
36
+ return null;
37
+ }
38
+ const segments = value.split(".");
39
+ if (segments.length !== 3 || !segments.every((segment) => BASE64URL_SEGMENT.test(segment))) {
40
+ return null;
41
+ }
42
+ const claims = decodeJsonSegment(segments[1] ?? "");
43
+ if (!claims ||
44
+ typeof claims.iss !== "string" ||
45
+ (claims.iss !== VERCEL_OIDC_ISSUER && !claims.iss.startsWith(`${VERCEL_OIDC_ISSUER}/`)) ||
46
+ typeof claims.owner_id !== "string" ||
47
+ typeof claims.project_id !== "string" ||
48
+ typeof claims.exp !== "number" ||
49
+ !Number.isFinite(claims.exp)) {
50
+ return null;
51
+ }
52
+ const expiresAtMs = claims.exp * 1000;
53
+ return expiresAtMs - nowMs > exports.TOKEN_EXPIRY_MARGIN_MS ? expiresAtMs : null;
54
+ }
55
+ /**
56
+ * Thrown when Vercel answers an exchange but not with a usable token. Carries
57
+ * a fixed `kind` and the status, so callers can report the failure without
58
+ * reading any message text.
59
+ */
60
+ class VercelOidcExchangeError extends Error {
61
+ kind;
62
+ status;
63
+ constructor(kind, status) {
64
+ super(kind === "exchange_status"
65
+ ? `Vercel OIDC token exchange failed with status ${status}`
66
+ : "Vercel OIDC token exchange returned an unusable response");
67
+ this.kind = kind;
68
+ this.status = status;
69
+ this.name = "VercelOidcExchangeError";
70
+ }
71
+ }
72
+ exports.VercelOidcExchangeError = VercelOidcExchangeError;
73
+ /**
74
+ * Exchanges a deployment's Vercel OIDC token for one scoped to DevTune's
75
+ * ingest audience.
76
+ *
77
+ * Results are cached in memory by source token until their expiry, less the
78
+ * margin, and expired entries are dropped on every call, so the steady state
79
+ * is one entry per live source token. Callers that need the same token at once
80
+ * share one request. Vercel's answers are reported as a
81
+ * `VercelOidcExchangeError`; anything the fetch itself throws is passed on.
82
+ */
83
+ class VercelOidcTokenExchanger {
84
+ fetchImpl;
85
+ nowMs;
86
+ cache = new Map();
87
+ inFlight = new Map();
88
+ constructor(fetchImpl, nowMs) {
89
+ this.fetchImpl = fetchImpl;
90
+ this.nowMs = nowMs;
91
+ }
92
+ async exchange(sourceToken) {
93
+ const nowMs = this.nowMs();
94
+ for (const [key, entry] of this.cache) {
95
+ if (entry.usableUntilMs <= nowMs) {
96
+ this.cache.delete(key);
97
+ }
98
+ }
99
+ const cached = this.cache.get(sourceToken);
100
+ if (cached) {
101
+ return cached.token;
102
+ }
103
+ const pending = this.inFlight.get(sourceToken);
104
+ if (pending) {
105
+ return pending;
106
+ }
107
+ const request = this.requestExchange(sourceToken).finally(() => {
108
+ this.inFlight.delete(sourceToken);
109
+ });
110
+ this.inFlight.set(sourceToken, request);
111
+ return request;
112
+ }
113
+ async requestExchange(sourceToken) {
114
+ const response = await this.fetchImpl(exports.VERCEL_TOKEN_EXCHANGE_URL, {
115
+ body: JSON.stringify({ token: sourceToken, aud: exports.DEVTUNE_INGEST_AUDIENCE }),
116
+ headers: {
117
+ accept: "application/json",
118
+ "content-type": "application/json",
119
+ },
120
+ method: "POST",
121
+ signal: AbortSignal.timeout(TOKEN_EXCHANGE_TIMEOUT_MS),
122
+ });
123
+ if (!response.ok) {
124
+ throw new VercelOidcExchangeError("exchange_status", response.status);
125
+ }
126
+ const payload = await response.json().catch(() => null);
127
+ if (!isRecord(payload) ||
128
+ typeof payload.token !== "string" ||
129
+ payload.token.length === 0 ||
130
+ typeof payload.expiry !== "number" ||
131
+ !Number.isFinite(payload.expiry)) {
132
+ throw new VercelOidcExchangeError("exchange_response");
133
+ }
134
+ const usableUntilMs = payload.expiry * 1000 - exports.TOKEN_EXPIRY_MARGIN_MS;
135
+ // A token that is already inside the margin would only be rejected at ingest.
136
+ if (usableUntilMs <= this.nowMs()) {
137
+ throw new VercelOidcExchangeError("exchange_response");
138
+ }
139
+ this.cache.set(sourceToken, { token: payload.token, usableUntilMs });
140
+ return payload.token;
141
+ }
142
+ }
143
+ exports.VercelOidcTokenExchanger = VercelOidcTokenExchanger;
144
+ function decodeJsonSegment(segment) {
145
+ try {
146
+ const base64 = segment.replace(/-/gu, "+").replace(/_/gu, "/");
147
+ const binary = atob(base64.padEnd(Math.ceil(base64.length / 4) * 4, "="));
148
+ const bytes = Uint8Array.from(binary, (character) => character.charCodeAt(0));
149
+ const value = JSON.parse(new TextDecoder().decode(bytes));
150
+ return isRecord(value) ? value : null;
151
+ }
152
+ catch {
153
+ return null;
154
+ }
155
+ }
156
+ function isRecord(value) {
157
+ return typeof value === "object" && value !== null;
158
+ }
159
+ //# sourceMappingURL=vercel-oidc.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"vercel-oidc.js","sourceRoot":"","sources":["../../src/vercel-oidc.ts"],"names":[],"mappings":"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"}
@@ -6,7 +6,7 @@
6
6
  Object.defineProperty(exports, "__esModule", { value: true });
7
7
  exports.SDK_VERSION_HEADER = exports.SDK_VERSION = void 0;
8
8
  /** Must equal `version` in package.json; a unit test and the release check enforce it. */
9
- exports.SDK_VERSION = "0.10.0";
9
+ exports.SDK_VERSION = "0.11.0";
10
10
  /** Sent on every ingest and registry request. Carries the version only, no visitor data. */
11
11
  exports.SDK_VERSION_HEADER = "x-devtune-sdk-version";
12
12
  //# sourceMappingURL=version.js.map
package/dist/client.d.ts CHANGED
@@ -42,7 +42,17 @@ export interface DevTuneAiTrafficLogger {
42
42
  debug?(message: string, context?: Record<string, unknown>): void;
43
43
  }
44
44
  export interface DevTuneAiTrafficOptions {
45
- ingestKey: string;
45
+ /**
46
+ * Project-scoped ingest key. Optional on Vercel when `projectId` is set;
47
+ * keep it while migrating and it is used whenever Vercel OIDC is unavailable.
48
+ */
49
+ ingestKey?: string;
50
+ /**
51
+ * DevTune project ID. Not a secret. On a Vercel deployment linked to this
52
+ * project in DevTune, batches are sent with the deployment's Vercel OIDC
53
+ * token instead of the ingest key.
54
+ */
55
+ projectId?: string;
46
56
  endpoint?: string;
47
57
  registryUrl?: string;
48
58
  registryRevalidateMs?: number;
@@ -89,6 +99,11 @@ export declare class DevTuneAiTrafficClient {
89
99
  private readonly maxRetryDelayMs;
90
100
  private readonly maxQueuedEvents;
91
101
  private readonly trustedProxy;
102
+ private readonly projectId;
103
+ private readonly keyCredential;
104
+ private readonly tokenExchanger;
105
+ private vercelOidcToken;
106
+ private warnedMissingVercelOidcToken;
92
107
  private registry;
93
108
  private refreshPromise;
94
109
  private flushPromise;
@@ -136,8 +151,47 @@ export declare class DevTuneAiTrafficClient {
136
151
  *
137
152
  * Every other failure keeps its previous behavior: one attempt, dropped, and
138
153
  * a sampled warning.
154
+ *
155
+ * On the Vercel OIDC path the credential is resolved before every attempt,
156
+ * retries included, so a drain or a backoff that outlives its token picks up
157
+ * one captured meanwhile instead of sending with one that has expired. The
158
+ * exchange is cached, so this costs nothing in the steady state. A 401 or 503 resends the same batch with the ingest key
159
+ * when one is configured, and the rest of the drain stays on the key. That
160
+ * resend is a change of credential, not a retry, so it spends no budget.
161
+ * Without a key a 503, which means DevTune could not reach Vercel's signing
162
+ * keys, is retried exactly like a 429.
139
163
  */
140
164
  private flushQueuedEvents;
165
+ /**
166
+ * Keeps the most recent acceptable Vercel OIDC token seen on a request.
167
+ * Vercel only puts the token on requests, never in the environment, so it
168
+ * cannot be read when the client is built. Every token from one deployment
169
+ * carries the same identity, so the latest one can send events queued by
170
+ * earlier requests.
171
+ */
172
+ private captureVercelOidcToken;
173
+ /**
174
+ * Exchanges the captured Vercel OIDC token for one send attempt's
175
+ * credential. The token wins over the ingest key, so a customer can keep the
176
+ * key while migrating and then delete it; the key covers a token too close to
177
+ * expiry and a failed exchange.
178
+ *
179
+ * Without a key, a failure is reported with a sampled warning and resolves
180
+ * to what the caller drops. A token too close to expiry drops the whole
181
+ * queue, since nothing newer has been captured. A failed exchange drops only
182
+ * the current batch (`batchEvents`), because a newer token may have arrived
183
+ * while it ran; the drain then resolves again from the latest token.
184
+ * `failedExchanges` remembers the drain's failed tokens, so when the latest
185
+ * token is one that already failed the rest of the queue is dropped instead
186
+ * of exchanging it again.
187
+ */
188
+ private resolveVercelOidcCredential;
189
+ /**
190
+ * With only `projectId` configured, a host that never sends a Vercel OIDC
191
+ * token can send nothing at all. That is a setup problem rather than a
192
+ * transient failure, so it is reported once per client instead of sampled.
193
+ */
194
+ private warnMissingVercelOidcTokenOnce;
141
195
  private resolveRetryDelayMs;
142
196
  private sampleWarn;
143
197
  }
@@ -1 +1 @@
1
- {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAKL,KAAK,kBAAkB,EAExB,MAAM,eAAe,CAAC;AACvB,OAAO,EAGL,KAAK,4BAA4B,EAClC,MAAM,gBAAgB,CAAC;AAYxB,MAAM,WAAW,WAAW;IAC1B,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAAC;CAClC;AAED,MAAM,WAAW,WAAW;IAC1B,OAAO,EAAE,WAAW,CAAC;IACrB,GAAG,EAAE,MAAM,CAAC;IACZ;;;OAGG;IACH,EAAE,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CACpB;AAED,MAAM,WAAW,aAAa;IAC5B,SAAS,CAAC,OAAO,EAAE,OAAO,CAAC,OAAO,CAAC,GAAG,IAAI,CAAC;CAC5C;AAED,MAAM,WAAW,qBAAqB;IACpC,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,EAAE,EAAE,MAAM,CAAC;IACX,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,EAAE,EAAE,MAAM,CAAC;IACX;;;;;OAKG;IACH,EAAE,CAAC,EAAE,MAAM,CAAC;CACb;AAED,MAAM,WAAW,qBAAqB;IACpC,KAAK,EAAE,kBAAkB,CAAC;IAC1B,KAAK,EAAE,qBAAqB,CAAC;CAC9B;AAED,MAAM,WAAW,sBAAsB;IACrC,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAAC;IAC/D,KAAK,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAAC;CAClE;AAED,MAAM,WAAW,uBAAuB;IACtC;;;OAGG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB;;;;OAIG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,wBAAwB,CAAC,EAAE,OAAO,CAAC;IACnC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,aAAa,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,cAAc,CAAC,EAAE,CAAC,OAAO,EAAE,WAAW,KAAK,MAAM,GAAG,IAAI,GAAG,SAAS,CAAC;IACrE,oBAAoB,CAAC,EAAE,KAAK,CAAC,MAAM,GAAG,MAAM,CAAC,CAAC;IAC9C,KAAK,CAAC,EAAE,OAAO,KAAK,CAAC;IACrB,MAAM,CAAC,EAAE,sBAAsB,CAAC;IAChC,GAAG,CAAC,EAAE,MAAM,IAAI,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,MAAM,CAAC;IACtB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB;;;;;OAKG;IACH,YAAY,CAAC,EAAE,4BAA4B,CAAC;CAC7C;AAED,MAAM,MAAM,4BAA4B,CAAC,OAAO,EAAE,YAAY,SAAS,QAAQ,IAAI,CACjF,OAAO,EAAE,WAAW,EACpB,OAAO,EAAE,OAAO,KACb,YAAY,GAAG,OAAO,CAAC,YAAY,CAAC,CAAC;AAE1C,eAAO,MAAM,uBAAuB,iDAAiD,CAAC;AACtF,eAAO,MAAM,oBAAoB,mDAAmD,CAAC;AAoErF,qBAAa,sBAAsB;IA4BrB,OAAO,CAAC,QAAQ,CAAC,OAAO;IA3BpC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAS;IAClC,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAS;IACrC,OAAO,CAAC,QAAQ,CAAC,oBAAoB,CAAS;IAC9C,OAAO,CAAC,QAAQ,CAAC,wBAAwB,CAAU;IACnD,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAS;IACnC,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAS;IACzC,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAgB;IAC9C,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAe;IACzC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAgC;IACvD,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAa;IACjC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAe;IACtC,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAS;IACzC,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAS;IAC1C,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAS;IACzC,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAS;IACzC,OAAO,CAAC,QAAQ,CAAC,YAAY,CAA+B;IAC5D,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAgB;IAC1C,OAAO,CAAC,QAAQ,CAAC,aAAa,CAA0B;IACxD,OAAO,CAAC,QAAQ,CAAC,cAAc,CAA2B;IAC1D,OAAO,CAAC,eAAe,CAAwC;IAC/D,OAAO,CAAC,4BAA4B,CAAS;IAC7C,OAAO,CAAC,QAAQ,CAAgB;IAChC,OAAO,CAAC,cAAc,CAA8B;IACpD,OAAO,CAAC,YAAY,CAA8B;IAClD,OAAO,CAAC,mBAAmB,CAA8B;IACzD,OAAO,CAAC,QAAQ,CAAC,KAAK,CAA+B;gBAExB,OAAO,EAAE,uBAAuB;IAoE7D,iBAAiB,CAAC,OAAO,EAAE,IAAI,CAAC,WAAW,EAAE,SAAS,CAAC;IAgBvD,YAAY,CACV,OAAO,EAAE,WAAW,EACpB,gBAAgB,CAAC,EAAE,aAAa,EAChC,cAAc,CAAC,EAAE,MAAM,GAAG,IAAI,GAC7B,qBAAqB,GAAG,IAAI;IAsCzB,eAAe;IAkDf,KAAK;IAYX,2FAA2F;IAC3F,sBAAsB,CAAC,gBAAgB,CAAC,EAAE,aAAa;IA2BvD,OAAO,CAAC,WAAW;IA0BnB,OAAO,CAAC,aAAa;IA8BrB,OAAO,CAAC,mBAAmB;IAoB3B;;;;;;;;OAQG;IACH,OAAO,CAAC,OAAO;IAiCf;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OA+BG;YACW,iBAAiB;IAqG/B;;;;;;OAMG;IACH,OAAO,CAAC,sBAAsB;IAkB9B;;;;;;;;;;;;;;OAcG;YACW,2BAA2B;IA8DzC;;;;OAIG;IACH,OAAO,CAAC,8BAA8B;IAYtC,OAAO,CAAC,mBAAmB;IAO3B,OAAO,CAAC,UAAU;CAOnB;AAED,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,uBAAuB,0BAEtE;AAED,wBAAgB,gCAAgC,CAAC,OAAO,EAAE,uBAAuB,IAMpC,SAAS,WAAW,EAAE,QAAQ,aAAa,UAGvF;AAED,wBAAgB,qBAAqB,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,WAQzE;AAED,wBAAgB,yBAAyB,CAAC,OAAO,EAAE,YAAY,SAAS,QAAQ,EAC9E,OAAO,EAAE,4BAA4B,CAAC,OAAO,EAAE,YAAY,CAAC,EAC5D,OAAO,EAAE,uBAAuB,IAIY,SAAS,WAAW,EAAE,SAAS,OAAO,2BAOnF"}
package/dist/client.js CHANGED
@@ -5,6 +5,7 @@
5
5
  import { FALLBACK_AI_BOT_REGISTRY_ENTRIES, compileAiBotRegistryEntries, matchAiBotRegistryEntry, parseAiBotRegistryPayload, } from "./registry.js";
6
6
  import { detectTrustedProxy, resolveClientIp, } from "./client-ip.js";
7
7
  import { SDK_VERSION, SDK_VERSION_HEADER } from "./version.js";
8
+ import { DEVTUNE_PROJECT_HEADER, TOKEN_EXPIRY_MARGIN_MS, VERCEL_OIDC_TOKEN_HEADER, VercelOidcExchangeError, VercelOidcTokenExchanger, isDevTuneProjectId, readVercelOidcTokenExpiry, } from "./vercel-oidc.js";
8
9
  export const DEFAULT_INGEST_ENDPOINT = "https://devtune.ai/api/v1/llm-traffic/ingest";
9
10
  export const DEFAULT_REGISTRY_URL = "https://devtune.ai/api/v1/llm-traffic/registry";
10
11
  const DEFAULT_REGISTRY_REVALIDATE_MS = 60 * 60 * 1000;
@@ -18,7 +19,9 @@ const MAX_EVENT_PATH_LENGTH = 2048;
18
19
  const MAX_EVENT_UA_LENGTH = 2048;
19
20
  const MAX_EVENT_URL_LENGTH = 4096;
20
21
  const MAX_EVENT_IP_LENGTH = 45;
22
+ const UNAUTHORIZED_STATUS = 401;
21
23
  const RATE_LIMITED_STATUS = 429;
24
+ const UNAVAILABLE_STATUS = 503;
22
25
  const DEFAULT_MAX_RETRY_ATTEMPTS = 3;
23
26
  const RETRY_ATTEMPTS_CEILING = 10;
24
27
  const RETRY_BASE_DELAY_MS = 250;
@@ -69,6 +72,11 @@ export class DevTuneAiTrafficClient {
69
72
  maxRetryDelayMs;
70
73
  maxQueuedEvents;
71
74
  trustedProxy;
75
+ projectId;
76
+ keyCredential;
77
+ tokenExchanger;
78
+ vercelOidcToken = null;
79
+ warnedMissingVercelOidcToken = false;
72
80
  registry;
73
81
  refreshPromise = null;
74
82
  flushPromise = null;
@@ -76,9 +84,17 @@ export class DevTuneAiTrafficClient {
76
84
  queue = [];
77
85
  constructor(options) {
78
86
  this.options = options;
79
- if (!options.ingestKey) {
80
- throw new Error("DevTune AI Traffic ingestKey is required");
87
+ if (!options.ingestKey && !options.projectId) {
88
+ throw new Error("DevTune AI Traffic needs an ingestKey or a projectId");
81
89
  }
90
+ // An empty string is an unset environment variable, so it counts as absent.
91
+ if (options.projectId && !isDevTuneProjectId(options.projectId)) {
92
+ throw new Error("DevTune AI Traffic projectId must be a DevTune project UUID");
93
+ }
94
+ this.projectId = options.projectId || null;
95
+ this.keyCredential = options.ingestKey
96
+ ? { headers: { authorization: `Bearer ${options.ingestKey}` }, vercelOidc: false }
97
+ : null;
82
98
  this.trustedProxy = options.trustedProxy ?? detectTrustedProxy();
83
99
  this.endpoint = options.endpoint ?? DEFAULT_INGEST_ENDPOINT;
84
100
  this.registryUrl = options.registryUrl ?? DEFAULT_REGISTRY_URL;
@@ -94,6 +110,7 @@ export class DevTuneAiTrafficClient {
94
110
  this.fetchImpl = options.fetch ?? fetch;
95
111
  this.logger = options.logger ?? null;
96
112
  this.now = options.now ?? (() => new Date());
113
+ this.tokenExchanger = new VercelOidcTokenExchanger(this.fetchImpl, () => this.now().getTime());
97
114
  this.random = options.random ?? Math.random;
98
115
  this.errorSampleRate = clampNumber(options.errorSampleRate ?? 0.01, 0, 1);
99
116
  this.maxRetryAttempts = clampInteger(options.maxRetryAttempts ?? DEFAULT_MAX_RETRY_ATTEMPTS, 0, RETRY_ATTEMPTS_CEILING);
@@ -122,6 +139,7 @@ export class DevTuneAiTrafficClient {
122
139
  }
123
140
  trackRequest(request, waitUntilContext, responseStatus) {
124
141
  this.refreshRegistryIfStale(waitUntilContext);
142
+ this.captureVercelOidcToken(request);
125
143
  if (!this.mightTrackRequest(request) ||
126
144
  isPageInitiatedRequest(request) ||
127
145
  isFrameworkDataRequest(request)) {
@@ -322,19 +340,44 @@ export class DevTuneAiTrafficClient {
322
340
  *
323
341
  * Every other failure keeps its previous behavior: one attempt, dropped, and
324
342
  * a sampled warning.
343
+ *
344
+ * On the Vercel OIDC path the credential is resolved before every attempt,
345
+ * retries included, so a drain or a backoff that outlives its token picks up
346
+ * one captured meanwhile instead of sending with one that has expired. The
347
+ * exchange is cached, so this costs nothing in the steady state. A 401 or 503 resends the same batch with the ingest key
348
+ * when one is configured, and the rest of the drain stays on the key. That
349
+ * resend is a change of credential, not a retry, so it spends no budget.
350
+ * Without a key a 503, which means DevTune could not reach Vercel's signing
351
+ * keys, is retried exactly like a 429.
325
352
  */
326
353
  async flushQueuedEvents() {
327
354
  let retryBudget = this.maxRetryAttempts;
355
+ let keyOnly = false;
356
+ const failedExchanges = new Map();
328
357
  while (this.queue.length > 0) {
329
358
  const batch = this.queue.splice(0, MAX_INGEST_BATCH_SIZE);
330
359
  let attempts = 0;
331
360
  for (;;) {
361
+ // The key path stays synchronous up to each send, as it always was.
362
+ const credential = !keyOnly && this.projectId && this.vercelOidcToken
363
+ ? await this.resolveVercelOidcCredential(this.projectId, this.vercelOidcToken, batch.length, failedExchanges)
364
+ : this.keyCredential;
365
+ if (credential === "drop-batch") {
366
+ break;
367
+ }
368
+ if (credential === null || credential === "drop-queue") {
369
+ if (credential === null) {
370
+ this.warnMissingVercelOidcTokenOnce(batch.length + this.queue.length);
371
+ }
372
+ this.queue.splice(0);
373
+ return;
374
+ }
332
375
  let response;
333
376
  try {
334
377
  response = await this.fetchImpl(this.endpoint, {
335
378
  body: JSON.stringify({ events: batch }),
336
379
  headers: {
337
- authorization: `Bearer ${this.options.ingestKey}`,
380
+ ...credential.headers,
338
381
  "content-type": "application/json",
339
382
  [SDK_VERSION_HEADER]: SDK_VERSION,
340
383
  },
@@ -343,11 +386,18 @@ export class DevTuneAiTrafficClient {
343
386
  });
344
387
  }
345
388
  catch (error) {
346
- this.sampleWarn("DevTune AI Traffic ingest request failed", { error });
389
+ this.sampleWarn("DevTune AI Traffic ingest request failed", classifyFailure(error));
347
390
  break;
348
391
  }
349
392
  attempts += 1;
350
- if (response.status !== RATE_LIMITED_STATUS) {
393
+ if (credential.vercelOidc &&
394
+ this.keyCredential &&
395
+ (response.status === UNAUTHORIZED_STATUS || response.status === UNAVAILABLE_STATUS)) {
396
+ keyOnly = true;
397
+ continue;
398
+ }
399
+ if (response.status !== RATE_LIMITED_STATUS &&
400
+ !(credential.vercelOidc && response.status === UNAVAILABLE_STATUS)) {
351
401
  if (!response.ok) {
352
402
  this.sampleWarn("DevTune AI Traffic ingest request failed", {
353
403
  status: response.status,
@@ -369,6 +419,95 @@ export class DevTuneAiTrafficClient {
369
419
  }
370
420
  }
371
421
  }
422
+ /**
423
+ * Keeps the most recent acceptable Vercel OIDC token seen on a request.
424
+ * Vercel only puts the token on requests, never in the environment, so it
425
+ * cannot be read when the client is built. Every token from one deployment
426
+ * carries the same identity, so the latest one can send events queued by
427
+ * earlier requests.
428
+ */
429
+ captureVercelOidcToken(request) {
430
+ if (!this.projectId) {
431
+ return;
432
+ }
433
+ const value = request.headers.get(VERCEL_OIDC_TOKEN_HEADER);
434
+ if (!value || value === this.vercelOidcToken?.value) {
435
+ return;
436
+ }
437
+ const expiresAtMs = readVercelOidcTokenExpiry(value, this.now().getTime());
438
+ if (expiresAtMs !== null) {
439
+ this.vercelOidcToken = { value, expiresAtMs };
440
+ }
441
+ }
442
+ /**
443
+ * Exchanges the captured Vercel OIDC token for one send attempt's
444
+ * credential. The token wins over the ingest key, so a customer can keep the
445
+ * key while migrating and then delete it; the key covers a token too close to
446
+ * expiry and a failed exchange.
447
+ *
448
+ * Without a key, a failure is reported with a sampled warning and resolves
449
+ * to what the caller drops. A token too close to expiry drops the whole
450
+ * queue, since nothing newer has been captured. A failed exchange drops only
451
+ * the current batch (`batchEvents`), because a newer token may have arrived
452
+ * while it ran; the drain then resolves again from the latest token.
453
+ * `failedExchanges` remembers the drain's failed tokens, so when the latest
454
+ * token is one that already failed the rest of the queue is dropped instead
455
+ * of exchanging it again.
456
+ */
457
+ async resolveVercelOidcCredential(projectId, token, batchEvents, failedExchanges) {
458
+ if (token.expiresAtMs - this.now().getTime() <= TOKEN_EXPIRY_MARGIN_MS) {
459
+ if (this.keyCredential) {
460
+ return this.keyCredential;
461
+ }
462
+ this.sampleWarn("DevTune AI Traffic dropped events: the Vercel OIDC token expired before it could be used", { droppedEvents: batchEvents + this.queue.length });
463
+ return "drop-queue";
464
+ }
465
+ const earlierFailure = failedExchanges.get(token.value);
466
+ if (earlierFailure) {
467
+ if (this.keyCredential) {
468
+ return this.keyCredential;
469
+ }
470
+ this.sampleWarn("DevTune AI Traffic could not exchange the Vercel OIDC token", {
471
+ droppedEvents: batchEvents + this.queue.length,
472
+ ...earlierFailure,
473
+ });
474
+ return "drop-queue";
475
+ }
476
+ try {
477
+ const exchangedToken = await this.tokenExchanger.exchange(token.value);
478
+ return {
479
+ headers: {
480
+ authorization: `Bearer ${exchangedToken}`,
481
+ [DEVTUNE_PROJECT_HEADER]: projectId,
482
+ },
483
+ vercelOidc: true,
484
+ };
485
+ }
486
+ catch (error) {
487
+ const failure = classifyFailure(error);
488
+ failedExchanges.set(token.value, failure);
489
+ if (this.keyCredential) {
490
+ return this.keyCredential;
491
+ }
492
+ this.sampleWarn("DevTune AI Traffic could not exchange the Vercel OIDC token", {
493
+ droppedEvents: batchEvents,
494
+ ...failure,
495
+ });
496
+ return "drop-batch";
497
+ }
498
+ }
499
+ /**
500
+ * With only `projectId` configured, a host that never sends a Vercel OIDC
501
+ * token can send nothing at all. That is a setup problem rather than a
502
+ * transient failure, so it is reported once per client instead of sampled.
503
+ */
504
+ warnMissingVercelOidcTokenOnce(droppedEvents) {
505
+ if (this.warnedMissingVercelOidcToken || this.errorSampleRate === 0) {
506
+ return;
507
+ }
508
+ this.warnedMissingVercelOidcToken = true;
509
+ this.logger?.warn("DevTune AI Traffic dropped events: projectId sends only from a Vercel deployment with OIDC enabled, and no ingestKey is set", { droppedEvents });
510
+ }
372
511
  resolveRetryDelayMs(retryAfterHeader, retryAttempts) {
373
512
  const retryAfterMs = parseRetryAfterMs(retryAfterHeader, this.now());
374
513
  const backoffMs = RETRY_BASE_DELAY_MS * 2 ** retryAttempts;
@@ -503,6 +642,27 @@ function isFrameworkDataRequest(request) {
503
642
  NEXT_DATA_PATH.test(url.pathname) ||
504
643
  FRAMEWORK_DATA_PATH_SUFFIXES.some((suffix) => url.pathname.endsWith(suffix)));
505
644
  }
645
+ /**
646
+ * Reduces a failed exchange or ingest send to a fixed kind and, when there is
647
+ * one, a status. A customer-supplied `fetch` can put a request's credential
648
+ * into an error's message, name or cause in any encoding, so warnings on these
649
+ * paths carry this classification and never any text from the error.
650
+ */
651
+ function classifyFailure(error) {
652
+ if (error instanceof VercelOidcExchangeError) {
653
+ return typeof error.status === "number"
654
+ ? { kind: error.kind, status: error.status }
655
+ : { kind: error.kind };
656
+ }
657
+ const name = isRecord(error) ? error.name : undefined;
658
+ if (name === "TimeoutError") {
659
+ return { kind: "timeout" };
660
+ }
661
+ if (name === "AbortError") {
662
+ return { kind: "aborted" };
663
+ }
664
+ return { kind: "network" };
665
+ }
506
666
  function parseRequestUrl(url) {
507
667
  try {
508
668
  return new URL(url);
@@ -1 +1 @@
1
- {"version":3,"file":"client.js","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"client.js","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EACL,gCAAgC,EAChC,2BAA2B,EAC3B,uBAAuB,EACvB,yBAAyB,GAG1B,MAAM,eAAe,CAAC;AACvB,OAAO,EACL,kBAAkB,EAClB,eAAe,GAEhB,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAAE,WAAW,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAC;AAC/D,OAAO,EACL,sBAAsB,EACtB,sBAAsB,EACtB,wBAAwB,EACxB,uBAAuB,EACvB,wBAAwB,EACxB,kBAAkB,EAClB,yBAAyB,GAC1B,MAAM,kBAAkB,CAAC;AAwF1B,MAAM,CAAC,MAAM,uBAAuB,GAAG,8CAA8C,CAAC;AACtF,MAAM,CAAC,MAAM,oBAAoB,GAAG,gDAAgD,CAAC;AAErF,MAAM,8BAA8B,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC;AACtD,MAAM,mCAAmC,GAAG,IAAI,CAAC;AACjD,MAAM,2BAA2B,GAAG,KAAK,CAAC;AAC1C,MAAM,kBAAkB,GAAG,EAAE,CAAC;AAC9B,MAAM,yBAAyB,GAAG,GAAG,CAAC;AACtC,MAAM,cAAc,GAAG,GAAG,CAAC;AAC3B,MAAM,qBAAqB,GAAG,GAAG,CAAC;AAClC,MAAM,qBAAqB,GAAG,IAAI,CAAC;AACnC,MAAM,mBAAmB,GAAG,IAAI,CAAC;AACjC,MAAM,oBAAoB,GAAG,IAAI,CAAC;AAClC,MAAM,mBAAmB,GAAG,EAAE,CAAC;AAC/B,MAAM,mBAAmB,GAAG,GAAG,CAAC;AAChC,MAAM,mBAAmB,GAAG,GAAG,CAAC;AAChC,MAAM,kBAAkB,GAAG,GAAG,CAAC;AAC/B,MAAM,0BAA0B,GAAG,CAAC,CAAC;AACrC,MAAM,sBAAsB,GAAG,EAAE,CAAC;AAClC,MAAM,mBAAmB,GAAG,GAAG,CAAC;AAChC,MAAM,0BAA0B,GAAG,KAAK,CAAC;AACzC,MAAM,sBAAsB,GAAG,MAAM,CAAC;AACtC,MAAM,yBAAyB,GAAG,KAAK,CAAC;AACxC,MAAM,yBAAyB,GAAG,OAAO,CAAC;AAC1C,MAAM,uBAAuB,GAAG;IAC9B,KAAK;IACL,KAAK;IACL,OAAO;IACP,OAAO;IACP,WAAW;IACX,KAAK;IACL,YAAY;IACZ,QAAQ;IACR,QAAQ;IACR,SAAS;IACT,OAAO;IACP,SAAS;IACT,KAAK;IACL,eAAe;IACf,SAAS;IACT,YAAY;IACZ,MAAM;IACN,QAAQ;IACR,UAAU;IACV,YAAY;IACZ,OAAO;IACP,QAAQ;IACR,KAAK;CACN,CAAC;AAqBF,MAAM,OAAO,sBAAsB;IA4BJ;IA3BZ,QAAQ,CAAS;IACjB,WAAW,CAAS;IACpB,oBAAoB,CAAS;IAC7B,wBAAwB,CAAU;IAClC,SAAS,CAAS;IAClB,eAAe,CAAS;IACxB,aAAa,CAAgB;IAC7B,SAAS,CAAe;IACxB,MAAM,CAAgC;IACtC,GAAG,CAAa;IAChB,MAAM,CAAe;IACrB,eAAe,CAAS;IACxB,gBAAgB,CAAS;IACzB,eAAe,CAAS;IACxB,eAAe,CAAS;IACxB,YAAY,CAA+B;IAC3C,SAAS,CAAgB;IACzB,aAAa,CAA0B;IACvC,cAAc,CAA2B;IAClD,eAAe,GAAmC,IAAI,CAAC;IACvD,4BAA4B,GAAG,KAAK,CAAC;IACrC,QAAQ,CAAgB;IACxB,cAAc,GAAyB,IAAI,CAAC;IAC5C,YAAY,GAAyB,IAAI,CAAC;IAC1C,mBAAmB,GAAyB,IAAI,CAAC;IACxC,KAAK,GAA4B,EAAE,CAAC;IAErD,YAA6B,OAAgC;QAAhC,YAAO,GAAP,OAAO,CAAyB;QAC3D,IAAI,CAAC,OAAO,CAAC,SAAS,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,CAAC;YAC7C,MAAM,IAAI,KAAK,CAAC,sDAAsD,CAAC,CAAC;QAC1E,CAAC;QAED,4EAA4E;QAC5E,IAAI,OAAO,CAAC,SAAS,IAAI,CAAC,kBAAkB,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE,CAAC;YAChE,MAAM,IAAI,KAAK,CAAC,6DAA6D,CAAC,CAAC;QACjF,CAAC;QAED,IAAI,CAAC,SAAS,GAAG,OAAO,CAAC,SAAS,IAAI,IAAI,CAAC;QAC3C,IAAI,CAAC,aAAa,GAAG,OAAO,CAAC,SAAS;YACpC,CAAC,CAAC,EAAE,OAAO,EAAE,EAAE,aAAa,EAAE,UAAU,OAAO,CAAC,SAAS,EAAE,EAAE,EAAE,UAAU,EAAE,KAAK,EAAE;YAClF,CAAC,CAAC,IAAI,CAAC;QAET,IAAI,CAAC,YAAY,GAAG,OAAO,CAAC,YAAY,IAAI,kBAAkB,EAAE,CAAC;QACjE,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAC,QAAQ,IAAI,uBAAuB,CAAC;QAC5D,IAAI,CAAC,WAAW,GAAG,OAAO,CAAC,WAAW,IAAI,oBAAoB,CAAC;QAC/D,IAAI,CAAC,oBAAoB,GAAG,OAAO,CAAC,oBAAoB,IAAI,8BAA8B,CAAC;QAC3F,IAAI,CAAC,wBAAwB;YAC3B,OAAO,CAAC,wBAAwB,IAAI,mCAAmC,CAAC;QAC1E,IAAI,CAAC,SAAS,GAAG,YAAY,CAC3B,OAAO,CAAC,SAAS,IAAI,kBAAkB,EACvC,CAAC,EACD,qBAAqB,CACtB,CAAC;QACF,IAAI,CAAC,eAAe,GAAG,YAAY,CACjC,OAAO,CAAC,eAAe,IAAI,yBAAyB,EACpD,CAAC,EACD,MAAM,CACP,CAAC;QACF,IAAI,CAAC,aAAa;YAChB,OAAO,CAAC,aAAa,KAAK,IAAI;gBAC5B,CAAC,CAAC,IAAI;gBACN,CAAC,CAAC,eAAe,CAAC,OAAO,CAAC,aAAa,IAAI,cAAc,EAAE,cAAc,CAAC,CAAC;QAC/E,IAAI,CAAC,SAAS,GAAG,OAAO,CAAC,KAAK,IAAI,KAAK,CAAC;QACxC,IAAI,CAAC,MAAM,GAAG,OAAO,CAAC,MAAM,IAAI,IAAI,CAAC;QACrC,IAAI,CAAC,GAAG,GAAG,OAAO,CAAC,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC;QAC7C,IAAI,CAAC,cAAc,GAAG,IAAI,wBAAwB,CAAC,IAAI,CAAC,SAAS,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC,CAAC;QAC/F,IAAI,CAAC,MAAM,GAAG,OAAO,CAAC,MAAM,IAAI,IAAI,CAAC,MAAM,CAAC;QAC5C,IAAI,CAAC,eAAe,GAAG,WAAW,CAAC,OAAO,CAAC,eAAe,IAAI,IAAI,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;QAC1E,IAAI,CAAC,gBAAgB,GAAG,YAAY,CAClC,OAAO,CAAC,gBAAgB,IAAI,0BAA0B,EACtD,CAAC,EACD,sBAAsB,CACvB,CAAC;QACF,IAAI,CAAC,eAAe,GAAG,YAAY,CACjC,OAAO,CAAC,eAAe,IAAI,0BAA0B,EACrD,CAAC,EACD,sBAAsB,CACvB,CAAC;QACF,IAAI,CAAC,eAAe,GAAG,YAAY,CACjC,OAAO,CAAC,eAAe,IAAI,yBAAyB,EACpD,qBAAqB,EACrB,yBAAyB,CAC1B,CAAC;QACF,MAAM,eAAe,GAAG,2BAA2B,CAAC,gCAAgC,CAAC,CAAC;QACtF,MAAM,iBAAiB,GAAG,uBAAuB,CAAC,eAAe,CAAC,CAAC;QAEnE,IAAI,CAAC,QAAQ,GAAG;YACd,OAAO,EAAE,eAAe;YACxB,IAAI,EAAE,IAAI;YACV,SAAS,EAAE,CAAC;YACZ,GAAG,iBAAiB;YACpB,OAAO,EAAE,SAAS;SACnB,CAAC;IACJ,CAAC;IAED,iBAAiB,CAAC,OAAqC;QACrD,MAAM,SAAS,GAAG,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;QAEpD,IAAI,CAAC,SAAS,EAAE,CAAC;YACf,OAAO,KAAK,CAAC;QACf,CAAC;QAED,IAAI,qBAAqB,CAAC,SAAS,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,yBAAyB,EAAE,CAAC;YAChF,OAAO,IAAI,CAAC;QACd,CAAC;QAED,MAAM,UAAU,GAAG,SAAS,CAAC,WAAW,EAAE,CAAC;QAE3C,OAAO,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC;IAChF,CAAC;IAED,YAAY,CACV,OAAoB,EACpB,gBAAgC,EAChC,cAA8B;QAE9B,IAAI,CAAC,sBAAsB,CAAC,gBAAgB,CAAC,CAAC;QAC9C,IAAI,CAAC,sBAAsB,CAAC,OAAO,CAAC,CAAC;QAErC,IACE,CAAC,IAAI,CAAC,iBAAiB,CAAC,OAAO,CAAC;YAChC,sBAAsB,CAAC,OAAO,CAAC;YAC/B,sBAAsB,CAAC,OAAO,CAAC,EAC/B,CAAC;YACD,OAAO,IAAI,CAAC;QACd,CAAC;QAED,MAAM,SAAS,GAAG,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;QAEpD,IAAI,CAAC,SAAS,EAAE,CAAC;YACf,OAAO,IAAI,CAAC;QACd,CAAC;QAED,MAAM,KAAK,GAAG,uBAAuB,CAAC,SAAS,EAAE,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;QAExE,IAAI,CAAC,KAAK,EAAE,CAAC;YACX,OAAO,IAAI,CAAC;QACd,CAAC;QAED,MAAM,KAAK,GAAG,IAAI,CAAC,WAAW,CAAC,OAAO,EAAE,SAAS,EAAE,cAAc,CAAC,CAAC;QAEnE,IAAI,CAAC,KAAK,EAAE,CAAC;YACX,OAAO,IAAI,CAAC;QACd,CAAC;QAED,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,gBAAgB,CAAC,CAAC;QAEtC,OAAO;YACL,KAAK;YACL,KAAK;SACN,CAAC;IACJ,CAAC;IAED,KAAK,CAAC,eAAe;QACnB,MAAM,OAAO,GAA2B;YACtC,MAAM,EAAE,kBAAkB;YAC1B,CAAC,kBAAkB,CAAC,EAAE,WAAW;SAClC,CAAC;QAEF,IAAI,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC;YACvB,OAAO,CAAC,eAAe,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC;QAChD,CAAC;QAED,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,WAAW,EAAE;YACtD,OAAO;YACP,MAAM,EAAE,KAAK;YACb,MAAM,EAAE,WAAW,CAAC,OAAO,CAAC,2BAA2B,CAAC;SACzD,CAAC,CAAC;QAEH,IAAI,QAAQ,CAAC,MAAM,KAAK,GAAG,EAAE,CAAC;YAC5B,IAAI,CAAC,QAAQ,GAAG;gBACd,GAAG,IAAI,CAAC,QAAQ;gBAChB,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;aACtB,CAAC;YAEF,OAAO;QACT,CAAC;QAED,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;YACjB,MAAM,IAAI,KAAK,CAAC,uCAAuC,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC;QAC5E,CAAC;QAED,MAAM,OAAO,GAAG,yBAAyB,CAAC,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC,CAAC;QAEjE,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,MAAM,IAAI,KAAK,CAAC,oDAAoD,CAAC,CAAC;QACxE,CAAC;QAED,MAAM,OAAO,GAAG,2BAA2B,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;QAE7D,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,IAAI,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,MAAM,KAAK,SAAS,CAAC,EAAE,CAAC;YACxF,MAAM,IAAI,KAAK,CAAC,uDAAuD,CAAC,CAAC;QAC3E,CAAC;QAED,IAAI,CAAC,QAAQ,GAAG;YACd,OAAO;YACP,IAAI,EAAE,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,IAAI,OAAO,CAAC,OAAO,GAAG;YAC5D,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;YACrB,GAAG,uBAAuB,CAAC,OAAO,CAAC;YACnC,OAAO,EAAE,OAAO,CAAC,OAAO;SACzB,CAAC;IACJ,CAAC;IAED,KAAK,CAAC,KAAK;QACT,IAAI,IAAI,CAAC,YAAY,EAAE,CAAC;YACtB,OAAO,IAAI,CAAC,YAAY,CAAC;QAC3B,CAAC;QAED,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,iBAAiB,EAAE,CAAC,OAAO,CAAC,GAAG,EAAE;YACxD,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC;QAC3B,CAAC,CAAC,CAAC;QAEH,OAAO,IAAI,CAAC,YAAY,CAAC;IAC3B,CAAC;IAED,2FAA2F;IAC3F,sBAAsB,CAAC,gBAAgC;QACrD,IAAI,IAAI,CAAC,cAAc,EAAE,CAAC;YACxB,OAAO;QACT,CAAC;QAED,IAAI,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,QAAQ,CAAC,SAAS,GAAG,IAAI,CAAC,oBAAoB,EAAE,CAAC;YACrE,OAAO;QACT,CAAC;QAED,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,eAAe,EAAE;aACzC,KAAK,CAAC,CAAC,KAAc,EAAE,EAAE;YACxB,IAAI,CAAC,QAAQ,GAAG;gBACd,GAAG,IAAI,CAAC,QAAQ;gBAChB,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;aACtB,CAAC;YACF,IAAI,CAAC,UAAU,CAAC,2CAA2C,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC;QAC1E,CAAC,CAAC;aACD,OAAO,CAAC,GAAG,EAAE;YACZ,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC;QAC7B,CAAC,CAAC,CAAC;QAEL,kBAAkB,CAChB,IAAI,CAAC,cAAc,EACnB,IAAI,CAAC,wBAAwB,CAAC,CAAC,CAAC,gBAAgB,CAAC,CAAC,CAAC,SAAS,CAC7D,CAAC;IACJ,CAAC;IAEO,WAAW,CACjB,OAAoB,EACpB,SAAiB,EACjB,cAA8B;QAE9B,MAAM,GAAG,GAAG,eAAe,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;QAEzC,IAAI,CAAC,GAAG,EAAE,CAAC;YACT,OAAO,IAAI,CAAC;QACd,CAAC;QAED,MAAM,QAAQ,GAAG,cAAc,CAAC,GAAG,CAAC,QAAQ,IAAI,GAAG,EAAE,qBAAqB,CAAC,CAAC;QAE5E,MAAM,MAAM,GAAG,IAAI,CAAC,aAAa,CAAC,OAAO,EAAE,QAAQ,EAAE,cAAc,CAAC,CAAC;QACrE,MAAM,EAAE,GAAG,eAAe,CAAC,OAAO,EAAE,IAAI,CAAC,YAAY,CAAC,CAAC;QAEvD,OAAO;YACL,IAAI,EAAE,QAAQ;YACd,GAAG,EAAE,cAAc,CAAC,GAAG,GAAG,CAAC,MAAM,GAAG,QAAQ,EAAE,EAAE,oBAAoB,CAAC;YACrE,EAAE,EAAE,cAAc,CAAC,SAAS,EAAE,mBAAmB,CAAC;YAClD,GAAG,CAAC,MAAM,KAAK,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC;YACtC,EAAE,EAAE,IAAI,CAAC,GAAG,EAAE,CAAC,WAAW,EAAE;YAC5B,GAAG,CAAC,EAAE,KAAK,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,cAAc,CAAC,EAAE,EAAE,mBAAmB,CAAC,EAAE,CAAC;SACxE,CAAC;IACJ,CAAC;IAEO,aAAa,CAAC,OAAoB,EAAE,QAAgB,EAAE,cAA8B;QAC1F,IAAI,cAAc,KAAK,IAAI,EAAE,CAAC;YAC5B,OAAO,IAAI,CAAC;QACd,CAAC;QAED,MAAM,cAAc,GAAG,eAAe,CAAC,cAAc,EAAE,IAAI,CAAC,CAAC;QAE7D,IAAI,cAAc,KAAK,IAAI,EAAE,CAAC;YAC5B,OAAO,cAAc,CAAC;QACxB,CAAC;QAED,MAAM,cAAc,GAAG,IAAI,CAAC,OAAO,CAAC,cAAc,EAAE,CAAC,OAAO,CAAC,CAAC;QAE9D,IAAI,cAAc,KAAK,IAAI,EAAE,CAAC;YAC5B,OAAO,IAAI,CAAC;QACd,CAAC;QAED,MAAM,cAAc,GAAG,eAAe,CAAC,cAAc,EAAE,IAAI,CAAC,CAAC;QAE7D,IAAI,cAAc,KAAK,IAAI,EAAE,CAAC;YAC5B,OAAO,cAAc,CAAC;QACxB,CAAC;QAED,IAAI,IAAI,CAAC,mBAAmB,CAAC,QAAQ,CAAC,EAAE,CAAC;YACvC,OAAO,GAAG,CAAC;QACb,CAAC;QAED,OAAO,IAAI,CAAC,aAAa,CAAC;IAC5B,CAAC;IAEO,mBAAmB,CAAC,QAAgB;QAC1C,KAAK,MAAM,OAAO,IAAI,IAAI,CAAC,OAAO,CAAC,oBAAoB,IAAI,EAAE,EAAE,CAAC;YAC9D,IAAI,OAAO,OAAO,KAAK,QAAQ,EAAE,CAAC;gBAChC,IAAI,OAAO,KAAK,QAAQ,EAAE,CAAC;oBACzB,OAAO,IAAI,CAAC;gBACd,CAAC;gBAED,SAAS;YACX,CAAC;YAED,OAAO,CAAC,SAAS,GAAG,CAAC,CAAC;YAEtB,IAAI,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC;gBAC3B,OAAO,IAAI,CAAC;YACd,CAAC;QACH,CAAC;QAED,OAAO,KAAK,CAAC;IACf,CAAC;IAED;;;;;;;;OAQG;IACK,OAAO,CAAC,KAA4B,EAAE,gBAAgC;QAC5E,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAEvB,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,IAAI,CAAC,eAAe,EAAE,CAAC;YAC7C,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,IAAI,CAAC,eAAe,CAAC,CAAC;YAE5E,IAAI,CAAC,UAAU,CAAC,4CAA4C,EAAE;gBAC5D,aAAa,EAAE,IAAI,CAAC,MAAM;gBAC1B,eAAe,EAAE,IAAI,CAAC,eAAe;aACtC,CAAC,CAAC;QACL,CAAC;QAED,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;YACxC,kBAAkB,CAAC,IAAI,CAAC,KAAK,EAAE,EAAE,gBAAgB,CAAC,CAAC;YAEnD,OAAO;QACT,CAAC;QAED,IAAI,IAAI,CAAC,mBAAmB,EAAE,CAAC;YAC7B,kBAAkB,CAAC,IAAI,CAAC,mBAAmB,EAAE,gBAAgB,CAAC,CAAC;YAE/D,OAAO;QACT,CAAC;QAED,IAAI,CAAC,mBAAmB,GAAG,KAAK,CAAC,IAAI,CAAC,eAAe,CAAC;aACnD,IAAI,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;aACxB,OAAO,CAAC,GAAG,EAAE;YACZ,IAAI,CAAC,mBAAmB,GAAG,IAAI,CAAC;QAClC,CAAC,CAAC,CAAC;QAEL,kBAAkB,CAAC,IAAI,CAAC,mBAAmB,EAAE,gBAAgB,CAAC,CAAC;IACjE,CAAC;IAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OA+BG;IACK,KAAK,CAAC,iBAAiB;QAC7B,IAAI,WAAW,GAAG,IAAI,CAAC,gBAAgB,CAAC;QACxC,IAAI,OAAO,GAAG,KAAK,CAAC;QACpB,MAAM,eAAe,GAAG,IAAI,GAAG,EAAiC,CAAC;QAEjE,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC7B,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,EAAE,qBAAqB,CAAC,CAAC;YAC1D,IAAI,QAAQ,GAAG,CAAC,CAAC;YAEjB,SAAS,CAAC;gBACR,oEAAoE;gBACpE,MAAM,UAAU,GACd,CAAC,OAAO,IAAI,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,eAAe;oBAChD,CAAC,CAAC,MAAM,IAAI,CAAC,2BAA2B,CACpC,IAAI,CAAC,SAAS,EACd,IAAI,CAAC,eAAe,EACpB,KAAK,CAAC,MAAM,EACZ,eAAe,CAChB;oBACH,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC;gBAEzB,IAAI,UAAU,KAAK,YAAY,EAAE,CAAC;oBAChC,MAAM;gBACR,CAAC;gBAED,IAAI,UAAU,KAAK,IAAI,IAAI,UAAU,KAAK,YAAY,EAAE,CAAC;oBACvD,IAAI,UAAU,KAAK,IAAI,EAAE,CAAC;wBACxB,IAAI,CAAC,8BAA8B,CAAC,KAAK,CAAC,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;oBACxE,CAAC;oBAED,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;oBAErB,OAAO;gBACT,CAAC;gBAED,IAAI,QAAkB,CAAC;gBAEvB,IAAI,CAAC;oBACH,QAAQ,GAAG,MAAM,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,EAAE;wBAC7C,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC;wBACvC,OAAO,EAAE;4BACP,GAAG,UAAU,CAAC,OAAO;4BACrB,cAAc,EAAE,kBAAkB;4BAClC,CAAC,kBAAkB,CAAC,EAAE,WAAW;yBAClC;wBACD,SAAS,EAAE,IAAI;wBACf,MAAM,EAAE,MAAM;qBACf,CAAC,CAAC;gBACL,CAAC;gBAAC,OAAO,KAAK,EAAE,CAAC;oBACf,IAAI,CAAC,UAAU,CAAC,0CAA0C,EAAE,eAAe,CAAC,KAAK,CAAC,CAAC,CAAC;oBAEpF,MAAM;gBACR,CAAC;gBAED,QAAQ,IAAI,CAAC,CAAC;gBAEd,IACE,UAAU,CAAC,UAAU;oBACrB,IAAI,CAAC,aAAa;oBAClB,CAAC,QAAQ,CAAC,MAAM,KAAK,mBAAmB,IAAI,QAAQ,CAAC,MAAM,KAAK,kBAAkB,CAAC,EACnF,CAAC;oBACD,OAAO,GAAG,IAAI,CAAC;oBAEf,SAAS;gBACX,CAAC;gBAED,IACE,QAAQ,CAAC,MAAM,KAAK,mBAAmB;oBACvC,CAAC,CAAC,UAAU,CAAC,UAAU,IAAI,QAAQ,CAAC,MAAM,KAAK,kBAAkB,CAAC,EAClE,CAAC;oBACD,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;wBACjB,IAAI,CAAC,UAAU,CAAC,0CAA0C,EAAE;4BAC1D,MAAM,EAAE,QAAQ,CAAC,MAAM;yBACxB,CAAC,CAAC;oBACL,CAAC;oBAED,MAAM;gBACR,CAAC;gBAED,IAAI,WAAW,KAAK,CAAC,EAAE,CAAC;oBACtB,IAAI,CAAC,UAAU,CAAC,0CAA0C,EAAE;wBAC1D,QAAQ;wBACR,aAAa,EAAE,KAAK,CAAC,MAAM;wBAC3B,MAAM,EAAE,QAAQ,CAAC,MAAM;qBACxB,CAAC,CAAC;oBAEH,OAAO;gBACT,CAAC;gBAED,MAAM,YAAY,GAAG,IAAI,CAAC,mBAAmB,CAC3C,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC,EACnC,IAAI,CAAC,gBAAgB,GAAG,WAAW,CACpC,CAAC;gBAEF,WAAW,IAAI,CAAC,CAAC;gBAEjB,MAAM,KAAK,CAAC,YAAY,CAAC,CAAC;YAC5B,CAAC;QACH,CAAC;IACH,CAAC;IAED;;;;;;OAMG;IACK,sBAAsB,CAAC,OAAoB;QACjD,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC;YACpB,OAAO;QACT,CAAC;QAED,MAAM,KAAK,GAAG,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,wBAAwB,CAAC,CAAC;QAE5D,IAAI,CAAC,KAAK,IAAI,KAAK,KAAK,IAAI,CAAC,eAAe,EAAE,KAAK,EAAE,CAAC;YACpD,OAAO;QACT,CAAC;QAED,MAAM,WAAW,GAAG,yBAAyB,CAAC,KAAK,EAAE,IAAI,CAAC,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC,CAAC;QAE3E,IAAI,WAAW,KAAK,IAAI,EAAE,CAAC;YACzB,IAAI,CAAC,eAAe,GAAG,EAAE,KAAK,EAAE,WAAW,EAAE,CAAC;QAChD,CAAC;IACH,CAAC;IAED;;;;;;;;;;;;;;OAcG;IACK,KAAK,CAAC,2BAA2B,CACvC,SAAiB,EACjB,KAA8B,EAC9B,WAAmB,EACnB,eAAmD;QAEnD,IAAI,KAAK,CAAC,WAAW,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC,OAAO,EAAE,IAAI,sBAAsB,EAAE,CAAC;YACvE,IAAI,IAAI,CAAC,aAAa,EAAE,CAAC;gBACvB,OAAO,IAAI,CAAC,aAAa,CAAC;YAC5B,CAAC;YAED,IAAI,CAAC,UAAU,CACb,0FAA0F,EAC1F,EAAE,aAAa,EAAE,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,CACnD,CAAC;YAEF,OAAO,YAAY,CAAC;QACtB,CAAC;QAED,MAAM,cAAc,GAAG,eAAe,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QAExD,IAAI,cAAc,EAAE,CAAC;YACnB,IAAI,IAAI,CAAC,aAAa,EAAE,CAAC;gBACvB,OAAO,IAAI,CAAC,aAAa,CAAC;YAC5B,CAAC;YAED,IAAI,CAAC,UAAU,CAAC,6DAA6D,EAAE;gBAC7E,aAAa,EAAE,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM;gBAC9C,GAAG,cAAc;aAClB,CAAC,CAAC;YAEH,OAAO,YAAY,CAAC;QACtB,CAAC;QAED,IAAI,CAAC;YACH,MAAM,cAAc,GAAG,MAAM,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;YAEvE,OAAO;gBACL,OAAO,EAAE;oBACP,aAAa,EAAE,UAAU,cAAc,EAAE;oBACzC,CAAC,sBAAsB,CAAC,EAAE,SAAS;iBACpC;gBACD,UAAU,EAAE,IAAI;aACjB,CAAC;QACJ,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,OAAO,GAAG,eAAe,CAAC,KAAK,CAAC,CAAC;YAEvC,eAAe,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;YAE1C,IAAI,IAAI,CAAC,aAAa,EAAE,CAAC;gBACvB,OAAO,IAAI,CAAC,aAAa,CAAC;YAC5B,CAAC;YAED,IAAI,CAAC,UAAU,CAAC,6DAA6D,EAAE;gBAC7E,aAAa,EAAE,WAAW;gBAC1B,GAAG,OAAO;aACX,CAAC,CAAC;YAEH,OAAO,YAAY,CAAC;QACtB,CAAC;IACH,CAAC;IAED;;;;OAIG;IACK,8BAA8B,CAAC,aAAqB;QAC1D,IAAI,IAAI,CAAC,4BAA4B,IAAI,IAAI,CAAC,eAAe,KAAK,CAAC,EAAE,CAAC;YACpE,OAAO;QACT,CAAC;QAED,IAAI,CAAC,4BAA4B,GAAG,IAAI,CAAC;QACzC,IAAI,CAAC,MAAM,EAAE,IAAI,CACf,6HAA6H,EAC7H,EAAE,aAAa,EAAE,CAClB,CAAC;IACJ,CAAC;IAEO,mBAAmB,CAAC,gBAA+B,EAAE,aAAqB;QAChF,MAAM,YAAY,GAAG,iBAAiB,CAAC,gBAAgB,EAAE,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC;QACrE,MAAM,SAAS,GAAG,mBAAmB,GAAG,CAAC,IAAI,aAAa,CAAC;QAE3D,OAAO,IAAI,CAAC,GAAG,CAAC,YAAY,IAAI,SAAS,EAAE,IAAI,CAAC,eAAe,CAAC,CAAC;IACnE,CAAC;IAEO,UAAU,CAAC,OAAe,EAAE,OAAgC;QAClE,IAAI,IAAI,CAAC,eAAe,KAAK,CAAC,IAAI,IAAI,CAAC,MAAM,EAAE,GAAG,IAAI,CAAC,eAAe,EAAE,CAAC;YACvE,OAAO;QACT,CAAC;QAED,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;IACtC,CAAC;CACF;AAED,MAAM,UAAU,sBAAsB,CAAC,OAAgC;IACrE,OAAO,IAAI,sBAAsB,CAAC,OAAO,CAAC,CAAC;AAC7C,CAAC;AAED,MAAM,UAAU,gCAAgC,CAAC,OAAgC;IAC/E,MAAM,MAAM,GAAG,sBAAsB,CAAC;QACpC,GAAG,OAAO;QACV,aAAa,EAAE,OAAO,CAAC,aAAa,IAAI,IAAI;KAC7C,CAAC,CAAC;IAEH,OAAO,SAAS,0BAA0B,CAAC,OAAoB,EAAE,KAAqB;QACpF,MAAM,CAAC,YAAY,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;IACtC,CAAC,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,qBAAqB,CAAC,SAAoC;IACxE,IAAI,CAAC,SAAS,EAAE,CAAC;QACf,OAAO,KAAK,CAAC;IACf,CAAC;IAED,MAAM,UAAU,GAAG,SAAS,CAAC,WAAW,EAAE,CAAC;IAE3C,OAAO,uBAAuB,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC;AAC3E,CAAC;AAED,MAAM,UAAU,yBAAyB,CACvC,OAA4D,EAC5D,OAAgC;IAEhC,MAAM,MAAM,GAAG,sBAAsB,CAAC,OAAO,CAAC,CAAC;IAE/C,OAAO,KAAK,UAAU,qBAAqB,CAAC,OAAoB,EAAE,OAAgB;QAChF,MAAM,QAAQ,GAAG,MAAM,OAAO,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;QACjD,MAAM,gBAAgB,GAAG,mBAAmB,CAAC,OAAO,CAAC,CAAC;QACtD,MAAM,CAAC,YAAY,CAAC,OAAO,EAAE,gBAAgB,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC;QAEhE,OAAO,QAAQ,CAAC;IAClB,CAAC,CAAC;AACJ,CAAC;AAED,SAAS,kBAAkB,CAAC,OAAyB,EAAE,gBAAgC;IACrF,MAAM,cAAc,GAAG,OAAO,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC;IAEtD,IAAI,gBAAgB,EAAE,CAAC;QACrB,gBAAgB,CAAC,SAAS,CAAC,cAAc,CAAC,CAAC;QAE3C,OAAO;IACT,CAAC;IAED,KAAK,cAAc,CAAC;AACtB,CAAC;AAED,SAAS,mBAAmB,CAAC,KAAc;IACzC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;QACrB,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,MAAM,SAAS,GAAG,KAAK,CAAC,SAAS,CAAC;IAElC,IAAI,OAAO,SAAS,KAAK,UAAU,EAAE,CAAC;QACpC,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,OAAO;QACL,SAAS,EAAE,CAAC,OAAO,EAAE,EAAE;YACrB,SAAS,CAAC,IAAI,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;QACjC,CAAC;KACF,CAAC;AACJ,CAAC;AAED,MAAM,4BAA4B,GAAG,IAAI,GAAG,CAAC,CAAC,UAAU,EAAE,QAAQ,EAAE,OAAO,EAAE,aAAa,CAAC,CAAC,CAAC;AAE7F;;;;;;;;;;;;GAYG;AACH,SAAS,sBAAsB,CAAC,OAAqC;IACnE,MAAM,WAAW,GAAG,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAC;IAE1D,IAAI,WAAW,KAAK,IAAI,IAAI,CAAC,4BAA4B,CAAC,GAAG,CAAC,WAAW,CAAC,WAAW,EAAE,CAAC,EAAE,CAAC;QACzF,OAAO,IAAI,CAAC;IACd,CAAC;IAED,OAAO,CACL,kBAAkB,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC;QACtD,kBAAkB,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;QAClD,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,sBAAsB,CAAC,KAAK,IAAI,CACrD,CAAC;AACJ,CAAC;AAED,SAAS,kBAAkB,CAAC,KAAoB;IAC9C,OAAO,KAAK,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,KAAK,UAAU,CAAC,IAAI,KAAK,CAAC;AAClG,CAAC;AAED,MAAM,cAAc,GAAG,2BAA2B,CAAC;AACnD,MAAM,4BAA4B,GAAG;IACnC,uFAAuF;IACvF,OAAO;IACP,uFAAuF;IACvF,cAAc;IACd,kBAAkB;IAClB,qEAAqE;IACrE,gBAAgB;IAChB,cAAc;CACf,CAAC;AAEF;;;;;;;;;;;;;GAaG;AACH,SAAS,sBAAsB,CAAC,OAA6C;IAC3E,MAAM,WAAW,GAAG,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAC;IAE1D,IAAI,WAAW,KAAK,IAAI,IAAI,4BAA4B,CAAC,GAAG,CAAC,WAAW,CAAC,WAAW,EAAE,CAAC,EAAE,CAAC;QACxF,OAAO,KAAK,CAAC;IACf,CAAC;IAED,IAAI,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,eAAe,CAAC,KAAK,IAAI,EAAE,CAAC;QAClD,OAAO,IAAI,CAAC;IACd,CAAC;IAED,MAAM,GAAG,GAAG,eAAe,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;IAEzC,IAAI,CAAC,GAAG,EAAE,CAAC;QACT,OAAO,KAAK,CAAC;IACf,CAAC;IAED,OAAO,CACL,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,OAAO,CAAC;QAC7B,wEAAwE;QACxE,0EAA0E;QAC1E,yEAAyE;QACzE,CAAC,GAAG,CAAC,QAAQ,CAAC,QAAQ,CAAC,aAAa,CAAC;YACnC,CAAC,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;QAC/D,cAAc,CAAC,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC;QACjC,4BAA4B,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,GAAG,CAAC,QAAQ,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAC7E,CAAC;AACJ,CAAC;AAMD;;;;;GAKG;AACH,SAAS,eAAe,CAAC,KAAc;IACrC,IAAI,KAAK,YAAY,uBAAuB,EAAE,CAAC;QAC7C,OAAO,OAAO,KAAK,CAAC,MAAM,KAAK,QAAQ;YACrC,CAAC,CAAC,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,CAAC,MAAM,EAAE;YAC5C,CAAC,CAAC,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,CAAC;IAC3B,CAAC;IAED,MAAM,IAAI,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC;IAEtD,IAAI,IAAI,KAAK,cAAc,EAAE,CAAC;QAC5B,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC;IAC7B,CAAC;IAED,IAAI,IAAI,KAAK,YAAY,EAAE,CAAC;QAC1B,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC;IAC7B,CAAC;IAED,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC;AAC7B,CAAC;AAED,SAAS,eAAe,CAAC,GAAW;IAClC,IAAI,CAAC;QACH,OAAO,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC;IACtB,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED,SAAS,KAAK,CAAC,EAAU;IACvB,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC;QACZ,OAAO,OAAO,CAAC,OAAO,EAAE,CAAC;IAC3B,CAAC;IAED,OAAO,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,EAAE;QACnC,UAAU,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;IAC1B,CAAC,CAAC,CAAC;AACL,CAAC;AAED;;;;GAIG;AACH,SAAS,iBAAiB,CAAC,KAAoB,EAAE,GAAS;IACxD,MAAM,OAAO,GAAG,KAAK,EAAE,IAAI,EAAE,CAAC;IAE9B,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,OAAO,IAAI,CAAC;IACd,CAAC;IAED,IAAI,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;QAC3B,OAAO,MAAM,CAAC,OAAO,CAAC,GAAG,IAAI,CAAC;IAChC,CAAC;IAED,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IAEpC,IAAI,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE,CAAC;QAC1B,OAAO,IAAI,CAAC;IACd,CAAC;IAED,OAAO,IAAI,CAAC,GAAG,CAAC,OAAO,GAAG,GAAG,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,CAAC;AAC9C,CAAC;AAED,SAAS,uBAAuB,CAAC,OAA8C;IAC7E,MAAM,cAAc,GAAG,IAAI,GAAG,EAAU,CAAC;IACzC,IAAI,yBAAyB,GAAG,KAAK,CAAC;IAEtC,KAAK,MAAM,EAAE,KAAK,EAAE,IAAI,OAAO,EAAE,CAAC;QAChC,MAAM,IAAI,GAAG,KAAK,CAAC,SAAS,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC;QAEnE,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,IAAI,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;YAC5C,yBAAyB,GAAG,IAAI,CAAC;YAEjC,SAAS;QACX,CAAC;QAED,cAAc,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IAC3B,CAAC;IAED,OAAO;QACL,yBAAyB;QACzB,cAAc,EAAE,CAAC,GAAG,cAAc,CAAC;KACpC,CAAC;AACJ,CAAC;AAID,SAAS,eAAe,CAAC,KAAgC,EAAE,QAAuB;IAChF,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,KAAK,IAAI,GAAG,IAAI,KAAK,IAAI,GAAG,EAAE,CAAC;QACzF,OAAO,KAAK,CAAC;IACf,CAAC;IAED,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED,SAAS,YAAY,CAAC,KAAa,EAAE,GAAW,EAAE,GAAW;IAC3D,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;QAC5B,OAAO,GAAG,CAAC;IACb,CAAC;IAED,OAAO,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,GAAG,CAAC,EAAE,GAAG,CAAC,CAAC;AACzD,CAAC;AAED,SAAS,WAAW,CAAC,KAAa,EAAE,GAAW,EAAE,GAAW;IAC1D,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;QAC5B,OAAO,GAAG,CAAC;IACb,CAAC;IAED,OAAO,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,GAAG,CAAC,EAAE,GAAG,CAAC,CAAC;AAC7C,CAAC;AAED,SAAS,cAAc,CAAC,KAAa,EAAE,SAAiB;IACtD,IAAI,KAAK,CAAC,MAAM,IAAI,SAAS,EAAE,CAAC;QAC9B,OAAO,KAAK,CAAC;IACf,CAAC;IAED,OAAO,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC;AACnC,CAAC;AAED,SAAS,QAAQ,CAAC,KAAc;IAC9B,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,CAAC;AACrD,CAAC"}
@@ -0,0 +1,53 @@
1
+ /**
2
+ * ABOUTME: Vercel OIDC credentials for ingest, used instead of an ingest key on Vercel.
3
+ * Filters the per-request token header and exchanges it for DevTune's audience with a cache.
4
+ */
5
+ /** Vercel sets this on every request to a deployment that has OIDC enabled. */
6
+ export declare const VERCEL_OIDC_TOKEN_HEADER = "x-vercel-oidc-token";
7
+ /** Tells the ingest route which DevTune project's Vercel link to check the token against. */
8
+ export declare const DEVTUNE_PROJECT_HEADER = "x-devtune-project";
9
+ export declare const DEVTUNE_INGEST_AUDIENCE = "https://devtune.ai/ai-traffic-ingest";
10
+ export declare const VERCEL_TOKEN_EXCHANGE_URL = "https://oidc.vercel.com/~token";
11
+ /** Tokens this close to expiry are neither captured, exchanged nor served from the cache. */
12
+ export declare const TOKEN_EXPIRY_MARGIN_MS = 60000;
13
+ export declare function isDevTuneProjectId(value: string): boolean;
14
+ /**
15
+ * Returns the token's expiry in milliseconds when the value looks like a live
16
+ * Vercel OIDC token, or null for anything else.
17
+ *
18
+ * The signature is not checked: the SDK has no way to, and the ingest route
19
+ * verifies it. This filter only keeps a client-supplied junk header, a token
20
+ * from another issuer or an expired token from replacing a good one.
21
+ */
22
+ export declare function readVercelOidcTokenExpiry(value: string, nowMs: number): number | null;
23
+ export type VercelOidcExchangeFailureKind = "exchange_status" | "exchange_response";
24
+ /**
25
+ * Thrown when Vercel answers an exchange but not with a usable token. Carries
26
+ * a fixed `kind` and the status, so callers can report the failure without
27
+ * reading any message text.
28
+ */
29
+ export declare class VercelOidcExchangeError extends Error {
30
+ readonly kind: VercelOidcExchangeFailureKind;
31
+ readonly status?: number | undefined;
32
+ constructor(kind: VercelOidcExchangeFailureKind, status?: number | undefined);
33
+ }
34
+ /**
35
+ * Exchanges a deployment's Vercel OIDC token for one scoped to DevTune's
36
+ * ingest audience.
37
+ *
38
+ * Results are cached in memory by source token until their expiry, less the
39
+ * margin, and expired entries are dropped on every call, so the steady state
40
+ * is one entry per live source token. Callers that need the same token at once
41
+ * share one request. Vercel's answers are reported as a
42
+ * `VercelOidcExchangeError`; anything the fetch itself throws is passed on.
43
+ */
44
+ export declare class VercelOidcTokenExchanger {
45
+ private readonly fetchImpl;
46
+ private readonly nowMs;
47
+ private readonly cache;
48
+ private readonly inFlight;
49
+ constructor(fetchImpl: typeof fetch, nowMs: () => number);
50
+ exchange(sourceToken: string): Promise<string>;
51
+ private requestExchange;
52
+ }
53
+ //# sourceMappingURL=vercel-oidc.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"vercel-oidc.d.ts","sourceRoot":"","sources":["../src/vercel-oidc.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,+EAA+E;AAC/E,eAAO,MAAM,wBAAwB,wBAAwB,CAAC;AAE9D,6FAA6F;AAC7F,eAAO,MAAM,sBAAsB,sBAAsB,CAAC;AAE1D,eAAO,MAAM,uBAAuB,yCAAyC,CAAC;AAC9E,eAAO,MAAM,yBAAyB,mCAAmC,CAAC;AAQ1E,6FAA6F;AAC7F,eAAO,MAAM,sBAAsB,QAAS,CAAC;AAE7C,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,MAAM,WAE/C;AAED;;;;;;;GAOG;AACH,wBAAgB,yBAAyB,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,iBA4BrE;AAED,MAAM,MAAM,6BAA6B,GAAG,iBAAiB,GAAG,mBAAmB,CAAC;AAEpF;;;;GAIG;AACH,qBAAa,uBAAwB,SAAQ,KAAK;IAE9C,QAAQ,CAAC,IAAI,EAAE,6BAA6B;IAC5C,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM;gBADf,IAAI,EAAE,6BAA6B,EACnC,MAAM,CAAC,EAAE,MAAM,YAAA;CAS3B;AAOD;;;;;;;;;GASG;AACH,qBAAa,wBAAwB;IAKjC,OAAO,CAAC,QAAQ,CAAC,SAAS;IAC1B,OAAO,CAAC,QAAQ,CAAC,KAAK;IALxB,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAqC;IAC3D,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAsC;gBAG5C,SAAS,EAAE,OAAO,KAAK,EACvB,KAAK,EAAE,MAAM,MAAM;IAGhC,QAAQ,CAAC,WAAW,EAAE,MAAM;YA8BpB,eAAe;CAsC9B"}
@@ -0,0 +1,152 @@
1
+ /**
2
+ * ABOUTME: Vercel OIDC credentials for ingest, used instead of an ingest key on Vercel.
3
+ * Filters the per-request token header and exchanges it for DevTune's audience with a cache.
4
+ */
5
+ /** Vercel sets this on every request to a deployment that has OIDC enabled. */
6
+ export const VERCEL_OIDC_TOKEN_HEADER = "x-vercel-oidc-token";
7
+ /** Tells the ingest route which DevTune project's Vercel link to check the token against. */
8
+ export const DEVTUNE_PROJECT_HEADER = "x-devtune-project";
9
+ export const DEVTUNE_INGEST_AUDIENCE = "https://devtune.ai/ai-traffic-ingest";
10
+ export const VERCEL_TOKEN_EXCHANGE_URL = "https://oidc.vercel.com/~token";
11
+ const VERCEL_OIDC_ISSUER = "https://oidc.vercel.com";
12
+ const MAX_TOKEN_LENGTH = 8_192;
13
+ const TOKEN_EXCHANGE_TIMEOUT_MS = 5_000;
14
+ const BASE64URL_SEGMENT = /^[A-Za-z0-9_-]+$/u;
15
+ const UUID_PATTERN = /^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/iu;
16
+ /** Tokens this close to expiry are neither captured, exchanged nor served from the cache. */
17
+ export const TOKEN_EXPIRY_MARGIN_MS = 60_000;
18
+ export function isDevTuneProjectId(value) {
19
+ return UUID_PATTERN.test(value);
20
+ }
21
+ /**
22
+ * Returns the token's expiry in milliseconds when the value looks like a live
23
+ * Vercel OIDC token, or null for anything else.
24
+ *
25
+ * The signature is not checked: the SDK has no way to, and the ingest route
26
+ * verifies it. This filter only keeps a client-supplied junk header, a token
27
+ * from another issuer or an expired token from replacing a good one.
28
+ */
29
+ export function readVercelOidcTokenExpiry(value, nowMs) {
30
+ if (value.length > MAX_TOKEN_LENGTH) {
31
+ return null;
32
+ }
33
+ const segments = value.split(".");
34
+ if (segments.length !== 3 || !segments.every((segment) => BASE64URL_SEGMENT.test(segment))) {
35
+ return null;
36
+ }
37
+ const claims = decodeJsonSegment(segments[1] ?? "");
38
+ if (!claims ||
39
+ typeof claims.iss !== "string" ||
40
+ (claims.iss !== VERCEL_OIDC_ISSUER && !claims.iss.startsWith(`${VERCEL_OIDC_ISSUER}/`)) ||
41
+ typeof claims.owner_id !== "string" ||
42
+ typeof claims.project_id !== "string" ||
43
+ typeof claims.exp !== "number" ||
44
+ !Number.isFinite(claims.exp)) {
45
+ return null;
46
+ }
47
+ const expiresAtMs = claims.exp * 1000;
48
+ return expiresAtMs - nowMs > TOKEN_EXPIRY_MARGIN_MS ? expiresAtMs : null;
49
+ }
50
+ /**
51
+ * Thrown when Vercel answers an exchange but not with a usable token. Carries
52
+ * a fixed `kind` and the status, so callers can report the failure without
53
+ * reading any message text.
54
+ */
55
+ export class VercelOidcExchangeError extends Error {
56
+ kind;
57
+ status;
58
+ constructor(kind, status) {
59
+ super(kind === "exchange_status"
60
+ ? `Vercel OIDC token exchange failed with status ${status}`
61
+ : "Vercel OIDC token exchange returned an unusable response");
62
+ this.kind = kind;
63
+ this.status = status;
64
+ this.name = "VercelOidcExchangeError";
65
+ }
66
+ }
67
+ /**
68
+ * Exchanges a deployment's Vercel OIDC token for one scoped to DevTune's
69
+ * ingest audience.
70
+ *
71
+ * Results are cached in memory by source token until their expiry, less the
72
+ * margin, and expired entries are dropped on every call, so the steady state
73
+ * is one entry per live source token. Callers that need the same token at once
74
+ * share one request. Vercel's answers are reported as a
75
+ * `VercelOidcExchangeError`; anything the fetch itself throws is passed on.
76
+ */
77
+ export class VercelOidcTokenExchanger {
78
+ fetchImpl;
79
+ nowMs;
80
+ cache = new Map();
81
+ inFlight = new Map();
82
+ constructor(fetchImpl, nowMs) {
83
+ this.fetchImpl = fetchImpl;
84
+ this.nowMs = nowMs;
85
+ }
86
+ async exchange(sourceToken) {
87
+ const nowMs = this.nowMs();
88
+ for (const [key, entry] of this.cache) {
89
+ if (entry.usableUntilMs <= nowMs) {
90
+ this.cache.delete(key);
91
+ }
92
+ }
93
+ const cached = this.cache.get(sourceToken);
94
+ if (cached) {
95
+ return cached.token;
96
+ }
97
+ const pending = this.inFlight.get(sourceToken);
98
+ if (pending) {
99
+ return pending;
100
+ }
101
+ const request = this.requestExchange(sourceToken).finally(() => {
102
+ this.inFlight.delete(sourceToken);
103
+ });
104
+ this.inFlight.set(sourceToken, request);
105
+ return request;
106
+ }
107
+ async requestExchange(sourceToken) {
108
+ const response = await this.fetchImpl(VERCEL_TOKEN_EXCHANGE_URL, {
109
+ body: JSON.stringify({ token: sourceToken, aud: DEVTUNE_INGEST_AUDIENCE }),
110
+ headers: {
111
+ accept: "application/json",
112
+ "content-type": "application/json",
113
+ },
114
+ method: "POST",
115
+ signal: AbortSignal.timeout(TOKEN_EXCHANGE_TIMEOUT_MS),
116
+ });
117
+ if (!response.ok) {
118
+ throw new VercelOidcExchangeError("exchange_status", response.status);
119
+ }
120
+ const payload = await response.json().catch(() => null);
121
+ if (!isRecord(payload) ||
122
+ typeof payload.token !== "string" ||
123
+ payload.token.length === 0 ||
124
+ typeof payload.expiry !== "number" ||
125
+ !Number.isFinite(payload.expiry)) {
126
+ throw new VercelOidcExchangeError("exchange_response");
127
+ }
128
+ const usableUntilMs = payload.expiry * 1000 - TOKEN_EXPIRY_MARGIN_MS;
129
+ // A token that is already inside the margin would only be rejected at ingest.
130
+ if (usableUntilMs <= this.nowMs()) {
131
+ throw new VercelOidcExchangeError("exchange_response");
132
+ }
133
+ this.cache.set(sourceToken, { token: payload.token, usableUntilMs });
134
+ return payload.token;
135
+ }
136
+ }
137
+ function decodeJsonSegment(segment) {
138
+ try {
139
+ const base64 = segment.replace(/-/gu, "+").replace(/_/gu, "/");
140
+ const binary = atob(base64.padEnd(Math.ceil(base64.length / 4) * 4, "="));
141
+ const bytes = Uint8Array.from(binary, (character) => character.charCodeAt(0));
142
+ const value = JSON.parse(new TextDecoder().decode(bytes));
143
+ return isRecord(value) ? value : null;
144
+ }
145
+ catch {
146
+ return null;
147
+ }
148
+ }
149
+ function isRecord(value) {
150
+ return typeof value === "object" && value !== null;
151
+ }
152
+ //# sourceMappingURL=vercel-oidc.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"vercel-oidc.js","sourceRoot":"","sources":["../src/vercel-oidc.ts"],"names":[],"mappings":"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"}
package/dist/version.d.ts CHANGED
@@ -3,7 +3,7 @@
3
3
  * Lets DevTune tell a customer when their sensor has an upgrade available.
4
4
  */
5
5
  /** Must equal `version` in package.json; a unit test and the release check enforce it. */
6
- export declare const SDK_VERSION = "0.10.0";
6
+ export declare const SDK_VERSION = "0.11.0";
7
7
  /** Sent on every ingest and registry request. Carries the version only, no visitor data. */
8
8
  export declare const SDK_VERSION_HEADER = "x-devtune-sdk-version";
9
9
  //# sourceMappingURL=version.d.ts.map
package/dist/version.js CHANGED
@@ -3,7 +3,7 @@
3
3
  * Lets DevTune tell a customer when their sensor has an upgrade available.
4
4
  */
5
5
  /** Must equal `version` in package.json; a unit test and the release check enforce it. */
6
- export const SDK_VERSION = "0.10.0";
6
+ export const SDK_VERSION = "0.11.0";
7
7
  /** Sent on every ingest and registry request. Carries the version only, no visitor data. */
8
8
  export const SDK_VERSION_HEADER = "x-devtune-sdk-version";
9
9
  //# sourceMappingURL=version.js.map
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@devtune/ai-traffic",
3
- "version": "0.10.0",
3
+ "version": "0.11.0",
4
4
  "private": false,
5
5
  "description": "Filtered edge-push sensor for DevTune AI Traffic.",
6
6
  "license": "MIT",