@dxos/observability 0.8.4-main.b97322e → 0.8.4-main.bc674ce

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.
Files changed (158) hide show
  1. package/dist/lib/browser/{chunk-MWTIKIBZ.mjs → chunk-5LN7D6GM.mjs} +14 -13
  2. package/dist/lib/browser/chunk-5LN7D6GM.mjs.map +7 -0
  3. package/dist/lib/browser/{chunk-UG3VTDOH.mjs → chunk-JJQT5TQH.mjs} +85 -409
  4. package/dist/lib/browser/chunk-JJQT5TQH.mjs.map +7 -0
  5. package/dist/lib/browser/{chunk-YEPQFAES.mjs → chunk-O4BG5MRL.mjs} +2 -2
  6. package/dist/lib/browser/chunk-O4BG5MRL.mjs.map +7 -0
  7. package/dist/lib/browser/chunk-U6JWT3E2.mjs +1 -0
  8. package/dist/lib/browser/chunk-VL6LVQPU.mjs +69 -0
  9. package/dist/lib/browser/chunk-VL6LVQPU.mjs.map +7 -0
  10. package/dist/lib/browser/index.mjs +341 -15
  11. package/dist/lib/browser/index.mjs.map +4 -4
  12. package/dist/lib/browser/meta.json +1 -1
  13. package/dist/lib/browser/observability-XK652NZG.mjs +11 -0
  14. package/dist/lib/browser/otel/traces-browser.mjs +7 -0
  15. package/dist/lib/browser/otel/traces-browser.mjs.map +7 -0
  16. package/dist/lib/browser/otel/traces.mjs +7 -0
  17. package/dist/lib/browser/otel/traces.mjs.map +7 -0
  18. package/dist/lib/browser/{otel-IRDZ7PES.mjs → otel-DI4ASU7Y.mjs} +44 -95
  19. package/dist/lib/browser/otel-DI4ASU7Y.mjs.map +7 -0
  20. package/dist/lib/browser/segment/browser.mjs +9 -0
  21. package/dist/lib/browser/segment/browser.mjs.map +7 -0
  22. package/dist/lib/browser/segment/index.mjs +3 -2
  23. package/dist/lib/browser/segment/node.mjs +9 -0
  24. package/dist/lib/browser/segment/node.mjs.map +7 -0
  25. package/dist/lib/browser/sentry/browser.mjs +23 -0
  26. package/dist/lib/browser/sentry/browser.mjs.map +7 -0
  27. package/dist/lib/browser/sentry/index.mjs +1 -1
  28. package/dist/lib/browser/sentry/node.mjs +23 -0
  29. package/dist/lib/browser/sentry/node.mjs.map +7 -0
  30. package/dist/lib/browser/{sentry-log-processor-N3QNOQ2O.mjs → sentry-log-processor-W7LI6WXA.mjs} +50 -52
  31. package/dist/lib/browser/sentry-log-processor-W7LI6WXA.mjs.map +7 -0
  32. package/dist/lib/node-esm/{chunk-WLRNZ2S2.mjs → chunk-KKNY7TRV.mjs} +85 -409
  33. package/dist/lib/node-esm/chunk-KKNY7TRV.mjs.map +7 -0
  34. package/dist/lib/node-esm/chunk-KLJGCUYA.mjs +2 -0
  35. package/dist/lib/node-esm/chunk-KLJGCUYA.mjs.map +7 -0
  36. package/dist/lib/node-esm/chunk-KVJTNW3F.mjs +147 -0
  37. package/dist/lib/node-esm/chunk-KVJTNW3F.mjs.map +7 -0
  38. package/dist/lib/node-esm/{chunk-TEH6VIKV.mjs → chunk-M4627SMT.mjs} +2 -2
  39. package/dist/lib/node-esm/{chunk-TEH6VIKV.mjs.map → chunk-M4627SMT.mjs.map} +3 -3
  40. package/dist/lib/node-esm/chunk-UIVXGEGJ.mjs +62 -0
  41. package/dist/lib/node-esm/chunk-UIVXGEGJ.mjs.map +7 -0
  42. package/dist/lib/node-esm/chunk-WAGGA7IT.mjs +52 -0
  43. package/dist/lib/node-esm/chunk-WAGGA7IT.mjs.map +7 -0
  44. package/dist/lib/node-esm/index.mjs +342 -15
  45. package/dist/lib/node-esm/index.mjs.map +4 -4
  46. package/dist/lib/node-esm/meta.json +1 -1
  47. package/dist/lib/node-esm/observability-CXQ3CZGB.mjs +13 -0
  48. package/dist/lib/node-esm/observability-CXQ3CZGB.mjs.map +7 -0
  49. package/dist/lib/node-esm/otel/traces-browser.mjs +70 -0
  50. package/dist/lib/node-esm/otel/traces-browser.mjs.map +7 -0
  51. package/dist/lib/node-esm/otel/traces.mjs +8 -0
  52. package/dist/lib/node-esm/otel/traces.mjs.map +7 -0
  53. package/dist/lib/node-esm/{otel-62HYJETM.mjs → otel-JFXO22WD.mjs} +43 -76
  54. package/dist/lib/node-esm/otel-JFXO22WD.mjs.map +7 -0
  55. package/dist/lib/node-esm/segment/browser.mjs +92 -0
  56. package/dist/lib/node-esm/segment/browser.mjs.map +7 -0
  57. package/dist/lib/node-esm/segment/index.mjs +6 -3
  58. package/dist/lib/node-esm/segment/node.mjs +11 -0
  59. package/dist/lib/node-esm/segment/node.mjs.map +7 -0
  60. package/dist/lib/node-esm/sentry/browser.mjs +165 -0
  61. package/dist/lib/node-esm/sentry/browser.mjs.map +7 -0
  62. package/dist/lib/node-esm/sentry/index.mjs +1 -1
  63. package/dist/lib/node-esm/sentry/node.mjs +24 -0
  64. package/dist/lib/node-esm/sentry/node.mjs.map +7 -0
  65. package/dist/lib/node-esm/{sentry-log-processor-FN6Y5TNI.mjs → sentry-log-processor-W3SG4RQL.mjs} +50 -52
  66. package/dist/lib/node-esm/sentry-log-processor-W3SG4RQL.mjs.map +7 -0
  67. package/dist/types/src/helpers/browser-observability.d.ts.map +1 -1
  68. package/dist/types/src/helpers/browser-observability.js +4 -6
  69. package/dist/types/src/helpers/browser-observability.js.map +1 -1
  70. package/dist/types/src/helpers/common.js +1 -1
  71. package/dist/types/src/helpers/common.js.map +1 -1
  72. package/dist/types/src/helpers/map-spaces.js +6 -7
  73. package/dist/types/src/helpers/map-spaces.js.map +1 -1
  74. package/dist/types/src/helpers/node-observability.d.ts +1 -1
  75. package/dist/types/src/helpers/node-observability.d.ts.map +1 -1
  76. package/dist/types/src/helpers/node-observability.js +7 -11
  77. package/dist/types/src/helpers/node-observability.js.map +1 -1
  78. package/dist/types/src/helpers/setup-telemetry-listeners.d.ts.map +1 -1
  79. package/dist/types/src/helpers/setup-telemetry-listeners.js +4 -7
  80. package/dist/types/src/helpers/setup-telemetry-listeners.js.map +1 -1
  81. package/dist/types/src/observability.d.ts +1 -1
  82. package/dist/types/src/observability.d.ts.map +1 -1
  83. package/dist/types/src/observability.js +68 -59
  84. package/dist/types/src/observability.js.map +1 -1
  85. package/dist/types/src/otel/logs.d.ts.map +1 -1
  86. package/dist/types/src/otel/logs.js +26 -23
  87. package/dist/types/src/otel/logs.js.map +1 -1
  88. package/dist/types/src/otel/metrics.d.ts +0 -1
  89. package/dist/types/src/otel/metrics.d.ts.map +1 -1
  90. package/dist/types/src/otel/metrics.js +6 -4
  91. package/dist/types/src/otel/metrics.js.map +1 -1
  92. package/dist/types/src/otel/otel.js +1 -1
  93. package/dist/types/src/otel/otel.js.map +1 -1
  94. package/dist/types/src/otel/traces-browser.d.ts.map +1 -1
  95. package/dist/types/src/otel/traces-browser.js +19 -13
  96. package/dist/types/src/otel/traces-browser.js.map +1 -1
  97. package/dist/types/src/otel/traces.d.ts.map +1 -1
  98. package/dist/types/src/otel/traces.js +18 -12
  99. package/dist/types/src/otel/traces.js.map +1 -1
  100. package/dist/types/src/segment/base.d.ts +3 -3
  101. package/dist/types/src/segment/base.d.ts.map +1 -1
  102. package/dist/types/src/segment/base.js +4 -3
  103. package/dist/types/src/segment/base.js.map +1 -1
  104. package/dist/types/src/segment/browser.d.ts +1 -1
  105. package/dist/types/src/segment/browser.d.ts.map +1 -1
  106. package/dist/types/src/segment/browser.js +8 -12
  107. package/dist/types/src/segment/browser.js.map +1 -1
  108. package/dist/types/src/segment/node.d.ts +1 -1
  109. package/dist/types/src/segment/node.d.ts.map +1 -1
  110. package/dist/types/src/segment/node.js +4 -3
  111. package/dist/types/src/segment/node.js.map +1 -1
  112. package/dist/types/src/sentry/browser.d.ts.map +1 -1
  113. package/dist/types/src/sentry/browser.js +5 -7
  114. package/dist/types/src/sentry/browser.js.map +1 -1
  115. package/dist/types/src/sentry/node.d.ts.map +1 -1
  116. package/dist/types/src/sentry/node.js +8 -13
  117. package/dist/types/src/sentry/node.js.map +1 -1
  118. package/dist/types/src/sentry/node.node.test.js +3 -5
  119. package/dist/types/src/sentry/node.node.test.js.map +1 -1
  120. package/dist/types/src/sentry/sentry-log-processor.d.ts.map +1 -1
  121. package/dist/types/src/sentry/sentry-log-processor.js +56 -63
  122. package/dist/types/src/sentry/sentry-log-processor.js.map +1 -1
  123. package/dist/types/src/sentry/sentry.node.test.js +1 -1
  124. package/dist/types/src/sentry/sentry.node.test.js.map +1 -1
  125. package/dist/types/tsconfig.tsbuildinfo +1 -1
  126. package/package.json +35 -34
  127. package/src/helpers/browser-observability.ts +2 -1
  128. package/src/helpers/map-spaces.ts +1 -1
  129. package/src/helpers/node-observability.ts +3 -2
  130. package/src/helpers/setup-telemetry-listeners.ts +2 -1
  131. package/src/observability.ts +4 -4
  132. package/src/otel/logs.ts +9 -7
  133. package/src/otel/metrics.ts +5 -12
  134. package/src/otel/otel.ts +1 -1
  135. package/src/otel/traces-browser.ts +23 -20
  136. package/src/otel/traces.ts +22 -19
  137. package/src/segment/base.ts +3 -3
  138. package/src/segment/browser.ts +5 -4
  139. package/src/segment/node.ts +5 -4
  140. package/src/sentry/browser.ts +8 -8
  141. package/src/sentry/node.node.test.ts +2 -1
  142. package/src/sentry/node.ts +3 -3
  143. package/src/sentry/sentry-log-processor.ts +4 -2
  144. package/src/sentry/sentry.node.test.ts +2 -1
  145. package/dist/lib/browser/chunk-MWTIKIBZ.mjs.map +0 -7
  146. package/dist/lib/browser/chunk-UG3VTDOH.mjs.map +0 -7
  147. package/dist/lib/browser/chunk-YEPQFAES.mjs.map +0 -7
  148. package/dist/lib/browser/observability-7LFMAZBF.mjs +0 -10
  149. package/dist/lib/browser/otel-IRDZ7PES.mjs.map +0 -7
  150. package/dist/lib/browser/sentry-log-processor-N3QNOQ2O.mjs.map +0 -7
  151. package/dist/lib/node-esm/chunk-552KLA6Z.mjs +0 -202
  152. package/dist/lib/node-esm/chunk-552KLA6Z.mjs.map +0 -7
  153. package/dist/lib/node-esm/chunk-WLRNZ2S2.mjs.map +0 -7
  154. package/dist/lib/node-esm/observability-F2NNZIF6.mjs +0 -11
  155. package/dist/lib/node-esm/otel-62HYJETM.mjs.map +0 -7
  156. package/dist/lib/node-esm/sentry-log-processor-FN6Y5TNI.mjs.map +0 -7
  157. /package/dist/lib/browser/{observability-7LFMAZBF.mjs.map → chunk-U6JWT3E2.mjs.map} +0 -0
  158. /package/dist/lib/{node-esm/observability-F2NNZIF6.mjs.map → browser/observability-XK652NZG.mjs.map} +0 -0
