@dxos/observability 0.8.3 → 0.8.4-main.1068cf700f

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 (348) hide show
  1. package/dist/lib/browser/chunk-J5LGTIGS.mjs +10 -0
  2. package/dist/lib/browser/chunk-K4VFBKST.mjs +13 -0
  3. package/dist/lib/browser/chunk-K4VFBKST.mjs.map +7 -0
  4. package/dist/lib/browser/index.mjs +1066 -34
  5. package/dist/lib/browser/index.mjs.map +4 -4
  6. package/dist/lib/browser/log-processor-FDLTDQEM.mjs +45 -0
  7. package/dist/lib/browser/log-processor-FDLTDQEM.mjs.map +7 -0
  8. package/dist/lib/browser/logs-ATTRIUTL.mjs +113 -0
  9. package/dist/lib/browser/logs-ATTRIUTL.mjs.map +7 -0
  10. package/dist/lib/browser/meta.json +1 -1
  11. package/dist/lib/browser/metrics-PKTV6IGF.mjs +130 -0
  12. package/dist/lib/browser/metrics-PKTV6IGF.mjs.map +7 -0
  13. package/dist/lib/browser/traces-browser-XYXBF5ZX.mjs +62 -0
  14. package/dist/lib/browser/traces-browser-XYXBF5ZX.mjs.map +7 -0
  15. package/dist/lib/node-esm/chunk-FEVP3MK4.mjs +15 -0
  16. package/dist/lib/node-esm/chunk-FEVP3MK4.mjs.map +7 -0
  17. package/dist/lib/node-esm/chunk-HSLMI22Q.mjs +11 -0
  18. package/dist/lib/node-esm/index.mjs +1070 -34
  19. package/dist/lib/node-esm/index.mjs.map +4 -4
  20. package/dist/lib/node-esm/log-processor-TKJVJJSJ.mjs +46 -0
  21. package/dist/lib/node-esm/log-processor-TKJVJJSJ.mjs.map +7 -0
  22. package/dist/lib/node-esm/logs-7J45KLM7.mjs +114 -0
  23. package/dist/lib/node-esm/logs-7J45KLM7.mjs.map +7 -0
  24. package/dist/lib/node-esm/meta.json +1 -1
  25. package/dist/lib/node-esm/metrics-H7DDLYSG.mjs +131 -0
  26. package/dist/lib/node-esm/metrics-H7DDLYSG.mjs.map +7 -0
  27. package/dist/lib/node-esm/traces-KMTHMYFX.mjs +44 -0
  28. package/dist/lib/node-esm/traces-KMTHMYFX.mjs.map +7 -0
  29. package/dist/types/src/cli-observability-secrets.json +3 -4
  30. package/dist/types/src/extensions/index.d.ts +3 -0
  31. package/dist/types/src/extensions/index.d.ts.map +1 -0
  32. package/dist/types/src/extensions/index.js +6 -0
  33. package/dist/types/src/extensions/index.js.map +1 -0
  34. package/dist/types/src/extensions/otel/extension.d.ts +23 -0
  35. package/dist/types/src/extensions/otel/extension.d.ts.map +1 -0
  36. package/dist/types/src/extensions/otel/extension.js +124 -0
  37. package/dist/types/src/extensions/otel/extension.js.map +1 -0
  38. package/dist/types/src/extensions/otel/index.d.ts +2 -0
  39. package/dist/types/src/extensions/otel/index.d.ts.map +1 -0
  40. package/dist/types/src/extensions/otel/index.js +5 -0
  41. package/dist/types/src/extensions/otel/index.js.map +1 -0
  42. package/dist/types/src/{otel → extensions/otel}/logs.d.ts +4 -3
  43. package/dist/types/src/extensions/otel/logs.d.ts.map +1 -0
  44. package/dist/types/src/extensions/otel/logs.js +104 -0
  45. package/dist/types/src/extensions/otel/logs.js.map +1 -0
  46. package/dist/types/src/{otel → extensions/otel}/metrics.d.ts +0 -1
  47. package/dist/types/src/extensions/otel/metrics.d.ts.map +1 -0
  48. package/dist/types/src/{otel → extensions/otel}/metrics.js +6 -12
  49. package/dist/types/src/extensions/otel/metrics.js.map +1 -0
  50. package/dist/types/src/{otel → extensions/otel}/otel.d.ts +3 -3
  51. package/dist/types/src/extensions/otel/otel.d.ts.map +1 -0
  52. package/dist/types/src/{otel → extensions/otel}/otel.js +1 -1
  53. package/dist/types/src/extensions/otel/otel.js.map +1 -0
  54. package/dist/types/src/extensions/otel/traces-browser.d.ts.map +1 -0
  55. package/dist/types/src/extensions/otel/traces-browser.js +44 -0
  56. package/dist/types/src/extensions/otel/traces-browser.js.map +1 -0
  57. package/dist/types/src/extensions/otel/traces.d.ts.map +1 -0
  58. package/dist/types/src/extensions/otel/traces.js +38 -0
  59. package/dist/types/src/extensions/otel/traces.js.map +1 -0
  60. package/dist/types/src/extensions/posthog/extension.d.ts +15 -0
  61. package/dist/types/src/extensions/posthog/extension.d.ts.map +1 -0
  62. package/dist/types/src/extensions/posthog/extension.js +143 -0
  63. package/dist/types/src/extensions/posthog/extension.js.map +1 -0
  64. package/dist/types/src/extensions/posthog/index.d.ts +2 -0
  65. package/dist/types/src/extensions/posthog/index.d.ts.map +1 -0
  66. package/dist/types/src/extensions/posthog/index.js +5 -0
  67. package/dist/types/src/extensions/posthog/index.js.map +1 -0
  68. package/dist/types/src/extensions/posthog/log-processor.d.ts +3 -0
  69. package/dist/types/src/extensions/posthog/log-processor.d.ts.map +1 -0
  70. package/dist/types/src/extensions/posthog/log-processor.js +45 -0
  71. package/dist/types/src/extensions/posthog/log-processor.js.map +1 -0
  72. package/dist/types/src/extensions/posthog/log-processor.test.d.ts +2 -0
  73. package/dist/types/src/extensions/posthog/log-processor.test.d.ts.map +1 -0
  74. package/dist/types/src/extensions/posthog/log-processor.test.js +146 -0
  75. package/dist/types/src/extensions/posthog/log-processor.test.js.map +1 -0
  76. package/dist/types/src/extensions/stub.d.ts +3 -0
  77. package/dist/types/src/extensions/stub.d.ts.map +1 -0
  78. package/dist/types/src/extensions/stub.js +16 -0
  79. package/dist/types/src/extensions/stub.js.map +1 -0
  80. package/dist/types/src/index.d.ts +4 -2
  81. package/dist/types/src/index.d.ts.map +1 -1
  82. package/dist/types/src/index.js +5 -3
  83. package/dist/types/src/index.js.map +1 -1
  84. package/dist/types/src/log-buffer.d.ts +34 -0
  85. package/dist/types/src/log-buffer.d.ts.map +1 -0
  86. package/dist/types/src/log-buffer.js +70 -0
  87. package/dist/types/src/log-buffer.js.map +1 -0
  88. package/dist/types/src/log-buffer.test.d.ts +2 -0
  89. package/dist/types/src/log-buffer.test.d.ts.map +1 -0
  90. package/dist/types/src/log-buffer.test.js +107 -0
  91. package/dist/types/src/log-buffer.test.js.map +1 -0
  92. package/dist/types/src/observability-extension.d.ts +74 -0
  93. package/dist/types/src/observability-extension.d.ts.map +1 -0
  94. package/dist/types/src/observability-extension.js +5 -0
  95. package/dist/types/src/observability-extension.js.map +1 -0
  96. package/dist/types/src/observability.d.ts +32 -110
  97. package/dist/types/src/observability.d.ts.map +1 -1
  98. package/dist/types/src/observability.js +176 -455
  99. package/dist/types/src/observability.js.map +1 -1
  100. package/dist/types/src/observability.test.d.ts +2 -0
  101. package/dist/types/src/observability.test.d.ts.map +1 -0
  102. package/dist/types/src/observability.test.js +312 -0
  103. package/dist/types/src/observability.test.js.map +1 -0
  104. package/dist/types/src/providers/client-observability.d.ts +11 -0
  105. package/dist/types/src/providers/client-observability.d.ts.map +1 -0
  106. package/dist/types/src/providers/client-observability.js +200 -0
  107. package/dist/types/src/providers/client-observability.js.map +1 -0
  108. package/dist/types/src/providers/index.d.ts +4 -0
  109. package/dist/types/src/providers/index.d.ts.map +1 -0
  110. package/dist/types/src/providers/index.js +7 -0
  111. package/dist/types/src/providers/index.js.map +1 -0
  112. package/dist/types/src/providers/ip-data.d.ts +5 -0
  113. package/dist/types/src/providers/ip-data.d.ts.map +1 -0
  114. package/dist/types/src/providers/ip-data.js +55 -0
  115. package/dist/types/src/providers/ip-data.js.map +1 -0
  116. package/dist/types/src/providers/storage.d.ts +3 -0
  117. package/dist/types/src/providers/storage.d.ts.map +1 -0
  118. package/dist/types/src/providers/storage.js +19 -0
  119. package/dist/types/src/providers/storage.js.map +1 -0
  120. package/dist/types/src/storage/browser.d.ts +19 -0
  121. package/dist/types/src/storage/browser.d.ts.map +1 -0
  122. package/dist/types/src/storage/browser.js +58 -0
  123. package/dist/types/src/storage/browser.js.map +1 -0
  124. package/dist/types/src/storage/index.d.ts +2 -0
  125. package/dist/types/src/storage/index.d.ts.map +1 -0
  126. package/{src/segment/index.ts → dist/types/src/storage/index.js} +1 -2
  127. package/dist/types/src/storage/index.js.map +1 -0
  128. package/dist/types/src/storage/node.d.ts +26 -0
  129. package/dist/types/src/storage/node.d.ts.map +1 -0
  130. package/dist/types/src/storage/node.js +92 -0
  131. package/dist/types/src/storage/node.js.map +1 -0
  132. package/dist/types/src/storage/node.test.d.ts +2 -0
  133. package/dist/types/src/storage/node.test.d.ts.map +1 -0
  134. package/dist/types/src/storage/node.test.js +103 -0
  135. package/dist/types/src/storage/node.test.js.map +1 -0
  136. package/dist/types/tsconfig.tsbuildinfo +1 -1
  137. package/package.json +42 -63
  138. package/src/cli-observability-secrets.json +3 -4
  139. package/src/extensions/index.ts +6 -0
  140. package/src/extensions/otel/extension.ts +178 -0
  141. package/src/extensions/otel/index.ts +5 -0
  142. package/src/extensions/otel/logs.ts +134 -0
  143. package/src/{otel → extensions/otel}/metrics.ts +4 -21
  144. package/src/{otel → extensions/otel}/otel.ts +4 -4
  145. package/src/extensions/otel/traces-browser.ts +57 -0
  146. package/src/extensions/otel/traces.ts +49 -0
  147. package/src/extensions/posthog/extension.ts +172 -0
  148. package/src/extensions/posthog/index.ts +5 -0
  149. package/src/extensions/posthog/log-processor.test.ts +185 -0
  150. package/src/extensions/posthog/log-processor.ts +54 -0
  151. package/src/extensions/stub.ts +19 -0
  152. package/src/index.ts +5 -3
  153. package/src/log-buffer.test.ts +134 -0
  154. package/src/log-buffer.ts +101 -0
  155. package/src/observability-extension.ts +94 -0
  156. package/src/observability.test.ts +531 -0
  157. package/src/observability.ts +236 -577
  158. package/src/providers/client-observability.ts +253 -0
  159. package/src/providers/index.ts +7 -0
  160. package/src/providers/ip-data.ts +88 -0
  161. package/src/providers/storage.ts +23 -0
  162. package/src/storage/browser.ts +61 -0
  163. package/src/{sentry → storage}/index.ts +0 -1
  164. package/src/storage/node.test.ts +130 -0
  165. package/src/{helpers/node-observability.ts → storage/node.ts} +42 -70
  166. package/dist/lib/browser/chunk-G6EE7HFV.mjs +0 -147
  167. package/dist/lib/browser/chunk-G6EE7HFV.mjs.map +0 -7
  168. package/dist/lib/browser/chunk-JA5VJRKF.mjs +0 -164
  169. package/dist/lib/browser/chunk-JA5VJRKF.mjs.map +0 -7
  170. package/dist/lib/browser/chunk-KDP3SESE.mjs +0 -1
  171. package/dist/lib/browser/chunk-YQJELTRP.mjs +0 -996
  172. package/dist/lib/browser/chunk-YQJELTRP.mjs.map +0 -7
  173. package/dist/lib/browser/observability-HDE3I7TA.mjs +0 -10
  174. package/dist/lib/browser/otel-LHAFLNBQ.mjs +0 -277
  175. package/dist/lib/browser/otel-LHAFLNBQ.mjs.map +0 -7
  176. package/dist/lib/browser/segment/index.mjs +0 -11
  177. package/dist/lib/browser/segment/index.mjs.map +0 -7
  178. package/dist/lib/browser/sentry/index.mjs +0 -24
  179. package/dist/lib/browser/sentry/index.mjs.map +0 -7
  180. package/dist/lib/browser/sentry-log-processor-625AISXI.mjs +0 -146
  181. package/dist/lib/browser/sentry-log-processor-625AISXI.mjs.map +0 -7
  182. package/dist/lib/node/chunk-325GAGFA.cjs +0 -213
  183. package/dist/lib/node/chunk-325GAGFA.cjs.map +0 -7
  184. package/dist/lib/node/chunk-BZHVFSLF.cjs +0 -1025
  185. package/dist/lib/node/chunk-BZHVFSLF.cjs.map +0 -7
  186. package/dist/lib/node/chunk-GIYJMZEQ.cjs +0 -2
  187. package/dist/lib/node/chunk-GIYJMZEQ.cjs.map +0 -7
  188. package/dist/lib/node/chunk-MZ3PMDTP.cjs +0 -163
  189. package/dist/lib/node/chunk-MZ3PMDTP.cjs.map +0 -7
  190. package/dist/lib/node/index.cjs +0 -60
  191. package/dist/lib/node/index.cjs.map +0 -7
  192. package/dist/lib/node/meta.json +0 -1
  193. package/dist/lib/node/observability-E2NGRIEN.cjs +0 -32
  194. package/dist/lib/node/observability-E2NGRIEN.cjs.map +0 -7
  195. package/dist/lib/node/otel-VF5YNCR3.cjs +0 -278
  196. package/dist/lib/node/otel-VF5YNCR3.cjs.map +0 -7
  197. package/dist/lib/node/segment/index.cjs +0 -33
  198. package/dist/lib/node/segment/index.cjs.map +0 -7
  199. package/dist/lib/node/sentry/index.cjs +0 -46
  200. package/dist/lib/node/sentry/index.cjs.map +0 -7
  201. package/dist/lib/node/sentry-log-processor-CCV4RL7N.cjs +0 -164
  202. package/dist/lib/node/sentry-log-processor-CCV4RL7N.cjs.map +0 -7
  203. package/dist/lib/node-esm/chunk-AZMSBUWR.mjs +0 -202
  204. package/dist/lib/node-esm/chunk-AZMSBUWR.mjs.map +0 -7
  205. package/dist/lib/node-esm/chunk-H7Y2DDUN.mjs +0 -135
  206. package/dist/lib/node-esm/chunk-H7Y2DDUN.mjs.map +0 -7
  207. package/dist/lib/node-esm/chunk-M7QJLFGR.mjs +0 -997
  208. package/dist/lib/node-esm/chunk-M7QJLFGR.mjs.map +0 -7
  209. package/dist/lib/node-esm/chunk-YJ4KVBWC.mjs +0 -2
  210. package/dist/lib/node-esm/chunk-YJ4KVBWC.mjs.map +0 -7
  211. package/dist/lib/node-esm/observability-7BTI46NM.mjs +0 -11
  212. package/dist/lib/node-esm/observability-7BTI46NM.mjs.map +0 -7
  213. package/dist/lib/node-esm/otel-AF5TSABC.mjs +0 -260
  214. package/dist/lib/node-esm/otel-AF5TSABC.mjs.map +0 -7
  215. package/dist/lib/node-esm/segment/index.mjs +0 -12
  216. package/dist/lib/node-esm/segment/index.mjs.map +0 -7
  217. package/dist/lib/node-esm/sentry/index.mjs +0 -25
  218. package/dist/lib/node-esm/sentry/index.mjs.map +0 -7
  219. package/dist/lib/node-esm/sentry-log-processor-HPUPCMRG.mjs +0 -147
  220. package/dist/lib/node-esm/sentry-log-processor-HPUPCMRG.mjs.map +0 -7
  221. package/dist/types/src/helpers/browser-observability.d.ts +0 -17
  222. package/dist/types/src/helpers/browser-observability.d.ts.map +0 -1
  223. package/dist/types/src/helpers/browser-observability.js +0 -140
  224. package/dist/types/src/helpers/browser-observability.js.map +0 -1
  225. package/dist/types/src/helpers/common.d.ts +0 -12
  226. package/dist/types/src/helpers/common.d.ts.map +0 -1
  227. package/dist/types/src/helpers/common.js +0 -23
  228. package/dist/types/src/helpers/common.js.map +0 -1
  229. package/dist/types/src/helpers/index.d.ts +0 -6
  230. package/dist/types/src/helpers/index.d.ts.map +0 -1
  231. package/dist/types/src/helpers/index.js +0 -9
  232. package/dist/types/src/helpers/index.js.map +0 -1
  233. package/dist/types/src/helpers/map-spaces.d.ts +0 -18
  234. package/dist/types/src/helpers/map-spaces.d.ts.map +0 -1
  235. package/dist/types/src/helpers/map-spaces.js +0 -37
  236. package/dist/types/src/helpers/map-spaces.js.map +0 -1
  237. package/dist/types/src/helpers/node-observability.d.ts +0 -24
  238. package/dist/types/src/helpers/node-observability.d.ts.map +0 -1
  239. package/dist/types/src/helpers/node-observability.js +0 -101
  240. package/dist/types/src/helpers/node-observability.js.map +0 -1
  241. package/dist/types/src/helpers/setup-telemetry-listeners.d.ts +0 -4
  242. package/dist/types/src/helpers/setup-telemetry-listeners.d.ts.map +0 -1
  243. package/dist/types/src/helpers/setup-telemetry-listeners.js +0 -97
  244. package/dist/types/src/helpers/setup-telemetry-listeners.js.map +0 -1
  245. package/dist/types/src/otel/index.d.ts +0 -5
  246. package/dist/types/src/otel/index.d.ts.map +0 -1
  247. package/dist/types/src/otel/index.js +0 -8
  248. package/dist/types/src/otel/index.js.map +0 -1
  249. package/dist/types/src/otel/logs.d.ts.map +0 -1
  250. package/dist/types/src/otel/logs.js +0 -71
  251. package/dist/types/src/otel/logs.js.map +0 -1
  252. package/dist/types/src/otel/metrics.d.ts.map +0 -1
  253. package/dist/types/src/otel/metrics.js.map +0 -1
  254. package/dist/types/src/otel/otel.d.ts.map +0 -1
  255. package/dist/types/src/otel/otel.js.map +0 -1
  256. package/dist/types/src/otel/traces-browser.d.ts.map +0 -1
  257. package/dist/types/src/otel/traces-browser.js +0 -47
  258. package/dist/types/src/otel/traces-browser.js.map +0 -1
  259. package/dist/types/src/otel/traces.d.ts.map +0 -1
  260. package/dist/types/src/otel/traces.js +0 -40
  261. package/dist/types/src/otel/traces.js.map +0 -1
  262. package/dist/types/src/segment/base.d.ts +0 -15
  263. package/dist/types/src/segment/base.d.ts.map +0 -1
  264. package/dist/types/src/segment/base.js +0 -50
  265. package/dist/types/src/segment/base.js.map +0 -1
  266. package/dist/types/src/segment/browser.d.ts +0 -15
  267. package/dist/types/src/segment/browser.d.ts.map +0 -1
  268. package/dist/types/src/segment/browser.js +0 -67
  269. package/dist/types/src/segment/browser.js.map +0 -1
  270. package/dist/types/src/segment/index.d.ts +0 -3
  271. package/dist/types/src/segment/index.d.ts.map +0 -1
  272. package/dist/types/src/segment/index.js +0 -6
  273. package/dist/types/src/segment/index.js.map +0 -1
  274. package/dist/types/src/segment/node.d.ts +0 -16
  275. package/dist/types/src/segment/node.d.ts.map +0 -1
  276. package/dist/types/src/segment/node.js +0 -83
  277. package/dist/types/src/segment/node.js.map +0 -1
  278. package/dist/types/src/segment/types.d.ts +0 -52
  279. package/dist/types/src/segment/types.d.ts.map +0 -1
  280. package/dist/types/src/segment/types.js +0 -18
  281. package/dist/types/src/segment/types.js.map +0 -1
  282. package/dist/types/src/sentry/browser.d.ts +0 -32
  283. package/dist/types/src/sentry/browser.d.ts.map +0 -1
  284. package/dist/types/src/sentry/browser.js +0 -112
  285. package/dist/types/src/sentry/browser.js.map +0 -1
  286. package/dist/types/src/sentry/index.d.ts +0 -3
  287. package/dist/types/src/sentry/index.d.ts.map +0 -1
  288. package/dist/types/src/sentry/index.js +0 -6
  289. package/dist/types/src/sentry/index.js.map +0 -1
  290. package/dist/types/src/sentry/node.d.ts +0 -32
  291. package/dist/types/src/sentry/node.d.ts.map +0 -1
  292. package/dist/types/src/sentry/node.js +0 -111
  293. package/dist/types/src/sentry/node.js.map +0 -1
  294. package/dist/types/src/sentry/node.node.test.d.ts +0 -2
  295. package/dist/types/src/sentry/node.node.test.d.ts.map +0 -1
  296. package/dist/types/src/sentry/node.node.test.js +0 -34
  297. package/dist/types/src/sentry/node.node.test.js.map +0 -1
  298. package/dist/types/src/sentry/sentry-log-processor.d.ts +0 -9
  299. package/dist/types/src/sentry/sentry-log-processor.d.ts.map +0 -1
  300. package/dist/types/src/sentry/sentry-log-processor.js +0 -149
  301. package/dist/types/src/sentry/sentry-log-processor.js.map +0 -1
  302. package/dist/types/src/sentry/sentry.node.test.d.ts +0 -2
  303. package/dist/types/src/sentry/sentry.node.test.d.ts.map +0 -1
  304. package/dist/types/src/sentry/sentry.node.test.js +0 -28
  305. package/dist/types/src/sentry/sentry.node.test.js.map +0 -1
  306. package/dist/types/src/sentry/types.d.ts +0 -18
  307. package/dist/types/src/sentry/types.d.ts.map +0 -1
  308. package/dist/types/src/sentry/types.js +0 -4
  309. package/dist/types/src/sentry/types.js.map +0 -1
  310. package/dist/types/src/testing/index.d.ts +0 -2
  311. package/dist/types/src/testing/index.d.ts.map +0 -1
  312. package/dist/types/src/testing/index.js +0 -5
  313. package/dist/types/src/testing/index.js.map +0 -1
  314. package/dist/types/src/testing/testkit/browser.d.ts +0 -2
  315. package/dist/types/src/testing/testkit/browser.d.ts.map +0 -1
  316. package/dist/types/src/testing/testkit/browser.js +0 -7
  317. package/dist/types/src/testing/testkit/browser.js.map +0 -1
  318. package/dist/types/src/testing/testkit/index.d.ts +0 -2
  319. package/dist/types/src/testing/testkit/index.d.ts.map +0 -1
  320. package/dist/types/src/testing/testkit/index.js +0 -6
  321. package/dist/types/src/testing/testkit/index.js.map +0 -1
  322. package/src/helpers/browser-observability.ts +0 -177
  323. package/src/helpers/common.ts +0 -38
  324. package/src/helpers/index.ts +0 -9
  325. package/src/helpers/map-spaces.ts +0 -48
  326. package/src/helpers/setup-telemetry-listeners.ts +0 -108
  327. package/src/otel/index.ts +0 -8
  328. package/src/otel/logs.ts +0 -100
  329. package/src/otel/traces-browser.ts +0 -59
  330. package/src/otel/traces.ts +0 -57
  331. package/src/segment/base.ts +0 -69
  332. package/src/segment/browser.ts +0 -68
  333. package/src/segment/node.ts +0 -94
  334. package/src/segment/types.ts +0 -57
  335. package/src/sentry/browser.ts +0 -133
  336. package/src/sentry/node.node.test.ts +0 -39
  337. package/src/sentry/node.ts +0 -126
  338. package/src/sentry/sentry-log-processor.ts +0 -166
  339. package/src/sentry/sentry.node.test.ts +0 -34
  340. package/src/sentry/types.ts +0 -22
  341. package/src/testing/index.ts +0 -5
  342. package/src/testing/testkit/browser.ts +0 -8
  343. package/src/testing/testkit/index.ts +0 -7
  344. package/src/testing/testkit/shims.d.ts +0 -5
  345. /package/dist/lib/browser/{chunk-KDP3SESE.mjs.map → chunk-J5LGTIGS.mjs.map} +0 -0
  346. /package/dist/lib/{browser/observability-HDE3I7TA.mjs.map → node-esm/chunk-HSLMI22Q.mjs.map} +0 -0
  347. /package/dist/types/src/{otel → extensions/otel}/traces-browser.d.ts +0 -0
  348. /package/dist/types/src/{otel → extensions/otel}/traces.d.ts +0 -0
