@aforoai/metering 1.1.2 → 2.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (70) hide show
  1. package/README.md +46 -28
  2. package/dist/cjs/client.d.ts +32 -50
  3. package/dist/cjs/client.d.ts.map +1 -1
  4. package/dist/cjs/client.js +104 -215
  5. package/dist/cjs/client.js.map +1 -1
  6. package/dist/cjs/middleware/common.d.ts +16 -0
  7. package/dist/cjs/middleware/common.d.ts.map +1 -1
  8. package/dist/cjs/middleware/common.js +54 -0
  9. package/dist/cjs/middleware/common.js.map +1 -1
  10. package/dist/cjs/middleware/express.d.ts +10 -5
  11. package/dist/cjs/middleware/express.d.ts.map +1 -1
  12. package/dist/cjs/middleware/express.js +22 -59
  13. package/dist/cjs/middleware/express.js.map +1 -1
  14. package/dist/cjs/middleware/fastify.d.ts +8 -4
  15. package/dist/cjs/middleware/fastify.d.ts.map +1 -1
  16. package/dist/cjs/middleware/fastify.js +25 -45
  17. package/dist/cjs/middleware/fastify.js.map +1 -1
  18. package/dist/cjs/middleware/koa.d.ts +10 -5
  19. package/dist/cjs/middleware/koa.d.ts.map +1 -1
  20. package/dist/cjs/middleware/koa.js +25 -43
  21. package/dist/cjs/middleware/koa.js.map +1 -1
  22. package/dist/cjs/transport-core/core.d.ts +355 -0
  23. package/dist/cjs/transport-core/core.d.ts.map +1 -0
  24. package/dist/cjs/transport-core/core.js +1047 -0
  25. package/dist/cjs/transport-core/core.js.map +1 -0
  26. package/dist/cjs/types.d.ts +82 -46
  27. package/dist/cjs/types.d.ts.map +1 -1
  28. package/dist/esm/client.js +103 -214
  29. package/dist/esm/client.js.map +1 -1
  30. package/dist/esm/middleware/common.js +51 -0
  31. package/dist/esm/middleware/common.js.map +1 -1
  32. package/dist/esm/middleware/express.js +23 -60
  33. package/dist/esm/middleware/express.js.map +1 -1
  34. package/dist/esm/middleware/fastify.js +26 -46
  35. package/dist/esm/middleware/fastify.js.map +1 -1
  36. package/dist/esm/middleware/koa.js +26 -44
  37. package/dist/esm/middleware/koa.js.map +1 -1
  38. package/dist/esm/transport-core/core.js +1038 -0
  39. package/dist/esm/transport-core/core.js.map +1 -0
  40. package/dist/types/client.d.ts +32 -50
  41. package/dist/types/client.d.ts.map +1 -1
  42. package/dist/types/middleware/common.d.ts +16 -0
  43. package/dist/types/middleware/common.d.ts.map +1 -1
  44. package/dist/types/middleware/express.d.ts +10 -5
  45. package/dist/types/middleware/express.d.ts.map +1 -1
  46. package/dist/types/middleware/fastify.d.ts +8 -4
  47. package/dist/types/middleware/fastify.d.ts.map +1 -1
  48. package/dist/types/middleware/koa.d.ts +10 -5
  49. package/dist/types/middleware/koa.d.ts.map +1 -1
  50. package/dist/types/transport-core/core.d.ts +355 -0
  51. package/dist/types/transport-core/core.d.ts.map +1 -0
  52. package/dist/types/types.d.ts +82 -46
  53. package/dist/types/types.d.ts.map +1 -1
  54. package/package.json +1 -1
  55. package/dist/cjs/buffer.d.ts +0 -33
  56. package/dist/cjs/buffer.d.ts.map +0 -1
  57. package/dist/cjs/buffer.js +0 -83
  58. package/dist/cjs/buffer.js.map +0 -1
  59. package/dist/cjs/transport.d.ts +0 -41
  60. package/dist/cjs/transport.d.ts.map +0 -1
  61. package/dist/cjs/transport.js +0 -186
  62. package/dist/cjs/transport.js.map +0 -1
  63. package/dist/esm/buffer.js +0 -79
  64. package/dist/esm/buffer.js.map +0 -1
  65. package/dist/esm/transport.js +0 -182
  66. package/dist/esm/transport.js.map +0 -1
  67. package/dist/types/buffer.d.ts +0 -33
  68. package/dist/types/buffer.d.ts.map +0 -1
  69. package/dist/types/transport.d.ts +0 -41
  70. package/dist/types/transport.d.ts.map +0 -1
