@dxos/observability 0.8.4-main.1da679c → 0.8.4-main.21d9917

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 (118) hide show
  1. package/dist/lib/browser/{chunk-ICKR6U3G.mjs → chunk-5LN7D6GM.mjs} +29 -42
  2. package/dist/lib/browser/chunk-5LN7D6GM.mjs.map +7 -0
  3. package/dist/lib/browser/{chunk-OO2RDFNE.mjs → chunk-JJQT5TQH.mjs} +101 -454
  4. package/dist/lib/browser/chunk-JJQT5TQH.mjs.map +7 -0
  5. package/dist/lib/browser/{chunk-LJO63BXO.mjs → chunk-O4BG5MRL.mjs} +1 -1
  6. package/dist/lib/browser/{chunk-LJO63BXO.mjs.map → chunk-O4BG5MRL.mjs.map} +1 -1
  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-UHLVSR24.mjs → otel-DI4ASU7Y.mjs} +86 -185
  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-RG4CFVGL.mjs → sentry-log-processor-W7LI6WXA.mjs} +56 -72
  31. package/dist/lib/browser/sentry-log-processor-W7LI6WXA.mjs.map +7 -0
  32. package/dist/lib/node-esm/{chunk-Q2I5AUBI.mjs → chunk-KKNY7TRV.mjs} +101 -454
  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-QK5IUYVA.mjs → chunk-M4627SMT.mjs} +1 -1
  39. package/dist/lib/node-esm/chunk-UIVXGEGJ.mjs +62 -0
  40. package/dist/lib/node-esm/chunk-UIVXGEGJ.mjs.map +7 -0
  41. package/dist/lib/node-esm/chunk-WAGGA7IT.mjs +52 -0
  42. package/dist/lib/node-esm/chunk-WAGGA7IT.mjs.map +7 -0
  43. package/dist/lib/node-esm/index.mjs +342 -15
  44. package/dist/lib/node-esm/index.mjs.map +4 -4
  45. package/dist/lib/node-esm/meta.json +1 -1
  46. package/dist/lib/node-esm/observability-CXQ3CZGB.mjs +13 -0
  47. package/dist/lib/node-esm/observability-CXQ3CZGB.mjs.map +7 -0
  48. package/dist/lib/node-esm/otel/traces-browser.mjs +70 -0
  49. package/dist/lib/node-esm/otel/traces-browser.mjs.map +7 -0
  50. package/dist/lib/node-esm/otel/traces.mjs +8 -0
  51. package/dist/lib/node-esm/otel/traces.mjs.map +7 -0
  52. package/dist/lib/node-esm/{otel-W6KWKVW5.mjs → otel-JFXO22WD.mjs} +85 -166
  53. package/dist/lib/node-esm/otel-JFXO22WD.mjs.map +7 -0
  54. package/dist/lib/node-esm/segment/browser.mjs +92 -0
  55. package/dist/lib/node-esm/segment/browser.mjs.map +7 -0
  56. package/dist/lib/node-esm/segment/index.mjs +6 -3
  57. package/dist/lib/node-esm/segment/node.mjs +11 -0
  58. package/dist/lib/node-esm/segment/node.mjs.map +7 -0
  59. package/dist/lib/node-esm/sentry/browser.mjs +165 -0
  60. package/dist/lib/node-esm/sentry/browser.mjs.map +7 -0
  61. package/dist/lib/node-esm/sentry/index.mjs +1 -1
  62. package/dist/lib/node-esm/sentry/node.mjs +24 -0
  63. package/dist/lib/node-esm/sentry/node.mjs.map +7 -0
  64. package/dist/lib/node-esm/{sentry-log-processor-3BDS4BB4.mjs → sentry-log-processor-W3SG4RQL.mjs} +56 -72
  65. package/dist/lib/node-esm/sentry-log-processor-W3SG4RQL.mjs.map +7 -0
  66. package/dist/types/src/helpers/map-spaces.js +1 -1
  67. package/dist/types/src/helpers/map-spaces.js.map +1 -1
  68. package/dist/types/src/otel/logs.d.ts.map +1 -1
  69. package/dist/types/src/otel/logs.js +6 -4
  70. package/dist/types/src/otel/logs.js.map +1 -1
  71. package/dist/types/src/otel/metrics.d.ts +0 -1
  72. package/dist/types/src/otel/metrics.d.ts.map +1 -1
  73. package/dist/types/src/otel/metrics.js +2 -3
  74. package/dist/types/src/otel/metrics.js.map +1 -1
  75. package/dist/types/src/otel/traces-browser.d.ts.map +1 -1
  76. package/dist/types/src/otel/traces-browser.js +16 -12
  77. package/dist/types/src/otel/traces-browser.js.map +1 -1
  78. package/dist/types/src/otel/traces.d.ts.map +1 -1
  79. package/dist/types/src/otel/traces.js +16 -12
  80. package/dist/types/src/otel/traces.js.map +1 -1
  81. package/dist/types/src/segment/base.d.ts +2 -2
  82. package/dist/types/src/segment/base.d.ts.map +1 -1
  83. package/dist/types/src/segment/base.js +2 -2
  84. package/dist/types/src/segment/base.js.map +1 -1
  85. package/dist/types/src/segment/browser.js +2 -2
  86. package/dist/types/src/segment/browser.js.map +1 -1
  87. package/dist/types/src/segment/node.js +2 -2
  88. package/dist/types/src/segment/node.js.map +1 -1
  89. package/dist/types/src/sentry/browser.js +1 -1
  90. package/dist/types/src/sentry/browser.js.map +1 -1
  91. package/dist/types/src/sentry/sentry-log-processor.d.ts.map +1 -1
  92. package/dist/types/src/sentry/sentry-log-processor.js.map +1 -1
  93. package/dist/types/tsconfig.tsbuildinfo +1 -1
  94. package/package.json +35 -34
  95. package/src/helpers/map-spaces.ts +1 -1
  96. package/src/otel/logs.ts +7 -5
  97. package/src/otel/metrics.ts +4 -11
  98. package/src/otel/traces-browser.ts +20 -17
  99. package/src/otel/traces.ts +20 -17
  100. package/src/segment/base.ts +2 -2
  101. package/src/segment/browser.ts +2 -2
  102. package/src/segment/node.ts +2 -2
  103. package/src/sentry/browser.ts +1 -1
  104. package/src/sentry/sentry-log-processor.ts +2 -0
  105. package/dist/lib/browser/chunk-ICKR6U3G.mjs.map +0 -7
  106. package/dist/lib/browser/chunk-OO2RDFNE.mjs.map +0 -7
  107. package/dist/lib/browser/observability-ZVQ2YD62.mjs +0 -10
  108. package/dist/lib/browser/otel-UHLVSR24.mjs.map +0 -7
  109. package/dist/lib/browser/sentry-log-processor-RG4CFVGL.mjs.map +0 -7
  110. package/dist/lib/node-esm/chunk-24NMRR4E.mjs +0 -229
  111. package/dist/lib/node-esm/chunk-24NMRR4E.mjs.map +0 -7
  112. package/dist/lib/node-esm/chunk-Q2I5AUBI.mjs.map +0 -7
  113. package/dist/lib/node-esm/observability-DHZIWGLJ.mjs +0 -11
  114. package/dist/lib/node-esm/otel-W6KWKVW5.mjs.map +0 -7
  115. package/dist/lib/node-esm/sentry-log-processor-3BDS4BB4.mjs.map +0 -7
  116. /package/dist/lib/browser/{observability-ZVQ2YD62.mjs.map → chunk-U6JWT3E2.mjs.map} +0 -0
  117. /package/dist/lib/{node-esm/observability-DHZIWGLJ.mjs.map → browser/observability-XK652NZG.mjs.map} +0 -0
  118. /package/dist/lib/node-esm/{chunk-QK5IUYVA.mjs.map → chunk-M4627SMT.mjs.map} +0 -0