@@ -0,0 +1,131 @@
1
+ import { createRequire } from 'node:module';const require = createRequire(import.meta.url);
2
+ import {
3
+ setDiagLogger
4
+ } from "./chunk-FEVP3MK4.mjs";
5
+ import "./chunk-HSLMI22Q.mjs";
6
+
7
+ // src/extensions/otel/metrics.ts
8
+ import { OTLPMetricExporter } from "@opentelemetry/exporter-metrics-otlp-http";
9
+ import { MeterProvider, PeriodicExportingMetricReader } from "@opentelemetry/sdk-metrics";
10
+ import { log } from "@dxos/log";
11
+ import { TRACE_PROCESSOR } from "@dxos/tracing";
12
+ var __dxlog_file = "/__w/dxos/dxos/packages/sdk/observability/src/extensions/otel/metrics.ts";
13
+ var EXPORT_INTERVAL = 60 * 1e3;
14
+ var OtelMetrics = class {
15
+ options;
16
+ _meterProvider;
17
+ _meter;
18
+ constructor(options) {
19
+ this.options = options;
20
+ setDiagLogger(options.consoleDiagLogLevel);
21
+ const grafanaMetricReader = new PeriodicExportingMetricReader({
22
+ exporter: new OTLPMetricExporter({
23
+ url: this.options.endpoint + "/v1/metrics",
24
+ headers: this.options.headers
25
+ }),
26
+ exportIntervalMillis: EXPORT_INTERVAL
27
+ });
28
+ this._meterProvider = new MeterProvider({
29
+ resource: this.options.resource,
30
+ readers: [
31
+ grafanaMetricReader
32
+ ]
33
+ });
34
+ this._meter = this._meterProvider.getMeter("dxos-observability");
35
+ const metrics = {
36
+ // TODO: update metrics names and remove prefix?
37
+ increment: (name, value, data) => {
38
+ this.increment(name, value, convertTags(data));
39
+ },
40
+ distribution: (name, value, data) => {
41
+ this.distribution(name, value, convertTags(data));
42
+ },
43
+ set: (name, value, data) => {
44
+ },
45
+ gauge: (name, value, data) => {
46
+ this.gauge(name, value, convertTags(data));
47
+ }
48
+ };
49
+ TRACE_PROCESSOR.remoteMetrics.registerProcessor(metrics);
50
+ }
51
+ gauge(name, value, tags) {
52
+ const gauge = this._meter.createGauge(name);
53
+ log("otel gauge", {
54
+ name,
55
+ value,
56
+ tags: {
57
+ ...this.options.getTags(),
58
+ ...tags
59
+ }
60
+ }, {
61
+ F: __dxlog_file,
62
+ L: 60,
63
+ S: this,
64
+ C: (f, a) => f(...a)
65
+ });
66
+ gauge.record(value, {
67
+ ...this.options.getTags(),
68
+ ...tags
69
+ });
70
+ }
71
+ increment(name, value, tags) {
72
+ const counter = this._meter.createCounter(name);
73
+ log("otel counter", {
74
+ name,
75
+ value,
76
+ tags: {
77
+ ...this.options.getTags(),
78
+ ...tags
79
+ }
80
+ }, {
81
+ F: __dxlog_file,
82
+ L: 66,
83
+ S: this,
84
+ C: (f, a) => f(...a)
85
+ });
86
+ counter.add(value ?? 1, {
87
+ ...this.options.getTags(),
88
+ ...tags
89
+ });
90
+ }
91
+ distribution(name, value, tags) {
92
+ const distribution = this._meter.createHistogram(name);
93
+ log("otel distribution", {
94
+ name,
95
+ value,
96
+ tags: {
97
+ ...this.options.getTags(),
98
+ ...tags
99
+ }
100
+ }, {
101
+ F: __dxlog_file,
102
+ L: 72,
103
+ S: this,
104
+ C: (f, a) => f(...a)
105
+ });
106
+ distribution.record(value, {
107
+ ...this.options.getTags(),
108
+ ...tags
109
+ });
110
+ }
111
+ flush() {
112
+ return this._meterProvider.forceFlush();
113
+ }
114
+ close() {
115
+ return this._meterProvider.shutdown();
116
+ }
117
+ };
118
+ var convertTags = (data) => {
119
+ if (data && data.tags) {
120
+ return Object.entries(data.tags).reduce((obj, [key, value]) => {
121
+ obj[key] = value;
122
+ return obj;
123
+ }, {});
124
+ } else {
125
+ return {};
126
+ }
127
+ };
128
+ export {
129
+ OtelMetrics
130
+ };
131
+ //# sourceMappingURL=metrics-H7DDLYSG.mjs.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/extensions/otel/metrics.ts"],
4
+ "sourcesContent": ["//\n// Copyright 2024 DXOS.org\n//\n\nimport { type Meter } from '@opentelemetry/api';\nimport { OTLPMetricExporter } from '@opentelemetry/exporter-metrics-otlp-http';\nimport { MeterProvider, PeriodicExportingMetricReader } from '@opentelemetry/sdk-metrics';\n\nimport { log } from '@dxos/log';\nimport { type MetricData, TRACE_PROCESSOR } from '@dxos/tracing';\n\nimport { type OtelOptions, setDiagLogger } from './otel';\n\nconst EXPORT_INTERVAL = 60 * 1000;\n\nexport class OtelMetrics {\n private _meterProvider: MeterProvider;\n private _meter: Meter;\n\n constructor(private readonly options: OtelOptions) {\n // TODO: improve error handling/logging\n // https://github.com/open-telemetry/opentelemetry-js/issues/4823\n setDiagLogger(options.consoleDiagLogLevel);\n\n const grafanaMetricReader = new PeriodicExportingMetricReader({\n exporter: new OTLPMetricExporter({\n url: this.options.endpoint + '/v1/metrics',\n headers: this.options.headers,\n }),\n exportIntervalMillis: EXPORT_INTERVAL,\n });\n\n this._meterProvider = new MeterProvider({\n resource: this.options.resource,\n readers: [grafanaMetricReader],\n });\n this._meter = this._meterProvider.getMeter('dxos-observability');\n\n const metrics = {\n // TODO: update metrics names and remove prefix?\n increment: (name: string, value?: number, data?: MetricData) => {\n this.increment(name, value, convertTags(data));\n },\n distribution: (name: string, value: number, data?: MetricData) => {\n this.distribution(name, value, convertTags(data));\n },\n set: (name: string, value: number | string, data?: MetricData) => {\n // Not implemented, not part of Otel spec.\n },\n gauge: (name: string, value: number, data?: MetricData) => {\n this.gauge(name, value, convertTags(data));\n },\n };\n\n TRACE_PROCESSOR.remoteMetrics.registerProcessor(metrics);\n }\n\n gauge(name: string, value: number, tags?: any): void {\n const gauge = this._meter.createGauge(name);\n log('otel gauge', { name, value, tags: { ...this.options.getTags(), ...tags } });\n gauge.record(value, { ...this.options.getTags(), ...tags });\n }\n\n increment(name: string, value?: number, tags?: any): void {\n const counter = this._meter.createCounter(name);\n log('otel counter', { name, value, tags: { ...this.options.getTags(), ...tags } });\n counter.add(value ?? 1, { ...this.options.getTags(), ...tags });\n }\n\n distribution(name: string, value: number, tags?: any): void {\n const distribution = this._meter.createHistogram(name);\n log('otel distribution', { name, value, tags: { ...this.options.getTags(), ...tags } });\n distribution.record(value, { ...this.options.getTags(), ...tags });\n }\n\n flush(): Promise<void> {\n return this._meterProvider.forceFlush();\n }\n\n close(): Promise<void> {\n return this._meterProvider.shutdown();\n }\n}\n\nconst convertTags = (data?: MetricData) => {\n if (data && data.tags) {\n return Object.entries(data.tags).reduce<{ [key: string]: any }>((obj, [key, value]) => {\n obj[key] = value;\n return obj;\n }, {});\n } else {\n return {};\n }\n};\n"],
5
+ "mappings": ";;;;;;;AAKA,SAASA,0BAA0B;AACnC,SAASC,eAAeC,qCAAqC;AAE7D,SAASC,WAAW;AACpB,SAA0BC,uBAAuB;;AAIjD,IAAMC,kBAAkB,KAAK;AAEtB,IAAMC,cAAN,MAAMA;;EACHC;EACAC;EAER,YAA6BC,SAAsB;SAAtBA,UAAAA;AAG3BC,kBAAcD,QAAQE,mBAAmB;AAEzC,UAAMC,sBAAsB,IAAIC,8BAA8B;MAC5DC,UAAU,IAAIC,mBAAmB;QAC/BC,KAAK,KAAKP,QAAQQ,WAAW;QAC7BC,SAAS,KAAKT,QAAQS;MACxB,CAAA;MACAC,sBAAsBd;IACxB,CAAA;AAEA,SAAKE,iBAAiB,IAAIa,cAAc;MACtCC,UAAU,KAAKZ,QAAQY;MACvBC,SAAS;QAACV;;IACZ,CAAA;AACA,SAAKJ,SAAS,KAAKD,eAAegB,SAAS,oBAAA;AAE3C,UAAMC,UAAU;;MAEdC,WAAW,CAACC,MAAcC,OAAgBC,SAAAA;AACxC,aAAKH,UAAUC,MAAMC,OAAOE,YAAYD,IAAAA,CAAAA;MAC1C;MACAE,cAAc,CAACJ,MAAcC,OAAeC,SAAAA;AAC1C,aAAKE,aAAaJ,MAAMC,OAAOE,YAAYD,IAAAA,CAAAA;MAC7C;MACAG,KAAK,CAACL,MAAcC,OAAwBC,SAAAA;MAE5C;MACAI,OAAO,CAACN,MAAcC,OAAeC,SAAAA;AACnC,aAAKI,MAAMN,MAAMC,OAAOE,YAAYD,IAAAA,CAAAA;MACtC;IACF;AAEAK,oBAAgBC,cAAcC,kBAAkBX,OAAAA;EAClD;EAEAQ,MAAMN,MAAcC,OAAeS,MAAkB;AACnD,UAAMJ,QAAQ,KAAKxB,OAAO6B,YAAYX,IAAAA;AACtCY,QAAI,cAAc;MAAEZ;MAAMC;MAAOS,MAAM;QAAE,GAAG,KAAK3B,QAAQ8B,QAAO;QAAI,GAAGH;MAAK;IAAE,GAAA;;;;;;AAC9EJ,UAAMQ,OAAOb,OAAO;MAAE,GAAG,KAAKlB,QAAQ8B,QAAO;MAAI,GAAGH;IAAK,CAAA;EAC3D;EAEAX,UAAUC,MAAcC,OAAgBS,MAAkB;AACxD,UAAMK,UAAU,KAAKjC,OAAOkC,cAAchB,IAAAA;AAC1CY,QAAI,gBAAgB;MAAEZ;MAAMC;MAAOS,MAAM;QAAE,GAAG,KAAK3B,QAAQ8B,QAAO;QAAI,GAAGH;MAAK;IAAE,GAAA;;;;;;AAChFK,YAAQE,IAAIhB,SAAS,GAAG;MAAE,GAAG,KAAKlB,QAAQ8B,QAAO;MAAI,GAAGH;IAAK,CAAA;EAC/D;EAEAN,aAAaJ,MAAcC,OAAeS,MAAkB;AAC1D,UAAMN,eAAe,KAAKtB,OAAOoC,gBAAgBlB,IAAAA;AACjDY,QAAI,qBAAqB;MAAEZ;MAAMC;MAAOS,MAAM;QAAE,GAAG,KAAK3B,QAAQ8B,QAAO;QAAI,GAAGH;MAAK;IAAE,GAAA;;;;;;AACrFN,iBAAaU,OAAOb,OAAO;MAAE,GAAG,KAAKlB,QAAQ8B,QAAO;MAAI,GAAGH;IAAK,CAAA;EAClE;EAEAS,QAAuB;AACrB,WAAO,KAAKtC,eAAeuC,WAAU;EACvC;EAEAC,QAAuB;AACrB,WAAO,KAAKxC,eAAeyC,SAAQ;EACrC;AACF;AAEA,IAAMnB,cAAc,CAACD,SAAAA;AACnB,MAAIA,QAAQA,KAAKQ,MAAM;AACrB,WAAOa,OAAOC,QAAQtB,KAAKQ,IAAI,EAAEe,OAA+B,CAACC,KAAK,CAACC,KAAK1B,KAAAA,MAAM;AAChFyB,UAAIC,GAAAA,IAAO1B;AACX,aAAOyB;IACT,GAAG,CAAC,CAAA;EACN,OAAO;AACL,WAAO,CAAC;EACV;AACF;",
6
+ "names": ["OTLPMetricExporter", "MeterProvider", "PeriodicExportingMetricReader", "log", "TRACE_PROCESSOR", "EXPORT_INTERVAL", "OtelMetrics", "_meterProvider", "_meter", "options", "setDiagLogger", "consoleDiagLogLevel", "grafanaMetricReader", "PeriodicExportingMetricReader", "exporter", "OTLPMetricExporter", "url", "endpoint", "headers", "exportIntervalMillis", "MeterProvider", "resource", "readers", "getMeter", "metrics", "increment", "name", "value", "data", "convertTags", "distribution", "set", "gauge", "TRACE_PROCESSOR", "remoteMetrics", "registerProcessor", "tags", "createGauge", "log", "getTags", "record", "counter", "createCounter", "add", "createHistogram", "flush", "forceFlush", "close", "shutdown", "Object", "entries", "reduce", "obj", "key"]
7
+ }
@@ -0,0 +1,44 @@
1
+ import { createRequire } from 'node:module';const require = createRequire(import.meta.url);
2
+ import "./chunk-HSLMI22Q.mjs";
3
+
4
+ // src/extensions/otel/traces.ts
5
+ import { trace } from "@opentelemetry/api";
6
+ import { OTLPTraceExporter } from "@opentelemetry/exporter-trace-otlp-http";
7
+ import { BasicTracerProvider, BatchSpanProcessor } from "@opentelemetry/sdk-trace-base";
8
+ import { ATTR_SERVICE_VERSION } from "@opentelemetry/semantic-conventions";
9
+ import { log } from "debug";
10
+ import { TRACE_PROCESSOR } from "@dxos/tracing";
11
+ var OtelTraces = class {
12
+ options;
13
+ _tracer;
14
+ constructor(options) {
15
+ this.options = options;
16
+ const tracerProvider = new BasicTracerProvider({
17
+ resource: this.options.resource,
18
+ spanProcessors: [
19
+ new BatchSpanProcessor(new OTLPTraceExporter({
20
+ url: this.options.endpoint + "/v1/traces",
21
+ headers: this.options.headers,
22
+ concurrencyLimit: 10
23
+ }))
24
+ ]
25
+ });
26
+ trace.setGlobalTracerProvider(tracerProvider);
27
+ this._tracer = trace.getTracer("dxos-observability", this.options.resource.attributes[ATTR_SERVICE_VERSION]?.toString());
28
+ }
29
+ start() {
30
+ log("trace processor registered");
31
+ TRACE_PROCESSOR.remoteTracing.registerProcessor({
32
+ startSpan: (options) => {
33
+ log("begin otel trace", {
34
+ options
35
+ });
36
+ return this._tracer.startSpan(options.name, options);
37
+ }
38
+ });
39
+ }
40
+ };
41
+ export {
42
+ OtelTraces
43
+ };
44
+ //# sourceMappingURL=traces-KMTHMYFX.mjs.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/extensions/otel/traces.ts"],
4
+ "sourcesContent": ["//\n// Copyright 2024 DXOS.org\n//\n\nimport { type Tracer, trace } from '@opentelemetry/api';\nimport { OTLPTraceExporter } from '@opentelemetry/exporter-trace-otlp-http';\nimport { BasicTracerProvider, BatchSpanProcessor } from '@opentelemetry/sdk-trace-base';\nimport { ATTR_SERVICE_VERSION } from '@opentelemetry/semantic-conventions';\nimport { log } from 'debug';\n\nimport { type StartSpanOptions, TRACE_PROCESSOR } from '@dxos/tracing';\n\nimport { type OtelOptions } from './otel';\n\nexport class OtelTraces {\n private _tracer: Tracer;\n\n constructor(private readonly options: OtelOptions) {\n const tracerProvider = new BasicTracerProvider({\n resource: this.options.resource,\n spanProcessors: [\n new BatchSpanProcessor(\n new OTLPTraceExporter({\n url: this.options.endpoint + '/v1/traces',\n headers: this.options.headers,\n concurrencyLimit: 10, // an optional limit on pending requests\n }),\n ),\n ],\n });\n\n trace.setGlobalTracerProvider(tracerProvider);\n this._tracer = trace.getTracer(\n 'dxos-observability',\n this.options.resource.attributes[ATTR_SERVICE_VERSION]?.toString(),\n );\n }\n\n public start(): void {\n log('trace processor registered');\n\n TRACE_PROCESSOR.remoteTracing.registerProcessor({\n startSpan: (options: StartSpanOptions) => {\n log('begin otel trace', { options });\n return this._tracer.startSpan(options.name, options);\n },\n });\n }\n}\n"],
5
+ "mappings": ";;;;AAIA,SAAsBA,aAAa;AACnC,SAASC,yBAAyB;AAClC,SAASC,qBAAqBC,0BAA0B;AACxD,SAASC,4BAA4B;AACrC,SAASC,WAAW;AAEpB,SAAgCC,uBAAuB;AAIhD,IAAMC,aAAN,MAAMA;;EACHC;EAER,YAA6BC,SAAsB;SAAtBA,UAAAA;AAC3B,UAAMC,iBAAiB,IAAIC,oBAAoB;MAC7CC,UAAU,KAAKH,QAAQG;MACvBC,gBAAgB;QACd,IAAIC,mBACF,IAAIC,kBAAkB;UACpBC,KAAK,KAAKP,QAAQQ,WAAW;UAC7BC,SAAS,KAAKT,QAAQS;UACtBC,kBAAkB;QACpB,CAAA,CAAA;;IAGN,CAAA;AAEAC,UAAMC,wBAAwBX,cAAAA;AAC9B,SAAKF,UAAUY,MAAME,UACnB,sBACA,KAAKb,QAAQG,SAASW,WAAWC,oBAAAA,GAAuBC,SAAAA,CAAAA;EAE5D;EAEOC,QAAc;AACnBC,QAAI,4BAAA;AAEJC,oBAAgBC,cAAcC,kBAAkB;MAC9CC,WAAW,CAACtB,YAAAA;AACVkB,YAAI,oBAAoB;UAAElB;QAAQ,CAAA;AAClC,eAAO,KAAKD,QAAQuB,UAAUtB,QAAQuB,MAAMvB,OAAAA;MAC9C;IACF,CAAA;EACF;AACF;",
6
+ "names": ["trace", "OTLPTraceExporter", "BasicTracerProvider", "BatchSpanProcessor", "ATTR_SERVICE_VERSION", "log", "TRACE_PROCESSOR", "OtelTraces", "_tracer", "options", "tracerProvider", "BasicTracerProvider", "resource", "spanProcessors", "BatchSpanProcessor", "OTLPTraceExporter", "url", "endpoint", "headers", "concurrencyLimit", "trace", "setGlobalTracerProvider", "getTracer", "attributes", "ATTR_SERVICE_VERSION", "toString", "start", "log", "TRACE_PROCESSOR", "remoteTracing", "registerProcessor", "startSpan", "name"]
7
+ }
@@ -1,7 +1,6 @@
1
1
  {
2
- "SENTRY_DESTINATION": "https://2647916221e643869965e78469479aa4@o4504012000067584.ingest.sentry.io/4504012027265029",
3
- "TELEMETRY_API_KEY": "B00QG6PtJJrJ0VVFe0H5a6bcUUShKyZM",
2
+ "POSTHOG_API_KEY": null,
4
3
  "IPDATA_API_KEY": "73dfdecdf979c18f07d50cf841bbdd9e589f237256326ac8cca23786",
5
- "OTEL_ENDPOINT": "https://otlp-proxy.dxos.workers.dev",
6
- "OTEL_AUTHORIZATION": "Basic OTA3MzIzOmdsY19leUp2SWpvaU1URXdNVEl6TnlJc0ltNGlPaUp6ZEdGamF5MDVNRGN6TWpNdGFXNTBaV2R5WVhScGIyNHRZMnh2ZFdSbWJHRnlaUzF2ZEd4d0xYQnliM2g1SWl3aWF5STZJalZ2Tkd4cFYydE5iRmszTlRNMGJUVXpTemRTVjNBeVNpSXNJbTBpT25zaWNpSTZJbkJ5YjJRdGRYTXRaV0Z6ZEMwd0luMTk="
4
+ "OTEL_ENDPOINT": "https://ingest.eu.signoz.cloud:443",
5
+ "OTEL_HEADERS": "signoz-ingestion-key: 5300e0c9-a5e8-4a10-9c61-f473e539c0b7"
7
6
  }
