@dxos/observability 0.8.4-main.3eb6e50203 → 0.8.4-main.3fbcb4aa9b

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 (111) hide show
  1. package/README.md +14 -11
  2. package/dist/lib/browser/{chunk-K4VFBKST.mjs → chunk-3534PNWM.mjs} +1 -1
  3. package/dist/lib/browser/{chunk-K4VFBKST.mjs.map → chunk-3534PNWM.mjs.map} +2 -2
  4. package/dist/lib/browser/index.mjs +130 -256
  5. package/dist/lib/browser/index.mjs.map +4 -4
  6. package/dist/lib/browser/{log-processor-FDLTDQEM.mjs → log-processor-HPHWNBOK.mjs} +11 -18
  7. package/dist/lib/browser/log-processor-HPHWNBOK.mjs.map +7 -0
  8. package/dist/lib/browser/{logs-ATTRIUTL.mjs → logs-A2VDAHHD.mjs} +5 -3
  9. package/dist/lib/browser/{logs-ATTRIUTL.mjs.map → logs-A2VDAHHD.mjs.map} +3 -3
  10. package/dist/lib/browser/meta.json +1 -1
  11. package/dist/lib/browser/{metrics-PKTV6IGF.mjs → metrics-6OSN54ZV.mjs} +5 -20
  12. package/dist/lib/browser/{metrics-PKTV6IGF.mjs.map → metrics-6OSN54ZV.mjs.map} +2 -2
  13. package/dist/lib/browser/traces-browser-6MRGAKFC.mjs +151 -0
  14. package/dist/lib/browser/traces-browser-6MRGAKFC.mjs.map +7 -0
  15. package/dist/lib/node-esm/{chunk-FEVP3MK4.mjs → chunk-SYPJQI4L.mjs} +1 -1
  16. package/dist/lib/node-esm/{chunk-FEVP3MK4.mjs.map → chunk-SYPJQI4L.mjs.map} +2 -2
  17. package/dist/lib/node-esm/index.mjs +115 -223
  18. package/dist/lib/node-esm/index.mjs.map +4 -4
  19. package/dist/lib/node-esm/{log-processor-TKJVJJSJ.mjs → log-processor-ZODHERST.mjs} +11 -18
  20. package/dist/lib/node-esm/log-processor-ZODHERST.mjs.map +7 -0
  21. package/dist/lib/node-esm/{logs-7J45KLM7.mjs → logs-TA32MBMW.mjs} +5 -3
  22. package/dist/lib/node-esm/{logs-7J45KLM7.mjs.map → logs-TA32MBMW.mjs.map} +3 -3
  23. package/dist/lib/node-esm/meta.json +1 -1
  24. package/dist/lib/node-esm/{metrics-H7DDLYSG.mjs → metrics-C5IKPAWD.mjs} +5 -20
  25. package/dist/lib/node-esm/{metrics-H7DDLYSG.mjs.map → metrics-C5IKPAWD.mjs.map} +2 -2
  26. package/dist/lib/node-esm/traces-5LKHMVVG.mjs +122 -0
  27. package/dist/lib/node-esm/traces-5LKHMVVG.mjs.map +7 -0
  28. package/dist/types/src/cli-observability-secrets.json +2 -2
  29. package/dist/types/src/extensions/otel/extension.d.ts.map +1 -1
  30. package/dist/types/src/extensions/otel/extension.js +83 -6
  31. package/dist/types/src/extensions/otel/extension.js.map +1 -1
  32. package/dist/types/src/extensions/otel/logs.d.ts.map +1 -1
  33. package/dist/types/src/extensions/otel/logs.js +4 -1
  34. package/dist/types/src/extensions/otel/logs.js.map +1 -1
  35. package/dist/types/src/extensions/otel/metrics.d.ts.map +1 -1
  36. package/dist/types/src/extensions/otel/metrics.js.map +1 -1
  37. package/dist/types/src/extensions/otel/otel.d.ts.map +1 -1
  38. package/dist/types/src/extensions/otel/span-processors.d.ts +25 -0
  39. package/dist/types/src/extensions/otel/span-processors.d.ts.map +1 -0
  40. package/dist/types/src/extensions/otel/span-processors.js +41 -0
  41. package/dist/types/src/extensions/otel/span-processors.js.map +1 -0
  42. package/dist/types/src/extensions/otel/traces-browser.d.ts +17 -0
  43. package/dist/types/src/extensions/otel/traces-browser.d.ts.map +1 -1
  44. package/dist/types/src/extensions/otel/traces-browser.js +71 -11
  45. package/dist/types/src/extensions/otel/traces-browser.js.map +1 -1
  46. package/dist/types/src/extensions/otel/traces.d.ts +17 -0
  47. package/dist/types/src/extensions/otel/traces.d.ts.map +1 -1
  48. package/dist/types/src/extensions/otel/traces.js +57 -8
  49. package/dist/types/src/extensions/otel/traces.js.map +1 -1
  50. package/dist/types/src/extensions/posthog/extension.d.ts +7 -0
  51. package/dist/types/src/extensions/posthog/extension.d.ts.map +1 -1
  52. package/dist/types/src/extensions/posthog/extension.js +16 -15
  53. package/dist/types/src/extensions/posthog/extension.js.map +1 -1
  54. package/dist/types/src/extensions/posthog/log-processor.d.ts.map +1 -1
  55. package/dist/types/src/extensions/posthog/log-processor.js +10 -19
  56. package/dist/types/src/extensions/posthog/log-processor.js.map +1 -1
  57. package/dist/types/src/extensions/posthog/log-processor.test.js +2 -2
  58. package/dist/types/src/extensions/posthog/log-processor.test.js.map +1 -1
  59. package/dist/types/src/index.d.ts +0 -1
  60. package/dist/types/src/index.d.ts.map +1 -1
  61. package/dist/types/src/index.js +0 -1
  62. package/dist/types/src/index.js.map +1 -1
  63. package/dist/types/src/observability.d.ts.map +1 -1
  64. package/dist/types/src/providers/client-observability.d.ts.map +1 -1
  65. package/dist/types/src/providers/client-observability.js +2 -0
  66. package/dist/types/src/providers/client-observability.js.map +1 -1
  67. package/dist/types/src/providers/ip-data.d.ts.map +1 -1
  68. package/dist/types/src/providers/ip-data.js +4 -2
  69. package/dist/types/src/providers/ip-data.js.map +1 -1
  70. package/dist/types/src/storage/browser.d.ts.map +1 -1
  71. package/dist/types/src/storage/browser.js +15 -4
  72. package/dist/types/src/storage/browser.js.map +1 -1
  73. package/dist/types/src/storage/node.d.ts.map +1 -1
  74. package/dist/types/src/storage/node.js +1 -1
  75. package/dist/types/src/storage/node.js.map +1 -1
  76. package/dist/types/src/storage/node.test.js +1 -1
  77. package/dist/types/src/storage/node.test.js.map +1 -1
  78. package/dist/types/tsconfig.tsbuildinfo +1 -1
  79. package/package.json +22 -18
  80. package/src/cli-observability-secrets.json +2 -2
  81. package/src/extensions/otel/extension.ts +87 -7
  82. package/src/extensions/otel/logs.ts +4 -1
  83. package/src/extensions/otel/span-processors.ts +45 -0
  84. package/src/extensions/otel/traces-browser.ts +93 -11
  85. package/src/extensions/otel/traces.ts +74 -10
  86. package/src/extensions/posthog/extension.ts +23 -14
  87. package/src/extensions/posthog/log-processor.test.ts +7 -6
  88. package/src/extensions/posthog/log-processor.ts +10 -21
  89. package/src/index.ts +0 -1
  90. package/src/providers/client-observability.ts +2 -0
  91. package/src/providers/ip-data.ts +5 -2
  92. package/src/storage/browser.ts +14 -4
  93. package/src/storage/node.test.ts +1 -2
  94. package/src/storage/node.ts +1 -2
  95. package/src/vite-import-meta.d.ts +14 -0
  96. package/dist/lib/browser/log-processor-FDLTDQEM.mjs.map +0 -7
  97. package/dist/lib/browser/traces-browser-XYXBF5ZX.mjs +0 -62
  98. package/dist/lib/browser/traces-browser-XYXBF5ZX.mjs.map +0 -7
  99. package/dist/lib/node-esm/log-processor-TKJVJJSJ.mjs.map +0 -7
  100. package/dist/lib/node-esm/traces-KMTHMYFX.mjs +0 -44
  101. package/dist/lib/node-esm/traces-KMTHMYFX.mjs.map +0 -7
  102. package/dist/types/src/log-buffer.d.ts +0 -34
  103. package/dist/types/src/log-buffer.d.ts.map +0 -1
  104. package/dist/types/src/log-buffer.js +0 -70
  105. package/dist/types/src/log-buffer.js.map +0 -1
  106. package/dist/types/src/log-buffer.test.d.ts +0 -2
  107. package/dist/types/src/log-buffer.test.d.ts.map +0 -1
  108. package/dist/types/src/log-buffer.test.js +0 -107
  109. package/dist/types/src/log-buffer.test.js.map +0 -1
  110. package/src/log-buffer.test.ts +0 -134
  111. package/src/log-buffer.ts +0 -101