@@ -0,0 +1,70 @@
1
+ import { createRequire } from 'node:module';const require = createRequire(import.meta.url);
2
+
3
+ // src/otel/traces-browser.ts
4
+ import { trace } from "@opentelemetry/api";
5
+ import { getWebAutoInstrumentations } from "@opentelemetry/auto-instrumentations-web";
6
+ import { OTLPTraceExporter } from "@opentelemetry/exporter-trace-otlp-http";
7
+ import { registerInstrumentations } from "@opentelemetry/instrumentation";
8
+ import { defaultResource, resourceFromAttributes } from "@opentelemetry/resources";
9
+ import { BatchSpanProcessor, ConsoleSpanExporter, SimpleSpanProcessor } from "@opentelemetry/sdk-trace-base";
10
+ import { WebTracerProvider } from "@opentelemetry/sdk-trace-web";
11
+ import { SEMRESATTRS_SERVICE_NAME, SEMRESATTRS_SERVICE_VERSION } from "@opentelemetry/semantic-conventions";
12
+ import { log } from "@dxos/log";
13
+ import { TRACE_PROCESSOR } from "@dxos/tracing";
14
+ var __dxlog_file = "/__w/dxos/dxos/packages/sdk/observability/src/otel/traces-browser.ts";
15
+ var OtelTraces = class {
16
+ options;
17
+ _tracer;
18
+ constructor(options) {
19
+ this.options = options;
20
+ const resource = defaultResource().merge(resourceFromAttributes({
21
+ [SEMRESATTRS_SERVICE_NAME]: this.options.serviceName,
22
+ [SEMRESATTRS_SERVICE_VERSION]: this.options.serviceVersion
23
+ }));
24
+ const tracerProvider = new WebTracerProvider({
25
+ resource,
26
+ spanProcessors: [
27
+ new SimpleSpanProcessor(new ConsoleSpanExporter()),
28
+ new BatchSpanProcessor(new OTLPTraceExporter({
29
+ url: this.options.endpoint + "/v1/traces",
30
+ headers: {
31
+ Authorization: this.options.authorizationHeader
32
+ },
33
+ concurrencyLimit: 10
34
+ }))
35
+ ]
36
+ });
37
+ trace.setGlobalTracerProvider(tracerProvider);
38
+ this._tracer = trace.getTracer("dxos-observability", this.options.serviceVersion);
39
+ }
40
+ start() {
41
+ registerInstrumentations({
42
+ instrumentations: [
43
+ getWebAutoInstrumentations()
44
+ ]
45
+ });
46
+ log("trace processor registered", void 0, {
47
+ F: __dxlog_file,
48
+ L: 54,
49
+ S: this,
50
+ C: (f, a) => f(...a)
51
+ });
52
+ TRACE_PROCESSOR.remoteTracing.registerProcessor({
53
+ startSpan: (options) => {
54
+ log("begin otel trace", {
55
+ options
56
+ }, {
57
+ F: __dxlog_file,
58
+ L: 57,
59
+ S: this,
60
+ C: (f, a) => f(...a)
61
+ });
62
+ return this._tracer.startSpan(options.name, options);
63
+ }
64
+ });
65
+ }
66
+ };
67
+ export {
68
+ OtelTraces
69
+ };
70
+ //# sourceMappingURL=traces-browser.mjs.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../../src/otel/traces-browser.ts"],
4
+ "sourcesContent": ["//\n// Copyright 2024 DXOS.org\n//\n\nimport { type Tracer, trace } from '@opentelemetry/api';\nimport { getWebAutoInstrumentations } from '@opentelemetry/auto-instrumentations-web';\nimport { OTLPTraceExporter } from '@opentelemetry/exporter-trace-otlp-http';\nimport { registerInstrumentations } from '@opentelemetry/instrumentation';\nimport { defaultResource, resourceFromAttributes } from '@opentelemetry/resources';\nimport { BatchSpanProcessor, ConsoleSpanExporter, SimpleSpanProcessor } from '@opentelemetry/sdk-trace-base';\nimport { WebTracerProvider } from '@opentelemetry/sdk-trace-web';\nimport { SEMRESATTRS_SERVICE_NAME, SEMRESATTRS_SERVICE_VERSION } from '@opentelemetry/semantic-conventions';\n\nimport { log } from '@dxos/log';\nimport { type StartSpanOptions, TRACE_PROCESSOR } from '@dxos/tracing';\n\nimport { type OtelOptions } from './otel';\n\nexport class OtelTraces {\n private _tracer: Tracer;\n constructor(private readonly options: OtelOptions) {\n const resource = defaultResource().merge(\n resourceFromAttributes({\n [SEMRESATTRS_SERVICE_NAME]: this.options.serviceName,\n [SEMRESATTRS_SERVICE_VERSION]: this.options.serviceVersion,\n }),\n );\n\n const tracerProvider = new WebTracerProvider({\n resource,\n spanProcessors: [\n new SimpleSpanProcessor(new ConsoleSpanExporter()),\n new BatchSpanProcessor(\n new OTLPTraceExporter({\n url: this.options.endpoint + '/v1/traces',\n headers: {\n Authorization: this.options.authorizationHeader,\n },\n concurrencyLimit: 10, // an optional limit on pending requests\n }),\n ),\n ],\n });\n\n // TODO(nf): ContextManager? Propogator?\n trace.setGlobalTracerProvider(tracerProvider);\n this._tracer = trace.getTracer('dxos-observability', this.options.serviceVersion);\n }\n\n public start(): void {\n registerInstrumentations({\n instrumentations: [getWebAutoInstrumentations()],\n });\n log('trace processor registered');\n TRACE_PROCESSOR.remoteTracing.registerProcessor({\n startSpan: (options: StartSpanOptions) => {\n log('begin otel trace', { options });\n return this._tracer.startSpan(options.name, options);\n },\n });\n }\n}\n"],
5
+ "mappings": ";;;AAIA,SAAsBA,aAAa;AACnC,SAASC,kCAAkC;AAC3C,SAASC,yBAAyB;AAClC,SAASC,gCAAgC;AACzC,SAASC,iBAAiBC,8BAA8B;AACxD,SAASC,oBAAoBC,qBAAqBC,2BAA2B;AAC7E,SAASC,yBAAyB;AAClC,SAASC,0BAA0BC,mCAAmC;AAEtE,SAASC,WAAW;AACpB,SAAgCC,uBAAuB;;AAIhD,IAAMC,aAAN,MAAMA;;EACHC;EACR,YAA6BC,SAAsB;SAAtBA,UAAAA;AAC3B,UAAMC,WAAWb,gBAAAA,EAAkBc,MACjCb,uBAAuB;MACrB,CAACK,wBAAAA,GAA2B,KAAKM,QAAQG;MACzC,CAACR,2BAAAA,GAA8B,KAAKK,QAAQI;IAC9C,CAAA,CAAA;AAGF,UAAMC,iBAAiB,IAAIZ,kBAAkB;MAC3CQ;MACAK,gBAAgB;QACd,IAAId,oBAAoB,IAAID,oBAAAA,CAAAA;QAC5B,IAAID,mBACF,IAAIJ,kBAAkB;UACpBqB,KAAK,KAAKP,QAAQQ,WAAW;UAC7BC,SAAS;YACPC,eAAe,KAAKV,QAAQW;UAC9B;UACAC,kBAAkB;QACpB,CAAA,CAAA;;IAGN,CAAA;AAGA5B,UAAM6B,wBAAwBR,cAAAA;AAC9B,SAAKN,UAAUf,MAAM8B,UAAU,sBAAsB,KAAKd,QAAQI,cAAc;EAClF;EAEOW,QAAc;AACnB5B,6BAAyB;MACvB6B,kBAAkB;QAAC/B,2BAAAA;;IACrB,CAAA;AACAW,QAAI,8BAAA,QAAA;;;;;;AACJC,oBAAgBoB,cAAcC,kBAAkB;MAC9CC,WAAW,CAACnB,YAAAA;AACVJ,YAAI,oBAAoB;UAAEI;QAAQ,GAAA;;;;;;AAClC,eAAO,KAAKD,QAAQoB,UAAUnB,QAAQoB,MAAMpB,OAAAA;MAC9C;IACF,CAAA;EACF;AACF;",
6
+ "names": ["trace", "getWebAutoInstrumentations", "OTLPTraceExporter", "registerInstrumentations", "defaultResource", "resourceFromAttributes", "BatchSpanProcessor", "ConsoleSpanExporter", "SimpleSpanProcessor", "WebTracerProvider", "SEMRESATTRS_SERVICE_NAME", "SEMRESATTRS_SERVICE_VERSION", "log", "TRACE_PROCESSOR", "OtelTraces", "_tracer", "options", "resource", "merge", "serviceName", "serviceVersion", "tracerProvider", "spanProcessors", "url", "endpoint", "headers", "Authorization", "authorizationHeader", "concurrencyLimit", "setGlobalTracerProvider", "getTracer", "start", "instrumentations", "remoteTracing", "registerProcessor", "startSpan", "name"]
7
+ }
@@ -0,0 +1,8 @@
1
+ import { createRequire } from 'node:module';const require = createRequire(import.meta.url);
2
+ import {
3
+ OtelTraces
4
+ } from "../chunk-WAGGA7IT.mjs";
5
+ export {
6
+ OtelTraces
7
+ };
8
+ //# sourceMappingURL=traces.mjs.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": [],
4
+ "sourcesContent": [],
5
+ "mappings": "",
6
+ "names": []
7
+ }
@@ -1,7 +1,10 @@
1
1
  import { createRequire } from 'node:module';const require = createRequire(import.meta.url);
