@dxos/observability 0.8.3 → 0.8.4-main.1c7ec43d41

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 (347) hide show
  1. package/README.md +14 -11
  2. package/dist/lib/browser/chunk-3534PNWM.mjs +13 -0
  3. package/dist/lib/browser/chunk-3534PNWM.mjs.map +7 -0
  4. package/dist/lib/browser/chunk-J5LGTIGS.mjs +10 -0
  5. package/dist/lib/browser/index.mjs +940 -34
  6. package/dist/lib/browser/index.mjs.map +4 -4
  7. package/dist/lib/browser/log-processor-HPHWNBOK.mjs +38 -0
  8. package/dist/lib/browser/log-processor-HPHWNBOK.mjs.map +7 -0
  9. package/dist/lib/browser/logs-A2VDAHHD.mjs +115 -0
  10. package/dist/lib/browser/logs-A2VDAHHD.mjs.map +7 -0
  11. package/dist/lib/browser/meta.json +1 -1
  12. package/dist/lib/browser/metrics-6OSN54ZV.mjs +115 -0
  13. package/dist/lib/browser/metrics-6OSN54ZV.mjs.map +7 -0
  14. package/dist/lib/browser/traces-browser-6MRGAKFC.mjs +151 -0
  15. package/dist/lib/browser/traces-browser-6MRGAKFC.mjs.map +7 -0
  16. package/dist/lib/node-esm/chunk-HSLMI22Q.mjs +11 -0
  17. package/dist/lib/node-esm/chunk-SYPJQI4L.mjs +15 -0
  18. package/dist/lib/node-esm/chunk-SYPJQI4L.mjs.map +7 -0
  19. package/dist/lib/node-esm/index.mjs +962 -34
  20. package/dist/lib/node-esm/index.mjs.map +4 -4
  21. package/dist/lib/node-esm/log-processor-ZODHERST.mjs +39 -0
  22. package/dist/lib/node-esm/log-processor-ZODHERST.mjs.map +7 -0
  23. package/dist/lib/node-esm/logs-TA32MBMW.mjs +116 -0
  24. package/dist/lib/node-esm/logs-TA32MBMW.mjs.map +7 -0
  25. package/dist/lib/node-esm/meta.json +1 -1
  26. package/dist/lib/node-esm/metrics-C5IKPAWD.mjs +116 -0
  27. package/dist/lib/node-esm/metrics-C5IKPAWD.mjs.map +7 -0
  28. package/dist/lib/node-esm/traces-5LKHMVVG.mjs +122 -0
  29. package/dist/lib/node-esm/traces-5LKHMVVG.mjs.map +7 -0
  30. package/dist/types/src/cli-observability-secrets.json +3 -4
  31. package/dist/types/src/extensions/index.d.ts +3 -0
  32. package/dist/types/src/extensions/index.d.ts.map +1 -0
  33. package/dist/types/src/extensions/index.js +6 -0
  34. package/dist/types/src/extensions/index.js.map +1 -0
  35. package/dist/types/src/extensions/otel/extension.d.ts +23 -0
  36. package/dist/types/src/extensions/otel/extension.d.ts.map +1 -0
  37. package/dist/types/src/extensions/otel/extension.js +201 -0
  38. package/dist/types/src/extensions/otel/extension.js.map +1 -0
  39. package/dist/types/src/extensions/otel/index.d.ts +2 -0
  40. package/dist/types/src/extensions/otel/index.d.ts.map +1 -0
  41. package/dist/types/src/extensions/otel/index.js +5 -0
  42. package/dist/types/src/extensions/otel/index.js.map +1 -0
  43. package/dist/types/src/{otel → extensions/otel}/logs.d.ts +4 -3
  44. package/dist/types/src/extensions/otel/logs.d.ts.map +1 -0
  45. package/dist/types/src/extensions/otel/logs.js +107 -0
  46. package/dist/types/src/extensions/otel/logs.js.map +1 -0
  47. package/dist/types/src/{otel → extensions/otel}/metrics.d.ts +0 -1
  48. package/dist/types/src/extensions/otel/metrics.d.ts.map +1 -0
  49. package/dist/types/src/{otel → extensions/otel}/metrics.js +6 -12
  50. package/dist/types/src/extensions/otel/metrics.js.map +1 -0
  51. package/dist/types/src/{otel → extensions/otel}/otel.d.ts +3 -3
  52. package/dist/types/src/extensions/otel/otel.d.ts.map +1 -0
  53. package/dist/types/src/{otel → extensions/otel}/otel.js +1 -1
  54. package/dist/types/src/extensions/otel/otel.js.map +1 -0
  55. package/dist/types/src/extensions/otel/span-processors.d.ts +25 -0
  56. package/dist/types/src/extensions/otel/span-processors.d.ts.map +1 -0
  57. package/dist/types/src/extensions/otel/span-processors.js +41 -0
  58. package/dist/types/src/extensions/otel/span-processors.js.map +1 -0
  59. package/dist/types/src/extensions/otel/traces-browser.d.ts +25 -0
  60. package/dist/types/src/extensions/otel/traces-browser.d.ts.map +1 -0
  61. package/dist/types/src/extensions/otel/traces-browser.js +104 -0
  62. package/dist/types/src/extensions/otel/traces-browser.js.map +1 -0
  63. package/dist/types/src/extensions/otel/traces.d.ts +25 -0
  64. package/dist/types/src/extensions/otel/traces.d.ts.map +1 -0
  65. package/dist/types/src/extensions/otel/traces.js +87 -0
  66. package/dist/types/src/extensions/otel/traces.js.map +1 -0
  67. package/dist/types/src/extensions/posthog/extension.d.ts +22 -0
  68. package/dist/types/src/extensions/posthog/extension.d.ts.map +1 -0
  69. package/dist/types/src/extensions/posthog/extension.js +144 -0
  70. package/dist/types/src/extensions/posthog/extension.js.map +1 -0
  71. package/dist/types/src/extensions/posthog/index.d.ts +2 -0
  72. package/dist/types/src/extensions/posthog/index.d.ts.map +1 -0
  73. package/dist/types/src/extensions/posthog/index.js +5 -0
  74. package/dist/types/src/extensions/posthog/index.js.map +1 -0
  75. package/dist/types/src/extensions/posthog/log-processor.d.ts +3 -0
  76. package/dist/types/src/extensions/posthog/log-processor.d.ts.map +1 -0
  77. package/dist/types/src/extensions/posthog/log-processor.js +36 -0
  78. package/dist/types/src/extensions/posthog/log-processor.js.map +1 -0
  79. package/dist/types/src/extensions/posthog/log-processor.test.d.ts +2 -0
  80. package/dist/types/src/extensions/posthog/log-processor.test.d.ts.map +1 -0
  81. package/dist/types/src/extensions/posthog/log-processor.test.js +146 -0
  82. package/dist/types/src/extensions/posthog/log-processor.test.js.map +1 -0
  83. package/dist/types/src/extensions/stub.d.ts +3 -0
  84. package/dist/types/src/extensions/stub.d.ts.map +1 -0
  85. package/dist/types/src/extensions/stub.js +16 -0
  86. package/dist/types/src/extensions/stub.js.map +1 -0
  87. package/dist/types/src/index.d.ts +3 -2
  88. package/dist/types/src/index.d.ts.map +1 -1
  89. package/dist/types/src/index.js +4 -3
  90. package/dist/types/src/index.js.map +1 -1
  91. package/dist/types/src/observability-extension.d.ts +74 -0
  92. package/dist/types/src/observability-extension.d.ts.map +1 -0
  93. package/dist/types/src/observability-extension.js +5 -0
  94. package/dist/types/src/observability-extension.js.map +1 -0
  95. package/dist/types/src/observability.d.ts +32 -110
  96. package/dist/types/src/observability.d.ts.map +1 -1
  97. package/dist/types/src/observability.js +176 -455
  98. package/dist/types/src/observability.js.map +1 -1
  99. package/dist/types/src/observability.test.d.ts +2 -0
  100. package/dist/types/src/observability.test.d.ts.map +1 -0
  101. package/dist/types/src/observability.test.js +312 -0
  102. package/dist/types/src/observability.test.js.map +1 -0
  103. package/dist/types/src/providers/client-observability.d.ts +11 -0
  104. package/dist/types/src/providers/client-observability.d.ts.map +1 -0
  105. package/dist/types/src/providers/client-observability.js +202 -0
  106. package/dist/types/src/providers/client-observability.js.map +1 -0
  107. package/dist/types/src/providers/index.d.ts +4 -0
  108. package/dist/types/src/providers/index.d.ts.map +1 -0
  109. package/dist/types/src/providers/index.js +7 -0
  110. package/dist/types/src/providers/index.js.map +1 -0
  111. package/dist/types/src/providers/ip-data.d.ts +5 -0
  112. package/dist/types/src/providers/ip-data.d.ts.map +1 -0
  113. package/dist/types/src/providers/ip-data.js +57 -0
  114. package/dist/types/src/providers/ip-data.js.map +1 -0
  115. package/dist/types/src/providers/storage.d.ts +3 -0
  116. package/dist/types/src/providers/storage.d.ts.map +1 -0
  117. package/dist/types/src/providers/storage.js +19 -0
  118. package/dist/types/src/providers/storage.js.map +1 -0
  119. package/dist/types/src/storage/browser.d.ts +19 -0
  120. package/dist/types/src/storage/browser.d.ts.map +1 -0
  121. package/dist/types/src/storage/browser.js +69 -0
  122. package/dist/types/src/storage/browser.js.map +1 -0
  123. package/dist/types/src/storage/index.d.ts +2 -0
  124. package/dist/types/src/storage/index.d.ts.map +1 -0
  125. package/{src/segment/index.ts → dist/types/src/storage/index.js} +1 -2
  126. package/dist/types/src/storage/index.js.map +1 -0
  127. package/dist/types/src/storage/node.d.ts +26 -0
  128. package/dist/types/src/storage/node.d.ts.map +1 -0
  129. package/dist/types/src/storage/node.js +92 -0
  130. package/dist/types/src/storage/node.js.map +1 -0
  131. package/dist/types/src/storage/node.test.d.ts +2 -0
  132. package/dist/types/src/storage/node.test.d.ts.map +1 -0
  133. package/dist/types/src/storage/node.test.js +103 -0
  134. package/dist/types/src/storage/node.test.js.map +1 -0
  135. package/dist/types/tsconfig.tsbuildinfo +1 -1
  136. package/package.json +46 -63
  137. package/src/cli-observability-secrets.json +3 -4
  138. package/src/extensions/index.ts +6 -0
  139. package/src/extensions/otel/extension.ts +258 -0
  140. package/src/extensions/otel/index.ts +5 -0
  141. package/src/extensions/otel/logs.ts +137 -0
  142. package/src/{otel → extensions/otel}/metrics.ts +4 -21
  143. package/src/{otel → extensions/otel}/otel.ts +4 -4
  144. package/src/extensions/otel/span-processors.ts +45 -0
  145. package/src/extensions/otel/traces-browser.ts +139 -0
  146. package/src/extensions/otel/traces.ts +113 -0
  147. package/src/extensions/posthog/extension.ts +181 -0
  148. package/src/extensions/posthog/index.ts +5 -0
  149. package/src/extensions/posthog/log-processor.test.ts +186 -0
  150. package/src/extensions/posthog/log-processor.ts +43 -0
  151. package/src/extensions/stub.ts +19 -0
  152. package/src/index.ts +4 -3
  153. package/src/observability-extension.ts +94 -0
  154. package/src/observability.test.ts +531 -0
  155. package/src/observability.ts +236 -577
  156. package/src/providers/client-observability.ts +255 -0
  157. package/src/providers/index.ts +7 -0
  158. package/src/providers/ip-data.ts +91 -0
  159. package/src/providers/storage.ts +23 -0
  160. package/src/storage/browser.ts +71 -0
  161. package/src/{sentry → storage}/index.ts +0 -1
  162. package/src/storage/node.test.ts +129 -0
  163. package/src/{helpers/node-observability.ts → storage/node.ts} +41 -70
  164. package/src/vite-import-meta.d.ts +14 -0
  165. package/dist/lib/browser/chunk-G6EE7HFV.mjs +0 -147
  166. package/dist/lib/browser/chunk-G6EE7HFV.mjs.map +0 -7
  167. package/dist/lib/browser/chunk-JA5VJRKF.mjs +0 -164
  168. package/dist/lib/browser/chunk-JA5VJRKF.mjs.map +0 -7
  169. package/dist/lib/browser/chunk-KDP3SESE.mjs +0 -1
  170. package/dist/lib/browser/chunk-YQJELTRP.mjs +0 -996
  171. package/dist/lib/browser/chunk-YQJELTRP.mjs.map +0 -7
  172. package/dist/lib/browser/observability-HDE3I7TA.mjs +0 -10
  173. package/dist/lib/browser/otel-LHAFLNBQ.mjs +0 -277
  174. package/dist/lib/browser/otel-LHAFLNBQ.mjs.map +0 -7
  175. package/dist/lib/browser/segment/index.mjs +0 -11
  176. package/dist/lib/browser/segment/index.mjs.map +0 -7
  177. package/dist/lib/browser/sentry/index.mjs +0 -24
  178. package/dist/lib/browser/sentry/index.mjs.map +0 -7
  179. package/dist/lib/browser/sentry-log-processor-625AISXI.mjs +0 -146
  180. package/dist/lib/browser/sentry-log-processor-625AISXI.mjs.map +0 -7
  181. package/dist/lib/node/chunk-325GAGFA.cjs +0 -213
  182. package/dist/lib/node/chunk-325GAGFA.cjs.map +0 -7
  183. package/dist/lib/node/chunk-BZHVFSLF.cjs +0 -1025
  184. package/dist/lib/node/chunk-BZHVFSLF.cjs.map +0 -7
  185. package/dist/lib/node/chunk-GIYJMZEQ.cjs +0 -2
  186. package/dist/lib/node/chunk-GIYJMZEQ.cjs.map +0 -7
  187. package/dist/lib/node/chunk-MZ3PMDTP.cjs +0 -163
  188. package/dist/lib/node/chunk-MZ3PMDTP.cjs.map +0 -7
  189. package/dist/lib/node/index.cjs +0 -60
  190. package/dist/lib/node/index.cjs.map +0 -7
  191. package/dist/lib/node/meta.json +0 -1
  192. package/dist/lib/node/observability-E2NGRIEN.cjs +0 -32
  193. package/dist/lib/node/observability-E2NGRIEN.cjs.map +0 -7
  194. package/dist/lib/node/otel-VF5YNCR3.cjs +0 -278
  195. package/dist/lib/node/otel-VF5YNCR3.cjs.map +0 -7
  196. package/dist/lib/node/segment/index.cjs +0 -33
  197. package/dist/lib/node/segment/index.cjs.map +0 -7
  198. package/dist/lib/node/sentry/index.cjs +0 -46
  199. package/dist/lib/node/sentry/index.cjs.map +0 -7
  200. package/dist/lib/node/sentry-log-processor-CCV4RL7N.cjs +0 -164
  201. package/dist/lib/node/sentry-log-processor-CCV4RL7N.cjs.map +0 -7
  202. package/dist/lib/node-esm/chunk-AZMSBUWR.mjs +0 -202
  203. package/dist/lib/node-esm/chunk-AZMSBUWR.mjs.map +0 -7
  204. package/dist/lib/node-esm/chunk-H7Y2DDUN.mjs +0 -135
  205. package/dist/lib/node-esm/chunk-H7Y2DDUN.mjs.map +0 -7
  206. package/dist/lib/node-esm/chunk-M7QJLFGR.mjs +0 -997
  207. package/dist/lib/node-esm/chunk-M7QJLFGR.mjs.map +0 -7
  208. package/dist/lib/node-esm/chunk-YJ4KVBWC.mjs +0 -2
  209. package/dist/lib/node-esm/chunk-YJ4KVBWC.mjs.map +0 -7
  210. package/dist/lib/node-esm/observability-7BTI46NM.mjs +0 -11
  211. package/dist/lib/node-esm/observability-7BTI46NM.mjs.map +0 -7
  212. package/dist/lib/node-esm/otel-AF5TSABC.mjs +0 -260
  213. package/dist/lib/node-esm/otel-AF5TSABC.mjs.map +0 -7
  214. package/dist/lib/node-esm/segment/index.mjs +0 -12
  215. package/dist/lib/node-esm/segment/index.mjs.map +0 -7
  216. package/dist/lib/node-esm/sentry/index.mjs +0 -25
  217. package/dist/lib/node-esm/sentry/index.mjs.map +0 -7
  218. package/dist/lib/node-esm/sentry-log-processor-HPUPCMRG.mjs +0 -147
  219. package/dist/lib/node-esm/sentry-log-processor-HPUPCMRG.mjs.map +0 -7
  220. package/dist/types/src/helpers/browser-observability.d.ts +0 -17
  221. package/dist/types/src/helpers/browser-observability.d.ts.map +0 -1
  222. package/dist/types/src/helpers/browser-observability.js +0 -140
  223. package/dist/types/src/helpers/browser-observability.js.map +0 -1
  224. package/dist/types/src/helpers/common.d.ts +0 -12
  225. package/dist/types/src/helpers/common.d.ts.map +0 -1
  226. package/dist/types/src/helpers/common.js +0 -23
  227. package/dist/types/src/helpers/common.js.map +0 -1
  228. package/dist/types/src/helpers/index.d.ts +0 -6
  229. package/dist/types/src/helpers/index.d.ts.map +0 -1
  230. package/dist/types/src/helpers/index.js +0 -9
  231. package/dist/types/src/helpers/index.js.map +0 -1
  232. package/dist/types/src/helpers/map-spaces.d.ts +0 -18
  233. package/dist/types/src/helpers/map-spaces.d.ts.map +0 -1
  234. package/dist/types/src/helpers/map-spaces.js +0 -37
  235. package/dist/types/src/helpers/map-spaces.js.map +0 -1
  236. package/dist/types/src/helpers/node-observability.d.ts +0 -24
  237. package/dist/types/src/helpers/node-observability.d.ts.map +0 -1
  238. package/dist/types/src/helpers/node-observability.js +0 -101
  239. package/dist/types/src/helpers/node-observability.js.map +0 -1
  240. package/dist/types/src/helpers/setup-telemetry-listeners.d.ts +0 -4
  241. package/dist/types/src/helpers/setup-telemetry-listeners.d.ts.map +0 -1
  242. package/dist/types/src/helpers/setup-telemetry-listeners.js +0 -97
  243. package/dist/types/src/helpers/setup-telemetry-listeners.js.map +0 -1
  244. package/dist/types/src/otel/index.d.ts +0 -5
  245. package/dist/types/src/otel/index.d.ts.map +0 -1
  246. package/dist/types/src/otel/index.js +0 -8
  247. package/dist/types/src/otel/index.js.map +0 -1
  248. package/dist/types/src/otel/logs.d.ts.map +0 -1
  249. package/dist/types/src/otel/logs.js +0 -71
  250. package/dist/types/src/otel/logs.js.map +0 -1
  251. package/dist/types/src/otel/metrics.d.ts.map +0 -1
  252. package/dist/types/src/otel/metrics.js.map +0 -1
  253. package/dist/types/src/otel/otel.d.ts.map +0 -1
  254. package/dist/types/src/otel/otel.js.map +0 -1
  255. package/dist/types/src/otel/traces-browser.d.ts +0 -8
  256. package/dist/types/src/otel/traces-browser.d.ts.map +0 -1
  257. package/dist/types/src/otel/traces-browser.js +0 -47
  258. package/dist/types/src/otel/traces-browser.js.map +0 -1
  259. package/dist/types/src/otel/traces.d.ts +0 -8
  260. package/dist/types/src/otel/traces.d.ts.map +0 -1
  261. package/dist/types/src/otel/traces.js +0 -40
  262. package/dist/types/src/otel/traces.js.map +0 -1
  263. package/dist/types/src/segment/base.d.ts +0 -15
  264. package/dist/types/src/segment/base.d.ts.map +0 -1
  265. package/dist/types/src/segment/base.js +0 -50
  266. package/dist/types/src/segment/base.js.map +0 -1
  267. package/dist/types/src/segment/browser.d.ts +0 -15
  268. package/dist/types/src/segment/browser.d.ts.map +0 -1
  269. package/dist/types/src/segment/browser.js +0 -67
  270. package/dist/types/src/segment/browser.js.map +0 -1
  271. package/dist/types/src/segment/index.d.ts +0 -3
  272. package/dist/types/src/segment/index.d.ts.map +0 -1
  273. package/dist/types/src/segment/index.js +0 -6
  274. package/dist/types/src/segment/index.js.map +0 -1
  275. package/dist/types/src/segment/node.d.ts +0 -16
  276. package/dist/types/src/segment/node.d.ts.map +0 -1
  277. package/dist/types/src/segment/node.js +0 -83
  278. package/dist/types/src/segment/node.js.map +0 -1
  279. package/dist/types/src/segment/types.d.ts +0 -52
  280. package/dist/types/src/segment/types.d.ts.map +0 -1
  281. package/dist/types/src/segment/types.js +0 -18
  282. package/dist/types/src/segment/types.js.map +0 -1
  283. package/dist/types/src/sentry/browser.d.ts +0 -32
  284. package/dist/types/src/sentry/browser.d.ts.map +0 -1
  285. package/dist/types/src/sentry/browser.js +0 -112
  286. package/dist/types/src/sentry/browser.js.map +0 -1
  287. package/dist/types/src/sentry/index.d.ts +0 -3
  288. package/dist/types/src/sentry/index.d.ts.map +0 -1
  289. package/dist/types/src/sentry/index.js +0 -6
  290. package/dist/types/src/sentry/index.js.map +0 -1
  291. package/dist/types/src/sentry/node.d.ts +0 -32
  292. package/dist/types/src/sentry/node.d.ts.map +0 -1
  293. package/dist/types/src/sentry/node.js +0 -111
  294. package/dist/types/src/sentry/node.js.map +0 -1
  295. package/dist/types/src/sentry/node.node.test.d.ts +0 -2
  296. package/dist/types/src/sentry/node.node.test.d.ts.map +0 -1
  297. package/dist/types/src/sentry/node.node.test.js +0 -34
  298. package/dist/types/src/sentry/node.node.test.js.map +0 -1
  299. package/dist/types/src/sentry/sentry-log-processor.d.ts +0 -9
  300. package/dist/types/src/sentry/sentry-log-processor.d.ts.map +0 -1
  301. package/dist/types/src/sentry/sentry-log-processor.js +0 -149
  302. package/dist/types/src/sentry/sentry-log-processor.js.map +0 -1
  303. package/dist/types/src/sentry/sentry.node.test.d.ts +0 -2
  304. package/dist/types/src/sentry/sentry.node.test.d.ts.map +0 -1
  305. package/dist/types/src/sentry/sentry.node.test.js +0 -28
  306. package/dist/types/src/sentry/sentry.node.test.js.map +0 -1
  307. package/dist/types/src/sentry/types.d.ts +0 -18
  308. package/dist/types/src/sentry/types.d.ts.map +0 -1
  309. package/dist/types/src/sentry/types.js +0 -4
  310. package/dist/types/src/sentry/types.js.map +0 -1
  311. package/dist/types/src/testing/index.d.ts +0 -2
  312. package/dist/types/src/testing/index.d.ts.map +0 -1
  313. package/dist/types/src/testing/index.js +0 -5
  314. package/dist/types/src/testing/index.js.map +0 -1
  315. package/dist/types/src/testing/testkit/browser.d.ts +0 -2
  316. package/dist/types/src/testing/testkit/browser.d.ts.map +0 -1
  317. package/dist/types/src/testing/testkit/browser.js +0 -7
  318. package/dist/types/src/testing/testkit/browser.js.map +0 -1
  319. package/dist/types/src/testing/testkit/index.d.ts +0 -2
  320. package/dist/types/src/testing/testkit/index.d.ts.map +0 -1
  321. package/dist/types/src/testing/testkit/index.js +0 -6
  322. package/dist/types/src/testing/testkit/index.js.map +0 -1
  323. package/src/helpers/browser-observability.ts +0 -177
  324. package/src/helpers/common.ts +0 -38
  325. package/src/helpers/index.ts +0 -9
  326. package/src/helpers/map-spaces.ts +0 -48
  327. package/src/helpers/setup-telemetry-listeners.ts +0 -108
  328. package/src/otel/index.ts +0 -8
  329. package/src/otel/logs.ts +0 -100
  330. package/src/otel/traces-browser.ts +0 -59
  331. package/src/otel/traces.ts +0 -57
  332. package/src/segment/base.ts +0 -69
  333. package/src/segment/browser.ts +0 -68
  334. package/src/segment/node.ts +0 -94
  335. package/src/segment/types.ts +0 -57
  336. package/src/sentry/browser.ts +0 -133
  337. package/src/sentry/node.node.test.ts +0 -39
  338. package/src/sentry/node.ts +0 -126
  339. package/src/sentry/sentry-log-processor.ts +0 -166
  340. package/src/sentry/sentry.node.test.ts +0 -34
  341. package/src/sentry/types.ts +0 -22
  342. package/src/testing/index.ts +0 -5
  343. package/src/testing/testkit/browser.ts +0 -8
  344. package/src/testing/testkit/index.ts +0 -7
  345. package/src/testing/testkit/shims.d.ts +0 -5
  346. /package/dist/lib/browser/{chunk-KDP3SESE.mjs.map → chunk-J5LGTIGS.mjs.map} +0 -0
  347. /package/dist/lib/{browser/observability-HDE3I7TA.mjs.map → node-esm/chunk-HSLMI22Q.mjs.map} +0 -0
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
- "sources": [],
4
- "sourcesContent": [],
5
- "mappings": "",
6
- "names": []
3
+ "sources": ["../../../src/observability.ts", "../../../src/storage/browser.ts", "../../../src/observability-extension.ts", "../../../src/extensions/otel/index.ts", "../../../src/extensions/otel/extension.ts", "../../../src/cli-observability-secrets.json", "../../../src/extensions/stub.ts", "../../../src/extensions/posthog/index.ts", "../../../src/extensions/posthog/extension.ts", "../../../src/providers/index.ts", "../../../src/providers/client-observability.ts", "../../../src/providers/ip-data.ts", "../../../src/providers/storage.ts"],
4
+ "sourcesContent": ["//\n// Copyright 2025 DXOS.org\n//\n\nimport * as Array from 'effect/Array';\nimport * as Effect from 'effect/Effect';\nimport * as Function from 'effect/Function';\n\nimport { type CleanupFn, SubscriptionList } from '@dxos/async';\nimport { invariant } from '@dxos/invariant';\nimport { log } from '@dxos/log';\n\nimport {\n type Attributes,\n type Errors,\n type Events,\n type Extension,\n type ExtensionApi,\n type Feedback,\n type Kind,\n type Metrics,\n} from './observability-extension';\n\nexport * from './storage';\n\n// TODO(wittjosiah): Figure out how to handle when telemetry is disabled.\n// In theory the setting should be both persisted and synchronized.\n// Initialize probably should still run for the cases where data is emitted manually (e.g., feedback).\n\n/**\n * Provider of observability data.\n */\nexport type DataProvider = (observability: Observability) => Effect.Effect<CleanupFn | void, Error>;\n\n/**\n * Extensible observability provider.\n */\n// TODO(wittjosiah): Add pipe method.\nexport interface Observability {\n initialize(): Effect.Effect<void>;\n close(): Effect.Effect<void>;\n enable(): Effect.Effect<void>;\n disable(): Effect.Effect<void>;\n flush(): Effect.Effect<void>;\n addDataProvider(dataProvider: DataProvider): Effect.Effect<void, Error>;\n identify(distinctId: string, attributes?: Attributes, setOnceAttributes?: Attributes): void;\n alias(distinctId: string, previousId?: string): void;\n setTags(tags: Attributes, kind?: Kind): void;\n enabled: boolean;\n errors: Errors;\n events: Events;\n feedback: Feedback;\n /** True if at least one extension of the given kind reports as available. */\n isAvailable(kind: Kind): Effect.Effect<boolean>;\n metrics: Metrics;\n}\n\nclass ObservabilityImpl implements Observability {\n private _initialized = false;\n private readonly _extensions: Extension[] = [];\n private readonly _dataProviders: DataProvider[] = [];\n private readonly _subscriptions = new SubscriptionList();\n\n initialize(): Effect.Effect<void> {\n if (this._initialized) {\n return Effect.succeed(undefined);\n }\n\n const initializedExtensions: Extension[] = [];\n\n return Effect.gen(this, function* () {\n for (const extension of this._extensions) {\n if (extension.initialize) {\n yield* extension.initialize();\n }\n initializedExtensions.push(extension);\n }\n\n const cleanups = yield* Effect.all(this._dataProviders.map((provider) => provider(this)));\n this._subscriptions.add(...cleanups.filter((cleanup) => cleanup !== undefined));\n this._initialized = true;\n }).pipe(\n Effect.catchAll((error) =>\n Effect.gen(this, function* () {\n log.catch(error);\n // Roll back already-initialized extensions.\n for (const extension of initializedExtensions) {\n if (extension.close) {\n yield* extension.close().pipe(Effect.catchAll(() => Effect.succeed(undefined)));\n }\n }\n this._subscriptions.clear();\n }),\n ),\n );\n }\n\n close(): Effect.Effect<void> {\n return Effect.gen(this, function* () {\n this._subscriptions.clear();\n this._dataProviders.length = 0;\n for (const extension of this._extensions) {\n if (extension.close) {\n yield* extension.close();\n }\n }\n this._initialized = false;\n });\n }\n\n enable(): Effect.Effect<void> {\n return Effect.gen(this, function* () {\n for (const extension of this._extensions) {\n if (extension.enable) {\n yield* extension.enable();\n }\n }\n });\n }\n\n disable(): Effect.Effect<void> {\n return Effect.gen(this, function* () {\n for (const extension of this._extensions) {\n if (extension.disable) {\n yield* extension.disable();\n }\n }\n });\n }\n\n flush(): Effect.Effect<void> {\n return Effect.gen(this, function* () {\n for (const extension of this._extensions) {\n if (extension.flush) {\n yield* extension.flush();\n }\n }\n });\n }\n\n _addExtension(extension: Extension): void {\n invariant(!this._initialized, 'Observability is already initialized');\n this._extensions.push(extension);\n }\n\n _addDataProvider(dataProvider: DataProvider): void {\n invariant(!this._initialized, 'Observability is already initialized');\n this._dataProviders.push(dataProvider);\n }\n\n /**\n * Adds a data provider and initializes it.\n */\n addDataProvider(dataProvider: DataProvider): Effect.Effect<void, Error> {\n return Effect.gen(this, function* () {\n this._dataProviders.push(dataProvider);\n const cleanup = yield* dataProvider(this);\n if (cleanup) {\n this._subscriptions.add(cleanup);\n }\n });\n }\n\n identify(distinctId: string, attributes?: Attributes, setOnceAttributes?: Attributes): void {\n for (const extension of this._extensions) {\n extension.identify?.(distinctId, attributes, setOnceAttributes);\n }\n }\n\n alias(distinctId: string, previousId?: string): void {\n for (const extension of this._extensions) {\n extension.alias?.(distinctId, previousId);\n }\n }\n\n setTags(tags: Attributes, kind?: Kind): void {\n for (const extension of this._extensions) {\n if (kind && !extension.apis.some((api) => api.kind === kind)) {\n continue;\n }\n\n const processedTags = Object.fromEntries(\n Object.entries(tags)\n .filter((entry): entry is [string, string | number | boolean] => entry[1] !== undefined)\n .map(([key, value]) => [key, value.toString()]),\n );\n extension.setTags?.(processedTags);\n }\n }\n\n get enabled(): boolean {\n return this._extensions.every((extension) => extension.enabled);\n }\n\n get errors(): Errors {\n return {\n captureException: (error, attributes) => {\n for (const extension of this._getExtensions('errors')) {\n extension.captureException(error, attributes);\n }\n },\n };\n }\n\n get events(): Events {\n return {\n captureEvent: (event, attributes) => {\n for (const extension of this._getExtensions('events')) {\n extension.captureEvent(event, attributes);\n }\n },\n };\n }\n\n get feedback(): Feedback {\n return {\n captureUserFeedback: (form) => {\n for (const extension of this._getExtensions('feedback')) {\n extension.captureUserFeedback(form);\n }\n },\n };\n }\n\n isAvailable(kind: Kind): Effect.Effect<boolean> {\n const apis = this._getExtensions(kind);\n if (apis.length === 0) {\n return Effect.succeed(false);\n }\n return Effect.gen(this, function* () {\n for (const api of apis) {\n const available = yield* api.isAvailable();\n if (available) {\n return true;\n }\n }\n return false;\n });\n }\n\n get metrics(): Metrics {\n return {\n gauge: (name, value, attributes) => {\n for (const extension of this._getExtensions('metrics')) {\n extension.gauge(name, value, attributes);\n }\n },\n increment: (name, value, attributes) => {\n for (const extension of this._getExtensions('metrics')) {\n extension.increment(name, value, attributes);\n }\n },\n distribution: (name, value, attributes) => {\n for (const extension of this._getExtensions('metrics')) {\n extension.distribution(name, value, attributes);\n }\n },\n };\n }\n\n private _getExtensions<T extends Kind>(kind: T): Extract<ExtensionApi, { kind: T }>[] {\n return Function.pipe(\n this._extensions,\n Array.flatMap((extension) => extension.apis),\n Array.filter((api): api is Extract<ExtensionApi, { kind: T }> => api.kind === kind),\n );\n }\n}\n\nexport const make = (): Effect.Effect<Observability> => Effect.succeed(new ObservabilityImpl());\n\nexport const addExtension = (_extension: Effect.Effect<Extension>) =>\n Effect.fn(function* (_observability: Effect.Effect<Observability>) {\n const observability = yield* _observability;\n const extension = yield* _extension;\n invariant('_addExtension' in observability && typeof observability._addExtension === 'function');\n observability._addExtension(extension);\n return observability;\n });\n\nexport const addDataProvider = (dataProvider: DataProvider) =>\n Effect.fn(function* (_observability: Effect.Effect<Observability>) {\n const observability = yield* _observability;\n invariant('_addDataProvider' in observability && typeof observability._addDataProvider === 'function');\n observability._addDataProvider(dataProvider);\n return observability;\n });\n\nexport const initialize = Effect.fn(function* (_observability: Effect.Effect<Observability>) {\n const observability = yield* _observability;\n yield* observability.initialize();\n return observability;\n});\n", "//\n// Copyright 2022 DXOS.org\n//\n\n// NOTE: localStorage is not available in web workers.\nimport * as localForage from 'localforage';\n\nimport { log } from '@dxos/log';\nimport { compositeKey } from '@dxos/util';\n\nconst OBSERVABILITY_DISABLED_KEY = 'observability-disabled';\nconst OBSERVABILITY_GROUP_KEY = 'observability-group';\n\n/** No-op in browser contexts. */\nexport const showObservabilityBanner = () => {\n log.warn('showObservabilityBanner is not supported in browser contexts.');\n};\n\n/**\n * @param namespace - localForage key prefix used to scope the observability state in browser storage.\n */\nexport const isObservabilityDisabled = async (namespace: string): Promise<boolean> => {\n try {\n return (await localForage.getItem(compositeKey(namespace, OBSERVABILITY_DISABLED_KEY))) === 'true';\n } catch (err) {\n log.catch('Failed to check if observability is disabled, assuming it is', err);\n return true;\n }\n};\n\n/**\n * @param namespace - localForage key prefix used to scope the observability state in browser storage.\n */\nexport const storeObservabilityDisabled = async (namespace: string, value: boolean) => {\n try {\n await localForage.setItem(compositeKey(namespace, OBSERVABILITY_DISABLED_KEY), String(value));\n } catch (err) {\n log.catch('Failed to store observability disabled', err);\n }\n // Mirror to localStorage so the synchronous opt-out check in the OTEL extension picks it up\n // without waiting for an async IndexedDB read.\n try {\n if (typeof localStorage !== 'undefined') {\n localStorage.setItem(`${namespace}/${OBSERVABILITY_DISABLED_KEY}`, String(value));\n }\n } catch {\n // localStorage not available (e.g., in workers).\n }\n};\n\n/**\n * @param namespace - localForage key prefix used to scope the observability state in browser storage.\n */\nexport const getObservabilityGroup = async (namespace: string): Promise<string | undefined> => {\n try {\n return (await localForage.getItem(compositeKey(namespace, OBSERVABILITY_GROUP_KEY))) ?? undefined;\n } catch (err) {\n log.catch('Failed to get observability group', err);\n }\n};\n\n/**\n * @param namespace - localForage key prefix used to scope the observability state in browser storage.\n */\nexport const storeObservabilityGroup = async (namespace: string, value: string) => {\n try {\n await localForage.setItem(compositeKey(namespace, OBSERVABILITY_GROUP_KEY), value);\n } catch (err) {\n log.catch('Failed to store observability group', err);\n }\n};\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport type * as Effect from 'effect/Effect';\n\nexport * from './extensions';\n\n/**\n * Kind of observability extension.\n *\n * - errors: Error tracking (e.g., PostHog)\n * - events: Product usage event tracking (e.g., PostHog)\n * - feedback: User feedback submission (e.g., PostHog)\n * - logs: Structured logging (e.g., OTEL)\n * - metrics: Metric data (e.g., OTEL)\n * - traces: Distributed tracing (e.g., OTEL)\n */\nexport type Kind = 'errors' | 'events' | 'feedback' | 'logs' | 'metrics' | 'traces';\n\n/**\n * Base for every extension API variant. All kinds implement availability the same way.\n */\nexport type ExtensionApiBase<K extends Kind = Kind> = {\n kind: K;\n isAvailable(): Effect.Effect<boolean>;\n};\n\n/**\n * Metrics extension API (kind-specific methods only).\n */\nexport type Metrics = {\n gauge(name: string, value: number, tags?: Attributes): void;\n increment(name: string, value?: number, tags?: Attributes): void;\n distribution(name: string, value: number, tags?: Attributes): void;\n};\n\n/**\n * Errors extension API (kind-specific methods only).\n */\nexport type Errors = {\n captureException(error: Error, attributes?: Attributes): void;\n};\n\n/**\n * Events extension API (kind-specific methods only).\n */\nexport type Events = {\n captureEvent(event: string, attributes?: Attributes): void;\n};\n\n/**\n * Feedback extension API (kind-specific methods only).\n */\nexport type Feedback = {\n captureUserFeedback(form: FeedbackForm): void;\n};\n\nexport type ExtensionApi =\n | (ExtensionApiBase<'errors'> & Errors)\n | (ExtensionApiBase<'events'> & Events)\n | (ExtensionApiBase<'feedback'> & Feedback)\n // TODO(wittjosiah): Direct logs api?\n | ExtensionApiBase<'logs'>\n | (ExtensionApiBase<'metrics'> & Metrics)\n // TODO(wittjosiah): Direct traces api?\n | ExtensionApiBase<'traces'>;\n\n/**\n * Feedback form to be captured by the feedback extension.\n */\n// TODO(wittjosiah): Support more form fields (e.g., PostHog custom surveys).\nexport type FeedbackForm = { message: string; includeLogs?: boolean };\n\n/**\n * Attributes to be attached to observability events.\n */\nexport type Attributes = Record<string, string | number | boolean | undefined>;\n\n/**\n * Implementation of an observability extension API.\n */\nexport type Extension = {\n initialize?(): Effect.Effect<void, Error>;\n close?(): Effect.Effect<void>;\n enable?(): Effect.Effect<void>;\n disable?(): Effect.Effect<void>;\n flush?(): Effect.Effect<void>;\n identify?(distinctId: string, attributes?: Attributes, setOnceAttributes?: Attributes): void;\n alias?(distinctId: string, previousId?: string): void;\n setTags?(tags: Record<string, string>): void;\n enabled: boolean;\n apis: ExtensionApi[];\n};\n", "//\n// Copyright 2024 DXOS.org\n//\n\nexport * from './extension';\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport { defaultResource, resourceFromAttributes } from '@opentelemetry/resources';\nimport { ATTR_SERVICE_NAME, ATTR_SERVICE_VERSION } from '@opentelemetry/semantic-conventions';\nimport * as Effect from 'effect/Effect';\nimport * as Match from 'effect/Match';\nimport * as Option from 'effect/Option';\nimport * as Ref from 'effect/Ref';\n\nimport { type Config, resolveTelemetryTag } from '@dxos/config';\nimport { LogLevel, log } from '@dxos/log';\nimport { isNode, isNonNullable } from '@dxos/util';\n\nimport buildSecrets from '../../cli-observability-secrets.json';\nimport { type Extension, type ExtensionApi } from '../../observability-extension';\nimport { isObservabilityDisabled, storeObservabilityDisabled } from '../../storage';\nimport { stubExtension } from '../stub';\n\nexport type ExtensionsOptions = {\n /** For the OTEL, the name of the entity for which signals (metrics or trace) are collected. */\n serviceName: string;\n /** For the OTEL, the version of the entity for which signals (metrics or trace) are collected. */\n serviceVersion: string;\n /** For the OTEL, the environment of the entity for which signals (metrics or trace) are collected. */\n environment: string;\n config: Config;\n endpoint?: string;\n headers?: Record<string, string>;\n logs?: boolean;\n /** Minimum log level to export. Defaults to INFO (i.e. info, warn, error). */\n logLevel?: LogLevel;\n metrics?: boolean;\n traces?: boolean;\n};\n\n/** Create an OTEL-backed observability extension for logs, metrics, and/or traces. */\nexport const extensions: (options: ExtensionsOptions) => Effect.Effect<Extension> = Effect.fn(function* ({\n serviceName,\n serviceVersion,\n environment,\n config,\n endpoint: _endpoint,\n headers: _headers,\n // TODO(wittjosiah): Logging integration.\n // - logger should run even if observability is disabled\n // - logs should be cached locally in a circular buffer\n // - logs should be flushed to the server if user opts to include them in a bug report\n logs: logsEnabled = false,\n logLevel = LogLevel.INFO,\n metrics: metricsEnabled = false,\n traces: tracesEnabled = false,\n}) {\n const { OtelLogs } = yield* Effect.promise(() => import('./logs'));\n const { OtelMetrics } = yield* Effect.promise(() => import('./metrics'));\n const { OtelTraces } = yield* Effect.promise(() => import('./traces'));\n\n const cachedDisabled = yield* Effect.promise(() => isObservabilityDisabled(serviceName));\n const disabled = cachedDisabled || isObservabilityDisabledSync(serviceName);\n const enabledRef = yield* Ref.make(!disabled);\n const tags = new Map<string, string>();\n\n const endpoint = isNode()\n ? (process.env.DX_OTEL_ENDPOINT ?? _endpoint ?? buildSecrets.OTEL_ENDPOINT)\n : config.values.runtime?.app?.env?.DX_OTEL_ENDPOINT;\n const headers =\n _headers ??\n Match.value(isNode()).pipe(\n Match.when(true, () => Option.fromNullable(process.env.DX_OTEL_HEADERS ?? buildSecrets.OTEL_HEADERS)),\n Match.when(false, () => Option.fromNullable(config.values.runtime?.app?.env?.DX_OTEL_HEADERS)),\n Match.exhaustive,\n Option.map((raw) => parseHeaders(raw)),\n Option.getOrElse(() => undefined),\n );\n\n if (!endpoint || !headers) {\n log.info('Missing OTEL_ENDPOINT or OTEL_HEADERS');\n return stubExtension;\n }\n\n // Matches edge's `ctx.tag` span attribute (stamped by the edge log middleware\n // when it reads the `X-DXOS-Client-Tag` header, see\n // /edge/packages/services/edge/src/log-middleware.ts).\n //\n // Stamped in TWO places:\n // 1. Resource attribute — so logs and metrics emitted from this extension\n // also carry it, and for zero per-span cost.\n // 2. Span attribute via `tags` — because edge puts `ctx.tag` in the span-\n // attribute context (not resource), and SigNoz indexes the two contexts\n // separately. Stamping it on span attributes here keeps a single\n // `ctx.tag = <value>` filter matching spans from both tiers in SigNoz\n // without requiring qualified `attribute.ctx.tag`/`resource.ctx.tag` syntax.\n const clientTag = resolveTelemetryTag(config);\n if (clientTag) {\n tags.set('ctx.tag', clientTag);\n }\n\n const resource = defaultResource().merge(\n resourceFromAttributes({\n [ATTR_SERVICE_NAME]: serviceName,\n [ATTR_SERVICE_VERSION]: serviceVersion,\n 'session.id': crypto.randomUUID(),\n 'deployment.environment': environment,\n 'dxos.process.type': detectProcessType(),\n ...(clientTag ? { 'ctx.tag': clientTag } : {}),\n }),\n );\n\n const logs = logsEnabled\n ? new OtelLogs({\n endpoint,\n headers,\n resource,\n getTags: () => Object.fromEntries(tags),\n logLevel,\n })\n : undefined;\n\n const metrics = metricsEnabled\n ? new OtelMetrics({\n endpoint,\n headers,\n resource,\n getTags: () => Object.fromEntries(tags),\n })\n : undefined;\n\n const traces = tracesEnabled\n ? new OtelTraces({\n endpoint,\n headers,\n resource,\n getTags: () => Object.fromEntries(tags),\n })\n : undefined;\n\n const extension: Extension = {\n initialize: () =>\n Effect.sync(() => {\n if (disabled) {\n return;\n }\n\n if (logs) {\n log.runtimeConfig.processors.push(logs.logProcessor);\n }\n if (traces) {\n traces.start();\n }\n }),\n enable: Effect.fn(function* () {\n yield* Effect.promise(() => storeObservabilityDisabled(serviceName, false));\n yield* Ref.update(enabledRef, () => true);\n }),\n disable: Effect.fn(function* () {\n yield* Effect.promise(() => storeObservabilityDisabled(serviceName, true));\n yield* Ref.update(enabledRef, () => false);\n }),\n close: () =>\n Effect.promise(async () => {\n // Run logs/metrics close concurrently and swallow their failures so the\n // tracer provider shutdown below ALWAYS runs. Without this, a rejection\n // from logs or metrics would drop the tracer provider's BatchSpanProcessor\n // queue on process exit, manifesting as \"Missing Span\" in SigNoz for any\n // already-exported children.\n const results = await Promise.allSettled([logs?.close(), metrics?.close()]);\n for (const result of results) {\n if (result.status === 'rejected') {\n log.catch(result.reason);\n }\n }\n // Critical: shut down the tracer provider so BatchSpanProcessor drains its\n // queue. Otherwise spans enqueued in the last 5s (close/teardown spans)\n // are dropped on process exit.\n await traces?.close();\n }),\n flush: () =>\n Effect.promise(async () => {\n const results = await Promise.allSettled([logs?.flush(), metrics?.flush()]);\n for (const result of results) {\n if (result.status === 'rejected') {\n log.catch(result.reason);\n }\n }\n await traces?.flush();\n }),\n setTags: (incomingTags) => {\n for (const [key, value] of Object.entries(incomingTags)) {\n tags.set(key, value);\n }\n },\n get enabled() {\n return Ref.get(enabledRef).pipe(Effect.runSync);\n },\n apis: [\n { kind: 'logs', isAvailable: () => Effect.succeed(!!logs) } satisfies ExtensionApi,\n metrics\n ? ({\n kind: 'metrics',\n isAvailable: () => Effect.succeed(true),\n gauge: (name, value, tags) => metrics.gauge(name, value, tags),\n increment: (name, value, tags) => metrics.increment(name, value, tags),\n distribution: (name, value, tags) => metrics.distribution(name, value, tags),\n } satisfies ExtensionApi)\n : undefined,\n traces ? ({ kind: 'traces', isAvailable: () => Effect.succeed(true) } satisfies ExtensionApi) : undefined,\n ].filter(isNonNullable),\n };\n\n return extension;\n});\n\n/**\n * Synchronous best-effort check for observability opt-out.\n * Prevents telemetry from being emitted before the async storage check completes.\n */\nconst isObservabilityDisabledSync = (serviceName: string): boolean => {\n if (isNode()) {\n return process.env.DX_DISABLE_OBSERVABILITY === 'true';\n }\n try {\n if (typeof localStorage !== 'undefined') {\n return localStorage.getItem(`${serviceName}/observability-disabled`) === 'true';\n }\n } catch {\n // localStorage not available (e.g., in workers).\n }\n return false;\n};\n\n/** Best-effort detection of the JavaScript execution context type. */\nconst detectProcessType = (): string => {\n if (isNode()) {\n return 'node';\n }\n if (typeof window !== 'undefined') {\n return 'browser';\n }\n if (typeof (globalThis as any).ServiceWorkerGlobalScope !== 'undefined') {\n return 'service-worker';\n }\n if (typeof (globalThis as any).SharedWorkerGlobalScope !== 'undefined') {\n return 'shared-worker';\n }\n return 'dedicated-worker';\n};\n\nconst parseHeaders = (unparsedHeaders: string): Record<string, string> => {\n return unparsedHeaders.split(';').reduce((acc: Record<string, string>, header) => {\n const [key, ...rest] = header.split(':');\n if (key && rest.length > 0) {\n acc[key.trim().toLowerCase()] = rest.join(':').trim();\n }\n\n return acc;\n }, {});\n};\n", "{\n \"POSTHOG_API_KEY\": null,\n \"IPDATA_API_KEY\": \"73dfdecdf979c18f07d50cf841bbdd9e589f237256326ac8cca23786\",\n \"OTEL_ENDPOINT\": \"/api/otel\",\n \"OTEL_HEADERS\": null\n}", "//\n// Copyright 2025 DXOS.org\n//\n\nimport * as Effect from 'effect/Effect';\n\nimport { type Extension } from '../observability-extension';\n\nexport const stubExtension: Extension = {\n initialize: () => Effect.succeed(undefined),\n enable: () => Effect.succeed(undefined),\n disable: () => Effect.succeed(undefined),\n flush: () => Effect.succeed(undefined),\n setTags: () => undefined,\n get enabled() {\n return true;\n },\n apis: [],\n};\n", "//\n// Copyright 2025 DXOS.org\n//\n\nexport * from './extension';\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport * as Effect from 'effect/Effect';\nimport { type PostHogConfig } from 'posthog-js';\n\nimport { type Config } from '@dxos/config';\nimport { log } from '@dxos/log';\nimport { type IdbLogStore } from '@dxos/log-store-idb';\n\nimport { type Extension } from '../../observability-extension';\nimport { stubExtension } from '../stub';\n\nexport type ExtensionsOptions = {\n config: Config;\n /** Release identifier, e.g. `composer@0.8.3`. */\n release?: string;\n /** Deployment environment, e.g. `production` or `staging`. */\n environment?: string;\n posthog?: Partial<PostHogConfig>;\n /**\n * Shared persistent log store for debug log dumps.\n * The owning app is expected to register `logStore.processor` with `log` itself —\n * this extension only consumes the buffered logs (via `export()`).\n */\n logStore?: IdbLogStore;\n};\n\n/** Upload serialized logs to the feedback-logs endpoint. Returns the R2 key on success. */\nconst uploadLogs = async (body: string): Promise<string | undefined> => {\n try {\n const response = await fetch('/api/feedback-logs', {\n method: 'POST',\n headers: { 'Content-Type': 'application/x-ndjson' },\n body,\n });\n if (!response.ok) {\n log.warn('feedback log upload failed', { status: response.status });\n return undefined;\n }\n const { key } = await response.json();\n return key;\n } catch (err) {\n log.warn('feedback log upload error', { error: err });\n return undefined;\n }\n};\n\n/** Create a PostHog-backed observability extension for events, errors, and feedback. */\nexport const extensions: (options: ExtensionsOptions) => Effect.Effect<Extension> = Effect.fn(function* ({\n config,\n release,\n environment,\n posthog: posthogConfig,\n logStore,\n}) {\n if (typeof window === 'undefined') {\n log('PostHog is being stubbed because it is running in a worker.');\n return stubExtension;\n }\n\n const feedbackSurveyId = config.get('runtime.app.env.DX_POSTHOG_FEEDBACK_SURVEY_ID');\n const apiKey = config.get('runtime.app.env.DX_POSTHOG_API_KEY');\n const api_host = config.get('runtime.app.env.DX_POSTHOG_API_HOST');\n if (!apiKey || !api_host) {\n log.info('Missing POSTHOG_API_KEY or POSTHOG_API_HOST');\n return stubExtension;\n }\n\n const { default: posthog } = yield* Effect.promise(() => import('posthog-js'));\n const { logProcessor } = yield* Effect.promise(() => import('./log-processor'));\n let feedbackSurveyAvailable: boolean | null = null;\n let unregisterPosthogProcessors: (() => void) | undefined;\n\n const checkFeedbackSurveyAvailable = (): Effect.Effect<boolean> =>\n feedbackSurveyId\n ? Effect.promise(() => {\n if (feedbackSurveyAvailable !== null) {\n return Promise.resolve(feedbackSurveyAvailable);\n }\n return new Promise<boolean>((resolve) => {\n posthog.getSurveys((surveys) => {\n const found = surveys.some((s) => s.id === feedbackSurveyId);\n feedbackSurveyAvailable = found;\n resolve(found);\n });\n });\n })\n : Effect.succeed(false);\n\n return {\n initialize: () =>\n Effect.sync(() => {\n // https://posthog.com/docs/libraries/js/config\n posthog.init(apiKey, {\n api_host,\n mask_all_text: true,\n capture_exceptions: true,\n ...posthogConfig,\n });\n if (release || environment) {\n posthog.register({\n ...(release ? { release } : {}),\n ...(environment ? { environment } : {}),\n });\n }\n unregisterPosthogProcessors?.();\n const removePosthogLog = log.addProcessor(logProcessor);\n unregisterPosthogProcessors = () => {\n removePosthogLog();\n };\n }),\n close: () =>\n Effect.sync(() => {\n unregisterPosthogProcessors?.();\n unregisterPosthogProcessors = undefined;\n }),\n enable: () => Effect.sync(() => posthog.opt_in_capturing()),\n disable: () => Effect.sync(() => posthog.opt_out_capturing()),\n identify: (distinctId, attributes, setOnceAttributes) => {\n posthog.identify(distinctId, attributes, setOnceAttributes);\n },\n alias: (distinctId, previousId) => {\n posthog.alias(distinctId, previousId);\n },\n setTags: (tags) => {\n posthog.register_for_session(tags);\n },\n get enabled(): boolean {\n return posthog.is_capturing();\n },\n apis: [\n {\n kind: 'events',\n isAvailable: () => Effect.succeed(true),\n captureEvent: (event, attributes) => {\n posthog.capture(event, attributes);\n },\n },\n {\n kind: 'errors',\n isAvailable: () => Effect.succeed(true),\n captureException: (error, attributes) => {\n posthog.captureException(error, attributes);\n },\n },\n {\n kind: 'feedback',\n // TODO(wittjosiah): Support custom surveys.\n captureUserFeedback: (form) => {\n posthog.getSurveys(async (surveys) => {\n const survey = surveys.find((survey) => survey.id === feedbackSurveyId);\n if (!survey || survey.questions.length === 0) {\n log.error('Missing feedback survey or survey has no questions', { feedbackSurveyId });\n return;\n }\n\n let debugLogDumpKey: string | null = null;\n if (form.includeLogs !== false && logStore !== undefined) {\n const ndjson = await logStore.export();\n if (ndjson.length > 0) {\n debugLogDumpKey = (await uploadLogs(ndjson)) ?? 'failed';\n }\n }\n\n // https://posthog.com/docs/surveys/implementing-custom-surveys\n const question = survey.questions[0];\n posthog.capture('survey sent', {\n $survey_id: survey.id,\n $survey_questions: [{ id: question.id, question: question.question }],\n [`$survey_response_${question.id}`]: form.message,\n debug_log_dump_key: debugLogDumpKey,\n });\n });\n },\n isAvailable: checkFeedbackSurveyAvailable,\n },\n ],\n };\n});\n", "//\n// Copyright 2025 DXOS.org\n//\n\nexport * as Client from './client-observability';\nexport * as IPData from './ip-data';\nexport * as Storage from './storage';\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport * as Effect from 'effect/Effect';\n\nimport { Event, scheduleTaskInterval } from '@dxos/async';\nimport { type Client, type ClientServices } from '@dxos/client';\nimport { type Space } from '@dxos/client/echo';\nimport { DeviceKind } from '@dxos/client/halo';\nimport { Context } from '@dxos/context';\nimport { invariant } from '@dxos/invariant';\nimport { log } from '@dxos/log';\nimport { ConnectionState, type NetworkStatus, Platform } from '@dxos/protocols/proto/dxos/client/services';\n\nimport { type DataProvider } from '../observability';\n\nconst SPACE_METRICS_MIN_INTERVAL = 1000 * 60 * 10; // 10 minutes\nconst NETWORK_METRICS_MIN_INTERVAL = 1000 * 60 * 10; // 10 minutes\nconst RUNTIME_METRICS_MIN_INTERVAL = 1000 * 60 * 10; // 10 minutes\n\n// TODO(wittjosiah): Improve privacy of telemetry identifiers.\n// - Identifier should be generated client-side with no attachment to identity.\n// - Identifier can then be reset by user.\n// - Identifier can be synced via HALO to allow for correlation of events bewteen devices.\n// - Identifier should also be stored outside of HALO such that it is available immediately on startup.\n/** Subscribes to identity and device changes and sets observability tags accordingly. */\nexport const identityProvider = (clientServices: Partial<ClientServices>): DataProvider =>\n Effect.fn(function* (observability) {\n // TODO(wittjosiah): RPC subscribe returns void; cleanup requires upstream API change.\n clientServices.IdentityService!.queryIdentity().subscribe((idqr) => {\n if (!idqr?.identity?.did) {\n return;\n }\n\n observability.identify(idqr.identity.did);\n observability.setTags({ did: idqr.identity.did });\n });\n\n // TODO(wittjosiah): RPC subscribe returns void; cleanup requires upstream API change.\n clientServices.DevicesService!.queryDevices().subscribe((dqr) => {\n if (!dqr?.devices || dqr.devices.length === 0) {\n return;\n }\n\n const thisDevice = dqr.devices.find((device) => device.kind === DeviceKind.CURRENT);\n if (!thisDevice) {\n return;\n }\n\n observability.setTags({ deviceKey: thisDevice.deviceKey.truncate() });\n if (thisDevice.profile?.label) {\n observability.setTags({ deviceProfile: thisDevice.profile.label });\n }\n });\n });\n\n/** Periodically publishes network connection and buffer metrics. */\nexport const networkMetricsProvider = (clientServices: Partial<ClientServices>): DataProvider =>\n Effect.fn(function* (observability) {\n const ctx = new Context();\n let lastNetworkStatus: NetworkStatus | undefined;\n\n // TODO(nf): support type in debounce()\n const updateSignalMetrics = new Event<NetworkStatus>().debounce(NETWORK_METRICS_MIN_INTERVAL);\n updateSignalMetrics.on(ctx, async () => {\n log('send signal metrics');\n (lastNetworkStatus?.signaling as NetworkStatus.Signal[])?.forEach(({ server, state }) => {\n observability.metrics.gauge('dxos.client.network.signal.connectionState', state, { server });\n });\n\n let swarmCount = 0;\n const connectionStates = new Map<string, number>();\n for (const state in ConnectionState) {\n connectionStates.set(state, 0);\n }\n\n let totalReadBufferSize = 0;\n let totalWriteBufferSize = 0;\n let totalChannelBufferSize = 0;\n\n lastNetworkStatus?.connectionInfo?.forEach((connectionInfo) => {\n swarmCount++;\n\n for (const conn of connectionInfo.connections ?? []) {\n connectionStates.set(conn.state, (connectionStates.get(conn.state) ?? 0) + 1);\n totalReadBufferSize += conn.readBufferSize ?? 0;\n totalWriteBufferSize += conn.writeBufferSize ?? 0;\n for (const stream of conn.streams ?? []) {\n totalChannelBufferSize += stream.writeBufferSize ?? 0;\n }\n }\n\n observability.metrics.gauge('dxos.client.network.swarm.count', swarmCount);\n for (const state in ConnectionState) {\n observability.metrics.gauge('dxos.client.network.connection.count', connectionStates.get(state) ?? 0, {\n state,\n });\n }\n observability.metrics.gauge('dxos.client.network.totalReadBufferSize', totalReadBufferSize);\n observability.metrics.gauge('dxos.client.network.totalWriteBufferSize', totalWriteBufferSize);\n observability.metrics.gauge('dxos.client.network.totalChannelBufferSize', totalChannelBufferSize);\n });\n });\n\n clientServices.NetworkService!.queryStatus().subscribe((networkStatus) => {\n lastNetworkStatus = networkStatus;\n updateSignalMetrics.emit();\n });\n\n scheduleTaskInterval(ctx, async () => updateSignalMetrics.emit(), NETWORK_METRICS_MIN_INTERVAL);\n\n return async () => {\n await ctx.dispose();\n };\n });\n\n/** Periodically publishes platform and heap memory metrics. */\nexport const runtimeMetricsProvider = (clientServices: Partial<ClientServices>): DataProvider =>\n Effect.fn(function* (observability) {\n const ctx = new Context();\n log('runtimeMetricsProvider: requesting platform from SystemService');\n const platform = yield* Effect.promise(() => clientServices.SystemService!.getPlatform());\n log('runtimeMetricsProvider: platform received');\n invariant(platform, 'platform is required');\n\n observability.setTags({\n platformType: Platform.PLATFORM_TYPE[platform.type as number].toLowerCase(),\n platform: platform.platform,\n arch: platform.arch,\n runtime: platform.runtime,\n });\n\n scheduleTaskInterval(\n ctx,\n async () => {\n if (clientServices.constructor.name === 'WorkerClientServices') {\n const memory = (window.performance as any).memory;\n if (memory) {\n observability.metrics.gauge('dxos.client.runtime.heapTotal', memory.totalJSHeapSize);\n observability.metrics.gauge('dxos.client.runtime.heapUsed', memory.usedJSHeapSize);\n observability.metrics.gauge('dxos.client.runtime.heapSizeLimit', memory.jsHeapSizeLimit);\n }\n }\n\n clientServices.SystemService?.getPlatform()\n .then((platform) => {\n if (platform.memory) {\n observability.metrics.gauge('dxos.client.services.runtime.rss', platform.memory.rss);\n observability.metrics.gauge('dxos.client.services.runtime.heapTotal', platform.memory.heapTotal);\n observability.metrics.gauge('dxos.client.services.runtime.heapUsed', platform.memory.heapUsed);\n }\n })\n .catch((error) => log('platform error', { error }));\n },\n RUNTIME_METRICS_MIN_INTERVAL,\n );\n\n return async () => {\n await ctx.dispose();\n };\n });\n\n/** Periodically publishes space membership, object count, and pipeline progress metrics. */\nexport const spacesMetricsProvider = (client: Client): DataProvider =>\n Effect.fn(function* (observability) {\n const ctx = new Context();\n // TODO(nf): update subscription on new spaces\n const spaces = client.spaces.get();\n const subscriptions = new Map<string, { unsubscribe: () => void }>();\n ctx.onDispose(() => subscriptions.forEach((subscription) => subscription.unsubscribe()));\n\n const updateSpaceMetrics = new Event<Space>().debounce(SPACE_METRICS_MIN_INTERVAL);\n updateSpaceMetrics.on(ctx, async () => {\n log('send space metrics');\n for (const data of mapSpaces(spaces, { truncateKeys: true })) {\n observability.metrics.gauge('dxos.client.space.members', data.members, { key: data.key });\n observability.metrics.gauge('dxos.client.space.objects', data.objects, { key: data.key });\n observability.metrics.gauge('dxos.client.space.epoch', data.epoch, { key: data.key });\n observability.metrics.gauge('dxos.client.space.currentDataMutations', data.currentDataMutations, {\n key: data.key,\n });\n }\n });\n\n const subscribeToSpaceUpdate = (space: Space) =>\n space.pipeline.subscribe({\n next: () => {\n updateSpaceMetrics.emit();\n },\n });\n\n spaces.forEach((space) => {\n subscriptions.set(space.id, subscribeToSpaceUpdate(space));\n });\n\n client.spaces.subscribe({\n next: async (spaces) => {\n spaces\n .filter((space) => !subscriptions.has(space.id))\n .forEach((space) => {\n subscriptions.set(space.id, subscribeToSpaceUpdate(space));\n });\n },\n });\n\n scheduleTaskInterval(ctx, async () => updateSpaceMetrics.emit(), SPACE_METRICS_MIN_INTERVAL);\n\n return async () => {\n await ctx.dispose();\n };\n });\n\ntype MapSpacesOptions = {\n verbose?: boolean;\n truncateKeys?: boolean;\n};\n\nconst mapSpaces = (spaces: Space[], options: MapSpacesOptions = { verbose: false, truncateKeys: false }) => {\n return spaces.map((space) => {\n // TODO(burdon): Factor out.\n // TODO(burdon): Agent needs to restart before `ready` is available.\n const { open, ready } = space.internal.data.metrics ?? {};\n const startup = open && ready && ready.getTime() - open.getTime();\n\n // TODO(burdon): Get feeds from client-services if verbose (factor out from devtools/diagnostics).\n // const host = client.services.services.DevtoolsHost!;\n const pipeline = space.internal.data.pipeline;\n const startDataMutations = pipeline?.currentEpoch?.subject.assertion.timeframe.totalMessages() ?? 0;\n const epoch = pipeline?.currentEpoch?.subject.assertion.number;\n // const appliedEpoch = pipeline?.appliedEpoch?.subject.assertion.number;\n const currentDataMutations = pipeline?.currentDataTimeframe?.totalMessages() ?? 0;\n const totalDataMutations = pipeline?.targetDataTimeframe?.totalMessages() ?? 0;\n\n return {\n // TODO(nf): truncate keys for DD?\n key: space.key.truncate(),\n open: space.isOpen,\n members: space.members.get().length,\n objects: space.internal.db.coreDatabase.getAllObjectIds().length,\n startup,\n epoch,\n // appliedEpoch,\n startDataMutations,\n currentDataMutations,\n totalDataMutations,\n\n // TODO(burdon): Negative?\n progress: (\n Math.min(Math.abs((currentDataMutations - startDataMutations) / (totalDataMutations - startDataMutations)), 1) *\n 100\n ).toFixed(0),\n };\n });\n};\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport * as FetchHttpClient from '@effect/platform/FetchHttpClient';\nimport * as HttpClient from '@effect/platform/HttpClient';\nimport * as HttpClientRequest from '@effect/platform/HttpClientRequest';\nimport * as Effect from 'effect/Effect';\nimport * as Schema from 'effect/Schema';\n// NOTE: localStorage is not available in web workers.\nimport * as localForage from 'localforage';\n\nimport { type Config } from '@dxos/config';\nimport { log } from '@dxos/log';\n\nimport { type DataProvider } from '../observability';\n\nconst IP_DATA_CACHE_TIMEOUT = 6 * 60 * 60 * 1000; // 6 hours\n\nconst IPData = Schema.Struct({\n city: Schema.String,\n region: Schema.String,\n country: Schema.String,\n latitude: Schema.optional(Schema.Number),\n longitude: Schema.optional(Schema.Number),\n});\ntype IPData = Schema.Schema.Type<typeof IPData>;\n\ntype CachedIPData = {\n data: IPData;\n timestamp: number;\n};\n\nconst getIPData = Effect.fn(function* (config: Config) {\n const httpClient = yield* HttpClient.HttpClient;\n\n // Disable tracing to avoid CORS errors from traceparent header on cross-origin requests.\n const httpClientNoTrace = httpClient.pipe(HttpClient.withTracerDisabledWhen(() => true));\n\n // Check cache first.\n const cachedData = yield* Effect.promise(() => localForage.getItem<CachedIPData>('dxos:observability:ipdata'));\n if (cachedData && cachedData.timestamp > Date.now() - IP_DATA_CACHE_TIMEOUT) {\n return cachedData.data;\n }\n\n // Fetch data if not cached.\n const IPDATA_API_KEY = config.get('runtime.app.env.DX_IPDATA_API_KEY');\n if (IPDATA_API_KEY) {\n const data = yield* HttpClientRequest.get(`https://api.ipdata.co?api-key=${IPDATA_API_KEY}`).pipe(\n httpClientNoTrace.execute,\n Effect.flatMap((res) => res.json),\n Effect.flatMap(Schema.decodeUnknown(IPData)),\n );\n\n // Cache data.\n yield* Effect.promise(() =>\n localForage.setItem('dxos:observability:ipdata', {\n data,\n timestamp: Date.now(),\n }),\n );\n\n return data;\n }\n});\n\n/** Fetches IP geolocation data and sets city/region/country tags on the observability instance. */\nexport const provider =\n (config: Config): DataProvider =>\n (observability) =>\n Effect.gen(function* () {\n const ipData = yield* getIPData(config);\n if (!ipData) {\n return;\n }\n\n observability.setTags({\n city: ipData.city,\n region: ipData.region,\n country: ipData.country,\n latitude: ipData.latitude,\n longitude: ipData.longitude,\n });\n }).pipe(\n Effect.provide(FetchHttpClient.layer),\n Effect.catchAll((err) =>\n Effect.sync(() => {\n log.verbose('ipdata fetch failed', { err });\n }),\n ),\n );\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport * as Duration from 'effect/Duration';\nimport * as Effect from 'effect/Effect';\nimport * as Fiber from 'effect/Fiber';\nimport * as Schedule from 'effect/Schedule';\n\nimport { type DataProvider } from '../observability';\n\nexport const provider: DataProvider = Effect.fn(function* (observability) {\n if (typeof navigator !== 'undefined' && navigator.storage?.estimate) {\n const action = Effect.gen(function* () {\n const storageEstimate = yield* Effect.tryPromise(() => navigator.storage.estimate());\n storageEstimate.usage && observability.metrics.gauge('storageUsage', storageEstimate.usage);\n storageEstimate.quota && observability.metrics.gauge('storageQuota', storageEstimate.quota);\n });\n\n const fiber = action.pipe(Effect.repeat(Schedule.fixed(Duration.hours(1))), Effect.runFork);\n return () => Effect.runSync(Fiber.interrupt(fiber));\n }\n});\n"],
5
+ "mappings": "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",
6
+ "names": ["Array", "Effect", "Function", "SubscriptionList", "invariant", "log", "localForage", "log", "compositeKey", "OBSERVABILITY_DISABLED_KEY", "namespace", "catch", "err", "value", "OBSERVABILITY_GROUP_KEY", "__dxlog_file", "_extensions", "_dataProviders", "_subscriptions", "initialize", "_initialized", "initializedExtensions", "extension", "Effect", "all", "provider", "pipe", "error", "gen", "log", "catchAll", "length", "close", "enable", "disable", "flush", "_addExtension", "_addDataProvider", "dataProvider", "cleanup", "identify", "distinctId", "attributes", "alias", "setTags", "kind", "value", "processedTags", "enabled", "errors", "captureException", "events", "captureEvent", "event", "feedback", "captureUserFeedback", "isAvailable", "apis", "succeed", "available", "api", "metrics", "gauge", "increment", "distribution", "_getExtensions", "observability", "_observability", "_extension", "invariant", "addDataProvider", "defaultResource", "resourceFromAttributes", "ATTR_SERVICE_NAME", "ATTR_SERVICE_VERSION", "Effect", "Match", "Option", "Ref", "resolveTelemetryTag", "LogLevel", "log", "isNode", "isNonNullable", "Effect", "stubExtension", "initialize", "succeed", "undefined", "enable", "disable", "flush", "setTags", "enabled", "apis", "__dxlog_file", "OtelMetrics", "Effect", "promise", "OtelTraces", "cachedDisabled", "isObservabilityDisabled", "disabled", "isObservabilityDisabledSync", "serviceName", "enabledRef", "tags", "Map", "endpoint", "isNode", "process", "env", "DX_OTEL_ENDPOINT", "headers", "_headers", "log", "stubExtension", "clientTag", "resource", "defaultResource", "ATTR_SERVICE_VERSION", "serviceVersion", "crypto", "randomUUID", "detectProcessType", "logs", "getTags", "logLevel", "undefined", "traces", "tracesEnabled", "extension", "initialize", "update", "disable", "close", "metrics", "result", "reason", "flush", "setTags", "incomingTags", "value", "enabled", "apis", "isAvailable", "gauge", "increment", "name", "distribution", "kind", "isNonNullable", "DX_DISABLE_OBSERVABILITY", "window", "globalThis", "parseHeaders", "split", "length", "acc", "trim", "toLowerCase", "rest", "extensions", "Effect", "log", "__dxlog_file", "headers", "body", "status", "response", "log", "undefined", "err", "warn", "error", "extensions", "stubExtension", "feedbackSurveyId", "api_host", "get", "apiKey", "default", "feedbackSurveyAvailable", "unregisterPosthogProcessors", "checkFeedbackSurveyAvailable", "Promise", "resolve", "found", "some", "Effect", "initialize", "sync", "posthog", "mask_all_text", "capture_exceptions", "posthogConfig", "release", "environment", "removePosthogLog", "opt_in_capturing", "disable", "identify", "distinctId", "attributes", "setOnceAttributes", "alias", "previousId", "setTags", "tags", "enabled", "apis", "captureEvent", "capture", "event", "captureException", "captureUserFeedback", "survey", "surveys", "questions", "length", "debugLogDumpKey", "ndjson", "uploadLogs", "$survey_id", "id", "$survey_questions", "question", "debug_log_dump_key", "isAvailable", "Effect", "Event", "scheduleTaskInterval", "DeviceKind", "Context", "invariant", "log", "ConnectionState", "Platform", "__dxlog_file", "SPACE_METRICS_MIN_INTERVAL", "RUNTIME_METRICS_MIN_INTERVAL", "idqr", "observability", "identity", "did", "clientServices", "thisDevice", "profile", "label", "deviceProfile", "lastNetworkStatus", "signaling", "forEach", "gauge", "state", "server", "swarmCount", "connectionStates", "totalReadBufferSize", "totalChannelBufferSize", "connectionInfo", "conn", "connections", "readBufferSize", "totalWriteBufferSize", "writeBufferSize", "streams", "metrics", "updateSignalMetrics", "ctx", "platform", "promise", "SystemService", "getPlatform", "platformType", "toLowerCase", "arch", "runtime", "memory", "window", "performance", "jsHeapSizeLimit", "catch", "spaces", "client", "get", "onDispose", "subscriptions", "updateSpaceMetrics", "data", "mapSpaces", "truncateKeys", "emit", "subscribe", "space", "set", "verbose", "map", "epoch", "pipeline", "currentEpoch", "currentDataMutations", "currentDataTimeframe", "key", "members", "objects", "startup", "startDataMutations", "totalDataMutations", "progress", "FetchHttpClient", "HttpClient", "HttpClientRequest", "Effect", "Schema", "localForage", "log", "__dxlog_file", "IP_DATA_CACHE_TIMEOUT", "city", "region", "String", "country", "latitude", "longitude", "config", "httpClientNoTrace", "pipe", "cachedData", "promise", "setItem", "timestamp", "Date", "data", "observability", "ipData", "provide", "err", "provider", "Duration", "Effect", "Fiber", "Schedule", "fn", "observability", "navigator", "storage", "estimate", "action", "gen", "storageEstimate", "tryPromise", "usage", "metrics", "gauge", "quota", "fiber", "pipe", "repeat", "fixed", "hours", "runFork", "runSync", "interrupt"]
7
7
  }