@@ -3,69 +3,6 @@ import {
3
3
  __export
4
4
  } from "./chunk-HSLMI22Q.mjs";
5
5
 
6
- // src/log-buffer.ts
7
- import { LogLevel, shortLevelName } from "@dxos/log";
8
- import { CircularBuffer } from "@dxos/util";
9
- var DEFAULT_BUFFER_SIZE = 2e3;
10
- var MAX_CONTEXT_LENGTH = 500;
11
- var LogBuffer = class {
12
- _buffer;
13
- constructor(size = DEFAULT_BUFFER_SIZE) {
14
- this._buffer = new CircularBuffer(size);
15
- }
16
- /** Log processor that can be registered with `log.runtimeConfig.processors`. */
17
- logProcessor = (_config, entry) => {
18
- if (entry.level <= LogLevel.TRACE) {
19
- return;
20
- }
21
- const record = {
22
- t: (/* @__PURE__ */ new Date()).toISOString(),
23
- l: shortLevelName[entry.level] ?? "?",
24
- m: entry.message ?? ""
25
- };
26
- if (entry.meta) {
27
- record.f = getRelativeFilename(entry.meta.F);
28
- record.n = entry.meta.L;
29
- }
30
- if (entry.error) {
31
- record.e = entry.error.stack ?? entry.error.message;
32
- }
33
- if (entry.context != null) {
34
- try {
35
- const ctx = typeof entry.context === "function" ? entry.context() : entry.context;
36
- if (ctx != null && !(ctx instanceof Error)) {
37
- let json = JSON.stringify(ctx);
38
- if (json.length > MAX_CONTEXT_LENGTH) {
39
- json = json.slice(0, MAX_CONTEXT_LENGTH);
40
- }
41
- record.c = json;
42
- }
43
- } catch {
44
- }
45
- }
46
- this._buffer.push(record);
47
- };
48
- /** Number of entries currently in the buffer. */
49
- get size() {
50
- return this._buffer.elementCount;
51
- }
52
- /** Serialize buffer contents as NDJSON (newline-delimited JSON). */
53
- serialize() {
54
- const lines = [];
55
- for (const record of this._buffer) {
56
- lines.push(JSON.stringify(record));
57
- }
58
- return lines.join("\n");
59
- }
60
- };
61
- var getRelativeFilename = (filename) => {
62
- const match = filename.match(/.+\/(packages\/.+\/.+)/);
63
- if (match) {
64
- return match[1];
65
- }
66
- return filename;
67
- };
68
-
69
6
  // src/observability.ts
