@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
@@ -1,14 +1,14 @@
1
1
  import { createRequire } from 'node:module';const require = createRequire(import.meta.url);
2
2
  import {
3
3
  TelemetryEvent
4
- } from "./chunk-552KLA6Z.mjs";
4
+ } from "./chunk-UIVXGEGJ.mjs";
5
5
 
6
6
  // src/observability.ts
7
7
  import { Event, scheduleTaskInterval } from "@dxos/async";
8
8
  import { PublicKey } from "@dxos/client";
9
9
  import { Context } from "@dxos/context";
10
10
  import { invariant } from "@dxos/invariant";
11
- import { log as log3, LogLevel } from "@dxos/log";
11
+ import { LogLevel, log } from "@dxos/log";
12
12
  import { ConnectionState } from "@dxos/network-manager";
13
13
  import { DeviceKind, Platform } from "@dxos/protocols/proto/dxos/client/services";
14
14
  import { isNode } from "@dxos/util";
@@ -22,163 +22,6 @@ var cli_observability_secrets_default = {
22
22
  OTEL_AUTHORIZATION: "Basic OTA3MzIzOmdsY19leUp2SWpvaU1URXdNVEl6TnlJc0ltNGlPaUp6ZEdGamF5MDVNRGN6TWpNdGFXNTBaV2R5WVhScGIyNHRZMnh2ZFdSbWJHRnlaUzF2ZEd4d0xYQnliM2g1SWl3aWF5STZJalZ2Tkd4cFYydE5iRmszTlRNMGJUVXpTemRTVjNBeVNpSXNJbTBpT25zaWNpSTZJbkJ5YjJRdGRYTXRaV0Z6ZEMwd0luMTk="
23
23
  };
24
24
 