@@ -1,13 +1,13 @@
1
1
  import {
2
2
  TelemetryEvent
3
- } from "./chunk-ICKR6U3G.mjs";
3
+ } from "./chunk-5LN7D6GM.mjs";
4
4
 
5
5
  // src/observability.ts
6
6
  import { Event, scheduleTaskInterval } from "@dxos/async";
7
7
  import { PublicKey } from "@dxos/client";
8
8
  import { Context } from "@dxos/context";
9
9
  import { invariant } from "@dxos/invariant";
10
- import { LogLevel, log as log3 } from "@dxos/log";
10
+ import { LogLevel, log } from "@dxos/log";
11
11
  import { ConnectionState } from "@dxos/network-manager";
12
12
  import { DeviceKind, Platform } from "@dxos/protocols/proto/dxos/client/services";
13
13
  import { isNode } from "@dxos/util";
@@ -21,163 +21,6 @@ var cli_observability_secrets_default = {
21
21
  OTEL_AUTHORIZATION: "Basic OTA3MzIzOmdsY19leUp2SWpvaU1URXdNVEl6TnlJc0ltNGlPaUp6ZEdGamF5MDVNRGN6TWpNdGFXNTBaV2R5WVhScGIyNHRZMnh2ZFdSbWJHRnlaUzF2ZEd4d0xYQnliM2g1SWl3aWF5STZJalZ2Tkd4cFYydE5iRmszTlRNMGJUVXpTemRTVjNBeVNpSXNJbTBpT25zaWNpSTZJbkJ5YjJRdGRYTXRaV0Z6ZEMwd0luMTk="
22
22
  };
23
23
 
