@dxos/observability 0.8.4-main.c85a9c8dae → 0.8.4-main.cb12b3f963

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 (92) hide show
  1. package/dist/lib/browser/{chunk-K4VFBKST.mjs → chunk-3534PNWM.mjs} +1 -1
  2. package/dist/lib/browser/{chunk-K4VFBKST.mjs.map → chunk-3534PNWM.mjs.map} +2 -2
  3. package/dist/lib/browser/index.mjs +125 -190
  4. package/dist/lib/browser/index.mjs.map +3 -3
  5. package/dist/lib/browser/{log-processor-FDLTDQEM.mjs → log-processor-HPHWNBOK.mjs} +11 -18
  6. package/dist/lib/browser/log-processor-HPHWNBOK.mjs.map +7 -0
  7. package/dist/lib/browser/{logs-ATTRIUTL.mjs → logs-A2VDAHHD.mjs} +5 -3
  8. package/dist/lib/browser/{logs-ATTRIUTL.mjs.map → logs-A2VDAHHD.mjs.map} +3 -3
  9. package/dist/lib/browser/meta.json +1 -1
  10. package/dist/lib/browser/{metrics-PKTV6IGF.mjs → metrics-6OSN54ZV.mjs} +5 -20
  11. package/dist/lib/browser/{metrics-PKTV6IGF.mjs.map → metrics-6OSN54ZV.mjs.map} +2 -2
  12. package/dist/lib/browser/traces-browser-6MRGAKFC.mjs +151 -0
  13. package/dist/lib/browser/traces-browser-6MRGAKFC.mjs.map +7 -0
  14. package/dist/lib/node-esm/{chunk-FEVP3MK4.mjs → chunk-SYPJQI4L.mjs} +1 -1
  15. package/dist/lib/node-esm/{chunk-FEVP3MK4.mjs.map → chunk-SYPJQI4L.mjs.map} +2 -2
  16. package/dist/lib/node-esm/index.mjs +110 -157
  17. package/dist/lib/node-esm/index.mjs.map +3 -3
  18. package/dist/lib/node-esm/{log-processor-TKJVJJSJ.mjs → log-processor-ZODHERST.mjs} +11 -18
  19. package/dist/lib/node-esm/log-processor-ZODHERST.mjs.map +7 -0
  20. package/dist/lib/node-esm/{logs-7J45KLM7.mjs → logs-TA32MBMW.mjs} +5 -3
  21. package/dist/lib/node-esm/{logs-7J45KLM7.mjs.map → logs-TA32MBMW.mjs.map} +3 -3
  22. package/dist/lib/node-esm/meta.json +1 -1
  23. package/dist/lib/node-esm/{metrics-H7DDLYSG.mjs → metrics-C5IKPAWD.mjs} +5 -20
  24. package/dist/lib/node-esm/{metrics-H7DDLYSG.mjs.map → metrics-C5IKPAWD.mjs.map} +2 -2
  25. package/dist/lib/node-esm/traces-5LKHMVVG.mjs +122 -0
  26. package/dist/lib/node-esm/traces-5LKHMVVG.mjs.map +7 -0
  27. package/dist/types/src/cli-observability-secrets.json +2 -2
  28. package/dist/types/src/extensions/otel/extension.d.ts.map +1 -1
  29. package/dist/types/src/extensions/otel/extension.js +83 -6
  30. package/dist/types/src/extensions/otel/extension.js.map +1 -1
  31. package/dist/types/src/extensions/otel/logs.d.ts.map +1 -1
  32. package/dist/types/src/extensions/otel/logs.js +4 -1
  33. package/dist/types/src/extensions/otel/logs.js.map +1 -1
  34. package/dist/types/src/extensions/otel/metrics.d.ts.map +1 -1
  35. package/dist/types/src/extensions/otel/metrics.js.map +1 -1
  36. package/dist/types/src/extensions/otel/otel.d.ts.map +1 -1
  37. package/dist/types/src/extensions/otel/span-processors.d.ts +25 -0
  38. package/dist/types/src/extensions/otel/span-processors.d.ts.map +1 -0
  39. package/dist/types/src/extensions/otel/span-processors.js +41 -0
  40. package/dist/types/src/extensions/otel/span-processors.js.map +1 -0
  41. package/dist/types/src/extensions/otel/traces-browser.d.ts +17 -0
  42. package/dist/types/src/extensions/otel/traces-browser.d.ts.map +1 -1
  43. package/dist/types/src/extensions/otel/traces-browser.js +67 -13
  44. package/dist/types/src/extensions/otel/traces-browser.js.map +1 -1
  45. package/dist/types/src/extensions/otel/traces.d.ts +17 -0
  46. package/dist/types/src/extensions/otel/traces.d.ts.map +1 -1
  47. package/dist/types/src/extensions/otel/traces.js +57 -8
  48. package/dist/types/src/extensions/otel/traces.js.map +1 -1
  49. package/dist/types/src/extensions/posthog/extension.d.ts +7 -3
  50. package/dist/types/src/extensions/posthog/extension.d.ts.map +1 -1
  51. package/dist/types/src/extensions/posthog/extension.js +17 -15
  52. package/dist/types/src/extensions/posthog/extension.js.map +1 -1
  53. package/dist/types/src/extensions/posthog/log-processor.d.ts.map +1 -1
  54. package/dist/types/src/extensions/posthog/log-processor.js +10 -19
  55. package/dist/types/src/extensions/posthog/log-processor.js.map +1 -1
  56. package/dist/types/src/extensions/posthog/log-processor.test.js +2 -2
  57. package/dist/types/src/extensions/posthog/log-processor.test.js.map +1 -1
  58. package/dist/types/src/observability.d.ts.map +1 -1
  59. package/dist/types/src/providers/client-observability.d.ts.map +1 -1
  60. package/dist/types/src/providers/client-observability.js +2 -0
  61. package/dist/types/src/providers/client-observability.js.map +1 -1
  62. package/dist/types/src/providers/ip-data.d.ts.map +1 -1
  63. package/dist/types/src/storage/browser.d.ts.map +1 -1
  64. package/dist/types/src/storage/browser.js +15 -4
  65. package/dist/types/src/storage/browser.js.map +1 -1
  66. package/dist/types/src/storage/node.d.ts.map +1 -1
  67. package/dist/types/src/storage/node.js +1 -1
  68. package/dist/types/src/storage/node.js.map +1 -1
  69. package/dist/types/src/storage/node.test.js +1 -1
  70. package/dist/types/src/storage/node.test.js.map +1 -1
  71. package/dist/types/tsconfig.tsbuildinfo +1 -1
  72. package/package.json +21 -17
  73. package/src/cli-observability-secrets.json +2 -2
  74. package/src/extensions/otel/extension.ts +87 -7
  75. package/src/extensions/otel/logs.ts +4 -1
  76. package/src/extensions/otel/span-processors.ts +45 -0
  77. package/src/extensions/otel/traces-browser.ts +89 -13
  78. package/src/extensions/otel/traces.ts +74 -10
  79. package/src/extensions/posthog/extension.ts +24 -17
  80. package/src/extensions/posthog/log-processor.test.ts +7 -6
  81. package/src/extensions/posthog/log-processor.ts +10 -21
  82. package/src/providers/client-observability.ts +2 -0
  83. package/src/storage/browser.ts +14 -4
  84. package/src/storage/node.test.ts +1 -2
  85. package/src/storage/node.ts +1 -2
  86. package/src/vite-import-meta.d.ts +14 -0
  87. package/dist/lib/browser/log-processor-FDLTDQEM.mjs.map +0 -7
  88. package/dist/lib/browser/traces-browser-5DQUYGQ7.mjs +0 -68
  89. package/dist/lib/browser/traces-browser-5DQUYGQ7.mjs.map +0 -7
  90. package/dist/lib/node-esm/log-processor-TKJVJJSJ.mjs.map +0 -7
  91. package/dist/lib/node-esm/traces-KMTHMYFX.mjs +0 -44
  92. package/dist/lib/node-esm/traces-KMTHMYFX.mjs.map +0 -7