25
- // src/helpers/browser-observability.ts
26
- import * as localForage from "localforage";
27
- import { log } from "@dxos/log";
28
- var __dxlog_file = "/__w/dxos/dxos/packages/sdk/observability/src/helpers/browser-observability.ts";
29
- var OBSERVABILITY_DISABLED_KEY = "observability-disabled";
30
- var OBSERVABILITY_GROUP_KEY = "observability-group";
31
- var isObservabilityDisabled = async (namespace) => {
32
- try {
33
- return await localForage.getItem(`${namespace}:${OBSERVABILITY_DISABLED_KEY}`) === "true";
34
- } catch (err) {
35
- log.catch("Failed to check if observability is disabled, assuming it is", err, {
36
- F: __dxlog_file,
37
- L: 24,
38
- S: void 0,
39
- C: (f, a) => f(...a)
40
- });
41
- return true;
42
- }
43
- };
44
- var storeObservabilityDisabled = async (namespace, value) => {
45
- try {
46
- await localForage.setItem(`${namespace}:${OBSERVABILITY_DISABLED_KEY}`, String(value));
47
- } catch (err) {
48
- log.catch("Failed to store observability disabled", err, {
49
- F: __dxlog_file,
50
- L: 33,
51
- S: void 0,
52
- C: (f, a) => f(...a)
53
- });
54
- }
55
- };
56
- var getObservabilityGroup = async (namespace) => {
57
- try {
58
- return await localForage.getItem(`${namespace}:${OBSERVABILITY_GROUP_KEY}`) ?? void 0;
59
- } catch (err) {
60
- log.catch("Failed to get observability group", err, {
61
- F: __dxlog_file,
62
- L: 41,
63
- S: void 0,
64
- C: (f, a) => f(...a)
65
- });
66
- }
67
- };
68
- var storeObservabilityGroup = async (namespace, value) => {
69
- try {
70
- await localForage.setItem(`${namespace}:${OBSERVABILITY_GROUP_KEY}`, value);
71
- } catch (err) {
72
- log.catch("Failed to store observability group", err, {
73
- F: __dxlog_file,
74
- L: 49,
75
- S: void 0,
76
- C: (f, a) => f(...a)
77
- });
78
- }
79
- };
80
- var initializeAppObservability = async ({
81
- namespace,
82
- config,
83
- // TODO(nf): Configure mode.
84
- mode = "basic",
85
- tracingEnable = false,
86
- replayEnable = false
87
- }) => {
88
- log("initializeAppObservability", {
89
- config
90
- }, {
91
- F: __dxlog_file,
92
- L: 73,
93
- S: void 0,
94
- C: (f, a) => f(...a)
95
- });
96
- const group = await getObservabilityGroup(namespace) ?? void 0;
97
- const release = `${namespace}@${config.get("runtime.app.build.version")}`;
98
- const environment = config.get("runtime.app.env.DX_ENVIRONMENT");
99
- const { Observability: Observability2 } = await import("./observability-F2NNZIF6.mjs");
100
- const observability = new Observability2({
101
- namespace,
102
- release,
103
- environment,
104
- group,
105
- mode,
106
- config,
107
- errorLog: {
108
- sentryInitOptions: {
109
- environment,
110
- release,
111
- tracing: tracingEnable,
112
- replay: replayEnable,
113
- // TODO(wittjosiah): Configure these.
114
- // Consider using a sampling function to dynamically configure these values.
115
- // https://docs.sentry.io/platforms/javascript/configuration/sampling/#setting-a-sampling-function
116
- sampleRate: 1,
117
- replaySampleRate: 1,
118
- replaySampleRateOnError: 1
119
- }
120
- }
121
- });
122
- const observabilityDisabled = await isObservabilityDisabled(namespace);
123
- if (observabilityDisabled) {
124
- observability.setMode("disabled");
125
- log.info("observability disabled", void 0, {
126
- F: __dxlog_file,
127
- L: 113,
128
- S: void 0,
129
- C: (f, a) => f(...a)
130
- });
131
- return observability;
132
- }
133
- try {
134
- const getIPData = async (config2) => {
135
- const IP_DATA_CACHE_TIMEOUT = 6 * 60 * 60 * 1e3;
136
- const cachedData = await localForage.getItem("dxos:observability:ipdata");
137
- if (cachedData && cachedData.timestamp > Date.now() - IP_DATA_CACHE_TIMEOUT) {
138
- return cachedData.data;
139
- }
140
- const IPDATA_API_KEY = config2.get("runtime.app.env.DX_IPDATA_API_KEY");
141
- if (IPDATA_API_KEY) {
142
- return fetch(`https://api.ipdata.co?api-key=${IPDATA_API_KEY}`).then((res) => res.json()).then((data) => {
143
- localForage.setItem("dxos:observability:ipdata", {
144
- data,
145
- timestamp: Date.now()
146
- }).catch((err) => observability.captureException(err));
147
- return data;
148
- }).catch((err) => observability.captureException(err));
149
- }
150
- };
151
- await observability.initialize();
152
- observability.startErrorLogs();
153
- const ipData = await getIPData(config);
154
- ipData && observability.setIPDataTelemetryTags(ipData);
155
- if (typeof navigator !== "undefined" && navigator.storage?.estimate) {
156
- setInterval(async () => {
157
- try {
158
- const storageEstimate = await navigator.storage.estimate();
159
- storageEstimate.usage && observability.setTag("storageUsage", storageEstimate.usage.toString(), "telemetry");
160
- storageEstimate.quota && observability.setTag("storageQuota", storageEstimate.quota.toString(), "telemetry");
161
- } catch (error) {
162
- log.warn("Failed to run estimate()", error, {
163
- F: __dxlog_file,
164
- L: 168,
165
- S: void 0,
166
- C: (f, a) => f(...a)
167
- });
168
- }
169
- }, 1e4);
170
- }
171
- } catch (err) {
172
- log.error("Failed to initialize app observability", err, {
173
- F: __dxlog_file,
174
- L: 173,
175
- S: void 0,
176
- C: (f, a) => f(...a)
177
- });
178
- }
179
- return observability;
180
- };
181
-
182
25
  // src/helpers/common.ts
