@dxos/observability 0.8.4-main.dedc0f3 → 0.8.4-main.dfabb4ec29

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 (325) 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 +2 -11
  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/extensions/otel/otel.js.map +1 -0
  54. package/dist/types/src/extensions/otel/span-processors.d.ts +25 -0
  55. package/dist/types/src/extensions/otel/span-processors.d.ts.map +1 -0
  56. package/dist/types/src/extensions/otel/span-processors.js +41 -0
  57. package/dist/types/src/extensions/otel/span-processors.js.map +1 -0
  58. package/dist/types/src/extensions/otel/traces-browser.d.ts +25 -0
  59. package/dist/types/src/extensions/otel/traces-browser.d.ts.map +1 -0
  60. package/dist/types/src/extensions/otel/traces-browser.js +104 -0
  61. package/dist/types/src/extensions/otel/traces-browser.js.map +1 -0
  62. package/dist/types/src/extensions/otel/traces.d.ts +25 -0
  63. package/dist/types/src/extensions/otel/traces.d.ts.map +1 -0
  64. package/dist/types/src/extensions/otel/traces.js +87 -0
  65. package/dist/types/src/extensions/otel/traces.js.map +1 -0
  66. package/dist/types/src/extensions/posthog/extension.d.ts +22 -0
  67. package/dist/types/src/extensions/posthog/extension.d.ts.map +1 -0
  68. package/dist/types/src/extensions/posthog/extension.js +144 -0
  69. package/dist/types/src/extensions/posthog/extension.js.map +1 -0
  70. package/dist/types/src/extensions/posthog/index.d.ts +2 -0
  71. package/dist/types/src/extensions/posthog/index.d.ts.map +1 -0
  72. package/dist/types/src/extensions/posthog/index.js +5 -0
  73. package/dist/types/src/extensions/posthog/index.js.map +1 -0
  74. package/dist/types/src/extensions/posthog/log-processor.d.ts +3 -0
  75. package/dist/types/src/extensions/posthog/log-processor.d.ts.map +1 -0
  76. package/dist/types/src/extensions/posthog/log-processor.js +36 -0
  77. package/dist/types/src/extensions/posthog/log-processor.js.map +1 -0
  78. package/dist/types/src/extensions/posthog/log-processor.test.d.ts +2 -0
  79. package/dist/types/src/extensions/posthog/log-processor.test.d.ts.map +1 -0
  80. package/dist/types/src/extensions/posthog/log-processor.test.js +146 -0
  81. package/dist/types/src/extensions/posthog/log-processor.test.js.map +1 -0
  82. package/dist/types/src/extensions/stub.d.ts +3 -0
  83. package/dist/types/src/extensions/stub.d.ts.map +1 -0
  84. package/dist/types/src/extensions/stub.js +16 -0
  85. package/dist/types/src/extensions/stub.js.map +1 -0
  86. package/dist/types/src/index.d.ts +3 -2
  87. package/dist/types/src/index.d.ts.map +1 -1
  88. package/dist/types/src/index.js +4 -3
  89. package/dist/types/src/index.js.map +1 -1
  90. package/dist/types/src/observability-extension.d.ts +74 -0
  91. package/dist/types/src/observability-extension.d.ts.map +1 -0
  92. package/dist/types/src/observability-extension.js +5 -0
  93. package/dist/types/src/observability-extension.js.map +1 -0
  94. package/dist/types/src/observability.d.ts +32 -110
  95. package/dist/types/src/observability.d.ts.map +1 -1
  96. package/dist/types/src/observability.js +177 -465
  97. package/dist/types/src/observability.js.map +1 -1
  98. package/dist/types/src/observability.test.d.ts +2 -0
  99. package/dist/types/src/observability.test.d.ts.map +1 -0
  100. package/dist/types/src/observability.test.js +312 -0
  101. package/dist/types/src/observability.test.js.map +1 -0
  102. package/dist/types/src/providers/client-observability.d.ts +11 -0
  103. package/dist/types/src/providers/client-observability.d.ts.map +1 -0
  104. package/dist/types/src/providers/client-observability.js +202 -0
  105. package/dist/types/src/providers/client-observability.js.map +1 -0
  106. package/dist/types/src/providers/index.d.ts +4 -0
  107. package/dist/types/src/providers/index.d.ts.map +1 -0
  108. package/dist/types/src/providers/index.js +7 -0
  109. package/dist/types/src/providers/index.js.map +1 -0
  110. package/dist/types/src/providers/ip-data.d.ts +5 -0
  111. package/dist/types/src/providers/ip-data.d.ts.map +1 -0
  112. package/dist/types/src/providers/ip-data.js +57 -0
  113. package/dist/types/src/providers/ip-data.js.map +1 -0
  114. package/dist/types/src/providers/storage.d.ts +3 -0
  115. package/dist/types/src/providers/storage.d.ts.map +1 -0
  116. package/dist/types/src/providers/storage.js +19 -0
  117. package/dist/types/src/providers/storage.js.map +1 -0
  118. package/dist/types/src/storage/browser.d.ts +19 -0
  119. package/dist/types/src/storage/browser.d.ts.map +1 -0
  120. package/dist/types/src/storage/browser.js +69 -0
  121. package/dist/types/src/storage/browser.js.map +1 -0
  122. package/dist/types/src/storage/index.d.ts +2 -0
  123. package/dist/types/src/storage/index.d.ts.map +1 -0
  124. package/dist/types/src/storage/index.js.map +1 -0
  125. package/dist/types/src/storage/node.d.ts +26 -0
  126. package/dist/types/src/storage/node.d.ts.map +1 -0
  127. package/dist/types/src/{helpers/node-observability.js → storage/node.js} +38 -43
  128. package/dist/types/src/storage/node.js.map +1 -0
  129. package/dist/types/src/storage/node.test.d.ts +2 -0
  130. package/dist/types/src/storage/node.test.d.ts.map +1 -0
  131. package/dist/types/src/storage/node.test.js +103 -0
  132. package/dist/types/src/storage/node.test.js.map +1 -0
  133. package/dist/types/tsconfig.tsbuildinfo +1 -1
  134. package/package.json +46 -66
  135. package/src/cli-observability-secrets.json +3 -4
  136. package/src/extensions/index.ts +6 -0
  137. package/src/extensions/otel/extension.ts +258 -0
  138. package/src/extensions/otel/index.ts +5 -0
  139. package/src/extensions/otel/logs.ts +137 -0
  140. package/src/{otel → extensions/otel}/metrics.ts +3 -20
  141. package/src/{otel → extensions/otel}/otel.ts +3 -3
  142. package/src/extensions/otel/span-processors.ts +45 -0
  143. package/src/extensions/otel/traces-browser.ts +139 -0
  144. package/src/extensions/otel/traces.ts +113 -0
  145. package/src/extensions/posthog/extension.ts +181 -0
  146. package/src/extensions/posthog/index.ts +5 -0
  147. package/src/extensions/posthog/log-processor.test.ts +186 -0
  148. package/src/extensions/posthog/log-processor.ts +43 -0
  149. package/src/extensions/stub.ts +19 -0
  150. package/src/index.ts +4 -3
  151. package/src/observability-extension.ts +94 -0
  152. package/src/observability.test.ts +531 -0
  153. package/src/observability.ts +236 -577
  154. package/src/providers/client-observability.ts +255 -0
  155. package/src/providers/index.ts +7 -0
  156. package/src/providers/ip-data.ts +91 -0
  157. package/src/providers/storage.ts +23 -0
  158. package/src/storage/browser.ts +71 -0
  159. package/src/{segment → storage}/index.ts +0 -1
  160. package/src/storage/node.test.ts +129 -0
  161. package/src/{helpers/node-observability.ts → storage/node.ts} +41 -71
  162. package/src/vite-import-meta.d.ts +14 -0
  163. package/dist/lib/browser/chunk-5ICT2XF2.mjs +0 -1
  164. package/dist/lib/browser/chunk-LJO63BXO.mjs +0 -164
  165. package/dist/lib/browser/chunk-LJO63BXO.mjs.map +0 -7
  166. package/dist/lib/browser/chunk-MB7KKARJ.mjs +0 -1025
  167. package/dist/lib/browser/chunk-MB7KKARJ.mjs.map +0 -7
  168. package/dist/lib/browser/chunk-VSEBD3XA.mjs +0 -161
  169. package/dist/lib/browser/chunk-VSEBD3XA.mjs.map +0 -7
  170. package/dist/lib/browser/observability-NZM3OOLO.mjs +0 -10
  171. package/dist/lib/browser/otel-UHLVSR24.mjs +0 -325
  172. package/dist/lib/browser/otel-UHLVSR24.mjs.map +0 -7
  173. package/dist/lib/browser/segment/index.mjs +0 -11
  174. package/dist/lib/browser/segment/index.mjs.map +0 -7
  175. package/dist/lib/browser/sentry/index.mjs +0 -24
  176. package/dist/lib/browser/sentry/index.mjs.map +0 -7
  177. package/dist/lib/browser/sentry-log-processor-RG4CFVGL.mjs +0 -162
  178. package/dist/lib/browser/sentry-log-processor-RG4CFVGL.mjs.map +0 -7
  179. package/dist/lib/node-esm/chunk-GOWQOSY6.mjs +0 -229
  180. package/dist/lib/node-esm/chunk-GOWQOSY6.mjs.map +0 -7
  181. package/dist/lib/node-esm/chunk-QK5IUYVA.mjs +0 -135
  182. package/dist/lib/node-esm/chunk-QK5IUYVA.mjs.map +0 -7
  183. package/dist/lib/node-esm/chunk-QUZL7LKE.mjs +0 -2
  184. package/dist/lib/node-esm/chunk-QUZL7LKE.mjs.map +0 -7
  185. package/dist/lib/node-esm/chunk-YLYRR73V.mjs +0 -1026
  186. package/dist/lib/node-esm/chunk-YLYRR73V.mjs.map +0 -7
  187. package/dist/lib/node-esm/observability-2CTGITMR.mjs +0 -11
  188. package/dist/lib/node-esm/observability-2CTGITMR.mjs.map +0 -7
  189. package/dist/lib/node-esm/otel-W6KWKVW5.mjs +0 -308
  190. package/dist/lib/node-esm/otel-W6KWKVW5.mjs.map +0 -7
  191. package/dist/lib/node-esm/segment/index.mjs +0 -12
  192. package/dist/lib/node-esm/segment/index.mjs.map +0 -7
  193. package/dist/lib/node-esm/sentry/index.mjs +0 -25
  194. package/dist/lib/node-esm/sentry/index.mjs.map +0 -7
  195. package/dist/lib/node-esm/sentry-log-processor-3BDS4BB4.mjs +0 -163
  196. package/dist/lib/node-esm/sentry-log-processor-3BDS4BB4.mjs.map +0 -7
  197. package/dist/types/src/helpers/browser-observability.d.ts +0 -17
  198. package/dist/types/src/helpers/browser-observability.d.ts.map +0 -1
  199. package/dist/types/src/helpers/browser-observability.js +0 -138
  200. package/dist/types/src/helpers/browser-observability.js.map +0 -1
  201. package/dist/types/src/helpers/common.d.ts +0 -12
  202. package/dist/types/src/helpers/common.d.ts.map +0 -1
  203. package/dist/types/src/helpers/common.js +0 -23
  204. package/dist/types/src/helpers/common.js.map +0 -1
  205. package/dist/types/src/helpers/index.d.ts +0 -6
  206. package/dist/types/src/helpers/index.d.ts.map +0 -1
  207. package/dist/types/src/helpers/index.js +0 -9
  208. package/dist/types/src/helpers/index.js.map +0 -1
  209. package/dist/types/src/helpers/map-spaces.d.ts +0 -18
  210. package/dist/types/src/helpers/map-spaces.d.ts.map +0 -1
  211. package/dist/types/src/helpers/map-spaces.js +0 -36
  212. package/dist/types/src/helpers/map-spaces.js.map +0 -1
  213. package/dist/types/src/helpers/node-observability.d.ts +0 -24
  214. package/dist/types/src/helpers/node-observability.d.ts.map +0 -1
  215. package/dist/types/src/helpers/node-observability.js.map +0 -1
  216. package/dist/types/src/helpers/setup-telemetry-listeners.d.ts +0 -4
  217. package/dist/types/src/helpers/setup-telemetry-listeners.d.ts.map +0 -1
  218. package/dist/types/src/helpers/setup-telemetry-listeners.js +0 -94
  219. package/dist/types/src/helpers/setup-telemetry-listeners.js.map +0 -1
  220. package/dist/types/src/otel/index.d.ts +0 -5
  221. package/dist/types/src/otel/index.d.ts.map +0 -1
  222. package/dist/types/src/otel/index.js +0 -8
  223. package/dist/types/src/otel/index.js.map +0 -1
  224. package/dist/types/src/otel/logs.d.ts.map +0 -1
  225. package/dist/types/src/otel/logs.js +0 -72
  226. package/dist/types/src/otel/logs.js.map +0 -1
  227. package/dist/types/src/otel/metrics.d.ts.map +0 -1
  228. package/dist/types/src/otel/metrics.js.map +0 -1
  229. package/dist/types/src/otel/otel.d.ts.map +0 -1
  230. package/dist/types/src/otel/otel.js.map +0 -1
  231. package/dist/types/src/otel/traces-browser.d.ts +0 -8
  232. package/dist/types/src/otel/traces-browser.d.ts.map +0 -1
  233. package/dist/types/src/otel/traces-browser.js +0 -49
  234. package/dist/types/src/otel/traces-browser.js.map +0 -1
  235. package/dist/types/src/otel/traces.d.ts +0 -8
  236. package/dist/types/src/otel/traces.d.ts.map +0 -1
  237. package/dist/types/src/otel/traces.js +0 -42
  238. package/dist/types/src/otel/traces.js.map +0 -1
  239. package/dist/types/src/segment/base.d.ts +0 -15
  240. package/dist/types/src/segment/base.d.ts.map +0 -1
  241. package/dist/types/src/segment/base.js +0 -51
  242. package/dist/types/src/segment/base.js.map +0 -1
  243. package/dist/types/src/segment/browser.d.ts +0 -15
  244. package/dist/types/src/segment/browser.d.ts.map +0 -1
  245. package/dist/types/src/segment/browser.js +0 -63
  246. package/dist/types/src/segment/browser.js.map +0 -1
  247. package/dist/types/src/segment/index.d.ts +0 -3
  248. package/dist/types/src/segment/index.d.ts.map +0 -1
  249. package/dist/types/src/segment/index.js +0 -6
  250. package/dist/types/src/segment/index.js.map +0 -1
  251. package/dist/types/src/segment/node.d.ts +0 -16
  252. package/dist/types/src/segment/node.d.ts.map +0 -1
  253. package/dist/types/src/segment/node.js +0 -84
  254. package/dist/types/src/segment/node.js.map +0 -1
  255. package/dist/types/src/segment/types.d.ts +0 -52
  256. package/dist/types/src/segment/types.d.ts.map +0 -1
  257. package/dist/types/src/segment/types.js +0 -18
  258. package/dist/types/src/segment/types.js.map +0 -1
  259. package/dist/types/src/sentry/browser.d.ts +0 -32
  260. package/dist/types/src/sentry/browser.d.ts.map +0 -1
  261. package/dist/types/src/sentry/browser.js +0 -110
  262. package/dist/types/src/sentry/browser.js.map +0 -1
  263. package/dist/types/src/sentry/index.d.ts +0 -3
  264. package/dist/types/src/sentry/index.d.ts.map +0 -1
  265. package/dist/types/src/sentry/index.js.map +0 -1
  266. package/dist/types/src/sentry/node.d.ts +0 -32
  267. package/dist/types/src/sentry/node.d.ts.map +0 -1
  268. package/dist/types/src/sentry/node.js +0 -106
  269. package/dist/types/src/sentry/node.js.map +0 -1
  270. package/dist/types/src/sentry/node.node.test.d.ts +0 -2
  271. package/dist/types/src/sentry/node.node.test.d.ts.map +0 -1
  272. package/dist/types/src/sentry/node.node.test.js +0 -32
  273. package/dist/types/src/sentry/node.node.test.js.map +0 -1
  274. package/dist/types/src/sentry/sentry-log-processor.d.ts +0 -9
  275. package/dist/types/src/sentry/sentry-log-processor.d.ts.map +0 -1
  276. package/dist/types/src/sentry/sentry-log-processor.js +0 -144
  277. package/dist/types/src/sentry/sentry-log-processor.js.map +0 -1
  278. package/dist/types/src/sentry/sentry.node.test.d.ts +0 -2
  279. package/dist/types/src/sentry/sentry.node.test.d.ts.map +0 -1
  280. package/dist/types/src/sentry/sentry.node.test.js +0 -28
  281. package/dist/types/src/sentry/sentry.node.test.js.map +0 -1
  282. package/dist/types/src/sentry/types.d.ts +0 -18
  283. package/dist/types/src/sentry/types.d.ts.map +0 -1
  284. package/dist/types/src/sentry/types.js +0 -4
  285. package/dist/types/src/sentry/types.js.map +0 -1
  286. package/dist/types/src/testing/index.d.ts +0 -2
  287. package/dist/types/src/testing/index.d.ts.map +0 -1
  288. package/dist/types/src/testing/index.js +0 -5
  289. package/dist/types/src/testing/index.js.map +0 -1
  290. package/dist/types/src/testing/testkit/browser.d.ts +0 -2
  291. package/dist/types/src/testing/testkit/browser.d.ts.map +0 -1
  292. package/dist/types/src/testing/testkit/browser.js +0 -7
  293. package/dist/types/src/testing/testkit/browser.js.map +0 -1
  294. package/dist/types/src/testing/testkit/index.d.ts +0 -2
  295. package/dist/types/src/testing/testkit/index.d.ts.map +0 -1
  296. package/dist/types/src/testing/testkit/index.js +0 -6
  297. package/dist/types/src/testing/testkit/index.js.map +0 -1
  298. package/src/helpers/browser-observability.ts +0 -178
  299. package/src/helpers/common.ts +0 -38
  300. package/src/helpers/index.ts +0 -9
  301. package/src/helpers/map-spaces.ts +0 -48
  302. package/src/helpers/setup-telemetry-listeners.ts +0 -109
  303. package/src/otel/index.ts +0 -8
  304. package/src/otel/logs.ts +0 -100
  305. package/src/otel/traces-browser.ts +0 -59
  306. package/src/otel/traces.ts +0 -57
  307. package/src/segment/base.ts +0 -69
  308. package/src/segment/browser.ts +0 -69
  309. package/src/segment/node.ts +0 -95
  310. package/src/segment/types.ts +0 -57
  311. package/src/sentry/browser.ts +0 -133
  312. package/src/sentry/index.ts +0 -6
  313. package/src/sentry/node.node.test.ts +0 -40
  314. package/src/sentry/node.ts +0 -126
  315. package/src/sentry/sentry-log-processor.ts +0 -174
  316. package/src/sentry/sentry.node.test.ts +0 -35
  317. package/src/sentry/types.ts +0 -22
  318. package/src/testing/index.ts +0 -5
  319. package/src/testing/testkit/browser.ts +0 -8
  320. package/src/testing/testkit/index.ts +0 -7
  321. package/src/testing/testkit/shims.d.ts +0 -5
  322. /package/dist/lib/browser/{chunk-5ICT2XF2.mjs.map → chunk-J5LGTIGS.mjs.map} +0 -0
  323. /package/dist/lib/{browser/observability-NZM3OOLO.mjs.map → node-esm/chunk-HSLMI22Q.mjs.map} +0 -0
  324. /package/dist/types/src/{otel → extensions/otel}/otel.js +0 -0
  325. /package/dist/types/src/{sentry → storage}/index.js +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":{"src/cli-observability-secrets.json":{"bytes":593,"imports":[]},"src/sentry/browser.ts":{"bytes":15792,"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"},"src/sentry/index.ts":{"bytes":492,"imports":[{"path":"src/sentry/browser.ts","kind":"import-statement","original":"./node"}],"format":"esm"},"src/segment/types.ts":{"bytes":2514,"imports":[],"format":"esm"},"src/segment/base.ts":{"bytes":5630,"imports":[{"path":"@dxos/log","kind":"import-statement","external":true},{"path":"src/segment/types.ts","kind":"import-statement","original":"./types"}],"format":"esm"},"src/segment/browser.ts":{"bytes":7577,"imports":[{"path":"@segment/snippet","kind":"import-statement","external":true},{"path":"@dxos/log","kind":"import-statement","external":true},{"path":"src/sentry/index.ts","kind":"import-statement","original":"../sentry"},{"path":"src/segment/base.ts","kind":"import-statement","original":"./base"}],"format":"esm"},"src/segment/index.ts":{"bytes":534,"imports":[{"path":"src/segment/browser.ts","kind":"import-statement","original":"./node"},{"path":"src/segment/types.ts","kind":"import-statement","original":"./types"}],"format":"esm"},"src/otel/otel.ts":{"bytes":1907,"imports":[{"path":"@opentelemetry/api","kind":"import-statement","external":true}],"format":"esm"},"src/otel/logs.ts":{"bytes":11421,"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":"src/otel/otel.ts","kind":"import-statement","original":"./otel"}],"format":"esm"},"src/otel/metrics.ts":{"bytes":14700,"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":"src/otel/otel.ts","kind":"import-statement","original":"./otel"}],"format":"esm"},"src/otel/traces-browser.ts":{"bytes":8610,"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"},"src/otel/index.ts":{"bytes":699,"imports":[{"path":"src/otel/otel.ts","kind":"import-statement","original":"./otel"},{"path":"src/otel/logs.ts","kind":"import-statement","original":"./logs"},{"path":"src/otel/metrics.ts","kind":"import-statement","original":"./metrics"},{"path":"src/otel/traces-browser.ts","kind":"import-statement","original":"./traces"}],"format":"esm"},"src/sentry/sentry-log-processor.ts":{"bytes":21263,"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":"src/sentry/browser.ts","kind":"import-statement","original":"./node"}],"format":"esm"},"src/observability.ts":{"bytes":78122,"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":"src/cli-observability-secrets.json","kind":"import-statement","original":"./cli-observability-secrets.json"},{"path":"src/helpers/index.ts","kind":"import-statement","original":"./helpers"},{"path":"src/segment/index.ts","kind":"import-statement","original":"./segment"},{"path":"src/otel/index.ts","kind":"dynamic-import","original":"./otel"},{"path":"src/otel/index.ts","kind":"dynamic-import","original":"./otel"},{"path":"src/segment/index.ts","kind":"dynamic-import","original":"./segment"},{"path":"src/sentry/index.ts","kind":"dynamic-import","original":"./sentry"},{"path":"src/sentry/sentry-log-processor.ts","kind":"dynamic-import","original":"./sentry/sentry-log-processor"},{"path":"src/otel/index.ts","kind":"dynamic-import","original":"./otel"}],"format":"esm"},"src/helpers/browser-observability.ts":{"bytes":20088,"imports":[{"path":"localforage","kind":"import-statement","external":true},{"path":"@dxos/log","kind":"import-statement","external":true},{"path":"src/observability.ts","kind":"dynamic-import","original":"../observability"}],"format":"esm"},"src/helpers/common.ts":{"bytes":3121,"imports":[],"format":"esm"},"src/helpers/node-observability.ts":{"bytes":14187,"imports":[{"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":"js-yaml","kind":"import-statement","external":true},{"path":"uuid","kind":"import-statement","external":true},{"path":"@dxos/log","kind":"import-statement","external":true},{"path":"src/observability.ts","kind":"import-statement","original":"../observability"}],"format":"esm"},"src/helpers/map-spaces.ts":{"bytes":6364,"imports":[],"format":"esm"},"src/helpers/setup-telemetry-listeners.ts":{"bytes":10343,"imports":[{"path":"src/helpers/common.ts","kind":"import-statement","original":"./common"}],"format":"esm"},"src/helpers/index.ts":{"bytes":917,"imports":[{"path":"src/helpers/browser-observability.ts","kind":"import-statement","original":"./browser-observability"},{"path":"src/helpers/common.ts","kind":"import-statement","original":"./common"},{"path":"src/helpers/node-observability.ts","kind":"import-statement","original":"./node-observability"},{"path":"src/helpers/map-spaces.ts","kind":"import-statement","original":"./map-spaces"},{"path":"src/helpers/setup-telemetry-listeners.ts","kind":"import-statement","original":"./setup-telemetry-listeners"}],"format":"esm"},"src/index.ts":{"bytes":553,"imports":[{"path":"src/helpers/index.ts","kind":"import-statement","original":"./helpers"},{"path":"src/observability.ts","kind":"import-statement","original":"./observability"}],"format":"esm"}},"outputs":{"dist/lib/browser/index.mjs.map":{"imports":[],"exports":[],"inputs":{},"bytes":93},"dist/lib/browser/index.mjs":{"imports":[{"path":"dist/lib/browser/chunk-MB7KKARJ.mjs","kind":"import-statement"},{"path":"dist/lib/browser/chunk-VSEBD3XA.mjs","kind":"import-statement"},{"path":"dist/lib/browser/chunk-5ICT2XF2.mjs","kind":"import-statement"},{"path":"dist/lib/browser/chunk-LJO63BXO.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":"src/index.ts","inputs":{"src/index.ts":{"bytesInOutput":0}},"bytes":950},"dist/lib/browser/segment/index.mjs.map":{"imports":[],"exports":[],"inputs":{},"bytes":93},"dist/lib/browser/segment/index.mjs":{"imports":[{"path":"dist/lib/browser/chunk-VSEBD3XA.mjs","kind":"import-statement"},{"path":"dist/lib/browser/chunk-5ICT2XF2.mjs","kind":"import-statement"},{"path":"dist/lib/browser/chunk-LJO63BXO.mjs","kind":"import-statement"}],"exports":["SegmentTelemetry","TelemetryEvent"],"entryPoint":"src/segment/index.ts","inputs":{},"bytes":226},"dist/lib/browser/sentry/index.mjs.map":{"imports":[],"exports":[],"inputs":{},"bytes":93},"dist/lib/browser/sentry/index.mjs":{"imports":[{"path":"dist/lib/browser/chunk-5ICT2XF2.mjs","kind":"import-statement"},{"path":"dist/lib/browser/chunk-LJO63BXO.mjs","kind":"import-statement"}],"exports":["addBreadcrumb","captureException","captureMessage","captureUserFeedback","init","setTag","setTags","setUser","withScope"],"entryPoint":"src/sentry/index.ts","inputs":{},"bytes":380},"dist/lib/browser/otel-UHLVSR24.mjs.map":{"imports":[],"exports":[],"inputs":{},"bytes":18302},"dist/lib/browser/otel-UHLVSR24.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":"src/otel/index.ts","inputs":{"src/otel/otel.ts":{"bytesInOutput":229},"src/otel/index.ts":{"bytesInOutput":0},"src/otel/logs.ts":{"bytesInOutput":2850},"src/otel/metrics.ts":{"bytesInOutput":3962},"src/otel/traces-browser.ts":{"bytesInOutput":2660}},"bytes":9909},"dist/lib/browser/sentry-log-processor-RG4CFVGL.mjs.map":{"imports":[],"exports":[],"inputs":{},"bytes":10700},"dist/lib/browser/sentry-log-processor-RG4CFVGL.mjs":{"imports":[{"path":"dist/lib/browser/chunk-LJO63BXO.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":"src/sentry/sentry-log-processor.ts","inputs":{"src/sentry/sentry-log-processor.ts":{"bytesInOutput":5226}},"bytes":5447},"dist/lib/browser/observability-NZM3OOLO.mjs.map":{"imports":[],"exports":[],"inputs":{},"bytes":93},"dist/lib/browser/observability-NZM3OOLO.mjs":{"imports":[{"path":"dist/lib/browser/chunk-MB7KKARJ.mjs","kind":"import-statement"},{"path":"dist/lib/browser/chunk-VSEBD3XA.mjs","kind":"import-statement"},{"path":"dist/lib/browser/chunk-5ICT2XF2.mjs","kind":"import-statement"},{"path":"dist/lib/browser/chunk-LJO63BXO.mjs","kind":"import-statement"}],"exports":["Observability"],"entryPoint":"src/observability.ts","inputs":{},"bytes":229},"dist/lib/browser/chunk-MB7KKARJ.mjs.map":{"imports":[],"exports":[],"inputs":{},"bytes":65012},"dist/lib/browser/chunk-MB7KKARJ.mjs":{"imports":[{"path":"dist/lib/browser/chunk-VSEBD3XA.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":"dist/lib/browser/observability-NZM3OOLO.mjs","kind":"dynamic-import"},{"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":"js-yaml","kind":"import-statement","external":true},{"path":"uuid","kind":"import-statement","external":true},{"path":"@dxos/log","kind":"import-statement","external":true},{"path":"dist/lib/browser/otel-UHLVSR24.mjs","kind":"dynamic-import"},{"path":"dist/lib/browser/otel-UHLVSR24.mjs","kind":"dynamic-import"},{"path":"dist/lib/browser/segment/index.mjs","kind":"dynamic-import"},{"path":"dist/lib/browser/sentry/index.mjs","kind":"dynamic-import"},{"path":"dist/lib/browser/sentry-log-processor-RG4CFVGL.mjs","kind":"dynamic-import"},{"path":"dist/lib/browser/otel-UHLVSR24.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":{"src/observability.ts":{"bytesInOutput":20602},"src/cli-observability-secrets.json":{"bytesInOutput":625},"src/helpers/browser-observability.ts":{"bytesInOutput":5032},"src/helpers/index.ts":{"bytesInOutput":0},"src/helpers/common.ts":{"bytesInOutput":324},"src/helpers/node-observability.ts":{"bytesInOutput":3432},"src/helpers/map-spaces.ts":{"bytesInOutput":1192},"src/helpers/setup-telemetry-listeners.ts":{"bytesInOutput":2542}},"bytes":34517},"dist/lib/browser/chunk-VSEBD3XA.mjs.map":{"imports":[],"exports":[],"inputs":{},"bytes":7727},"dist/lib/browser/chunk-VSEBD3XA.mjs":{"imports":[{"path":"dist/lib/browser/chunk-LJO63BXO.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":{"src/segment/browser.ts":{"bytesInOutput":1946},"src/segment/base.ts":{"bytesInOutput":1379},"src/segment/types.ts":{"bytesInOutput":180},"src/segment/index.ts":{"bytesInOutput":0}},"bytes":3785},"dist/lib/browser/chunk-5ICT2XF2.mjs.map":{"imports":[],"exports":[],"inputs":{},"bytes":93},"dist/lib/browser/chunk-5ICT2XF2.mjs":{"imports":[],"exports":[],"inputs":{"src/sentry/index.ts":{"bytesInOutput":0}},"bytes":44},"dist/lib/browser/chunk-LJO63BXO.mjs.map":{"imports":[],"exports":[],"inputs":{},"bytes":7317},"dist/lib/browser/chunk-LJO63BXO.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":{"src/sentry/browser.ts":{"bytesInOutput":4063}},"bytes":4286}}}
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}}}