@@ -0,0 +1,3 @@
1
+ export * as Otel from './otel';
2
+ export * as PostHog from './posthog';
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/extensions/index.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,IAAI,MAAM,QAAQ,CAAC;AAC/B,OAAO,KAAK,OAAO,MAAM,WAAW,CAAC"}
@@ -0,0 +1,6 @@
1
+ //
2
+ // Copyright 2025 DXOS.org
3
+ //
4
+ export * as Otel from './otel';
5
+ export * as PostHog from './posthog';
6
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/extensions/index.ts"],"names":[],"mappings":"AAAA,EAAE;AACF,0BAA0B;AAC1B,EAAE;AAEF,OAAO,KAAK,IAAI,MAAM,QAAQ,CAAC;AAC/B,OAAO,KAAK,OAAO,MAAM,WAAW,CAAC"}
@@ -0,0 +1,23 @@
1
+ import * as Effect from 'effect/Effect';
2
+ import { type Config } from '@dxos/config';
3
+ import { LogLevel } from '@dxos/log';
4
+ import { type Extension } from '../../observability-extension';
5
+ export type ExtensionsOptions = {
6
+ /** For the OTEL, the name of the entity for which signals (metrics or trace) are collected. */
7
+ serviceName: string;
8
+ /** For the OTEL, the version of the entity for which signals (metrics or trace) are collected. */
9
+ serviceVersion: string;
10
+ /** For the OTEL, the environment of the entity for which signals (metrics or trace) are collected. */
11
+ environment: string;
12
+ config: Config;
13
+ endpoint?: string;
14
+ headers?: Record<string, string>;
15
+ logs?: boolean;
16
+ /** Minimum log level to export. Defaults to INFO (i.e. info, warn, error). */
17
+ logLevel?: LogLevel;
18
+ metrics?: boolean;
19
+ traces?: boolean;
20
+ };
21
+ /** Create an OTEL-backed observability extension for logs, metrics, and/or traces. */
22
+ export declare const extensions: (options: ExtensionsOptions) => Effect.Effect<Extension>;
23
+ //# sourceMappingURL=extension.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"extension.d.ts","sourceRoot":"","sources":["../../../../../src/extensions/otel/extension.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,MAAM,MAAM,eAAe,CAAC;AAKxC,OAAO,EAAE,KAAK,MAAM,EAAE,MAAM,cAAc,CAAC;AAC3C,OAAO,EAAE,QAAQ,EAAO,MAAM,WAAW,CAAC;AAI1C,OAAO,EAAE,KAAK,SAAS,EAAqB,MAAM,+BAA+B,CAAC;AAIlF,MAAM,MAAM,iBAAiB,GAAG;IAC9B,+FAA+F;IAC/F,WAAW,EAAE,MAAM,CAAC;IACpB,kGAAkG;IAClG,cAAc,EAAE,MAAM,CAAC;IACvB,sGAAsG;IACtG,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACjC,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,8EAA8E;IAC9E,QAAQ,CAAC,EAAE,QAAQ,CAAC;IACpB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB,CAAC;AAEF,sFAAsF;AACtF,eAAO,MAAM,UAAU,EAAE,CAAC,OAAO,EAAE,iBAAiB,KAAK,MAAM,CAAC,MAAM,CAAC,SAAS,CAgI9E,CAAC"}
@@ -0,0 +1,124 @@
1
+ //
2
+ // Copyright 2025 DXOS.org
3
+ //
4
+ import { defaultResource, resourceFromAttributes } from '@opentelemetry/resources';
5
+ import { ATTR_SERVICE_NAME, ATTR_SERVICE_VERSION } from '@opentelemetry/semantic-conventions';
6
+ import * as Effect from 'effect/Effect';
7
+ import * as Match from 'effect/Match';
8
+ import * as Option from 'effect/Option';
9
+ import * as Ref from 'effect/Ref';
10
+ import { LogLevel, log } from '@dxos/log';
11
+ import { isNode, isNonNullable } from '@dxos/util';
12
+ import buildSecrets from '../../cli-observability-secrets.json';
13
+ import { isObservabilityDisabled, storeObservabilityDisabled } from '../../storage';
14
+ import { stubExtension } from '../stub';
15
+ /** Create an OTEL-backed observability extension for logs, metrics, and/or traces. */
16
+ export const extensions = Effect.fn(function* ({ serviceName, serviceVersion, environment, config, endpoint: _endpoint, headers: _headers,
17
+ // TODO(wittjosiah): Logging integration.
18
+ // - logger should run even if observability is disabled
19
+ // - logs should be cached locally in a circular buffer
20
+ // - logs should be flushed to the server if user opts to include them in a bug report
21
+ logs: logsEnabled = false, logLevel = LogLevel.INFO, metrics: metricsEnabled = false, traces: tracesEnabled = false, }) {
22
+ const { OtelLogs } = yield* Effect.promise(() => import('./logs'));
23
+ const { OtelMetrics } = yield* Effect.promise(() => import('./metrics'));
24
+ const { OtelTraces } = yield* Effect.promise(() => import('./traces'));
25
+ const cachedDisabled = yield* Effect.promise(() => isObservabilityDisabled(serviceName));
26
+ const enabledRef = yield* Ref.make(!cachedDisabled);
27
+ const tags = new Map();
28
+ const endpoint = isNode()
29
+ ? (process.env.DX_OTEL_ENDPOINT ?? _endpoint ?? buildSecrets.OTEL_ENDPOINT)
30
+ : config.values.runtime?.app?.env?.DX_OTEL_ENDPOINT;
31
+ const headers = _headers ??
32
+ Match.value(isNode()).pipe(Match.when(true, () => Option.fromNullable(process.env.DX_OTEL_HEADERS ?? buildSecrets.OTEL_HEADERS)), Match.when(false, () => Option.fromNullable(config.values.runtime?.app?.env?.DX_OTEL_HEADERS)), Match.exhaustive, Option.map((raw) => parseHeaders(raw)), Option.getOrElse(() => undefined));
33
+ if (!endpoint || !headers) {
34
+ log.info('Missing OTEL_ENDPOINT or OTEL_HEADERS');
35
+ return stubExtension;
36
+ }
37
+ const resource = defaultResource().merge(resourceFromAttributes({
38
+ [ATTR_SERVICE_NAME]: serviceName,
39
+ [ATTR_SERVICE_VERSION]: serviceVersion,
40
+ 'deployment.environment': environment,
41
+ }));
42
+ const logs = logsEnabled
43
+ ? new OtelLogs({
44
+ endpoint,
45
+ headers,
46
+ resource,
47
+ getTags: () => Object.fromEntries(tags),
48
+ logLevel,
49
+ })
50
+ : undefined;
51
+ const metrics = metricsEnabled
52
+ ? new OtelMetrics({
53
+ endpoint,
54
+ headers,
55
+ resource,
56
+ getTags: () => Object.fromEntries(tags),
57
+ })
58
+ : undefined;
59
+ const traces = tracesEnabled
60
+ ? new OtelTraces({
61
+ endpoint,
62
+ headers,
63
+ resource,
64
+ getTags: () => Object.fromEntries(tags),
65
+ })
66
+ : undefined;
67
+ return {
68
+ initialize: () => Effect.sync(() => {
69
+ if (logs) {
70
+ log.runtimeConfig.processors.push(logs.logProcessor);
71
+ }
72
+ if (traces) {
73
+ traces.start();
74
+ }
75
+ }),
76
+ enable: Effect.fn(function* () {
77
+ yield* Effect.promise(() => storeObservabilityDisabled(serviceName, false));
78
+ yield* Ref.update(enabledRef, () => true);
79
+ }),
80
+ disable: Effect.fn(function* () {
81
+ yield* Effect.promise(() => storeObservabilityDisabled(serviceName, true));
82
+ yield* Ref.update(enabledRef, () => false);
83
+ }),
84
+ close: () => Effect.promise(async () => {
85
+ await logs?.close();
86
+ await metrics?.close();
87
+ }),
88
+ flush: () => Effect.promise(async () => {
89
+ await logs?.flush();
90
+ await metrics?.flush();
91
+ }),
92
+ setTags: (incomingTags) => {
93
+ for (const [key, value] of Object.entries(incomingTags)) {
94
+ tags.set(key, value);
95
+ }
96
+ },
97
+ get enabled() {
98
+ return Ref.get(enabledRef).pipe(Effect.runSync);
99
+ },
100
+ apis: [
101
+ { kind: 'logs', isAvailable: () => Effect.succeed(!!logs) },
102
+ metrics
103
+ ? {
104
+ kind: 'metrics',
105
+ isAvailable: () => Effect.succeed(true),
106
+ gauge: (name, value, tags) => metrics.gauge(name, value, tags),
107
+ increment: (name, value, tags) => metrics.increment(name, value, tags),
108
+ distribution: (name, value, tags) => metrics.distribution(name, value, tags),
109
+ }
110
+ : undefined,
111
+ traces ? { kind: 'traces', isAvailable: () => Effect.succeed(true) } : undefined,
112
+ ].filter(isNonNullable),
113
+ };
114
+ });
115
+ const parseHeaders = (unparsedHeaders) => {
116
+ return unparsedHeaders.split(';').reduce((acc, header) => {
117
+ const [key, ...rest] = header.split(':');
118
+ if (key && rest.length > 0) {
119
+ acc[key.trim().toLowerCase()] = rest.join(':').trim();
120
+ }
121
+ return acc;
122
+ }, {});
123
+ };
124
+ //# sourceMappingURL=extension.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"extension.js","sourceRoot":"","sources":["../../../../../src/extensions/otel/extension.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export * from './extension';
2
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/extensions/otel/index.ts"],"names":[],"mappings":"AAIA,cAAc,aAAa,CAAC"}
@@ -0,0 +1,5 @@
1
+ //
2
+ // Copyright 2024 DXOS.org
3
+ //
4
+ export * from './extension';
5
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../src/extensions/otel/index.ts"],"names":[],"mappings":"AAAA,EAAE;AACF,0BAA0B;AAC1B,EAAE;AAEF,cAAc,aAAa,CAAC"}
@@ -3,10 +3,11 @@ import { type OtelOptions } from './otel';
3
3
  export type OtelLogOptions = OtelOptions & {
4
4
  logLevel: LogLevel;
5
5
  /**
6
- * Set `true` to capture logs sent through LoggingService from shared worker.
7
- * Better to set to `false` because shared worker is initializing its own logger.
6
+ * Include logs forwarded from the shared worker via LoggingService.
7
+ *
8
+ * @deprecated
8
9
  */
9
- includeSharedWorkerLogs: boolean;
10
+ includeSharedWorkerLogs?: boolean;
10
11
  };