183
26
  var getTelemetryIdentifier = (client) => {
184
27
  if (!client?.initialized) {
@@ -197,98 +40,6 @@ var getTelemetryIdentity = (client) => {
197
40
  };
198
41
  };
199
42
 
200
- // src/helpers/node-observability.ts
201
- import yaml from "js-yaml";
202
- import { existsSync, statSync } from "node:fs";
203
- import { mkdir, readFile, writeFile } from "node:fs/promises";
204
- import { join } from "node:path";
205
- import { v4 as uuid, validate as validateUuid } from "uuid";
206
- import { log as log2 } from "@dxos/log";
207
- var __dxlog_file2 = "/__w/dxos/dxos/packages/sdk/observability/src/helpers/node-observability.ts";
208
- var showObservabilityBanner = async (configDir, bannercb) => {
209
- const path = join(configDir, ".observability-banner-printed");
210
- if (existsSync(path)) {
211
- return;
212
- }
213
- bannercb(
214
- // eslint-disable-next-line no-multi-str
215
- "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."
216
- );
217
- await writeFile(path, "", "utf-8");
218
- };
219
- var getObservabilityState = async (configDir) => {
220
- if (existsSync(configDir)) {
221
- if (!statSync(configDir).isDirectory()) {
222
- throw new Error(`Config directory ${configDir} exists but is not a directory`);
223
- }
224
- } else {
225
- await mkdir(configDir, {
226
- recursive: true
227
- });
228
- }
229
- const idPath = join(configDir, "observability.yml");
230
- if (existsSync(idPath)) {
231
- const context = await readFile(idPath, "utf-8");
232
- return validate(context) ?? initializeState(idPath);
233
- }
234
- return initializeState(idPath);
235
- };
236
- var initializeState = async (idPath) => {
237
- const observabilityState = {
238
- installationId: uuid(),
239
- group: process.env.DX_OBSERVABILITY_GROUP ?? void 0,
240
- mode: process.env.DX_DISABLE_OBSERVABILITY ? "disabled" : process.env.DX_OBSERVABILITY_MODE ?? "basic"
241
- };
242
- await writeFile(idPath, "# This file is automatically generated by the @dxos/cli.\n" + yaml.dump(observabilityState), "utf-8");
243
- return observabilityState;
244
- };
245
- var validate = (contextString) => {
246
- const context = yaml.load(contextString);
247
- if (Boolean(context.installationId) && validateUuid(context.installationId)) {
248
- return {
249
- ...context,
250
- mode: process.env.DX_DISABLE_OBSERVABILITY ? "disabled" : context.mode ?? "basic"
251
- };
252
- }
253
- };
254
- var initializeNodeObservability = async ({ namespace, version, config, installationId, group, mode = "basic", tracingEnable = true, replayEnable = true }) => {
255
- log2("initializeCliObservability", {
256
- config
257
- }, {
258
- F: __dxlog_file2,
259
- L: 110,
260
- S: void 0,
261
- C: (f, a) => f(...a)
262
- });
263
- const release = `${namespace}@${version}`;
264
- const environment = process.env.DX_ENVIRONMENT ?? "unknown";
265
- const observability = new Observability({
266
- mode,
267
- namespace,
268
- release,
269
- environment,
270
- group,
271
- errorLog: {
272
- sentryInitOptions: {
273
- environment,
274
- release,
275
- // TODO(wittjosiah): Configure this.
276
- sampleRate: 1
277
- }
278
- }
279
- });
280
- observability.setTag("installationId", installationId);
281
- const IPDATA_API_KEY = config.get("runtime.app.env.DX_IPDATA_API_KEY");
282
- try {
283
- const res = await fetch(`https://api.ipdata.co/?api-key=${IPDATA_API_KEY}`);
284
- const ipData = await res.json();
285
- ipData && observability.setIPDataTelemetryTags(ipData);
286
- } catch (err) {
287
- observability?.captureException(err);
288
- }
289
- return observability;
290
- };
291
-
292
43
  // src/helpers/map-spaces.ts
293
44
  var mapSpaces = (spaces, options = {
294
45
  verbose: false,
@@ -307,7 +58,7 @@ var mapSpaces = (spaces, options = {
307
58
  key: space.key.truncate(),
308
59
  open: space.isOpen,
309
60
  members: space.members.get().length,
310
- objects: space.db.coreDatabase.getAllObjectIds().length,
61
+ objects: space.internal.db.coreDatabase.getAllObjectIds().length,
311
62
  startup,
312
63
  epoch,
313
64
  // appliedEpoch,
@@ -320,113 +71,37 @@ var mapSpaces = (spaces, options = {
320
71
  });
321
72
  };
322
73
 
323
- // src/helpers/setup-telemetry-listeners.ts
324
- var lastFocusEvent = /* @__PURE__ */ new Date();
325
- var totalTime = 0;
326
- var setupTelemetryListeners = (namespace, client, observability) => {
327
- const clickCallback = (event) => {
328
- const id = event.target?.id;
329
- if (!id) {
330
- return;
331
- }
332
- setTimeout(() => {
333
- observability.track({
334
- ...getTelemetryIdentity(client),
335
- action: "window.click",
336
- properties: {
337
- id: event.target?.id,
338
- path: event.composedPath().filter((el) => Boolean(el.tagName)).map((el) => `${el.tagName.toLowerCase()}${el.id ? `#${el.id}` : ""}`).reverse().join(">")
339
- }
340
- });
341
- });
342
- };
343
- const focusCallback = () => {
344
- const now = /* @__PURE__ */ new Date();
345
- setTimeout(() => {
346
- observability.track({
347
- ...getTelemetryIdentity(client),
348
- action: "window.focus",
349
- properties: {
350
- timeAway: now.getTime() - lastFocusEvent.getTime()
351
- }
352
- });
353
- });
354
- lastFocusEvent = now;
355
- };
356
- const blurCallback = () => {
357
- const now = /* @__PURE__ */ new Date();
358
- const duration = now.getTime() - lastFocusEvent.getTime();
359
- setTimeout(() => {
360
- observability.track({
361
- ...getTelemetryIdentity(client),
362
- action: "window.blur",
363
- properties: {
364
- duration
365
- }
366
- });
367
- });
368
- lastFocusEvent = now;
369
- totalTime = totalTime + duration;
370
- };
371
- const unloadCallback = () => {
372
- setTimeout(() => {
373
- observability.track({
374
- ...getTelemetryIdentity(client),
375
- action: "page.unload",
376
- properties: {
377
- duration: totalTime
378
- }
379
- });
380
- });
381
- };
382
- const errorCallback = (event) => {
383
- setTimeout(() => {
384
- observability.track({
385
- ...getTelemetryIdentity(client),
386
- action: "window.error",
387
- properties: {
388
- message: event.message,
389
- filename: event.filename,
390
- stack: event.error?.stack,
391
- cause: event.error?.cause
392
- }
393
- });
394
- });
395
- };
396
- window.addEventListener("click", clickCallback, true);
397
- window.addEventListener("focus", focusCallback);
398
- window.addEventListener("blur", blurCallback);
399
- window.addEventListener("beforeunload", unloadCallback);
400
- window.addEventListener("error", errorCallback);
401
- return () => {
402
- window.removeEventListener("click", clickCallback, true);
403
- window.removeEventListener("focus", focusCallback);
404
- window.removeEventListener("blur", blurCallback);
405
- window.removeEventListener("beforeunload", unloadCallback);
406
- window.removeEventListener("error", errorCallback);
407
- };
408
- };
409
-
410
74
  // src/observability.ts
411
- var __dxlog_file3 = "/__w/dxos/dxos/packages/sdk/observability/src/observability.ts";
75
+ var __dxlog_file = "/__w/dxos/dxos/packages/sdk/observability/src/observability.ts";
412
76
  var SPACE_METRICS_MIN_INTERVAL = 1e3 * 60;
413
77
  var SPACE_TELEMETRY_MIN_INTERVAL = 1e3 * 60 * 60;
414
78
  var NETWORK_METRICS_MIN_INTERVAL = 1e3 * 60 * 5;
415
79
  var Observability = class {
80
+ _mode;
81
+ _namespace;
82
+ _config;
83
+ _group;
84
+ _secrets;
85
+ _tags = /* @__PURE__ */ new Map();
86
+ // TODO(wittjosiah): Generic metrics interface.
87
+ _otelMetrics;
88
+ _otelTraces;
89
+ // TODO(wittjosiah): Generic telemetry interface.
90
+ _telemetryBatchSize;
91
+ _telemetry;
92
+ // TODO(wittjosiah): Generic error logging interface.
93
+ _sentryLogProcessor;
94
+ _otelLogs;
95
+ _errorReportingOptions;
96
+ _captureException;
97
+ _captureUserFeedback;
98
+ _lastNetworkStatus;
99
+ _ctx = new Context(void 0, {
100
+ F: __dxlog_file,
101
+ L: 115
102
+ });
416
103
  // TODO(nf): make platform a required extension?
417
104
  constructor({ mode, namespace, environment, release, config, group, secrets, telemetry, errorLog }) {
418
- this._tags = /* @__PURE__ */ new Map();
419
- this._ctx = new Context(void 0, {
420
- F: __dxlog_file3,
421
- L: 115
422
- });
423
- this.setIPDataTelemetryTags = (ipData) => {
424
- this.setTag("city", ipData.city, "telemetry");
425
- this.setTag("region", ipData.region, "telemetry");
426
- this.setTag("country", ipData.country, "telemetry");
427
- ipData.latitude && this.setTag("latitude", ipData.latitude.toString(), "telemetry");
428
- ipData.longitude && this.setTag("longitude", ipData.longitude.toString(), "telemetry");
429
- };
430
105
  this._mode = mode;
431
106
  this._namespace = namespace;
432
107
  this._config = config;
@@ -465,11 +140,11 @@ var Observability = class {
465
140
  process.env.DX_OTEL_AUTHORIZATION && (mergedSecrets.OTEL_AUTHORIZATION = process.env.DX_OTEL_AUTHORIZATION);
466
141
  return mergedSecrets;
467
142
  } else {
468
- log3("config", {
143
+ log("config", {
469
144
  rtc: this._secrets,
470
145
  config
471
146
  }, {
472
- F: __dxlog_file3,
147
+ F: __dxlog_file,
473
148
  L: 176,
474
149
  S: this,
475
150
  C: (f, a) => f(...a)
@@ -487,8 +162,8 @@ var Observability = class {
487
162
  }
488
163
  }
489
164
  async initialize() {
490
- log3("initializing...", void 0, {
491
- F: __dxlog_file3,
165
+ log("initializing...", void 0, {
166
+ F: __dxlog_file,
492
167
  L: 191,
493
168
  S: this,
494
169
  C: (f, a) => f(...a)
@@ -500,8 +175,8 @@ var Observability = class {
500
175
  await this._initTraces();
501
176
  }
502
177
  async close() {
503
- log3("closing...", void 0, {
504
- F: __dxlog_file3,
178
+ log("closing...", void 0, {
179
+ F: __dxlog_file,
505
180
  L: 200,
506
181
  S: this,
507
182
  C: (f, a) => f(...a)
@@ -516,6 +191,11 @@ var Observability = class {
516
191
  setMode(mode) {
517
192
  this._mode = mode;
518
193
  }
194
+ //
195
+ // Tags
196
+ //
197
+ /** Callback (e.g., to share tags with Sentry.) */
198
+ _setTag;
519
199
  /**
520
200
  * camelCase keys are converted to snake_case in Segment.
521
201
  */
@@ -542,10 +222,10 @@ var Observability = class {
542
222
  if (clientServices.IdentityService) {
543
223
  clientServices.IdentityService.queryIdentity().subscribe((idqr) => {
544
224
  if (!idqr?.identity?.did) {
545
- log3("empty response from identity service", {
225
+ log("empty response from identity service", {
546
226
  idqr
547
227
  }, {
548
- F: __dxlog_file3,
228
+ F: __dxlog_file,
549
229
  L: 247,
550
230
  S: this,
551
231
  C: (f, a) => f(...a)
@@ -561,10 +241,10 @@ var Observability = class {
561
241
  if (clientServices.DevicesService) {
562
242
  clientServices.DevicesService.queryDevices().subscribe((dqr) => {
563
243
  if (!dqr || !dqr.devices || dqr.devices.length === 0) {
564
- log3("empty response from device service", {
244
+ log("empty response from device service", {
565
245
  device: dqr
566
246
  }, {
567
- F: __dxlog_file3,
247
+ F: __dxlog_file,
568
248
  L: 259,
569
249
  S: this,
570
250
  C: (f, a) => f(...a)
@@ -572,7 +252,7 @@ var Observability = class {
572
252
  return;
573
253
  }
574
254
  invariant(dqr, "empty response from device service", {
575
- F: __dxlog_file3,
255
+ F: __dxlog_file,
576
256
  L: 263,
577
257
  S: this,
578
258
  A: [
@@ -582,10 +262,10 @@ var Observability = class {
582
262
  });
583
263
  const thisDevice = dqr.devices.find((device) => device.kind === DeviceKind.CURRENT);
584
264
  if (!thisDevice) {
585
- log3("no current device", {
265
+ log("no current device", {
586
266
  device: dqr
587
267
  }, {
588
- F: __dxlog_file3,
268
+ F: __dxlog_file,
589
269
  L: 266,
590
270
  S: this,
591
271
  C: (f, a) => f(...a)
@@ -599,12 +279,19 @@ var Observability = class {
599
279
  });
600
280
  }
601
281
  }
282
+ setIPDataTelemetryTags = (ipData) => {
283
+ this.setTag("city", ipData.city, "telemetry");
284
+ this.setTag("region", ipData.region, "telemetry");
285
+ this.setTag("country", ipData.country, "telemetry");
286
+ ipData.latitude && this.setTag("latitude", ipData.latitude.toString(), "telemetry");
287
+ ipData.longitude && this.setTag("longitude", ipData.longitude.toString(), "telemetry");
288
+ };
602
289
  //
603
290
  // Logs
604
291
  //
605
292
  async _initLogs() {
606
293
  if (this._secrets.OTEL_ENDPOINT && this._secrets.OTEL_AUTHORIZATION && this._mode !== "disabled") {
607
- const { OtelLogs } = await import("./otel-62HYJETM.mjs");
294
+ const { OtelLogs } = await import("./otel-JFXO22WD.mjs");
608
295
  this._otelLogs = new OtelLogs({
609
296
  endpoint: this._secrets.OTEL_ENDPOINT,
610
297
  authorizationHeader: this._secrets.OTEL_AUTHORIZATION,
@@ -619,18 +306,18 @@ var Observability = class {
619
306
  logLevel: LogLevel.VERBOSE,
620
307
  includeSharedWorkerLogs: false
621
308
  });
622
- this._otelLogs && log3.runtimeConfig.processors.push(this._otelLogs.logProcessor);
623
- log3("otel logs enabled", {
309
+ this._otelLogs && log.runtimeConfig.processors.push(this._otelLogs.logProcessor);
310
+ log("otel logs enabled", {
624
311
  namespace: this._namespace
625
312
  }, {
626
- F: __dxlog_file3,
313
+ F: __dxlog_file,
627
314
  L: 310,
628
315
  S: this,
629
316
  C: (f, a) => f(...a)
630
317
  });
631
318
  } else {
632
- log3("otel logs disabled", void 0, {
633
- F: __dxlog_file3,
319
+ log("otel logs disabled", void 0, {
320
+ F: __dxlog_file,
634
321
  L: 312,
635
322
  S: this,
636
323
  C: (f, a) => f(...a)
@@ -642,7 +329,7 @@ var Observability = class {
642
329
  //
643
330
  async _initMetrics() {
644
331
  if (this.enabled && this._secrets.OTEL_ENDPOINT && this._secrets.OTEL_AUTHORIZATION) {
645
- const { OtelMetrics } = await import("./otel-62HYJETM.mjs");
332
+ const { OtelMetrics } = await import("./otel-JFXO22WD.mjs");
646
333
  this._otelMetrics = new OtelMetrics({
647
334
  endpoint: this._secrets.OTEL_ENDPOINT,
648
335
  authorizationHeader: this._secrets.OTEL_AUTHORIZATION,
@@ -655,15 +342,15 @@ var Observability = class {
655
342
  value.value
656
343
  ]))
657
344
  });
658
- log3("otel metrics enabled", void 0, {
659
- F: __dxlog_file3,
345
+ log("otel metrics enabled", void 0, {
346
+ F: __dxlog_file,
660
347
  L: 337,
661
348
  S: this,
662
349
  C: (f, a) => f(...a)
663
350
  });
664
351
  } else {
665
- log3("otel metrics disabled", void 0, {
666
- F: __dxlog_file3,
352
+ log("otel metrics disabled", void 0, {
353
+ F: __dxlog_file,
667
354
  L: 339,
668
355
  S: this,
669
356
  C: (f, a) => f(...a)
@@ -685,8 +372,8 @@ var Observability = class {
685
372
  }
686
373
  const updateSignalMetrics = new Event().debounce(NETWORK_METRICS_MIN_INTERVAL);
687
374
  updateSignalMetrics.on(this._ctx, async () => {
688
- log3("send signal metrics", void 0, {
689
- F: __dxlog_file3,
375
+ log("send signal metrics", void 0, {
376
+ F: __dxlog_file,
690
377
  L: 361,
691
378
  S: this,
692
379
  C: (f, a) => f(...a)
@@ -737,8 +424,8 @@ var Observability = class {
737
424
  this._ctx.onDispose(() => subscriptions.forEach((subscription) => subscription.unsubscribe()));
738
425
  const updateSpaceMetrics = new Event().debounce(SPACE_METRICS_MIN_INTERVAL);
739
426
  updateSpaceMetrics.on(this._ctx, async () => {
740
- log3("send space metrics", void 0, {
741
- F: __dxlog_file3,
427
+ log("send space metrics", void 0, {
428
+ F: __dxlog_file,
742
429
  L: 414,
743
430
  S: this,
744
431
  C: (f, a) => f(...a)
@@ -762,8 +449,8 @@ var Observability = class {
762
449
  });
763
450
  const updateSpaceTelemetry = new Event().debounce(SPACE_TELEMETRY_MIN_INTERVAL);
764
451
  updateSpaceTelemetry.on(this._ctx, async () => {
765
- log3("send space telemetry", void 0, {
766
- F: __dxlog_file3,
452
+ log("send space telemetry", void 0, {
453
+ F: __dxlog_file,
767
454
  L: 425,
768
455
  S: this,
769
456
  C: (f, a) => f(...a)
@@ -800,7 +487,7 @@ var Observability = class {
800
487
  async startRuntimeMetrics(client, frequency = NETWORK_METRICS_MIN_INTERVAL) {
801
488
  const platform = await client.services.services.SystemService?.getPlatform();
802
489
  invariant(platform, "platform is required", {
803
- F: __dxlog_file3,
490
+ F: __dxlog_file,
804
491
  L: 463,
805
492
  S: this,
806
493
  A: [
@@ -835,10 +522,10 @@ var Observability = class {
835
522
  this.gauge("dxos.client.services.runtime.heapTotal", platform2.memory.heapTotal);
836
523
  this.gauge("dxos.client.services.runtime.heapUsed", platform2.memory.heapUsed);
837
524
  }
838
- }).catch((error) => log3("platform error", {
525
+ }).catch((error) => log("platform error", {
839
526
  error
840
527
  }, {
841
- F: __dxlog_file3,
528
+ F: __dxlog_file,
842
529
  L: 497,
843
530
  S: this,
844
531
  C: (f, a) => f(...a)
@@ -862,8 +549,8 @@ var Observability = class {
862
549
  ]))
863
550
  });
864
551
  } else {
865
- log3("segment disabled", void 0, {
866
- F: __dxlog_file3,
552
+ log("segment disabled", void 0, {
553
+ F: __dxlog_file,
867
554
  L: 523,
868
555
  S: this,
869
556
  C: (f, a) => f(...a)
@@ -890,15 +577,15 @@ var Observability = class {
890
577
  async _initErrorLogs() {
891
578
  if (this._secrets.SENTRY_DESTINATION && this._mode !== "disabled") {
892
579
  const { captureException, captureUserFeedback, init, setTag } = await import("./sentry/index.mjs");
893
- const { SentryLogProcessor } = await import("./sentry-log-processor-FN6Y5TNI.mjs");
580
+ const { SentryLogProcessor } = await import("./sentry-log-processor-W3SG4RQL.mjs");
894
581
  this._captureException = captureException;
895
582
  this._captureUserFeedback = captureUserFeedback;
896
583
  this._setTag = setTag;
897
- log3.info("Initializing Sentry", {
584
+ log.info("Initializing Sentry", {
898
585
  dest: this._secrets.SENTRY_DESTINATION,
899
586
  options: this._errorReportingOptions
900
587
  }, {
901
- F: __dxlog_file3,
588
+ F: __dxlog_file,
902
589
  L: 556,
903
590
  S: this,
904
591
  C: (f, a) => f(...a)
@@ -916,8 +603,8 @@ var Observability = class {
916
603
  }
917
604
  });
918
605
  } else {
919
- log3("sentry disabled", void 0, {
920
- F: __dxlog_file3,
606
+ log("sentry disabled", void 0, {
607
+ F: __dxlog_file,
921
608
  L: 576,
922
609
  S: this,
923
610
  C: (f, a) => f(...a)
@@ -925,7 +612,7 @@ var Observability = class {
925
612
  }
926
613
  }
927
614
  startErrorLogs() {
928
- this._sentryLogProcessor && log3.runtimeConfig.processors.push(this._sentryLogProcessor.logProcessor);
615
+ this._sentryLogProcessor && log.runtimeConfig.processors.push(this._sentryLogProcessor.logProcessor);
929
616
  }
930
617
  startTraces() {
931
618
  this._otelTraces && this._otelTraces.start();
@@ -933,7 +620,7 @@ var Observability = class {
933
620
  // TODO(nf): Refactor init based on providers and their capabilities.
934
621
  async _initTraces() {
935
622
  if (this._secrets.OTEL_ENDPOINT && this._secrets.OTEL_AUTHORIZATION && this._mode !== "disabled") {
936
- const { OtelTraces } = await import("./otel-62HYJETM.mjs");
623
+ const { OtelTraces } = await import("./otel-JFXO22WD.mjs");
937
624
  this._otelTraces = new OtelTraces({
938
625
  endpoint: this._secrets.OTEL_ENDPOINT,
939
626
  authorizationHeader: this._secrets.OTEL_AUTHORIZATION,
@@ -963,10 +650,10 @@ var Observability = class {
963
650
  */
964
651
  captureUserFeedback(message) {
965
652
  if (!this._secrets.SENTRY_DESTINATION) {
966
- log3.info("Feedback submitted without Sentry destination", {
653
+ log.info("Feedback submitted without Sentry destination", {
967
654
  message
968
655
  }, {
969
- F: __dxlog_file3,
656
+ F: __dxlog_file,
970
657
  L: 625,
971
658
  S: this,
972
659
  C: (f, a) => f(...a)
@@ -979,19 +666,8 @@ var Observability = class {
979
666
 
980
667
  export {
981
668
  Observability,
982
- OBSERVABILITY_DISABLED_KEY,
983
- OBSERVABILITY_GROUP_KEY,
984
- isObservabilityDisabled,
985
- storeObservabilityDisabled,
986
- getObservabilityGroup,
987
- storeObservabilityGroup,
988
- initializeAppObservability,
989
669
  getTelemetryIdentifier,
990
670
  getTelemetryIdentity,
991
- showObservabilityBanner,
992
- getObservabilityState,
993
- initializeNodeObservability,
994
- mapSpaces,
995
- setupTelemetryListeners
671
+ mapSpaces
996
672
  };
997
- //# sourceMappingURL=chunk-WLRNZ2S2.mjs.map
673
+ //# sourceMappingURL=chunk-KKNY7TRV.mjs.map