@doow/track 0.1.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.
@@ -0,0 +1,292 @@
1
+ 'use strict';
2
+
3
+ var uuid = require('./uuid.js');
4
+ var debug = require('./debug.js');
5
+ var exporter = require('./exporter.js');
6
+ var eventProcessor = require('./event-processor.js');
7
+
8
+ /**
9
+ * S76: DoowTracker — public API surface
10
+ *
11
+ * The customer-facing class. Four lines to start emitting:
12
+ *
13
+ * import { DoowTracker } from '@doow/track';
14
+ * const meter = new DoowTracker('dk_...');
15
+ * meter.track({ metric: 'api_calls', quantity: 1, license_id: '...' });
16
+ * await meter.shutdown();
17
+ */
18
+ // ─── Defaults ──────────────────────────────────────────────────────────────
19
+ const DEFAULTS = {
20
+ endpoint: 'https://api.doow.co',
21
+ enabled: true,
22
+ debug: false,
23
+ flushAt: 20,
24
+ flushInterval: 10000,
25
+ maxPayloadBytes: 450 * 1024,
26
+ maxQueueSize: 10000,
27
+ timeout: 10000,
28
+ retryCount: 3,
29
+ disableCompression: false,
30
+ maxConcurrentFlushes: 30,
31
+ shutdownTimeout: 5000,
32
+ };
33
+ // ─── Env var parsing ───────────────────────────────────────────────────────
34
+ function resolveEnvOverrides(opts) {
35
+ const env = typeof process !== 'undefined' ? process.env : undefined;
36
+ // Spread opts without creating explicit undefined keys that would override DEFAULTS
37
+ const result = { ...opts };
38
+ if (env === null || env === void 0 ? void 0 : env.DOOW_TRACK_ENDPOINT)
39
+ result.endpoint = env.DOOW_TRACK_ENDPOINT;
40
+ if ((env === null || env === void 0 ? void 0 : env.DOOW_TRACK_DISABLED) === 'true')
41
+ result.enabled = false;
42
+ if ((env === null || env === void 0 ? void 0 : env.DOOW_TRACK_DEBUG) === 'true')
43
+ result.debug = true;
44
+ if ((env === null || env === void 0 ? void 0 : env.DOOW_TRACK_FLUSH_AT) !== undefined) {
45
+ const n = parseInt(env.DOOW_TRACK_FLUSH_AT, 10);
46
+ if (!isNaN(n) && n > 0)
47
+ result.flushAt = n;
48
+ }
49
+ if ((env === null || env === void 0 ? void 0 : env.DOOW_TRACK_FLUSH_INTERVAL) !== undefined) {
50
+ const n = parseInt(env.DOOW_TRACK_FLUSH_INTERVAL, 10);
51
+ if (!isNaN(n) && n > 0)
52
+ result.flushInterval = n;
53
+ }
54
+ if ((env === null || env === void 0 ? void 0 : env.DOOW_TRACK_ATTRIBUTION) !== undefined) {
55
+ try {
56
+ result.attribution = JSON.parse(env.DOOW_TRACK_ATTRIBUTION);
57
+ }
58
+ catch {
59
+ /* keep opts.attribution */
60
+ }
61
+ }
62
+ return result;
63
+ }
64
+ // ─── DoowTracker ───────────────────────────────────────────────────────────
65
+ class DoowTracker {
66
+ constructor(apiKey, options = {}) {
67
+ var _a, _b, _c;
68
+ this._shutdownCalled = false;
69
+ this._sigHandlers = null;
70
+ // Validate API key prefix
71
+ const envApiKey = typeof process !== 'undefined' ? ((_a = process.env['DOOW_TRACK_API_KEY']) !== null && _a !== void 0 ? _a : apiKey) : apiKey;
72
+ if (!envApiKey.startsWith('dk_')) {
73
+ console.warn(`[doow/track] API key must start with "dk_". Got: "${envApiKey.slice(0, 10)}..."`);
74
+ }
75
+ this._apiKey = envApiKey;
76
+ // Merge options with env var overrides (env takes precedence)
77
+ const merged = resolveEnvOverrides(options);
78
+ // Log unknown options in debug mode
79
+ const knownKeys = new Set([
80
+ 'endpoint',
81
+ 'enabled',
82
+ 'attribution',
83
+ 'debug',
84
+ 'flushAt',
85
+ 'flushInterval',
86
+ 'maxPayloadBytes',
87
+ 'maxQueueSize',
88
+ 'timeout',
89
+ 'retryCount',
90
+ 'disableCompression',
91
+ 'onError',
92
+ 'beforeSend',
93
+ 'beforeFlush',
94
+ 'transport',
95
+ 'offlineStore',
96
+ 'maxConcurrentFlushes',
97
+ 'shutdownTimeout',
98
+ ]);
99
+ this._options = {
100
+ ...DEFAULTS,
101
+ ...merged,
102
+ };
103
+ const unknownKeys = Object.keys(options).filter((k) => !knownKeys.has(k));
104
+ const debugLogger = debug.createDebugLogger((_b = this._options.debug) !== null && _b !== void 0 ? _b : false);
105
+ if (unknownKeys.length > 0) {
106
+ debugLogger.warn(`Unknown init options ignored: ${unknownKeys.join(', ')}`);
107
+ }
108
+ // If disabled — complete no-op, no buffers allocated
109
+ if (!this._options.enabled) {
110
+ debugLogger.log('SDK disabled — all operations are no-ops');
111
+ this._processor = null;
112
+ this._exporter = null;
113
+ return;
114
+ }
115
+ const onError = (_c = this._options.onError) !== null && _c !== void 0 ? _c : ((e) => console.warn(`[doow/track] ${e.kind}: ${e.message}`));
116
+ const exporterConfig = {
117
+ endpoint: this._options.endpoint,
118
+ apiKey: this._apiKey,
119
+ timeout: this._options.timeout,
120
+ retryCount: this._options.retryCount,
121
+ disableCompression: this._options.disableCompression,
122
+ maxConcurrentFlushes: this._options.maxConcurrentFlushes,
123
+ onError,
124
+ debug: debugLogger,
125
+ };
126
+ if (this._options.transport)
127
+ exporterConfig.transport = this._options.transport;
128
+ if (this._options.offlineStore)
129
+ exporterConfig.offlineStore = this._options.offlineStore;
130
+ this._exporter = new exporter.Exporter(exporterConfig);
131
+ const processorConfig = {
132
+ flushAt: this._options.flushAt,
133
+ flushInterval: this._options.flushInterval,
134
+ maxPayloadBytes: this._options.maxPayloadBytes,
135
+ maxQueueSize: this._options.maxQueueSize,
136
+ debug: debugLogger,
137
+ };
138
+ if (this._options.beforeSend)
139
+ processorConfig.beforeSend = this._options.beforeSend;
140
+ if (this._options.beforeFlush)
141
+ processorConfig.beforeFlush = this._options.beforeFlush;
142
+ this._processor = new eventProcessor.EventProcessor(processorConfig, this._exporter);
143
+ if (typeof process !== 'undefined') {
144
+ const sigterm = () => {
145
+ void this.shutdown();
146
+ };
147
+ const beforeExit = () => {
148
+ void this.shutdown();
149
+ };
150
+ process.setMaxListeners(process.getMaxListeners() + 2);
151
+ process.on('SIGTERM', sigterm);
152
+ process.on('beforeExit', beforeExit);
153
+ this._sigHandlers = { sigterm, beforeExit };
154
+ }
155
+ }
156
+ /**
157
+ * Track a usage event.
158
+ * - Generates UUID v4 event_id at call time
159
+ * - Merges SDK-level attribution defaults
160
+ * - Enqueues to EventProcessor
161
+ * - No-op if SDK is disabled or stopped
162
+ */
163
+ track(event) {
164
+ var _a, _b, _c, _d;
165
+ if (!this._processor || !this._exporter)
166
+ return; // disabled
167
+ if (this._exporter.stopped)
168
+ return; // auth failure
169
+ if (this._shutdownCalled)
170
+ return;
171
+ const serialized = {
172
+ ...event,
173
+ event_id: uuid.generateUUID(),
174
+ timestamp: (_a = event.timestamp) !== null && _a !== void 0 ? _a : new Date().toISOString(),
175
+ attribution: {
176
+ ...((_b = this._options.attribution) !== null && _b !== void 0 ? _b : {}),
177
+ ...((_c = event.attribution) !== null && _c !== void 0 ? _c : {}),
178
+ },
179
+ kind: (_d = event.kind) !== null && _d !== void 0 ? _d : 'USAGE',
180
+ };
181
+ // Fire-and-forget enqueue — errors surface via onError
182
+ void this._processor.enqueue(serialized);
183
+ }
184
+ /**
185
+ * Manually flush the current buffer.
186
+ * Returns a Promise that resolves when the flush completes.
187
+ */
188
+ async flush() {
189
+ if (!this._processor)
190
+ return;
191
+ await this._processor.flush();
192
+ }
193
+ /**
194
+ * Drain all pending events and shut down.
195
+ * Registers SIGTERM + beforeExit handlers automatically.
196
+ * Best-effort — hard kill loses buffered events.
197
+ */
198
+ async shutdown(timeout) {
199
+ if (this._shutdownCalled)
200
+ return;
201
+ this._shutdownCalled = true;
202
+ // Remove signal handlers
203
+ if (this._sigHandlers && typeof process !== 'undefined') {
204
+ process.removeListener('SIGTERM', this._sigHandlers.sigterm);
205
+ process.removeListener('beforeExit', this._sigHandlers.beforeExit);
206
+ process.setMaxListeners(Math.max(0, process.getMaxListeners() - 2));
207
+ this._sigHandlers = null;
208
+ }
209
+ if (!this._processor)
210
+ return;
211
+ const timeoutMs = timeout !== null && timeout !== void 0 ? timeout : this._options.shutdownTimeout;
212
+ const shutdownPromise = this._processor.shutdown();
213
+ const timeoutPromise = new Promise((resolve) => setTimeout(resolve, timeoutMs));
214
+ await Promise.race([shutdownPromise, timeoutPromise]);
215
+ }
216
+ /** True if the SDK is enabled */
217
+ get enabled() {
218
+ return !!this._processor;
219
+ }
220
+ /** True if auth has failed and SDK stopped emitting */
221
+ get stopped() {
222
+ var _a, _b;
223
+ return (_b = (_a = this._exporter) === null || _a === void 0 ? void 0 : _a.stopped) !== null && _b !== void 0 ? _b : false;
224
+ }
225
+ /** S79: True if a per-category rate limit is currently active */
226
+ get rateLimited() {
227
+ var _a, _b;
228
+ return (_b = (_a = this._exporter) === null || _a === void 0 ? void 0 : _a.rateLimited) !== null && _b !== void 0 ? _b : false;
229
+ }
230
+ // ─── S81: Serverless wrappers ─────────────────────────────────────────────
231
+ /**
232
+ * Wrap an AWS Lambda handler.
233
+ * Sets flushAt=1 internally, calls shutdown() in a finally block.
234
+ *
235
+ * @example
236
+ * export const handler = meter.withLambda(async (event, context) => {
237
+ * meter.track({ ... });
238
+ * return { statusCode: 200 };
239
+ * });
240
+ */
241
+ withLambda(handler) {
242
+ // Override flushAt to 1 so every track() flushes immediately
243
+ if (this._processor) {
244
+ this._processor.setFlushAt(1);
245
+ }
246
+ return async (event, context) => {
247
+ try {
248
+ return await handler(event, context);
249
+ }
250
+ finally {
251
+ await this.flush();
252
+ }
253
+ };
254
+ }
255
+ /**
256
+ * Wrap a Vercel serverless function handler.
257
+ * Sets flushAt=1 internally, calls flush() in a finally block.
258
+ */
259
+ withVercel(handler) {
260
+ if (this._processor) {
261
+ this._processor.setFlushAt(1);
262
+ }
263
+ return async (req, res) => {
264
+ try {
265
+ await handler(req, res);
266
+ }
267
+ finally {
268
+ await this.flush();
269
+ }
270
+ };
271
+ }
272
+ /**
273
+ * Wrap an Azure Function handler.
274
+ * Sets flushAt=1 internally, calls flush() in a finally block.
275
+ */
276
+ withAzureFunction(handler) {
277
+ if (this._processor) {
278
+ this._processor.setFlushAt(1);
279
+ }
280
+ return async (context, input) => {
281
+ try {
282
+ return await handler(context, input);
283
+ }
284
+ finally {
285
+ await this.flush();
286
+ }
287
+ };
288
+ }
289
+ }
290
+
291
+ exports.DoowTracker = DoowTracker;
292
+ //# sourceMappingURL=tracker.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tracker.js","sources":["../../../src/tracker.ts"],"sourcesContent":[null],"names":["createDebugLogger","Exporter","EventProcessor","generateUUID"],"mappings":"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"}
@@ -0,0 +1,13 @@
1
+ 'use strict';
2
+
3
+ var crypto = require('crypto');
4
+
5
+ /**
6
+ * UUID v4 generation — stdlib only, no dependencies.
7
+ */
8
+ function generateUUID() {
9
+ return crypto.randomUUID();
10
+ }
11
+
12
+ exports.generateUUID = generateUUID;
13
+ //# sourceMappingURL=uuid.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"uuid.js","sources":["../../../src/uuid.ts"],"sourcesContent":[null],"names":["randomUUID"],"mappings":";;;;AAAA;;AAEG;SAGa,YAAY,GAAA;IAC1B,OAAOA,iBAAU,EAAE;AACrB;;;;"}