@obtrace/browser 2.2.0 → 2.4.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/browser/console.js +30 -6
- package/dist/browser/errors.js +51 -18
- package/dist/browser/index.js +45 -8
- package/dist/browser/resources.js +14 -9
- package/dist/browser/supabase-intercept.js +133 -0
- package/dist/browser/supabase.js +104 -0
- package/dist/browser_entry.bundle.js +2535 -419
- package/dist/browser_entry.bundle.js.map +4 -4
- package/dist/core/otel-web-setup.js +30 -3
- package/dist/types/browser/console.d.ts +2 -1
- package/dist/types/browser/errors.d.ts +2 -1
- package/dist/types/browser/supabase-intercept.d.ts +2 -0
- package/dist/types/browser/supabase.d.ts +12 -0
- package/dist/types/core/otel-web-setup.d.ts +2 -0
- package/package.json +3 -1
|
@@ -4,6 +4,8 @@ import { BatchSpanProcessor, TraceIdRatioBasedSampler, ParentBasedSampler } from
|
|
|
4
4
|
import { OTLPTraceExporter } from "@opentelemetry/exporter-trace-otlp-http";
|
|
5
5
|
import { MeterProvider, PeriodicExportingMetricReader } from "@opentelemetry/sdk-metrics";
|
|
6
6
|
import { OTLPMetricExporter } from "@opentelemetry/exporter-metrics-otlp-http";
|
|
7
|
+
import { LoggerProvider, BatchLogRecordProcessor } from "@opentelemetry/sdk-logs";
|
|
8
|
+
import { OTLPLogExporter } from "@opentelemetry/exporter-logs-otlp-http";
|
|
7
9
|
import { Resource } from "@opentelemetry/resources";
|
|
8
10
|
import { ATTR_SERVICE_NAME, ATTR_SERVICE_VERSION } from "@opentelemetry/semantic-conventions";
|
|
9
11
|
import { FetchInstrumentation } from "@opentelemetry/instrumentation-fetch";
|
|
@@ -12,6 +14,7 @@ import { DocumentLoadInstrumentation } from "@opentelemetry/instrumentation-docu
|
|
|
12
14
|
import { UserInteractionInstrumentation } from "@opentelemetry/instrumentation-user-interaction";
|
|
13
15
|
import { ZoneContextManager } from "@opentelemetry/context-zone";
|
|
14
16
|
import { registerInstrumentations } from "@opentelemetry/instrumentation";
|
|
17
|
+
import { enrichSupabaseSpan, isSupabaseURL } from "../browser/supabase";
|
|
15
18
|
export function setupOtelWeb(config) {
|
|
16
19
|
const baseUrl = (config.ingestBaseUrl || "https://ingest.obtrace.ai").replace(/\/$/, "");
|
|
17
20
|
const authHeaders = {
|
|
@@ -62,13 +65,32 @@ export function setupOtelWeb(config) {
|
|
|
62
65
|
],
|
|
63
66
|
});
|
|
64
67
|
metrics.setGlobalMeterProvider(meterProvider);
|
|
68
|
+
const logExporter = new OTLPLogExporter({
|
|
69
|
+
url: `${baseUrl}/otlp/v1/logs`,
|
|
70
|
+
headers: authHeaders,
|
|
71
|
+
});
|
|
72
|
+
const loggerProvider = new LoggerProvider({
|
|
73
|
+
resource: resource,
|
|
74
|
+
processors: [new BatchLogRecordProcessor(logExporter)],
|
|
75
|
+
});
|
|
65
76
|
const ingestPattern = new RegExp(`^${baseUrl.replace(/[.*+?^${}()|[\]\\]/g, "\\$&")}`);
|
|
66
77
|
const instrumentations = [];
|
|
78
|
+
const applySupabaseAttrs = (span, req, _result) => {
|
|
79
|
+
try {
|
|
80
|
+
const url = typeof req === "string" ? req : req instanceof URL ? req.href : req?.url || "";
|
|
81
|
+
const method = req?.method || "GET";
|
|
82
|
+
if (url && isSupabaseURL(url)) {
|
|
83
|
+
enrichSupabaseSpan(span, url, method);
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
catch { }
|
|
87
|
+
};
|
|
67
88
|
if (config.instrumentGlobalFetch !== false) {
|
|
68
89
|
instrumentations.push(new FetchInstrumentation({
|
|
69
90
|
propagateTraceHeaderCorsUrls: /.*/,
|
|
70
91
|
ignoreUrls: [ingestPattern],
|
|
71
92
|
clearTimingResources: true,
|
|
93
|
+
applyCustomAttributesOnSpan: applySupabaseAttrs,
|
|
72
94
|
}));
|
|
73
95
|
}
|
|
74
96
|
if (config.instrumentXHR !== false) {
|
|
@@ -84,8 +106,8 @@ export function setupOtelWeb(config) {
|
|
|
84
106
|
tracerProvider,
|
|
85
107
|
instrumentations,
|
|
86
108
|
});
|
|
87
|
-
const tracer = trace.getTracer("@obtrace/sdk-browser", "2.
|
|
88
|
-
const meter = metrics.getMeter("@obtrace/sdk-browser", "2.
|
|
109
|
+
const tracer = trace.getTracer("@obtrace/sdk-browser", "2.4.0");
|
|
110
|
+
const meter = metrics.getMeter("@obtrace/sdk-browser", "2.4.0");
|
|
89
111
|
const forceFlush = async () => {
|
|
90
112
|
try {
|
|
91
113
|
await tracerProvider.forceFlush();
|
|
@@ -95,11 +117,16 @@ export function setupOtelWeb(config) {
|
|
|
95
117
|
await meterProvider.forceFlush();
|
|
96
118
|
}
|
|
97
119
|
catch { }
|
|
120
|
+
try {
|
|
121
|
+
await loggerProvider.forceFlush();
|
|
122
|
+
}
|
|
123
|
+
catch { }
|
|
98
124
|
};
|
|
99
125
|
const shutdown = async () => {
|
|
100
126
|
await forceFlush();
|
|
101
127
|
await tracerProvider.shutdown();
|
|
102
128
|
await meterProvider.shutdown();
|
|
129
|
+
await loggerProvider.shutdown();
|
|
103
130
|
};
|
|
104
|
-
return { tracer, meter, shutdown, forceFlush };
|
|
131
|
+
return { tracer, meter, loggerProvider, shutdown, forceFlush };
|
|
105
132
|
}
|
|
@@ -1,2 +1,3 @@
|
|
|
1
1
|
import { type Tracer } from "@opentelemetry/api";
|
|
2
|
-
|
|
2
|
+
import type { Logger } from "@opentelemetry/api-logs";
|
|
3
|
+
export declare function installConsoleCapture(tracer: Tracer, logger: Logger, sessionId: string): () => void;
|
|
@@ -1,2 +1,3 @@
|
|
|
1
1
|
import { type Tracer } from "@opentelemetry/api";
|
|
2
|
-
|
|
2
|
+
import type { Logger } from "@opentelemetry/api-logs";
|
|
3
|
+
export declare function installBrowserErrorHooks(tracer: Tracer, logger: Logger, sessionId?: string): () => void;
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { type Span } from "@opentelemetry/api";
|
|
2
|
+
interface SupabaseParsed {
|
|
3
|
+
ref: string;
|
|
4
|
+
service: string;
|
|
5
|
+
operation: string;
|
|
6
|
+
table: string;
|
|
7
|
+
detail: string;
|
|
8
|
+
}
|
|
9
|
+
export declare function isSupabaseURL(url: string): boolean;
|
|
10
|
+
export declare function parseSupabaseURL(url: string, method: string): SupabaseParsed | null;
|
|
11
|
+
export declare function enrichSupabaseSpan(span: Span, url: string, method: string): void;
|
|
12
|
+
export {};
|
|
@@ -1,8 +1,10 @@
|
|
|
1
1
|
import { type Tracer, type Meter } from "@opentelemetry/api";
|
|
2
|
+
import { LoggerProvider } from "@opentelemetry/sdk-logs";
|
|
2
3
|
import type { ObtraceSDKConfig } from "../shared/types";
|
|
3
4
|
export interface OtelHandles {
|
|
4
5
|
tracer: Tracer;
|
|
5
6
|
meter: Meter;
|
|
7
|
+
loggerProvider: LoggerProvider;
|
|
6
8
|
shutdown: () => Promise<void>;
|
|
7
9
|
forceFlush: () => Promise<void>;
|
|
8
10
|
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@obtrace/browser",
|
|
3
|
-
"version": "2.
|
|
3
|
+
"version": "2.4.0",
|
|
4
4
|
"description": "Obtrace Browser SDK with frontend wrappers",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"license": "MIT",
|
|
@@ -66,6 +66,7 @@
|
|
|
66
66
|
"dependencies": {
|
|
67
67
|
"@opentelemetry/api": "^1.9.0",
|
|
68
68
|
"@opentelemetry/context-zone": "^1.30.0",
|
|
69
|
+
"@opentelemetry/exporter-logs-otlp-http": "^0.214.0",
|
|
69
70
|
"@opentelemetry/exporter-metrics-otlp-http": "^0.57.0",
|
|
70
71
|
"@opentelemetry/exporter-trace-otlp-http": "^0.57.0",
|
|
71
72
|
"@opentelemetry/instrumentation-document-load": "^0.43.0",
|
|
@@ -73,6 +74,7 @@
|
|
|
73
74
|
"@opentelemetry/instrumentation-user-interaction": "^0.43.0",
|
|
74
75
|
"@opentelemetry/instrumentation-xml-http-request": "^0.57.0",
|
|
75
76
|
"@opentelemetry/resources": "^1.30.0",
|
|
77
|
+
"@opentelemetry/sdk-logs": "^0.214.0",
|
|
76
78
|
"@opentelemetry/sdk-metrics": "^1.30.0",
|
|
77
79
|
"@opentelemetry/sdk-trace-web": "^1.30.0",
|
|
78
80
|
"@opentelemetry/semantic-conventions": "^1.30.0",
|