@@ -0,0 +1,38 @@
1
+ import "./chunk-J5LGTIGS.mjs";
2
+
3
+ // src/extensions/posthog/log-processor.ts
4
+ import posthog from "posthog-js";
5
+ import { InvariantViolation } from "@dxos/invariant";
6
+ import { LogLevel, shouldLog } from "@dxos/log";
7
+ var logProcessor = (config, entry) => {
8
+ if (!shouldLog(entry, config.captureFilters) || entry.meta?.S?.remoteSessionId) {
9
+ return;
10
+ }
11
+ let capturedError = entry.error;
12
+ if (capturedError == null && entry.level === LogLevel.ERROR) {
13
+ capturedError = Object.values(entry.context ?? {}).find((v) => v instanceof Error);
14
+ }
15
+ if (!capturedError) {
16
+ return;
17
+ }
18
+ const additionalProperties = {};
19
+ const { filename, line } = entry.computedMeta;
20
+ if (filename !== void 0 && line !== void 0) {
21
+ additionalProperties.transaction = `${filename}:${line}`;
22
+ }
23
+ if (entry.meta?.S?.hostSessionId) {
24
+ additionalProperties.service_host_issue = true;
25
+ additionalProperties.service_host_session = entry.meta.S.hostSessionId;
26
+ }
27
+ if (entry.meta?.S?.uptimeSeconds != null) {
28
+ additionalProperties.uptime_seconds = entry.meta.S.uptimeSeconds;
29
+ }
30
+ if (capturedError instanceof InvariantViolation) {
31
+ additionalProperties.invariant_violation = true;
32
+ }
33
+ posthog.captureException(capturedError, additionalProperties);
34
+ };
35
+ export {
36
+ logProcessor
37
+ };
38
+ //# sourceMappingURL=log-processor-HPHWNBOK.mjs.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/extensions/posthog/log-processor.ts"],
4
+ "sourcesContent": ["//\n// Copyright 2025 DXOS.org\n//\n\nimport posthog from 'posthog-js';\n\nimport { InvariantViolation } from '@dxos/invariant';\nimport { type LogConfig, type LogEntry, LogLevel, type LogProcessor, shouldLog } from '@dxos/log';\n\nexport const logProcessor: LogProcessor = (config: LogConfig, entry: LogEntry) => {\n // Don't forward logs from remote sessions.\n if (!shouldLog(entry, config.captureFilters) || entry.meta?.S?.remoteSessionId) {\n return;\n }\n\n let capturedError = entry.error;\n if (capturedError == null && entry.level === LogLevel.ERROR) {\n capturedError = Object.values(entry.context ?? {}).find((v): v is Error => v instanceof Error);\n }\n\n if (!capturedError) {\n return;\n }\n\n const additionalProperties: Record<string, string | boolean | number> = {};\n const { filename, line } = entry.computedMeta;\n if (filename !== undefined && line !== undefined) {\n additionalProperties.transaction = `${filename}:${line}`;\n }\n if (entry.meta?.S?.hostSessionId) {\n additionalProperties.service_host_issue = true;\n additionalProperties.service_host_session = entry.meta.S.hostSessionId;\n }\n if (entry.meta?.S?.uptimeSeconds != null) {\n additionalProperties.uptime_seconds = entry.meta.S.uptimeSeconds;\n }\n\n if (capturedError instanceof InvariantViolation) {\n additionalProperties.invariant_violation = true;\n }\n\n posthog.captureException(capturedError, additionalProperties);\n};\n"],
5
+ "mappings": ";;;AAIA,OAAOA,aAAa;AAEpB,SAASC,0BAA0B;AACnC,SAAwCC,UAA6BC,iBAAiB;AAE/E,IAAMC,eAA6B,CAACC,QAAmBC,UAAAA;AAE5D,MAAI,CAACH,UAAUG,OAAOD,OAAOE,cAAc,KAAKD,MAAME,MAAMC,GAAGC,iBAAiB;AAC9E;EACF;AAEA,MAAIC,gBAAgBL,MAAMM;AAC1B,MAAID,iBAAiB,QAAQL,MAAMO,UAAUX,SAASY,OAAO;AAC3DH,oBAAgBI,OAAOC,OAAOV,MAAMW,WAAW,CAAC,CAAA,EAAGC,KAAK,CAACC,MAAkBA,aAAaC,KAAAA;EAC1F;AAEA,MAAI,CAACT,eAAe;AAClB;EACF;AAEA,QAAMU,uBAAkE,CAAC;AACzE,QAAM,EAAEC,UAAUC,KAAI,IAAKjB,MAAMkB;AACjC,MAAIF,aAAaG,UAAaF,SAASE,QAAW;AAChDJ,yBAAqBK,cAAc,GAAGJ,QAAAA,IAAYC,IAAAA;EACpD;AACA,MAAIjB,MAAME,MAAMC,GAAGkB,eAAe;AAChCN,yBAAqBO,qBAAqB;AAC1CP,yBAAqBQ,uBAAuBvB,MAAME,KAAKC,EAAEkB;EAC3D;AACA,MAAIrB,MAAME,MAAMC,GAAGqB,iBAAiB,MAAM;AACxCT,yBAAqBU,iBAAiBzB,MAAME,KAAKC,EAAEqB;EACrD;AAEA,MAAInB,yBAAyBV,oBAAoB;AAC/CoB,yBAAqBW,sBAAsB;EAC7C;AAEAhC,UAAQiC,iBAAiBtB,eAAeU,oBAAAA;AAC1C;",
6
+ "names": ["posthog", "InvariantViolation", "LogLevel", "shouldLog", "logProcessor", "config", "entry", "captureFilters", "meta", "S", "remoteSessionId", "capturedError", "error", "level", "ERROR", "Object", "values", "context", "find", "v", "Error", "additionalProperties", "filename", "line", "computedMeta", "undefined", "transaction", "hostSessionId", "service_host_issue", "service_host_session", "uptimeSeconds", "uptime_seconds", "invariant_violation", "captureException"]
7
+ }
@@ -0,0 +1,115 @@
1
+ import {
2
+ setDiagLogger
3
+ } from "./chunk-3534PNWM.mjs";
4
+ import "./chunk-J5LGTIGS.mjs";
5
+
6
+ // src/extensions/otel/logs.ts
7
+ import { SeverityNumber } from "@opentelemetry/api-logs";
8
+ import { OTLPLogExporter } from "@opentelemetry/exporter-logs-otlp-http";
9
+ import { BatchLogRecordProcessor, LoggerProvider } from "@opentelemetry/sdk-logs";
10
+ import { ATTR_SERVICE_VERSION } from "@opentelemetry/semantic-conventions";
11
+ import { LogLevel, getContextFromEntry, getRelativeFilename } from "@dxos/log";
12
+ var FLATTEN_DEPTH = 1;
13
+ var OtelLogs = class {
14
+ options;
15
+ _loggerProvider;
16
+ constructor(options) {
17
+ this.options = options;
18
+ setDiagLogger(options.consoleDiagLogLevel);
19
+ const logExporter = new OTLPLogExporter({
20
+ url: this.options.endpoint + "/v1/logs",
21
+ headers: this.options.headers,
22
+ concurrencyLimit: 10
23
+ });
24
+ this._loggerProvider = new LoggerProvider({
25
+ resource: this.options.resource,
26
+ processors: [
27
+ new BatchLogRecordProcessor(logExporter)
28
+ ]
29
+ });
30
+ }
31
+ logProcessor = (_config, entry) => {
32
+ const logger = this._loggerProvider.getLogger("dxos-observability", this.options.resource.attributes[ATTR_SERVICE_VERSION]?.toString());
33
+ if (entry.level < this.options.logLevel || !this.options.includeSharedWorkerLogs && entry.meta?.S?.remoteSessionId) {
34
+ return;
35
+ }
36
+ const attributes = {
37
+ ...this.options.getTags(),
38
+ ...entry.meta ? {
39
+ meta: {
40
+ file: getRelativeFilename(entry.meta.F),
41
+ line: entry.meta.L
42
+ }
43
+ } : {},
44
+ ...entry.error ? {
45
+ error: entry.error.stack
46
+ } : {},
47
+ ...stringifyValues(getContextFromEntry(entry), "ctx_")
48
+ };
49
+ logger.emit({
50
+ severityNumber: convertLevel(entry.level),
51
+ body: entry.message,
52
+ attributes
53
+ });
54
+ };
55
+ flush() {
56
+ return this._loggerProvider.forceFlush();
57
+ }
58
+ close() {
59
+ return this._loggerProvider.shutdown();
60
+ }
61
+ };
62
+ var convertLevel = (level) => {
63
+ switch (level) {
64
+ case LogLevel.TRACE:
65
+ return SeverityNumber.TRACE;
66
+ case LogLevel.DEBUG:
67
+ return SeverityNumber.DEBUG;
68
+ case LogLevel.VERBOSE:
69
+ return SeverityNumber.INFO;
70
+ case LogLevel.INFO:
71
+ return SeverityNumber.INFO;
72
+ case LogLevel.WARN:
73
+ return SeverityNumber.WARN;
74
+ case LogLevel.ERROR:
75
+ return SeverityNumber.ERROR;
76
+ default:
77
+ return SeverityNumber.UNSPECIFIED;
78
+ }
79
+ };
80
+ var safeStringify = (value) => {
81
+ try {
82
+ return JSON.stringify(value);
83
+ } catch {
84
+ return "[Circular]";
85
+ }
86
+ };
87
+ var stringifyValues = (object, keyPrefix, depth = 1) => {
88
+ if (!object) {
89
+ return {};
90
+ }
91
+ const result = {};
92
+ for (const [key, value] of Object.entries(object)) {
93
+ if (value === void 0) {
94
+ continue;
95
+ }
96
+ const newKey = keyPrefix ? `${keyPrefix}${key}` : key;
97
+ if (typeof value === "object") {
98
+ if (!value || Array.isArray(value) || depth > FLATTEN_DEPTH) {
99
+ result[newKey] = safeStringify(value);
100
+ } else {
101
+ const flattened = stringifyValues(value, `${newKey}_`, depth + 1);
102
+ for (const [flattenedKey, flattenedValue] of Object.entries(flattened)) {
103
+ result[flattenedKey] = flattenedValue;
104
+ }
105
+ }
106
+ } else {
107
+ result[newKey] = String(value);
108
+ }
109
+ }
110
+ return result;
111
+ };
112
+ export {
113
+ OtelLogs
114
+ };
115
+ //# sourceMappingURL=logs-A2VDAHHD.mjs.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/extensions/otel/logs.ts"],
4
+ "sourcesContent": ["//\n// Copyright 2024 DXOS.org\n//\n\nimport { SeverityNumber } from '@opentelemetry/api-logs';\nimport { OTLPLogExporter } from '@opentelemetry/exporter-logs-otlp-http';\nimport { BatchLogRecordProcessor, LoggerProvider } from '@opentelemetry/sdk-logs';\nimport { ATTR_SERVICE_VERSION } from '@opentelemetry/semantic-conventions';\n\nimport {\n type LogConfig,\n type LogEntry,\n LogLevel,\n type LogProcessor,\n getContextFromEntry,\n getRelativeFilename,\n} from '@dxos/log';\n\nimport { type OtelOptions, setDiagLogger } from './otel';\n\nconst FLATTEN_DEPTH = 1;\n\nexport type OtelLogOptions = OtelOptions & {\n logLevel: LogLevel;\n /**\n * Include logs forwarded from the shared worker via LoggingService.\n *\n * @deprecated\n */\n includeSharedWorkerLogs?: boolean;\n};\n\nexport class OtelLogs {\n private _loggerProvider: LoggerProvider;\n constructor(private readonly options: OtelLogOptions) {\n setDiagLogger(options.consoleDiagLogLevel);\n const logExporter = new OTLPLogExporter({\n url: this.options.endpoint + '/v1/logs',\n headers: this.options.headers,\n concurrencyLimit: 10, // an optional limit on pending requests\n });\n this._loggerProvider = new LoggerProvider({\n resource: this.options.resource,\n processors: [new BatchLogRecordProcessor(logExporter)],\n });\n }\n\n public readonly logProcessor: LogProcessor = (_config: LogConfig, entry: LogEntry) => {\n const logger = this._loggerProvider.getLogger(\n 'dxos-observability',\n this.options.resource.attributes[ATTR_SERVICE_VERSION]?.toString(),\n );\n\n if (\n entry.level < this.options.logLevel ||\n (!this.options.includeSharedWorkerLogs && entry.meta?.S?.remoteSessionId)\n ) {\n return;\n }\n\n const attributes = {\n ...this.options.getTags(),\n ...(entry.meta ? { meta: { file: getRelativeFilename(entry.meta.F), line: entry.meta.L } } : {}),\n ...(entry.error ? { error: entry.error.stack } : {}),\n ...stringifyValues(getContextFromEntry(entry), 'ctx_'),\n };\n\n logger.emit({\n severityNumber: convertLevel(entry.level),\n body: entry.message,\n attributes,\n });\n };\n\n flush(): Promise<void> {\n return this._loggerProvider.forceFlush();\n }\n\n close(): Promise<void> {\n return this._loggerProvider.shutdown();\n }\n}\n\n/** Maps {@link LogLevel} to OpenTelemetry {@link SeverityNumber}. */\nconst convertLevel = (level: LogLevel): SeverityNumber => {\n switch (level) {\n case LogLevel.TRACE:\n return SeverityNumber.TRACE;\n case LogLevel.DEBUG:\n return SeverityNumber.DEBUG;\n case LogLevel.VERBOSE:\n return SeverityNumber.INFO;\n case LogLevel.INFO:\n return SeverityNumber.INFO;\n case LogLevel.WARN:\n return SeverityNumber.WARN;\n case LogLevel.ERROR:\n return SeverityNumber.ERROR;\n default:\n return SeverityNumber.UNSPECIFIED;\n }\n};\n\nconst safeStringify = (value: unknown): string => {\n try {\n return JSON.stringify(value);\n } catch {\n return '[Circular]';\n }\n};\n\n// TODO(wittjosiah): Reconcile logging utils w/ EDGE.\nconst stringifyValues = (object: object | undefined, keyPrefix?: string, depth: number = 1) => {\n if (!object) {\n return {};\n }\n const result: Record<string, string> = {};\n for (const [key, value] of Object.entries(object)) {\n if (value === undefined) {\n continue;\n }\n const newKey = keyPrefix ? `${keyPrefix}${key}` : key;\n if (typeof value === 'object') {\n if (!value || Array.isArray(value) || depth > FLATTEN_DEPTH) {\n result[newKey] = safeStringify(value);\n } else {\n const flattened = stringifyValues(value, `${newKey}_`, depth + 1);\n for (const [flattenedKey, flattenedValue] of Object.entries(flattened)) {\n result[flattenedKey] = flattenedValue;\n }\n }\n } else {\n result[newKey] = String(value);\n }\n }\n return result;\n};\n"],
5
+ "mappings": "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",
6
+ "names": ["SeverityNumber", "OTLPLogExporter", "BatchLogRecordProcessor", "LoggerProvider", "ATTR_SERVICE_VERSION", "LogLevel", "getContextFromEntry", "getRelativeFilename", "FLATTEN_DEPTH", "OtelLogs", "_loggerProvider", "options", "setDiagLogger", "consoleDiagLogLevel", "logExporter", "OTLPLogExporter", "url", "endpoint", "headers", "concurrencyLimit", "LoggerProvider", "resource", "processors", "BatchLogRecordProcessor", "logProcessor", "_config", "entry", "logger", "getLogger", "attributes", "ATTR_SERVICE_VERSION", "toString", "level", "logLevel", "includeSharedWorkerLogs", "meta", "S", "remoteSessionId", "getTags", "file", "getRelativeFilename", "F", "line", "L", "error", "stack", "stringifyValues", "getContextFromEntry", "emit", "severityNumber", "convertLevel", "body", "message", "flush", "forceFlush", "close", "shutdown", "LogLevel", "TRACE", "SeverityNumber", "DEBUG", "VERBOSE", "INFO", "WARN", "ERROR", "UNSPECIFIED", "safeStringify", "value", "JSON", "stringify", "object", "keyPrefix", "depth", "result", "key", "Object", "entries", "undefined", "newKey", "Array", "isArray", "flattened", "flattenedKey", "flattenedValue", "String"]
7
+ }
@@ -1 +1 @@
1
- {"inputs":{"packages/sdk/observability/src/cli-observability-secrets.json":{"bytes":593,"imports":[]},"packages/sdk/observability/src/segment/types.ts":{"bytes":2527,"imports":[],"format":"esm"},"packages/sdk/observability/src/segment/base.ts":{"bytes":5286,"imports":[{"path":"@dxos/log","kind":"import-statement","external":true},{"path":"packages/sdk/observability/src/segment/types.ts","kind":"import-statement","original":"./types"}],"format":"esm"},"packages/sdk/observability/src/sentry/browser.ts":{"bytes":15809,"imports":[{"path":"@sentry/browser","kind":"import-statement","external":true},{"path":"@dxos/log","kind":"import-statement","external":true},{"path":"@dxos/tracing","kind":"import-statement","external":true},{"path":"@sentry/browser","kind":"import-statement","external":true}],"format":"esm"},"packages/sdk/observability/src/sentry/types.ts":{"bytes":1037,"imports":[],"format":"esm"},"packages/sdk/observability/src/sentry/index.ts":{"bytes":546,"imports":[{"path":"packages/sdk/observability/src/sentry/browser.ts","kind":"import-statement","original":"./node"},{"path":"packages/sdk/observability/src/sentry/types.ts","kind":"import-statement","original":"./types"}],"format":"esm"},"packages/sdk/observability/src/segment/browser.ts":{"bytes":7594,"imports":[{"path":"@segment/snippet","kind":"import-statement","external":true},{"path":"@dxos/log","kind":"import-statement","external":true},{"path":"packages/sdk/observability/src/segment/base.ts","kind":"import-statement","original":"./base"},{"path":"packages/sdk/observability/src/sentry/index.ts","kind":"import-statement","original":"../sentry"}],"format":"esm"},"packages/sdk/observability/src/segment/index.ts":{"bytes":547,"imports":[{"path":"packages/sdk/observability/src/segment/browser.ts","kind":"import-statement","original":"./node"},{"path":"packages/sdk/observability/src/segment/types.ts","kind":"import-statement","original":"./types"}],"format":"esm"},"packages/sdk/observability/src/otel/otel.ts":{"bytes":1920,"imports":[{"path":"@opentelemetry/api","kind":"import-statement","external":true}],"format":"esm"},"packages/sdk/observability/src/otel/logs.ts":{"bytes":10977,"imports":[{"path":"@opentelemetry/api-logs","kind":"import-statement","external":true},{"path":"@opentelemetry/exporter-logs-otlp-http","kind":"import-statement","external":true},{"path":"@opentelemetry/resources","kind":"import-statement","external":true},{"path":"@opentelemetry/sdk-logs","kind":"import-statement","external":true},{"path":"@opentelemetry/semantic-conventions","kind":"import-statement","external":true},{"path":"@dxos/log","kind":"import-statement","external":true},{"path":"@dxos/util","kind":"import-statement","external":true},{"path":"packages/sdk/observability/src/otel/otel.ts","kind":"import-statement","original":"./otel"}],"format":"esm"},"packages/sdk/observability/src/otel/metrics.ts":{"bytes":14198,"imports":[{"path":"@opentelemetry/exporter-metrics-otlp-http","kind":"import-statement","external":true},{"path":"@opentelemetry/resources","kind":"import-statement","external":true},{"path":"@opentelemetry/sdk-metrics","kind":"import-statement","external":true},{"path":"@opentelemetry/semantic-conventions","kind":"import-statement","external":true},{"path":"@dxos/log","kind":"import-statement","external":true},{"path":"@dxos/tracing","kind":"import-statement","external":true},{"path":"packages/sdk/observability/src/otel/otel.ts","kind":"import-statement","original":"./otel"}],"format":"esm"},"packages/sdk/observability/src/otel/traces-browser.ts":{"bytes":8216,"imports":[{"path":"@opentelemetry/api","kind":"import-statement","external":true},{"path":"@opentelemetry/auto-instrumentations-web","kind":"import-statement","external":true},{"path":"@opentelemetry/exporter-trace-otlp-http","kind":"import-statement","external":true},{"path":"@opentelemetry/instrumentation","kind":"import-statement","external":true},{"path":"@opentelemetry/resources","kind":"import-statement","external":true},{"path":"@opentelemetry/sdk-trace-base","kind":"import-statement","external":true},{"path":"@opentelemetry/sdk-trace-web","kind":"import-statement","external":true},{"path":"@opentelemetry/semantic-conventions","kind":"import-statement","external":true},{"path":"@dxos/log","kind":"import-statement","external":true},{"path":"@dxos/tracing","kind":"import-statement","external":true}],"format":"esm"},"packages/sdk/observability/src/otel/index.ts":{"bytes":712,"imports":[{"path":"packages/sdk/observability/src/otel/otel.ts","kind":"import-statement","original":"./otel"},{"path":"packages/sdk/observability/src/otel/logs.ts","kind":"import-statement","original":"./logs"},{"path":"packages/sdk/observability/src/otel/metrics.ts","kind":"import-statement","original":"./metrics"},{"path":"packages/sdk/observability/src/otel/traces-browser.ts","kind":"import-statement","original":"./traces"}],"format":"esm"},"packages/sdk/observability/src/sentry/sentry-log-processor.ts":{"bytes":19452,"imports":[{"path":"@dxos/invariant","kind":"import-statement","external":true},{"path":"@dxos/log","kind":"import-statement","external":true},{"path":"@dxos/util","kind":"import-statement","external":true},{"path":"packages/sdk/observability/src/sentry/browser.ts","kind":"import-statement","original":"./node"}],"format":"esm"},"packages/sdk/observability/src/observability.ts":{"bytes":76925,"imports":[{"path":"@dxos/async","kind":"import-statement","external":true},{"path":"@dxos/client","kind":"import-statement","external":true},{"path":"@dxos/context","kind":"import-statement","external":true},{"path":"@dxos/invariant","kind":"import-statement","external":true},{"path":"@dxos/log","kind":"import-statement","external":true},{"path":"@dxos/network-manager","kind":"import-statement","external":true},{"path":"@dxos/protocols/proto/dxos/client/services","kind":"import-statement","external":true},{"path":"@dxos/util","kind":"import-statement","external":true},{"path":"packages/sdk/observability/src/cli-observability-secrets.json","kind":"import-statement","original":"./cli-observability-secrets.json"},{"path":"packages/sdk/observability/src/helpers/index.ts","kind":"import-statement","original":"./helpers"},{"path":"packages/sdk/observability/src/segment/index.ts","kind":"import-statement","original":"./segment"},{"path":"packages/sdk/observability/src/otel/index.ts","kind":"dynamic-import","original":"./otel"},{"path":"packages/sdk/observability/src/otel/index.ts","kind":"dynamic-import","original":"./otel"},{"path":"packages/sdk/observability/src/segment/index.ts","kind":"dynamic-import","original":"./segment"},{"path":"packages/sdk/observability/src/sentry/index.ts","kind":"dynamic-import","original":"./sentry"},{"path":"packages/sdk/observability/src/sentry/sentry-log-processor.ts","kind":"dynamic-import","original":"./sentry/sentry-log-processor"},{"path":"packages/sdk/observability/src/otel/index.ts","kind":"dynamic-import","original":"./otel"}],"format":"esm"},"packages/sdk/observability/src/helpers/browser-observability.ts":{"bytes":20102,"imports":[{"path":"localforage","kind":"import-statement","external":true},{"path":"@dxos/log","kind":"import-statement","external":true},{"path":"packages/sdk/observability/src/observability.ts","kind":"dynamic-import","original":"../observability"}],"format":"esm"},"packages/sdk/observability/src/helpers/common.ts":{"bytes":3134,"imports":[],"format":"esm"},"packages/sdk/observability/src/helpers/node-observability.ts":{"bytes":14188,"imports":[{"path":"js-yaml","kind":"import-statement","external":true},{"path":"@dxos/node-std/fs","kind":"import-statement","external":true},{"path":"@dxos/node-std/fs/promises","kind":"import-statement","external":true},{"path":"@dxos/node-std/path","kind":"import-statement","external":true},{"path":"uuid","kind":"import-statement","external":true},{"path":"@dxos/log","kind":"import-statement","external":true},{"path":"packages/sdk/observability/src/observability.ts","kind":"import-statement","original":"../observability"}],"format":"esm"},"packages/sdk/observability/src/helpers/map-spaces.ts":{"bytes":6377,"imports":[],"format":"esm"},"packages/sdk/observability/src/helpers/setup-telemetry-listeners.ts":{"bytes":10352,"imports":[{"path":"packages/sdk/observability/src/helpers/common.ts","kind":"import-statement","original":"./common"}],"format":"esm"},"packages/sdk/observability/src/helpers/index.ts":{"bytes":930,"imports":[{"path":"packages/sdk/observability/src/helpers/browser-observability.ts","kind":"import-statement","original":"./browser-observability"},{"path":"packages/sdk/observability/src/helpers/common.ts","kind":"import-statement","original":"./common"},{"path":"packages/sdk/observability/src/helpers/node-observability.ts","kind":"import-statement","original":"./node-observability"},{"path":"packages/sdk/observability/src/helpers/map-spaces.ts","kind":"import-statement","original":"./map-spaces"},{"path":"packages/sdk/observability/src/helpers/setup-telemetry-listeners.ts","kind":"import-statement","original":"./setup-telemetry-listeners"}],"format":"esm"},"packages/sdk/observability/src/index.ts":{"bytes":566,"imports":[{"path":"packages/sdk/observability/src/helpers/index.ts","kind":"import-statement","original":"./helpers"},{"path":"packages/sdk/observability/src/observability.ts","kind":"import-statement","original":"./observability"}],"format":"esm"}},"outputs":{"packages/sdk/observability/dist/lib/browser/index.mjs.map":{"imports":[],"exports":[],"inputs":{},"bytes":93},"packages/sdk/observability/dist/lib/browser/index.mjs":{"imports":[{"path":"packages/sdk/observability/dist/lib/browser/chunk-YQJELTRP.mjs","kind":"import-statement"},{"path":"packages/sdk/observability/dist/lib/browser/chunk-G6EE7HFV.mjs","kind":"import-statement"},{"path":"packages/sdk/observability/dist/lib/browser/chunk-KDP3SESE.mjs","kind":"import-statement"},{"path":"packages/sdk/observability/dist/lib/browser/chunk-JA5VJRKF.mjs","kind":"import-statement"}],"exports":["OBSERVABILITY_DISABLED_KEY","OBSERVABILITY_GROUP_KEY","Observability","getObservabilityGroup","getObservabilityState","getTelemetryIdentifier","getTelemetryIdentity","initializeAppObservability","initializeNodeObservability","isObservabilityDisabled","mapSpaces","setupTelemetryListeners","showObservabilityBanner","storeObservabilityDisabled","storeObservabilityGroup"],"entryPoint":"packages/sdk/observability/src/index.ts","inputs":{"packages/sdk/observability/src/index.ts":{"bytesInOutput":0}},"bytes":950},"packages/sdk/observability/dist/lib/browser/segment/index.mjs.map":{"imports":[],"exports":[],"inputs":{},"bytes":93},"packages/sdk/observability/dist/lib/browser/segment/index.mjs":{"imports":[{"path":"packages/sdk/observability/dist/lib/browser/chunk-G6EE7HFV.mjs","kind":"import-statement"},{"path":"packages/sdk/observability/dist/lib/browser/chunk-KDP3SESE.mjs","kind":"import-statement"},{"path":"packages/sdk/observability/dist/lib/browser/chunk-JA5VJRKF.mjs","kind":"import-statement"}],"exports":["SegmentTelemetry","TelemetryEvent"],"entryPoint":"packages/sdk/observability/src/segment/index.ts","inputs":{},"bytes":226},"packages/sdk/observability/dist/lib/browser/sentry/index.mjs.map":{"imports":[],"exports":[],"inputs":{},"bytes":93},"packages/sdk/observability/dist/lib/browser/sentry/index.mjs":{"imports":[{"path":"packages/sdk/observability/dist/lib/browser/chunk-KDP3SESE.mjs","kind":"import-statement"},{"path":"packages/sdk/observability/dist/lib/browser/chunk-JA5VJRKF.mjs","kind":"import-statement"}],"exports":["addBreadcrumb","captureException","captureMessage","captureUserFeedback","init","setTag","setTags","setUser","withScope"],"entryPoint":"packages/sdk/observability/src/sentry/index.ts","inputs":{},"bytes":380},"packages/sdk/observability/dist/lib/browser/otel-LHAFLNBQ.mjs.map":{"imports":[],"exports":[],"inputs":{},"bytes":18016},"packages/sdk/observability/dist/lib/browser/otel-LHAFLNBQ.mjs":{"imports":[{"path":"@opentelemetry/api","kind":"import-statement","external":true},{"path":"@opentelemetry/api-logs","kind":"import-statement","external":true},{"path":"@opentelemetry/exporter-logs-otlp-http","kind":"import-statement","external":true},{"path":"@opentelemetry/resources","kind":"import-statement","external":true},{"path":"@opentelemetry/sdk-logs","kind":"import-statement","external":true},{"path":"@opentelemetry/semantic-conventions","kind":"import-statement","external":true},{"path":"@dxos/log","kind":"import-statement","external":true},{"path":"@dxos/util","kind":"import-statement","external":true},{"path":"@opentelemetry/exporter-metrics-otlp-http","kind":"import-statement","external":true},{"path":"@opentelemetry/resources","kind":"import-statement","external":true},{"path":"@opentelemetry/sdk-metrics","kind":"import-statement","external":true},{"path":"@opentelemetry/semantic-conventions","kind":"import-statement","external":true},{"path":"@dxos/log","kind":"import-statement","external":true},{"path":"@dxos/tracing","kind":"import-statement","external":true},{"path":"@opentelemetry/api","kind":"import-statement","external":true},{"path":"@opentelemetry/auto-instrumentations-web","kind":"import-statement","external":true},{"path":"@opentelemetry/exporter-trace-otlp-http","kind":"import-statement","external":true},{"path":"@opentelemetry/instrumentation","kind":"import-statement","external":true},{"path":"@opentelemetry/resources","kind":"import-statement","external":true},{"path":"@opentelemetry/sdk-trace-base","kind":"import-statement","external":true},{"path":"@opentelemetry/sdk-trace-web","kind":"import-statement","external":true},{"path":"@opentelemetry/semantic-conventions","kind":"import-statement","external":true},{"path":"@dxos/log","kind":"import-statement","external":true},{"path":"@dxos/tracing","kind":"import-statement","external":true}],"exports":["OtelLogs","OtelMetrics","OtelTraces","setDiagLogger"],"entryPoint":"packages/sdk/observability/src/otel/index.ts","inputs":{"packages/sdk/observability/src/otel/otel.ts":{"bytesInOutput":229},"packages/sdk/observability/src/otel/index.ts":{"bytesInOutput":0},"packages/sdk/observability/src/otel/logs.ts":{"bytesInOutput":2448},"packages/sdk/observability/src/otel/metrics.ts":{"bytesInOutput":3528},"packages/sdk/observability/src/otel/traces-browser.ts":{"bytesInOutput":2328}},"bytes":8849},"packages/sdk/observability/dist/lib/browser/sentry-log-processor-625AISXI.mjs.map":{"imports":[],"exports":[],"inputs":{},"bytes":10071},"packages/sdk/observability/dist/lib/browser/sentry-log-processor-625AISXI.mjs":{"imports":[{"path":"packages/sdk/observability/dist/lib/browser/chunk-JA5VJRKF.mjs","kind":"import-statement"},{"path":"@dxos/invariant","kind":"import-statement","external":true},{"path":"@dxos/log","kind":"import-statement","external":true},{"path":"@dxos/util","kind":"import-statement","external":true}],"exports":["SentryLogProcessor"],"entryPoint":"packages/sdk/observability/src/sentry/sentry-log-processor.ts","inputs":{"packages/sdk/observability/src/sentry/sentry-log-processor.ts":{"bytesInOutput":4634}},"bytes":4882},"packages/sdk/observability/dist/lib/browser/observability-HDE3I7TA.mjs.map":{"imports":[],"exports":[],"inputs":{},"bytes":93},"packages/sdk/observability/dist/lib/browser/observability-HDE3I7TA.mjs":{"imports":[{"path":"packages/sdk/observability/dist/lib/browser/chunk-YQJELTRP.mjs","kind":"import-statement"},{"path":"packages/sdk/observability/dist/lib/browser/chunk-G6EE7HFV.mjs","kind":"import-statement"},{"path":"packages/sdk/observability/dist/lib/browser/chunk-KDP3SESE.mjs","kind":"import-statement"},{"path":"packages/sdk/observability/dist/lib/browser/chunk-JA5VJRKF.mjs","kind":"import-statement"}],"exports":["Observability"],"entryPoint":"packages/sdk/observability/src/observability.ts","inputs":{},"bytes":229},"packages/sdk/observability/dist/lib/browser/chunk-YQJELTRP.mjs.map":{"imports":[],"exports":[],"inputs":{},"bytes":64517},"packages/sdk/observability/dist/lib/browser/chunk-YQJELTRP.mjs":{"imports":[{"path":"packages/sdk/observability/dist/lib/browser/chunk-G6EE7HFV.mjs","kind":"import-statement"},{"path":"@dxos/async","kind":"import-statement","external":true},{"path":"@dxos/client","kind":"import-statement","external":true},{"path":"@dxos/context","kind":"import-statement","external":true},{"path":"@dxos/invariant","kind":"import-statement","external":true},{"path":"@dxos/log","kind":"import-statement","external":true},{"path":"@dxos/network-manager","kind":"import-statement","external":true},{"path":"@dxos/protocols/proto/dxos/client/services","kind":"import-statement","external":true},{"path":"@dxos/util","kind":"import-statement","external":true},{"path":"localforage","kind":"import-statement","external":true},{"path":"@dxos/log","kind":"import-statement","external":true},{"path":"packages/sdk/observability/dist/lib/browser/observability-HDE3I7TA.mjs","kind":"dynamic-import"},{"path":"js-yaml","kind":"import-statement","external":true},{"path":"@dxos/node-std/fs","kind":"import-statement","external":true},{"path":"@dxos/node-std/fs/promises","kind":"import-statement","external":true},{"path":"@dxos/node-std/path","kind":"import-statement","external":true},{"path":"uuid","kind":"import-statement","external":true},{"path":"@dxos/log","kind":"import-statement","external":true},{"path":"packages/sdk/observability/dist/lib/browser/otel-LHAFLNBQ.mjs","kind":"dynamic-import"},{"path":"packages/sdk/observability/dist/lib/browser/otel-LHAFLNBQ.mjs","kind":"dynamic-import"},{"path":"packages/sdk/observability/dist/lib/browser/segment/index.mjs","kind":"dynamic-import"},{"path":"packages/sdk/observability/dist/lib/browser/sentry/index.mjs","kind":"dynamic-import"},{"path":"packages/sdk/observability/dist/lib/browser/sentry-log-processor-625AISXI.mjs","kind":"dynamic-import"},{"path":"packages/sdk/observability/dist/lib/browser/otel-LHAFLNBQ.mjs","kind":"dynamic-import"}],"exports":["OBSERVABILITY_DISABLED_KEY","OBSERVABILITY_GROUP_KEY","Observability","getObservabilityGroup","getObservabilityState","getTelemetryIdentifier","getTelemetryIdentity","initializeAppObservability","initializeNodeObservability","isObservabilityDisabled","mapSpaces","setupTelemetryListeners","showObservabilityBanner","storeObservabilityDisabled","storeObservabilityGroup"],"inputs":{"packages/sdk/observability/src/observability.ts":{"bytesInOutput":19467},"packages/sdk/observability/src/cli-observability-secrets.json":{"bytesInOutput":625},"packages/sdk/observability/src/helpers/browser-observability.ts":{"bytesInOutput":5045},"packages/sdk/observability/src/helpers/index.ts":{"bytesInOutput":0},"packages/sdk/observability/src/helpers/common.ts":{"bytesInOutput":324},"packages/sdk/observability/src/helpers/node-observability.ts":{"bytesInOutput":3445},"packages/sdk/observability/src/helpers/map-spaces.ts":{"bytesInOutput":1192},"packages/sdk/observability/src/helpers/setup-telemetry-listeners.ts":{"bytesInOutput":2542}},"bytes":33624},"packages/sdk/observability/dist/lib/browser/chunk-G6EE7HFV.mjs.map":{"imports":[],"exports":[],"inputs":{},"bytes":7711},"packages/sdk/observability/dist/lib/browser/chunk-G6EE7HFV.mjs":{"imports":[{"path":"packages/sdk/observability/dist/lib/browser/chunk-JA5VJRKF.mjs","kind":"import-statement"},{"path":"@segment/snippet","kind":"import-statement","external":true},{"path":"@dxos/log","kind":"import-statement","external":true},{"path":"@dxos/log","kind":"import-statement","external":true}],"exports":["SegmentTelemetry","TelemetryEvent"],"inputs":{"packages/sdk/observability/src/segment/browser.ts":{"bytesInOutput":1959},"packages/sdk/observability/src/segment/base.ts":{"bytesInOutput":1096},"packages/sdk/observability/src/segment/types.ts":{"bytesInOutput":180},"packages/sdk/observability/src/segment/index.ts":{"bytesInOutput":0}},"bytes":3650},"packages/sdk/observability/dist/lib/browser/chunk-KDP3SESE.mjs.map":{"imports":[],"exports":[],"inputs":{},"bytes":93},"packages/sdk/observability/dist/lib/browser/chunk-KDP3SESE.mjs":{"imports":[],"exports":[],"inputs":{"packages/sdk/observability/src/sentry/index.ts":{"bytesInOutput":0}},"bytes":44},"packages/sdk/observability/dist/lib/browser/chunk-JA5VJRKF.mjs.map":{"imports":[],"exports":[],"inputs":{},"bytes":7321},"packages/sdk/observability/dist/lib/browser/chunk-JA5VJRKF.mjs":{"imports":[{"path":"@sentry/browser","kind":"import-statement","external":true},{"path":"@dxos/log","kind":"import-statement","external":true},{"path":"@dxos/tracing","kind":"import-statement","external":true},{"path":"@sentry/browser","kind":"import-statement","external":true}],"exports":["addBreadcrumb","captureException","captureMessage","captureUserFeedback","init","setTag","setTags","setUser","withScope"],"inputs":{"packages/sdk/observability/src/sentry/browser.ts":{"bytesInOutput":4076}},"bytes":4326}}}
1
+ {"inputs":{"src/storage/browser.ts":{"bytes":8238,"imports":[{"path":"localforage","kind":"import-statement","external":true},{"path":"@dxos/log","kind":"import-statement","external":true},{"path":"@dxos/util","kind":"import-statement","external":true}],"format":"esm"},"src/storage/index.ts":{"bytes":368,"imports":[{"path":"src/storage/browser.ts","kind":"import-statement","original":"./node"}],"format":"esm"},"src/observability.ts":{"bytes":28473,"imports":[{"path":"effect/Array","kind":"import-statement","external":true},{"path":"effect/Effect","kind":"import-statement","external":true},{"path":"effect/Function","kind":"import-statement","external":true},{"path":"@dxos/async","kind":"import-statement","external":true},{"path":"@dxos/invariant","kind":"import-statement","external":true},{"path":"@dxos/log","kind":"import-statement","external":true},{"path":"src/storage/index.ts","kind":"import-statement","original":"./storage"}],"format":"esm"},"src/cli-observability-secrets.json":{"bytes":165,"imports":[]},"src/extensions/stub.ts":{"bytes":1689,"imports":[{"path":"effect/Effect","kind":"import-statement","external":true}],"format":"esm"},"src/extensions/otel/otel.ts":{"bytes":1614,"imports":[{"path":"@opentelemetry/api","kind":"import-statement","external":true}],"format":"esm"},"src/extensions/otel/logs.ts":{"bytes":13957,"imports":[{"path":"@opentelemetry/api-logs","kind":"import-statement","external":true},{"path":"@opentelemetry/exporter-logs-otlp-http","kind":"import-statement","external":true},{"path":"@opentelemetry/sdk-logs","kind":"import-statement","external":true},{"path":"@opentelemetry/semantic-conventions","kind":"import-statement","external":true},{"path":"@dxos/log","kind":"import-statement","external":true},{"path":"src/extensions/otel/otel.ts","kind":"import-statement","original":"./otel"}],"format":"esm"},"src/extensions/otel/metrics.ts":{"bytes":12109,"imports":[{"path":"@opentelemetry/exporter-metrics-otlp-http","kind":"import-statement","external":true},{"path":"@opentelemetry/sdk-metrics","kind":"import-statement","external":true},{"path":"@dxos/log","kind":"import-statement","external":true},{"path":"@dxos/tracing","kind":"import-statement","external":true},{"path":"src/extensions/otel/otel.ts","kind":"import-statement","original":"./otel"}],"format":"esm"},"src/extensions/otel/span-processors.ts":{"bytes":4354,"imports":[{"path":"@dxos/log","kind":"import-statement","external":true}],"format":"esm"},"src/extensions/otel/traces-browser.ts":{"bytes":17012,"imports":[{"path":"@opentelemetry/api","kind":"import-statement","external":true},{"path":"@opentelemetry/auto-instrumentations-web","kind":"import-statement","external":true},{"path":"@opentelemetry/core","kind":"import-statement","external":true},{"path":"@opentelemetry/exporter-trace-otlp-http","kind":"import-statement","external":true},{"path":"@opentelemetry/instrumentation","kind":"import-statement","external":true},{"path":"@opentelemetry/sdk-trace-base","kind":"import-statement","external":true},{"path":"@opentelemetry/sdk-trace-web","kind":"import-statement","external":true},{"path":"@opentelemetry/semantic-conventions","kind":"import-statement","external":true},{"path":"@dxos/log","kind":"import-statement","external":true},{"path":"@dxos/tracing","kind":"import-statement","external":true},{"path":"src/extensions/otel/span-processors.ts","kind":"import-statement","original":"./span-processors"}],"format":"esm"},"src/extensions/otel/extension.ts":{"bytes":30547,"imports":[{"path":"@opentelemetry/resources","kind":"import-statement","external":true},{"path":"@opentelemetry/semantic-conventions","kind":"import-statement","external":true},{"path":"effect/Effect","kind":"import-statement","external":true},{"path":"effect/Match","kind":"import-statement","external":true},{"path":"effect/Option","kind":"import-statement","external":true},{"path":"effect/Ref","kind":"import-statement","external":true},{"path":"@dxos/config","kind":"import-statement","external":true},{"path":"@dxos/log","kind":"import-statement","external":true},{"path":"@dxos/util","kind":"import-statement","external":true},{"path":"src/cli-observability-secrets.json","kind":"import-statement","original":"../../cli-observability-secrets.json"},{"path":"src/storage/index.ts","kind":"import-statement","original":"../../storage"},{"path":"src/extensions/stub.ts","kind":"import-statement","original":"../stub"},{"path":"src/extensions/otel/logs.ts","kind":"dynamic-import","original":"./logs"},{"path":"src/extensions/otel/metrics.ts","kind":"dynamic-import","original":"./metrics"},{"path":"src/extensions/otel/traces-browser.ts","kind":"dynamic-import","original":"./traces"}],"format":"esm"},"src/extensions/otel/index.ts":{"bytes":377,"imports":[{"path":"src/extensions/otel/extension.ts","kind":"import-statement","original":"./extension"}],"format":"esm"},"src/extensions/posthog/log-processor.ts":{"bytes":5374,"imports":[{"path":"posthog-js","kind":"import-statement","external":true},{"path":"@dxos/invariant","kind":"import-statement","external":true},{"path":"@dxos/log","kind":"import-statement","external":true}],"format":"esm"},"src/extensions/posthog/extension.ts":{"bytes":21160,"imports":[{"path":"effect/Effect","kind":"import-statement","external":true},{"path":"@dxos/log","kind":"import-statement","external":true},{"path":"src/extensions/stub.ts","kind":"import-statement","original":"../stub"},{"path":"posthog-js","kind":"dynamic-import","external":true},{"path":"src/extensions/posthog/log-processor.ts","kind":"dynamic-import","original":"./log-processor"}],"format":"esm"},"src/extensions/posthog/index.ts":{"bytes":377,"imports":[{"path":"src/extensions/posthog/extension.ts","kind":"import-statement","original":"./extension"}],"format":"esm"},"src/extensions/index.ts":{"bytes":562,"imports":[{"path":"src/extensions/otel/index.ts","kind":"import-statement","original":"./otel"},{"path":"src/extensions/posthog/index.ts","kind":"import-statement","original":"./posthog"}],"format":"esm"},"src/observability-extension.ts":{"bytes":4034,"imports":[{"path":"src/extensions/index.ts","kind":"import-statement","original":"./extensions"}],"format":"esm"},"src/providers/client-observability.ts":{"bytes":35900,"imports":[{"path":"effect/Effect","kind":"import-statement","external":true},{"path":"@dxos/async","kind":"import-statement","external":true},{"path":"@dxos/client/halo","kind":"import-statement","external":true},{"path":"@dxos/context","kind":"import-statement","external":true},{"path":"@dxos/invariant","kind":"import-statement","external":true},{"path":"@dxos/log","kind":"import-statement","external":true},{"path":"@dxos/protocols/proto/dxos/client/services","kind":"import-statement","external":true}],"format":"esm"},"src/providers/ip-data.ts":{"bytes":9579,"imports":[{"path":"@effect/platform/FetchHttpClient","kind":"import-statement","external":true},{"path":"@effect/platform/HttpClient","kind":"import-statement","external":true},{"path":"@effect/platform/HttpClientRequest","kind":"import-statement","external":true},{"path":"effect/Effect","kind":"import-statement","external":true},{"path":"effect/Schema","kind":"import-statement","external":true},{"path":"localforage","kind":"import-statement","external":true},{"path":"@dxos/log","kind":"import-statement","external":true}],"format":"esm"},"src/providers/storage.ts":{"bytes":3514,"imports":[{"path":"effect/Duration","kind":"import-statement","external":true},{"path":"effect/Effect","kind":"import-statement","external":true},{"path":"effect/Fiber","kind":"import-statement","external":true},{"path":"effect/Schedule","kind":"import-statement","external":true}],"format":"esm"},"src/providers/index.ts":{"bytes":749,"imports":[{"path":"src/providers/client-observability.ts","kind":"import-statement","original":"./client-observability"},{"path":"src/providers/ip-data.ts","kind":"import-statement","original":"./ip-data"},{"path":"src/providers/storage.ts","kind":"import-statement","original":"./storage"}],"format":"esm"},"src/index.ts":{"bytes":921,"imports":[{"path":"src/observability.ts","kind":"import-statement","original":"./observability"},{"path":"src/observability-extension.ts","kind":"import-statement","original":"./observability-extension"},{"path":"src/providers/index.ts","kind":"import-statement","original":"./providers"}],"format":"esm"}},"outputs":{"dist/lib/browser/index.mjs.map":{"imports":[],"exports":[],"inputs":{},"bytes":69516},"dist/lib/browser/index.mjs":{"imports":[{"path":"dist/lib/browser/chunk-J5LGTIGS.mjs","kind":"import-statement"},{"path":"effect/Array","kind":"import-statement","external":true},{"path":"effect/Effect","kind":"import-statement","external":true},{"path":"effect/Function","kind":"import-statement","external":true},{"path":"@dxos/async","kind":"import-statement","external":true},{"path":"@dxos/invariant","kind":"import-statement","external":true},{"path":"@dxos/log","kind":"import-statement","external":true},{"path":"localforage","kind":"import-statement","external":true},{"path":"@dxos/log","kind":"import-statement","external":true},{"path":"@dxos/util","kind":"import-statement","external":true},{"path":"@opentelemetry/resources","kind":"import-statement","external":true},{"path":"@opentelemetry/semantic-conventions","kind":"import-statement","external":true},{"path":"effect/Effect","kind":"import-statement","external":true},{"path":"effect/Match","kind":"import-statement","external":true},{"path":"effect/Option","kind":"import-statement","external":true},{"path":"effect/Ref","kind":"import-statement","external":true},{"path":"@dxos/config","kind":"import-statement","external":true},{"path":"@dxos/log","kind":"import-statement","external":true},{"path":"@dxos/util","kind":"import-statement","external":true},{"path":"effect/Effect","kind":"import-statement","external":true},{"path":"dist/lib/browser/logs-A2VDAHHD.mjs","kind":"dynamic-import"},{"path":"dist/lib/browser/metrics-6OSN54ZV.mjs","kind":"dynamic-import"},{"path":"dist/lib/browser/traces-browser-6MRGAKFC.mjs","kind":"dynamic-import"},{"path":"effect/Effect","kind":"import-statement","external":true},{"path":"@dxos/log","kind":"import-statement","external":true},{"path":"posthog-js","kind":"dynamic-import","external":true},{"path":"dist/lib/browser/log-processor-HPHWNBOK.mjs","kind":"dynamic-import"},{"path":"effect/Effect","kind":"import-statement","external":true},{"path":"@dxos/async","kind":"import-statement","external":true},{"path":"@dxos/client/halo","kind":"import-statement","external":true},{"path":"@dxos/context","kind":"import-statement","external":true},{"path":"@dxos/invariant","kind":"import-statement","external":true},{"path":"@dxos/log","kind":"import-statement","external":true},{"path":"@dxos/protocols/proto/dxos/client/services","kind":"import-statement","external":true},{"path":"@effect/platform/FetchHttpClient","kind":"import-statement","external":true},{"path":"@effect/platform/HttpClient","kind":"import-statement","external":true},{"path":"@effect/platform/HttpClientRequest","kind":"import-statement","external":true},{"path":"effect/Effect","kind":"import-statement","external":true},{"path":"effect/Schema","kind":"import-statement","external":true},{"path":"localforage","kind":"import-statement","external":true},{"path":"@dxos/log","kind":"import-statement","external":true},{"path":"effect/Duration","kind":"import-statement","external":true},{"path":"effect/Effect","kind":"import-statement","external":true},{"path":"effect/Fiber","kind":"import-statement","external":true},{"path":"effect/Schedule","kind":"import-statement","external":true}],"exports":["Observability","ObservabilityExtension","ObservabilityProvider"],"entryPoint":"src/index.ts","inputs":{"src/observability.ts":{"bytesInOutput":7593},"src/storage/browser.ts":{"bytesInOutput":1956},"src/index.ts":{"bytesInOutput":0},"src/observability-extension.ts":{"bytesInOutput":151},"src/extensions/otel/index.ts":{"bytesInOutput":83},"src/extensions/otel/extension.ts":{"bytesInOutput":6533},"src/cli-observability-secrets.json":{"bytesInOutput":199},"src/extensions/stub.ts":{"bytesInOutput":311},"src/extensions/index.ts":{"bytesInOutput":0},"src/extensions/posthog/index.ts":{"bytesInOutput":90},"src/extensions/posthog/extension.ts":{"bytesInOutput":5398},"src/providers/index.ts":{"bytesInOutput":174},"src/providers/client-observability.ts":{"bytesInOutput":8977},"src/providers/ip-data.ts":{"bytesInOutput":2205},"src/providers/storage.ts":{"bytesInOutput":895}},"bytes":35299},"dist/lib/browser/logs-A2VDAHHD.mjs.map":{"imports":[],"exports":[],"inputs":{},"bytes":7463},"dist/lib/browser/logs-A2VDAHHD.mjs":{"imports":[{"path":"dist/lib/browser/chunk-3534PNWM.mjs","kind":"import-statement"},{"path":"dist/lib/browser/chunk-J5LGTIGS.mjs","kind":"import-statement"},{"path":"@opentelemetry/api-logs","kind":"import-statement","external":true},{"path":"@opentelemetry/exporter-logs-otlp-http","kind":"import-statement","external":true},{"path":"@opentelemetry/sdk-logs","kind":"import-statement","external":true},{"path":"@opentelemetry/semantic-conventions","kind":"import-statement","external":true},{"path":"@dxos/log","kind":"import-statement","external":true}],"exports":["OtelLogs"],"entryPoint":"src/extensions/otel/logs.ts","inputs":{"src/extensions/otel/logs.ts":{"bytesInOutput":3142}},"bytes":3327},"dist/lib/browser/metrics-6OSN54ZV.mjs.map":{"imports":[],"exports":[],"inputs":{},"bytes":5560},"dist/lib/browser/metrics-6OSN54ZV.mjs":{"imports":[{"path":"dist/lib/browser/chunk-3534PNWM.mjs","kind":"import-statement"},{"path":"dist/lib/browser/chunk-J5LGTIGS.mjs","kind":"import-statement"},{"path":"@opentelemetry/exporter-metrics-otlp-http","kind":"import-statement","external":true},{"path":"@opentelemetry/sdk-metrics","kind":"import-statement","external":true},{"path":"@dxos/log","kind":"import-statement","external":true},{"path":"@dxos/tracing","kind":"import-statement","external":true}],"exports":["OtelMetrics"],"entryPoint":"src/extensions/otel/metrics.ts","inputs":{"src/extensions/otel/metrics.ts":{"bytesInOutput":2980}},"bytes":3174},"dist/lib/browser/chunk-3534PNWM.mjs.map":{"imports":[],"exports":[],"inputs":{},"bytes":965},"dist/lib/browser/chunk-3534PNWM.mjs":{"imports":[{"path":"@opentelemetry/api","kind":"import-statement","external":true}],"exports":["setDiagLogger"],"inputs":{"src/extensions/otel/otel.ts":{"bytesInOutput":229}},"bytes":333},"dist/lib/browser/traces-browser-6MRGAKFC.mjs.map":{"imports":[],"exports":[],"inputs":{},"bytes":10034},"dist/lib/browser/traces-browser-6MRGAKFC.mjs":{"imports":[{"path":"dist/lib/browser/chunk-J5LGTIGS.mjs","kind":"import-statement"},{"path":"@opentelemetry/api","kind":"import-statement","external":true},{"path":"@opentelemetry/auto-instrumentations-web","kind":"import-statement","external":true},{"path":"@opentelemetry/core","kind":"import-statement","external":true},{"path":"@opentelemetry/exporter-trace-otlp-http","kind":"import-statement","external":true},{"path":"@opentelemetry/instrumentation","kind":"import-statement","external":true},{"path":"@opentelemetry/sdk-trace-base","kind":"import-statement","external":true},{"path":"@opentelemetry/sdk-trace-web","kind":"import-statement","external":true},{"path":"@opentelemetry/semantic-conventions","kind":"import-statement","external":true},{"path":"@dxos/log","kind":"import-statement","external":true},{"path":"@dxos/tracing","kind":"import-statement","external":true},{"path":"@dxos/log","kind":"import-statement","external":true}],"exports":["OtelTraces"],"entryPoint":"src/extensions/otel/traces-browser.ts","inputs":{"src/extensions/otel/traces-browser.ts":{"bytesInOutput":4705},"src/extensions/otel/span-processors.ts":{"bytesInOutput":644}},"bytes":5585},"dist/lib/browser/log-processor-HPHWNBOK.mjs.map":{"imports":[],"exports":[],"inputs":{},"bytes":2898},"dist/lib/browser/log-processor-HPHWNBOK.mjs":{"imports":[{"path":"dist/lib/browser/chunk-J5LGTIGS.mjs","kind":"import-statement"},{"path":"posthog-js","kind":"import-statement","external":true},{"path":"@dxos/invariant","kind":"import-statement","external":true},{"path":"@dxos/log","kind":"import-statement","external":true}],"exports":["logProcessor"],"entryPoint":"src/extensions/posthog/log-processor.ts","inputs":{"src/extensions/posthog/log-processor.ts":{"bytesInOutput":1175}},"bytes":1329},"dist/lib/browser/chunk-J5LGTIGS.mjs.map":{"imports":[],"exports":[],"inputs":{},"bytes":93},"dist/lib/browser/chunk-J5LGTIGS.mjs":{"imports":[],"exports":["__export"],"inputs":{},"bytes":235}}}