@@ -10,4 +10,4 @@ var setDiagLogger = (level) => {
10
10
  export {
11
11
  setDiagLogger
12
12
  };
13
- //# sourceMappingURL=chunk-K4VFBKST.mjs.map
13
+ //# sourceMappingURL=chunk-3534PNWM.mjs.map
@@ -2,6 +2,6 @@
2
2
  "version": 3,
3
3
  "sources": ["../../../src/extensions/otel/otel.ts"],
4
4
  "sourcesContent": ["//\n// Copyright 2024 DXOS.org\n//\n\nimport { DiagConsoleLogger, DiagLogLevel, diag } from '@opentelemetry/api';\nimport { type Resource } from '@opentelemetry/resources';\n\nexport type OtelOptions = {\n endpoint: string;\n headers: Record<string, string>;\n resource: Resource;\n getTags: () => { [key: string]: string };\n consoleDiagLogLevel?: string;\n};\n\nexport const setDiagLogger = (level?: string) => {\n const logLevel = DiagLogLevel[level as keyof typeof DiagLogLevel];\n if (logLevel) {\n diag.setLogger(new DiagConsoleLogger(), logLevel);\n }\n};\n"],
5
- "mappings": ";AAIA,SAASA,mBAAmBC,cAAcC,YAAY;AAW/C,IAAMC,gBAAgB,CAACC,UAAAA;AAC5B,QAAMC,WAAWC,aAAaF,KAAAA;AAC9B,MAAIC,UAAU;AACZE,SAAKC,UAAU,IAAIC,kBAAAA,GAAqBJ,QAAAA;EAC1C;AACF;",
6
- "names": ["DiagConsoleLogger", "DiagLogLevel", "diag", "setDiagLogger", "level", "logLevel", "DiagLogLevel", "diag", "setLogger", "DiagConsoleLogger"]
5
+ "mappings": ";AAIA,SAASA,mBAAmBC,cAAcC,YAAY;AAW/C,IAAMC,gBAAgB,CAACC,UAAAA;AAC5B,QAAMC,WAAWJ,aAAaG,KAAAA;AAC9B,MAAIC,UAAU;AACZH,SAAKI,UAAU,IAAIN,kBAAAA,GAAqBK,QAAAA;EAC1C;AACF;",
6
+ "names": ["DiagConsoleLogger", "DiagLogLevel", "diag", "setDiagLogger", "level", "logLevel", "setLogger"]
7
7
  }