@@ -1,82 +1,89 @@
1
- import { RingBuffer } from './buffer.js';
2
- import { Transport } from './transport.js';
1
+ import { TransportCore, checkBaseUrl } from './transport-core/core.js';
3
2
  import { generateRandomKey } from './idempotency.js';
4
3
  import { describeLimitViolation } from './limits.js';
4
+ /** Package version, sent in User-Agent. Keep in step with package.json. */
5
+ export const SDK_VERSION = '2.0.0';
5
6
  const DEFAULT_BASE_URL = 'https://api.aforo.ai';
6
7
  const DEFAULT_PRODUCT_TYPE = 'API';
7
8
  const DEFAULT_SESSION_PRODUCT_TYPE = 'AI_AGENT';
8
- /** Ingestor hard limit on events per batch request (IngestBatchRequest @Size(max = 1000)). */
9
- const MAX_BATCH_SIZE = 1000;
10
9
  const HEARTBEAT_INTERVAL_MS = 30000;
11
10
  const HEARTBEAT_METRIC = 'system.session.heartbeat';
12
11
  /** Heartbeats carry no billable customer; the ingestor intercepts them before billing. */
13
12
  const HEARTBEAT_CUSTOMER_ID = 'system';
14
- const DEFAULT_FLUSH_COUNT = 50;
15
- const DEFAULT_FLUSH_INTERVAL = 5000;
16
- const DEFAULT_MAX_QUEUE_SIZE = 10000;
17
- const DEFAULT_MAX_RETRIES = 3;
18
- const DEFAULT_RETRY_BASE_MS = 1000;
19
13
  const DEFAULT_TIMEOUT = 10000;
20
- const DEFAULT_SHUTDOWN_TIMEOUT = 5000;
14
+ function makeHeartbeatSender(baseUrl, apiKey, timeoutMs) {
15
+ const url = `${baseUrl}/v1/ingest/batch`;
16
+ return async (event) => {
17
+ try {
18
+ const response = await globalThis.fetch(url, {
19
+ method: 'POST',
20
+ headers: { 'Content-Type': 'application/json', 'X-API-Key': apiKey, 'User-Agent': `aforo-node/${SDK_VERSION}` },
21
+ body: JSON.stringify({ events: [event] }),
22
+ signal: AbortSignal.timeout(timeoutMs),
23
+ // Never follow a redirect: it would send the API key to another host.
24
+ redirect: 'manual',
25
+ });
26
+ const status = Number(response?.status);
27
+ if (status === 0 || (status >= 300 && status < 400)) {
28
+ console.debug(`[aforo] heartbeat not delivered: the ingestor answered HTTP ${status} (redirects are not followed; check baseUrl)`);
29
+ return false;
30
+ }
31
+ return Boolean(response?.ok);
32
+ }
33
+ catch (err) {
34
+ console.debug(`[aforo] heartbeat not delivered: ${err?.message ?? err}`);
35
+ return false;
36
+ }
37
+ };
38
+ }
21
39
  /**
22
40
  * Aforo metering client.
23
41
  *
24
- * Enqueues usage events into a ring buffer, flushes them in batches
25
- * to the Aforo ingestor service via HTTP. Non-blocking — `track()`
26
- * returns immediately, flushing happens in the background.
42
+ * `track()` validates the event and puts it on a bounded queue; one background
43
+ * flusher sends batches to the ingestor. If the ingestor is down, batches go
44
+ * back on the queue (same idempotency keys) and are sent when it recovers.
27
45
  *
28
46
  * ```typescript
29
- * const client = new AforoClient({ apiKey: 'your-key', productType: 'API' });
47
+ * const client = new AforoClient({ apiKey: process.env.AFORO_API_KEY!, productType: 'API' });
30
48
  * await client.track({ customerId: 'cust_1', metricName: 'api_calls', quantity: 1 });
31
- * // On shutdown:
32
- * await client.shutdown();
49
+ * // The SDK installs no signal handlers. Flush from your own:
50
+ * process.once('SIGTERM', async () => { await client.shutdown(); process.exit(0); });
33
51
  * ```
34
52
  */
