@dxos/observability 0.8.4-main.84f28bd → 0.8.4-main.937b3ca

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 (168) hide show
  1. package/dist/lib/browser/chunk-5ICT2XF2.mjs +1 -0
  2. package/dist/lib/browser/{chunk-MWTIKIBZ.mjs → chunk-5LN7D6GM.mjs} +14 -13
  3. package/dist/lib/browser/chunk-5LN7D6GM.mjs.map +7 -0
  4. package/dist/lib/browser/{chunk-33TCMAUB.mjs → chunk-JJQT5TQH.mjs} +85 -409
  5. package/dist/lib/browser/chunk-JJQT5TQH.mjs.map +7 -0
  6. package/dist/lib/browser/{chunk-YEPQFAES.mjs → chunk-O4BG5MRL.mjs} +2 -2
  7. package/dist/lib/browser/chunk-O4BG5MRL.mjs.map +7 -0
  8. package/dist/lib/browser/chunk-U6JWT3E2.mjs +1 -0
  9. package/dist/lib/browser/chunk-VL6LVQPU.mjs +69 -0
  10. package/dist/lib/browser/chunk-VL6LVQPU.mjs.map +7 -0
  11. package/dist/lib/browser/index.mjs +342 -16
  12. package/dist/lib/browser/index.mjs.map +4 -4
  13. package/dist/lib/browser/meta.json +1 -1
  14. package/dist/lib/browser/observability-XK652NZG.mjs +11 -0
  15. package/dist/lib/browser/otel/traces-browser.mjs +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 +4 -3
  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 +2 -2
  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-3F3SBJXM.mjs → sentry-log-processor-W7LI6WXA.mjs} +53 -53
  31. package/dist/lib/browser/sentry-log-processor-W7LI6WXA.mjs.map +7 -0
  32. package/dist/lib/node-esm/{chunk-EYW4X3O6.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-MRAK2H7O.mjs → chunk-KLJGCUYA.mjs} +1 -1
  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-QUZL7LKE.mjs +2 -0
  41. package/dist/lib/node-esm/chunk-QUZL7LKE.mjs.map +7 -0
  42. package/dist/lib/node-esm/chunk-UIVXGEGJ.mjs +62 -0
  43. package/dist/lib/node-esm/chunk-UIVXGEGJ.mjs.map +7 -0
  44. package/dist/lib/node-esm/chunk-WAGGA7IT.mjs +52 -0
  45. package/dist/lib/node-esm/chunk-WAGGA7IT.mjs.map +7 -0
  46. package/dist/lib/node-esm/index.mjs +343 -16
  47. package/dist/lib/node-esm/index.mjs.map +4 -4
  48. package/dist/lib/node-esm/meta.json +1 -1
  49. package/dist/lib/node-esm/observability-CXQ3CZGB.mjs +13 -0
  50. package/dist/lib/node-esm/observability-CXQ3CZGB.mjs.map +7 -0
  51. package/dist/lib/node-esm/otel/traces-browser.mjs +70 -0
  52. package/dist/lib/node-esm/otel/traces-browser.mjs.map +7 -0
  53. package/dist/lib/node-esm/otel/traces.mjs +8 -0
  54. package/dist/lib/node-esm/otel/traces.mjs.map +7 -0
  55. package/dist/lib/node-esm/{otel-62HYJETM.mjs → otel-JFXO22WD.mjs} +43 -76
  56. package/dist/lib/node-esm/otel-JFXO22WD.mjs.map +7 -0
  57. package/dist/lib/node-esm/segment/browser.mjs +92 -0
  58. package/dist/lib/node-esm/segment/browser.mjs.map +7 -0
  59. package/dist/lib/node-esm/segment/index.mjs +7 -4
  60. package/dist/lib/node-esm/segment/node.mjs +11 -0
  61. package/dist/lib/node-esm/segment/node.mjs.map +7 -0
  62. package/dist/lib/node-esm/sentry/browser.mjs +165 -0
  63. package/dist/lib/node-esm/sentry/browser.mjs.map +7 -0
  64. package/dist/lib/node-esm/sentry/index.mjs +2 -2
  65. package/dist/lib/node-esm/sentry/node.mjs +24 -0
  66. package/dist/lib/node-esm/sentry/node.mjs.map +7 -0
  67. package/dist/lib/node-esm/{sentry-log-processor-JAYRA23C.mjs → sentry-log-processor-W3SG4RQL.mjs} +53 -53
  68. package/dist/lib/node-esm/sentry-log-processor-W3SG4RQL.mjs.map +7 -0
  69. package/dist/types/src/helpers/browser-observability.d.ts.map +1 -1
  70. package/dist/types/src/helpers/browser-observability.js +4 -6
  71. package/dist/types/src/helpers/browser-observability.js.map +1 -1
  72. package/dist/types/src/helpers/common.js +1 -1
  73. package/dist/types/src/helpers/common.js.map +1 -1
  74. package/dist/types/src/helpers/map-spaces.js +6 -7
  75. package/dist/types/src/helpers/map-spaces.js.map +1 -1
  76. package/dist/types/src/helpers/node-observability.d.ts +1 -1
  77. package/dist/types/src/helpers/node-observability.d.ts.map +1 -1
  78. package/dist/types/src/helpers/node-observability.js +7 -11
  79. package/dist/types/src/helpers/node-observability.js.map +1 -1
  80. package/dist/types/src/helpers/setup-telemetry-listeners.d.ts.map +1 -1
  81. package/dist/types/src/helpers/setup-telemetry-listeners.js +4 -7
  82. package/dist/types/src/helpers/setup-telemetry-listeners.js.map +1 -1
  83. package/dist/types/src/observability.d.ts +1 -1
  84. package/dist/types/src/observability.d.ts.map +1 -1
  85. package/dist/types/src/observability.js +68 -59
  86. package/dist/types/src/observability.js.map +1 -1
  87. package/dist/types/src/otel/logs.d.ts.map +1 -1
  88. package/dist/types/src/otel/logs.js +26 -23
  89. package/dist/types/src/otel/logs.js.map +1 -1
  90. package/dist/types/src/otel/metrics.d.ts +0 -1
  91. package/dist/types/src/otel/metrics.d.ts.map +1 -1
  92. package/dist/types/src/otel/metrics.js +6 -4
  93. package/dist/types/src/otel/metrics.js.map +1 -1
  94. package/dist/types/src/otel/otel.js +1 -1
  95. package/dist/types/src/otel/otel.js.map +1 -1
  96. package/dist/types/src/otel/traces-browser.d.ts.map +1 -1
  97. package/dist/types/src/otel/traces-browser.js +19 -13
  98. package/dist/types/src/otel/traces-browser.js.map +1 -1
  99. package/dist/types/src/otel/traces.d.ts.map +1 -1
  100. package/dist/types/src/otel/traces.js +18 -12
  101. package/dist/types/src/otel/traces.js.map +1 -1
  102. package/dist/types/src/segment/base.d.ts +3 -3
  103. package/dist/types/src/segment/base.d.ts.map +1 -1
  104. package/dist/types/src/segment/base.js +4 -3
  105. package/dist/types/src/segment/base.js.map +1 -1
  106. package/dist/types/src/segment/browser.d.ts +1 -1
  107. package/dist/types/src/segment/browser.d.ts.map +1 -1
  108. package/dist/types/src/segment/browser.js +8 -12
  109. package/dist/types/src/segment/browser.js.map +1 -1
  110. package/dist/types/src/segment/node.d.ts +1 -1
  111. package/dist/types/src/segment/node.d.ts.map +1 -1
  112. package/dist/types/src/segment/node.js +4 -3
  113. package/dist/types/src/segment/node.js.map +1 -1
  114. package/dist/types/src/sentry/browser.d.ts.map +1 -1
  115. package/dist/types/src/sentry/browser.js +5 -7
  116. package/dist/types/src/sentry/browser.js.map +1 -1
  117. package/dist/types/src/sentry/index.d.ts +1 -1
  118. package/dist/types/src/sentry/index.d.ts.map +1 -1
  119. package/dist/types/src/sentry/index.js +0 -1
  120. package/dist/types/src/sentry/index.js.map +1 -1
  121. package/dist/types/src/sentry/node.d.ts.map +1 -1
  122. package/dist/types/src/sentry/node.js +8 -13
  123. package/dist/types/src/sentry/node.js.map +1 -1
  124. package/dist/types/src/sentry/node.node.test.js +3 -5
  125. package/dist/types/src/sentry/node.node.test.js.map +1 -1
  126. package/dist/types/src/sentry/sentry-log-processor.d.ts.map +1 -1
  127. package/dist/types/src/sentry/sentry-log-processor.js +58 -63
  128. package/dist/types/src/sentry/sentry-log-processor.js.map +1 -1
  129. package/dist/types/src/sentry/sentry.node.test.js +1 -1
  130. package/dist/types/src/sentry/sentry.node.test.js.map +1 -1
  131. package/dist/types/tsconfig.tsbuildinfo +1 -1
  132. package/package.json +38 -34
  133. package/src/helpers/browser-observability.ts +2 -1
  134. package/src/helpers/map-spaces.ts +1 -1
  135. package/src/helpers/node-observability.ts +5 -4
  136. package/src/helpers/setup-telemetry-listeners.ts +2 -1
  137. package/src/observability.ts +4 -4
  138. package/src/otel/logs.ts +9 -7
  139. package/src/otel/metrics.ts +5 -12
  140. package/src/otel/otel.ts +1 -1
  141. package/src/otel/traces-browser.ts +23 -20
  142. package/src/otel/traces.ts +22 -19
  143. package/src/segment/base.ts +3 -3
  144. package/src/segment/browser.ts +5 -4
  145. package/src/segment/node.ts +5 -4
  146. package/src/sentry/browser.ts +8 -8
  147. package/src/sentry/index.ts +1 -1
  148. package/src/sentry/node.node.test.ts +2 -1
  149. package/src/sentry/node.ts +3 -3
  150. package/src/sentry/sentry-log-processor.ts +17 -7
  151. package/src/sentry/sentry.node.test.ts +2 -1
  152. package/dist/lib/browser/chunk-33TCMAUB.mjs.map +0 -7
  153. package/dist/lib/browser/chunk-5OQYI27L.mjs +0 -1
  154. package/dist/lib/browser/chunk-MWTIKIBZ.mjs.map +0 -7
  155. package/dist/lib/browser/chunk-YEPQFAES.mjs.map +0 -7
  156. package/dist/lib/browser/observability-EEM6BEY6.mjs +0 -10
  157. package/dist/lib/browser/otel-IRDZ7PES.mjs.map +0 -7
  158. package/dist/lib/browser/sentry-log-processor-3F3SBJXM.mjs.map +0 -7
  159. package/dist/lib/node-esm/chunk-552KLA6Z.mjs +0 -202
  160. package/dist/lib/node-esm/chunk-552KLA6Z.mjs.map +0 -7
  161. package/dist/lib/node-esm/chunk-EYW4X3O6.mjs.map +0 -7
  162. package/dist/lib/node-esm/observability-DAXZGOBS.mjs +0 -11
  163. package/dist/lib/node-esm/otel-62HYJETM.mjs.map +0 -7
  164. package/dist/lib/node-esm/sentry-log-processor-JAYRA23C.mjs.map +0 -7
  165. /package/dist/lib/browser/{chunk-5OQYI27L.mjs.map → chunk-5ICT2XF2.mjs.map} +0 -0
  166. /package/dist/lib/browser/{observability-EEM6BEY6.mjs.map → chunk-U6JWT3E2.mjs.map} +0 -0
  167. /package/dist/lib/{node-esm/chunk-MRAK2H7O.mjs.map → browser/observability-XK652NZG.mjs.map} +0 -0
  168. /package/dist/lib/{node-esm/observability-DAXZGOBS.mjs.map → browser/otel/traces-browser.mjs.map} +0 -0