24
- // src/helpers/browser-observability.ts
25
- import * as localForage from "localforage";
26
- import { log } from "@dxos/log";
27
- var __dxlog_file = "/__w/dxos/dxos/packages/sdk/observability/src/helpers/browser-observability.ts";
28
- var OBSERVABILITY_DISABLED_KEY = "observability-disabled";
29
- var OBSERVABILITY_GROUP_KEY = "observability-group";
30
- var isObservabilityDisabled = async (namespace) => {
31
- try {
32
- return await localForage.getItem(`${namespace}:${OBSERVABILITY_DISABLED_KEY}`) === "true";
33
- } catch (err) {
34
- log.catch("Failed to check if observability is disabled, assuming it is", err, {
35
- F: __dxlog_file,
36
- L: 25,
37
- S: void 0,
38
- C: (f, a) => f(...a)
39
- });
40
- return true;
41
- }
42
- };
43
- var storeObservabilityDisabled = async (namespace, value) => {
44
- try {
45
- await localForage.setItem(`${namespace}:${OBSERVABILITY_DISABLED_KEY}`, String(value));
46
- } catch (err) {
47
- log.catch("Failed to store observability disabled", err, {
48
- F: __dxlog_file,
49
- L: 34,
50
- S: void 0,
51
- C: (f, a) => f(...a)
52
- });
53
- }
54
- };
55
- var getObservabilityGroup = async (namespace) => {
56
- try {
57
- return await localForage.getItem(`${namespace}:${OBSERVABILITY_GROUP_KEY}`) ?? void 0;
58
- } catch (err) {
59
- log.catch("Failed to get observability group", err, {
60
- F: __dxlog_file,
61
- L: 42,
62
- S: void 0,
63
- C: (f, a) => f(...a)
64
- });
65
- }
66
- };
67
- var storeObservabilityGroup = async (namespace, value) => {
68
- try {
69
- await localForage.setItem(`${namespace}:${OBSERVABILITY_GROUP_KEY}`, value);
70
- } catch (err) {
71
- log.catch("Failed to store observability group", err, {
72
- F: __dxlog_file,
73
- L: 50,
74
- S: void 0,
75
- C: (f, a) => f(...a)
76
- });
77
- }
78
- };
79
- var initializeAppObservability = async ({
80
- namespace,
81
- config,
82
- // TODO(nf): Configure mode.
83
- mode = "basic",
84
- tracingEnable = false,
85
- replayEnable = false
86
- }) => {
87
- log("initializeAppObservability", {
88
- config
89
- }, {
90
- F: __dxlog_file,
91
- L: 74,
92
- S: void 0,
93
- C: (f, a) => f(...a)
94
- });
95
- const group = await getObservabilityGroup(namespace) ?? void 0;
96
- const release = `${namespace}@${config.get("runtime.app.build.version")}`;
97
- const environment = config.get("runtime.app.env.DX_ENVIRONMENT");
98
- const { Observability: Observability2 } = await import("./observability-ZVQ2YD62.mjs");
99
- const observability = new Observability2({
100
- namespace,
101
- release,
102
- environment,
103
- group,
104
- mode,
105
- config,
106
- errorLog: {
107
- sentryInitOptions: {
108
- environment,
109
- release,
110
- tracing: tracingEnable,
111
- replay: replayEnable,
112
- // TODO(wittjosiah): Configure these.
113
- // Consider using a sampling function to dynamically configure these values.
114
- // https://docs.sentry.io/platforms/javascript/configuration/sampling/#setting-a-sampling-function
115
- sampleRate: 1,
116
- replaySampleRate: 1,
117
- replaySampleRateOnError: 1
118
- }
119
- }
120
- });
121
- const observabilityDisabled = await isObservabilityDisabled(namespace);
122
- if (observabilityDisabled) {
123
- observability.setMode("disabled");
124
- log.info("observability disabled", void 0, {
125
- F: __dxlog_file,
126
- L: 114,
127
- S: void 0,
128
- C: (f, a) => f(...a)
129
- });
130
- return observability;
131
- }
132
- try {
133
- const getIPData = async (config2) => {
134
- const IP_DATA_CACHE_TIMEOUT = 6 * 60 * 60 * 1e3;
135
- const cachedData = await localForage.getItem("dxos:observability:ipdata");
136
- if (cachedData && cachedData.timestamp > Date.now() - IP_DATA_CACHE_TIMEOUT) {
137
- return cachedData.data;
138
- }
139
- const IPDATA_API_KEY = config2.get("runtime.app.env.DX_IPDATA_API_KEY");
140
- if (IPDATA_API_KEY) {
141
- return fetch(`https://api.ipdata.co?api-key=${IPDATA_API_KEY}`).then((res) => res.json()).then((data) => {
142
- localForage.setItem("dxos:observability:ipdata", {
143
- data,
144
- timestamp: Date.now()
145
- }).catch((err) => observability.captureException(err));
146
- return data;
147
- }).catch((err) => observability.captureException(err));
148
- }
149
- };
150
- await observability.initialize();
151
- observability.startErrorLogs();
152
- const ipData = await getIPData(config);
153
- ipData && observability.setIPDataTelemetryTags(ipData);
154
- if (typeof navigator !== "undefined" && navigator.storage?.estimate) {
155
- setInterval(async () => {
156
- try {
157
- const storageEstimate = await navigator.storage.estimate();
158
- storageEstimate.usage && observability.setTag("storageUsage", storageEstimate.usage.toString(), "telemetry");
159
- storageEstimate.quota && observability.setTag("storageQuota", storageEstimate.quota.toString(), "telemetry");
160
- } catch (error) {
161
- log.warn("Failed to run estimate()", error, {
162
- F: __dxlog_file,
163
- L: 169,
164
- S: void 0,
165
- C: (f, a) => f(...a)
166
- });
167
- }
168
- }, 1e4);
169
- }
170
- } catch (err) {
171
- log.error("Failed to initialize app observability", err, {
172
- F: __dxlog_file,
173
- L: 174,
174
- S: void 0,
175
- C: (f, a) => f(...a)
176
- });
177
- }
178
- return observability;
179
- };
180
-
181
24
  // src/helpers/common.ts