@@ -25,64 +25,46 @@ import { log as log2 } from "@dxos/log";
25
25
  // src/storage/browser.ts
26
26
  import * as localForage from "localforage";
27
27
  import { log } from "@dxos/log";
28
+ import { compositeKey } from "@dxos/util";
28
29
  var __dxlog_file = "/__w/dxos/dxos/packages/sdk/observability/src/storage/browser.ts";
29
30
  var OBSERVABILITY_DISABLED_KEY = "observability-disabled";
30
31
  var OBSERVABILITY_GROUP_KEY = "observability-group";
31
32
  var showObservabilityBanner = () => {
32
- log.warn("showObservabilityBanner is not supported in browser contexts.", void 0, {
33
- F: __dxlog_file,
34
- L: 15,
35
- S: void 0,
36
- C: (f, a) => f(...a)
37
- });
33
+ log.warn("showObservabilityBanner is not supported in browser contexts.", void 0, { "~LogMeta": "~LogMeta", F: __dxlog_file, L: 11, S: void 0 });
38
34
  };
39
35
  var isObservabilityDisabled = async (namespace) => {
40
36
  try {
41
- return await localForage.getItem(`${namespace}:${OBSERVABILITY_DISABLED_KEY}`) === "true";
37
+ return await localForage.getItem(compositeKey(namespace, OBSERVABILITY_DISABLED_KEY)) === "true";
42
38
  } catch (err) {
43
- log.catch("Failed to check if observability is disabled, assuming it is", err, {
44
- F: __dxlog_file,
45
- L: 25,
46
- S: void 0,
47
- C: (f, a) => f(...a)
48
- });
39
+ log.catch("Failed to check if observability is disabled, assuming it is", err, { "~LogMeta": "~LogMeta", F: __dxlog_file, L: 19, S: void 0 });
49
40
  return true;
50
41
  }
51
42
  };
52
43
  var storeObservabilityDisabled = async (namespace, value2) => {
53
44
  try {
54
- await localForage.setItem(`${namespace}:${OBSERVABILITY_DISABLED_KEY}`, String(value2));
45
+ await localForage.setItem(compositeKey(namespace, OBSERVABILITY_DISABLED_KEY), String(value2));
55
46
  } catch (err) {
56
- log.catch("Failed to store observability disabled", err, {
57
- F: __dxlog_file,
58
- L: 37,
59
- S: void 0,
60
- C: (f, a) => f(...a)
61
- });
47
+ log.catch("Failed to store observability disabled", err, { "~LogMeta": "~LogMeta", F: __dxlog_file, L: 29, S: void 0 });
48
+ }
49
+ try {
50
+ if (typeof localStorage !== "undefined") {
51
+ localStorage.setItem(`${namespace}/${OBSERVABILITY_DISABLED_KEY}`, String(value2));
52
+ }
53
+ } catch {
62
54
  }
63
55
  };
64
56
  var getObservabilityGroup = async (namespace) => {
65
57
  try {
66
- return await localForage.getItem(`${namespace}:${OBSERVABILITY_GROUP_KEY}`) ?? void 0;
58
+ return await localForage.getItem(compositeKey(namespace, OBSERVABILITY_GROUP_KEY)) ?? void 0;
67
59
  } catch (err) {
68
- log.catch("Failed to get observability group", err, {
69
- F: __dxlog_file,
70
- L: 48,
71
- S: void 0,
72
- C: (f, a) => f(...a)
73
- });
60
+ log.catch("Failed to get observability group", err, { "~LogMeta": "~LogMeta", F: __dxlog_file, L: 47, S: void 0 });
74
61
  }
75
62
  };
76
63
  var storeObservabilityGroup = async (namespace, value2) => {
77
64
  try {
78
- await localForage.setItem(`${namespace}:${OBSERVABILITY_GROUP_KEY}`, value2);
65
+ await localForage.setItem(compositeKey(namespace, OBSERVABILITY_GROUP_KEY), value2);
79
66
  } catch (err) {
80
- log.catch("Failed to store observability group", err, {
81
- F: __dxlog_file,
82
- L: 59,
83
- S: void 0,
84
- C: (f, a) => f(...a)
85
- });
67
+ log.catch("Failed to store observability group", err, { "~LogMeta": "~LogMeta", F: __dxlog_file, L: 56, S: void 0 });
86
68
  }
87
69
  };