35
53
  export class AforoClient {
36
54
  constructor(options) {
37
- // Drop accounting — events permanently lost (overflow eviction, failed
38
- // batch, or an event that failed client-side validation)
39
- this.dropped = 0;
40
- this.overflowDrops = 0;
41
- this.invalidDrops = 0;
42
- this.flushTimer = null;
43
- this.flushing = false;
44
- this.closed = false;
45
- this.pendingFlush = null;
46
55
  // Session heartbeat state
47
56
  this.heartbeatTimer = null;
48
57
  this.activeSessionId = null;
49
58
  this.sessionStartedAt = null;
50
59
  this.sessionProductType = DEFAULT_SESSION_PRODUCT_TYPE;
51
- if (!options.apiKey)
60
+ if (!options || !options.apiKey)
52
61
  throw new Error('apiKey is required');
53
- this.flushCount = Math.max(1, Math.min(options.flushCount ?? DEFAULT_FLUSH_COUNT, MAX_BATCH_SIZE));
62
+ const baseUrl = checkBaseUrl(options.baseUrl ?? DEFAULT_BASE_URL, options.allowInsecureHttp === true);
63
+ const timeout = options.timeout ?? DEFAULT_TIMEOUT;
54
64
  this.productType = normalizeProductType(options.productType) ?? DEFAULT_PRODUCT_TYPE;
55
- this.flushInterval = options.flushInterval ?? DEFAULT_FLUSH_INTERVAL;
56
- this.shutdownTimeoutMs = options.shutdownTimeoutMs ?? DEFAULT_SHUTDOWN_TIMEOUT;
57
- this.onDrop = options.onDrop;
58
- this.buffer = new RingBuffer(options.maxQueueSize ?? DEFAULT_MAX_QUEUE_SIZE);
59
- this.transport = new Transport({
60
- baseUrl: options.baseUrl ?? DEFAULT_BASE_URL,
65
+ const onDrop = options.onDrop;
66
+ this.core = new TransportCore({
67
+ baseUrl,
61
68
  apiKey: options.apiKey,
62
- timeout: options.timeout ?? DEFAULT_TIMEOUT,
63
- maxRetries: options.maxRetries ?? DEFAULT_MAX_RETRIES,
64
- retryBaseMs: options.retryBaseMs ?? DEFAULT_RETRY_BASE_MS,
69
+ allowInsecureHttp: options.allowInsecureHttp,
70
+ userAgent: `aforo-node/${SDK_VERSION}`,
71
+ flushCount: options.flushCount,
72
+ flushIntervalMs: options.flushInterval,
73
+ maxQueueSize: options.maxQueueSize,
74
+ maxRetries: options.maxRetries,
75
+ retryBaseMs: options.retryBaseMs,
76
+ timeoutMs: timeout,
77
+ shutdownTimeoutMs: options.shutdownTimeoutMs,
78
+ flushOnExit: options.flushOnExit,
79
+ logPrefix: '[aforo]',
80
+ onDrop: onDrop ? (events, reason) => onDrop(events, reason) : undefined,
81
+ });
82
+ // Non-enumerable, so inspect()/JSON never walk into the closure's owner.
83
+ Object.defineProperty(this, 'sendHeartbeat', {
84
+ value: makeHeartbeatSender(baseUrl, options.apiKey, timeout),
85
+ enumerable: false,
65
86
  });
66
- // Start periodic flush timer
67
- this.flushTimer = setInterval(() => {
68
- this.flush().catch(() => { });
69
- }, this.flushInterval);
70
- // Unref the timer so it doesn't prevent Node from exiting
71
- if (this.flushTimer && typeof this.flushTimer === 'object' && 'unref' in this.flushTimer) {
72
- this.flushTimer.unref();
73
- }
74
- // Register graceful shutdown handlers (deregistered in shutdown())
75
- this.signalHandler = () => {
76
- this.shutdown().catch(() => { });
77
- };
78
- process.once('SIGTERM', this.signalHandler);
79
- process.once('SIGINT', this.signalHandler);
80
87
  }
81
88
  // ─── Session lifecycle with heartbeat ─────────────────────────────
82
89
  /**
@@ -93,7 +100,7 @@ export class AforoClient {
93
100
  * @param productType - Product type for the session (default AI_AGENT)
94
101
  */
95
102
  startSession(sessionId, productType = DEFAULT_SESSION_PRODUCT_TYPE) {
96
- if (this.closed || !sessionId || !String(sessionId).trim())
103
+ if (this.core.closed || !sessionId || !String(sessionId).trim())
97
104
  return;
98
105
  this.stopHeartbeatTimer();
99
106
  this.activeSessionId = String(sessionId);
@@ -124,7 +131,7 @@ export class AforoClient {
124
131
  }
125
132
  emitSessionHeartbeat(boundary) {
126
133
  const sessionId = this.activeSessionId;
127
- if (!sessionId || (this.closed && boundary === 'HEARTBEAT'))
134
+ if (!sessionId || (this.core.closed && boundary === 'HEARTBEAT'))
128
135
  return Promise.resolve();
129
136
  const now = Date.now();
130
137
  const occurredAt = new Date(now).toISOString();
@@ -148,44 +155,34 @@ export class AforoClient {
148
155
  sdkLanguage: 'node',
149
156
  },
150
157
  };
151
- // Sent alone and outside the usage buffer; a failed heartbeat is not a
158
+ // Sent alone and outside the usage queue; a failed heartbeat is not a
152
159
  // usage drop, so it is never counted in droppedCount or handed to onDrop.
153
- return this.transport.sendSingleBestEffort(heartbeat).then(() => undefined, () => undefined);
160
+ return this.sendHeartbeat(heartbeat).then(() => undefined, () => undefined);
154
161
  }
155
162
  // ─── Event tracking ──────────────────────────────────────────────
156
163
  /**
157
- * Enqueue a usage event for batched delivery.
158
- * Returns immediately — does not await HTTP.
159
- * Triggers a flush if the buffer reaches flushCount.
164
+ * Queue a usage event. Returns at once — it never waits on HTTP and never
165
+ * starts a request (the background flusher sends batches).
160
166
  *
161
- * Throws only when the client is shut down. An event the ingestor would
162
- * reject — a blank or over-long `customerId` / `metricName` /
163
- * `idempotencyKey`, a `quantity` that is not positive or carries more than
164
- * 14 integer digits / 6 decimal places, an `occurredAt` that is not an
165
- * ISO-8601 instant, or any other capped field that is too long — is NOT
166
- * buffered and NOT sent. It is counted in `droppedCount`, WARN-logged with
167
- * the field, the limit and the offending value, and passed to the opt-in
168
- * `onDrop` hook with reason `'invalid'`. Limits the server makes
169
- * configurable (event age, clock skew, metadata size) are left to the
170
- * server. See `limits.ts` for the limits and where each one comes from.
167
+ * Never throws. An event the ingestor would reject — a blank or over-long
168
+ * `customerId` / `metricName` / `idempotencyKey`, a `quantity` that is not
169
+ * positive or carries more than 14 integer digits / 6 decimal places, an
170
+ * `occurredAt` that is not an ISO-8601 instant, or any other capped field
171
+ * that is too long — is NOT queued and NOT sent. It is counted in
172
+ * `droppedCount`, WARN-logged with the field and the limit, and passed to
173
+ * the opt-in `onDrop` hook with reason `'invalid'`. After `shutdown()` the
174
+ * event is counted and reported with reason `'closed'`.
171
175
  */
172
176
  async track(event) {
173
- if (this.closed) {
174
- throw new Error('AforoClient is shut down — cannot track new events');
175
- }
176
177
  // A missing event object is reported as an invalid event, not a TypeError.
177
178
  event = (event ?? {});
178
179
  const occurredAt = resolveOccurredAt(event.occurredAt);
179
180
  const quantity = event.quantity ?? 1;
180
181
  const productType = normalizeProductType(event.productType) ?? this.productType;
181
182
  // Minted once, here, when the event is enqueued — never at flush/retry
182
- // time, so a retried batch carries the same keys and the ingestor
183
- // deduplicates it. A caller-supplied key is passed through verbatim;
184
- // otherwise each event gets its own random UUID (no caller key = dedup
185
- // opt-out). A deterministic hash of the event fields would make two
186
- // genuinely distinct events in the same millisecond collide, and the
187
- // ingestor would silently drop the second. Minted before the validity
188
- // check so a dropped event reaches onDrop with its key.
183
+ // time, so a retried or requeued batch carries the same keys and the
184
+ // ingestor deduplicates it. A caller-supplied key is passed through
185
+ // verbatim; otherwise each event gets its own random UUID.
189
186
  const idempotencyKey = event.idempotencyKey ?? generateRandomKey();
190
187
  const resolved = {
191
188
  customerId: event.customerId,
@@ -212,164 +209,56 @@ export class AforoClient {
212
209
  warnUnknownExecutionStatus(executionStatus);
213
210
  }
214
211
  }
212
+ if (this.core.closed) {
213
+ this.core.enqueue(resolved); // reported as 'closed'
214
+ return;
215
+ }
215
216
  const violation = describeInvalidEvent(event, resolved);
216
217
  if (violation) {
217
- // Not buffered, not sent, never thrown: an un-awaited rejected track()
218
- // would crash the process on the hot path. Same shape as every other drop.
219
- this.recordDrop([resolved], 'invalid', violation);
218
+ this.core.reportDrop([resolved], 'invalid', violation);
220
219
  return;
221
220
  }
222
- this.enqueue(resolved);
223
- // Trigger flush if buffer threshold reached
224
- if (this.buffer.size >= this.flushCount) {
225
- this.flush().catch(() => { });
226
- }
221
+ this.core.enqueue(resolved);
227
222
  }
228
- /** Buffer an event; surface the evicted-oldest event if the push overflowed. */
229
- enqueue(resolved) {
230
- const evicted = this.buffer.pushEvict(resolved);
231
- if (evicted) {
232
- this.recordDrop([evicted], 'overflow');
233
- }
223
+ /** @internal Count and report an event a middleware could not build (reason 'invalid'). */
224
+ reportInvalid(event, detail) {
225
+ this.core.reportDrop([event], 'invalid', detail);
234
226
  }
235
227
  /**
236
- * Account for permanently lost events: bump the counter, WARN-log, and
237
- * invoke the opt-in onDrop hook. Overflow logs are throttled (first, then
238
- * every 1000th eviction) so sustained overflow can't storm the log;
239
- * failed-batch drops log every time (bounded by flush cadence).
240
- */
241
- recordDrop(events, reason, detail) {
242
- if (events.length === 0)
243
- return;
244
- this.dropped += events.length;
245
- if (reason === 'invalid') {
246
- // Throttled like overflow: a tight loop of bad events can't storm the log.
247
- this.invalidDrops += events.length;
248
- if (this.invalidDrops === 1 || this.invalidDrops % 1000 === 0) {
249
- console.warn(`[aforo] Invalid event dropped — ${detail ?? 'failed validation'} ` +
250
- `(${this.invalidDrops} invalid, ${this.dropped} total dropped). It was not sent.`);
251
- }
252
- }
253
- else if (reason === 'overflow') {
254
- this.overflowDrops += events.length;
255
- if (this.overflowDrops === 1 || this.overflowDrops % 1000 === 0) {
256
- console.warn(`[aforo] Buffer overflow: oldest event dropped (${this.dropped} total dropped). ` +
257
- `Consider raising maxQueueSize or checking ingest connectivity.`);
258
- }
259
- }
260
- else {
261
- console.warn(`[aforo] Dropped ${events.length} event(s) — ${reason}` +
262
- `${detail ? `: ${detail}` : ''} (${this.dropped} total dropped).`);
263
- }
264
- if (this.onDrop) {
265
- try {
266
- this.onDrop(events, reason);
267
- }
268
- catch {
269
- // A hook bug must never break tracking/flushing.
270
- }
271
- }
272
- }
273
- /**
274
- * Force-flush all buffered events to the ingestor.
275
- * Safe to call concurrently — only one flush runs at a time.
228
+ * Send everything queued now and wait for it. Runs on the single flusher —
229
+ * never a second concurrent request. While the ingestor is down this makes
230
+ * one attempt; unsent events stay queued.
276
231
  */
277
232
  async flush() {
278
- if (this.flushing && this.pendingFlush) {
279
- return this.pendingFlush;
280
- }
281
- this.flushing = true;
282
- this.pendingFlush = this.doFlush();
283
- try {
284
- return await this.pendingFlush;
285
- }
286
- finally {
287
- this.flushing = false;
288
- this.pendingFlush = null;
289
- }
290
- }
291
- async doFlush() {
292
- let totalSent = 0;
293
- let totalFailed = 0;
294
- while (!this.buffer.isEmpty) {
295
- const batch = this.buffer.drainUpTo(this.flushCount);
296
- if (batch.length === 0)
297
- break;
298
- const result = await this.transport.send(batch);
299
- totalSent += result.sent;
300
- totalFailed += result.failed;
301
- if (result.failed > 0) {
302
- // The batch was already drained from the buffer — without this it
303
- // vanishes silently. Surface it (counter + WARN + opt-in hook).
304
- // A partially accepted batch drops only the events the server
305
- // rejected: by index when the response names them; otherwise they are
306
- // counted and logged but not handed to onDrop (which ones is unknown).
307
- if (result.sent > 0 || result.rejected) {
308
- if (result.rejected) {
309
- const lost = result.rejected.map((r) => batch[r.index]).filter(Boolean);
310
- this.recordDrop(lost, 'rejected', result.message);
311
- }
312
- else {
313
- this.dropped += result.failed;
314
- console.warn(`[aforo] Ingestor rejected ${result.failed} of ${batch.length} event(s) in a batch` +
315
- `${result.message ? `: ${result.message}` : ''} (${this.dropped} total dropped).`);
316
- }
317
- }
318
- else {
319
- this.recordDrop(batch, result.reason ?? 'retry_exhausted', result.message);
320
- }
321
- }
322
- }
323
- return { sent: totalSent, failed: totalFailed };
233
+ const r = await this.core.flush();
234
+ return { sent: r.sent, failed: r.failed, requeued: r.requeued, queued: r.queued };
324
235
  }
325
236
  /**
326
- * Flush remaining events and stop the client.
327
- * After shutdown, track() will throw.
237
+ * Stop accepting events and send what is queued, for at most
238
+ * `shutdownTimeoutMs`. Events still queued at the deadline are counted and
239
+ * reported through onDrop with reason 'shutdown'. Safe to call more than once.
328
240
  */
329
241
  async shutdown() {
330
- if (this.closed)
331
- return;
332
- this.closed = true;
333
- // Deregister signal handlers so repeated create/shutdown cycles don't
334
- // accumulate process listeners (safe if already fired — once() removed it).
335
- process.removeListener('SIGTERM', this.signalHandler);
336
- process.removeListener('SIGINT', this.signalHandler);
337
- // Stop session heartbeats
338
242
  this.stopHeartbeatTimer();
339
- // Clear periodic flush timer
340
- if (this.flushTimer) {
341
- clearInterval(this.flushTimer);
342
- this.flushTimer = null;
343
- }
344
- // Flush with timeout. The escape-hatch timer MUST be cleared once the
345
- // race settles — left dangling it holds the event loop open for up to
346
- // shutdownTimeoutMs after a clean shutdown, delaying process exit in
347
- // short-lived producers (CLIs, jobs, serverless handlers).
348
- let escapeTimer;
349
- try {
350
- await Promise.race([
351
- this.flush(),
352
- new Promise((resolve) => {
353
- escapeTimer = setTimeout(resolve, this.shutdownTimeoutMs);
354
- }),
355
- ]);
356
- }
357
- finally {
358
- if (escapeTimer)
359
- clearTimeout(escapeTimer);
360
- }
243
+ await this.core.shutdown();
361
244
  }
362
- /** Number of events currently buffered. */
245
+ /** Number of events currently queued. */
363
246
  get bufferedCount() {
364
- return this.buffer.size;
247
+ return this.core.queued;
365
248
  }
366
- /** Total events permanently dropped (overflow, failed batches, server-rejected and invalid events) since creation. */
249
+ /** Total events permanently dropped (every DropReason) since creation. */
367
250
  get droppedCount() {
368
- return this.dropped;
251
+ return this.core.droppedCount;
369
252
  }
370
253
  /** Whether the client has been shut down. */
371
254
  get isShutdown() {
372
- return this.closed;
255
+ return this.core.closed;
256
+ }
257
+ toJSON() {
258
+ return { productType: this.productType, buffered: this.bufferedCount, dropped: this.droppedCount, shutdown: this.isShutdown };
259
+ }
260
+ [Symbol.for('nodejs.util.inspect.custom')]() {
261
+ return `AforoClient { productType: '${this.productType}', buffered: ${this.bufferedCount}, dropped: ${this.droppedCount}, shutdown: ${this.isShutdown} }`;
373
262
  }
374
263
  }
375
264
  function normalizeProductType(value) {
@@ -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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"}
@@ -1,4 +1,6 @@
1
1
  import { truncateRequestLabel } from '../limits.js';
2
+ import { AforoClient } from '../client.js';
3
+ import { normalizePath as heuristicNormalize } from '../path-normalizer.js';
2
4
  /**
3
5
  * Metric recorded for each request when `metricName` is not configured.
4
6
  *
@@ -45,4 +47,53 @@ export function firstNonEmpty(...values) {
45
47
  }
46
48
  return null;
47
49
  }
50
+ /** The client a middleware meters through: the app's own, or one built from the options. */
51
+ export function middlewareClient(options) {
52
+ if (options?.client)
53
+ return options.client;
54
+ if (!options?.apiKey) {
55
+ throw new Error('Aforo middleware needs either `client` (an AforoClient your app owns) or `apiKey`.');
56
+ }
57
+ return new AforoClient({ ...(options.clientOptions ?? {}), apiKey: options.apiKey, baseUrl: options.baseUrl });
58
+ }
59
+ /**
60
+ * Build the per-request customer lookup. Throws at setup when neither a
61
+ * resolver nor the explicit `trustCustomerHeader` opt-in is configured: the
62
+ * X-Customer-Id header is set by whoever calls the API, so it is never read
63
+ * by default.
64
+ */
65
+ export function customerLookup(options, readHeader) {
66
+ const legacy = options?.customerId;
67
+ const resolver = options?.customerResolver ??
68
+ (typeof legacy === 'function' ? legacy : typeof legacy === 'string' && legacy.trim() ? () => legacy : undefined);
69
+ const trustHeader = options?.trustCustomerHeader === true;
70
+ if (!resolver && !trustHeader) {
71
+ throw new Error('Aforo middleware needs a customerResolver: (req) => the Aforo customer id from identity your app ' +
72
+ 'authenticated (session, verified JWT subject, API-key lookup). To bill the X-Customer-Id header ' +
73
+ 'instead — only safe behind a proxy that sets it — pass trustCustomerHeader: true.');
74
+ }
75
+ return (req, headerSource = req) => {
76
+ const fromResolver = resolver ? firstNonEmpty(resolver(req)) : null;
77
+ if (fromResolver)
78
+ return fromResolver;
79
+ return trustHeader ? firstNonEmpty(readHeader(headerSource)) : null;
80
+ };
81
+ }
82
+ /**
83
+ * The endpointPath to send: the query string removed, dynamic segments
84
+ * collapsed unless `normalizePath` is false (a framework route template wins),
85
+ * and cut to the ingestor's 512-character limit.
86
+ */
87
+ export function endpointPathFor(options, rawPath, req, routeTemplate) {
88
+ const path = String(rawPath ?? '/').split('?')[0] || '/';
89
+ const mode = options?.normalizePath ?? true;
90
+ let out = path;
91
+ if (typeof mode === 'function') {
92
+ out = String(mode(path, req) || path);
93
+ }
94
+ else if (mode) {
95
+ out = heuristicNormalize(path, typeof routeTemplate === 'string' && routeTemplate ? routeTemplate : undefined);
96
+ }
97
+ return endpointPathOf(out);
98
+ }
48
99
  //# sourceMappingURL=common.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"common.js","sourceRoot":"","sources":["../../../src/middleware/common.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,oBAAoB,EAAE,MAAM,cAAc,CAAC;AAEpD;;;;;;;GAOG;AACH,MAAM,CAAC,MAAM,mBAAmB,GAAG,WAAW,CAAC;AAE/C;;;GAGG;AACH,MAAM,UAAU,WAAW,CAAC,MAA0B;IACpD,OAAO,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC,WAAW,EAAE,KAAK,SAAS,CAAC;AACpD,CAAC;AAED,wFAAwF;AACxF,MAAM,UAAU,iBAAiB,CAAC,OAA0B,EAAE,GAAQ,EAAE,GAAQ;IAC9E,IAAI,OAAO,OAAO,CAAC,UAAU,KAAK,UAAU,EAAE,CAAC;QAC7C,OAAO,OAAO,CAAC,UAAU,CAAC,GAAG,EAAE,GAAG,CAAC,IAAI,mBAAmB,CAAC;IAC7D,CAAC;IACD,OAAO,OAAO,CAAC,UAAU,IAAI,mBAAmB,CAAC;AACnD,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,cAAc,CAAC,GAAW;IACxC,OAAO,oBAAoB,CAAC,cAAc,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC;AAChF,CAAC;AAED,8EAA8E;AAC9E,MAAM,UAAU,YAAY,CAAC,MAAc;IACzC,OAAO,oBAAoB,CAAC,YAAY,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC;AAC5D,CAAC;AAED,4DAA4D;AAC5D,MAAM,UAAU,aAAa,CAAC,GAAG,MAAiB;IAChD,KAAK,MAAM,CAAC,IAAI,MAAM,EAAE,CAAC;QACvB,IAAI,CAAC,KAAK,SAAS,IAAI,CAAC,KAAK,IAAI;YAAE,SAAS;QAC5C,MAAM,CAAC,GAAG,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;QACrD,IAAI,CAAC;YAAE,OAAO,CAAC,CAAC;IAClB,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC"}
1
+ {"version":3,"file":"common.js","sourceRoot":"","sources":["../../../src/middleware/common.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,oBAAoB,EAAE,MAAM,cAAc,CAAC;AACpD,OAAO,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAC3C,OAAO,EAAE,aAAa,IAAI,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAE5E;;;;;;;GAOG;AACH,MAAM,CAAC,MAAM,mBAAmB,GAAG,WAAW,CAAC;AAE/C;;;GAGG;AACH,MAAM,UAAU,WAAW,CAAC,MAA0B;IACpD,OAAO,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC,WAAW,EAAE,KAAK,SAAS,CAAC;AACpD,CAAC;AAED,wFAAwF;AACxF,MAAM,UAAU,iBAAiB,CAAC,OAA0B,EAAE,GAAQ,EAAE,GAAQ;IAC9E,IAAI,OAAO,OAAO,CAAC,UAAU,KAAK,UAAU,EAAE,CAAC;QAC7C,OAAO,OAAO,CAAC,UAAU,CAAC,GAAG,EAAE,GAAG,CAAC,IAAI,mBAAmB,CAAC;IAC7D,CAAC;IACD,OAAO,OAAO,CAAC,UAAU,IAAI,mBAAmB,CAAC;AACnD,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,cAAc,CAAC,GAAW;IACxC,OAAO,oBAAoB,CAAC,cAAc,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC;AAChF,CAAC;AAED,8EAA8E;AAC9E,MAAM,UAAU,YAAY,CAAC,MAAc;IACzC,OAAO,oBAAoB,CAAC,YAAY,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC;AAC5D,CAAC;AAED,4DAA4D;AAC5D,MAAM,UAAU,aAAa,CAAC,GAAG,MAAiB;IAChD,KAAK,MAAM,CAAC,IAAI,MAAM,EAAE,CAAC;QACvB,IAAI,CAAC,KAAK,SAAS,IAAI,CAAC,KAAK,IAAI;YAAE,SAAS;QAC5C,MAAM,CAAC,GAAG,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;QACrD,IAAI,CAAC;YAAE,OAAO,CAAC,CAAC;IAClB,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,4FAA4F;AAC5F,MAAM,UAAU,gBAAgB,CAAC,OAA0B;IACzD,IAAI,OAAO,EAAE,MAAM;QAAE,OAAO,OAAO,CAAC,MAAM,CAAC;IAC3C,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,CAAC;QACrB,MAAM,IAAI,KAAK,CAAC,oFAAoF,CAAC,CAAC;IACxG,CAAC;IACD,OAAO,IAAI,WAAW,CAAC,EAAE,GAAG,CAAC,OAAO,CAAC,aAAa,IAAI,EAAE,CAAC,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE,OAAO,EAAE,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC;AACjH,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,cAAc,CAC5B,OAA0B,EAC1B,UAAiC;IAEjC,MAAM,MAAM,GAAG,OAAO,EAAE,UAAU,CAAC;IACnC,MAAM,QAAQ,GACZ,OAAO,EAAE,gBAAgB;QACzB,CAAC,OAAO,MAAM,KAAK,UAAU,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,MAAM,KAAK,QAAQ,IAAI,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;IACnH,MAAM,WAAW,GAAG,OAAO,EAAE,mBAAmB,KAAK,IAAI,CAAC;IAC1D,IAAI,CAAC,QAAQ,IAAI,CAAC,WAAW,EAAE,CAAC;QAC9B,MAAM,IAAI,KAAK,CACb,mGAAmG;YACjG,kGAAkG;YAClG,mFAAmF,CACtF,CAAC;IACJ,CAAC;IACD,OAAO,CAAC,GAAQ,EAAE,eAAoB,GAAG,EAAE,EAAE;QAC3C,MAAM,YAAY,GAAG,QAAQ,CAAC,CAAC,CAAC,aAAa,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;QACpE,IAAI,YAAY;YAAE,OAAO,YAAY,CAAC;QACtC,OAAO,WAAW,CAAC,CAAC,CAAC,aAAa,CAAC,UAAU,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;IACtE,CAAC,CAAC;AACJ,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,eAAe,CAAC,OAA0B,EAAE,OAAe,EAAE,GAAQ,EAAE,aAAuB;IAC5G,MAAM,IAAI,GAAG,MAAM,CAAC,OAAO,IAAI,GAAG,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC;IACzD,MAAM,IAAI,GAAG,OAAO,EAAE,aAAa,IAAI,IAAI,CAAC;IAC5C,IAAI,GAAG,GAAG,IAAI,CAAC;IACf,IAAI,OAAO,IAAI,KAAK,UAAU,EAAE,CAAC;QAC/B,GAAG,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,EAAE,GAAG,CAAC,IAAI,IAAI,CAAC,CAAC;IACxC,CAAC;SAAM,IAAI,IAAI,EAAE,CAAC;QAChB,GAAG,GAAG,kBAAkB,CAAC,IAAI,EAAE,OAAO,aAAa,KAAK,QAAQ,IAAI,aAAa,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;IACjH,CAAC;IACD,OAAO,cAAc,CAAC,GAAG,CAAC,CAAC;AAC7B,CAAC"}