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

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 (311) hide show
  1. package/README.md +14 -11
  2. package/dist/lib/browser/chunk-J5LGTIGS.mjs +10 -0
  3. package/dist/lib/browser/chunk-K4VFBKST.mjs +13 -0
  4. package/dist/lib/browser/chunk-K4VFBKST.mjs.map +7 -0
  5. package/dist/lib/browser/index.mjs +1005 -34
  6. package/dist/lib/browser/index.mjs.map +4 -4
  7. package/dist/lib/browser/log-processor-FDLTDQEM.mjs +45 -0
  8. package/dist/lib/browser/log-processor-FDLTDQEM.mjs.map +7 -0
  9. package/dist/lib/browser/logs-ATTRIUTL.mjs +113 -0
  10. package/dist/lib/browser/logs-ATTRIUTL.mjs.map +7 -0
  11. package/dist/lib/browser/meta.json +1 -1
  12. package/dist/lib/browser/metrics-PKTV6IGF.mjs +130 -0
  13. package/dist/lib/browser/metrics-PKTV6IGF.mjs.map +7 -0
  14. package/dist/lib/browser/traces-browser-5DQUYGQ7.mjs +68 -0
  15. package/dist/lib/browser/traces-browser-5DQUYGQ7.mjs.map +7 -0
  16. package/dist/lib/node-esm/chunk-FEVP3MK4.mjs +15 -0
  17. package/dist/lib/node-esm/chunk-FEVP3MK4.mjs.map +7 -0
  18. package/dist/lib/node-esm/chunk-HSLMI22Q.mjs +11 -0
  19. package/dist/lib/node-esm/index.mjs +1009 -34
  20. package/dist/lib/node-esm/index.mjs.map +4 -4
  21. package/dist/lib/node-esm/log-processor-TKJVJJSJ.mjs +46 -0
  22. package/dist/lib/node-esm/log-processor-TKJVJJSJ.mjs.map +7 -0
  23. package/dist/lib/node-esm/logs-7J45KLM7.mjs +114 -0
  24. package/dist/lib/node-esm/logs-7J45KLM7.mjs.map +7 -0
  25. package/dist/lib/node-esm/meta.json +1 -1
  26. package/dist/lib/node-esm/metrics-H7DDLYSG.mjs +131 -0
  27. package/dist/lib/node-esm/metrics-H7DDLYSG.mjs.map +7 -0
  28. package/dist/lib/node-esm/traces-KMTHMYFX.mjs +44 -0
  29. package/dist/lib/node-esm/traces-KMTHMYFX.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 +124 -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/{otel → extensions/otel}/logs.js +48 -18
  46. package/dist/types/src/extensions/otel/logs.js.map +1 -0
  47. package/dist/types/src/extensions/otel/metrics.d.ts.map +1 -0
  48. package/dist/types/src/{otel → extensions/otel}/metrics.js +2 -10
  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/extensions/otel/otel.js.map +1 -0
  53. package/dist/types/src/extensions/otel/traces-browser.d.ts.map +1 -0
  54. package/dist/types/src/{otel → extensions/otel}/traces-browser.js +13 -16
  55. package/dist/types/src/extensions/otel/traces-browser.js.map +1 -0
  56. package/dist/types/src/extensions/otel/traces.d.ts.map +1 -0
  57. package/dist/types/src/{otel → extensions/otel}/traces.js +5 -13
  58. package/dist/types/src/extensions/otel/traces.js.map +1 -0
  59. package/dist/types/src/extensions/posthog/extension.d.ts +18 -0
  60. package/dist/types/src/extensions/posthog/extension.d.ts.map +1 -0
  61. package/dist/types/src/extensions/posthog/extension.js +142 -0
  62. package/dist/types/src/extensions/posthog/extension.js.map +1 -0
  63. package/dist/types/src/extensions/posthog/index.d.ts +2 -0
  64. package/dist/types/src/extensions/posthog/index.d.ts.map +1 -0
  65. package/dist/types/src/extensions/posthog/index.js +5 -0
  66. package/dist/types/src/extensions/posthog/index.js.map +1 -0
  67. package/dist/types/src/extensions/posthog/log-processor.d.ts +3 -0
  68. package/dist/types/src/extensions/posthog/log-processor.d.ts.map +1 -0
  69. package/dist/types/src/extensions/posthog/log-processor.js +45 -0
  70. package/dist/types/src/extensions/posthog/log-processor.js.map +1 -0
  71. package/dist/types/src/extensions/posthog/log-processor.test.d.ts +2 -0
  72. package/dist/types/src/extensions/posthog/log-processor.test.d.ts.map +1 -0
  73. package/dist/types/src/extensions/posthog/log-processor.test.js +146 -0
  74. package/dist/types/src/extensions/posthog/log-processor.test.js.map +1 -0
  75. package/dist/types/src/extensions/stub.d.ts +3 -0
  76. package/dist/types/src/extensions/stub.d.ts.map +1 -0
  77. package/dist/types/src/extensions/stub.js +16 -0
  78. package/dist/types/src/extensions/stub.js.map +1 -0
  79. package/dist/types/src/index.d.ts +3 -2
  80. package/dist/types/src/index.d.ts.map +1 -1
  81. package/dist/types/src/index.js +4 -3
  82. package/dist/types/src/index.js.map +1 -1
  83. package/dist/types/src/observability-extension.d.ts +74 -0
  84. package/dist/types/src/observability-extension.d.ts.map +1 -0
  85. package/dist/types/src/observability-extension.js +5 -0
  86. package/dist/types/src/observability-extension.js.map +1 -0
  87. package/dist/types/src/observability.d.ts +32 -110
  88. package/dist/types/src/observability.d.ts.map +1 -1
  89. package/dist/types/src/observability.js +177 -465
  90. package/dist/types/src/observability.js.map +1 -1
  91. package/dist/types/src/observability.test.d.ts +2 -0
  92. package/dist/types/src/observability.test.d.ts.map +1 -0
  93. package/dist/types/src/observability.test.js +312 -0
  94. package/dist/types/src/observability.test.js.map +1 -0
  95. package/dist/types/src/providers/client-observability.d.ts +11 -0
  96. package/dist/types/src/providers/client-observability.d.ts.map +1 -0
  97. package/dist/types/src/providers/client-observability.js +200 -0
  98. package/dist/types/src/providers/client-observability.js.map +1 -0
  99. package/dist/types/src/providers/index.d.ts +4 -0
  100. package/dist/types/src/providers/index.d.ts.map +1 -0
  101. package/dist/types/src/providers/index.js +7 -0
  102. package/dist/types/src/providers/index.js.map +1 -0
  103. package/dist/types/src/providers/ip-data.d.ts +5 -0
  104. package/dist/types/src/providers/ip-data.d.ts.map +1 -0
  105. package/dist/types/src/providers/ip-data.js +57 -0
  106. package/dist/types/src/providers/ip-data.js.map +1 -0
  107. package/dist/types/src/providers/storage.d.ts +3 -0
  108. package/dist/types/src/providers/storage.d.ts.map +1 -0
  109. package/dist/types/src/providers/storage.js +19 -0
  110. package/dist/types/src/providers/storage.js.map +1 -0
  111. package/dist/types/src/storage/browser.d.ts +19 -0
  112. package/dist/types/src/storage/browser.d.ts.map +1 -0
  113. package/dist/types/src/storage/browser.js +58 -0
  114. package/dist/types/src/storage/browser.js.map +1 -0
  115. package/dist/types/src/storage/index.d.ts +2 -0
  116. package/dist/types/src/storage/index.d.ts.map +1 -0
  117. package/dist/types/src/storage/index.js.map +1 -0
  118. package/dist/types/src/storage/node.d.ts +26 -0
  119. package/dist/types/src/storage/node.d.ts.map +1 -0
  120. package/dist/types/src/{helpers/node-observability.js → storage/node.js} +37 -42
  121. package/dist/types/src/storage/node.js.map +1 -0
  122. package/dist/types/src/storage/node.test.d.ts +2 -0
  123. package/dist/types/src/storage/node.test.d.ts.map +1 -0
  124. package/dist/types/src/storage/node.test.js +103 -0
  125. package/dist/types/src/storage/node.test.js.map +1 -0
  126. package/dist/types/tsconfig.tsbuildinfo +1 -1
  127. package/package.json +30 -51
  128. package/src/cli-observability-secrets.json +3 -4
  129. package/src/extensions/index.ts +6 -0
  130. package/src/extensions/otel/extension.ts +178 -0
  131. package/src/extensions/otel/index.ts +5 -0
  132. package/src/{otel → extensions/otel}/logs.ts +55 -23
  133. package/src/{otel → extensions/otel}/metrics.ts +2 -12
  134. package/src/{otel → extensions/otel}/otel.ts +3 -3
  135. package/src/{otel → extensions/otel}/traces-browser.ts +20 -19
  136. package/src/{otel → extensions/otel}/traces.ts +10 -21
  137. package/src/extensions/posthog/extension.ts +174 -0
  138. package/src/extensions/posthog/index.ts +5 -0
  139. package/src/extensions/posthog/log-processor.test.ts +185 -0
  140. package/src/extensions/posthog/log-processor.ts +54 -0
  141. package/src/extensions/stub.ts +19 -0
  142. package/src/index.ts +4 -3
  143. package/src/observability-extension.ts +94 -0
  144. package/src/observability.test.ts +531 -0
  145. package/src/observability.ts +236 -577
  146. package/src/providers/client-observability.ts +253 -0
  147. package/src/providers/index.ts +7 -0
  148. package/src/providers/ip-data.ts +91 -0
  149. package/src/providers/storage.ts +23 -0
  150. package/src/storage/browser.ts +61 -0
  151. package/src/{segment → storage}/index.ts +0 -1
  152. package/src/storage/node.test.ts +130 -0
  153. package/src/{helpers/node-observability.ts → storage/node.ts} +40 -69
  154. package/dist/lib/browser/chunk-5ICT2XF2.mjs +0 -1
  155. package/dist/lib/browser/chunk-CZBWMGUZ.mjs +0 -1025
  156. package/dist/lib/browser/chunk-CZBWMGUZ.mjs.map +0 -7
  157. package/dist/lib/browser/chunk-JWOLOB5N.mjs +0 -161
  158. package/dist/lib/browser/chunk-JWOLOB5N.mjs.map +0 -7
  159. package/dist/lib/browser/chunk-ZI3ZS3PA.mjs +0 -164
  160. package/dist/lib/browser/chunk-ZI3ZS3PA.mjs.map +0 -7
  161. package/dist/lib/browser/observability-NLOCHCE7.mjs +0 -10
  162. package/dist/lib/browser/otel-6FVBNA5F.mjs +0 -327
  163. package/dist/lib/browser/otel-6FVBNA5F.mjs.map +0 -7
  164. package/dist/lib/browser/segment/index.mjs +0 -11
  165. package/dist/lib/browser/segment/index.mjs.map +0 -7
  166. package/dist/lib/browser/sentry/index.mjs +0 -24
  167. package/dist/lib/browser/sentry/index.mjs.map +0 -7
  168. package/dist/lib/browser/sentry-log-processor-F4JCYJ2E.mjs +0 -162
  169. package/dist/lib/browser/sentry-log-processor-F4JCYJ2E.mjs.map +0 -7
  170. package/dist/lib/node-esm/chunk-24NMRR4E.mjs +0 -229
  171. package/dist/lib/node-esm/chunk-24NMRR4E.mjs.map +0 -7
  172. package/dist/lib/node-esm/chunk-4EWQFQ2F.mjs +0 -1026
  173. package/dist/lib/node-esm/chunk-4EWQFQ2F.mjs.map +0 -7
  174. package/dist/lib/node-esm/chunk-QK5IUYVA.mjs +0 -135
  175. package/dist/lib/node-esm/chunk-QK5IUYVA.mjs.map +0 -7
  176. package/dist/lib/node-esm/chunk-QUZL7LKE.mjs +0 -2
  177. package/dist/lib/node-esm/chunk-QUZL7LKE.mjs.map +0 -7
  178. package/dist/lib/node-esm/observability-DHNVVRC7.mjs +0 -11
  179. package/dist/lib/node-esm/observability-DHNVVRC7.mjs.map +0 -7
  180. package/dist/lib/node-esm/otel-KHSGBROB.mjs +0 -310
  181. package/dist/lib/node-esm/otel-KHSGBROB.mjs.map +0 -7
  182. package/dist/lib/node-esm/segment/index.mjs +0 -12
  183. package/dist/lib/node-esm/segment/index.mjs.map +0 -7
  184. package/dist/lib/node-esm/sentry/index.mjs +0 -25
  185. package/dist/lib/node-esm/sentry/index.mjs.map +0 -7
  186. package/dist/lib/node-esm/sentry-log-processor-3BDS4BB4.mjs +0 -163
  187. package/dist/lib/node-esm/sentry-log-processor-3BDS4BB4.mjs.map +0 -7
  188. package/dist/types/src/helpers/browser-observability.d.ts +0 -17
  189. package/dist/types/src/helpers/browser-observability.d.ts.map +0 -1
  190. package/dist/types/src/helpers/browser-observability.js +0 -138
  191. package/dist/types/src/helpers/browser-observability.js.map +0 -1
  192. package/dist/types/src/helpers/common.d.ts +0 -12
  193. package/dist/types/src/helpers/common.d.ts.map +0 -1
  194. package/dist/types/src/helpers/common.js +0 -23
  195. package/dist/types/src/helpers/common.js.map +0 -1
  196. package/dist/types/src/helpers/index.d.ts +0 -6
  197. package/dist/types/src/helpers/index.d.ts.map +0 -1
  198. package/dist/types/src/helpers/index.js +0 -9
  199. package/dist/types/src/helpers/index.js.map +0 -1
  200. package/dist/types/src/helpers/map-spaces.d.ts +0 -18
  201. package/dist/types/src/helpers/map-spaces.d.ts.map +0 -1
  202. package/dist/types/src/helpers/map-spaces.js +0 -36
  203. package/dist/types/src/helpers/map-spaces.js.map +0 -1
  204. package/dist/types/src/helpers/node-observability.d.ts +0 -24
  205. package/dist/types/src/helpers/node-observability.d.ts.map +0 -1
  206. package/dist/types/src/helpers/node-observability.js.map +0 -1
  207. package/dist/types/src/helpers/setup-telemetry-listeners.d.ts +0 -4
  208. package/dist/types/src/helpers/setup-telemetry-listeners.d.ts.map +0 -1
  209. package/dist/types/src/helpers/setup-telemetry-listeners.js +0 -94
  210. package/dist/types/src/helpers/setup-telemetry-listeners.js.map +0 -1
  211. package/dist/types/src/otel/index.d.ts +0 -5
  212. package/dist/types/src/otel/index.d.ts.map +0 -1
  213. package/dist/types/src/otel/index.js +0 -8
  214. package/dist/types/src/otel/index.js.map +0 -1
  215. package/dist/types/src/otel/logs.d.ts.map +0 -1
  216. package/dist/types/src/otel/logs.js.map +0 -1
  217. package/dist/types/src/otel/metrics.d.ts.map +0 -1
  218. package/dist/types/src/otel/metrics.js.map +0 -1
  219. package/dist/types/src/otel/otel.d.ts.map +0 -1
  220. package/dist/types/src/otel/otel.js.map +0 -1
  221. package/dist/types/src/otel/traces-browser.d.ts.map +0 -1
  222. package/dist/types/src/otel/traces-browser.js.map +0 -1
  223. package/dist/types/src/otel/traces.d.ts.map +0 -1
  224. package/dist/types/src/otel/traces.js.map +0 -1
  225. package/dist/types/src/segment/base.d.ts +0 -15
  226. package/dist/types/src/segment/base.d.ts.map +0 -1
  227. package/dist/types/src/segment/base.js +0 -51
  228. package/dist/types/src/segment/base.js.map +0 -1
  229. package/dist/types/src/segment/browser.d.ts +0 -15
  230. package/dist/types/src/segment/browser.d.ts.map +0 -1
  231. package/dist/types/src/segment/browser.js +0 -63
  232. package/dist/types/src/segment/browser.js.map +0 -1
  233. package/dist/types/src/segment/index.d.ts +0 -3
  234. package/dist/types/src/segment/index.d.ts.map +0 -1
  235. package/dist/types/src/segment/index.js +0 -6
  236. package/dist/types/src/segment/index.js.map +0 -1
  237. package/dist/types/src/segment/node.d.ts +0 -16
  238. package/dist/types/src/segment/node.d.ts.map +0 -1
  239. package/dist/types/src/segment/node.js +0 -84
  240. package/dist/types/src/segment/node.js.map +0 -1
  241. package/dist/types/src/segment/types.d.ts +0 -52
  242. package/dist/types/src/segment/types.d.ts.map +0 -1
  243. package/dist/types/src/segment/types.js +0 -18
  244. package/dist/types/src/segment/types.js.map +0 -1
  245. package/dist/types/src/sentry/browser.d.ts +0 -32
  246. package/dist/types/src/sentry/browser.d.ts.map +0 -1
  247. package/dist/types/src/sentry/browser.js +0 -110
  248. package/dist/types/src/sentry/browser.js.map +0 -1
  249. package/dist/types/src/sentry/index.d.ts +0 -3
  250. package/dist/types/src/sentry/index.d.ts.map +0 -1
  251. package/dist/types/src/sentry/index.js.map +0 -1
  252. package/dist/types/src/sentry/node.d.ts +0 -32
  253. package/dist/types/src/sentry/node.d.ts.map +0 -1
  254. package/dist/types/src/sentry/node.js +0 -106
  255. package/dist/types/src/sentry/node.js.map +0 -1
  256. package/dist/types/src/sentry/node.node.test.d.ts +0 -2
  257. package/dist/types/src/sentry/node.node.test.d.ts.map +0 -1
  258. package/dist/types/src/sentry/node.node.test.js +0 -32
  259. package/dist/types/src/sentry/node.node.test.js.map +0 -1
  260. package/dist/types/src/sentry/sentry-log-processor.d.ts +0 -9
  261. package/dist/types/src/sentry/sentry-log-processor.d.ts.map +0 -1
  262. package/dist/types/src/sentry/sentry-log-processor.js +0 -144
  263. package/dist/types/src/sentry/sentry-log-processor.js.map +0 -1
  264. package/dist/types/src/sentry/sentry.node.test.d.ts +0 -2
  265. package/dist/types/src/sentry/sentry.node.test.d.ts.map +0 -1
  266. package/dist/types/src/sentry/sentry.node.test.js +0 -28
  267. package/dist/types/src/sentry/sentry.node.test.js.map +0 -1
  268. package/dist/types/src/sentry/types.d.ts +0 -18
  269. package/dist/types/src/sentry/types.d.ts.map +0 -1
  270. package/dist/types/src/sentry/types.js +0 -4
  271. package/dist/types/src/sentry/types.js.map +0 -1
  272. package/dist/types/src/testing/index.d.ts +0 -2
  273. package/dist/types/src/testing/index.d.ts.map +0 -1
  274. package/dist/types/src/testing/index.js +0 -5
  275. package/dist/types/src/testing/index.js.map +0 -1
  276. package/dist/types/src/testing/testkit/browser.d.ts +0 -2
  277. package/dist/types/src/testing/testkit/browser.d.ts.map +0 -1
  278. package/dist/types/src/testing/testkit/browser.js +0 -7
  279. package/dist/types/src/testing/testkit/browser.js.map +0 -1
  280. package/dist/types/src/testing/testkit/index.d.ts +0 -2
  281. package/dist/types/src/testing/testkit/index.d.ts.map +0 -1
  282. package/dist/types/src/testing/testkit/index.js +0 -6
  283. package/dist/types/src/testing/testkit/index.js.map +0 -1
  284. package/src/helpers/browser-observability.ts +0 -178
  285. package/src/helpers/common.ts +0 -38
  286. package/src/helpers/index.ts +0 -9
  287. package/src/helpers/map-spaces.ts +0 -48
  288. package/src/helpers/setup-telemetry-listeners.ts +0 -109
  289. package/src/otel/index.ts +0 -8
  290. package/src/segment/base.ts +0 -69
  291. package/src/segment/browser.ts +0 -69
  292. package/src/segment/node.ts +0 -95
  293. package/src/segment/types.ts +0 -57
  294. package/src/sentry/browser.ts +0 -133
  295. package/src/sentry/index.ts +0 -6
  296. package/src/sentry/node.node.test.ts +0 -40
  297. package/src/sentry/node.ts +0 -126
  298. package/src/sentry/sentry-log-processor.ts +0 -174
  299. package/src/sentry/sentry.node.test.ts +0 -35
  300. package/src/sentry/types.ts +0 -22
  301. package/src/testing/index.ts +0 -5
  302. package/src/testing/testkit/browser.ts +0 -8
  303. package/src/testing/testkit/index.ts +0 -7
  304. package/src/testing/testkit/shims.d.ts +0 -5
  305. /package/dist/lib/browser/{chunk-5ICT2XF2.mjs.map → chunk-J5LGTIGS.mjs.map} +0 -0
  306. /package/dist/lib/{browser/observability-NLOCHCE7.mjs.map → node-esm/chunk-HSLMI22Q.mjs.map} +0 -0
  307. /package/dist/types/src/{otel → extensions/otel}/metrics.d.ts +0 -0
  308. /package/dist/types/src/{otel → extensions/otel}/otel.js +0 -0
  309. /package/dist/types/src/{otel → extensions/otel}/traces-browser.d.ts +0 -0
  310. /package/dist/types/src/{otel → extensions/otel}/traces.d.ts +0 -0
  311. /package/dist/types/src/{sentry → storage}/index.js +0 -0