@@ -1,13 +1,13 @@
1
1
  import {
2
2
  TelemetryEvent
3
- } from "./chunk-MWTIKIBZ.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 { log as log3, LogLevel } 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: 24,
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: 33,
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: 41,
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: 49,
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: 73,
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-EEM6BEY6.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: 113,
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: 168,
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: 173,
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 yaml from "js-yaml";
201
- import { existsSync, statSync } from "@dxos/node-std/fs";
202
- import { mkdir, readFile, writeFile } from "@dxos/node-std/fs/promises";
203
- import { join } from "@dxos/node-std/path";
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: 110,
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,113 +70,37 @@ 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
- 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";
411
75
  var SPACE_METRICS_MIN_INTERVAL = 1e3 * 60;
412
76
  var SPACE_TELEMETRY_MIN_INTERVAL = 1e3 * 60 * 60;
413
77
  var NETWORK_METRICS_MIN_INTERVAL = 1e3 * 60 * 5;
414
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
+ });
415
102
  // TODO(nf): make platform a required extension?
416
103
  constructor({ mode, namespace, environment, release, config, group, secrets, telemetry, errorLog }) {
417
- this._tags = /* @__PURE__ */ new Map();
418
- this._ctx = new Context(void 0, {
419
- F: __dxlog_file3,
420
- L: 115
421
- });
422
- this.setIPDataTelemetryTags = (ipData) => {
423
- this.setTag("city", ipData.city, "telemetry");
424
- this.setTag("region", ipData.region, "telemetry");
425
- this.setTag("country", ipData.country, "telemetry");
426
- ipData.latitude && this.setTag("latitude", ipData.latitude.toString(), "telemetry");
427
- ipData.longitude && this.setTag("longitude", ipData.longitude.toString(), "telemetry");
428
- };
429
104
  this._mode = mode;
430
105
  this._namespace = namespace;
431
106
  this._config = config;
@@ -464,11 +139,11 @@ var Observability = class {
464
139
  process.env.DX_OTEL_AUTHORIZATION && (mergedSecrets.OTEL_AUTHORIZATION = process.env.DX_OTEL_AUTHORIZATION);
465
140
  return mergedSecrets;
466
141
  } else {
467
- log3("config", {
142
+ log("config", {
468
143
  rtc: this._secrets,
469
144
  config
470
145
  }, {
471
- F: __dxlog_file3,
146
+ F: __dxlog_file,
472
147
  L: 176,
473
148
  S: this,
474
149
  C: (f, a) => f(...a)
@@ -486,8 +161,8 @@ var Observability = class {
486
161
  }
487
162
  }
488
163
  async initialize() {
489
- log3("initializing...", void 0, {
490
- F: __dxlog_file3,
164
+ log("initializing...", void 0, {
165
+ F: __dxlog_file,
491
166
  L: 191,
492
167
  S: this,
493
168
  C: (f, a) => f(...a)
@@ -499,8 +174,8 @@ var Observability = class {
499
174
  await this._initTraces();
500
175
  }
501
176
  async close() {
502
- log3("closing...", void 0, {
503
- F: __dxlog_file3,
177
+ log("closing...", void 0, {
178
+ F: __dxlog_file,
504
179
  L: 200,
505
180
  S: this,
506
181
  C: (f, a) => f(...a)
@@ -515,6 +190,11 @@ var Observability = class {
515
190
  setMode(mode) {
516
191
  this._mode = mode;
517
192
  }
193
+ //
194
+ // Tags
195
+ //
196
+ /** Callback (e.g., to share tags with Sentry.) */
197
+ _setTag;
518
198
  /**
519
199
  * camelCase keys are converted to snake_case in Segment.
520
200
  */
@@ -541,10 +221,10 @@ var Observability = class {
541
221
  if (clientServices.IdentityService) {
542
222
  clientServices.IdentityService.queryIdentity().subscribe((idqr) => {
543
223
  if (!idqr?.identity?.did) {
544
- log3("empty response from identity service", {
224
+ log("empty response from identity service", {
545
225
  idqr
546
226
  }, {
547
- F: __dxlog_file3,
227
+ F: __dxlog_file,
548
228
  L: 247,
549
229
  S: this,
550
230
  C: (f, a) => f(...a)
@@ -560,10 +240,10 @@ var Observability = class {
560
240
  if (clientServices.DevicesService) {
561
241
  clientServices.DevicesService.queryDevices().subscribe((dqr) => {
562
242
  if (!dqr || !dqr.devices || dqr.devices.length === 0) {
563
- log3("empty response from device service", {
243
+ log("empty response from device service", {
564
244
  device: dqr
565
245
  }, {
566
- F: __dxlog_file3,
246
+ F: __dxlog_file,
567
247
  L: 259,
568
248
  S: this,
569
249
  C: (f, a) => f(...a)
@@ -571,7 +251,7 @@ var Observability = class {
571
251
  return;
572
252
  }
573
253
  invariant(dqr, "empty response from device service", {
574
- F: __dxlog_file3,
254
+ F: __dxlog_file,
575
255
  L: 263,
576
256
  S: this,
577
257
  A: [
@@ -581,10 +261,10 @@ var Observability = class {
581
261
  });
582
262
  const thisDevice = dqr.devices.find((device) => device.kind === DeviceKind.CURRENT);
583
263
  if (!thisDevice) {
584
- log3("no current device", {
264
+ log("no current device", {
585
265
  device: dqr
586
266
  }, {
587
- F: __dxlog_file3,
267
+ F: __dxlog_file,
588
268
  L: 266,
589
269
  S: this,
590
270
  C: (f, a) => f(...a)
@@ -598,12 +278,19 @@ var Observability = class {
598
278
  });
599
279
  }
600
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
+ };
601
288
  //
602
289
  // Logs
603
290
  //
604
291
  async _initLogs() {
605
292
  if (this._secrets.OTEL_ENDPOINT && this._secrets.OTEL_AUTHORIZATION && this._mode !== "disabled") {
606
- const { OtelLogs } = await import("./otel-IRDZ7PES.mjs");
293
+ const { OtelLogs } = await import("./otel-DI4ASU7Y.mjs");
607
294
  this._otelLogs = new OtelLogs({
608
295
  endpoint: this._secrets.OTEL_ENDPOINT,
609
296
  authorizationHeader: this._secrets.OTEL_AUTHORIZATION,
@@ -618,18 +305,18 @@ var Observability = class {
618
305
  logLevel: LogLevel.VERBOSE,
619
306
  includeSharedWorkerLogs: false
620
307
  });
621
- this._otelLogs && log3.runtimeConfig.processors.push(this._otelLogs.logProcessor);
622
- log3("otel logs enabled", {
308
+ this._otelLogs && log.runtimeConfig.processors.push(this._otelLogs.logProcessor);
309
+ log("otel logs enabled", {
623
310
  namespace: this._namespace
624
311
  }, {
625
- F: __dxlog_file3,
312
+ F: __dxlog_file,
626
313
  L: 310,
627
314
  S: this,
628
315
  C: (f, a) => f(...a)
629
316
  });
630
317
  } else {
631
- log3("otel logs disabled", void 0, {
632
- F: __dxlog_file3,
318
+ log("otel logs disabled", void 0, {
319
+ F: __dxlog_file,
633
320
  L: 312,
634
321
  S: this,
635
322
  C: (f, a) => f(...a)
@@ -641,7 +328,7 @@ var Observability = class {
641
328
  //
642
329
  async _initMetrics() {
643
330
  if (this.enabled && this._secrets.OTEL_ENDPOINT && this._secrets.OTEL_AUTHORIZATION) {
644
- const { OtelMetrics } = await import("./otel-IRDZ7PES.mjs");
331
+ const { OtelMetrics } = await import("./otel-DI4ASU7Y.mjs");
645
332
  this._otelMetrics = new OtelMetrics({
646
333
  endpoint: this._secrets.OTEL_ENDPOINT,
647
334
  authorizationHeader: this._secrets.OTEL_AUTHORIZATION,
@@ -654,15 +341,15 @@ var Observability = class {
654
341
  value.value
655
342
  ]))
656
343
  });
657
- log3("otel metrics enabled", void 0, {
658
- F: __dxlog_file3,
344
+ log("otel metrics enabled", void 0, {
345
+ F: __dxlog_file,
659
346
  L: 337,
660
347
  S: this,
661
348
  C: (f, a) => f(...a)
662
349
  });
663
350
  } else {
664
- log3("otel metrics disabled", void 0, {
665
- F: __dxlog_file3,
351
+ log("otel metrics disabled", void 0, {
352
+ F: __dxlog_file,
666
353
  L: 339,
667
354
  S: this,
668
355
  C: (f, a) => f(...a)
@@ -684,8 +371,8 @@ var Observability = class {
684
371
  }
685
372
  const updateSignalMetrics = new Event().debounce(NETWORK_METRICS_MIN_INTERVAL);
686
373
  updateSignalMetrics.on(this._ctx, async () => {
687
- log3("send signal metrics", void 0, {
688
- F: __dxlog_file3,
374
+ log("send signal metrics", void 0, {
375
+ F: __dxlog_file,
689
376
  L: 361,
690
377
  S: this,
691
378
  C: (f, a) => f(...a)
@@ -736,8 +423,8 @@ var Observability = class {
736
423
  this._ctx.onDispose(() => subscriptions.forEach((subscription) => subscription.unsubscribe()));
737
424
  const updateSpaceMetrics = new Event().debounce(SPACE_METRICS_MIN_INTERVAL);
738
425
  updateSpaceMetrics.on(this._ctx, async () => {
739
- log3("send space metrics", void 0, {
740
- F: __dxlog_file3,
426
+ log("send space metrics", void 0, {
427
+ F: __dxlog_file,
741
428
  L: 414,
742
429
  S: this,
743
430
  C: (f, a) => f(...a)
@@ -761,8 +448,8 @@ var Observability = class {
761
448
  });
762
449
  const updateSpaceTelemetry = new Event().debounce(SPACE_TELEMETRY_MIN_INTERVAL);
763
450
  updateSpaceTelemetry.on(this._ctx, async () => {
764
- log3("send space telemetry", void 0, {
765
- F: __dxlog_file3,
451
+ log("send space telemetry", void 0, {
452
+ F: __dxlog_file,
766
453
  L: 425,
767
454
  S: this,
768
455
  C: (f, a) => f(...a)
@@ -799,7 +486,7 @@ var Observability = class {
799
486
  async startRuntimeMetrics(client, frequency = NETWORK_METRICS_MIN_INTERVAL) {
800
487
  const platform = await client.services.services.SystemService?.getPlatform();
801
488
  invariant(platform, "platform is required", {
802
- F: __dxlog_file3,
489
+ F: __dxlog_file,
803
490
  L: 463,
804
491
  S: this,
805
492
  A: [
@@ -834,10 +521,10 @@ var Observability = class {
834
521
  this.gauge("dxos.client.services.runtime.heapTotal", platform2.memory.heapTotal);
835
522
  this.gauge("dxos.client.services.runtime.heapUsed", platform2.memory.heapUsed);
836
523
  }
837
- }).catch((error) => log3("platform error", {
524
+ }).catch((error) => log("platform error", {
838
525
  error
839
526
  }, {
840
- F: __dxlog_file3,
527
+ F: __dxlog_file,
841
528
  L: 497,
842
529
  S: this,
843
530
  C: (f, a) => f(...a)
@@ -861,8 +548,8 @@ var Observability = class {
861
548
  ]))
862
549
  });
863
550
  } else {
864
- log3("segment disabled", void 0, {
865
- F: __dxlog_file3,
551
+ log("segment disabled", void 0, {
552
+ F: __dxlog_file,
866
553
  L: 523,
867
554
  S: this,
868
555
  C: (f, a) => f(...a)
@@ -889,15 +576,15 @@ var Observability = class {
889
576
  async _initErrorLogs() {
890
577
  if (this._secrets.SENTRY_DESTINATION && this._mode !== "disabled") {
891
578
  const { captureException, captureUserFeedback, init, setTag } = await import("./sentry/index.mjs");
892
- const { SentryLogProcessor } = await import("./sentry-log-processor-3F3SBJXM.mjs");
579
+ const { SentryLogProcessor } = await import("./sentry-log-processor-W7LI6WXA.mjs");
893
580
  this._captureException = captureException;
894
581
  this._captureUserFeedback = captureUserFeedback;
895
582
  this._setTag = setTag;
896
- log3.info("Initializing Sentry", {
583
+ log.info("Initializing Sentry", {
897
584
  dest: this._secrets.SENTRY_DESTINATION,
898
585
  options: this._errorReportingOptions
899
586
  }, {
900
- F: __dxlog_file3,
587
+ F: __dxlog_file,
901
588
  L: 556,
902
589
  S: this,
903
590
  C: (f, a) => f(...a)
@@ -915,8 +602,8 @@ var Observability = class {
915
602
  }
916
603
  });
917
604
  } else {
918
- log3("sentry disabled", void 0, {
919
- F: __dxlog_file3,
605
+ log("sentry disabled", void 0, {
606
+ F: __dxlog_file,
920
607
  L: 576,
921
608
  S: this,
922
609
  C: (f, a) => f(...a)
@@ -924,7 +611,7 @@ var Observability = class {
924
611
  }
925
612
  }
926
613
  startErrorLogs() {
927
- this._sentryLogProcessor && log3.runtimeConfig.processors.push(this._sentryLogProcessor.logProcessor);
614
+ this._sentryLogProcessor && log.runtimeConfig.processors.push(this._sentryLogProcessor.logProcessor);
928
615
  }
929
616
  startTraces() {
930
617
  this._otelTraces && this._otelTraces.start();
@@ -932,7 +619,7 @@ var Observability = class {
932
619
  // TODO(nf): Refactor init based on providers and their capabilities.
933
620
  async _initTraces() {
934
621
  if (this._secrets.OTEL_ENDPOINT && this._secrets.OTEL_AUTHORIZATION && this._mode !== "disabled") {
935
- const { OtelTraces } = await import("./otel-IRDZ7PES.mjs");
622
+ const { OtelTraces } = await import("./otel-DI4ASU7Y.mjs");
936
623
  this._otelTraces = new OtelTraces({
937
624
  endpoint: this._secrets.OTEL_ENDPOINT,
938
625
  authorizationHeader: this._secrets.OTEL_AUTHORIZATION,
@@ -962,10 +649,10 @@ var Observability = class {
962
649
  */
963
650
  captureUserFeedback(message) {
964
651
  if (!this._secrets.SENTRY_DESTINATION) {
965
- log3.info("Feedback submitted without Sentry destination", {
652
+ log.info("Feedback submitted without Sentry destination", {
966
653
  message
967
654
  }, {
968
- F: __dxlog_file3,
655
+ F: __dxlog_file,
969
656
  L: 625,
970
657
  S: this,
971
658
  C: (f, a) => f(...a)
@@ -978,19 +665,8 @@ var Observability = class {
978
665
 
979
666
  export {
980
667
  Observability,
981
- OBSERVABILITY_DISABLED_KEY,
982
- OBSERVABILITY_GROUP_KEY,
983
- isObservabilityDisabled,
984
- storeObservabilityDisabled,
985
- getObservabilityGroup,
986
- storeObservabilityGroup,
987
- initializeAppObservability,
988
668
  getTelemetryIdentifier,
989
669
  getTelemetryIdentity,
990
- showObservabilityBanner,
991
- getObservabilityState,
992
- initializeNodeObservability,
993
- mapSpaces,
994
- setupTelemetryListeners
670
+ mapSpaces
995
671
  };
996
- //# sourceMappingURL=chunk-33TCMAUB.mjs.map
672
+ //# sourceMappingURL=chunk-JJQT5TQH.mjs.map