@dxos/observability 0.8.4-main.b97322e → 0.8.4-main.dedc0f3
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/lib/browser/{chunk-YEPQFAES.mjs → chunk-LJO63BXO.mjs} +2 -2
- package/dist/lib/browser/{chunk-YEPQFAES.mjs.map → chunk-LJO63BXO.mjs.map} +3 -3
- package/dist/lib/browser/{chunk-UG3VTDOH.mjs → chunk-MB7KKARJ.mjs} +75 -46
- package/dist/lib/browser/chunk-MB7KKARJ.mjs.map +7 -0
- package/dist/lib/browser/{chunk-MWTIKIBZ.mjs → chunk-VSEBD3XA.mjs} +42 -28
- package/dist/lib/browser/chunk-VSEBD3XA.mjs.map +7 -0
- package/dist/lib/browser/index.mjs +3 -3
- package/dist/lib/browser/meta.json +1 -1
- package/dist/lib/browser/observability-NZM3OOLO.mjs +10 -0
- package/dist/lib/browser/{otel-IRDZ7PES.mjs → otel-UHLVSR24.mjs} +118 -70
- package/dist/lib/browser/{otel-IRDZ7PES.mjs.map → otel-UHLVSR24.mjs.map} +3 -3
- package/dist/lib/browser/segment/index.mjs +2 -2
- package/dist/lib/browser/sentry/index.mjs +1 -1
- package/dist/lib/browser/{sentry-log-processor-N3QNOQ2O.mjs → sentry-log-processor-RG4CFVGL.mjs} +53 -39
- package/dist/lib/browser/{sentry-log-processor-N3QNOQ2O.mjs.map → sentry-log-processor-RG4CFVGL.mjs.map} +3 -3
- package/dist/lib/node-esm/{chunk-552KLA6Z.mjs → chunk-GOWQOSY6.mjs} +65 -38
- package/dist/lib/node-esm/chunk-GOWQOSY6.mjs.map +7 -0
- package/dist/lib/node-esm/{chunk-TEH6VIKV.mjs → chunk-QK5IUYVA.mjs} +2 -2
- package/dist/lib/node-esm/{chunk-TEH6VIKV.mjs.map → chunk-QK5IUYVA.mjs.map} +3 -3
- package/dist/lib/node-esm/{chunk-WLRNZ2S2.mjs → chunk-YLYRR73V.mjs} +75 -46
- package/dist/lib/{browser/chunk-UG3VTDOH.mjs.map → node-esm/chunk-YLYRR73V.mjs.map} +3 -3
- package/dist/lib/node-esm/index.mjs +3 -3
- package/dist/lib/node-esm/meta.json +1 -1
- package/dist/lib/node-esm/{observability-F2NNZIF6.mjs → observability-2CTGITMR.mjs} +4 -4
- package/dist/lib/node-esm/{otel-62HYJETM.mjs → otel-W6KWKVW5.mjs} +108 -60
- package/dist/lib/node-esm/{otel-62HYJETM.mjs.map → otel-W6KWKVW5.mjs.map} +3 -3
- package/dist/lib/node-esm/segment/index.mjs +2 -2
- package/dist/lib/node-esm/sentry/index.mjs +1 -1
- package/dist/lib/node-esm/{sentry-log-processor-FN6Y5TNI.mjs → sentry-log-processor-3BDS4BB4.mjs} +53 -39
- package/dist/lib/node-esm/{sentry-log-processor-FN6Y5TNI.mjs.map → sentry-log-processor-3BDS4BB4.mjs.map} +3 -3
- package/dist/types/src/helpers/browser-observability.d.ts.map +1 -1
- package/dist/types/src/helpers/browser-observability.js +4 -6
- package/dist/types/src/helpers/browser-observability.js.map +1 -1
- package/dist/types/src/helpers/common.js +1 -1
- package/dist/types/src/helpers/common.js.map +1 -1
- package/dist/types/src/helpers/map-spaces.js +5 -6
- package/dist/types/src/helpers/map-spaces.js.map +1 -1
- package/dist/types/src/helpers/node-observability.d.ts +1 -1
- package/dist/types/src/helpers/node-observability.d.ts.map +1 -1
- package/dist/types/src/helpers/node-observability.js +7 -11
- package/dist/types/src/helpers/node-observability.js.map +1 -1
- package/dist/types/src/helpers/setup-telemetry-listeners.d.ts.map +1 -1
- package/dist/types/src/helpers/setup-telemetry-listeners.js +4 -7
- package/dist/types/src/helpers/setup-telemetry-listeners.js.map +1 -1
- package/dist/types/src/observability.d.ts +1 -1
- package/dist/types/src/observability.d.ts.map +1 -1
- package/dist/types/src/observability.js +68 -59
- package/dist/types/src/observability.js.map +1 -1
- package/dist/types/src/otel/logs.d.ts.map +1 -1
- package/dist/types/src/otel/logs.js +20 -19
- package/dist/types/src/otel/logs.js.map +1 -1
- package/dist/types/src/otel/metrics.js +5 -2
- package/dist/types/src/otel/metrics.js.map +1 -1
- package/dist/types/src/otel/otel.js +1 -1
- package/dist/types/src/otel/otel.js.map +1 -1
- package/dist/types/src/otel/traces-browser.js +3 -1
- package/dist/types/src/otel/traces-browser.js.map +1 -1
- package/dist/types/src/otel/traces.js +2 -0
- package/dist/types/src/otel/traces.js.map +1 -1
- package/dist/types/src/segment/base.d.ts +1 -1
- package/dist/types/src/segment/base.d.ts.map +1 -1
- package/dist/types/src/segment/base.js +2 -1
- package/dist/types/src/segment/base.js.map +1 -1
- package/dist/types/src/segment/browser.d.ts +1 -1
- package/dist/types/src/segment/browser.d.ts.map +1 -1
- package/dist/types/src/segment/browser.js +6 -10
- package/dist/types/src/segment/browser.js.map +1 -1
- package/dist/types/src/segment/node.d.ts +1 -1
- package/dist/types/src/segment/node.d.ts.map +1 -1
- package/dist/types/src/segment/node.js +2 -1
- package/dist/types/src/segment/node.js.map +1 -1
- package/dist/types/src/sentry/browser.d.ts.map +1 -1
- package/dist/types/src/sentry/browser.js +4 -6
- package/dist/types/src/sentry/browser.js.map +1 -1
- package/dist/types/src/sentry/node.d.ts.map +1 -1
- package/dist/types/src/sentry/node.js +8 -13
- package/dist/types/src/sentry/node.js.map +1 -1
- package/dist/types/src/sentry/node.node.test.js +3 -5
- package/dist/types/src/sentry/node.node.test.js.map +1 -1
- package/dist/types/src/sentry/sentry-log-processor.d.ts.map +1 -1
- package/dist/types/src/sentry/sentry-log-processor.js +56 -63
- package/dist/types/src/sentry/sentry-log-processor.js.map +1 -1
- package/dist/types/src/sentry/sentry.node.test.js +1 -1
- package/dist/types/src/sentry/sentry.node.test.js.map +1 -1
- package/dist/types/tsconfig.tsbuildinfo +1 -1
- package/package.json +18 -15
- package/src/helpers/browser-observability.ts +2 -1
- package/src/helpers/node-observability.ts +3 -2
- package/src/helpers/setup-telemetry-listeners.ts +2 -1
- package/src/observability.ts +4 -4
- package/src/otel/logs.ts +2 -2
- package/src/otel/metrics.ts +1 -1
- package/src/otel/otel.ts +1 -1
- package/src/otel/traces-browser.ts +3 -3
- package/src/otel/traces.ts +2 -2
- package/src/segment/base.ts +1 -1
- package/src/segment/browser.ts +3 -2
- package/src/segment/node.ts +3 -2
- package/src/sentry/browser.ts +7 -7
- package/src/sentry/node.node.test.ts +2 -1
- package/src/sentry/node.ts +3 -3
- package/src/sentry/sentry-log-processor.ts +2 -2
- package/src/sentry/sentry.node.test.ts +2 -1
- package/dist/lib/browser/chunk-MWTIKIBZ.mjs.map +0 -7
- package/dist/lib/browser/observability-7LFMAZBF.mjs +0 -10
- package/dist/lib/node-esm/chunk-552KLA6Z.mjs.map +0 -7
- package/dist/lib/node-esm/chunk-WLRNZ2S2.mjs.map +0 -7
- /package/dist/lib/browser/{observability-7LFMAZBF.mjs.map → observability-NZM3OOLO.mjs.map} +0 -0
- /package/dist/lib/node-esm/{observability-F2NNZIF6.mjs.map → observability-2CTGITMR.mjs.map} +0 -0
package/dist/lib/browser/{sentry-log-processor-N3QNOQ2O.mjs → sentry-log-processor-RG4CFVGL.mjs}
RENAMED
|
@@ -2,17 +2,66 @@ import {
|
|
|
2
2
|
captureException,
|
|
3
3
|
captureMessage,
|
|
4
4
|
withScope
|
|
5
|
-
} from "./chunk-
|
|
5
|
+
} from "./chunk-LJO63BXO.mjs";
|
|
6
6
|
|
|
7
7
|
// src/sentry/sentry-log-processor.ts
|
|
8
8
|
import { InvariantViolation } from "@dxos/invariant";
|
|
9
9
|
import { LogLevel, shouldLog } from "@dxos/log";
|
|
10
10
|
import { CircularBuffer, getDebugName } from "@dxos/util";
|
|
11
|
+
function _define_property(obj, key, value) {
|
|
12
|
+
if (key in obj) {
|
|
13
|
+
Object.defineProperty(obj, key, {
|
|
14
|
+
value,
|
|
15
|
+
enumerable: true,
|
|
16
|
+
configurable: true,
|
|
17
|
+
writable: true
|
|
18
|
+
});
|
|
19
|
+
} else {
|
|
20
|
+
obj[key] = value;
|
|
21
|
+
}
|
|
22
|
+
return obj;
|
|
23
|
+
}
|
|
11
24
|
var MAX_LOG_BREADCRUMBS = 150;
|
|
12
25
|
var SentryLogProcessor = class {
|
|
26
|
+
addLogBreadcrumbsTo(event) {
|
|
27
|
+
var _event;
|
|
28
|
+
(_event = event).breadcrumbs ?? (_event.breadcrumbs = []);
|
|
29
|
+
for (const breadcrumb of this._breadcrumbs) {
|
|
30
|
+
event.breadcrumbs.push(breadcrumb);
|
|
31
|
+
}
|
|
32
|
+
event.breadcrumbs.sort((b1, b2) => {
|
|
33
|
+
if (b1.timestamp === void 0 || b2.timestamp === void 0) {
|
|
34
|
+
return b1.timestamp === b2.timestamp ? 0 : b1.timestamp === void 0 ? -1 : 1;
|
|
35
|
+
}
|
|
36
|
+
return b1.timestamp - b2.timestamp;
|
|
37
|
+
});
|
|
38
|
+
}
|
|
39
|
+
_addBreadcrumb(eventId, message, severity, context) {
|
|
40
|
+
const breadcrumb = {
|
|
41
|
+
type: "console",
|
|
42
|
+
level: severity,
|
|
43
|
+
event_id: eventId,
|
|
44
|
+
category: "log",
|
|
45
|
+
message,
|
|
46
|
+
data: context,
|
|
47
|
+
timestamp: Math.floor(Date.now() / 1e3)
|
|
48
|
+
};
|
|
49
|
+
const lastRecorded = this._breadcrumbs.getLast();
|
|
50
|
+
if (lastRecorded && lastRecorded.message === breadcrumb.message) {
|
|
51
|
+
const firstBreadcrumbData = lastRecorded.data?.firstBreadcrumbData ?? lastRecorded.data ?? {};
|
|
52
|
+
const mergedBreadcrumbCount = Number.isNaN(lastRecorded.data?.mergedBreadcrumbCount) ? 1 : Number(lastRecorded.data?.mergedBreadcrumbCount);
|
|
53
|
+
lastRecorded.data = {
|
|
54
|
+
mergedBreadcrumbCount: mergedBreadcrumbCount + 1,
|
|
55
|
+
firstBreadcrumbData,
|
|
56
|
+
lastBreadcrumbData: breadcrumb.data
|
|
57
|
+
};
|
|
58
|
+
return;
|
|
59
|
+
}
|
|
60
|
+
this._breadcrumbs.push(breadcrumb);
|
|
61
|
+
}
|
|
13
62
|
constructor() {
|
|
14
|
-
this
|
|
15
|
-
this
|
|
63
|
+
_define_property(this, "_breadcrumbs", new CircularBuffer(MAX_LOG_BREADCRUMBS));
|
|
64
|
+
_define_property(this, "logProcessor", (config, entry) => {
|
|
16
65
|
const { level, meta, error } = entry;
|
|
17
66
|
if (!shouldLog(entry, config.captureFilters) || meta?.S?.remoteSessionId) {
|
|
18
67
|
if (entry.level > LogLevel.DEBUG) {
|
|
@@ -63,43 +112,8 @@ var SentryLogProcessor = class {
|
|
|
63
112
|
const eventId = captureMessage(extendedMessage);
|
|
64
113
|
this._addBreadcrumb(eventId, extendedMessage, severity, entry.context);
|
|
65
114
|
});
|
|
66
|
-
};
|
|
67
|
-
}
|
|
68
|
-
addLogBreadcrumbsTo(event) {
|
|
69
|
-
event.breadcrumbs ??= [];
|
|
70
|
-
for (const breadcrumb of this._breadcrumbs) {
|
|
71
|
-
event.breadcrumbs.push(breadcrumb);
|
|
72
|
-
}
|
|
73
|
-
event.breadcrumbs.sort((b1, b2) => {
|
|
74
|
-
if (b1.timestamp === void 0 || b2.timestamp === void 0) {
|
|
75
|
-
return b1.timestamp === b2.timestamp ? 0 : b1.timestamp === void 0 ? -1 : 1;
|
|
76
|
-
}
|
|
77
|
-
return b1.timestamp - b2.timestamp;
|
|
78
115
|
});
|
|
79
116
|
}
|
|
80
|
-
_addBreadcrumb(eventId, message, severity, context) {
|
|
81
|
-
const breadcrumb = {
|
|
82
|
-
type: "console",
|
|
83
|
-
level: severity,
|
|
84
|
-
event_id: eventId,
|
|
85
|
-
category: "log",
|
|
86
|
-
message,
|
|
87
|
-
data: context,
|
|
88
|
-
timestamp: Math.floor(Date.now() / 1e3)
|
|
89
|
-
};
|
|
90
|
-
const lastRecorded = this._breadcrumbs.getLast();
|
|
91
|
-
if (lastRecorded && lastRecorded.message === breadcrumb.message) {
|
|
92
|
-
const firstBreadcrumbData = lastRecorded.data?.firstBreadcrumbData ?? lastRecorded.data ?? {};
|
|
93
|
-
const mergedBreadcrumbCount = Number.isNaN(lastRecorded.data?.mergedBreadcrumbCount) ? 1 : Number(lastRecorded.data?.mergedBreadcrumbCount);
|
|
94
|
-
lastRecorded.data = {
|
|
95
|
-
mergedBreadcrumbCount: mergedBreadcrumbCount + 1,
|
|
96
|
-
firstBreadcrumbData,
|
|
97
|
-
lastBreadcrumbData: breadcrumb.data
|
|
98
|
-
};
|
|
99
|
-
return;
|
|
100
|
-
}
|
|
101
|
-
this._breadcrumbs.push(breadcrumb);
|
|
102
|
-
}
|
|
103
117
|
};
|
|
104
118
|
var formatMessageForSentry = (entry) => {
|
|
105
119
|
const message = entry.message ?? (entry.error ? entry.error.message ?? String(entry.error) : "");
|
|
@@ -145,4 +159,4 @@ var getRelativeFilename = (filename) => {
|
|
|
145
159
|
export {
|
|
146
160
|
SentryLogProcessor
|
|
147
161
|
};
|
|
148
|
-
//# sourceMappingURL=sentry-log-processor-
|
|
162
|
+
//# sourceMappingURL=sentry-log-processor-RG4CFVGL.mjs.map
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../src/sentry/sentry-log-processor.ts"],
|
|
4
|
-
"sourcesContent": ["//\n// Copyright 2024 DXOS.org\n//\n\nimport type { Breadcrumb,
|
|
5
|
-
"mappings": ";;;;;;;AAMA,SAASA,0BAA0B;AACnC,SAAwCC,UAA6BC,iBAAiB;AACtF,SAASC,gBAAgBC,oBAAoB;AAI7C,IAAMC,sBAAsB;AAErB,IAAMC,qBAAN,MAAMA;
|
|
6
|
-
"names": ["InvariantViolation", "LogLevel", "shouldLog", "CircularBuffer", "getDebugName", "MAX_LOG_BREADCRUMBS", "SentryLogProcessor", "
|
|
4
|
+
"sourcesContent": ["//\n// Copyright 2024 DXOS.org\n//\n\nimport type { Breadcrumb, Event, SeverityLevel } from '@sentry/types';\n\nimport { InvariantViolation } from '@dxos/invariant';\nimport { type LogConfig, type LogEntry, LogLevel, type LogProcessor, shouldLog } from '@dxos/log';\nimport { CircularBuffer, getDebugName } from '@dxos/util';\n\nimport { captureException, captureMessage, withScope } from './node';\n\nconst MAX_LOG_BREADCRUMBS = 150;\n\nexport class SentryLogProcessor {\n private _breadcrumbs = new CircularBuffer<Breadcrumb>(MAX_LOG_BREADCRUMBS);\n\n public readonly logProcessor: LogProcessor = (config: LogConfig, entry: LogEntry) => {\n const { level, meta, error } = entry;\n // Don't forward logs from remote sessions.\n if (!shouldLog(entry, config.captureFilters) || meta?.S?.remoteSessionId) {\n if (entry.level > LogLevel.DEBUG) {\n this._addBreadcrumb(\n undefined,\n entry.message ?? (entry.error ? (entry.error.message ?? String(entry.error)) : ''),\n convertLevel(entry.level),\n undefined,\n );\n }\n return;\n }\n if (entry.level !== LogLevel.WARN && entry.level !== LogLevel.ERROR) {\n return;\n }\n\n // TODO(nf): add rate limiting to avoid spamming Sentry/consuming excessive quota.\n withScope((scope) => {\n const severity = convertLevel(level);\n scope.setLevel(severity);\n scope.setContext('dxoslog', entry.context ?? null);\n if (meta) {\n scope.setTag('transaction', `${getRelativeFilename(meta.F)}:${meta.L}`);\n\n if (meta.S?.hostSessionId) {\n scope.setTags({\n service_host_issue: true,\n service_host_session: meta.S?.hostSessionId,\n });\n }\n\n if (!Number.isNaN(meta.S?.uptimeSeconds)) {\n scope.setExtra('uptime_seconds', meta.S?.uptimeSeconds);\n }\n }\n\n const extendedMessage = formatMessageForSentry(entry);\n let capturedError = error;\n if (capturedError == null && entry.level === LogLevel.ERROR) {\n capturedError = Object.values(entry.context ?? {}).find((v): v is Error => v instanceof Error);\n }\n if (capturedError) {\n if (capturedError instanceof InvariantViolation) {\n scope.setExtra('invariant_violation', true);\n }\n const isMessageDifferentFromStackTrace = error == null;\n if (isMessageDifferentFromStackTrace) {\n scope.setExtra('message', extendedMessage);\n }\n const eventId = captureException(capturedError);\n this._addBreadcrumb(eventId, extendedMessage, severity, entry.context);\n return;\n }\n\n const message = entry.message ?? (entry.error ? (entry.error.message ?? String(entry.error)) : '');\n scope.setFingerprint([message]);\n const eventId = captureMessage(extendedMessage);\n this._addBreadcrumb(eventId, extendedMessage, severity, entry.context);\n });\n };\n\n public addLogBreadcrumbsTo(event: Event): void {\n event.breadcrumbs ??= [];\n for (const breadcrumb of this._breadcrumbs) {\n event.breadcrumbs.push(breadcrumb);\n }\n event.breadcrumbs.sort((b1, b2) => {\n if (b1.timestamp === undefined || b2.timestamp === undefined) {\n return b1.timestamp === b2.timestamp ? 0 : b1.timestamp === undefined ? -1 : 1;\n }\n return b1.timestamp - b2.timestamp;\n });\n }\n\n private _addBreadcrumb(\n eventId: string | undefined,\n message: string,\n severity: SeverityLevel,\n context: { [key: string]: any } | undefined,\n ): void {\n const breadcrumb: Breadcrumb = {\n type: 'console',\n level: severity,\n event_id: eventId,\n category: 'log',\n message,\n data: context,\n timestamp: Math.floor(Date.now() / 1000),\n };\n const lastRecorded = this._breadcrumbs.getLast();\n if (lastRecorded && lastRecorded.message === breadcrumb.message) {\n const firstBreadcrumbData = lastRecorded.data?.firstBreadcrumbData ?? lastRecorded.data ?? {};\n const mergedBreadcrumbCount = Number.isNaN(lastRecorded.data?.mergedBreadcrumbCount)\n ? 1\n : Number(lastRecorded.data?.mergedBreadcrumbCount);\n lastRecorded.data = {\n mergedBreadcrumbCount: mergedBreadcrumbCount + 1,\n firstBreadcrumbData,\n lastBreadcrumbData: breadcrumb.data,\n };\n return;\n }\n this._breadcrumbs.push(breadcrumb);\n }\n}\n\nconst formatMessageForSentry = (entry: LogEntry): string => {\n const message = entry.message ?? (entry.error ? (entry.error.message ?? String(entry.error)) : '');\n\n let scopePrefix: string | undefined;\n if (entry.meta?.S) {\n const scope = entry.meta?.S;\n scopePrefix = scope.name || getDebugName(scope);\n }\n if (scopePrefix == null) {\n return message;\n }\n\n const workerPrefix = entry.meta?.S?.hostSessionId ? '[worker] ' : '';\n return `${workerPrefix}${scopePrefix} ${message}`;\n};\n\nconst convertLevel = (level: LogLevel): SeverityLevel => {\n switch (level) {\n case LogLevel.ERROR:\n return 'error';\n case LogLevel.VERBOSE:\n return 'info';\n case LogLevel.INFO:\n return 'info';\n case LogLevel.WARN:\n return 'warning';\n case LogLevel.DEBUG:\n case LogLevel.TRACE:\n return 'debug';\n default:\n throw never(level);\n }\n};\n\nconst never = (_: never) => {\n return new Error('unhandled value');\n};\n\nconst getRelativeFilename = (filename: string) => {\n // TODO(burdon): Hack uses \"packages\" as an anchor (pre-parse NX?)\n // Including `packages/` part of the path so that excluded paths (e.g. from dist) are clickable in vscode.\n const match = filename.match(/.+\\/(packages\\/.+\\/.+)/);\n if (match) {\n const [, filePath] = match;\n return filePath;\n }\n\n return filename;\n};\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": ["InvariantViolation", "LogLevel", "shouldLog", "CircularBuffer", "getDebugName", "MAX_LOG_BREADCRUMBS", "SentryLogProcessor", "addLogBreadcrumbsTo", "event", "breadcrumbs", "breadcrumb", "_breadcrumbs", "push", "sort", "b1", "b2", "timestamp", "undefined", "_addBreadcrumb", "eventId", "message", "severity", "context", "type", "level", "event_id", "category", "data", "Math", "floor", "Date", "now", "lastRecorded", "getLast", "firstBreadcrumbData", "mergedBreadcrumbCount", "Number", "isNaN", "lastBreadcrumbData", "CircularBuffer", "logProcessor", "config", "entry", "meta", "error", "shouldLog", "captureFilters", "S", "remoteSessionId", "LogLevel", "DEBUG", "String", "convertLevel", "WARN", "ERROR", "withScope", "scope", "setLevel", "setContext", "setTag", "getRelativeFilename", "F", "L", "hostSessionId", "setTags", "service_host_issue", "service_host_session", "uptimeSeconds", "setExtra", "extendedMessage", "formatMessageForSentry", "capturedError", "Object", "values", "find", "v", "Error", "InvariantViolation", "isMessageDifferentFromStackTrace", "captureException", "setFingerprint", "captureMessage", "scopePrefix", "name", "getDebugName", "workerPrefix", "VERBOSE", "INFO", "TRACE", "never", "_", "filename", "match", "filePath"]
|
|
7
7
|
}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { createRequire } from 'node:module';const require = createRequire(import.meta.url);
|
|
2
2
|
import {
|
|
3
3
|
captureException
|
|
4
|
-
} from "./chunk-
|
|
4
|
+
} from "./chunk-QK5IUYVA.mjs";
|
|
5
5
|
|
|
6
6
|
// src/segment/node.ts
|
|
7
7
|
import { Analytics } from "@segment/analytics-node";
|
|
@@ -19,6 +19,19 @@ var TelemetryEvent = /* @__PURE__ */ function(TelemetryEvent2) {
|
|
|
19
19
|
}({});
|
|
20
20
|
|
|
21
21
|
// src/segment/base.ts
|
|
22
|
+
function _define_property(obj, key, value) {
|
|
23
|
+
if (key in obj) {
|
|
24
|
+
Object.defineProperty(obj, key, {
|
|
25
|
+
value,
|
|
26
|
+
enumerable: true,
|
|
27
|
+
configurable: true,
|
|
28
|
+
writable: true
|
|
29
|
+
});
|
|
30
|
+
} else {
|
|
31
|
+
obj[key] = value;
|
|
32
|
+
}
|
|
33
|
+
return obj;
|
|
34
|
+
}
|
|
22
35
|
var __dxlog_file = "/__w/dxos/dxos/packages/sdk/observability/src/segment/base.ts";
|
|
23
36
|
var getIdentityOptions = ({ did, installationId }) => {
|
|
24
37
|
if (!did && !installationId) {
|
|
@@ -35,9 +48,6 @@ var getIdentityOptions = ({ did, installationId }) => {
|
|
|
35
48
|
};
|
|
36
49
|
};
|
|
37
50
|
var AbstractSegmentTelemetry = class {
|
|
38
|
-
constructor(_getTags) {
|
|
39
|
-
this._getTags = _getTags;
|
|
40
|
-
}
|
|
41
51
|
createPageProps(options) {
|
|
42
52
|
const { properties, ...rest } = options;
|
|
43
53
|
return {
|
|
@@ -62,43 +72,35 @@ var AbstractSegmentTelemetry = class {
|
|
|
62
72
|
}
|
|
63
73
|
};
|
|
64
74
|
}
|
|
75
|
+
constructor(_getTags) {
|
|
76
|
+
_define_property(this, "_getTags", void 0);
|
|
77
|
+
this._getTags = _getTags;
|
|
78
|
+
}
|
|
65
79
|
};
|
|
66
80
|
|
|
67
81
|
// src/segment/node.ts
|
|
82
|
+
function _define_property2(obj, key, value) {
|
|
83
|
+
if (key in obj) {
|
|
84
|
+
Object.defineProperty(obj, key, {
|
|
85
|
+
value,
|
|
86
|
+
enumerable: true,
|
|
87
|
+
configurable: true,
|
|
88
|
+
writable: true
|
|
89
|
+
});
|
|
90
|
+
} else {
|
|
91
|
+
obj[key] = value;
|
|
92
|
+
}
|
|
93
|
+
return obj;
|
|
94
|
+
}
|
|
68
95
|
var __dxlog_file2 = "/__w/dxos/dxos/packages/sdk/observability/src/segment/node.ts";
|
|
69
96
|
var SegmentTelemetry = class extends AbstractSegmentTelemetry {
|
|
70
|
-
constructor({ apiKey, batchSize, getTags }) {
|
|
71
|
-
super(getTags);
|
|
72
|
-
try {
|
|
73
|
-
invariant(apiKey, "Missing API key.", {
|
|
74
|
-
F: __dxlog_file2,
|
|
75
|
-
L: 23,
|
|
76
|
-
S: this,
|
|
77
|
-
A: [
|
|
78
|
-
"apiKey",
|
|
79
|
-
"'Missing API key.'"
|
|
80
|
-
]
|
|
81
|
-
});
|
|
82
|
-
this._analytics = new Analytics({
|
|
83
|
-
writeKey: apiKey,
|
|
84
|
-
flushAt: batchSize
|
|
85
|
-
});
|
|
86
|
-
} catch (err) {
|
|
87
|
-
log2.catch("Failed to initialize telemetry", err, {
|
|
88
|
-
F: __dxlog_file2,
|
|
89
|
-
L: 29,
|
|
90
|
-
S: this,
|
|
91
|
-
C: (f, a) => f(...a)
|
|
92
|
-
});
|
|
93
|
-
}
|
|
94
|
-
}
|
|
95
97
|
identify(options) {
|
|
96
98
|
if (!this._analytics) {
|
|
97
99
|
log2("Analytics not initialized", {
|
|
98
100
|
action: "identify"
|
|
99
101
|
}, {
|
|
100
102
|
F: __dxlog_file2,
|
|
101
|
-
L:
|
|
103
|
+
L: 36,
|
|
102
104
|
S: this,
|
|
103
105
|
C: (f, a) => f(...a)
|
|
104
106
|
});
|
|
@@ -109,7 +111,7 @@ var SegmentTelemetry = class extends AbstractSegmentTelemetry {
|
|
|
109
111
|
} catch (err) {
|
|
110
112
|
log2.catch("Failed to identify", err, {
|
|
111
113
|
F: __dxlog_file2,
|
|
112
|
-
L:
|
|
114
|
+
L: 43,
|
|
113
115
|
S: this,
|
|
114
116
|
C: (f, a) => f(...a)
|
|
115
117
|
});
|
|
@@ -121,7 +123,7 @@ var SegmentTelemetry = class extends AbstractSegmentTelemetry {
|
|
|
121
123
|
action: "page"
|
|
122
124
|
}, {
|
|
123
125
|
F: __dxlog_file2,
|
|
124
|
-
L:
|
|
126
|
+
L: 49,
|
|
125
127
|
S: this,
|
|
126
128
|
C: (f, a) => f(...a)
|
|
127
129
|
});
|
|
@@ -132,7 +134,7 @@ var SegmentTelemetry = class extends AbstractSegmentTelemetry {
|
|
|
132
134
|
} catch (err) {
|
|
133
135
|
log2.catch("Failed to track page", err, {
|
|
134
136
|
F: __dxlog_file2,
|
|
135
|
-
L:
|
|
137
|
+
L: 56,
|
|
136
138
|
S: this,
|
|
137
139
|
C: (f, a) => f(...a)
|
|
138
140
|
});
|
|
@@ -144,7 +146,7 @@ var SegmentTelemetry = class extends AbstractSegmentTelemetry {
|
|
|
144
146
|
action: "track"
|
|
145
147
|
}, {
|
|
146
148
|
F: __dxlog_file2,
|
|
147
|
-
L:
|
|
149
|
+
L: 62,
|
|
148
150
|
S: this,
|
|
149
151
|
C: (f, a) => f(...a)
|
|
150
152
|
});
|
|
@@ -154,7 +156,7 @@ var SegmentTelemetry = class extends AbstractSegmentTelemetry {
|
|
|
154
156
|
options
|
|
155
157
|
}, {
|
|
156
158
|
F: __dxlog_file2,
|
|
157
|
-
L:
|
|
159
|
+
L: 66,
|
|
158
160
|
S: this,
|
|
159
161
|
C: (f, a) => f(...a)
|
|
160
162
|
});
|
|
@@ -163,7 +165,7 @@ var SegmentTelemetry = class extends AbstractSegmentTelemetry {
|
|
|
163
165
|
} catch (err) {
|
|
164
166
|
log2.catch("Failed to track action", err, {
|
|
165
167
|
F: __dxlog_file2,
|
|
166
|
-
L:
|
|
168
|
+
L: 70,
|
|
167
169
|
S: this,
|
|
168
170
|
C: (f, a) => f(...a)
|
|
169
171
|
});
|
|
@@ -175,7 +177,7 @@ var SegmentTelemetry = class extends AbstractSegmentTelemetry {
|
|
|
175
177
|
action: "flush"
|
|
176
178
|
}, {
|
|
177
179
|
F: __dxlog_file2,
|
|
178
|
-
L:
|
|
180
|
+
L: 76,
|
|
179
181
|
S: this,
|
|
180
182
|
C: (f, a) => f(...a)
|
|
181
183
|
});
|
|
@@ -193,10 +195,35 @@ var SegmentTelemetry = class extends AbstractSegmentTelemetry {
|
|
|
193
195
|
}
|
|
194
196
|
await this._analytics.closeAndFlush();
|
|
195
197
|
}
|
|
198
|
+
constructor({ apiKey, batchSize, getTags }) {
|
|
199
|
+
super(getTags), _define_property2(this, "_analytics", void 0);
|
|
200
|
+
try {
|
|
201
|
+
invariant(apiKey, "Missing API key.", {
|
|
202
|
+
F: __dxlog_file2,
|
|
203
|
+
L: 24,
|
|
204
|
+
S: this,
|
|
205
|
+
A: [
|
|
206
|
+
"apiKey",
|
|
207
|
+
"'Missing API key.'"
|
|
208
|
+
]
|
|
209
|
+
});
|
|
210
|
+
this._analytics = new Analytics({
|
|
211
|
+
writeKey: apiKey,
|
|
212
|
+
flushAt: batchSize
|
|
213
|
+
});
|
|
214
|
+
} catch (err) {
|
|
215
|
+
log2.catch("Failed to initialize telemetry", err, {
|
|
216
|
+
F: __dxlog_file2,
|
|
217
|
+
L: 30,
|
|
218
|
+
S: this,
|
|
219
|
+
C: (f, a) => f(...a)
|
|
220
|
+
});
|
|
221
|
+
}
|
|
222
|
+
}
|
|
196
223
|
};
|
|
197
224
|
|
|
198
225
|
export {
|
|
199
226
|
TelemetryEvent,
|
|
200
227
|
SegmentTelemetry
|
|
201
228
|
};
|
|
202
|
-
//# sourceMappingURL=chunk-
|
|
229
|
+
//# sourceMappingURL=chunk-GOWQOSY6.mjs.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../src/segment/node.ts", "../../../src/segment/base.ts", "../../../src/segment/types.ts"],
|
|
4
|
+
"sourcesContent": ["//\n// Copyright 2022 DXOS.org\n//\n\nimport { Analytics, type IdentifyParams } from '@segment/analytics-node';\n\nimport { invariant } from '@dxos/invariant';\nimport { log } from '@dxos/log';\n\nimport { captureException } from '../sentry';\n\nimport { AbstractSegmentTelemetry } from './base';\nimport type { PageOptions, SegmentTelemetryOptions, TrackOptions } from './types';\n\n/**\n * Node telemetry.\n */\nexport class SegmentTelemetry extends AbstractSegmentTelemetry {\n private _analytics?: Analytics;\n\n constructor({ apiKey, batchSize, getTags }: SegmentTelemetryOptions) {\n super(getTags);\n try {\n invariant(apiKey, 'Missing API key.');\n this._analytics = new Analytics({\n writeKey: apiKey,\n flushAt: batchSize,\n });\n } catch (err) {\n log.catch('Failed to initialize telemetry', err);\n }\n }\n\n identify(options: IdentifyParams): void {\n if (!this._analytics) {\n log('Analytics not initialized', { action: 'identify' });\n return;\n }\n\n try {\n this._analytics.identify(options);\n } catch (err) {\n log.catch('Failed to identify', err);\n }\n }\n\n page(options: PageOptions): void {\n if (!this._analytics) {\n log('Analytics not initialized', { action: 'page' });\n return;\n }\n\n try {\n this._analytics.page(this.createPageProps(options));\n } catch (err) {\n log.catch('Failed to track page', err);\n }\n }\n\n track(options: TrackOptions): void {\n if (!this._analytics) {\n log('Analytics not initialized', { action: 'track' });\n return;\n }\n\n log.info('sending event to telemetry', { options });\n try {\n this._analytics.track(this.createTrackProps(options));\n } catch (err) {\n log.catch('Failed to track action', err);\n }\n }\n\n async flush(): Promise<void> {\n if (!this._analytics) {\n log('Analytics not initialized', { action: 'flush' });\n return;\n }\n\n try {\n await this._analytics.flush();\n } catch (err) {\n // are these errors worth capturing?\n captureException(err);\n }\n }\n\n async close(): Promise<void> {\n if (!this._analytics) {\n return;\n }\n\n await this._analytics.closeAndFlush();\n }\n}\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport { type IdentifyParams, type PageParams, type TrackParams } from '@segment/analytics-node';\n\nimport { log } from '@dxos/log';\n\nimport {\n type IdentityOptions,\n type PageOptions,\n type SegmentIdentityOptions,\n type Tags,\n TelemetryEvent,\n type TrackOptions,\n} from './types';\n\n/**\n * NOTE: Segment provides a default ID if we don't provide one.\n */\nconst getIdentityOptions = ({ did, installationId }: IdentityOptions): SegmentIdentityOptions => {\n if (!did && !installationId) {\n log.warn('No telemetry identifier provided.');\n }\n\n return {\n userId: did,\n anonymousId: installationId,\n } as SegmentIdentityOptions;\n};\n\n/**\n * Base class for Node and BrowserSegment telemetry.\n */\nexport abstract class AbstractSegmentTelemetry {\n constructor(private readonly _getTags: () => Tags) {}\n\n abstract identify(options: IdentifyParams): void;\n\n abstract page(options: PageOptions): void;\n\n abstract track(options: TrackOptions): void;\n\n protected createPageProps(options: PageOptions): PageParams {\n const { properties, ...rest } = options;\n return {\n ...getIdentityOptions(options),\n ...rest,\n properties: {\n common: this._getTags(),\n custom: properties,\n },\n };\n }\n\n protected createTrackProps(options: TrackOptions): TrackParams {\n const { event, action, properties, ...rest } = options;\n return {\n ...getIdentityOptions(options),\n ...rest,\n event: event ?? TelemetryEvent.ACTION,\n properties: {\n action,\n common: this._getTags(),\n custom: properties,\n },\n };\n }\n}\n", "//\n// Copyright 2022 DXOS.org\n//\n\nexport type Tags = Record<string, string>;\n\nexport type SegmentTelemetryOptions = {\n apiKey?: string;\n batchSize?: number;\n enable?: boolean;\n getTags: () => Tags;\n};\n\n// Copied from @segment/analytics-node.\nexport type SegmentIdentityOptions =\n | { userId: string; anonymousId?: string }\n | { userId?: string; anonymousId: string };\n\n// TODO(burdon): Should require one or the other.\nexport type IdentityOptions = { did?: string; installationId?: string };\n\nexport type CommonOptions = IdentityOptions & {\n timestamp?: Date;\n properties?: Record<string, unknown>;\n};\n\n/**\n * Page views.\n * https://segment.com/docs/connections/sources/catalog/libraries/server/node/#page\n */\nexport type PageOptions = CommonOptions & {\n category?: string;\n name?: string;\n};\n\n/**\n * Track actions.\n * https://segment.com/docs/connections/sources/catalog/libraries/server/node/#track\n */\nexport type TrackOptions = CommonOptions & {\n event?: TelemetryEvent;\n action: string;\n};\n\n/**\n * Each event will be mapped to a different Postgres table via segment.\n */\nexport enum TelemetryEvent {\n /**\n * Use actions.\n */\n ACTION = 'action',\n /**\n * High-volume technical metrics.\n */\n METRICS = 'metrics',\n}\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": ["Analytics", "invariant", "log", "log", "TelemetryEvent", "getIdentityOptions", "did", "installationId", "log", "warn", "userId", "anonymousId", "AbstractSegmentTelemetry", "createPageProps", "options", "properties", "rest", "common", "_getTags", "custom", "createTrackProps", "event", "action", "TelemetryEvent", "ACTION", "SegmentTelemetry", "AbstractSegmentTelemetry", "identify", "options", "_analytics", "log", "action", "err", "catch", "page", "createPageProps", "track", "info", "createTrackProps", "flush", "captureException", "close", "closeAndFlush", "apiKey", "batchSize", "getTags", "_define_property", "invariant", "Analytics", "writeKey", "flushAt"]
|
|
7
|
+
}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { createRequire } from 'node:module';const require = createRequire(import.meta.url);
|
|
2
2
|
|
|
3
3
|
// src/sentry/node.ts
|
|
4
|
-
import {
|
|
4
|
+
import { metrics, addBreadcrumb as naturalAddBreadcrumb, captureException as naturalCaptureException, captureMessage as naturalCaptureMessage, init as naturalInit, withScope as naturalWithScope, setTag, startInactiveSpan } from "@sentry/node";
|
|
5
5
|
import { log } from "@dxos/log";
|
|
6
6
|
import { TRACE_PROCESSOR } from "@dxos/tracing";
|
|
7
7
|
import { setTag as setTag2, setTags, setUser } from "@sentry/node";
|
|
@@ -132,4 +132,4 @@ export {
|
|
|
132
132
|
setTags,
|
|
133
133
|
setUser
|
|
134
134
|
};
|
|
135
|
-
//# sourceMappingURL=chunk-
|
|
135
|
+
//# sourceMappingURL=chunk-QK5IUYVA.mjs.map
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../src/sentry/node.ts"],
|
|
4
|
-
"sourcesContent": ["//\n// Copyright 2022 DXOS.org\n//\n\nimport {\n type Event,\n
|
|
5
|
-
"mappings": ";;;AAIA,SAEEA,
|
|
6
|
-
"names": ["
|
|
4
|
+
"sourcesContent": ["//\n// Copyright 2022 DXOS.org\n//\n\nimport {\n type Event,\n metrics,\n addBreadcrumb as naturalAddBreadcrumb,\n captureException as naturalCaptureException,\n captureMessage as naturalCaptureMessage,\n init as naturalInit,\n withScope as naturalWithScope,\n setTag,\n startInactiveSpan,\n} from '@sentry/node';\n\nimport { log } from '@dxos/log';\nimport { TRACE_PROCESSOR } from '@dxos/tracing';\n\nimport { type InitOptions } from './types';\n\n// Polyfill export.\nexport { setTag, setTags, setUser } from '@sentry/node';\n\n/**\n * To use this SDK, call the init function as early as possible in the main entry module.\n * To set context information or send manual events, use the provided methods.\n *\n * @param options {InitOptions}\n */\nexport const init = (options: InitOptions) => {\n try {\n naturalInit({\n enabled: options.enable ?? true,\n dsn: options.destination,\n serverName: options.installationId,\n release: options.release,\n environment: options.environment ?? process.env.DX_ENVIRONMENT,\n integrations: [],\n tracesSampleRate: options.sampleRate,\n transport: options.transport,\n beforeSend: (event) => {\n options.scrubFilenames && scrub(event);\n options.onError?.(event);\n\n return event;\n },\n });\n\n if (options.tracing) {\n TRACE_PROCESSOR.remoteMetrics.registerProcessor(metrics);\n TRACE_PROCESSOR.remoteTracing.registerProcessor({\n startSpan: startInactiveSpan,\n });\n }\n\n Object.entries(options.properties ?? {}).forEach(([key, value]) => {\n setTag(key, value);\n });\n } catch (err) {\n log.catch('Failed to initialize sentry', err);\n }\n};\n\nconst scrub = (event: Event) => {\n event.exception?.values?.forEach((value) => {\n value.stacktrace?.frames?.forEach((frame) => {\n const filename = frame.filename?.split('/');\n frame.filename = filename && filename[filename.length - 1];\n });\n });\n};\n\n/**\n * Records a new breadcrumb which will be attached to future events.\n *\n * Breadcrumbs will be added to subsequent events to provide more context on user's actions prior to an error or crash.\n *\n * https://docs.sentry.io/platforms/javascript/enriching-events/breadcrumbs/\n *\n * @param breadcrumb — The breadcrumb to record.\n */\nexport const addBreadcrumb: typeof naturalAddBreadcrumb = (breadcrumb) => {\n try {\n naturalAddBreadcrumb(breadcrumb);\n log('add breadcrumb', breadcrumb);\n } catch (err) {\n log.catch('Failed to add breadcrumb', err);\n }\n};\n\n/**\n * Captures an exception event and sends it to Sentry.\n *\n * @param exception — An exception-like object.\n * @param captureContext — Additional scope data to apply to exception event.\n * @returns — The generated eventId.\n */\nexport const captureException: typeof naturalCaptureException = (exception, captureContext) => {\n try {\n const eventId = naturalCaptureException(exception, captureContext);\n log('capture exception', { exception, eventId, ...captureContext });\n return eventId;\n } catch (err) {\n log.catch('Failed to capture exception', err);\n return 'unknown';\n }\n};\n\nexport const captureMessage: typeof naturalCaptureMessage = (exception, captureContext) => {\n try {\n const eventId = naturalCaptureMessage(exception, captureContext);\n log('capture message', { exception, eventId, captureContext });\n return eventId;\n } catch (err) {\n log.catch('Failed to capture message', err);\n return 'unknown';\n }\n};\n\nexport const captureUserFeedback = (message: string): Promise<void> => {\n const feedback = `User feedback: ${message}`;\n throw new Error(`Capture user feedback not implemented in node. Use @sentry/browser. Message: ${feedback}`);\n};\n\nexport const withScope = naturalWithScope;\n"],
|
|
5
|
+
"mappings": ";;;AAIA,SAEEA,SACAC,iBAAiBC,sBACjBC,oBAAoBC,yBACpBC,kBAAkBC,uBAClBC,QAAQC,aACRC,aAAaC,kBACbC,QACAC,yBACK;AAEP,SAASC,WAAW;AACpB,SAASC,uBAAuB;AAKhC,SAASH,UAAAA,SAAQI,SAASC,eAAe;;AAQlC,IAAMT,OAAO,CAACU,YAAAA;AACnB,MAAI;AACFT,gBAAY;MACVU,SAASD,QAAQE,UAAU;MAC3BC,KAAKH,QAAQI;MACbC,YAAYL,QAAQM;MACpBC,SAASP,QAAQO;MACjBC,aAAaR,QAAQQ,eAAeC,QAAQC,IAAIC;MAChDC,cAAc,CAAA;MACdC,kBAAkBb,QAAQc;MAC1BC,WAAWf,QAAQe;MACnBC,YAAY,CAACC,UAAAA;AACXjB,gBAAQkB,kBAAkBC,MAAMF,KAAAA;AAChCjB,gBAAQoB,UAAUH,KAAAA;AAElB,eAAOA;MACT;IACF,CAAA;AAEA,QAAIjB,QAAQqB,SAAS;AACnBxB,sBAAgByB,cAAcC,kBAAkBxC,OAAAA;AAChDc,sBAAgB2B,cAAcD,kBAAkB;QAC9CE,WAAW9B;MACb,CAAA;IACF;AAEA+B,WAAOC,QAAQ3B,QAAQ4B,cAAc,CAAC,CAAA,EAAGC,QAAQ,CAAC,CAACC,KAAKC,KAAAA,MAAM;AAC5DrC,aAAOoC,KAAKC,KAAAA;IACd,CAAA;EACF,SAASC,KAAK;AACZpC,QAAIqC,MAAM,+BAA+BD,KAAAA;;;;;;EAC3C;AACF;AAEA,IAAMb,QAAQ,CAACF,UAAAA;AACbA,QAAMiB,WAAWC,QAAQN,QAAQ,CAACE,UAAAA;AAChCA,UAAMK,YAAYC,QAAQR,QAAQ,CAACS,UAAAA;AACjC,YAAMC,WAAWD,MAAMC,UAAUC,MAAM,GAAA;AACvCF,YAAMC,WAAWA,YAAYA,SAASA,SAASE,SAAS,CAAA;IAC1D,CAAA;EACF,CAAA;AACF;AAWO,IAAMzD,gBAA6C,CAAC0D,eAAAA;AACzD,MAAI;AACFzD,yBAAqByD,UAAAA;AACrB9C,QAAI,kBAAkB8C,YAAAA;;;;;;EACxB,SAASV,KAAK;AACZpC,QAAIqC,MAAM,4BAA4BD,KAAAA;;;;;;EACxC;AACF;AASO,IAAM9C,mBAAmD,CAACgD,WAAWS,mBAAAA;AAC1E,MAAI;AACF,UAAMC,UAAUzD,wBAAwB+C,WAAWS,cAAAA;AACnD/C,QAAI,qBAAqB;MAAEsC;MAAWU;MAAS,GAAGD;IAAe,GAAA;;;;;;AACjE,WAAOC;EACT,SAASZ,KAAK;AACZpC,QAAIqC,MAAM,+BAA+BD,KAAAA;;;;;;AACzC,WAAO;EACT;AACF;AAEO,IAAM5C,iBAA+C,CAAC8C,WAAWS,mBAAAA;AACtE,MAAI;AACF,UAAMC,UAAUvD,sBAAsB6C,WAAWS,cAAAA;AACjD/C,QAAI,mBAAmB;MAAEsC;MAAWU;MAASD;IAAe,GAAA;;;;;;AAC5D,WAAOC;EACT,SAASZ,KAAK;AACZpC,QAAIqC,MAAM,6BAA6BD,KAAAA;;;;;;AACvC,WAAO;EACT;AACF;AAEO,IAAMa,sBAAsB,CAACC,YAAAA;AAClC,QAAMC,WAAW,kBAAkBD,OAAAA;AACnC,QAAM,IAAIE,MAAM,gFAAgFD,QAAAA,EAAU;AAC5G;AAEO,IAAMvD,YAAYC;",
|
|
6
|
+
"names": ["metrics", "addBreadcrumb", "naturalAddBreadcrumb", "captureException", "naturalCaptureException", "captureMessage", "naturalCaptureMessage", "init", "naturalInit", "withScope", "naturalWithScope", "setTag", "startInactiveSpan", "log", "TRACE_PROCESSOR", "setTags", "setUser", "options", "enabled", "enable", "dsn", "destination", "serverName", "installationId", "release", "environment", "process", "env", "DX_ENVIRONMENT", "integrations", "tracesSampleRate", "sampleRate", "transport", "beforeSend", "event", "scrubFilenames", "scrub", "onError", "tracing", "remoteMetrics", "registerProcessor", "remoteTracing", "startSpan", "Object", "entries", "properties", "forEach", "key", "value", "err", "catch", "exception", "values", "stacktrace", "frames", "frame", "filename", "split", "length", "breadcrumb", "captureContext", "eventId", "captureUserFeedback", "message", "feedback", "Error"]
|
|
7
7
|
}
|