@devtune/ai-traffic 0.10.0 → 0.12.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.
@@ -107,8 +137,9 @@ For a matched crawler, DevTune receives only:
107
137
  - response status when the adapter can know it
108
138
  - timestamp
109
139
  - the address the request arrived from, used to verify the crawler and then discarded
140
+ - for a signed agent, its Web Bot Auth signature material, used to verify the agent and then discarded (see [Signed Agents](#signed-agents))
110
141
 
111
- Request bodies, cookies, unrelated headers, and query-derived identifiers are not sent. An address is sent only for a request whose user agent matches the AI bot registry, so ordinary browser traffic never reaches DevTune at all. Note the limit of that statement: the match is on the user agent, and anyone can send a crawler's user agent, so a person whose client does that would have their address sent. That is the same fact the verification exists to handle, and it is why the address is checked and discarded rather than stored. DevTune checks it against the claimed operator's published networks on receipt and keeps the verdict, not the address. Set `trustedProxy: "none"` to send no address at all; DevTune then records that traffic as unverified.
142
+ Request bodies, cookies, unrelated headers, and query strings are never sent. Signature material is only forwarded for a request without a query, so a reset link, OAuth callback or search URL a signed agent follows never leaves the site. Only these request headers are ever forwarded with a signature: `accept`, `accept-encoding`, `accept-language`, `cache-control`, `content-length`, `content-type`, `date`, `from`, `host` and `user-agent`, exported as `WEB_BOT_AUTH_FORWARDED_HEADERS`. A request whose signature covers any other header, such as `cookie`, `authorization` or an API key, forwards no signature material at all, so credentials never leave the site. An address is sent only for a request whose user agent matches the AI bot registry, so ordinary browser traffic never reaches DevTune at all. Note the limit of that statement: the match is on the user agent, and anyone can send a crawler's user agent, so a person whose client does that would have their address sent. That is the same fact the verification exists to handle, and it is why the address is checked and discarded rather than stored. DevTune checks it against the claimed operator's published networks on receipt and keeps the verdict, not the address. Set `trustedProxy: "none"` to send no address at all; DevTune then records that traffic as unverified.
112
143
 
113
144
  ## Bot Verification
114
145
 
@@ -136,6 +167,30 @@ const trackAiTraffic = createDevTuneAiTrafficMiddleware({
136
167
  });
137
168
  ```
138
169
 
170
+ ### Signed Agents
171
+
172
+ Some agents sign each request with [Web Bot Auth](https://datatracker.ietf.org/doc/draft-ietf-webbotauth-httpsig-protocol/), an HTTP Message Signature (RFC 9421) that their operator's published key verifies. ChatGPT agent, Google's agent and DuckAssistBot do. A valid signature identifies the agent whatever network it runs on, so DevTune checks it alongside the address.
173
+
174
+ When a matched request carries all three of `Signature`, `Signature-Input` and `Signature-Agent`, its event includes a `webBotAuth` object with what DevTune needs to check the signature:
175
+
176
+ - the three headers, verbatim
177
+ - the request method
178
+ - the absolute request URL the agent sent. The Express and Node adapters take it from the request line and the incoming host without parsing it. Fetch-compatible runtimes such as Next.js have already normalised `request.url`, so there the sensor puts back the raw `Host` or `X-Forwarded-Host` the runtime built it from: a request signed for `https://DOCS.example.com:443/guide` forwards that, not `https://docs.example.com/guide`. The raw path is gone there, since the runtime may have rewritten `/a/../guide` as `/guide`, and behind a TLS-terminating proxy `request.url` can say `http:` for a request the agent sent over `https:`. So a request whose signature covers the scheme, path or query (`@scheme`, `@path`, `@target-uri`, `@request-target` or `@query`) forwards no signature on a Fetch runtime. Signatures over `@authority` and `Signature-Agent`, which is what Web Bot Auth agents sign today, still forward. The Express and Node adapters keep the raw path and forward either kind. A request without a `Host` header forwards no signature. A configured `origin` changes the event's `url`, never the signed URL.
179
+ - any other header the signature covers, by lowercase name, with repeated values combined as `a, b`. Only the headers in `WEB_BOT_AUTH_FORWARDED_HEADERS` are ever forwarded.
180
+
181
+ No configuration is needed, and the sensor never verifies, logs or stores any of it. DevTune verifies it on receipt and keeps the verdict, not the material. If any part exceeds DevTune's size limits, holds characters a request header cannot carry, or the signature covers a header outside `WEB_BOT_AUTH_FORWARDED_HEADERS`, the sensor leaves `webBotAuth` out rather than truncating it, because a truncated signature can never verify. That event, like any request without all three headers, is sent exactly as an unsigned one.
182
+
183
+ A signature is valid for a short window, and DevTune checks it against the event's time. The Express and Node adapters and `withDevTuneAiTrafficRoute()` record a request after its response, so they stamp a signed event with the time the request arrived. Unsigned events keep the time they are recorded. If you call `trackRequest()` yourself after the response, take `client.signedArrivalTime(request)` when the request arrives and pass it as the fourth argument:
184
+
185
+ ```ts
186
+ const receivedAt = aiTraffic.signedArrivalTime(request);
187
+ const response = await render(request);
188
+
189
+ aiTraffic.trackRequest(request, event, response.status, receivedAt);
190
+ ```
191
+
192
+ A request with a query string, even a bare trailing `?`, forwards no signature material, and its event is sent exactly as an unsigned one. Query strings can carry reset tokens, OAuth codes and search terms, and the event's `url` leaves them out, so DevTune could never match a signature over one anyway. Such a request keeps its address verdict.
193
+
139
194
  ## Detect Without Sending
140
195
 
141
196
  The standalone classifiers need no ingest key and never make a network request or push data to DevTune:
@@ -224,7 +279,7 @@ const trackAiTraffic = createDevTuneAiTrafficMiddleware({
224
279
 
225
280
  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
281
 
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.
282
+ 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
283
 
229
284
  ### Status Semantics
230
285
 
@@ -12,6 +12,8 @@ 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 web_bot_auth_js_1 = require("./web-bot-auth.js");
16
+ const vercel_oidc_js_1 = require("./vercel-oidc.js");
15
17
  exports.DEFAULT_INGEST_ENDPOINT = "https://devtune.ai/api/v1/llm-traffic/ingest";
16
18
  exports.DEFAULT_REGISTRY_URL = "https://devtune.ai/api/v1/llm-traffic/registry";
17
19
  const DEFAULT_REGISTRY_REVALIDATE_MS = 60 * 60 * 1000;
@@ -25,7 +27,9 @@ const MAX_EVENT_PATH_LENGTH = 2048;
25
27
  const MAX_EVENT_UA_LENGTH = 2048;
26
28
  const MAX_EVENT_URL_LENGTH = 4096;
27
29
  const MAX_EVENT_IP_LENGTH = 45;
30
+ const UNAUTHORIZED_STATUS = 401;
28
31
  const RATE_LIMITED_STATUS = 429;
32
+ const UNAVAILABLE_STATUS = 503;
29
33
  const DEFAULT_MAX_RETRY_ATTEMPTS = 3;
30
34
  const RETRY_ATTEMPTS_CEILING = 10;
31
35
  const RETRY_BASE_DELAY_MS = 250;
@@ -76,6 +80,11 @@ class DevTuneAiTrafficClient {
76
80
  maxRetryDelayMs;
77
81
  maxQueuedEvents;
78
82
  trustedProxy;
83
+ projectId;
84
+ keyCredential;
85
+ tokenExchanger;
86
+ vercelOidcToken = null;
87
+ warnedMissingVercelOidcToken = false;
79
88
  registry;
80
89
  refreshPromise = null;
81
90
  flushPromise = null;
@@ -83,9 +92,17 @@ class DevTuneAiTrafficClient {
83
92
  queue = [];
84
93
  constructor(options) {
85
94
  this.options = options;
86
- if (!options.ingestKey) {
87
- throw new Error("DevTune AI Traffic ingestKey is required");
95
+ if (!options.ingestKey && !options.projectId) {
96
+ throw new Error("DevTune AI Traffic needs an ingestKey or a projectId");
88
97
  }
98
+ // An empty string is an unset environment variable, so it counts as absent.
99
+ if (options.projectId && !(0, vercel_oidc_js_1.isDevTuneProjectId)(options.projectId)) {
100
+ throw new Error("DevTune AI Traffic projectId must be a DevTune project UUID");
101
+ }
102
+ this.projectId = options.projectId || null;
103
+ this.keyCredential = options.ingestKey
104
+ ? { headers: { authorization: `Bearer ${options.ingestKey}` }, vercelOidc: false }
105
+ : null;
89
106
  this.trustedProxy = options.trustedProxy ?? (0, client_ip_js_1.detectTrustedProxy)();
90
107
  this.endpoint = options.endpoint ?? exports.DEFAULT_INGEST_ENDPOINT;
91
108
  this.registryUrl = options.registryUrl ?? exports.DEFAULT_REGISTRY_URL;
@@ -101,6 +118,7 @@ class DevTuneAiTrafficClient {
101
118
  this.fetchImpl = options.fetch ?? fetch;
102
119
  this.logger = options.logger ?? null;
103
120
  this.now = options.now ?? (() => new Date());
121
+ this.tokenExchanger = new vercel_oidc_js_1.VercelOidcTokenExchanger(this.fetchImpl, () => this.now().getTime());
104
122
  this.random = options.random ?? Math.random;
105
123
  this.errorSampleRate = clampNumber(options.errorSampleRate ?? 0.01, 0, 1);
106
124
  this.maxRetryAttempts = clampInteger(options.maxRetryAttempts ?? DEFAULT_MAX_RETRY_ATTEMPTS, 0, RETRY_ATTEMPTS_CEILING);
@@ -127,8 +145,15 @@ class DevTuneAiTrafficClient {
127
145
  const normalized = userAgent.toLowerCase();
128
146
  return this.registry.userAgentHints.some((hint) => normalized.includes(hint));
129
147
  }
130
- trackRequest(request, waitUntilContext, responseStatus) {
148
+ /**
149
+ * Records a matched AI bot request. Pass `receivedAt` when the request is
150
+ * recorded after its response, taken from `signedArrivalTime()` as the
151
+ * request arrived: a signed event is checked against the time it was signed
152
+ * for. Other events keep the time they are recorded.
153
+ */
154
+ trackRequest(request, waitUntilContext, responseStatus, receivedAt) {
131
155
  this.refreshRegistryIfStale(waitUntilContext);
156
+ this.captureVercelOidcToken(request);
132
157
  if (!this.mightTrackRequest(request) ||
133
158
  isPageInitiatedRequest(request) ||
134
159
  isFrameworkDataRequest(request)) {
@@ -142,7 +167,7 @@ class DevTuneAiTrafficClient {
142
167
  if (!entry) {
143
168
  return null;
144
169
  }
145
- const event = this.createEvent(request, userAgent, responseStatus);
170
+ const event = this.createEvent(request, userAgent, responseStatus, receivedAt);
146
171
  if (!event) {
147
172
  return null;
148
173
  }
@@ -152,6 +177,20 @@ class DevTuneAiTrafficClient {
152
177
  event,
153
178
  };
154
179
  }
180
+ /**
181
+ * The client's clock now for a request carrying Web Bot Auth signature
182
+ * headers, and undefined otherwise, so unsigned requests read the clock
183
+ * exactly as they did before signatures were forwarded. Call it as the
184
+ * request arrives and pass the result to `trackRequest()`.
185
+ */
186
+ signedArrivalTime(request) {
187
+ try {
188
+ return (0, web_bot_auth_js_1.hasWebBotAuthHeaders)(request) ? this.now() : undefined;
189
+ }
190
+ catch {
191
+ return undefined;
192
+ }
193
+ }
155
194
  async refreshRegistry() {
156
195
  const headers = {
157
196
  accept: "application/json",
@@ -221,7 +260,7 @@ class DevTuneAiTrafficClient {
221
260
  });
222
261
  scheduleBackground(this.refreshPromise, this.waitUntilRegistryRefresh ? waitUntilContext : undefined);
223
262
  }
224
- createEvent(request, userAgent, responseStatus) {
263
+ createEvent(request, userAgent, responseStatus, receivedAt) {
225
264
  const url = parseRequestUrl(request.url);
226
265
  if (!url) {
227
266
  return null;
@@ -229,13 +268,16 @@ class DevTuneAiTrafficClient {
229
268
  const pathname = truncateString(url.pathname || "/", MAX_EVENT_PATH_LENGTH);
230
269
  const status = this.resolveStatus(request, pathname, responseStatus);
231
270
  const ip = (0, client_ip_js_1.resolveClientIp)(request, this.trustedProxy);
271
+ const webBotAuth = readWebBotAuthSafely(request);
272
+ const ts = webBotAuth && receivedAt && Number.isFinite(receivedAt.getTime()) ? receivedAt : this.now();
232
273
  return {
233
274
  path: pathname,
234
275
  url: truncateString(`${url.origin}${pathname}`, MAX_EVENT_URL_LENGTH),
235
276
  ua: truncateString(userAgent, MAX_EVENT_UA_LENGTH),
236
277
  ...(status === null ? {} : { status }),
237
- ts: this.now().toISOString(),
278
+ ts: ts.toISOString(),
238
279
  ...(ip === null ? {} : { ip: truncateString(ip, MAX_EVENT_IP_LENGTH) }),
280
+ ...(webBotAuth === null ? {} : { webBotAuth }),
239
281
  };
240
282
  }
241
283
  resolveStatus(request, pathname, responseStatus) {
@@ -329,19 +371,44 @@ class DevTuneAiTrafficClient {
329
371
  *
330
372
  * Every other failure keeps its previous behavior: one attempt, dropped, and
331
373
  * a sampled warning.
374
+ *
375
+ * On the Vercel OIDC path the credential is resolved before every attempt,
376
+ * retries included, so a drain or a backoff that outlives its token picks up
377
+ * one captured meanwhile instead of sending with one that has expired. The
378
+ * exchange is cached, so this costs nothing in the steady state. A 401 or 503 resends the same batch with the ingest key
379
+ * when one is configured, and the rest of the drain stays on the key. That
380
+ * resend is a change of credential, not a retry, so it spends no budget.
381
+ * Without a key a 503, which means DevTune could not reach Vercel's signing
382
+ * keys, is retried exactly like a 429.
332
383
  */
333
384
  async flushQueuedEvents() {
334
385
  let retryBudget = this.maxRetryAttempts;
386
+ let keyOnly = false;
387
+ const failedExchanges = new Map();
335
388
  while (this.queue.length > 0) {
336
389
  const batch = this.queue.splice(0, MAX_INGEST_BATCH_SIZE);
337
390
  let attempts = 0;
338
391
  for (;;) {
392
+ // The key path stays synchronous up to each send, as it always was.
393
+ const credential = !keyOnly && this.projectId && this.vercelOidcToken
394
+ ? await this.resolveVercelOidcCredential(this.projectId, this.vercelOidcToken, batch.length, failedExchanges)
395
+ : this.keyCredential;
396
+ if (credential === "drop-batch") {
397
+ break;
398
+ }
399
+ if (credential === null || credential === "drop-queue") {
400
+ if (credential === null) {
401
+ this.warnMissingVercelOidcTokenOnce(batch.length + this.queue.length);
402
+ }
403
+ this.queue.splice(0);
404
+ return;
405
+ }
339
406
  let response;
340
407
  try {
341
408
  response = await this.fetchImpl(this.endpoint, {
342
409
  body: JSON.stringify({ events: batch }),
343
410
  headers: {
344
- authorization: `Bearer ${this.options.ingestKey}`,
411
+ ...credential.headers,
345
412
  "content-type": "application/json",
346
413
  [version_js_1.SDK_VERSION_HEADER]: version_js_1.SDK_VERSION,
347
414
  },
@@ -350,11 +417,18 @@ class DevTuneAiTrafficClient {
350
417
  });
351
418
  }
352
419
  catch (error) {
353
- this.sampleWarn("DevTune AI Traffic ingest request failed", { error });
420
+ this.sampleWarn("DevTune AI Traffic ingest request failed", classifyFailure(error));
354
421
  break;
355
422
  }
356
423
  attempts += 1;
357
- if (response.status !== RATE_LIMITED_STATUS) {
424
+ if (credential.vercelOidc &&
425
+ this.keyCredential &&
426
+ (response.status === UNAUTHORIZED_STATUS || response.status === UNAVAILABLE_STATUS)) {
427
+ keyOnly = true;
428
+ continue;
429
+ }
430
+ if (response.status !== RATE_LIMITED_STATUS &&
431
+ !(credential.vercelOidc && response.status === UNAVAILABLE_STATUS)) {
358
432
  if (!response.ok) {
359
433
  this.sampleWarn("DevTune AI Traffic ingest request failed", {
360
434
  status: response.status,
@@ -376,6 +450,95 @@ class DevTuneAiTrafficClient {
376
450
  }
377
451
  }
378
452
  }
453
+ /**
454
+ * Keeps the most recent acceptable Vercel OIDC token seen on a request.
455
+ * Vercel only puts the token on requests, never in the environment, so it
456
+ * cannot be read when the client is built. Every token from one deployment
457
+ * carries the same identity, so the latest one can send events queued by
458
+ * earlier requests.
459
+ */
460
+ captureVercelOidcToken(request) {
461
+ if (!this.projectId) {
462
+ return;
463
+ }
464
+ const value = request.headers.get(vercel_oidc_js_1.VERCEL_OIDC_TOKEN_HEADER);
465
+ if (!value || value === this.vercelOidcToken?.value) {
466
+ return;
467
+ }
468
+ const expiresAtMs = (0, vercel_oidc_js_1.readVercelOidcTokenExpiry)(value, this.now().getTime());
469
+ if (expiresAtMs !== null) {
470
+ this.vercelOidcToken = { value, expiresAtMs };
471
+ }
472
+ }
473
+ /**
474
+ * Exchanges the captured Vercel OIDC token for one send attempt's
475
+ * credential. The token wins over the ingest key, so a customer can keep the
476
+ * key while migrating and then delete it; the key covers a token too close to
477
+ * expiry and a failed exchange.
478
+ *
479
+ * Without a key, a failure is reported with a sampled warning and resolves
480
+ * to what the caller drops. A token too close to expiry drops the whole
481
+ * queue, since nothing newer has been captured. A failed exchange drops only
482
+ * the current batch (`batchEvents`), because a newer token may have arrived
483
+ * while it ran; the drain then resolves again from the latest token.
484
+ * `failedExchanges` remembers the drain's failed tokens, so when the latest
485
+ * token is one that already failed the rest of the queue is dropped instead
486
+ * of exchanging it again.
487
+ */
488
+ async resolveVercelOidcCredential(projectId, token, batchEvents, failedExchanges) {
489
+ if (token.expiresAtMs - this.now().getTime() <= vercel_oidc_js_1.TOKEN_EXPIRY_MARGIN_MS) {
490
+ if (this.keyCredential) {
491
+ return this.keyCredential;
492
+ }
493
+ this.sampleWarn("DevTune AI Traffic dropped events: the Vercel OIDC token expired before it could be used", { droppedEvents: batchEvents + this.queue.length });
494
+ return "drop-queue";
495
+ }
496
+ const earlierFailure = failedExchanges.get(token.value);
497
+ if (earlierFailure) {
498
+ if (this.keyCredential) {
499
+ return this.keyCredential;
500
+ }
501
+ this.sampleWarn("DevTune AI Traffic could not exchange the Vercel OIDC token", {
502
+ droppedEvents: batchEvents + this.queue.length,
503
+ ...earlierFailure,
504
+ });
505
+ return "drop-queue";
506
+ }
507
+ try {
508
+ const exchangedToken = await this.tokenExchanger.exchange(token.value);
509
+ return {
510
+ headers: {
511
+ authorization: `Bearer ${exchangedToken}`,
512
+ [vercel_oidc_js_1.DEVTUNE_PROJECT_HEADER]: projectId,
513
+ },
514
+ vercelOidc: true,
515
+ };
516
+ }
517
+ catch (error) {
518
+ const failure = classifyFailure(error);
519
+ failedExchanges.set(token.value, failure);
520
+ if (this.keyCredential) {
521
+ return this.keyCredential;
522
+ }
523
+ this.sampleWarn("DevTune AI Traffic could not exchange the Vercel OIDC token", {
524
+ droppedEvents: batchEvents,
525
+ ...failure,
526
+ });
527
+ return "drop-batch";
528
+ }
529
+ }
530
+ /**
531
+ * With only `projectId` configured, a host that never sends a Vercel OIDC
532
+ * token can send nothing at all. That is a setup problem rather than a
533
+ * transient failure, so it is reported once per client instead of sampled.
534
+ */
535
+ warnMissingVercelOidcTokenOnce(droppedEvents) {
536
+ if (this.warnedMissingVercelOidcToken || this.errorSampleRate === 0) {
537
+ return;
538
+ }
539
+ this.warnedMissingVercelOidcToken = true;
540
+ this.logger?.warn("DevTune AI Traffic dropped events: projectId sends only from a Vercel deployment with OIDC enabled, and no ingestKey is set", { droppedEvents });
541
+ }
379
542
  resolveRetryDelayMs(retryAfterHeader, retryAttempts) {
380
543
  const retryAfterMs = parseRetryAfterMs(retryAfterHeader, this.now());
381
544
  const backoffMs = RETRY_BASE_DELAY_MS * 2 ** retryAttempts;
@@ -411,12 +574,26 @@ function mightBeAiBotUserAgent(userAgent) {
411
574
  function withDevTuneAiTrafficRoute(handler, options) {
412
575
  const client = createDevTuneAiTraffic(options);
413
576
  return async function devTuneAiTrafficRoute(request, context) {
577
+ const receivedAt = client.signedArrivalTime(request);
414
578
  const response = await handler(request, context);
415
579
  const waitUntilContext = getWaitUntilContext(context);
416
- client.trackRequest(request, waitUntilContext, response.status);
580
+ client.trackRequest(request, waitUntilContext, response.status, receivedAt);
417
581
  return response;
418
582
  };
419
583
  }
584
+ /**
585
+ * Signature headers are attacker-controlled, so a failure reading them must
586
+ * never throw into the customer's request path: the event is then sent as an
587
+ * unsigned one.
588
+ */
589
+ function readWebBotAuthSafely(request) {
590
+ try {
591
+ return (0, web_bot_auth_js_1.readWebBotAuth)(request);
592
+ }
593
+ catch {
594
+ return null;
595
+ }
596
+ }
420
597
  function scheduleBackground(promise, waitUntilContext) {
421
598
  const guardedPromise = promise.catch(() => undefined);
422
599
  if (waitUntilContext) {
@@ -511,6 +688,27 @@ function isFrameworkDataRequest(request) {
511
688
  NEXT_DATA_PATH.test(url.pathname) ||
512
689
  FRAMEWORK_DATA_PATH_SUFFIXES.some((suffix) => url.pathname.endsWith(suffix)));
513
690
  }
691
+ /**
692
+ * Reduces a failed exchange or ingest send to a fixed kind and, when there is
693
+ * one, a status. A customer-supplied `fetch` can put a request's credential
694
+ * into an error's message, name or cause in any encoding, so warnings on these
695
+ * paths carry this classification and never any text from the error.
696
+ */
697
+ function classifyFailure(error) {
698
+ if (error instanceof vercel_oidc_js_1.VercelOidcExchangeError) {
699
+ return typeof error.status === "number"
700
+ ? { kind: error.kind, status: error.status }
701
+ : { kind: error.kind };
702
+ }
703
+ const name = isRecord(error) ? error.name : undefined;
704
+ if (name === "TimeoutError") {
705
+ return { kind: "timeout" };
706
+ }
707
+ if (name === "AbortError") {
708
+ return { kind: "aborted" };
709
+ }
710
+ return { kind: "network" };
711
+ }
514
712
  function parseRequestUrl(url) {
515
713
  try {
516
714
  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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"}
@@ -14,14 +14,18 @@ function createDevTuneAiTrafficExpressMiddleware(options) {
14
14
  headers: createHeadersLike(request),
15
15
  url: createRequestUrl(request, origin),
16
16
  ip: request.socket?.remoteAddress ?? null,
17
+ method: request.method,
18
+ targetUri: createTargetUri(request),
17
19
  };
18
20
  client.refreshRegistryIfStale();
19
21
  if (!client.mightTrackRequest(requestLike)) {
20
22
  next();
21
23
  return;
22
24
  }
25
+ // Recorded after the response, so keep the arrival time a signature is checked against.
26
+ const receivedAt = client.signedArrivalTime(requestLike);
23
27
  response.once("finish", () => {
24
- client.trackRequest(requestLike, undefined, response.statusCode);
28
+ client.trackRequest(requestLike, undefined, response.statusCode, receivedAt);
25
29
  });
26
30
  next();
27
31
  };
@@ -31,6 +35,11 @@ function createHeadersLike(request) {
31
35
  get(name) {
32
36
  return getHeader(request, name);
33
37
  },
38
+ // Express's getter reads `request.headers` with inherited properties, so
39
+ // its result is trusted only when it is a string or an array of strings.
40
+ getCombined(name) {
41
+ return (combinedHeaderValue(request.get?.(name)) ?? ownCombinedHeaderValue(request.headers, name));
42
+ },
34
43
  };
35
44
  }
36
45
  function createRequestUrl(request, configuredOrigin) {
@@ -42,13 +51,33 @@ function createRequestUrl(request, configuredOrigin) {
42
51
  return requestPath;
43
52
  }
44
53
  }
45
- function getRequestOrigin(request) {
54
+ /**
55
+ * The URL a signature covers, as the request line and the raw host (`X-Forwarded-Host`, then `Host`) carried
56
+ * it. Never parsed, so a signed `https://EXAMPLE.com:443/guide` is forwarded
57
+ * byte for byte. A configured `origin` never replaces the host the agent
58
+ * signed. An absolute-form request target is already the whole URL. Null
59
+ * when there is no host to build it from.
60
+ */
61
+ function createTargetUri(request) {
62
+ const requestPath = request.originalUrl ?? request.url;
63
+ // An absolute-form target is already the whole URL; any other non-path
64
+ // form (`*`, authority-form) is not a URL a signature can cover.
65
+ if (!requestPath.startsWith("/")) {
66
+ return /^https?:\/\//iu.test(requestPath) ? requestPath : null;
67
+ }
68
+ const host = getRequestHost(request);
69
+ return host ? `${getRequestOrigin(request, host)}${requestPath}` : null;
70
+ }
71
+ function getRequestOrigin(request, host = getRequestHost(request) ?? "localhost") {
46
72
  const protocol = getForwardedHeader(request, "x-forwarded-proto") ?? request.protocol ?? "http";
47
- const host = getForwardedHeader(request, "x-forwarded-host") ?? getHeader(request, "host") ?? "localhost";
48
73
  return `${protocol}://${host}`;
49
74
  }
75
+ function getRequestHost(request) {
76
+ return getForwardedHeader(request, "x-forwarded-host") ?? getHeader(request, "host");
77
+ }
78
+ /** Express's getter can return a repeated field as an array; like the raw headers, it reads the first value. */
50
79
  function getHeader(request, name) {
51
- return request.get?.(name) ?? headerValue(request.headers[name.toLowerCase()]);
80
+ return headerValue(request.get?.(name)) ?? headerValue(request.headers[name.toLowerCase()]);
52
81
  }
53
82
  function getForwardedHeader(request, name) {
54
83
  const value = getHeader(request, name);
@@ -60,4 +89,27 @@ function headerValue(value) {
60
89
  }
61
90
  return value?.[0] ?? null;
62
91
  }
92
+ /**
93
+ * A covered field's value, read only as an own property: the names come from
94
+ * a client's `Signature-Input`, so `constructor` or `__proto__` must not
95
+ * reach an inherited value.
96
+ */
97
+ function ownCombinedHeaderValue(headers, name) {
98
+ const key = name.toLowerCase();
99
+ return Object.prototype.hasOwnProperty.call(headers, key)
100
+ ? combinedHeaderValue(headers[key])
101
+ : null;
102
+ }
103
+ /**
104
+ * Repeated values combine with ", " as RFC 9110 field combination does. Only
105
+ * a string or an array of strings is a value; anything else is absent.
106
+ */
107
+ function combinedHeaderValue(value) {
108
+ if (typeof value === "string") {
109
+ return value;
110
+ }
111
+ return Array.isArray(value) && value.length > 0 && value.every((item) => typeof item === "string")
112
+ ? value.join(", ")
113
+ : null;
114
+ }
63
115
  //# sourceMappingURL=express.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"express.js","sourceRoot":"","sources":["../../../express/src/express.ts"],"names":[],"mappings":";AAAA;;;GAGG;;AAgCH,0FA6BC;AA3DD,oDAI6B;AA0B7B,SAAgB,uCAAuC,CAAC,OAAuC;IAC7F,MAAM,EAAE,MAAM,EAAE,GAAG,aAAa,EAAE,GAAG,OAAO,CAAC;IAC7C,MAAM,MAAM,GAAG,IAAA,mCAAsB,EAAC,aAAa,CAAC,CAAC;IAErD,OAAO,SAAS,iCAAiC,CAC/C,OAAuC,EACvC,QAAyC,EACzC,IAAiC;QAEjC,MAAM,WAAW,GAAG;YAClB,OAAO,EAAE,iBAAiB,CAAC,OAAO,CAAC;YACnC,GAAG,EAAE,gBAAgB,CAAC,OAAO,EAAE,MAAM,CAAC;YACtC,EAAE,EAAE,OAAO,CAAC,MAAM,EAAE,aAAa,IAAI,IAAI;SAC1C,CAAC;QAEF,MAAM,CAAC,sBAAsB,EAAE,CAAC;QAEhC,IAAI,CAAC,MAAM,CAAC,iBAAiB,CAAC,WAAW,CAAC,EAAE,CAAC;YAC3C,IAAI,EAAE,CAAC;YAEP,OAAO;QACT,CAAC;QAED,QAAQ,CAAC,IAAI,CAAC,QAAQ,EAAE,GAAG,EAAE;YAC3B,MAAM,CAAC,YAAY,CAAC,WAAW,EAAE,SAAS,EAAE,QAAQ,CAAC,UAAU,CAAC,CAAC;QACnE,CAAC,CAAC,CAAC;QAEH,IAAI,EAAE,CAAC;IACT,CAAC,CAAC;AACJ,CAAC;AAED,SAAS,iBAAiB,CAAC,OAAuC;IAChE,OAAO;QACL,GAAG,CAAC,IAAI;YACN,OAAO,SAAS,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;QAClC,CAAC;KACF,CAAC;AACJ,CAAC;AAED,SAAS,gBAAgB,CAAC,OAAuC,EAAE,gBAAyB;IAC1F,MAAM,WAAW,GAAG,OAAO,CAAC,WAAW,IAAI,OAAO,CAAC,GAAG,CAAC;IAEvD,IAAI,CAAC;QACH,OAAO,IAAI,GAAG,CAAC,WAAW,EAAE,gBAAgB,IAAI,gBAAgB,CAAC,OAAO,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC;IACxF,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,WAAW,CAAC;IACrB,CAAC;AACH,CAAC;AAED,SAAS,gBAAgB,CAAC,OAAuC;IAC/D,MAAM,QAAQ,GAAG,kBAAkB,CAAC,OAAO,EAAE,mBAAmB,CAAC,IAAI,OAAO,CAAC,QAAQ,IAAI,MAAM,CAAC;IAChG,MAAM,IAAI,GACR,kBAAkB,CAAC,OAAO,EAAE,kBAAkB,CAAC,IAAI,SAAS,CAAC,OAAO,EAAE,MAAM,CAAC,IAAI,WAAW,CAAC;IAE/F,OAAO,GAAG,QAAQ,MAAM,IAAI,EAAE,CAAC;AACjC,CAAC;AAED,SAAS,SAAS,CAAC,OAAuC,EAAE,IAAY;IACtE,OAAO,OAAO,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,IAAI,WAAW,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC;AACjF,CAAC;AAED,SAAS,kBAAkB,CAAC,OAAuC,EAAE,IAAY;IAC/E,MAAM,KAAK,GAAG,SAAS,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;IAEvC,OAAO,KAAK,EAAE,KAAK,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,IAAI,CAAC;AACjD,CAAC;AAED,SAAS,WAAW,CAAC,KAAkB;IACrC,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QAC9B,OAAO,KAAK,CAAC;IACf,CAAC;IAED,OAAO,KAAK,EAAE,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC;AAC5B,CAAC"}
1
+ {"version":3,"file":"express.js","sourceRoot":"","sources":["../../../express/src/express.ts"],"names":[],"mappings":"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"}