11
12
  export declare class OtelLogs {
12
13
  private readonly options;
@@ -0,0 +1 @@
1
+ {"version":3,"file":"logs.d.ts","sourceRoot":"","sources":["../../../../../src/extensions/otel/logs.ts"],"names":[],"mappings":"AASA,OAAO,EAGL,QAAQ,EACR,KAAK,YAAY,EAGlB,MAAM,WAAW,CAAC;AAEnB,OAAO,EAAE,KAAK,WAAW,EAAiB,MAAM,QAAQ,CAAC;AAIzD,MAAM,MAAM,cAAc,GAAG,WAAW,GAAG;IACzC,QAAQ,EAAE,QAAQ,CAAC;IACnB;;;;OAIG;IACH,uBAAuB,CAAC,EAAE,OAAO,CAAC;CACnC,CAAC;AAEF,qBAAa,QAAQ;IAEP,OAAO,CAAC,QAAQ,CAAC,OAAO;IADpC,OAAO,CAAC,eAAe,CAAiB;gBACX,OAAO,EAAE,cAAc;IAapD,SAAgB,YAAY,EAAE,YAAY,CAyBxC;IAEF,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAItB,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;CAGvB"}
@@ -0,0 +1,104 @@
1
+ //
2
+ // Copyright 2024 DXOS.org
3
+ //
4
+ import { SeverityNumber } from '@opentelemetry/api-logs';
5
+ import { OTLPLogExporter } from '@opentelemetry/exporter-logs-otlp-http';
6
+ import { BatchLogRecordProcessor, LoggerProvider } from '@opentelemetry/sdk-logs';
7
+ import { ATTR_SERVICE_VERSION } from '@opentelemetry/semantic-conventions';
8
+ import { LogLevel, getContextFromEntry, getRelativeFilename, } from '@dxos/log';
9
+ import { setDiagLogger } from './otel';
10
+ const FLATTEN_DEPTH = 1;
11
+ export class OtelLogs {
12
+ options;
13
+ _loggerProvider;
14
+ constructor(options) {
15
+ this.options = options;
16
+ setDiagLogger(options.consoleDiagLogLevel);
17
+ const logExporter = new OTLPLogExporter({
18
+ url: this.options.endpoint + '/v1/logs',
19
+ headers: this.options.headers,
20
+ concurrencyLimit: 10, // an optional limit on pending requests
21
+ });
22
+ this._loggerProvider = new LoggerProvider({
23
+ resource: this.options.resource,
24
+ processors: [new BatchLogRecordProcessor(logExporter)],
25
+ });
26
+ }
27
+ logProcessor = (_config, entry) => {
28
+ const logger = this._loggerProvider.getLogger('dxos-observability', this.options.resource.attributes[ATTR_SERVICE_VERSION]?.toString());
29
+ if (entry.level < this.options.logLevel ||
30
+ (!this.options.includeSharedWorkerLogs && entry.meta?.S?.remoteSessionId)) {
31
+ return;
32
+ }
33
+ const attributes = {
34
+ ...this.options.getTags(),
35
+ ...(entry.meta ? { meta: { file: getRelativeFilename(entry.meta.F), line: entry.meta.L } } : {}),
36
+ ...(entry.error ? { error: entry.error.stack } : {}),
37
+ ...stringifyValues(getContextFromEntry(entry), 'ctx_'),
38
+ };
39
+ logger.emit({
40
+ severityNumber: convertLevel(entry.level),
41
+ body: entry.message,
42
+ attributes,
43
+ });
44
+ };
45
+ flush() {
46
+ return this._loggerProvider.forceFlush();
47
+ }
48
+ close() {
49
+ return this._loggerProvider.shutdown();
50
+ }
51
+ }
52
+ const convertLevel = (level) => {
53
+ switch (level) {
54
+ case LogLevel.DEBUG:
55
+ return SeverityNumber.DEBUG;
56
+ case LogLevel.VERBOSE:
57
+ return SeverityNumber.INFO;
58
+ case LogLevel.INFO:
59
+ return SeverityNumber.INFO;
60
+ case LogLevel.WARN:
61
+ return SeverityNumber.WARN;
62
+ case LogLevel.ERROR:
63
+ return SeverityNumber.ERROR;
64
+ default:
65
+ return SeverityNumber.ERROR;
66
+ }
67
+ };
68
+ const safeStringify = (value) => {
69
+ try {
70
+ return JSON.stringify(value);
71
+ }
72
+ catch {
73
+ return '[Circular]';
74
+ }
75
+ };
76
+ // TODO(wittjosiah): Reconcile logging utils w/ EDGE.
77
+ const stringifyValues = (object, keyPrefix, depth = 1) => {
78
+ if (!object) {
79
+ return {};
80
+ }
81
+ const result = {};
82
+ for (const [key, value] of Object.entries(object)) {
83
+ if (value === undefined) {
84
+ continue;
85
+ }
86
+ const newKey = keyPrefix ? `${keyPrefix}${key}` : key;
87
+ if (typeof value === 'object') {
88
+ if (!value || Array.isArray(value) || depth > FLATTEN_DEPTH) {
89
+ result[newKey] = safeStringify(value);
90
+ }
91
+ else {
92
+ const flattened = stringifyValues(value, `${newKey}_`, depth + 1);
93
+ for (const [flattenedKey, flattenedValue] of Object.entries(flattened)) {
94
+ result[flattenedKey] = flattenedValue;
95
+ }
96
+ }
97
+ }
98
+ else {
99
+ result[newKey] = String(value);
100
+ }
101
+ }
102
+ return result;
103
+ };
104
+ //# sourceMappingURL=logs.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"logs.js","sourceRoot":"","sources":["../../../../../src/extensions/otel/logs.ts"],"names":[],"mappings":"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"}
@@ -3,7 +3,6 @@ export declare class OtelMetrics {
3
3
  private readonly options;
4
4
  private _meterProvider;
5
5
  private _meter;
6
- private _gauges;
7
6
  constructor(options: OtelOptions);
8
7
  gauge(name: string, value: number, tags?: any): void;
9
8
  increment(name: string, value?: number, tags?: any): void;
@@ -0,0 +1 @@
1
+ {"version":3,"file":"metrics.d.ts","sourceRoot":"","sources":["../../../../../src/extensions/otel/metrics.ts"],"names":[],"mappings":"AAWA,OAAO,EAAE,KAAK,WAAW,EAAiB,MAAM,QAAQ,CAAC;AAIzD,qBAAa,WAAW;IAIV,OAAO,CAAC,QAAQ,CAAC,OAAO;IAHpC,OAAO,CAAC,cAAc,CAAgB;IACtC,OAAO,CAAC,MAAM,CAAQ;gBAEO,OAAO,EAAE,WAAW;IAsCjD,KAAK,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,GAAG,GAAG,IAAI;IAMpD,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,GAAG,GAAG,IAAI;IAMzD,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,GAAG,GAAG,IAAI;IAM3D,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAItB,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;CAGvB"}
@@ -2,35 +2,29 @@
2
2
  // Copyright 2024 DXOS.org
3
3
  //
4
4
  import { OTLPMetricExporter } from '@opentelemetry/exporter-metrics-otlp-http';
5
- import { Resource } from '@opentelemetry/resources';
6
5
  import { MeterProvider, PeriodicExportingMetricReader } from '@opentelemetry/sdk-metrics';
7
- import { SEMRESATTRS_SERVICE_NAME, SEMRESATTRS_SERVICE_VERSION } from '@opentelemetry/semantic-conventions';
8
6
  import { log } from '@dxos/log';
9
7
  import { TRACE_PROCESSOR } from '@dxos/tracing';
10
8
  import { setDiagLogger } from './otel';
11
9
  const EXPORT_INTERVAL = 60 * 1000;
12
10
  export class OtelMetrics {
11
+ options;
12
+ _meterProvider;
13
+ _meter;
13
14
  constructor(options) {
14
15
  this.options = options;
15
- this._gauges = new Map();
16
16
  // TODO: improve error handling/logging
17
17
  // https://github.com/open-telemetry/opentelemetry-js/issues/4823
18
18
  setDiagLogger(options.consoleDiagLogLevel);
19
- const resource = Resource.default().merge(new Resource({
20
- [SEMRESATTRS_SERVICE_NAME]: this.options.serviceName,
21
- [SEMRESATTRS_SERVICE_VERSION]: this.options.serviceVersion,
22
- }));
23
19
  const grafanaMetricReader = new PeriodicExportingMetricReader({
24
20
  exporter: new OTLPMetricExporter({
25
21
  url: this.options.endpoint + '/v1/metrics',
26
- headers: {
27
- Authorization: this.options.authorizationHeader,
28
- },
22
+ headers: this.options.headers,
29
23
  }),
30
24
  exportIntervalMillis: EXPORT_INTERVAL,
31
25
  });
32
26
  this._meterProvider = new MeterProvider({
33
- resource,
27
+ resource: this.options.resource,
34
28
  readers: [grafanaMetricReader],
35
29
  });
36
30
  this._meter = this._meterProvider.getMeter('dxos-observability');
@@ -59,7 +53,7 @@ export class OtelMetrics {
59
53
  increment(name, value, tags) {
60
54
  const counter = this._meter.createCounter(name);
61
55
  log('otel counter', { name, value, tags: { ...this.options.getTags(), ...tags } });
62
- counter.add(value !== null && value !== void 0 ? value : 1, { ...this.options.getTags(), ...tags });
56
+ counter.add(value ?? 1, { ...this.options.getTags(), ...tags });
63
57
  }
64
58
  distribution(name, value, tags) {
65
59
  const distribution = this._meter.createHistogram(name);
@@ -0,0 +1 @@
1
+ {"version":3,"file":"metrics.js","sourceRoot":"","sources":["../../../../../src/extensions/otel/metrics.ts"],"names":[],"mappings":"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"}
@@ -1,8 +1,8 @@
1
+ import { type Resource } from '@opentelemetry/resources';
1
2
  export type OtelOptions = {
2
3
  endpoint: string;
3
- authorizationHeader: string;
4
- serviceName: string;
5
- serviceVersion: string;
4
+ headers: Record<string, string>;
5
+ resource: Resource;
6
6
  getTags: () => {
7
7
  [key: string]: string;
8
8
  };