70
7
  var observability_exports = {};
71
8
  __export(observability_exports, {
@@ -87,10 +24,10 @@ import { invariant } from "@dxos/invariant";
87
24
  import { log } from "@dxos/log";
88
25
 
89
26
  // src/storage/node.ts
27
+ import yaml from "js-yaml";
90
28
  import { existsSync, statSync } from "node:fs";
91
29
  import { mkdir, readFile, writeFile } from "node:fs/promises";
92
30
  import { join } from "node:path";
93
- import yaml from "js-yaml";
94
31
  import { v4 as uuid, validate as validateUuid } from "uuid";
95
32
  var showObservabilityBanner = async (configDir, bannercb) => {
96
33
  const path = join(configDir, ".observability-banner-printed");
@@ -177,12 +114,7 @@ var ObservabilityImpl = class {
177
114
  this._subscriptions.add(...cleanups.filter((cleanup) => cleanup !== void 0));
178
115
  this._initialized = true;
179
116
  }).pipe(Effect.catchAll((error) => Effect.gen(this, function* () {
180
- log.catch(error, void 0, {
181
- F: __dxlog_file,
182
- L: 85,
183
- S: this,
184
- C: (f, a) => f(...a)
185
- });
117
+ log.catch(error, void 0, { "~LogMeta": "~LogMeta", F: __dxlog_file, L: 32, S: this });
186
118
  for (const extension of initializedExtensions) {
187
119
  if (extension.close) {
188
120
  yield* extension.close().pipe(Effect.catchAll(() => Effect.succeed(void 0)));
@@ -231,27 +163,11 @@ var ObservabilityImpl = class {
231
163
  });
232
164
  }
233
165
  _addExtension(extension) {
234
- invariant(!this._initialized, "Observability is already initialized", {
235
- F: __dxlog_file,
236
- L: 142,
237
- S: this,
238
- A: [
239
- "!this._initialized",
240
- "'Observability is already initialized'"
241
- ]
242
- });
166
+ invariant(!this._initialized, "Observability is already initialized", { "~LogMeta": "~LogMeta", F: __dxlog_file, L: 82, S: this, A: ["!this._initialized", "'Observability is already initialized'"] });
243
167
  this._extensions.push(extension);
244
168
  }
245
169
  _addDataProvider(dataProvider) {
246
- invariant(!this._initialized, "Observability is already initialized", {
247
- F: __dxlog_file,
248
- L: 147,
249
- S: this,
250
- A: [
251
- "!this._initialized",
252
- "'Observability is already initialized'"
253
- ]
254
- });
170
+ invariant(!this._initialized, "Observability is already initialized", { "~LogMeta": "~LogMeta", F: __dxlog_file, L: 86, S: this, A: ["!this._initialized", "'Observability is already initialized'"] });
255
171
  this._dataProviders.push(dataProvider);
256
172
  }
257
173
  /**
@@ -360,29 +276,13 @@ var make = () => Effect.succeed(new ObservabilityImpl());
360
276
  var addExtension = (_extension) => Effect.fn(function* (_observability) {
361
277
  const observability = yield* _observability;
362
278
  const extension = yield* _extension;
363
- invariant("_addExtension" in observability && typeof observability._addExtension === "function", void 0, {
364
- F: __dxlog_file,
365
- L: 276,
366
- S: this,
367
- A: [
368
- "'_addExtension' in observability && typeof observability._addExtension === 'function'",
369
- ""
370
- ]
371
- });
279
+ invariant("_addExtension" in observability && typeof observability._addExtension === "function", void 0, { "~LogMeta": "~LogMeta", F: __dxlog_file, L: 194, S: this, A: ["'_addExtension' in observability && typeof observability._addExtension === 'function'", ""] });
372
280
  observability._addExtension(extension);
373
281
  return observability;
374
282
  });
375
283
  var addDataProvider = (dataProvider) => Effect.fn(function* (_observability) {
376
284
  const observability = yield* _observability;
377
- invariant("_addDataProvider" in observability && typeof observability._addDataProvider === "function", void 0, {
378
- F: __dxlog_file,
379
- L: 284,
380
- S: this,
381
- A: [
382
- "'_addDataProvider' in observability && typeof observability._addDataProvider === 'function'",
383
- ""
384
- ]
385
- });
285
+ invariant("_addDataProvider" in observability && typeof observability._addDataProvider === "function", void 0, { "~LogMeta": "~LogMeta", F: __dxlog_file, L: 200, S: this, A: ["'_addDataProvider' in observability && typeof observability._addDataProvider === 'function'", ""] });
386
286
  observability._addDataProvider(dataProvider);
387
287
  return observability;
388
288
  });
@@ -412,15 +312,16 @@ import * as Effect3 from "effect/Effect";
412
312
  import * as Match from "effect/Match";
413
313
  import * as Option from "effect/Option";
414
314
  import * as Ref from "effect/Ref";
415
- import { LogLevel as LogLevel2, log as log2 } from "@dxos/log";
315
+ import { resolveTelemetryTag } from "@dxos/config";
316
+ import { LogLevel, log as log2 } from "@dxos/log";
416
317
  import { isNode, isNonNullable } from "@dxos/util";
417
318
 
418
319
  // src/cli-observability-secrets.json
419
320
  var cli_observability_secrets_default = {
420
321
  POSTHOG_API_KEY: null,
421
322
  IPDATA_API_KEY: "73dfdecdf979c18f07d50cf841bbdd9e589f237256326ac8cca23786",
422
- OTEL_ENDPOINT: "https://ingest.eu.signoz.cloud:443",
423
- OTEL_HEADERS: "signoz-ingestion-key: 5300e0c9-a5e8-4a10-9c61-f473e539c0b7"
323
+ OTEL_ENDPOINT: "/api/otel",
324
+ OTEL_HEADERS: null
424
325
  };
425
326
 
426
327
  // src/extensions/stub.ts
@@ -451,31 +352,36 @@ var extensions = Effect3.fn(function* ({
451
352
  // - logs should be cached locally in a circular buffer
452
353
  // - logs should be flushed to the server if user opts to include them in a bug report
453
354
  logs: logsEnabled = false,
454
- logLevel = LogLevel2.INFO,
355
+ logLevel = LogLevel.INFO,
455
356
  metrics: metricsEnabled = false,
456
357
  traces: tracesEnabled = false
457
358
  }) {
458
- const { OtelLogs } = yield* Effect3.promise(() => import("./logs-7J45KLM7.mjs"));
459
- const { OtelMetrics } = yield* Effect3.promise(() => import("./metrics-H7DDLYSG.mjs"));
460
- const { OtelTraces } = yield* Effect3.promise(() => import("./traces-KMTHMYFX.mjs"));
359
+ const { OtelLogs } = yield* Effect3.promise(() => import("./logs-TA32MBMW.mjs"));
360
+ const { OtelMetrics } = yield* Effect3.promise(() => import("./metrics-C5IKPAWD.mjs"));
361
+ const { OtelTraces } = yield* Effect3.promise(() => import("./traces-5LKHMVVG.mjs"));
461
362
  const cachedDisabled = yield* Effect3.promise(() => isObservabilityDisabled(serviceName));
462
- const enabledRef = yield* Ref.make(!cachedDisabled);
363
+ const disabled = cachedDisabled || isObservabilityDisabledSync(serviceName);
364
+ const enabledRef = yield* Ref.make(!disabled);
463
365
  const tags = /* @__PURE__ */ new Map();
464
366
  const endpoint = isNode() ? process.env.DX_OTEL_ENDPOINT ?? _endpoint ?? cli_observability_secrets_default.OTEL_ENDPOINT : config.values.runtime?.app?.env?.DX_OTEL_ENDPOINT;
465
367
  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));
466
368
  if (!endpoint || !headers) {
467
- log2.info("Missing OTEL_ENDPOINT or OTEL_HEADERS", void 0, {
468
- F: __dxlog_file2,
469
- L: 77,
470
- S: this,
471
- C: (f, a) => f(...a)
472
- });
369
+ log2.info("Missing OTEL_ENDPOINT or OTEL_HEADERS", void 0, { "~LogMeta": "~LogMeta", F: __dxlog_file2, L: 31, S: this });
473
370
  return stubExtension;
474
371
  }
372
+ const clientTag = resolveTelemetryTag(config);
373
+ if (clientTag) {
374
+ tags.set("ctx.tag", clientTag);
375
+ }
475
376
  const resource = defaultResource().merge(resourceFromAttributes({
476
377
  [ATTR_SERVICE_NAME]: serviceName,
477
378
  [ATTR_SERVICE_VERSION]: serviceVersion,
478
- "deployment.environment": environment
379
+ "session.id": crypto.randomUUID(),
380
+ "deployment.environment": environment,
381
+ "dxos.process.type": detectProcessType(),
382
+ ...clientTag ? {
383
+ "ctx.tag": clientTag
384
+ } : {}
479
385
  }));
480
386
  const logs = logsEnabled ? new OtelLogs({
481
387
  endpoint,
@@ -496,8 +402,11 @@ var extensions = Effect3.fn(function* ({
496
402
  resource,
497
403
  getTags: () => Object.fromEntries(tags)
498
404
  }) : void 0;
499
- return {
405
+ const extension = {
500
406
  initialize: () => Effect3.sync(() => {
407
+ if (disabled) {
408
+ return;
409
+ }
501
410
  if (logs) {
502
411
  log2.runtimeConfig.processors.push(logs.logProcessor);
503
412
  }
@@ -514,12 +423,28 @@ var extensions = Effect3.fn(function* ({
514
423
  yield* Ref.update(enabledRef, () => false);
515
424
  }),
516
425
  close: () => Effect3.promise(async () => {
517
- await logs?.close();
518
- await metrics?.close();
426
+ const results = await Promise.allSettled([
427
+ logs?.close(),
428
+ metrics?.close()
429
+ ]);
430
+ for (const result of results) {
431
+ if (result.status === "rejected") {
432
+ log2.catch(result.reason, void 0, { "~LogMeta": "~LogMeta", F: __dxlog_file2, L: 111, S: this });
433
+ }
434
+ }
435
+ await traces?.close();
519
436
  }),
520
437
  flush: () => Effect3.promise(async () => {
521
- await logs?.flush();
522
- await metrics?.flush();
438
+ const results = await Promise.allSettled([
439
+ logs?.flush(),
440
+ metrics?.flush()
441
+ ]);
442
+ for (const result of results) {
443
+ if (result.status === "rejected") {
444
+ log2.catch(result.reason, void 0, { "~LogMeta": "~LogMeta", F: __dxlog_file2, L: 126, S: this });
445
+ }
446
+ }
447
+ await traces?.flush();
523
448
  }),
524
449
  setTags: (incomingTags) => {
525
450
  for (const [key, value2] of Object.entries(incomingTags)) {
@@ -547,7 +472,35 @@ var extensions = Effect3.fn(function* ({
547
472
  } : void 0
548
473
  ].filter(isNonNullable)
549
474
  };
475
+ return extension;
550
476
  });
477
+ var isObservabilityDisabledSync = (serviceName) => {
478
+ if (isNode()) {
479
+ return process.env.DX_DISABLE_OBSERVABILITY === "true";
480
+ }
481
+ try {
482
+ if (typeof localStorage !== "undefined") {
483
+ return localStorage.getItem(`${serviceName}/observability-disabled`) === "true";
484
+ }
485
+ } catch {
486
+ }
487
+ return false;
488
+ };
489
+ var detectProcessType = () => {
490
+ if (isNode()) {
491
+ return "node";
492
+ }
493
+ if (typeof window !== "undefined") {
494
+ return "browser";
495
+ }
496
+ if (typeof globalThis.ServiceWorkerGlobalScope !== "undefined") {
497
+ return "service-worker";
498
+ }
499
+ if (typeof globalThis.SharedWorkerGlobalScope !== "undefined") {
500
+ return "shared-worker";
501
+ }
502
+ return "dedicated-worker";
503
+ };
551
504
  var parseHeaders = (unparsedHeaders) => {
552
505
  return unparsedHeaders.split(";").reduce((acc, header) => {
553
506
  const [key, ...rest] = header.split(":");
@@ -580,12 +533,7 @@ var uploadLogs = async (body) => {
580
533
  if (!response.ok) {
581
534
  log3.warn("feedback log upload failed", {
582
535
  status: response.status
583
- }, {
584
- F: __dxlog_file3,
585
- L: 33,
586
- S: void 0,
587
- C: (f, a) => f(...a)
588
- });
536
+ }, { "~LogMeta": "~LogMeta", F: __dxlog_file3, L: 17, S: void 0 });
589
537
  return void 0;
590
538
  }
591
539
  const { key } = await response.json();
@@ -593,41 +541,26 @@ var uploadLogs = async (body) => {
593
541
  } catch (err) {
594
542
  log3.warn("feedback log upload error", {
595
543
  error: err
596
- }, {
597
- F: __dxlog_file3,
598
- L: 39,
599
- S: void 0,
600
- C: (f, a) => f(...a)
601
- });
544
+ }, { "~LogMeta": "~LogMeta", F: __dxlog_file3, L: 25, S: void 0 });
602
545
  return void 0;
603
546
  }
604
547
  };
605
- var extensions2 = Effect4.fn(function* ({ config, release, environment, posthog: posthogConfig }) {
548
+ var extensions2 = Effect4.fn(function* ({ config, release, environment, posthog: posthogConfig, logStore }) {
606
549
  if (typeof window === "undefined") {
607
- log3("PostHog is being stubbed because it is running in a worker.", void 0, {
608
- F: __dxlog_file3,
609
- L: 52,
610
- S: this,
611
- C: (f, a) => f(...a)
612
- });
550
+ log3("PostHog is being stubbed because it is running in a worker.", void 0, { "~LogMeta": "~LogMeta", F: __dxlog_file3, L: 33, S: this });
613
551
  return stubExtension;
614
552
  }
615
553
  const feedbackSurveyId = config.get("runtime.app.env.DX_POSTHOG_FEEDBACK_SURVEY_ID");
616
554
  const apiKey = config.get("runtime.app.env.DX_POSTHOG_API_KEY");
617
555
  const api_host = config.get("runtime.app.env.DX_POSTHOG_API_HOST");
618
556
  if (!apiKey || !api_host) {
619
- log3.info("Missing POSTHOG_API_KEY or POSTHOG_API_HOST", void 0, {
620
- F: __dxlog_file3,
621
- L: 60,
622
- S: this,
623
- C: (f, a) => f(...a)
624
- });
557
+ log3.info("Missing POSTHOG_API_KEY or POSTHOG_API_HOST", void 0, { "~LogMeta": "~LogMeta", F: __dxlog_file3, L: 40, S: this });
625
558
  return stubExtension;
626
559
  }
627
560
  const { default: posthog } = yield* Effect4.promise(() => import("posthog-js"));
628
- const { logProcessor } = yield* Effect4.promise(() => import("./log-processor-TKJVJJSJ.mjs"));
629
- const logBuffer = new LogBuffer();
561
+ const { logProcessor } = yield* Effect4.promise(() => import("./log-processor-ZODHERST.mjs"));
630
562
  let feedbackSurveyAvailable = null;
563
+ let unregisterPosthogProcessors;
631
564
  const checkFeedbackSurveyAvailable = () => feedbackSurveyId ? Effect4.promise(() => {
632
565
  if (feedbackSurveyAvailable !== null) {
633
566
  return Promise.resolve(feedbackSurveyAvailable);
@@ -658,19 +591,15 @@ var extensions2 = Effect4.fn(function* ({ config, release, environment, posthog:
658
591
  } : {}
659
592
  });
660
593
  }
661
- log3.runtimeConfig.processors.push(logProcessor);
662
- log3.runtimeConfig.processors.push(logBuffer.logProcessor);
594
+ unregisterPosthogProcessors?.();
595
+ const removePosthogLog = log3.addProcessor(logProcessor, void 0, { "~LogMeta": "~LogMeta", F: __dxlog_file3, L: 79, S: this });
596
+ unregisterPosthogProcessors = () => {
597
+ removePosthogLog();
598
+ };
663
599
  }),
664
600
  close: () => Effect4.sync(() => {
665
- for (const processor of [
666
- logProcessor,
667
- logBuffer.logProcessor
668
- ]) {
669
- const index = log3.runtimeConfig.processors.indexOf(processor);
670
- if (index !== -1) {
671
- log3.runtimeConfig.processors.splice(index, 1);
672
- }
673
- }
601
+ unregisterPosthogProcessors?.();
602
+ unregisterPosthogProcessors = void 0;
674
603
  }),
675
604
  enable: () => Effect4.sync(() => posthog.opt_in_capturing()),
676
605
  disable: () => Effect4.sync(() => posthog.opt_out_capturing()),
@@ -710,17 +639,15 @@ var extensions2 = Effect4.fn(function* ({ config, release, environment, posthog:
710
639
  if (!survey || survey.questions.length === 0) {
711
640
  log3.error("Missing feedback survey or survey has no questions", {
712
641
  feedbackSurveyId
713
- }, {
714
- F: __dxlog_file3,
715
- L: 149,
716
- S: this,
717
- C: (f, a) => f(...a)
718
- });
642
+ }, { "~LogMeta": "~LogMeta", F: __dxlog_file3, L: 124, S: this });
719
643
  return;
720
644
  }
721
- let debugLogDumpKey;
722
- if (form.includeLogs !== false && logBuffer.size > 0) {
723
- debugLogDumpKey = await uploadLogs(logBuffer.serialize());
645
+ let debugLogDumpKey = null;
646
+ if (form.includeLogs !== false && logStore !== void 0) {
647
+ const ndjson = await logStore.export();
648
+ if (ndjson.length > 0) {
649
+ debugLogDumpKey = await uploadLogs(ndjson) ?? "failed";
650
+ }
724
651
  }
725
652
  const question = survey.questions[0];
726
653
  posthog.capture("survey sent", {
@@ -732,9 +659,7 @@ var extensions2 = Effect4.fn(function* ({ config, release, environment, posthog:
732
659
  }
733
660
  ],
734
661
  [`$survey_response_${question.id}`]: form.message,
735
- ...debugLogDumpKey ? {
736
- debug_log_dump_key: debugLogDumpKey
737
- } : {}
662
+ debug_log_dump_key: debugLogDumpKey
738
663
  });
739
664
  });
740
665
  },
@@ -800,19 +725,11 @@ var identityProvider = (clientServices) => Effect5.fn(function* (observability)
800
725
  });
801
726
  });
802
727
  var networkMetricsProvider = (clientServices) => Effect5.fn(function* (observability) {
803
- const ctx = new Context(void 0, {
804
- F: __dxlog_file4,
805
- L: 61
806
- });
728
+ const ctx = new Context(void 0, { "~LogMeta": "~LogMeta", F: __dxlog_file4, L: 50 });
807
729
  let lastNetworkStatus;
808
730
  const updateSignalMetrics = new Event().debounce(NETWORK_METRICS_MIN_INTERVAL);
809
731
  updateSignalMetrics.on(ctx, async () => {
810
- log4("send signal metrics", void 0, {
811
- F: __dxlog_file4,
812
- L: 67,
813
- S: this,
814
- C: (f, a) => f(...a)
815
- });
732
+ log4("send signal metrics", void 0, { "~LogMeta": "~LogMeta", F: __dxlog_file4, L: 55, S: this });
816
733
  lastNetworkStatus?.signaling?.forEach(({ server, state }) => {
817
734
  observability.metrics.gauge("dxos.client.network.signal.connectionState", state, {
818
735
  server
@@ -857,20 +774,11 @@ var networkMetricsProvider = (clientServices) => Effect5.fn(function* (observabi
857
774
  };
858
775
  });
859
776
  var runtimeMetricsProvider = (clientServices) => Effect5.fn(function* (observability) {
860
- const ctx = new Context(void 0, {
861
- F: __dxlog_file4,
862
- L: 121
863
- });
777
+ const ctx = new Context(void 0, { "~LogMeta": "~LogMeta", F: __dxlog_file4, L: 100 });
778
+ log4("runtimeMetricsProvider: requesting platform from SystemService", void 0, { "~LogMeta": "~LogMeta", F: __dxlog_file4, L: 101, S: this });
864
779
  const platform = yield* Effect5.promise(() => clientServices.SystemService.getPlatform());
865
- invariant2(platform, "platform is required", {
866
- F: __dxlog_file4,
867
- L: 123,
868
- S: this,
869
- A: [
870
- "platform",
871
- "'platform is required'"
872
- ]
873
- });
780
+ log4("runtimeMetricsProvider: platform received", void 0, { "~LogMeta": "~LogMeta", F: __dxlog_file4, L: 103, S: this });
781
+ invariant2(platform, "platform is required", { "~LogMeta": "~LogMeta", F: __dxlog_file4, L: 104, S: this, A: ["platform", "'platform is required'"] });
874
782
  observability.setTags({
875
783
  platformType: Platform.PLATFORM_TYPE[platform.type].toLowerCase(),
876
784
  platform: platform.platform,
@@ -894,33 +802,20 @@ var runtimeMetricsProvider = (clientServices) => Effect5.fn(function* (observabi
894
802
  }
895
803
  }).catch((error) => log4("platform error", {
896
804
  error
897
- }, {
898
- F: __dxlog_file4,
899
- L: 152,
900
- S: this,
901
- C: (f, a) => f(...a)
902
- }));
805
+ }, { "~LogMeta": "~LogMeta", F: __dxlog_file4, L: 126, S: this }));
903
806
  }, RUNTIME_METRICS_MIN_INTERVAL);
904
807
  return async () => {
905
808
  await ctx.dispose();
906
809
  };
907
810
  });
908
811
  var spacesMetricsProvider = (client) => Effect5.fn(function* (observability) {
909
- const ctx = new Context(void 0, {
910
- F: __dxlog_file4,
911
- L: 165
912
- });
812
+ const ctx = new Context(void 0, { "~LogMeta": "~LogMeta", F: __dxlog_file4, L: 135 });
913
813
  const spaces = client.spaces.get();
914
814
  const subscriptions = /* @__PURE__ */ new Map();
915
815
  ctx.onDispose(() => subscriptions.forEach((subscription) => subscription.unsubscribe()));
916
816
  const updateSpaceMetrics = new Event().debounce(SPACE_METRICS_MIN_INTERVAL);
917
817
  updateSpaceMetrics.on(ctx, async () => {
918
- log4("send space metrics", void 0, {
919
- F: __dxlog_file4,
920
- L: 173,
921
- S: this,
922
- C: (f, a) => f(...a)
923
- });
818
+ log4("send space metrics", void 0, { "~LogMeta": "~LogMeta", F: __dxlog_file4, L: 142, S: this });
924
819
  for (const data of mapSpaces(spaces, {
925
820
  truncateKeys: true
926
821
  })) {
@@ -1011,13 +906,14 @@ var IPData = Schema.Struct({
1011
906
  });
1012
907
  var getIPData = Effect6.fn(function* (config) {
1013
908
  const httpClient = yield* HttpClient.HttpClient;
909
+ const httpClientNoTrace = httpClient.pipe(HttpClient.withTracerDisabledWhen(() => true));
1014
910
  const cachedData = yield* Effect6.promise(() => localForage.getItem("dxos:observability:ipdata"));
1015
911
  if (cachedData && cachedData.timestamp > Date.now() - IP_DATA_CACHE_TIMEOUT) {
1016
912
  return cachedData.data;
1017
913
  }
1018
914
  const IPDATA_API_KEY = config.get("runtime.app.env.DX_IPDATA_API_KEY");
1019
915
  if (IPDATA_API_KEY) {
1020
- const data = yield* HttpClientRequest.get(`https://api.ipdata.co?api-key=${IPDATA_API_KEY}`).pipe(httpClient.execute, Effect6.flatMap((res) => res.json), Effect6.flatMap(Schema.decodeUnknown(IPData)));
916
+ const data = yield* HttpClientRequest.get(`https://api.ipdata.co?api-key=${IPDATA_API_KEY}`).pipe(httpClientNoTrace.execute, Effect6.flatMap((res) => res.json), Effect6.flatMap(Schema.decodeUnknown(IPData)));
1021
917
  yield* Effect6.promise(() => localForage.setItem("dxos:observability:ipdata", {
1022
918
  data,
1023
919
  timestamp: Date.now()
@@ -1038,12 +934,9 @@ var provider = (config) => (observability) => Effect6.gen(function* () {
1038
934
  longitude: ipData.longitude
1039
935
  });
1040
936
  }).pipe(Effect6.provide(FetchHttpClient.layer), Effect6.catchAll((err) => Effect6.sync(() => {
1041
- log5.catch(err, void 0, {
1042
- F: __dxlog_file5,
1043
- L: 85,
1044
- S: void 0,
1045
- C: (f, a) => f(...a)
1046
- });
937
+ log5.verbose("ipdata fetch failed", {
938
+ err
939
+ }, { "~LogMeta": "~LogMeta", F: __dxlog_file5, L: 54, S: void 0 });
1047
940
  })));
1048
941
 
1049
942
  // src/providers/storage.ts
@@ -1067,7 +960,6 @@ var provider2 = Effect7.fn(function* (observability) {
1067
960
  }
1068
961
  });
1069
962
  export {
1070
- LogBuffer,
1071
963
  observability_exports as Observability,
1072
964
  observability_extension_exports as ObservabilityExtension,
1073
965
  providers_exports as ObservabilityProvider