182
25
  var getTelemetryIdentifier = (client) => {
183
26
  if (!client?.initialized) {
@@ -196,98 +39,6 @@ var getTelemetryIdentity = (client) => {
196
39
  };
197
40
  };
198
41
 
199
- // src/helpers/node-observability.ts
200
- import { existsSync, statSync } from "@dxos/node-std/fs";
201
- import { mkdir, readFile, writeFile } from "@dxos/node-std/fs/promises";
202
- import { join } from "@dxos/node-std/path";
203
- import yaml from "js-yaml";
204
- import { v4 as uuid, validate as validateUuid } from "uuid";
205
- import { log as log2 } from "@dxos/log";
206
- var __dxlog_file2 = "/__w/dxos/dxos/packages/sdk/observability/src/helpers/node-observability.ts";
207
- var showObservabilityBanner = async (configDir, bannercb) => {
208
- const path = join(configDir, ".observability-banner-printed");
209
- if (existsSync(path)) {
210
- return;
211
- }
212
- bannercb(
213
- // eslint-disable-next-line no-multi-str
214
- "Basic observability data will be sent to the DXOS team in order to improve the product. This includes performance metrics, error logs, and usage data. No personally identifiable information, other than your public key, is included with this data and no private data ever leaves your devices. To disable sending observability data, set the environment variable DX_DISABLE_OBSERVABILITY=true."
215
- );
216
- await writeFile(path, "", "utf-8");
217
- };
218
- var getObservabilityState = async (configDir) => {
219
- if (existsSync(configDir)) {
220
- if (!statSync(configDir).isDirectory()) {
221
- throw new Error(`Config directory ${configDir} exists but is not a directory`);
222
- }
223
- } else {
224
- await mkdir(configDir, {
225
- recursive: true
226
- });
227
- }
228
- const idPath = join(configDir, "observability.yml");
229
- if (existsSync(idPath)) {
230
- const context = await readFile(idPath, "utf-8");
231
- return validate(context) ?? initializeState(idPath);
232
- }
233
- return initializeState(idPath);
234
- };
235
- var initializeState = async (idPath) => {
236
- const observabilityState = {
237
- installationId: uuid(),
238
- group: process.env.DX_OBSERVABILITY_GROUP ?? void 0,
239
- mode: process.env.DX_DISABLE_OBSERVABILITY ? "disabled" : process.env.DX_OBSERVABILITY_MODE ?? "basic"
240
- };
241
- await writeFile(idPath, "# This file is automatically generated by the @dxos/cli.\n" + yaml.dump(observabilityState), "utf-8");
242
- return observabilityState;
243
- };
244
- var validate = (contextString) => {
245
- const context = yaml.load(contextString);
246
- if (Boolean(context.installationId) && validateUuid(context.installationId)) {
247
- return {
248
- ...context,
249
- mode: process.env.DX_DISABLE_OBSERVABILITY ? "disabled" : context.mode ?? "basic"
250
- };
251
- }
252
- };
253
- var initializeNodeObservability = async ({ namespace, version, config, installationId, group, mode = "basic", tracingEnable = true, replayEnable = true }) => {
254
- log2("initializeCliObservability", {
255
- config
256
- }, {
257
- F: __dxlog_file2,
258
- L: 111,
259
- S: void 0,
260
- C: (f, a) => f(...a)
261
- });
262
- const release = `${namespace}@${version}`;
263
- const environment = process.env.DX_ENVIRONMENT ?? "unknown";
264
- const observability = new Observability({
265
- mode,
266
- namespace,
267
- release,
268
- environment,
269
- group,
270
- errorLog: {
271
- sentryInitOptions: {
272
- environment,
273
- release,
274
- // TODO(wittjosiah): Configure this.
275
- sampleRate: 1
276
- }
277
- }
278
- });
279
- observability.setTag("installationId", installationId);
280
- const IPDATA_API_KEY = config.get("runtime.app.env.DX_IPDATA_API_KEY");
281
- try {
282
- const res = await fetch(`https://api.ipdata.co/?api-key=${IPDATA_API_KEY}`);
283
- const ipData = await res.json();
284
- ipData && observability.setIPDataTelemetryTags(ipData);
285
- } catch (err) {
286
- observability?.captureException(err);
287
- }
288
- return observability;
289
- };
290
-
291
42
  // src/helpers/map-spaces.ts
292
43
  var mapSpaces = (spaces, options = {
293
44
  verbose: false,
@@ -306,7 +57,7 @@ var mapSpaces = (spaces, options = {
306
57
  key: space.key.truncate(),
307
58
  open: space.isOpen,
308
59
  members: space.members.get().length,
309
- objects: space.db.coreDatabase.getAllObjectIds().length,
60
+ objects: space.internal.db.coreDatabase.getAllObjectIds().length,
310
61
  startup,
311
62
  epoch,
312
63
  // appliedEpoch,
@@ -319,112 +70,51 @@ var mapSpaces = (spaces, options = {
319
70
  });
320
71
  };
321
72
 
322
- // src/helpers/setup-telemetry-listeners.ts
323
- var lastFocusEvent = /* @__PURE__ */ new Date();
324
- var totalTime = 0;
325
- var setupTelemetryListeners = (namespace, client, observability) => {
326
- const clickCallback = (event) => {
327
- const id = event.target?.id;
328
- if (!id) {
329
- return;
330
- }
331
- setTimeout(() => {
332
- observability.track({
333
- ...getTelemetryIdentity(client),
334
- action: "window.click",
335
- properties: {
336
- id: event.target?.id,
337
- path: event.composedPath().filter((el) => Boolean(el.tagName)).map((el) => `${el.tagName.toLowerCase()}${el.id ? `#${el.id}` : ""}`).reverse().join(">")
338
- }
339
- });
340
- });
341
- };
342
- const focusCallback = () => {
343
- const now = /* @__PURE__ */ new Date();
344
- setTimeout(() => {
345
- observability.track({
346
- ...getTelemetryIdentity(client),
347
- action: "window.focus",
348
- properties: {
349
- timeAway: now.getTime() - lastFocusEvent.getTime()
350
- }
351
- });
352
- });
353
- lastFocusEvent = now;
354
- };
355
- const blurCallback = () => {
356
- const now = /* @__PURE__ */ new Date();
357
- const duration = now.getTime() - lastFocusEvent.getTime();
358
- setTimeout(() => {
359
- observability.track({
360
- ...getTelemetryIdentity(client),
361
- action: "window.blur",
362
- properties: {
363
- duration
364
- }
365
- });
366
- });
367
- lastFocusEvent = now;
368
- totalTime = totalTime + duration;
369
- };
370
- const unloadCallback = () => {
371
- setTimeout(() => {
372
- observability.track({
373
- ...getTelemetryIdentity(client),
374
- action: "page.unload",
375
- properties: {
376
- duration: totalTime
377
- }
378
- });
379
- });
380
- };
381
- const errorCallback = (event) => {
382
- setTimeout(() => {
383
- observability.track({
384
- ...getTelemetryIdentity(client),
385
- action: "window.error",
386
- properties: {
387
- message: event.message,
388
- filename: event.filename,
389
- stack: event.error?.stack,
390
- cause: event.error?.cause
391
- }
392
- });
393
- });
394
- };
395
- window.addEventListener("click", clickCallback, true);
396
- window.addEventListener("focus", focusCallback);
397
- window.addEventListener("blur", blurCallback);
398
- window.addEventListener("beforeunload", unloadCallback);
399
- window.addEventListener("error", errorCallback);
400
- return () => {
401
- window.removeEventListener("click", clickCallback, true);
402
- window.removeEventListener("focus", focusCallback);
403
- window.removeEventListener("blur", blurCallback);
404
- window.removeEventListener("beforeunload", unloadCallback);
405
- window.removeEventListener("error", errorCallback);
406
- };
407
- };
408
-
409
73
  // src/observability.ts
410
- function _define_property(obj, key, value) {
411
- if (key in obj) {
412
- Object.defineProperty(obj, key, {
413
- value,
414
- enumerable: true,
415
- configurable: true,
416
- writable: true
417
- });
418
- } else {
419
- obj[key] = value;
420
- }
421
- return obj;
422
- }
423
- var __dxlog_file3 = "/__w/dxos/dxos/packages/sdk/observability/src/observability.ts";
74
+ var __dxlog_file = "/__w/dxos/dxos/packages/sdk/observability/src/observability.ts";
424
75
  var SPACE_METRICS_MIN_INTERVAL = 1e3 * 60;
425
76
  var SPACE_TELEMETRY_MIN_INTERVAL = 1e3 * 60 * 60;
426
77
  var NETWORK_METRICS_MIN_INTERVAL = 1e3 * 60 * 5;
427
78
  var Observability = class {
79
+ _mode;
80
+ _namespace;
81
+ _config;
82
+ _group;
83
+ _secrets;
84
+ _tags = /* @__PURE__ */ new Map();
85
+ // TODO(wittjosiah): Generic metrics interface.
86
+ _otelMetrics;
87
+ _otelTraces;
88
+ // TODO(wittjosiah): Generic telemetry interface.
89
+ _telemetryBatchSize;
90
+ _telemetry;
91
+ // TODO(wittjosiah): Generic error logging interface.
92
+ _sentryLogProcessor;
93
+ _otelLogs;
94
+ _errorReportingOptions;
95
+ _captureException;
96
+ _captureUserFeedback;
97
+ _lastNetworkStatus;
98
+ _ctx = new Context(void 0, {
99
+ F: __dxlog_file,
100
+ L: 115
101
+ });
102
+ // TODO(nf): make platform a required extension?
103
+ constructor({ mode, namespace, environment, release, config, group, secrets, telemetry, errorLog }) {
104
+ this._mode = mode;
105
+ this._namespace = namespace;
106
+ this._config = config;
107
+ this._group = group;
108
+ this._secrets = this._loadSecrets(config, secrets);
109
+ this._telemetryBatchSize = telemetry?.batchSize ?? 30;
110
+ this._errorReportingOptions = errorLog?.sentryInitOptions;
111
+ this.setTag("mode", this._mode);
112
+ this.setTag("namespace", this._namespace);
113
+ this.setTag("environment", environment);
114
+ this.setTag("release", release);
115
+ this.setTag("session", PublicKey.random().toHex());
116
+ this.setTag("group", this._group);
117
+ }
428
118
  get mode() {
429
119
  return this._mode;
430
120
  }
@@ -449,11 +139,11 @@ var Observability = class {
449
139
  process.env.DX_OTEL_AUTHORIZATION && (mergedSecrets.OTEL_AUTHORIZATION = process.env.DX_OTEL_AUTHORIZATION);
450
140
  return mergedSecrets;
451
141
  } else {
452
- log3("config", {
142
+ log("config", {
453
143
  rtc: this._secrets,
454
144
  config
455
145
  }, {
456
- F: __dxlog_file3,
146
+ F: __dxlog_file,
457
147
  L: 176,
458
148
  S: this,
459
149
  C: (f, a) => f(...a)
@@ -471,8 +161,8 @@ var Observability = class {
471
161
  }
472
162
  }
473
163
  async initialize() {
474
- log3("initializing...", void 0, {
475
- F: __dxlog_file3,
164
+ log("initializing...", void 0, {
165
+ F: __dxlog_file,
476
166
  L: 191,
477
167
  S: this,
478
168
  C: (f, a) => f(...a)
@@ -484,8 +174,8 @@ var Observability = class {
484
174
  await this._initTraces();
485
175
  }
486
176
  async close() {
487
- log3("closing...", void 0, {
488
- F: __dxlog_file3,
177
+ log("closing...", void 0, {
178
+ F: __dxlog_file,
489
179
  L: 200,
490
180
  S: this,
491
181
  C: (f, a) => f(...a)
@@ -500,6 +190,11 @@ var Observability = class {
500
190
  setMode(mode) {
501
191
  this._mode = mode;
502
192
  }
193
+ //
194
+ // Tags
195
+ //
196
+ /** Callback (e.g., to share tags with Sentry.) */
197
+ _setTag;
503
198
  /**
504
199
  * camelCase keys are converted to snake_case in Segment.
505
200
  */
@@ -526,10 +221,10 @@ var Observability = class {
526
221
  if (clientServices.IdentityService) {
527
222
  clientServices.IdentityService.queryIdentity().subscribe((idqr) => {
528
223
  if (!idqr?.identity?.did) {
529
- log3("empty response from identity service", {
224
+ log("empty response from identity service", {
530
225
  idqr
531
226
  }, {
532
- F: __dxlog_file3,
227
+ F: __dxlog_file,
533
228
  L: 247,
534
229
  S: this,
535
230
  C: (f, a) => f(...a)
@@ -545,10 +240,10 @@ var Observability = class {
545
240
  if (clientServices.DevicesService) {
546
241
  clientServices.DevicesService.queryDevices().subscribe((dqr) => {
547
242
  if (!dqr || !dqr.devices || dqr.devices.length === 0) {
548
- log3("empty response from device service", {
243
+ log("empty response from device service", {
549
244
  device: dqr
550
245
  }, {
551
- F: __dxlog_file3,
246
+ F: __dxlog_file,
552
247
  L: 259,
553
248
  S: this,
554
249
  C: (f, a) => f(...a)
@@ -556,7 +251,7 @@ var Observability = class {
556
251
  return;
557
252
  }
558
253
  invariant(dqr, "empty response from device service", {
559
- F: __dxlog_file3,
254
+ F: __dxlog_file,
560
255
  L: 263,
561
256
  S: this,
562
257
  A: [
@@ -566,10 +261,10 @@ var Observability = class {
566
261
  });
567
262
  const thisDevice = dqr.devices.find((device) => device.kind === DeviceKind.CURRENT);
568
263
  if (!thisDevice) {
569
- log3("no current device", {
264
+ log("no current device", {
570
265
  device: dqr
571
266
  }, {
572
- F: __dxlog_file3,
267
+ F: __dxlog_file,
573
268
  L: 266,
574
269
  S: this,
575
270
  C: (f, a) => f(...a)
@@ -583,12 +278,19 @@ var Observability = class {
583
278
  });
584
279
  }
585
280
  }
281
+ setIPDataTelemetryTags = (ipData) => {
282
+ this.setTag("city", ipData.city, "telemetry");
283
+ this.setTag("region", ipData.region, "telemetry");
284
+ this.setTag("country", ipData.country, "telemetry");
285
+ ipData.latitude && this.setTag("latitude", ipData.latitude.toString(), "telemetry");
286
+ ipData.longitude && this.setTag("longitude", ipData.longitude.toString(), "telemetry");
287
+ };
586
288
  //
587
289
  // Logs
588
290
  //
589
291
  async _initLogs() {
590
292
  if (this._secrets.OTEL_ENDPOINT && this._secrets.OTEL_AUTHORIZATION && this._mode !== "disabled") {
591
- const { OtelLogs } = await import("./otel-UHLVSR24.mjs");
293
+ const { OtelLogs } = await import("./otel-DI4ASU7Y.mjs");
592
294
  this._otelLogs = new OtelLogs({
593
295
  endpoint: this._secrets.OTEL_ENDPOINT,
594
296
  authorizationHeader: this._secrets.OTEL_AUTHORIZATION,
@@ -603,18 +305,18 @@ var Observability = class {
603
305
  logLevel: LogLevel.VERBOSE,
604
306
  includeSharedWorkerLogs: false
605
307
  });
606
- this._otelLogs && log3.runtimeConfig.processors.push(this._otelLogs.logProcessor);
607
- log3("otel logs enabled", {
308
+ this._otelLogs && log.runtimeConfig.processors.push(this._otelLogs.logProcessor);
309
+ log("otel logs enabled", {
608
310
  namespace: this._namespace
609
311
  }, {
610
- F: __dxlog_file3,
312
+ F: __dxlog_file,
611
313
  L: 310,
612
314
  S: this,
613
315
  C: (f, a) => f(...a)
614
316
  });
615
317
  } else {
616
- log3("otel logs disabled", void 0, {
617
- F: __dxlog_file3,
318
+ log("otel logs disabled", void 0, {
319
+ F: __dxlog_file,
618
320
  L: 312,
619
321
  S: this,
620
322
  C: (f, a) => f(...a)
@@ -626,7 +328,7 @@ var Observability = class {
626
328
  //
627
329
  async _initMetrics() {
628
330
  if (this.enabled && this._secrets.OTEL_ENDPOINT && this._secrets.OTEL_AUTHORIZATION) {
629
- const { OtelMetrics } = await import("./otel-UHLVSR24.mjs");
331
+ const { OtelMetrics } = await import("./otel-DI4ASU7Y.mjs");
630
332
  this._otelMetrics = new OtelMetrics({
631
333
  endpoint: this._secrets.OTEL_ENDPOINT,
632
334
  authorizationHeader: this._secrets.OTEL_AUTHORIZATION,
@@ -639,15 +341,15 @@ var Observability = class {
639
341
  value.value
640
342
  ]))
641
343
  });
642
- log3("otel metrics enabled", void 0, {
643
- F: __dxlog_file3,
344
+ log("otel metrics enabled", void 0, {
345
+ F: __dxlog_file,
644
346
  L: 337,
645
347
  S: this,
646
348
  C: (f, a) => f(...a)
647
349
  });
648
350
  } else {
649
- log3("otel metrics disabled", void 0, {
650
- F: __dxlog_file3,
351
+ log("otel metrics disabled", void 0, {
352
+ F: __dxlog_file,
651
353
  L: 339,
652
354
  S: this,
653
355
  C: (f, a) => f(...a)
@@ -669,8 +371,8 @@ var Observability = class {
669
371
  }
670
372
  const updateSignalMetrics = new Event().debounce(NETWORK_METRICS_MIN_INTERVAL);
671
373
  updateSignalMetrics.on(this._ctx, async () => {
672
- log3("send signal metrics", void 0, {
673
- F: __dxlog_file3,
374
+ log("send signal metrics", void 0, {
375
+ F: __dxlog_file,
674
376
  L: 361,
675
377
  S: this,
676
378
  C: (f, a) => f(...a)
@@ -721,8 +423,8 @@ var Observability = class {
721
423
  this._ctx.onDispose(() => subscriptions.forEach((subscription) => subscription.unsubscribe()));
722
424
  const updateSpaceMetrics = new Event().debounce(SPACE_METRICS_MIN_INTERVAL);
723
425
  updateSpaceMetrics.on(this._ctx, async () => {
724
- log3("send space metrics", void 0, {
725
- F: __dxlog_file3,
426
+ log("send space metrics", void 0, {
427
+ F: __dxlog_file,
726
428
  L: 414,
727
429
  S: this,
728
430
  C: (f, a) => f(...a)
@@ -746,8 +448,8 @@ var Observability = class {
746
448
  });
747
449
  const updateSpaceTelemetry = new Event().debounce(SPACE_TELEMETRY_MIN_INTERVAL);
748
450
  updateSpaceTelemetry.on(this._ctx, async () => {
749
- log3("send space telemetry", void 0, {
750
- F: __dxlog_file3,
451
+ log("send space telemetry", void 0, {
452
+ F: __dxlog_file,
751
453
  L: 425,
752
454
  S: this,
753
455
  C: (f, a) => f(...a)
@@ -784,7 +486,7 @@ var Observability = class {
784
486
  async startRuntimeMetrics(client, frequency = NETWORK_METRICS_MIN_INTERVAL) {
785
487
  const platform = await client.services.services.SystemService?.getPlatform();
786
488
  invariant(platform, "platform is required", {
787
- F: __dxlog_file3,
489
+ F: __dxlog_file,
788
490
  L: 463,
789
491
  S: this,
790
492
  A: [
@@ -819,10 +521,10 @@ var Observability = class {
819
521
  this.gauge("dxos.client.services.runtime.heapTotal", platform2.memory.heapTotal);
820
522
  this.gauge("dxos.client.services.runtime.heapUsed", platform2.memory.heapUsed);
821
523
  }
822
- }).catch((error) => log3("platform error", {
524
+ }).catch((error) => log("platform error", {
823
525
  error
824
526
  }, {
825
- F: __dxlog_file3,
527
+ F: __dxlog_file,
826
528
  L: 497,
827
529
  S: this,
828
530
  C: (f, a) => f(...a)
@@ -846,8 +548,8 @@ var Observability = class {
846
548
  ]))
847
549
  });
848
550
  } else {
849
- log3("segment disabled", void 0, {
850
- F: __dxlog_file3,
551
+ log("segment disabled", void 0, {
552
+ F: __dxlog_file,
851
553
  L: 523,
852
554
  S: this,
853
555
  C: (f, a) => f(...a)
@@ -874,15 +576,15 @@ var Observability = class {
874
576
  async _initErrorLogs() {
875
577
  if (this._secrets.SENTRY_DESTINATION && this._mode !== "disabled") {
876
578
  const { captureException, captureUserFeedback, init, setTag } = await import("./sentry/index.mjs");
877
- const { SentryLogProcessor } = await import("./sentry-log-processor-RG4CFVGL.mjs");
579
+ const { SentryLogProcessor } = await import("./sentry-log-processor-W7LI6WXA.mjs");
878
580
  this._captureException = captureException;
879
581
  this._captureUserFeedback = captureUserFeedback;
880
582
  this._setTag = setTag;
881
- log3.info("Initializing Sentry", {
583
+ log.info("Initializing Sentry", {
882
584
  dest: this._secrets.SENTRY_DESTINATION,
883
585
  options: this._errorReportingOptions
884
586
  }, {
885
- F: __dxlog_file3,
587
+ F: __dxlog_file,
886
588
  L: 556,
887
589
  S: this,
888
590
  C: (f, a) => f(...a)
@@ -900,8 +602,8 @@ var Observability = class {
900
602
  }
901
603
  });
902
604
  } else {
903
- log3("sentry disabled", void 0, {
904
- F: __dxlog_file3,
605
+ log("sentry disabled", void 0, {
606
+ F: __dxlog_file,
905
607
  L: 576,
906
608
  S: this,
907
609
  C: (f, a) => f(...a)
@@ -909,7 +611,7 @@ var Observability = class {
909
611
  }
910
612
  }
911
613
  startErrorLogs() {
912
- this._sentryLogProcessor && log3.runtimeConfig.processors.push(this._sentryLogProcessor.logProcessor);
614
+ this._sentryLogProcessor && log.runtimeConfig.processors.push(this._sentryLogProcessor.logProcessor);
913
615
  }
914
616
  startTraces() {
915
617
  this._otelTraces && this._otelTraces.start();
@@ -917,7 +619,7 @@ var Observability = class {
917
619
  // TODO(nf): Refactor init based on providers and their capabilities.
918
620
  async _initTraces() {
919
621
  if (this._secrets.OTEL_ENDPOINT && this._secrets.OTEL_AUTHORIZATION && this._mode !== "disabled") {
920
- const { OtelTraces } = await import("./otel-UHLVSR24.mjs");
622
+ const { OtelTraces } = await import("./otel-DI4ASU7Y.mjs");
921
623
  this._otelTraces = new OtelTraces({
922
624
  endpoint: this._secrets.OTEL_ENDPOINT,
923
625
  authorizationHeader: this._secrets.OTEL_AUTHORIZATION,
@@ -947,10 +649,10 @@ var Observability = class {
947
649
  */
948
650
  captureUserFeedback(message) {
949
651
  if (!this._secrets.SENTRY_DESTINATION) {
950
- log3.info("Feedback submitted without Sentry destination", {
652
+ log.info("Feedback submitted without Sentry destination", {
951
653
  message
952
654
  }, {
953
- F: __dxlog_file3,
655
+ F: __dxlog_file,
954
656
  L: 625,
955
657
  S: this,
956
658
  C: (f, a) => f(...a)
@@ -959,67 +661,12 @@ var Observability = class {
959
661
  }
960
662
  void this._captureUserFeedback?.(message);
961
663
  }
962
- // TODO(nf): make platform a required extension?
963
- constructor({ mode, namespace, environment, release, config, group, secrets, telemetry, errorLog }) {
964
- _define_property(this, "_mode", void 0);
965
- _define_property(this, "_namespace", void 0);
966
- _define_property(this, "_config", void 0);
967
- _define_property(this, "_group", void 0);
968
- _define_property(this, "_secrets", void 0);
969
- _define_property(this, "_tags", /* @__PURE__ */ new Map());
970
- _define_property(this, "_otelMetrics", void 0);
971
- _define_property(this, "_otelTraces", void 0);
972
- _define_property(this, "_telemetryBatchSize", void 0);
973
- _define_property(this, "_telemetry", void 0);
974
- _define_property(this, "_sentryLogProcessor", void 0);
975
- _define_property(this, "_otelLogs", void 0);
976
- _define_property(this, "_errorReportingOptions", void 0);
977
- _define_property(this, "_captureException", void 0);
978
- _define_property(this, "_captureUserFeedback", void 0);
979
- _define_property(this, "_lastNetworkStatus", void 0);
980
- _define_property(this, "_ctx", new Context(void 0, {
981
- F: __dxlog_file3,
982
- L: 115
983
- }));
984
- _define_property(this, "_setTag", void 0);
985
- _define_property(this, "setIPDataTelemetryTags", (ipData) => {
986
- this.setTag("city", ipData.city, "telemetry");
987
- this.setTag("region", ipData.region, "telemetry");
988
- this.setTag("country", ipData.country, "telemetry");
989
- ipData.latitude && this.setTag("latitude", ipData.latitude.toString(), "telemetry");
990
- ipData.longitude && this.setTag("longitude", ipData.longitude.toString(), "telemetry");
991
- });
992
- this._mode = mode;
993
- this._namespace = namespace;
994
- this._config = config;
995
- this._group = group;
996
- this._secrets = this._loadSecrets(config, secrets);
997
- this._telemetryBatchSize = telemetry?.batchSize ?? 30;
998
- this._errorReportingOptions = errorLog?.sentryInitOptions;
999
- this.setTag("mode", this._mode);
1000
- this.setTag("namespace", this._namespace);
1001
- this.setTag("environment", environment);
1002
- this.setTag("release", release);
1003
- this.setTag("session", PublicKey.random().toHex());
1004
- this.setTag("group", this._group);
1005
- }
1006
664
  };
1007
665
 
1008
666
  export {
1009
667
  Observability,
1010
- OBSERVABILITY_DISABLED_KEY,
1011
- OBSERVABILITY_GROUP_KEY,
1012
- isObservabilityDisabled,
1013
- storeObservabilityDisabled,
1014
- getObservabilityGroup,
1015
- storeObservabilityGroup,
1016
- initializeAppObservability,
1017
668
  getTelemetryIdentifier,
1018
669
  getTelemetryIdentity,
1019
- showObservabilityBanner,
1020
- getObservabilityState,
1021
- initializeNodeObservability,
1022
- mapSpaces,
1023
- setupTelemetryListeners
670
+ mapSpaces
1024
671
  };
1025
- //# sourceMappingURL=chunk-OO2RDFNE.mjs.map
672
+ //# sourceMappingURL=chunk-JJQT5TQH.mjs.map