@abbacchio/browser-transport 0.1.3 → 0.2.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/dist/client.js CHANGED
@@ -1,43 +1,90 @@
1
1
  /**
2
- * Browser HTTP client for Abbacchio
3
- * Handles batching, encryption, and sending logs to the server
2
+ * Browser HTTP client for Abbacchio (OTLP native)
3
+ * Sends logs to POST /v1/logs, metrics to POST /v1/metrics, traces to POST /v1/traces
4
4
  */
5
5
  import { encrypt } from './crypto.js';
6
6
  /**
7
- * Browser HTTP client for Abbacchio.
8
- * Handles batching, encryption, and HTTP communication.
7
+ * OTLP severity numbers per OpenTelemetry spec.
8
+ */
9
+ const PINO_TO_OTLP_SEVERITY = {
10
+ 10: { number: 1, text: 'TRACE' },
11
+ 20: { number: 5, text: 'DEBUG' },
12
+ 30: { number: 9, text: 'INFO' },
13
+ 40: { number: 13, text: 'WARN' },
14
+ 50: { number: 17, text: 'ERROR' },
15
+ 60: { number: 21, text: 'FATAL' },
16
+ };
17
+ function toOtlpAnyValue(val) {
18
+ if (typeof val === 'string')
19
+ return { stringValue: val };
20
+ if (typeof val === 'number') {
21
+ return Number.isInteger(val) ? { intValue: val } : { doubleValue: val };
22
+ }
23
+ if (typeof val === 'boolean')
24
+ return { boolValue: val };
25
+ if (val === null || val === undefined)
26
+ return { stringValue: '' };
27
+ // For objects/arrays, JSON.stringify
28
+ try {
29
+ return { stringValue: JSON.stringify(val) };
30
+ }
31
+ catch {
32
+ return { stringValue: String(val) };
33
+ }
34
+ }
35
+ function toOtlpAttributes(obj) {
36
+ const attrs = [];
37
+ for (const [key, val] of Object.entries(obj)) {
38
+ if (val === undefined)
39
+ continue;
40
+ attrs.push({ key, value: toOtlpAnyValue(val) });
41
+ }
42
+ return attrs;
43
+ }
44
+ /**
45
+ * Browser HTTP client for Abbacchio (OTLP native).
46
+ * Sends logs via POST /v1/logs in ExportLogsServiceRequest format.
9
47
  */