2
+ import {
3
+ OtelTraces
4
+ } from "./chunk-WAGGA7IT.mjs";
2
5
 
3
6
  // src/otel/otel.ts
4
- import { diag, DiagConsoleLogger, DiagLogLevel } from "@opentelemetry/api";
7
+ import { DiagConsoleLogger, DiagLogLevel, diag } from "@opentelemetry/api";
5
8
  var setDiagLogger = (level) => {
6
9
  const logLevel = DiagLogLevel[level];
7
10
  if (logLevel) {
@@ -12,37 +15,18 @@ var setDiagLogger = (level) => {
12
15
  // src/otel/logs.ts
13
16
  import { SeverityNumber } from "@opentelemetry/api-logs";
14
17
  import { OTLPLogExporter } from "@opentelemetry/exporter-logs-otlp-http";
15
- import { Resource } from "@opentelemetry/resources";
18
+ import { defaultResource, resourceFromAttributes } from "@opentelemetry/resources";
16
19
  import { BatchLogRecordProcessor, LoggerProvider } from "@opentelemetry/sdk-logs";
17
20
  import { SEMRESATTRS_SERVICE_NAME, SEMRESATTRS_SERVICE_VERSION } from "@opentelemetry/semantic-conventions";
18
- import { getContextFromEntry, getRelativeFilename, LogLevel } from "@dxos/log";
21
+ import { LogLevel, getContextFromEntry, getRelativeFilename } from "@dxos/log";
19
22
  import { jsonlogify } from "@dxos/util";
20
23
  var OtelLogs = class {
24
+ options;
25
+ _loggerProvider;
21
26
  constructor(options) {
22
27
  this.options = options;
23
- this.logProcessor = (config, entry) => {
24
- const logger = this._loggerProvider.getLogger("dxos-observability", this.options.serviceVersion);
25
- if (entry.level < this.options.logLevel || !this.options.includeSharedWorkerLogs && entry.meta?.S?.remoteSessionId) {
26
- return;
27
- }
28
- const record = {
29
- ...entry,
30
- ...entry.meta ? {
31
- meta: {
32
- file: getRelativeFilename(entry.meta.F),
33
- line: entry.meta.L
34
- }
35
- } : {},
36
- context: jsonlogify(getContextFromEntry(entry))
37
- };
38
- logger.emit({
39
- severityNumber: convertLevel(entry.level),
40
- body: JSON.stringify(record),
41
- attributes: this.options.getTags()
42
- });
43
- };
44
28
  setDiagLogger(options.consoleDiagLogLevel);
45
- const resource = Resource.default().merge(new Resource({
29
+ const resource = defaultResource().merge(resourceFromAttributes({
46
30
  [SEMRESATTRS_SERVICE_NAME]: this.options.serviceName,
47
31
  [SEMRESATTRS_SERVICE_VERSION]: this.options.serviceVersion
48
32
  }));
@@ -54,10 +38,33 @@ var OtelLogs = class {
54
38
  concurrencyLimit: 10
55
39
  });
56
40
  this._loggerProvider = new LoggerProvider({
57
- resource
41
+ resource,
42
+ processors: [
43
+ new BatchLogRecordProcessor(logExporter)
44
+ ]
58
45
  });
59
- this._loggerProvider.addLogRecordProcessor(new BatchLogRecordProcessor(logExporter));
60
46
  }
47
+ logProcessor = (config, entry) => {
48
+ const logger = this._loggerProvider.getLogger("dxos-observability", this.options.serviceVersion);
49
+ if (entry.level < this.options.logLevel || !this.options.includeSharedWorkerLogs && entry.meta?.S?.remoteSessionId) {
50
+ return;
51
+ }
52
+ const record = {
53
+ ...entry,
54
+ ...entry.meta ? {
55
+ meta: {
56
+ file: getRelativeFilename(entry.meta.F),
57
+ line: entry.meta.L
58
+ }
59
+ } : {},
60
+ context: jsonlogify(getContextFromEntry(entry))
61
+ };
62
+ logger.emit({
63
+ severityNumber: convertLevel(entry.level),
64
+ body: JSON.stringify(record),
65
+ attributes: this.options.getTags()
66
+ });
67
+ };
61
68
  flush() {
62
69
  return this._loggerProvider.forceFlush();
63
70
  }
@@ -84,7 +91,7 @@ var convertLevel = (level) => {
84
91
 
85
92
  // src/otel/metrics.ts
86
93
  import { OTLPMetricExporter } from "@opentelemetry/exporter-metrics-otlp-http";
87
- import { Resource as Resource2 } from "@opentelemetry/resources";
94
+ import { defaultResource as defaultResource2, resourceFromAttributes as resourceFromAttributes2 } from "@opentelemetry/resources";
88
95
  import { MeterProvider, PeriodicExportingMetricReader } from "@opentelemetry/sdk-metrics";
89
96
  import { SEMRESATTRS_SERVICE_NAME as SEMRESATTRS_SERVICE_NAME2, SEMRESATTRS_SERVICE_VERSION as SEMRESATTRS_SERVICE_VERSION2 } from "@opentelemetry/semantic-conventions";
90
97
  import { log } from "@dxos/log";
@@ -92,11 +99,13 @@ import { TRACE_PROCESSOR } from "@dxos/tracing";
92
99
  var __dxlog_file = "/__w/dxos/dxos/packages/sdk/observability/src/otel/metrics.ts";
93
100
  var EXPORT_INTERVAL = 60 * 1e3;
94
101
  var OtelMetrics = class {
102
+ options;
103
+ _meterProvider;
104
+ _meter;
95
105
  constructor(options) {
96
106
  this.options = options;
97
- this._gauges = /* @__PURE__ */ new Map();
98
107
  setDiagLogger(options.consoleDiagLogLevel);
99
- const resource = Resource2.default().merge(new Resource2({
108
+ const resource = defaultResource2().merge(resourceFromAttributes2({
100
109
  [SEMRESATTRS_SERVICE_NAME2]: this.options.serviceName,
101
110
  [SEMRESATTRS_SERVICE_VERSION2]: this.options.serviceVersion
102
111
  }));
@@ -143,7 +152,7 @@ var OtelMetrics = class {
143
152
  }
144
153
  }, {
145
154
  F: __dxlog_file,
146
- L: 77,
155
+ L: 70,
147
156
  S: this,
148
157
  C: (f, a) => f(...a)
149
158
  });
@@ -163,7 +172,7 @@ var OtelMetrics = class {
163
172
  }
164
173
  }, {
165
174
  F: __dxlog_file,
166
- L: 83,
175
+ L: 76,
167
176
  S: this,
168
177
  C: (f, a) => f(...a)
169
178
  });
@@ -183,7 +192,7 @@ var OtelMetrics = class {
183
192
  }
184
193
  }, {
185
194
  F: __dxlog_file,
186
- L: 89,
195
+ L: 82,
187
196
  S: this,
188
197
  C: (f, a) => f(...a)
189
198
  });
@@ -209,52 +218,10 @@ var convertTags = (data) => {
209
218
  return {};
210
219
  }
211
220
  };
212
-
213
- // src/otel/traces.ts
214
- import { trace } from "@opentelemetry/api";
215
- import { OTLPTraceExporter } from "@opentelemetry/exporter-trace-otlp-http";
216
- import { Resource as Resource3 } from "@opentelemetry/resources";
217
- import { BasicTracerProvider, BatchSpanProcessor, ConsoleSpanExporter, SimpleSpanProcessor } from "@opentelemetry/sdk-trace-base";
218
- import { SEMRESATTRS_SERVICE_NAME as SEMRESATTRS_SERVICE_NAME3, SEMRESATTRS_SERVICE_VERSION as SEMRESATTRS_SERVICE_VERSION3 } from "@opentelemetry/semantic-conventions";
219
- import { log as log2 } from "debug";
220
- import { TRACE_PROCESSOR as TRACE_PROCESSOR2 } from "@dxos/tracing";
221
- var OtelTraces = class {
222
- constructor(options) {
223
- this.options = options;
224
- const resource = Resource3.default().merge(new Resource3({
225
- [SEMRESATTRS_SERVICE_NAME3]: this.options.serviceName,
226
- [SEMRESATTRS_SERVICE_VERSION3]: this.options.serviceVersion
227
- }));
228
- const tracerProvider = new BasicTracerProvider({
229
- resource
230
- });
231
- tracerProvider.addSpanProcessor(new SimpleSpanProcessor(new ConsoleSpanExporter()));
232
- tracerProvider.addSpanProcessor(new BatchSpanProcessor(new OTLPTraceExporter({
233
- url: this.options.endpoint + "/v1/traces",
234
- headers: {
235
- Authorization: this.options.authorizationHeader
236
- },
237
- concurrencyLimit: 10
238
- })));
239
- tracerProvider.register();
240
- this._tracer = trace.getTracer("dxos-observability", this.options.serviceVersion);
241
- }
242
- start() {
243
- log2("trace processor registered");
244
- TRACE_PROCESSOR2.remoteTracing.registerProcessor({
245
- startSpan: (options) => {
246
- log2("begin otel trace", {
247
- options
248
- });
249
- return this._tracer.startSpan(options.name, options);
250
- }
251
- });
252
- }
253
- };
254
221
  export {
255
222
  OtelLogs,
256
223
  OtelMetrics,
257
224
  OtelTraces,
258
225
  setDiagLogger
259
226
  };
260
- //# sourceMappingURL=otel-62HYJETM.mjs.map
227
+ //# sourceMappingURL=otel-JFXO22WD.mjs.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/otel/otel.ts", "../../../src/otel/logs.ts", "../../../src/otel/metrics.ts"],
4
+ "sourcesContent": ["//\n// Copyright 2024 DXOS.org\n//\n\nimport { DiagConsoleLogger, DiagLogLevel, diag } from '@opentelemetry/api';\n\nexport type OtelOptions = {\n endpoint: string;\n authorizationHeader: string;\n serviceName: string; // For the Otel API, the name of the entity for which signals (metrics or trace) are collected.\n serviceVersion: string; // For the Otel API, The name of the entity for which signals (metrics or trace) are collected.\n getTags: () => { [key: string]: string };\n consoleDiagLogLevel?: string;\n};\n\nexport const setDiagLogger = (level?: string) => {\n const logLevel = DiagLogLevel[level as keyof typeof DiagLogLevel];\n if (logLevel) {\n diag.setLogger(new DiagConsoleLogger(), logLevel);\n }\n};\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport { SeverityNumber } from '@opentelemetry/api-logs';\nimport { OTLPLogExporter } from '@opentelemetry/exporter-logs-otlp-http';\nimport { defaultResource, resourceFromAttributes } from '@opentelemetry/resources';\nimport { BatchLogRecordProcessor, LoggerProvider } from '@opentelemetry/sdk-logs';\nimport { SEMRESATTRS_SERVICE_NAME, SEMRESATTRS_SERVICE_VERSION } from '@opentelemetry/semantic-conventions';\n\nimport {\n type LogConfig,\n type LogEntry,\n LogLevel,\n type LogProcessor,\n getContextFromEntry,\n getRelativeFilename,\n} from '@dxos/log';\nimport { jsonlogify } from '@dxos/util';\n\nimport { type OtelOptions, setDiagLogger } from './otel';\n\nexport type OtelLogOptions = OtelOptions & {\n logLevel: LogLevel;\n /**\n * Set `true` to capture logs sent through LoggingService from shared worker.\n * Better to set to `false` because shared worker is initializing its own logger.\n */\n includeSharedWorkerLogs: boolean;\n};\n\nexport class OtelLogs {\n private _loggerProvider: LoggerProvider;\n constructor(private readonly options: OtelLogOptions) {\n setDiagLogger(options.consoleDiagLogLevel);\n const resource = defaultResource().merge(\n resourceFromAttributes({\n [SEMRESATTRS_SERVICE_NAME]: this.options.serviceName,\n [SEMRESATTRS_SERVICE_VERSION]: this.options.serviceVersion,\n }),\n );\n const logExporter = new OTLPLogExporter({\n url: this.options.endpoint + '/v1/logs',\n headers: {\n Authorization: this.options.authorizationHeader,\n },\n concurrencyLimit: 10, // an optional limit on pending requests\n });\n this._loggerProvider = new LoggerProvider({\n resource,\n processors: [new BatchLogRecordProcessor(logExporter)],\n });\n }\n\n public readonly logProcessor: LogProcessor = (config: LogConfig, entry: LogEntry) => {\n const logger = this._loggerProvider.getLogger('dxos-observability', this.options.serviceVersion);\n\n if (\n entry.level < this.options.logLevel ||\n (!this.options.includeSharedWorkerLogs && entry.meta?.S?.remoteSessionId)\n ) {\n return;\n }\n\n const record = {\n ...entry,\n ...(entry.meta ? { meta: { file: getRelativeFilename(entry.meta.F), line: entry.meta.L } } : {}),\n context: jsonlogify(getContextFromEntry(entry)),\n };\n\n logger.emit({\n severityNumber: convertLevel(entry.level),\n body: JSON.stringify(record),\n attributes: this.options.getTags(),\n });\n };\n\n flush(): Promise<void> {\n return this._loggerProvider.forceFlush();\n }\n\n close(): Promise<void> {\n return this._loggerProvider.shutdown();\n }\n}\n\nconst convertLevel = (level: LogLevel): SeverityNumber => {\n switch (level) {\n case LogLevel.DEBUG:\n return SeverityNumber.DEBUG;\n case LogLevel.VERBOSE:\n return SeverityNumber.INFO;\n case LogLevel.INFO:\n return SeverityNumber.INFO;\n case LogLevel.WARN:\n return SeverityNumber.WARN;\n case LogLevel.ERROR:\n return SeverityNumber.ERROR;\n default:\n return SeverityNumber.ERROR;\n }\n};\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport { type Meter } from '@opentelemetry/api';\nimport { OTLPMetricExporter } from '@opentelemetry/exporter-metrics-otlp-http';\nimport { defaultResource, resourceFromAttributes } from '@opentelemetry/resources';\nimport { MeterProvider, PeriodicExportingMetricReader } from '@opentelemetry/sdk-metrics';\nimport { SEMRESATTRS_SERVICE_NAME, SEMRESATTRS_SERVICE_VERSION } from '@opentelemetry/semantic-conventions';\n\nimport { log } from '@dxos/log';\nimport { type MetricData, TRACE_PROCESSOR } from '@dxos/tracing';\n\nimport { type OtelOptions, setDiagLogger } from './otel';\n\nconst EXPORT_INTERVAL = 60 * 1000;\n\nexport class OtelMetrics {\n private _meterProvider: MeterProvider;\n private _meter: Meter;\n\n constructor(private readonly options: OtelOptions) {\n // TODO: improve error handling/logging\n // https://github.com/open-telemetry/opentelemetry-js/issues/4823\n setDiagLogger(options.consoleDiagLogLevel);\n const resource = defaultResource().merge(\n resourceFromAttributes({\n [SEMRESATTRS_SERVICE_NAME]: this.options.serviceName,\n [SEMRESATTRS_SERVICE_VERSION]: this.options.serviceVersion,\n }),\n );\n\n const grafanaMetricReader = new PeriodicExportingMetricReader({\n exporter: new OTLPMetricExporter({\n url: this.options.endpoint + '/v1/metrics',\n headers: {\n Authorization: this.options.authorizationHeader,\n },\n }),\n exportIntervalMillis: EXPORT_INTERVAL,\n });\n\n this._meterProvider = new MeterProvider({\n resource,\n readers: [grafanaMetricReader],\n });\n this._meter = this._meterProvider.getMeter('dxos-observability');\n\n const metrics = {\n // TODO: update metrics names and remove prefix?\n increment: (name: string, value?: number, data?: MetricData) => {\n this.increment(name, value, convertTags(data));\n },\n distribution: (name: string, value: number, data?: MetricData) => {\n this.distribution(name, value, convertTags(data));\n },\n set: (name: string, value: number | string, data?: MetricData) => {\n // Not implemented, not part of Otel spec.\n },\n gauge: (name: string, value: number, data?: MetricData) => {\n this.gauge(name, value, convertTags(data));\n },\n };\n\n TRACE_PROCESSOR.remoteMetrics.registerProcessor(metrics);\n }\n\n gauge(name: string, value: number, tags?: any): void {\n const gauge = this._meter.createGauge(name);\n log('otel gauge', { name, value, tags: { ...this.options.getTags(), ...tags } });\n gauge.record(value, { ...this.options.getTags(), ...tags });\n }\n\n increment(name: string, value?: number, tags?: any): void {\n const counter = this._meter.createCounter(name);\n log('otel counter', { name, value, tags: { ...this.options.getTags(), ...tags } });\n counter.add(value ?? 1, { ...this.options.getTags(), ...tags });\n }\n\n distribution(name: string, value: number, tags?: any): void {\n const distribution = this._meter.createHistogram(name);\n log('otel distribution', { name, value, tags: { ...this.options.getTags(), ...tags } });\n distribution.record(value, { ...this.options.getTags(), ...tags });\n }\n\n flush(): Promise<void> {\n return this._meterProvider.forceFlush();\n }\n\n close(): Promise<void> {\n return this._meterProvider.shutdown();\n }\n}\n\nconst convertTags = (data?: MetricData) => {\n if (data && data.tags) {\n return Object.entries(data.tags).reduce<{ [key: string]: any }>((obj, [key, value]) => {\n obj[key] = value;\n return obj;\n }, {});\n } else {\n return {};\n }\n};\n"],
5
+ "mappings": "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",
6
+ "names": ["DiagConsoleLogger", "DiagLogLevel", "diag", "setDiagLogger", "level", "logLevel", "DiagLogLevel", "diag", "setLogger", "DiagConsoleLogger", "SeverityNumber", "OTLPLogExporter", "defaultResource", "resourceFromAttributes", "BatchLogRecordProcessor", "LoggerProvider", "SEMRESATTRS_SERVICE_NAME", "SEMRESATTRS_SERVICE_VERSION", "LogLevel", "getContextFromEntry", "getRelativeFilename", "jsonlogify", "OtelLogs", "_loggerProvider", "options", "setDiagLogger", "consoleDiagLogLevel", "resource", "defaultResource", "merge", "resourceFromAttributes", "SEMRESATTRS_SERVICE_NAME", "serviceName", "SEMRESATTRS_SERVICE_VERSION", "serviceVersion", "logExporter", "OTLPLogExporter", "url", "endpoint", "headers", "Authorization", "authorizationHeader", "concurrencyLimit", "LoggerProvider", "processors", "BatchLogRecordProcessor", "logProcessor", "config", "entry", "logger", "getLogger", "level", "logLevel", "includeSharedWorkerLogs", "meta", "S", "remoteSessionId", "record", "file", "getRelativeFilename", "F", "line", "L", "context", "jsonlogify", "getContextFromEntry", "emit", "severityNumber", "convertLevel", "body", "JSON", "stringify", "attributes", "getTags", "flush", "forceFlush", "close", "shutdown", "LogLevel", "DEBUG", "SeverityNumber", "VERBOSE", "INFO", "WARN", "ERROR", "OTLPMetricExporter", "defaultResource", "resourceFromAttributes", "MeterProvider", "PeriodicExportingMetricReader", "SEMRESATTRS_SERVICE_NAME", "SEMRESATTRS_SERVICE_VERSION", "log", "TRACE_PROCESSOR", "EXPORT_INTERVAL", "OtelMetrics", "_meterProvider", "_meter", "options", "setDiagLogger", "consoleDiagLogLevel", "resource", "defaultResource", "merge", "resourceFromAttributes", "SEMRESATTRS_SERVICE_NAME", "serviceName", "SEMRESATTRS_SERVICE_VERSION", "serviceVersion", "grafanaMetricReader", "PeriodicExportingMetricReader", "exporter", "OTLPMetricExporter", "url", "endpoint", "headers", "Authorization", "authorizationHeader", "exportIntervalMillis", "MeterProvider", "readers", "getMeter", "metrics", "increment", "name", "value", "data", "convertTags", "distribution", "set", "gauge", "TRACE_PROCESSOR", "remoteMetrics", "registerProcessor", "tags", "createGauge", "log", "getTags", "record", "counter", "createCounter", "add", "createHistogram", "flush", "forceFlush", "close", "shutdown", "Object", "entries", "reduce", "obj", "key"]
7
+ }
@@ -0,0 +1,92 @@
1
+ import { createRequire } from 'node:module';const require = createRequire(import.meta.url);
2
+ import {
3
+ AbstractSegmentTelemetry
4
+ } from "../chunk-UIVXGEGJ.mjs";
5
+ import "../chunk-QUZL7LKE.mjs";
6
+ import {
7
+ captureException
8
+ } from "../chunk-M4627SMT.mjs";
9
+
10
+ // src/segment/browser.ts
11
+ import snippet from "@segment/snippet";
12
+ import { log } from "@dxos/log";
13
+ var __dxlog_file = "/__w/dxos/dxos/packages/sdk/observability/src/segment/browser.ts";
14
+ var SegmentTelemetry = class extends AbstractSegmentTelemetry {
15
+ constructor({ apiKey, batchSize, getTags }) {
16
+ super(getTags);
17
+ try {
18
+ const contents = snippet.min({
19
+ apiKey,
20
+ page: false
21
+ });
22
+ const script = document.createElement("script");
23
+ script.innerHTML = contents;
24
+ document.body.append(script);
25
+ } catch (err) {
26
+ log.catch("failed to initialize telemetry", err, {
27
+ F: __dxlog_file,
28
+ L: 28,
29
+ S: this,
30
+ C: (f, a) => f(...a)
31
+ });
32
+ }
33
+ }
34
+ identify(options) {
35
+ try {
36
+ window.analytics?.identify(options.userId, options.traits);
37
+ } catch (err) {
38
+ log.catch("failed to identify", err, {
39
+ F: __dxlog_file,
40
+ L: 36,
41
+ S: this,
42
+ C: (f, a) => f(...a)
43
+ });
44
+ }
45
+ }
46
+ page(options) {
47
+ try {
48
+ const props = this.createPageParams(options);
49
+ window.analytics?.page(props.category, props.name, props.properties);
50
+ } catch (err) {
51
+ log.catch("failed to track page", err, {
52
+ F: __dxlog_file,
53
+ L: 45,
54
+ S: this,
55
+ C: (f, a) => f(...a)
56
+ });
57
+ }
58
+ }
59
+ track(options) {
60
+ try {
61
+ const props = this.createTrackParams(options);
62
+ window.analytics?.track(props.event, props.properties);
63
+ } catch (err) {
64
+ log.catch("failed to track event", err, {
65
+ F: __dxlog_file,
66
+ L: 54,
67
+ S: this,
68
+ C: (f, a) => f(...a)
69
+ });
70
+ }
71
+ }
72
+ async flush() {
73
+ try {
74
+ await window.analytics?.flush((err) => {
75
+ captureException(err);
76
+ });
77
+ } catch (err) {
78
+ log.catch("failed to flush telemetry", err, {
79
+ F: __dxlog_file,
80
+ L: 64,
81
+ S: this,
82
+ C: (f, a) => f(...a)
83
+ });
84
+ }
85
+ }
86
+ async close() {
87
+ }
88
+ };
89
+ export {
90
+ SegmentTelemetry
91
+ };
92
+ //# sourceMappingURL=browser.mjs.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../../src/segment/browser.ts"],
4
+ "sourcesContent": ["//\n// Copyright 2022 DXOS.org\n//\n\nimport { type IdentifyParams } from '@segment/analytics-node';\nimport snippet from '@segment/snippet';\n\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 * Browser telemetry.\n */\n// https://segment.com/docs/connections/sources/catalog/libraries/website/javascript/#basic-tracking-methods\nexport class SegmentTelemetry extends AbstractSegmentTelemetry {\n constructor({ apiKey, batchSize, getTags }: SegmentTelemetryOptions) {\n super(getTags);\n try {\n const contents = snippet.min({ apiKey, page: false });\n const script = document.createElement('script');\n script.innerHTML = contents;\n document.body.append(script);\n } catch (err) {\n log.catch('failed to initialize telemetry', err);\n }\n }\n\n identify(options: IdentifyParams): void {\n try {\n (window as any).analytics?.identify(options.userId, options.traits);\n } catch (err) {\n log.catch('failed to identify', err);\n }\n }\n\n page(options: PageOptions): void {\n try {\n const props = this.createPageParams(options);\n (window as any).analytics?.page(props.category, props.name, props.properties);\n } catch (err) {\n log.catch('failed to track page', err);\n }\n }\n\n track(options: TrackOptions): void {\n try {\n const props = this.createTrackParams(options);\n (window as any).analytics?.track(props.event, props.properties);\n } catch (err) {\n log.catch('failed to track event', err);\n }\n }\n\n async flush(): Promise<void> {\n try {\n await (window as any).analytics?.flush((err: any) => {\n captureException(err);\n });\n } catch (err) {\n log.catch('failed to flush telemetry', err);\n }\n }\n\n async close(): Promise<void> {}\n}\n"],
5
+ "mappings": ";;;;;;;;;;AAKA,OAAOA,aAAa;AAEpB,SAASC,WAAW;;AAWb,IAAMC,mBAAN,cAA+BC,yBAAAA;EACpC,YAAY,EAAEC,QAAQC,WAAWC,QAAO,GAA6B;AACnE,UAAMA,OAAAA;AACN,QAAI;AACF,YAAMC,WAAWC,QAAQC,IAAI;QAAEL;QAAQM,MAAM;MAAM,CAAA;AACnD,YAAMC,SAASC,SAASC,cAAc,QAAA;AACtCF,aAAOG,YAAYP;AACnBK,eAASG,KAAKC,OAAOL,MAAAA;IACvB,SAASM,KAAK;AACZC,UAAIC,MAAM,kCAAkCF,KAAAA;;;;;;IAC9C;EACF;EAEAG,SAASC,SAA+B;AACtC,QAAI;AACDC,aAAeC,WAAWH,SAASC,QAAQG,QAAQH,QAAQI,MAAM;IACpE,SAASR,KAAK;AACZC,UAAIC,MAAM,sBAAsBF,KAAAA;;;;;;IAClC;EACF;EAEAP,KAAKW,SAA4B;AAC/B,QAAI;AACF,YAAMK,QAAQ,KAAKC,iBAAiBN,OAAAA;AACnCC,aAAeC,WAAWb,KAAKgB,MAAME,UAAUF,MAAMG,MAAMH,MAAMI,UAAU;IAC9E,SAASb,KAAK;AACZC,UAAIC,MAAM,wBAAwBF,KAAAA;;;;;;IACpC;EACF;EAEAc,MAAMV,SAA6B;AACjC,QAAI;AACF,YAAMK,QAAQ,KAAKM,kBAAkBX,OAAAA;AACpCC,aAAeC,WAAWQ,MAAML,MAAMO,OAAOP,MAAMI,UAAU;IAChE,SAASb,KAAK;AACZC,UAAIC,MAAM,yBAAyBF,KAAAA;;;;;;IACrC;EACF;EAEA,MAAMiB,QAAuB;AAC3B,QAAI;AACF,YAAOZ,OAAeC,WAAWW,MAAM,CAACjB,QAAAA;AACtCkB,yBAAiBlB,GAAAA;MACnB,CAAA;IACF,SAASA,KAAK;AACZC,UAAIC,MAAM,6BAA6BF,KAAAA;;;;;;IACzC;EACF;EAEA,MAAMmB,QAAuB;EAAC;AAChC;",
6
+ "names": ["snippet", "log", "SegmentTelemetry", "AbstractSegmentTelemetry", "apiKey", "batchSize", "getTags", "contents", "snippet", "min", "page", "script", "document", "createElement", "innerHTML", "body", "append", "err", "log", "catch", "identify", "options", "window", "analytics", "userId", "traits", "props", "createPageParams", "category", "name", "properties", "track", "createTrackParams", "event", "flush", "captureException", "close"]
7
+ }
@@ -1,10 +1,13 @@
1
1
  import { createRequire } from 'node:module';const require = createRequire(import.meta.url);
2
+ import "../chunk-KLJGCUYA.mjs";
3
+ import {
4
+ SegmentTelemetry
5
+ } from "../chunk-KVJTNW3F.mjs";
2
6
  import {
3
- SegmentTelemetry,
4
7
  TelemetryEvent
5
- } from "../chunk-552KLA6Z.mjs";
8
+ } from "../chunk-UIVXGEGJ.mjs";
6
9
  import "../chunk-QUZL7LKE.mjs";
7
- import "../chunk-TEH6VIKV.mjs";
10
+ import "../chunk-M4627SMT.mjs";
8
11
  export {
9
12
  SegmentTelemetry,
10
13
  TelemetryEvent
@@ -0,0 +1,11 @@
1
+ import { createRequire } from 'node:module';const require = createRequire(import.meta.url);
2
+ import {
3
+ SegmentTelemetry
4
+ } from "../chunk-KVJTNW3F.mjs";
5
+ import "../chunk-UIVXGEGJ.mjs";
6
+ import "../chunk-QUZL7LKE.mjs";
7
+ import "../chunk-M4627SMT.mjs";
8
+ export {
9
+ SegmentTelemetry
10
+ };
11
+ //# sourceMappingURL=node.mjs.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": [],
4
+ "sourcesContent": [],
5
+ "mappings": "",
6
+ "names": []
7
+ }
@@ -0,0 +1,165 @@
1
+ import { createRequire } from 'node:module';const require = createRequire(import.meta.url);
2
+
3
+ // src/sentry/browser.ts
4
+ import { breadcrumbsIntegration, browserTracingIntegration, feedbackIntegration, httpClientIntegration, metrics, addBreadcrumb as naturalAddBreadcrumb, captureException as naturalCaptureException, captureMessage as naturalCaptureMessage, init as naturalInit, sendFeedback as naturalSendFeedback, withScope as naturalWithScope, replayIntegration, setTag, startInactiveSpan } from "@sentry/browser";
5
+ import { log } from "@dxos/log";
6
+ import { TRACE_PROCESSOR } from "@dxos/tracing";
7
+ import { setTag as setTag2, setTags, setUser } from "@sentry/browser";
8
+ var __dxlog_file = "/__w/dxos/dxos/packages/sdk/observability/src/sentry/browser.ts";
9
+ var init = (options) => {
10
+ try {
11
+ log("sentry init", options, {
12
+ F: __dxlog_file,
13
+ L: 38,
14
+ S: void 0,
15
+ C: (f, a) => f(...a)
16
+ });
17
+ naturalInit({
18
+ enabled: options.enable ?? true,
19
+ dsn: options.destination,
20
+ release: options.release,
21
+ environment: options.environment,
22
+ integrations: [
23
+ breadcrumbsIntegration({
24
+ console: false,
25
+ fetch: false
26
+ }),
27
+ httpClientIntegration({
28
+ failedRequestStatusCodes: [
29
+ // 401 errors are omitted as they happen as a part of the EDGE authentication flow.
30
+ [
31
+ 400,
32
+ 400
33
+ ],
34
+ [
35
+ 402,
36
+ 599
37
+ ]
38
+ ]
39
+ }),
40
+ feedbackIntegration({
41
+ autoInject: false
42
+ }),
43
+ ...options.tracing ? [
44
+ browserTracingIntegration()
45
+ ] : [],
46
+ ...options.replay ? [
47
+ replayIntegration({
48
+ blockAllMedia: true,
49
+ maskAllText: true
50
+ })
51
+ ] : []
52
+ ],
53
+ replaysSessionSampleRate: options.replaySampleRate,
54
+ replaysOnErrorSampleRate: options.replaySampleRateOnError,
55
+ tracesSampleRate: options.sampleRate,
56
+ transport: options.transport,
57
+ beforeSend: (event) => {
58
+ options.onError?.(event);
59
+ return event;
60
+ }
61
+ });
62
+ if (options.tracing) {
63
+ TRACE_PROCESSOR.remoteMetrics.registerProcessor(metrics);
64
+ TRACE_PROCESSOR.remoteTracing.registerProcessor({
65
+ startSpan: startInactiveSpan
66
+ });
67
+ }
68
+ Object.entries(options.properties ?? {}).forEach(([key, value]) => {
69
+ setTag(key, value);
70
+ });
71
+ } catch (err) {
72
+ log.catch("Failed to initialize sentry", err, {
73
+ F: __dxlog_file,
74
+ L: 78,
75
+ S: void 0,
76
+ C: (f, a) => f(...a)
77
+ });
78
+ }
79
+ };
80
+ var addBreadcrumb = (breadcrumb) => {
81
+ try {
82
+ naturalAddBreadcrumb(breadcrumb);
83
+ log("add breadcrumb", breadcrumb, {
84
+ F: __dxlog_file,
85
+ L: 94,
86
+ S: void 0,
87
+ C: (f, a) => f(...a)
88
+ });
89
+ } catch (err) {
90
+ log.catch("Failed to add breadcrumb", err, {
91
+ F: __dxlog_file,
92
+ L: 96,
93
+ S: void 0,
94
+ C: (f, a) => f(...a)
95
+ });
96
+ }
97
+ };
98
+ var captureException = (exception, captureContext) => {
99
+ try {
100
+ const eventId = naturalCaptureException(exception, captureContext);
101
+ log("capture exception", {
102
+ exception,
103
+ eventId,
104
+ ...captureContext
105
+ }, {
106
+ F: __dxlog_file,
107
+ L: 110,
108
+ S: void 0,
109
+ C: (f, a) => f(...a)
110
+ });
111
+ return eventId;
112
+ } catch (err) {
113
+ log.catch("Failed to capture exception", err, {
114
+ F: __dxlog_file,
115
+ L: 113,
116
+ S: void 0,
117
+ C: (f, a) => f(...a)
118
+ });
119
+ return "unknown";
120
+ }
121
+ };
122
+ var captureMessage = (exception, captureContext) => {
123
+ try {
124
+ const eventId = naturalCaptureMessage(exception, captureContext);
125
+ log("capture message", {
126
+ exception,
127
+ eventId,
128
+ captureContext
129
+ }, {
130
+ F: __dxlog_file,
131
+ L: 121,
132
+ S: void 0,
133
+ C: (f, a) => f(...a)
134
+ });
135
+ return eventId;
136
+ } catch (err) {
137
+ log.catch("Failed to capture message", err, {
138
+ F: __dxlog_file,
139
+ L: 124,
140
+ S: void 0,
141
+ C: (f, a) => f(...a)
142
+ });
143
+ return "unknown";
144
+ }
145
+ };
146
+ var captureUserFeedback = (message) => {
147
+ return naturalSendFeedback({
148
+ message
149
+ }, {
150
+ includeReplay: true
151
+ });
152
+ };
153
+ var withScope = naturalWithScope;
154
+ export {
155
+ addBreadcrumb,
156
+ captureException,
157
+ captureMessage,
158
+ captureUserFeedback,
159
+ init,
160
+ setTag2 as setTag,
161
+ setTags,
162
+ setUser,
163
+ withScope
164
+ };
165
+ //# sourceMappingURL=browser.mjs.map