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