10
48
  export class AbbacchioClient {
11
49
  constructor(options = {}) {
12
50
  this.buffer = [];
51
+ this.metricBuffer = [];
52
+ this.spanBuffer = [];
13
53
  this.timer = null;
54
+ this.metricTimer = null;
55
+ this.spanTimer = null;
14
56
  this.isClosed = false;
15
- this.url = options.url || 'http://localhost:4000/api/logs';
57
+ if (options.url && !options.endpoint) {
58
+ try {
59
+ const u = new URL(options.url);
60
+ this.endpoint = `${u.protocol}//${u.host}`;
61
+ }
62
+ catch {
63
+ this.endpoint = options.url;
64
+ }
65
+ }
66
+ else {
67
+ this.endpoint = options.endpoint || 'http://localhost:4002';
68
+ }
16
69
  this.secretKey = options.secretKey;
17
- this.channel = options.channel || 'default';
70
+ this.serviceName = options.serviceName || 'default';
71
+ this.resourceAttributes = options.resourceAttributes || {};
18
72
  this.batchSize = options.batchSize || 10;
19
73
  this.flushInterval = options.flushInterval || 1000;
20
74
  this.headers = options.headers || {};
75
+ this.enabled = options.enabled ?? true;
21
76
  // Flush on page unload
22
77
  if (typeof window !== 'undefined') {
23
78
  window.addEventListener('beforeunload', () => this.flush());
24
79
  window.addEventListener('pagehide', () => this.flush());
25
80
  }
26
81
  }
27
- /**
28
- * Process a log entry (encrypt if secretKey is provided)
29
- */
30
- async processLog(log) {
31
- if (this.secretKey) {
32
- return { encrypted: await encrypt(JSON.stringify(log), this.secretKey) };
33
- }
34
- return log;
35
- }
36
- /**
37
- * Add a log to the buffer and trigger send if needed
38
- */
82
+ enable() { this.enabled = true; }
83
+ disable() { this.enabled = false; }
84
+ isEnabled() { return this.enabled; }
85
+ /** Add a log to the buffer and trigger send if needed */
39
86
  add(log) {
40
- if (this.isClosed)
87
+ if (!this.enabled || this.isClosed)
41
88
  return;
42
89
  this.buffer.push(log);
43
90
  if (this.buffer.length >= this.batchSize) {
@@ -47,9 +94,6 @@ export class AbbacchioClient {
47
94
  this.scheduleSend();
48
95
  }
49
96
  }
50
- /**
51
- * Schedule a send after the interval
52
- */
53
97
  scheduleSend() {
54
98
  if (this.timer)
55
99
  return;
@@ -58,10 +102,15 @@ export class AbbacchioClient {
58
102
  this.flush();
59
103
  }, this.flushInterval);
60
104
  }
61
- /**
62
- * Flush the buffer and send to server
63
- */
105
+ /** Flush all buffers (logs, metrics, traces) */
64
106
  async flush() {
107
+ await Promise.all([
108
+ this.flushLogs(),
109
+ this.flushMetrics(),
110
+ this.flushSpans(),
111
+ ]);
112
+ }
113
+ async flushLogs() {
65
114
  if (this.buffer.length === 0)
66
115
  return;
67
116
  const toSend = this.buffer;
@@ -70,51 +119,243 @@ export class AbbacchioClient {
70
119
  clearTimeout(this.timer);
71
120
  this.timer = null;
72
121
  }
73
- // Process logs (encrypt if needed)
74
- const processedLogs = await Promise.all(toSend.map(log => this.processLog(log)));
75
- await this.sendToServer(processedLogs);
122
+ await this.sendLogs(toSend);
76
123
  }
77
- /**
78
- * Send logs to the Abbacchio server
79
- */
80
- async sendToServer(logs) {
124
+ async sendLogs(logs) {
81
125
  try {
82
- await fetch(this.url, {
83
- method: 'POST',
84
- headers: {
85
- 'Content-Type': 'application/json',
86
- 'X-Encrypted': this.secretKey ? 'true' : 'false',
87
- 'X-Channel': this.channel,
88
- ...this.headers,
89
- },
90
- body: JSON.stringify({ logs }),
126
+ const logRecords = logs.map((log) => {
127
+ const { level, msg, message, time, name, ...extra } = log;
128
+ const pinoLevel = typeof level === 'number' ? level : 30;
129
+ const severity = PINO_TO_OTLP_SEVERITY[pinoLevel] || PINO_TO_OTLP_SEVERITY[30];
130
+ const body = msg || message || '';
131
+ const timeNano = String((time || Date.now()) * 1000000);
132
+ return {
133
+ timeUnixNano: timeNano,
134
+ observedTimeUnixNano: timeNano,
135
+ severityNumber: severity.number,
136
+ severityText: severity.text,
137
+ body: { stringValue: String(body) },
138
+ attributes: toOtlpAttributes(extra),
139
+ };
91
140
  });
141
+ const payload = {
142
+ resourceLogs: [{
143
+ resource: { attributes: this.buildResourceAttributes() },
144
+ scopeLogs: [{
145
+ scope: { name: '@abbacchio/browser-transport' },
146
+ logRecords,
147
+ }],
148
+ }],
149
+ };
150
+ await this.post('/v1/logs', payload);
92
151
  }
93
152
  catch {
94
- // Silently fail - don't break the app if Abbacchio server is down
153
+ // Silently fail
154
+ }
155
+ }
156
+ // ─── Metrics ───────────────────────────────────────
157
+ /** Add a metric data point to the buffer */
158
+ addMetric(metric) {
159
+ if (!this.enabled || this.isClosed)
160
+ return;
161
+ this.metricBuffer.push(metric);
162
+ if (this.metricBuffer.length >= this.batchSize) {
163
+ this.flushMetrics();
164
+ }
165
+ else {
166
+ this.scheduleMetricFlush();
167
+ }
168
+ }
169
+ scheduleMetricFlush() {
170
+ if (this.metricTimer)
171
+ return;
172
+ this.metricTimer = setTimeout(() => {
173
+ this.metricTimer = null;
174
+ this.flushMetrics();
175
+ }, this.flushInterval);
176
+ }
177
+ async flushMetrics() {
178
+ if (this.metricBuffer.length === 0)
179
+ return;
180
+ const batch = this.metricBuffer;
181
+ this.metricBuffer = [];
182
+ if (this.metricTimer) {
183
+ clearTimeout(this.metricTimer);
184
+ this.metricTimer = null;
95
185
  }
186
+ await this.sendMetrics(batch);
96
187
  }
97
- /**
98
- * Close the client and flush any remaining logs
99
- */
188
+ async sendMetrics(metrics) {
189
+ try {
190
+ const byName = new Map();
191
+ for (const m of metrics) {
192
+ const arr = byName.get(m.name) || [];
193
+ arr.push(m);
194
+ byName.set(m.name, arr);
195
+ }
196
+ const otlpMetrics = [];
197
+ for (const [name, records] of byName) {
198
+ const first = records[0];
199
+ const dataPoints = records.map((r) => ({
200
+ timeUnixNano: String(Date.now() * 1000000),
201
+ asDouble: r.value,
202
+ attributes: r.attributes ? toOtlpAttributes(r.attributes) : [],
203
+ }));
204
+ const metric = {
205
+ name,
206
+ description: first.description || '',
207
+ unit: first.unit || '',
208
+ };
209
+ if (first.type === 'sum') {
210
+ metric.sum = {
211
+ dataPoints,
212
+ aggregationTemporality: 2,
213
+ isMonotonic: first.isMonotonic ?? true,
214
+ };
215
+ }
216
+ else {
217
+ metric.gauge = { dataPoints };
218
+ }
219
+ otlpMetrics.push(metric);
220
+ }
221
+ const payload = {
222
+ resourceMetrics: [{
223
+ resource: { attributes: this.buildResourceAttributes() },
224
+ scopeMetrics: [{
225
+ scope: { name: '@abbacchio/browser-transport' },
226
+ metrics: otlpMetrics,
227
+ }],
228
+ }],
229
+ };
230
+ await this.post('/v1/metrics', payload);
231
+ }
232
+ catch {
233
+ // Silently fail
234
+ }
235
+ }
236
+ // ─── Traces ────────────────────────────────────────
237
+ /** Add a trace span to the buffer */
238
+ addSpan(span) {
239
+ if (!this.enabled || this.isClosed)
240
+ return;
241
+ this.spanBuffer.push(span);
242
+ if (this.spanBuffer.length >= this.batchSize) {
243
+ this.flushSpans();
244
+ }
245
+ else {
246
+ this.scheduleSpanFlush();
247
+ }
248
+ }
249
+ scheduleSpanFlush() {
250
+ if (this.spanTimer)
251
+ return;
252
+ this.spanTimer = setTimeout(() => {
253
+ this.spanTimer = null;
254
+ this.flushSpans();
255
+ }, this.flushInterval);
256
+ }
257
+ async flushSpans() {
258
+ if (this.spanBuffer.length === 0)
259
+ return;
260
+ const batch = this.spanBuffer;
261
+ this.spanBuffer = [];
262
+ if (this.spanTimer) {
263
+ clearTimeout(this.spanTimer);
264
+ this.spanTimer = null;
265
+ }
266
+ await this.sendSpans(batch);
267
+ }
268
+ async sendSpans(spans) {
269
+ try {
270
+ const otlpSpans = spans.map((s) => ({
271
+ traceId: s.traceId,
272
+ spanId: s.spanId,
273
+ parentSpanId: s.parentSpanId,
274
+ name: s.name,
275
+ kind: s.kind ?? 1,
276
+ startTimeUnixNano: s.startTimeUnixNano,
277
+ endTimeUnixNano: s.endTimeUnixNano,
278
+ attributes: s.attributes ? toOtlpAttributes(s.attributes) : [],
279
+ status: s.status,
280
+ }));
281
+ const payload = {
282
+ resourceSpans: [{
283
+ resource: { attributes: this.buildResourceAttributes() },
284
+ scopeSpans: [{
285
+ scope: { name: '@abbacchio/browser-transport' },
286
+ spans: otlpSpans,
287
+ }],
288
+ }],
289
+ };
290
+ await this.post('/v1/traces', payload);
291
+ }
292
+ catch {
293
+ // Silently fail
294
+ }
295
+ }
296
+ // ─── Shared ────────────────────────────────────────
100
297
  async close() {
101
298
  this.isClosed = true;
102
299
  if (this.timer) {
103
300
  clearTimeout(this.timer);
104
301
  this.timer = null;
105
302
  }
303
+ if (this.metricTimer) {
304
+ clearTimeout(this.metricTimer);
305
+ this.metricTimer = null;
306
+ }
307
+ if (this.spanTimer) {
308
+ clearTimeout(this.spanTimer);
309
+ this.spanTimer = null;
310
+ }
106
311
  await this.flush();
107
312
  }
108
- /**
109
- * Update client configuration
110
- */
313
+ buildResourceAttributes() {
314
+ const attrs = [
315
+ { key: 'service.name', value: { stringValue: this.serviceName } },
316
+ ];
317
+ for (const [key, val] of Object.entries(this.resourceAttributes)) {
318
+ attrs.push({ key, value: { stringValue: val } });
319
+ }
320
+ return attrs;
321
+ }
322
+ async post(path, payload) {
323
+ let body = JSON.stringify(payload);
324
+ const headers = {
325
+ 'Content-Type': 'application/json',
326
+ ...this.headers,
327
+ };
328
+ if (this.secretKey) {
329
+ body = await encrypt(JSON.stringify(payload), this.secretKey);
330
+ headers['X-Encrypted'] = 'true';
331
+ }
332
+ await fetch(`${this.endpoint}${path}`, {
333
+ method: 'POST',
334
+ headers,
335
+ body,
336
+ });
337
+ }
338
+ /** Update client configuration */
111
339
  configure(options) {
112
- if (options.url !== undefined)
113
- this.url = options.url;
340
+ if (options.endpoint !== undefined)
341
+ this.endpoint = options.endpoint;
342
+ if (options.url !== undefined && !options.endpoint) {
343
+ try {
344
+ const u = new URL(options.url);
345
+ this.endpoint = `${u.protocol}//${u.host}`;
346
+ }
347
+ catch {
348
+ this.endpoint = options.url;
349
+ }
350
+ }
114
351
  if (options.secretKey !== undefined)
115
352
  this.secretKey = options.secretKey;
116
- if (options.channel !== undefined)
117
- this.channel = options.channel;
353
+ if (options.serviceName !== undefined)
354
+ this.serviceName = options.serviceName;
355
+ if (options.resourceAttributes !== undefined)
356
+ this.resourceAttributes = options.resourceAttributes;
357
+ if (options.enabled !== undefined)
358
+ this.enabled = options.enabled;
118
359
  if (options.batchSize !== undefined)
119
360
  this.batchSize = options.batchSize;
120
361
  if (options.flushInterval !== undefined)
@@ -124,7 +365,7 @@ export class AbbacchioClient {
124
365
  }
125
366
  }
126
367
  /**
127
- * Create a new Abbacchio client instance
368
+ * Create a new Abbacchio OTLP client instance
128
369
  */
129
370
  export function createClient(options) {
130
371
  return new AbbacchioClient(options);
@@ -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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"}
package/dist/console.d.ts CHANGED
@@ -1,6 +1,6 @@
1
1
  /**
2
- * Console interceptor for Abbacchio
3
- * Intercepts console.log, console.error, etc. and sends them to Abbacchio server
2
+ * Console interceptor for Abbacchio (OTLP native)
3
+ * Intercepts console.log, console.error, etc. and sends them via OTLP
4
4
  */
5
5
  import { type AbbacchioClientOptions } from './client.js';
6
6
  export interface ConsoleInterceptorOptions extends AbbacchioClientOptions {
@@ -14,6 +14,10 @@ export interface ConsoleInterceptorOptions extends AbbacchioClientOptions {
14
14
  includeUserAgent?: boolean;
15
15
  /** Capture stack traces for log location. Defaults to false */
16
16
  captureStackTrace?: boolean;
17
+ /** Capture uncaught JavaScript exceptions. Defaults to false */
18
+ captureErrors?: boolean;
19
+ /** Capture unhandled promise rejections. Defaults to false */
20
+ captureUnhandledRejections?: boolean;
17
21
  }
18
22
  declare const originalConsole: {
19
23
  log: {
@@ -37,25 +41,10 @@ declare const originalConsole: {
37
41
  (message?: any, ...optionalParams: any[]): void;
38
42
  };
39
43
  };
40
- /**
41
- * Start intercepting console methods
42
- */
43
44
  export declare function interceptConsole(opts?: ConsoleInterceptorOptions): void;
44
- /**
45
- * Stop intercepting console methods
46
- */
47
45
  export declare function stopInterceptConsole(): void;
48
- /**
49
- * Flush any buffered logs
50
- */
51
46
  export declare function flushConsole(): Promise<void>;
52
- /**
53
- * Check if console is currently being intercepted
54
- */
55
47
  export declare function isConsoleIntercepted(): boolean;
56
- /**
57
- * Get the original console methods (for internal use when passthrough is false)
58
- */
59
48
  export declare function getOriginalConsole(): typeof originalConsole;
60
49
  export {};
61
50
  //# sourceMappingURL=console.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"console.d.ts","sourceRoot":"","sources":["../src/console.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAmB,KAAK,sBAAsB,EAAiB,MAAM,aAAa,CAAC;AAE1F,MAAM,WAAW,yBAA0B,SAAQ,sBAAsB;IACvE,gEAAgE;IAChE,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,wEAAwE;IACxE,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,4DAA4D;IAC5D,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,4DAA4D;IAC5D,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,+DAA+D;IAC/D,iBAAiB,CAAC,EAAE,OAAO,CAAC;CAC7B;AAYD,QAAA,MAAM,eAAe;;;;;;;;;;;;;;;;;;;;;CAMpB,CAAC;AAkMF;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,GAAE,yBAA8B,GAAG,IAAI,CAoB3E;AAED;;GAEG;AACH,wBAAgB,oBAAoB,IAAI,IAAI,CAiB3C;AAED;;GAEG;AACH,wBAAsB,YAAY,IAAI,OAAO,CAAC,IAAI,CAAC,CAIlD;AAED;;GAEG;AACH,wBAAgB,oBAAoB,IAAI,OAAO,CAE9C;AAED;;GAEG;AACH,wBAAgB,kBAAkB,IAAI,OAAO,eAAe,CAE3D"}
1
+ {"version":3,"file":"console.d.ts","sourceRoot":"","sources":["../src/console.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAmB,KAAK,sBAAsB,EAAiB,MAAM,aAAa,CAAC;AAG1F,MAAM,WAAW,yBAA0B,SAAQ,sBAAsB;IACvE,gEAAgE;IAChE,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,wEAAwE;IACxE,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,4DAA4D;IAC5D,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,4DAA4D;IAC5D,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,+DAA+D;IAC/D,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,gEAAgE;IAChE,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,8DAA8D;IAC9D,0BAA0B,CAAC,EAAE,OAAO,CAAC;CACtC;AAUD,QAAA,MAAM,eAAe;;;;;;;;;;;;;;;;;;;;;CAMpB,CAAC;AA+IF,wBAAgB,gBAAgB,CAAC,IAAI,GAAE,yBAA8B,GAAG,IAAI,CA0B3E;AAED,wBAAgB,oBAAoB,IAAI,IAAI,CAe3C;AAED,wBAAsB,YAAY,IAAI,OAAO,CAAC,IAAI,CAAC,CAElD;AAED,wBAAgB,oBAAoB,IAAI,OAAO,CAE9C;AAED,wBAAgB,kBAAkB,IAAI,OAAO,eAAe,CAE3D"}