88
70
 
@@ -109,12 +91,7 @@ var ObservabilityImpl = class {
109
91
  this._subscriptions.add(...cleanups.filter((cleanup) => cleanup !== void 0));
110
92
  this._initialized = true;
111
93
  }).pipe(Effect.catchAll((error) => Effect.gen(this, function* () {
112
- log2.catch(error, void 0, {
113
- F: __dxlog_file2,
114
- L: 85,
115
- S: this,
116
- C: (f, a) => f(...a)
117
- });
94
+ log2.catch(error, void 0, { "~LogMeta": "~LogMeta", F: __dxlog_file2, L: 32, S: this });
118
95
  for (const extension of initializedExtensions) {
119
96
  if (extension.close) {
120
97
  yield* extension.close().pipe(Effect.catchAll(() => Effect.succeed(void 0)));
@@ -163,27 +140,11 @@ var ObservabilityImpl = class {
163
140
  });
164
141
  }
165
142
  _addExtension(extension) {
166
- invariant(!this._initialized, "Observability is already initialized", {
167
- F: __dxlog_file2,
168
- L: 142,
169
- S: this,
170
- A: [
171
- "!this._initialized",
172
- "'Observability is already initialized'"
173
- ]
174
- });
143
+ invariant(!this._initialized, "Observability is already initialized", { "~LogMeta": "~LogMeta", F: __dxlog_file2, L: 82, S: this, A: ["!this._initialized", "'Observability is already initialized'"] });
175
144
  this._extensions.push(extension);
176
145
  }
177
146
  _addDataProvider(dataProvider) {
178
- invariant(!this._initialized, "Observability is already initialized", {
179
- F: __dxlog_file2,
180
- L: 147,
181
- S: this,
182
- A: [
183
- "!this._initialized",
184
- "'Observability is already initialized'"
185
- ]
186
- });
147
+ invariant(!this._initialized, "Observability is already initialized", { "~LogMeta": "~LogMeta", F: __dxlog_file2, L: 86, S: this, A: ["!this._initialized", "'Observability is already initialized'"] });
187
148
  this._dataProviders.push(dataProvider);
188
149
  }
189
150
  /**
@@ -292,29 +253,13 @@ var make = () => Effect.succeed(new ObservabilityImpl());
292
253
  var addExtension = (_extension) => Effect.fn(function* (_observability) {
293
254
  const observability = yield* _observability;
294
255
  const extension = yield* _extension;
295
- invariant("_addExtension" in observability && typeof observability._addExtension === "function", void 0, {
296
- F: __dxlog_file2,
297
- L: 276,
298
- S: this,
299
- A: [
300
- "'_addExtension' in observability && typeof observability._addExtension === 'function'",
301
- ""
302
- ]
303
- });
256
+ invariant("_addExtension" in observability && typeof observability._addExtension === "function", void 0, { "~LogMeta": "~LogMeta", F: __dxlog_file2, L: 194, S: this, A: ["'_addExtension' in observability && typeof observability._addExtension === 'function'", ""] });
304
257
  observability._addExtension(extension);
305
258
  return observability;
306
259
  });
307
260
  var addDataProvider = (dataProvider) => Effect.fn(function* (_observability) {
308
261
  const observability = yield* _observability;
309
- invariant("_addDataProvider" in observability && typeof observability._addDataProvider === "function", void 0, {
310
- F: __dxlog_file2,
311
- L: 284,
312
- S: this,
313
- A: [
314
- "'_addDataProvider' in observability && typeof observability._addDataProvider === 'function'",
315
- ""
316
- ]
317
- });
262
+ invariant("_addDataProvider" in observability && typeof observability._addDataProvider === "function", void 0, { "~LogMeta": "~LogMeta", F: __dxlog_file2, L: 200, S: this, A: ["'_addDataProvider' in observability && typeof observability._addDataProvider === 'function'", ""] });
318
263
  observability._addDataProvider(dataProvider);
319
264
  return observability;
320
265
  });
@@ -344,6 +289,7 @@ import * as Effect3 from "effect/Effect";
344
289
  import * as Match from "effect/Match";
345
290
  import * as Option from "effect/Option";
346
291
  import * as Ref from "effect/Ref";
292
+ import { resolveTelemetryTag } from "@dxos/config";
347
293
  import { LogLevel, log as log3 } from "@dxos/log";
348
294
  import { isNode, isNonNullable } from "@dxos/util";
349
295
 
@@ -351,8 +297,8 @@ import { isNode, isNonNullable } from "@dxos/util";
351
297
  var cli_observability_secrets_default = {
352
298
  POSTHOG_API_KEY: null,
353
299
  IPDATA_API_KEY: "73dfdecdf979c18f07d50cf841bbdd9e589f237256326ac8cca23786",
354
- OTEL_ENDPOINT: "https://ingest.eu.signoz.cloud:443",
355
- OTEL_HEADERS: "signoz-ingestion-key: 5300e0c9-a5e8-4a10-9c61-f473e539c0b7"
300
+ OTEL_ENDPOINT: "/api/otel",
301
+ OTEL_HEADERS: null
356
302
  };
357
303
 
358
304
  // src/extensions/stub.ts
@@ -387,27 +333,32 @@ var extensions = Effect3.fn(function* ({
387
333
  metrics: metricsEnabled = false,
388
334
  traces: tracesEnabled = false
389
335
  }) {
390
- const { OtelLogs } = yield* Effect3.promise(() => import("./logs-ATTRIUTL.mjs"));
391
- const { OtelMetrics } = yield* Effect3.promise(() => import("./metrics-PKTV6IGF.mjs"));
392
- const { OtelTraces } = yield* Effect3.promise(() => import("./traces-browser-5DQUYGQ7.mjs"));
336
+ const { OtelLogs } = yield* Effect3.promise(() => import("./logs-A2VDAHHD.mjs"));
337
+ const { OtelMetrics } = yield* Effect3.promise(() => import("./metrics-6OSN54ZV.mjs"));
338
+ const { OtelTraces } = yield* Effect3.promise(() => import("./traces-browser-6MRGAKFC.mjs"));
393
339
  const cachedDisabled = yield* Effect3.promise(() => isObservabilityDisabled(serviceName));
394
- const enabledRef = yield* Ref.make(!cachedDisabled);
340
+ const disabled = cachedDisabled || isObservabilityDisabledSync(serviceName);
341
+ const enabledRef = yield* Ref.make(!disabled);
395
342
  const tags = /* @__PURE__ */ new Map();
396
343
  const endpoint = isNode() ? process.env.DX_OTEL_ENDPOINT ?? _endpoint ?? cli_observability_secrets_default.OTEL_ENDPOINT : config.values.runtime?.app?.env?.DX_OTEL_ENDPOINT;
397
344
  const headers = _headers ?? Match.value(isNode()).pipe(Match.when(true, () => Option.fromNullable(process.env.DX_OTEL_HEADERS ?? cli_observability_secrets_default.OTEL_HEADERS)), Match.when(false, () => Option.fromNullable(config.values.runtime?.app?.env?.DX_OTEL_HEADERS)), Match.exhaustive, Option.map((raw) => parseHeaders(raw)), Option.getOrElse(() => void 0));
398
345
  if (!endpoint || !headers) {
399
- log3.info("Missing OTEL_ENDPOINT or OTEL_HEADERS", void 0, {
400
- F: __dxlog_file3,
401
- L: 77,
402
- S: this,
403
- C: (f, a) => f(...a)
404
- });
346
+ log3.info("Missing OTEL_ENDPOINT or OTEL_HEADERS", void 0, { "~LogMeta": "~LogMeta", F: __dxlog_file3, L: 31, S: this });
405
347
  return stubExtension;
406
348
  }
349
+ const clientTag = resolveTelemetryTag(config);
350
+ if (clientTag) {
351
+ tags.set("ctx.tag", clientTag);
352
+ }
407
353
  const resource = defaultResource().merge(resourceFromAttributes({
408
354
  [ATTR_SERVICE_NAME]: serviceName,
409
355
  [ATTR_SERVICE_VERSION]: serviceVersion,
410
- "deployment.environment": environment
356
+ "session.id": crypto.randomUUID(),
357
+ "deployment.environment": environment,
358
+ "dxos.process.type": detectProcessType(),
359
+ ...clientTag ? {
360
+ "ctx.tag": clientTag
361
+ } : {}
411
362
  }));
412
363
  const logs = logsEnabled ? new OtelLogs({
413
364
  endpoint,
@@ -428,8 +379,11 @@ var extensions = Effect3.fn(function* ({
428
379
  resource,
429
380
  getTags: () => Object.fromEntries(tags)
430
381
  }) : void 0;
431
- return {
382
+ const extension = {
432
383
  initialize: () => Effect3.sync(() => {
384
+ if (disabled) {
385
+ return;
386
+ }
433
387
  if (logs) {
434
388
  log3.runtimeConfig.processors.push(logs.logProcessor);
435
389
  }
@@ -446,12 +400,28 @@ var extensions = Effect3.fn(function* ({
446
400
  yield* Ref.update(enabledRef, () => false);
447
401
  }),
448
402
  close: () => Effect3.promise(async () => {
449
- await logs?.close();
450
- await metrics?.close();
403
+ const results = await Promise.allSettled([
404
+ logs?.close(),
405
+ metrics?.close()
406
+ ]);
407
+ for (const result of results) {
408
+ if (result.status === "rejected") {
409
+ log3.catch(result.reason, void 0, { "~LogMeta": "~LogMeta", F: __dxlog_file3, L: 111, S: this });
410
+ }
411
+ }
412
+ await traces?.close();
451
413
  }),
452
414
  flush: () => Effect3.promise(async () => {
453
- await logs?.flush();
454
- await metrics?.flush();
415
+ const results = await Promise.allSettled([
416
+ logs?.flush(),
417
+ metrics?.flush()
418
+ ]);
419
+ for (const result of results) {
420
+ if (result.status === "rejected") {
421
+ log3.catch(result.reason, void 0, { "~LogMeta": "~LogMeta", F: __dxlog_file3, L: 126, S: this });
422
+ }
423
+ }
424
+ await traces?.flush();
455
425
  }),
456
426
  setTags: (incomingTags) => {
457
427
  for (const [key, value2] of Object.entries(incomingTags)) {
@@ -479,7 +449,35 @@ var extensions = Effect3.fn(function* ({
479
449
  } : void 0
480
450
  ].filter(isNonNullable)
481
451
  };
452
+ return extension;
482
453
  });
454
+ var isObservabilityDisabledSync = (serviceName) => {
455
+ if (isNode()) {
456
+ return process.env.DX_DISABLE_OBSERVABILITY === "true";
457
+ }
458
+ try {
459
+ if (typeof localStorage !== "undefined") {
460
+ return localStorage.getItem(`${serviceName}/observability-disabled`) === "true";
461
+ }
462
+ } catch {
463
+ }
464
+ return false;
465
+ };
466
+ var detectProcessType = () => {
467
+ if (isNode()) {
468
+ return "node";
469
+ }
470
+ if (typeof window !== "undefined") {
471
+ return "browser";
472
+ }
473
+ if (typeof globalThis.ServiceWorkerGlobalScope !== "undefined") {
474
+ return "service-worker";
475
+ }
476
+ if (typeof globalThis.SharedWorkerGlobalScope !== "undefined") {
477
+ return "shared-worker";
478
+ }
479
+ return "dedicated-worker";
480
+ };
483
481
  var parseHeaders = (unparsedHeaders) => {
484
482
  return unparsedHeaders.split(";").reduce((acc, header) => {
485
483
  const [key, ...rest] = header.split(":");
@@ -498,7 +496,7 @@ __export(posthog_exports, {
498
496
 
499
497
  // src/extensions/posthog/extension.ts
500
498
  import * as Effect4 from "effect/Effect";
501
- import { LogBuffer, log as log4 } from "@dxos/log";
499
+ import { log as log4 } from "@dxos/log";
502
500
  var __dxlog_file4 = "/__w/dxos/dxos/packages/sdk/observability/src/extensions/posthog/extension.ts";
503
501
  var uploadLogs = async (body) => {
504
502
  try {
@@ -512,12 +510,7 @@ var uploadLogs = async (body) => {
512
510
  if (!response.ok) {
513
511
  log4.warn("feedback log upload failed", {
514
512
  status: response.status
515
- }, {
516
- F: __dxlog_file4,
517
- L: 34,
518
- S: void 0,
519
- C: (f, a) => f(...a)
520
- });
513
+ }, { "~LogMeta": "~LogMeta", F: __dxlog_file4, L: 17, S: void 0 });
521
514
  return void 0;
522
515
  }
523
516
  const { key } = await response.json();
@@ -525,41 +518,26 @@ var uploadLogs = async (body) => {
525
518
  } catch (err) {
526
519
  log4.warn("feedback log upload error", {
527
520
  error: err
528
- }, {
529
- F: __dxlog_file4,
530
- L: 40,
531
- S: void 0,
532
- C: (f, a) => f(...a)
533
- });
521
+ }, { "~LogMeta": "~LogMeta", F: __dxlog_file4, L: 25, S: void 0 });
534
522
  return void 0;
535
523
  }
536
524
  };
537
- var extensions2 = Effect4.fn(function* ({ config, release, environment, posthog: posthogConfig, logBuffer: externalLogBuffer }) {
525
+ var extensions2 = Effect4.fn(function* ({ config, release, environment, posthog: posthogConfig, logStore }) {
538
526
  if (typeof window === "undefined") {
539
- log4("PostHog is being stubbed because it is running in a worker.", void 0, {
540
- F: __dxlog_file4,
541
- L: 54,
542
- S: this,
543
- C: (f, a) => f(...a)
544
- });
527
+ log4("PostHog is being stubbed because it is running in a worker.", void 0, { "~LogMeta": "~LogMeta", F: __dxlog_file4, L: 33, S: this });
545
528
  return stubExtension;
546
529
  }
547
530
  const feedbackSurveyId = config.get("runtime.app.env.DX_POSTHOG_FEEDBACK_SURVEY_ID");
548
531
  const apiKey = config.get("runtime.app.env.DX_POSTHOG_API_KEY");
549
532
  const api_host = config.get("runtime.app.env.DX_POSTHOG_API_HOST");
550
533
  if (!apiKey || !api_host) {
551
- log4.info("Missing POSTHOG_API_KEY or POSTHOG_API_HOST", void 0, {
552
- F: __dxlog_file4,
553
- L: 62,
554
- S: this,
555
- C: (f, a) => f(...a)
556
- });
534
+ log4.info("Missing POSTHOG_API_KEY or POSTHOG_API_HOST", void 0, { "~LogMeta": "~LogMeta", F: __dxlog_file4, L: 40, S: this });
557
535
  return stubExtension;
558
536
  }
559
537
  const { default: posthog } = yield* Effect4.promise(() => import("posthog-js"));
560
- const { logProcessor } = yield* Effect4.promise(() => import("./log-processor-FDLTDQEM.mjs"));
561
- const logBuffer = externalLogBuffer ?? new LogBuffer();
538
+ const { logProcessor } = yield* Effect4.promise(() => import("./log-processor-HPHWNBOK.mjs"));
562
539
  let feedbackSurveyAvailable = null;
540
+ let unregisterPosthogProcessors;
563
541
  const checkFeedbackSurveyAvailable = () => feedbackSurveyId ? Effect4.promise(() => {
564
542
  if (feedbackSurveyAvailable !== null) {
565
543
  return Promise.resolve(feedbackSurveyAvailable);
@@ -590,19 +568,15 @@ var extensions2 = Effect4.fn(function* ({ config, release, environment, posthog:
590
568
  } : {}
591
569
  });
592
570
  }
593
- log4.runtimeConfig.processors.push(logProcessor);
594
- log4.runtimeConfig.processors.push(logBuffer.logProcessor);
571
+ unregisterPosthogProcessors?.();
572
+ const removePosthogLog = log4.addProcessor(logProcessor, void 0, { "~LogMeta": "~LogMeta", F: __dxlog_file4, L: 79, S: this });
573
+ unregisterPosthogProcessors = () => {
574
+ removePosthogLog();
575
+ };
595
576
  }),
596
577
  close: () => Effect4.sync(() => {
597
- for (const processor of [
598
- logProcessor,
599
- logBuffer.logProcessor
600
- ]) {
601
- const index = log4.runtimeConfig.processors.indexOf(processor);
602
- if (index !== -1) {
603
- log4.runtimeConfig.processors.splice(index, 1);
604
- }
605
- }
578
+ unregisterPosthogProcessors?.();
579
+ unregisterPosthogProcessors = void 0;
606
580
  }),
607
581
  enable: () => Effect4.sync(() => posthog.opt_in_capturing()),
608
582
  disable: () => Effect4.sync(() => posthog.opt_out_capturing()),
@@ -642,17 +616,15 @@ var extensions2 = Effect4.fn(function* ({ config, release, environment, posthog:
642
616
  if (!survey || survey.questions.length === 0) {
643
617
  log4.error("Missing feedback survey or survey has no questions", {
644
618
  feedbackSurveyId
645
- }, {
646
- F: __dxlog_file4,
647
- L: 151,
648
- S: this,
649
- C: (f, a) => f(...a)
650
- });
619
+ }, { "~LogMeta": "~LogMeta", F: __dxlog_file4, L: 124, S: this });
651
620
  return;
652
621
  }
653
- let debugLogDumpKey;
654
- if (form.includeLogs !== false && logBuffer.size > 0) {
655
- debugLogDumpKey = await uploadLogs(logBuffer.serialize());
622
+ let debugLogDumpKey = null;
623
+ if (form.includeLogs !== false && logStore !== void 0) {
624
+ const ndjson = await logStore.export();
625
+ if (ndjson.length > 0) {
626
+ debugLogDumpKey = await uploadLogs(ndjson) ?? "failed";
627
+ }
656
628
  }
657
629
  const question = survey.questions[0];
658
630
  posthog.capture("survey sent", {
@@ -664,9 +636,7 @@ var extensions2 = Effect4.fn(function* ({ config, release, environment, posthog:
664
636
  }
665
637
  ],
666
638
  [`$survey_response_${question.id}`]: form.message,
667
- ...debugLogDumpKey ? {
668
- debug_log_dump_key: debugLogDumpKey
669
- } : {}
639
+ debug_log_dump_key: debugLogDumpKey
670
640
  });
671
641
  });
672
642
  },
@@ -732,19 +702,11 @@ var identityProvider = (clientServices) => Effect5.fn(function* (observability)
732
702
  });
733
703
  });
734
704
  var networkMetricsProvider = (clientServices) => Effect5.fn(function* (observability) {
735
- const ctx = new Context(void 0, {
736
- F: __dxlog_file5,
737
- L: 61
738
- });
705
+ const ctx = new Context(void 0, { "~LogMeta": "~LogMeta", F: __dxlog_file5, L: 50 });
739
706
  let lastNetworkStatus;
740
707
  const updateSignalMetrics = new Event().debounce(NETWORK_METRICS_MIN_INTERVAL);
741
708
  updateSignalMetrics.on(ctx, async () => {
742
- log5("send signal metrics", void 0, {
743
- F: __dxlog_file5,
744
- L: 67,
745
- S: this,
746
- C: (f, a) => f(...a)
747
- });
709
+ log5("send signal metrics", void 0, { "~LogMeta": "~LogMeta", F: __dxlog_file5, L: 55, S: this });
748
710
  lastNetworkStatus?.signaling?.forEach(({ server, state }) => {
749
711
  observability.metrics.gauge("dxos.client.network.signal.connectionState", state, {
750
712
  server
@@ -789,20 +751,11 @@ var networkMetricsProvider = (clientServices) => Effect5.fn(function* (observabi
789
751
  };
790
752
  });
791
753
  var runtimeMetricsProvider = (clientServices) => Effect5.fn(function* (observability) {
792
- const ctx = new Context(void 0, {
793
- F: __dxlog_file5,
794
- L: 121
795
- });
754
+ const ctx = new Context(void 0, { "~LogMeta": "~LogMeta", F: __dxlog_file5, L: 100 });
755
+ log5("runtimeMetricsProvider: requesting platform from SystemService", void 0, { "~LogMeta": "~LogMeta", F: __dxlog_file5, L: 101, S: this });
796
756
  const platform = yield* Effect5.promise(() => clientServices.SystemService.getPlatform());
797
- invariant2(platform, "platform is required", {
798
- F: __dxlog_file5,
799
- L: 123,
800
- S: this,
801
- A: [
802
- "platform",
803
- "'platform is required'"
804
- ]
805
- });
757
+ log5("runtimeMetricsProvider: platform received", void 0, { "~LogMeta": "~LogMeta", F: __dxlog_file5, L: 103, S: this });
758
+ invariant2(platform, "platform is required", { "~LogMeta": "~LogMeta", F: __dxlog_file5, L: 104, S: this, A: ["platform", "'platform is required'"] });
806
759
  observability.setTags({
807
760
  platformType: Platform.PLATFORM_TYPE[platform.type].toLowerCase(),
808
761
  platform: platform.platform,
@@ -826,33 +779,20 @@ var runtimeMetricsProvider = (clientServices) => Effect5.fn(function* (observabi
826
779
  }
827
780
  }).catch((error) => log5("platform error", {
828
781
  error
829
- }, {
830
- F: __dxlog_file5,
831
- L: 152,
832
- S: this,
833
- C: (f, a) => f(...a)
834
- }));
782
+ }, { "~LogMeta": "~LogMeta", F: __dxlog_file5, L: 126, S: this }));
835
783
  }, RUNTIME_METRICS_MIN_INTERVAL);
836
784
  return async () => {
837
785
  await ctx.dispose();
838
786
  };
839
787
  });
840
788
  var spacesMetricsProvider = (client) => Effect5.fn(function* (observability) {
841
- const ctx = new Context(void 0, {
842
- F: __dxlog_file5,
843
- L: 165
844
- });
789
+ const ctx = new Context(void 0, { "~LogMeta": "~LogMeta", F: __dxlog_file5, L: 135 });
845
790
  const spaces = client.spaces.get();
846
791
  const subscriptions = /* @__PURE__ */ new Map();
847
792
  ctx.onDispose(() => subscriptions.forEach((subscription) => subscription.unsubscribe()));
848
793
  const updateSpaceMetrics = new Event().debounce(SPACE_METRICS_MIN_INTERVAL);
849
794
  updateSpaceMetrics.on(ctx, async () => {
850
- log5("send space metrics", void 0, {
851
- F: __dxlog_file5,
852
- L: 173,
853
- S: this,
854
- C: (f, a) => f(...a)
855
- });
795
+ log5("send space metrics", void 0, { "~LogMeta": "~LogMeta", F: __dxlog_file5, L: 142, S: this });
856
796
  for (const data of mapSpaces(spaces, {
857
797
  truncateKeys: true
858
798
  })) {
@@ -973,12 +913,7 @@ var provider = (config) => (observability) => Effect6.gen(function* () {
973
913
  }).pipe(Effect6.provide(FetchHttpClient.layer), Effect6.catchAll((err) => Effect6.sync(() => {
974
914
  log6.verbose("ipdata fetch failed", {
975
915
  err
976
- }, {
977
- F: __dxlog_file6,
978
- L: 88,
979
- S: void 0,
980
- C: (f, a) => f(...a)
981
- });
916
+ }, { "~LogMeta": "~LogMeta", F: __dxlog_file6, L: 54, S: void 0 });
982
917
  })));
983
918
 
984
919
  // src/providers/storage.ts