package/package.json CHANGED
@@ -1,50 +1,29 @@
1
1
  {
2
2
  "name": "@dxos/observability",
3
- "version": "0.8.4-main.c4373fc",
3
+ "version": "0.8.4-main.c85a9c8dae",
4
4
  "description": "Provides a common interface for app and platform observability",
5
5
  "homepage": "https://dxos.org",
6
6
  "bugs": "https://github.com/dxos/dxos/issues",
7
+ "repository": {
8
+ "type": "git",
9
+ "url": "https://github.com/dxos/dxos"
10
+ },
7
11
  "license": "MIT",
8
12
  "author": "DXOS.org",
9
- "sideEffects": true,
13
+ "sideEffects": false,
10
14
  "type": "module",
11
15
  "exports": {
12
16
  ".": {
13
- "source": "./src/index.ts",
14
17
  "types": "./dist/types/src/index.d.ts",
15
18
  "browser": "./dist/lib/browser/index.mjs",
16
19
  "node": "./dist/lib/node-esm/index.mjs"
17
- },
18
- "./segment": {
19
- "source": "./src/segment/index.ts",
20
- "types": "./dist/types/src/segment/index.d.ts",
21
- "browser": "./dist/lib/browser/segment/index.mjs",
22
- "node": "./dist/lib/node-esm/segment/index.mjs"
23
- },
24
- "./sentry": {
25
- "source": "./src/sentry/index.ts",
26
- "types": "./dist/types/src/sentry/index.d.ts",
27
- "browser": "./dist/lib/browser/sentry/index.mjs",
28
- "node": "./dist/lib/node-esm/sentry/index.mjs"
29
20
  }
30
21
  },
31
22
  "browser": {
32
- "./src/segment/node.ts": "./src/segment/browser.ts",
33
- "./src/sentry/node.ts": "./src/sentry/browser.ts",
34
- "./testing/testkit/index.ts": "./testing/testkit/browser.ts",
35
- "./src/otel/traces.ts": "./src/otel/traces-browser.ts"
23
+ "./src/storage/node.ts": "./src/storage/browser.ts",
24
+ "./src/extensions/otel/traces.ts": "./src/extensions/otel/traces-browser.ts"
36
25
  },
37
26
  "types": "dist/types/src/index.d.ts",
38
- "typesVersions": {
39
- "*": {
40
- "segment": [
41
- "dist/types/src/segment/index.d.ts"
42
- ],
43
- "sentry": [
44
- "dist/types/src/sentry/index.d.ts"
45
- ]
46
- }
47
- },
48
27
  "files": [
49
28
  "dist",
50
29
  "src"
@@ -63,35 +42,35 @@
63
42
  "@opentelemetry/sdk-trace-base": "^2.1.0",
64
43
  "@opentelemetry/sdk-trace-web": "^2.1.0",
65
44
  "@opentelemetry/semantic-conventions": "^1.37.0",
66
- "@segment/analytics-node": "^2.1.0",
67
- "@segment/snippet": "^4.15.3",
68
- "@sentry/browser": "^8.8.0",
69
- "@sentry/node": "^8.8.0",
70
45
  "debug": "^4.3.4",
71
- "js-yaml": "^4.1.0",
46
+ "js-yaml": "4.1.1",
72
47
  "localforage": "^1.10.0",
48
+ "posthog-js": "^1.353.0",
73
49
  "uuid": "^9.0.0",
74
- "@dxos/async": "0.8.4-main.c4373fc",
75
- "@dxos/client": "0.8.4-main.c4373fc",
76
- "@dxos/client-services": "0.8.4-main.c4373fc",
77
- "@dxos/client-protocol": "0.8.4-main.c4373fc",
78
- "@dxos/context": "0.8.4-main.c4373fc",
79
- "@dxos/debug": "0.8.4-main.c4373fc",
80
- "@dxos/config": "0.8.4-main.c4373fc",
81
- "@dxos/invariant": "0.8.4-main.c4373fc",
82
- "@dxos/log": "0.8.4-main.c4373fc",
83
- "@dxos/node-std": "0.8.4-main.c4373fc",
84
- "@dxos/network-manager": "0.8.4-main.c4373fc",
85
- "@dxos/protocols": "0.8.4-main.c4373fc",
86
- "@dxos/tracing": "0.8.4-main.c4373fc",
87
- "@dxos/util": "0.8.4-main.c4373fc"
50
+ "@dxos/client-protocol": "0.8.4-main.c85a9c8dae",
51
+ "@dxos/async": "0.8.4-main.c85a9c8dae",
52
+ "@dxos/client": "0.8.4-main.c85a9c8dae",
53
+ "@dxos/client-services": "0.8.4-main.c85a9c8dae",
54
+ "@dxos/config": "0.8.4-main.c85a9c8dae",
55
+ "@dxos/context": "0.8.4-main.c85a9c8dae",
56
+ "@dxos/debug": "0.8.4-main.c85a9c8dae",
57
+ "@dxos/invariant": "0.8.4-main.c85a9c8dae",
58
+ "@dxos/log": "0.8.4-main.c85a9c8dae",
59
+ "@dxos/network-manager": "0.8.4-main.c85a9c8dae",
60
+ "@dxos/node-std": "0.8.4-main.c85a9c8dae",
61
+ "@dxos/tracing": "0.8.4-main.c85a9c8dae",
62
+ "@dxos/util": "0.8.4-main.c85a9c8dae",
63
+ "@dxos/protocols": "0.8.4-main.c85a9c8dae"
88
64
  },
89
65
  "devDependencies": {
90
- "@sentry/types": "^8.8.0",
66
+ "@effect/platform": "0.94.4",
91
67
  "@types/debug": "^4.1.10",
92
68
  "@types/js-yaml": "^4.0.5",
93
- "sentry-testkit": "^5.0.5",
94
- "zone.js": ">=0.11.4 <0.12.0-0 || >=0.13.0 <0.14.0-0 || >=0.14.0 <0.15.0-0"
69
+ "zone.js": "^0.15.0"
70
+ },
71
+ "peerDependencies": {
72
+ "@effect/platform": "0.94.4",
73
+ "effect": "3.19.16"
95
74
  },
96
75
  "publishConfig": {
97
76
  "access": "public"
@@ -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,6 @@
1
+ //
2
+ // Copyright 2025 DXOS.org
3
+ //
4
+
5
+ export * as Otel from './otel';
6
+ export * as PostHog from './posthog';
@@ -0,0 +1,178 @@
1
+ //
2
+ // Copyright 2025 DXOS.org
3
+ //
4
+
5
+ import { defaultResource, resourceFromAttributes } from '@opentelemetry/resources';
6
+ import { ATTR_SERVICE_NAME, ATTR_SERVICE_VERSION } from '@opentelemetry/semantic-conventions';
7
+ import * as Effect from 'effect/Effect';
8
+ import * as Match from 'effect/Match';
9
+ import * as Option from 'effect/Option';
10
+ import * as Ref from 'effect/Ref';
11
+
12
+ import { type Config } from '@dxos/config';
13
+ import { LogLevel, log } from '@dxos/log';
14
+ import { isNode, isNonNullable } from '@dxos/util';
15
+
16
+ import buildSecrets from '../../cli-observability-secrets.json';
17
+ import { type Extension, type ExtensionApi } from '../../observability-extension';
18
+ import { isObservabilityDisabled, storeObservabilityDisabled } from '../../storage';
19
+ import { stubExtension } from '../stub';
20
+
21
+ export type ExtensionsOptions = {
22
+ /** For the OTEL, the name of the entity for which signals (metrics or trace) are collected. */
23
+ serviceName: string;
24
+ /** For the OTEL, the version of the entity for which signals (metrics or trace) are collected. */
25
+ serviceVersion: string;
26
+ /** For the OTEL, the environment of the entity for which signals (metrics or trace) are collected. */
27
+ environment: string;
28
+ config: Config;
29
+ endpoint?: string;
30
+ headers?: Record<string, string>;
31
+ logs?: boolean;
32
+ /** Minimum log level to export. Defaults to INFO (i.e. info, warn, error). */
33
+ logLevel?: LogLevel;
34
+ metrics?: boolean;
35
+ traces?: boolean;
36
+ };
37
+
38
+ /** Create an OTEL-backed observability extension for logs, metrics, and/or traces. */
39
+ export const extensions: (options: ExtensionsOptions) => Effect.Effect<Extension> = Effect.fn(function* ({
40
+ serviceName,
41
+ serviceVersion,
42
+ environment,
43
+ config,
44
+ endpoint: _endpoint,
45
+ headers: _headers,
46
+ // TODO(wittjosiah): Logging integration.
47
+ // - logger should run even if observability is disabled
48
+ // - logs should be cached locally in a circular buffer
49
+ // - logs should be flushed to the server if user opts to include them in a bug report
50
+ logs: logsEnabled = false,
51
+ logLevel = LogLevel.INFO,
52
+ metrics: metricsEnabled = false,
53
+ traces: tracesEnabled = false,
54
+ }) {
55
+ const { OtelLogs } = yield* Effect.promise(() => import('./logs'));
56
+ const { OtelMetrics } = yield* Effect.promise(() => import('./metrics'));
57
+ const { OtelTraces } = yield* Effect.promise(() => import('./traces'));
58
+
59
+ const cachedDisabled = yield* Effect.promise(() => isObservabilityDisabled(serviceName));
60
+ const enabledRef = yield* Ref.make(!cachedDisabled);
61
+ const tags = new Map<string, string>();
62
+
63
+ const endpoint = isNode()
64
+ ? (process.env.DX_OTEL_ENDPOINT ?? _endpoint ?? buildSecrets.OTEL_ENDPOINT)
65
+ : config.values.runtime?.app?.env?.DX_OTEL_ENDPOINT;
66
+ const headers =
67
+ _headers ??
68
+ Match.value(isNode()).pipe(
69
+ Match.when(true, () => Option.fromNullable(process.env.DX_OTEL_HEADERS ?? buildSecrets.OTEL_HEADERS)),
70
+ Match.when(false, () => Option.fromNullable(config.values.runtime?.app?.env?.DX_OTEL_HEADERS)),
71
+ Match.exhaustive,
72
+ Option.map((raw) => parseHeaders(raw)),
73
+ Option.getOrElse(() => undefined),
74
+ );
75
+
76
+ if (!endpoint || !headers) {
77
+ log.info('Missing OTEL_ENDPOINT or OTEL_HEADERS');
78
+ return stubExtension;
79
+ }
80
+
81
+ const resource = defaultResource().merge(
82
+ resourceFromAttributes({
83
+ [ATTR_SERVICE_NAME]: serviceName,
84
+ [ATTR_SERVICE_VERSION]: serviceVersion,
85
+ 'deployment.environment': environment,
86
+ }),
87
+ );
88
+
89
+ const logs = logsEnabled
90
+ ? new OtelLogs({
91
+ endpoint,
92
+ headers,
93
+ resource,
94
+ getTags: () => Object.fromEntries(tags),
95
+ logLevel,
96
+ })
97
+ : undefined;
98
+
99
+ const metrics = metricsEnabled
100
+ ? new OtelMetrics({
101
+ endpoint,
102
+ headers,
103
+ resource,
104
+ getTags: () => Object.fromEntries(tags),
105
+ })
106
+ : undefined;
107
+
108
+ const traces = tracesEnabled
109
+ ? new OtelTraces({
110
+ endpoint,
111
+ headers,
112
+ resource,
113
+ getTags: () => Object.fromEntries(tags),
114
+ })
115
+ : undefined;
116
+
117
+ return {
118
+ initialize: () =>
119
+ Effect.sync(() => {
120
+ if (logs) {
121
+ log.runtimeConfig.processors.push(logs.logProcessor);
122
+ }
123
+ if (traces) {
124
+ traces.start();
125
+ }
126
+ }),
127
+ enable: Effect.fn(function* () {
128
+ yield* Effect.promise(() => storeObservabilityDisabled(serviceName, false));
129
+ yield* Ref.update(enabledRef, () => true);
130
+ }),
131
+ disable: Effect.fn(function* () {
132
+ yield* Effect.promise(() => storeObservabilityDisabled(serviceName, true));
133
+ yield* Ref.update(enabledRef, () => false);
134
+ }),
135
+ close: () =>
136
+ Effect.promise(async () => {
137
+ await logs?.close();
138
+ await metrics?.close();
139
+ }),
140
+ flush: () =>
141
+ Effect.promise(async () => {
142
+ await logs?.flush();
143
+ await metrics?.flush();
144
+ }),
145
+ setTags: (incomingTags) => {
146
+ for (const [key, value] of Object.entries(incomingTags)) {
147
+ tags.set(key, value);
148
+ }
149
+ },
150
+ get enabled() {
151
+ return Ref.get(enabledRef).pipe(Effect.runSync);
152
+ },
153
+ apis: [
154
+ { kind: 'logs', isAvailable: () => Effect.succeed(!!logs) } satisfies ExtensionApi,
155
+ metrics
156
+ ? ({
157
+ kind: 'metrics',
158
+ isAvailable: () => Effect.succeed(true),
159
+ gauge: (name, value, tags) => metrics.gauge(name, value, tags),
160
+ increment: (name, value, tags) => metrics.increment(name, value, tags),
161
+ distribution: (name, value, tags) => metrics.distribution(name, value, tags),
162
+ } satisfies ExtensionApi)
163
+ : undefined,
164
+ traces ? ({ kind: 'traces', isAvailable: () => Effect.succeed(true) } satisfies ExtensionApi) : undefined,
165
+ ].filter(isNonNullable),
166
+ };
167
+ });
168
+
169
+ const parseHeaders = (unparsedHeaders: string): Record<string, string> => {
170
+ return unparsedHeaders.split(';').reduce((acc: Record<string, string>, header) => {
171
+ const [key, ...rest] = header.split(':');
172
+ if (key && rest.length > 0) {
173
+ acc[key.trim().toLowerCase()] = rest.join(':').trim();
174
+ }
175
+
176
+ return acc;
177
+ }, {});
178
+ };
@@ -0,0 +1,5 @@
1
+ //
2
+ // Copyright 2024 DXOS.org
3
+ //
4
+
5
+ export * from './extension';
@@ -4,9 +4,8 @@
4
4
 
5
5
  import { SeverityNumber } from '@opentelemetry/api-logs';
6
6
  import { OTLPLogExporter } from '@opentelemetry/exporter-logs-otlp-http';
7
- import { defaultResource, resourceFromAttributes } from '@opentelemetry/resources';
8
7
  import { BatchLogRecordProcessor, LoggerProvider } from '@opentelemetry/sdk-logs';
9
- import { SEMRESATTRS_SERVICE_NAME, SEMRESATTRS_SERVICE_VERSION } from '@opentelemetry/semantic-conventions';
8
+ import { ATTR_SERVICE_VERSION } from '@opentelemetry/semantic-conventions';
10
9
 
11
10
  import {
12
11
  type LogConfig,
@@ -16,44 +15,41 @@ import {
16
15
  getContextFromEntry,
17
16
  getRelativeFilename,
18
17
  } from '@dxos/log';
19
- import { jsonlogify } from '@dxos/util';
20
18
 
21
19
  import { type OtelOptions, setDiagLogger } from './otel';
22
20
 
21
+ const FLATTEN_DEPTH = 1;
22
+
23
23
  export type OtelLogOptions = OtelOptions & {
24
24
  logLevel: LogLevel;
25
25
  /**
26
- * Set `true` to capture logs sent through LoggingService from shared worker.
27
- * Better to set to `false` because shared worker is initializing its own logger.
26
+ * Include logs forwarded from the shared worker via LoggingService.
27
+ *
28
+ * @deprecated
28
29
  */
29
- includeSharedWorkerLogs: boolean;
30
+ includeSharedWorkerLogs?: boolean;
30
31
  };
31
32
 
32
33
  export class OtelLogs {
33
34
  private _loggerProvider: LoggerProvider;
34
35
  constructor(private readonly options: OtelLogOptions) {
35
36
  setDiagLogger(options.consoleDiagLogLevel);
36
- const resource = defaultResource().merge(
37
- resourceFromAttributes({
38
- [SEMRESATTRS_SERVICE_NAME]: this.options.serviceName,
39
- [SEMRESATTRS_SERVICE_VERSION]: this.options.serviceVersion,
40
- }),
41
- );
42
37
  const logExporter = new OTLPLogExporter({
43
38
  url: this.options.endpoint + '/v1/logs',
44
- headers: {
45
- Authorization: this.options.authorizationHeader,
46
- },
39
+ headers: this.options.headers,
47
40
  concurrencyLimit: 10, // an optional limit on pending requests
48
41
  });
49
42
  this._loggerProvider = new LoggerProvider({
50
- resource,
43
+ resource: this.options.resource,
51
44
  processors: [new BatchLogRecordProcessor(logExporter)],
52
45
  });
53
46
  }
54
47
 
55
- public readonly logProcessor: LogProcessor = (config: LogConfig, entry: LogEntry) => {
56
- const logger = this._loggerProvider.getLogger('dxos-observability', this.options.serviceVersion);
48
+ public readonly logProcessor: LogProcessor = (_config: LogConfig, entry: LogEntry) => {
49
+ const logger = this._loggerProvider.getLogger(
50
+ 'dxos-observability',
51
+ this.options.resource.attributes[ATTR_SERVICE_VERSION]?.toString(),
52
+ );
57
53
 
58
54
  if (
59
55
  entry.level < this.options.logLevel ||
@@ -62,16 +58,17 @@ export class OtelLogs {
62
58
  return;
63
59
  }
64
60
 
65
- const record = {
66
- ...entry,
61
+ const attributes = {
62
+ ...this.options.getTags(),
67
63
  ...(entry.meta ? { meta: { file: getRelativeFilename(entry.meta.F), line: entry.meta.L } } : {}),
68
- context: jsonlogify(getContextFromEntry(entry)),
64
+ ...(entry.error ? { error: entry.error.stack } : {}),
65
+ ...stringifyValues(getContextFromEntry(entry), 'ctx_'),
69
66
  };
70
67
 
71
68
  logger.emit({
72
69
  severityNumber: convertLevel(entry.level),
73
- body: JSON.stringify(record),
74
- attributes: this.options.getTags(),
70
+ body: entry.message,
71
+ attributes,
75
72
  });
76
73
  };
77
74
 
@@ -100,3 +97,38 @@ const convertLevel = (level: LogLevel): SeverityNumber => {
100
97
  return SeverityNumber.ERROR;
101
98
  }
102
99
  };
100
+
101
+ const safeStringify = (value: unknown): string => {
102
+ try {
103
+ return JSON.stringify(value);
104
+ } catch {
105
+ return '[Circular]';
106
+ }
107
+ };
108
+
109
+ // TODO(wittjosiah): Reconcile logging utils w/ EDGE.
110
+ const stringifyValues = (object: object | undefined, keyPrefix?: string, depth: number = 1) => {
111
+ if (!object) {
112
+ return {};
113
+ }
114
+ const result: Record<string, string> = {};
115
+ for (const [key, value] of Object.entries(object)) {
116
+ if (value === undefined) {
117
+ continue;
118
+ }
119
+ const newKey = keyPrefix ? `${keyPrefix}${key}` : key;
120
+ if (typeof value === 'object') {
121
+ if (!value || Array.isArray(value) || depth > FLATTEN_DEPTH) {
122
+ result[newKey] = safeStringify(value);
123
+ } else {
124
+ const flattened = stringifyValues(value, `${newKey}_`, depth + 1);
125
+ for (const [flattenedKey, flattenedValue] of Object.entries(flattened)) {
126
+ result[flattenedKey] = flattenedValue;
127
+ }
128
+ }
129
+ } else {
130
+ result[newKey] = String(value);
131
+ }
132
+ }
133
+ return result;
134
+ };
@@ -4,9 +4,7 @@
4
4
 
5
5
  import { type Meter } from '@opentelemetry/api';
6
6
  import { OTLPMetricExporter } from '@opentelemetry/exporter-metrics-otlp-http';
7
- import { defaultResource, resourceFromAttributes } from '@opentelemetry/resources';
8
7
  import { MeterProvider, PeriodicExportingMetricReader } from '@opentelemetry/sdk-metrics';
9
- import { SEMRESATTRS_SERVICE_NAME, SEMRESATTRS_SERVICE_VERSION } from '@opentelemetry/semantic-conventions';
10
8
 
11
9
  import { log } from '@dxos/log';
12
10
  import { type MetricData, TRACE_PROCESSOR } from '@dxos/tracing';
@@ -23,25 +21,17 @@ export class OtelMetrics {
23
21
  // TODO: improve error handling/logging
24
22
  // https://github.com/open-telemetry/opentelemetry-js/issues/4823
25
23
  setDiagLogger(options.consoleDiagLogLevel);
26
- const resource = defaultResource().merge(
27
- resourceFromAttributes({
28
- [SEMRESATTRS_SERVICE_NAME]: this.options.serviceName,
29
- [SEMRESATTRS_SERVICE_VERSION]: this.options.serviceVersion,
30
- }),
31
- );
32
24
 
33
25
  const grafanaMetricReader = new PeriodicExportingMetricReader({
34
26
  exporter: new OTLPMetricExporter({
35
27
  url: this.options.endpoint + '/v1/metrics',
36
- headers: {
37
- Authorization: this.options.authorizationHeader,
38
- },
28
+ headers: this.options.headers,
39
29
  }),
40
30
  exportIntervalMillis: EXPORT_INTERVAL,
41
31
  });
42
32
 
43
33
  this._meterProvider = new MeterProvider({
44
- resource,
34
+ resource: this.options.resource,
45
35
  readers: [grafanaMetricReader],
46
36
  });
47
37
  this._meter = this._meterProvider.getMeter('dxos-observability');
@@ -3,12 +3,12 @@
3
3
  //
4
4
 
5
5
  import { DiagConsoleLogger, DiagLogLevel, diag } from '@opentelemetry/api';
6
+ import { type Resource } from '@opentelemetry/resources';
6
7
 
7
8
  export type OtelOptions = {
8
9
  endpoint: string;
9
- authorizationHeader: string;
10
- serviceName: string; // For the Otel API, the name of the entity for which signals (metrics or trace) are collected.
11
- serviceVersion: string; // For the Otel API, The name of the entity for which signals (metrics or trace) are collected.
10
+ headers: Record<string, string>;
11
+ resource: Resource;
12
12
  getTags: () => { [key: string]: string };
13
13
  consoleDiagLogLevel?: string;
14
14
  };
@@ -6,10 +6,9 @@ import { type Tracer, trace } from '@opentelemetry/api';
6
6
  import { getWebAutoInstrumentations } from '@opentelemetry/auto-instrumentations-web';
7
7
  import { OTLPTraceExporter } from '@opentelemetry/exporter-trace-otlp-http';
8
8
  import { registerInstrumentations } from '@opentelemetry/instrumentation';
9
- import { defaultResource, resourceFromAttributes } from '@opentelemetry/resources';
10
- import { BatchSpanProcessor, ConsoleSpanExporter, SimpleSpanProcessor } from '@opentelemetry/sdk-trace-base';
9
+ import { BatchSpanProcessor } from '@opentelemetry/sdk-trace-base';
11
10
  import { WebTracerProvider } from '@opentelemetry/sdk-trace-web';
12
- import { SEMRESATTRS_SERVICE_NAME, SEMRESATTRS_SERVICE_VERSION } from '@opentelemetry/semantic-conventions';
11
+ import { ATTR_SERVICE_VERSION } from '@opentelemetry/semantic-conventions';
13
12
 
14
13
  import { log } from '@dxos/log';
15
14
  import { type StartSpanOptions, TRACE_PROCESSOR } from '@dxos/tracing';
@@ -18,40 +17,42 @@ import { type OtelOptions } from './otel';
18
17
 
19
18
  export class OtelTraces {
20
19
  private _tracer: Tracer;
21
- constructor(private readonly options: OtelOptions) {
22
- const resource = defaultResource().merge(
23
- resourceFromAttributes({
24
- [SEMRESATTRS_SERVICE_NAME]: this.options.serviceName,
25
- [SEMRESATTRS_SERVICE_VERSION]: this.options.serviceVersion,
26
- }),
27
- );
28
20
 
21
+ constructor(private readonly options: OtelOptions) {
29
22
  const tracerProvider = new WebTracerProvider({
30
- resource,
23
+ resource: this.options.resource,
31
24
  spanProcessors: [
32
- new SimpleSpanProcessor(new ConsoleSpanExporter()),
33
25
  new BatchSpanProcessor(
34
26
  new OTLPTraceExporter({
35
27
  url: this.options.endpoint + '/v1/traces',
36
- headers: {
37
- Authorization: this.options.authorizationHeader,
38
- },
28
+ headers: this.options.headers,
39
29
  concurrencyLimit: 10, // an optional limit on pending requests
40
30
  }),
41
31
  ),
42
32
  ],
43
33
  });
44
34
 
45
- // TODO(nf): ContextManager? Propogator?
46
35
  trace.setGlobalTracerProvider(tracerProvider);
47
- this._tracer = trace.getTracer('dxos-observability', this.options.serviceVersion);
36
+
37
+ this._tracer = trace.getTracer(
38
+ 'dxos-observability',
39
+ this.options.resource.attributes[ATTR_SERVICE_VERSION]?.toString(),
40
+ );
48
41
  }
49
42
 
50
43
  public start(): void {
44
+ log('trace processor registered');
45
+
51
46
  registerInstrumentations({
52
- instrumentations: [getWebAutoInstrumentations()],
47
+ instrumentations: [
48
+ getWebAutoInstrumentations({
49
+ '@opentelemetry/instrumentation-fetch': {
50
+ ignoreUrls: [/api\.ipdata\.co/],
51
+ },
52
+ }),
53
+ ],
53
54
  });
54
- log('trace processor registered');
55
+
55
56
  TRACE_PROCESSOR.remoteTracing.registerProcessor({
56
57
  startSpan: (options: StartSpanOptions) => {
57
58
  log('begin otel trace', { options });
@@ -4,14 +4,8 @@
4
4
 
5
5
  import { type Tracer, trace } from '@opentelemetry/api';
6
6
  import { OTLPTraceExporter } from '@opentelemetry/exporter-trace-otlp-http';
7
- import { defaultResource, resourceFromAttributes } from '@opentelemetry/resources';
8
- import {
9
- BasicTracerProvider,
10
- BatchSpanProcessor,
11
- ConsoleSpanExporter,
12
- SimpleSpanProcessor,
13
- } from '@opentelemetry/sdk-trace-base';
14
- import { SEMRESATTRS_SERVICE_NAME, SEMRESATTRS_SERVICE_VERSION } from '@opentelemetry/semantic-conventions';
7
+ import { BasicTracerProvider, BatchSpanProcessor } from '@opentelemetry/sdk-trace-base';
8
+ import { ATTR_SERVICE_VERSION } from '@opentelemetry/semantic-conventions';
15
9
  import { log } from 'debug';
16
10
 
17
11
  import { type StartSpanOptions, TRACE_PROCESSOR } from '@dxos/tracing';
@@ -20,24 +14,15 @@ import { type OtelOptions } from './otel';
20
14
 
21
15
  export class OtelTraces {
22
16
  private _tracer: Tracer;
23
- constructor(private readonly options: OtelOptions) {
24
- const resource = defaultResource().merge(
25
- resourceFromAttributes({
26
- [SEMRESATTRS_SERVICE_NAME]: this.options.serviceName,
27
- [SEMRESATTRS_SERVICE_VERSION]: this.options.serviceVersion,
28
- }),
29
- );
30
17
 
18
+ constructor(private readonly options: OtelOptions) {
31
19
  const tracerProvider = new BasicTracerProvider({
32
- resource,
20
+ resource: this.options.resource,
33
21
  spanProcessors: [
34
- new SimpleSpanProcessor(new ConsoleSpanExporter()),
35
22
  new BatchSpanProcessor(
36
23
  new OTLPTraceExporter({
37
24
  url: this.options.endpoint + '/v1/traces',
38
- headers: {
39
- Authorization: this.options.authorizationHeader,
40
- },
25
+ headers: this.options.headers,
41
26
  concurrencyLimit: 10, // an optional limit on pending requests
42
27
  }),
43
28
  ),
@@ -45,11 +30,15 @@ export class OtelTraces {
45
30
  });
46
31
 
47
32
  trace.setGlobalTracerProvider(tracerProvider);
48
- this._tracer = trace.getTracer('dxos-observability', this.options.serviceVersion);
33
+ this._tracer = trace.getTracer(
34
+ 'dxos-observability',
35
+ this.options.resource.attributes[ATTR_SERVICE_VERSION]?.toString(),
36
+ );
49
37
  }
50
38
 
51
39
  public start(): void {
52
40
  log('trace processor registered');
41
+
53
42
  TRACE_PROCESSOR.remoteTracing.registerProcessor({
54
43
  startSpan: (options: StartSpanOptions) => {
55
44
  log('begin otel trace', { options });