@dxos/observability 0.8.4-main.ae835ea → 0.8.4-main.bc2380dfbc

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 (329) hide show
  1. package/LICENSE +102 -5
  2. package/README.md +14 -11
  3. package/dist/lib/browser/chunk-J5LGTIGS.mjs +10 -0
  4. package/dist/lib/browser/chunk-PSFTIG54.mjs +20 -0
  5. package/dist/lib/browser/chunk-PSFTIG54.mjs.map +7 -0
  6. package/dist/lib/browser/index.mjs +944 -34
  7. package/dist/lib/browser/index.mjs.map +4 -4
  8. package/dist/lib/browser/log-processor-HPHWNBOK.mjs +38 -0
  9. package/dist/lib/browser/log-processor-HPHWNBOK.mjs.map +7 -0
  10. package/dist/lib/browser/logs-UTNIFYHF.mjs +116 -0
  11. package/dist/lib/browser/logs-UTNIFYHF.mjs.map +7 -0
  12. package/dist/lib/browser/meta.json +1 -1
  13. package/dist/lib/browser/metrics-PRGSYAZJ.mjs +116 -0
  14. package/dist/lib/browser/metrics-PRGSYAZJ.mjs.map +7 -0
  15. package/dist/lib/browser/traces-browser-XRINKQUA.mjs +154 -0
  16. package/dist/lib/browser/traces-browser-XRINKQUA.mjs.map +7 -0
  17. package/dist/lib/node-esm/chunk-EDDZWPYV.mjs +22 -0
  18. package/dist/lib/node-esm/chunk-EDDZWPYV.mjs.map +7 -0
  19. package/dist/lib/node-esm/chunk-HSLMI22Q.mjs +11 -0
  20. package/dist/lib/node-esm/index.mjs +966 -34
  21. package/dist/lib/node-esm/index.mjs.map +4 -4
  22. package/dist/lib/node-esm/log-processor-ZODHERST.mjs +39 -0
  23. package/dist/lib/node-esm/log-processor-ZODHERST.mjs.map +7 -0
  24. package/dist/lib/node-esm/logs-ARJUVN3T.mjs +117 -0
  25. package/dist/lib/node-esm/logs-ARJUVN3T.mjs.map +7 -0
  26. package/dist/lib/node-esm/meta.json +1 -1
  27. package/dist/lib/node-esm/metrics-DREJOOAC.mjs +117 -0
  28. package/dist/lib/node-esm/metrics-DREJOOAC.mjs.map +7 -0
  29. package/dist/lib/node-esm/traces-74F7JUKF.mjs +125 -0
  30. package/dist/lib/node-esm/traces-74F7JUKF.mjs.map +7 -0
  31. package/dist/types/src/cli-observability-secrets.json +3 -4
  32. package/dist/types/src/extensions/index.d.ts +3 -0
  33. package/dist/types/src/extensions/index.d.ts.map +1 -0
  34. package/dist/types/src/extensions/index.js +6 -0
  35. package/dist/types/src/extensions/index.js.map +1 -0
  36. package/dist/types/src/extensions/otel/extension.d.ts +23 -0
  37. package/dist/types/src/extensions/otel/extension.d.ts.map +1 -0
  38. package/dist/types/src/extensions/otel/extension.js +206 -0
  39. package/dist/types/src/extensions/otel/extension.js.map +1 -0
  40. package/dist/types/src/extensions/otel/index.d.ts +2 -0
  41. package/dist/types/src/extensions/otel/index.d.ts.map +1 -0
  42. package/dist/types/src/extensions/otel/index.js +5 -0
  43. package/dist/types/src/extensions/otel/index.js.map +1 -0
  44. package/dist/types/src/{otel → extensions/otel}/logs.d.ts +4 -3
  45. package/dist/types/src/extensions/otel/logs.d.ts.map +1 -0
  46. package/dist/types/src/extensions/otel/logs.js +107 -0
  47. package/dist/types/src/extensions/otel/logs.js.map +1 -0
  48. package/dist/types/src/extensions/otel/metrics.d.ts.map +1 -0
  49. package/dist/types/src/{otel → extensions/otel}/metrics.js +4 -12
  50. package/dist/types/src/extensions/otel/metrics.js.map +1 -0
  51. package/dist/types/src/extensions/otel/otel.d.ts +19 -0
  52. package/dist/types/src/extensions/otel/otel.d.ts.map +1 -0
  53. package/dist/types/src/extensions/otel/otel.js +23 -0
  54. package/dist/types/src/extensions/otel/otel.js.map +1 -0
  55. package/dist/types/src/extensions/otel/span-processors.d.ts +25 -0
  56. package/dist/types/src/extensions/otel/span-processors.d.ts.map +1 -0
  57. package/dist/types/src/extensions/otel/span-processors.js +41 -0
  58. package/dist/types/src/extensions/otel/span-processors.js.map +1 -0
  59. package/dist/types/src/extensions/otel/traces-browser.d.ts +25 -0
  60. package/dist/types/src/extensions/otel/traces-browser.d.ts.map +1 -0
  61. package/dist/types/src/extensions/otel/traces-browser.js +105 -0
  62. package/dist/types/src/extensions/otel/traces-browser.js.map +1 -0
  63. package/dist/types/src/extensions/otel/traces.d.ts +25 -0
  64. package/dist/types/src/extensions/otel/traces.d.ts.map +1 -0
  65. package/dist/types/src/extensions/otel/traces.js +88 -0
  66. package/dist/types/src/extensions/otel/traces.js.map +1 -0
  67. package/dist/types/src/extensions/posthog/extension.d.ts +28 -0
  68. package/dist/types/src/extensions/posthog/extension.d.ts.map +1 -0
  69. package/dist/types/src/extensions/posthog/extension.js +144 -0
  70. package/dist/types/src/extensions/posthog/extension.js.map +1 -0
  71. package/dist/types/src/extensions/posthog/index.d.ts +2 -0
  72. package/dist/types/src/extensions/posthog/index.d.ts.map +1 -0
  73. package/dist/types/src/extensions/posthog/index.js +5 -0
  74. package/dist/types/src/extensions/posthog/index.js.map +1 -0
  75. package/dist/types/src/extensions/posthog/log-processor.d.ts +3 -0
  76. package/dist/types/src/extensions/posthog/log-processor.d.ts.map +1 -0
  77. package/dist/types/src/extensions/posthog/log-processor.js +36 -0
  78. package/dist/types/src/extensions/posthog/log-processor.js.map +1 -0
  79. package/dist/types/src/extensions/posthog/log-processor.test.d.ts +2 -0
  80. package/dist/types/src/extensions/posthog/log-processor.test.d.ts.map +1 -0
  81. package/dist/types/src/extensions/posthog/log-processor.test.js +146 -0
  82. package/dist/types/src/extensions/posthog/log-processor.test.js.map +1 -0
  83. package/dist/types/src/extensions/stub.d.ts +3 -0
  84. package/dist/types/src/extensions/stub.d.ts.map +1 -0
  85. package/dist/types/src/extensions/stub.js +16 -0
  86. package/dist/types/src/extensions/stub.js.map +1 -0
  87. package/dist/types/src/index.d.ts +3 -2
  88. package/dist/types/src/index.d.ts.map +1 -1
  89. package/dist/types/src/index.js +4 -3
  90. package/dist/types/src/index.js.map +1 -1
  91. package/dist/types/src/observability-extension.d.ts +74 -0
  92. package/dist/types/src/observability-extension.d.ts.map +1 -0
  93. package/dist/types/src/observability-extension.js +5 -0
  94. package/dist/types/src/observability-extension.js.map +1 -0
  95. package/dist/types/src/observability.d.ts +32 -110
  96. package/dist/types/src/observability.d.ts.map +1 -1
  97. package/dist/types/src/observability.js +177 -465
  98. package/dist/types/src/observability.js.map +1 -1
  99. package/dist/types/src/observability.test.d.ts +2 -0
  100. package/dist/types/src/observability.test.d.ts.map +1 -0
  101. package/dist/types/src/observability.test.js +312 -0
  102. package/dist/types/src/observability.test.js.map +1 -0
  103. package/dist/types/src/providers/client-observability.d.ts +11 -0
  104. package/dist/types/src/providers/client-observability.d.ts.map +1 -0
  105. package/dist/types/src/providers/client-observability.js +202 -0
  106. package/dist/types/src/providers/client-observability.js.map +1 -0
  107. package/dist/types/src/providers/index.d.ts +4 -0
  108. package/dist/types/src/providers/index.d.ts.map +1 -0
  109. package/dist/types/src/providers/index.js +7 -0
  110. package/dist/types/src/providers/index.js.map +1 -0
  111. package/dist/types/src/providers/ip-data.d.ts +5 -0
  112. package/dist/types/src/providers/ip-data.d.ts.map +1 -0
  113. package/dist/types/src/providers/ip-data.js +57 -0
  114. package/dist/types/src/providers/ip-data.js.map +1 -0
  115. package/dist/types/src/providers/storage.d.ts +3 -0
  116. package/dist/types/src/providers/storage.d.ts.map +1 -0
  117. package/dist/types/src/providers/storage.js +19 -0
  118. package/dist/types/src/providers/storage.js.map +1 -0
  119. package/dist/types/src/storage/browser.d.ts +19 -0
  120. package/dist/types/src/storage/browser.d.ts.map +1 -0
  121. package/dist/types/src/storage/browser.js +69 -0
  122. package/dist/types/src/storage/browser.js.map +1 -0
  123. package/dist/types/src/storage/index.d.ts +2 -0
  124. package/dist/types/src/storage/index.d.ts.map +1 -0
  125. package/dist/types/src/storage/index.js.map +1 -0
  126. package/dist/types/src/storage/node.d.ts +26 -0
  127. package/dist/types/src/storage/node.d.ts.map +1 -0
  128. package/dist/types/src/{helpers/node-observability.js → storage/node.js} +38 -43
  129. package/dist/types/src/storage/node.js.map +1 -0
  130. package/dist/types/src/storage/node.test.d.ts +2 -0
  131. package/dist/types/src/storage/node.test.d.ts.map +1 -0
  132. package/dist/types/src/storage/node.test.js +103 -0
  133. package/dist/types/src/storage/node.test.js.map +1 -0
  134. package/dist/types/tsconfig.tsbuildinfo +1 -1
  135. package/package.json +48 -65
  136. package/src/cli-observability-secrets.json +3 -4
  137. package/src/extensions/index.ts +6 -0
  138. package/src/extensions/otel/extension.ts +264 -0
  139. package/src/extensions/otel/index.ts +5 -0
  140. package/src/extensions/otel/logs.ts +137 -0
  141. package/src/{otel → extensions/otel}/metrics.ts +4 -14
  142. package/src/extensions/otel/otel.ts +34 -0
  143. package/src/extensions/otel/span-processors.ts +45 -0
  144. package/src/extensions/otel/traces-browser.ts +139 -0
  145. package/src/extensions/otel/traces.ts +113 -0
  146. package/src/extensions/posthog/extension.ts +188 -0
  147. package/src/extensions/posthog/index.ts +5 -0
  148. package/src/extensions/posthog/log-processor.test.ts +186 -0
  149. package/src/extensions/posthog/log-processor.ts +43 -0
  150. package/src/extensions/stub.ts +19 -0
  151. package/src/index.ts +4 -3
  152. package/src/observability-extension.ts +94 -0
  153. package/src/observability.test.ts +531 -0
  154. package/src/observability.ts +236 -577
  155. package/src/providers/client-observability.ts +255 -0
  156. package/src/providers/index.ts +7 -0
  157. package/src/providers/ip-data.ts +91 -0
  158. package/src/providers/storage.ts +23 -0
  159. package/src/storage/browser.ts +71 -0
  160. package/src/{segment → storage}/index.ts +0 -1
  161. package/src/storage/node.test.ts +129 -0
  162. package/src/{helpers/node-observability.ts → storage/node.ts} +41 -71
  163. package/src/vite-import-meta.d.ts +14 -0
  164. package/dist/lib/browser/chunk-5ICT2XF2.mjs +0 -1
  165. package/dist/lib/browser/chunk-USIB5JOP.mjs +0 -1019
  166. package/dist/lib/browser/chunk-USIB5JOP.mjs.map +0 -7
  167. package/dist/lib/browser/chunk-XNAF22QM.mjs +0 -148
  168. package/dist/lib/browser/chunk-XNAF22QM.mjs.map +0 -7
  169. package/dist/lib/browser/chunk-ZI3ZS3PA.mjs +0 -164
  170. package/dist/lib/browser/chunk-ZI3ZS3PA.mjs.map +0 -7
  171. package/dist/lib/browser/observability-AOZNUWZS.mjs +0 -10
  172. package/dist/lib/browser/otel-UH7ZRWC2.mjs +0 -287
  173. package/dist/lib/browser/otel-UH7ZRWC2.mjs.map +0 -7
  174. package/dist/lib/browser/segment/index.mjs +0 -11
  175. package/dist/lib/browser/segment/index.mjs.map +0 -7
  176. package/dist/lib/browser/sentry/index.mjs +0 -24
  177. package/dist/lib/browser/sentry/index.mjs.map +0 -7
  178. package/dist/lib/browser/sentry-log-processor-5LSQJMIO.mjs +0 -146
  179. package/dist/lib/browser/sentry-log-processor-5LSQJMIO.mjs.map +0 -7
  180. package/dist/lib/node-esm/chunk-JJS4CBLT.mjs +0 -1020
  181. package/dist/lib/node-esm/chunk-JJS4CBLT.mjs.map +0 -7
  182. package/dist/lib/node-esm/chunk-OJV247NY.mjs +0 -204
  183. package/dist/lib/node-esm/chunk-OJV247NY.mjs.map +0 -7
  184. package/dist/lib/node-esm/chunk-QK5IUYVA.mjs +0 -135
  185. package/dist/lib/node-esm/chunk-QK5IUYVA.mjs.map +0 -7
  186. package/dist/lib/node-esm/chunk-QUZL7LKE.mjs +0 -2
  187. package/dist/lib/node-esm/chunk-QUZL7LKE.mjs.map +0 -7
  188. package/dist/lib/node-esm/observability-UWX2LAYX.mjs +0 -11
  189. package/dist/lib/node-esm/observability-UWX2LAYX.mjs.map +0 -7
  190. package/dist/lib/node-esm/otel-7PUCFSTY.mjs +0 -270
  191. package/dist/lib/node-esm/otel-7PUCFSTY.mjs.map +0 -7
  192. package/dist/lib/node-esm/segment/index.mjs +0 -12
  193. package/dist/lib/node-esm/segment/index.mjs.map +0 -7
  194. package/dist/lib/node-esm/sentry/index.mjs +0 -25
  195. package/dist/lib/node-esm/sentry/index.mjs.map +0 -7
  196. package/dist/lib/node-esm/sentry-log-processor-C4UGMAMV.mjs +0 -147
  197. package/dist/lib/node-esm/sentry-log-processor-C4UGMAMV.mjs.map +0 -7
  198. package/dist/types/src/helpers/browser-observability.d.ts +0 -17
  199. package/dist/types/src/helpers/browser-observability.d.ts.map +0 -1
  200. package/dist/types/src/helpers/browser-observability.js +0 -138
  201. package/dist/types/src/helpers/browser-observability.js.map +0 -1
  202. package/dist/types/src/helpers/common.d.ts +0 -12
  203. package/dist/types/src/helpers/common.d.ts.map +0 -1
  204. package/dist/types/src/helpers/common.js +0 -23
  205. package/dist/types/src/helpers/common.js.map +0 -1
  206. package/dist/types/src/helpers/index.d.ts +0 -6
  207. package/dist/types/src/helpers/index.d.ts.map +0 -1
  208. package/dist/types/src/helpers/index.js +0 -9
  209. package/dist/types/src/helpers/index.js.map +0 -1
  210. package/dist/types/src/helpers/map-spaces.d.ts +0 -18
  211. package/dist/types/src/helpers/map-spaces.d.ts.map +0 -1
  212. package/dist/types/src/helpers/map-spaces.js +0 -36
  213. package/dist/types/src/helpers/map-spaces.js.map +0 -1
  214. package/dist/types/src/helpers/node-observability.d.ts +0 -24
  215. package/dist/types/src/helpers/node-observability.d.ts.map +0 -1
  216. package/dist/types/src/helpers/node-observability.js.map +0 -1
  217. package/dist/types/src/helpers/setup-telemetry-listeners.d.ts +0 -4
  218. package/dist/types/src/helpers/setup-telemetry-listeners.d.ts.map +0 -1
  219. package/dist/types/src/helpers/setup-telemetry-listeners.js +0 -94
  220. package/dist/types/src/helpers/setup-telemetry-listeners.js.map +0 -1
  221. package/dist/types/src/otel/index.d.ts +0 -5
  222. package/dist/types/src/otel/index.d.ts.map +0 -1
  223. package/dist/types/src/otel/index.js +0 -8
  224. package/dist/types/src/otel/index.js.map +0 -1
  225. package/dist/types/src/otel/logs.d.ts.map +0 -1
  226. package/dist/types/src/otel/logs.js +0 -74
  227. package/dist/types/src/otel/logs.js.map +0 -1
  228. package/dist/types/src/otel/metrics.d.ts.map +0 -1
  229. package/dist/types/src/otel/metrics.js.map +0 -1
  230. package/dist/types/src/otel/otel.d.ts +0 -12
  231. package/dist/types/src/otel/otel.d.ts.map +0 -1
  232. package/dist/types/src/otel/otel.js +0 -11
  233. package/dist/types/src/otel/otel.js.map +0 -1
  234. package/dist/types/src/otel/traces-browser.d.ts +0 -8
  235. package/dist/types/src/otel/traces-browser.d.ts.map +0 -1
  236. package/dist/types/src/otel/traces-browser.js +0 -53
  237. package/dist/types/src/otel/traces-browser.js.map +0 -1
  238. package/dist/types/src/otel/traces.d.ts +0 -8
  239. package/dist/types/src/otel/traces.d.ts.map +0 -1
  240. package/dist/types/src/otel/traces.js +0 -46
  241. package/dist/types/src/otel/traces.js.map +0 -1
  242. package/dist/types/src/segment/base.d.ts +0 -15
  243. package/dist/types/src/segment/base.d.ts.map +0 -1
  244. package/dist/types/src/segment/base.js +0 -51
  245. package/dist/types/src/segment/base.js.map +0 -1
  246. package/dist/types/src/segment/browser.d.ts +0 -15
  247. package/dist/types/src/segment/browser.d.ts.map +0 -1
  248. package/dist/types/src/segment/browser.js +0 -63
  249. package/dist/types/src/segment/browser.js.map +0 -1
  250. package/dist/types/src/segment/index.d.ts +0 -3
  251. package/dist/types/src/segment/index.d.ts.map +0 -1
  252. package/dist/types/src/segment/index.js +0 -6
  253. package/dist/types/src/segment/index.js.map +0 -1
  254. package/dist/types/src/segment/node.d.ts +0 -16
  255. package/dist/types/src/segment/node.d.ts.map +0 -1
  256. package/dist/types/src/segment/node.js +0 -84
  257. package/dist/types/src/segment/node.js.map +0 -1
  258. package/dist/types/src/segment/types.d.ts +0 -52
  259. package/dist/types/src/segment/types.d.ts.map +0 -1
  260. package/dist/types/src/segment/types.js +0 -18
  261. package/dist/types/src/segment/types.js.map +0 -1
  262. package/dist/types/src/sentry/browser.d.ts +0 -32
  263. package/dist/types/src/sentry/browser.d.ts.map +0 -1
  264. package/dist/types/src/sentry/browser.js +0 -110
  265. package/dist/types/src/sentry/browser.js.map +0 -1
  266. package/dist/types/src/sentry/index.d.ts +0 -3
  267. package/dist/types/src/sentry/index.d.ts.map +0 -1
  268. package/dist/types/src/sentry/index.js.map +0 -1
  269. package/dist/types/src/sentry/node.d.ts +0 -32
  270. package/dist/types/src/sentry/node.d.ts.map +0 -1
  271. package/dist/types/src/sentry/node.js +0 -106
  272. package/dist/types/src/sentry/node.js.map +0 -1
  273. package/dist/types/src/sentry/node.node.test.d.ts +0 -2
  274. package/dist/types/src/sentry/node.node.test.d.ts.map +0 -1
  275. package/dist/types/src/sentry/node.node.test.js +0 -32
  276. package/dist/types/src/sentry/node.node.test.js.map +0 -1
  277. package/dist/types/src/sentry/sentry-log-processor.d.ts +0 -9
  278. package/dist/types/src/sentry/sentry-log-processor.d.ts.map +0 -1
  279. package/dist/types/src/sentry/sentry-log-processor.js +0 -144
  280. package/dist/types/src/sentry/sentry-log-processor.js.map +0 -1
  281. package/dist/types/src/sentry/sentry.node.test.d.ts +0 -2
  282. package/dist/types/src/sentry/sentry.node.test.d.ts.map +0 -1
  283. package/dist/types/src/sentry/sentry.node.test.js +0 -28
  284. package/dist/types/src/sentry/sentry.node.test.js.map +0 -1
  285. package/dist/types/src/sentry/types.d.ts +0 -18
  286. package/dist/types/src/sentry/types.d.ts.map +0 -1
  287. package/dist/types/src/sentry/types.js +0 -4
  288. package/dist/types/src/sentry/types.js.map +0 -1
  289. package/dist/types/src/testing/index.d.ts +0 -2
  290. package/dist/types/src/testing/index.d.ts.map +0 -1
  291. package/dist/types/src/testing/index.js +0 -5
  292. package/dist/types/src/testing/index.js.map +0 -1
  293. package/dist/types/src/testing/testkit/browser.d.ts +0 -2
  294. package/dist/types/src/testing/testkit/browser.d.ts.map +0 -1
  295. package/dist/types/src/testing/testkit/browser.js +0 -7
  296. package/dist/types/src/testing/testkit/browser.js.map +0 -1
  297. package/dist/types/src/testing/testkit/index.d.ts +0 -2
  298. package/dist/types/src/testing/testkit/index.d.ts.map +0 -1
  299. package/dist/types/src/testing/testkit/index.js +0 -6
  300. package/dist/types/src/testing/testkit/index.js.map +0 -1
  301. package/src/helpers/browser-observability.ts +0 -178
  302. package/src/helpers/common.ts +0 -38
  303. package/src/helpers/index.ts +0 -9
  304. package/src/helpers/map-spaces.ts +0 -48
  305. package/src/helpers/setup-telemetry-listeners.ts +0 -109
  306. package/src/otel/index.ts +0 -8
  307. package/src/otel/logs.ts +0 -102
  308. package/src/otel/otel.ts +0 -21
  309. package/src/otel/traces-browser.ts +0 -62
  310. package/src/otel/traces.ts +0 -60
  311. package/src/segment/base.ts +0 -69
  312. package/src/segment/browser.ts +0 -69
  313. package/src/segment/node.ts +0 -95
  314. package/src/segment/types.ts +0 -57
  315. package/src/sentry/browser.ts +0 -133
  316. package/src/sentry/index.ts +0 -6
  317. package/src/sentry/node.node.test.ts +0 -40
  318. package/src/sentry/node.ts +0 -126
  319. package/src/sentry/sentry-log-processor.ts +0 -174
  320. package/src/sentry/sentry.node.test.ts +0 -35
  321. package/src/sentry/types.ts +0 -22
  322. package/src/testing/index.ts +0 -5
  323. package/src/testing/testkit/browser.ts +0 -8
  324. package/src/testing/testkit/index.ts +0 -7
  325. package/src/testing/testkit/shims.d.ts +0 -5
  326. /package/dist/lib/browser/{chunk-5ICT2XF2.mjs.map → chunk-J5LGTIGS.mjs.map} +0 -0
  327. /package/dist/lib/{browser/observability-AOZNUWZS.mjs.map → node-esm/chunk-HSLMI22Q.mjs.map} +0 -0
  328. /package/dist/types/src/{otel → extensions/otel}/metrics.d.ts +0 -0
  329. /package/dist/types/src/{sentry → storage}/index.js +0 -0
@@ -0,0 +1,107 @@
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 { resolveOtlpUrl, 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: resolveOtlpUrl(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
+ /** Maps {@link LogLevel} to OpenTelemetry {@link SeverityNumber}. */
53
+ const convertLevel = (level) => {
54
+ switch (level) {
55
+ case LogLevel.TRACE:
56
+ return SeverityNumber.TRACE;
57
+ case LogLevel.DEBUG:
58
+ return SeverityNumber.DEBUG;
59
+ case LogLevel.VERBOSE:
60
+ return SeverityNumber.INFO;
61
+ case LogLevel.INFO:
62
+ return SeverityNumber.INFO;
63
+ case LogLevel.WARN:
64
+ return SeverityNumber.WARN;
65
+ case LogLevel.ERROR:
66
+ return SeverityNumber.ERROR;
67
+ default:
68
+ return SeverityNumber.UNSPECIFIED;
69
+ }
70
+ };
71
+ const safeStringify = (value) => {
72
+ try {
73
+ return JSON.stringify(value);
74
+ }
75
+ catch {
76
+ return '[Circular]';
77
+ }
78
+ };
79
+ // TODO(wittjosiah): Reconcile logging utils w/ EDGE.
80
+ const stringifyValues = (object, keyPrefix, depth = 1) => {
81
+ if (!object) {
82
+ return {};
83
+ }
84
+ const result = {};
85
+ for (const [key, value] of Object.entries(object)) {
86
+ if (value === undefined) {
87
+ continue;
88
+ }
89
+ const newKey = keyPrefix ? `${keyPrefix}${key}` : key;
90
+ if (typeof value === 'object') {
91
+ if (!value || Array.isArray(value) || depth > FLATTEN_DEPTH) {
92
+ result[newKey] = safeStringify(value);
93
+ }
94
+ else {
95
+ const flattened = stringifyValues(value, `${newKey}_`, depth + 1);
96
+ for (const [flattenedKey, flattenedValue] of Object.entries(flattened)) {
97
+ result[flattenedKey] = flattenedValue;
98
+ }
99
+ }
100
+ }
101
+ else {
102
+ result[newKey] = String(value);
103
+ }
104
+ }
105
+ return result;
106
+ };
107
+ //# 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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"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"metrics.d.ts","sourceRoot":"","sources":["../../../../../src/extensions/otel/metrics.ts"],"names":[],"mappings":"AAWA,OAAO,EAAE,KAAK,WAAW,EAAiC,MAAM,QAAQ,CAAC;AAIzE,qBAAa,WAAW;IAIV,OAAO,CAAC,QAAQ,CAAC,OAAO;IAHpC,OAAO,CAAC,cAAc,CAAgB;IACtC,OAAO,CAAC,MAAM,CAAQ;IAEtB,YAA6B,OAAO,EAAE,WAAW,EAoChD;IAED,KAAK,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,GAAG,GAAG,IAAI,CAInD;IAED,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,GAAG,GAAG,IAAI,CAIxD;IAED,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,GAAG,GAAG,IAAI,CAI1D;IAED,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAErB;IAED,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAErB;CACF"}
@@ -2,12 +2,10 @@
2
2
  // Copyright 2024 DXOS.org
3
3
  //
4
4
  import { OTLPMetricExporter } from '@opentelemetry/exporter-metrics-otlp-http';
5
- import { defaultResource, resourceFromAttributes } 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
- import { setDiagLogger } from './otel';
8
+ import { resolveOtlpUrl, setDiagLogger } from './otel';
11
9
  const EXPORT_INTERVAL = 60 * 1000;
12
10
  export class OtelMetrics {
13
11
  options;
@@ -18,21 +16,15 @@ export class OtelMetrics {
18
16
  // TODO: improve error handling/logging
19
17
  // https://github.com/open-telemetry/opentelemetry-js/issues/4823
20
18
  setDiagLogger(options.consoleDiagLogLevel);
21
- const resource = defaultResource().merge(resourceFromAttributes({
22
- [SEMRESATTRS_SERVICE_NAME]: this.options.serviceName,
23
- [SEMRESATTRS_SERVICE_VERSION]: this.options.serviceVersion,
24
- }));
25
19
  const grafanaMetricReader = new PeriodicExportingMetricReader({
26
20
  exporter: new OTLPMetricExporter({
27
- url: this.options.endpoint + '/v1/metrics',
28
- headers: {
29
- Authorization: this.options.authorizationHeader,
30
- },
21
+ url: resolveOtlpUrl(this.options.endpoint + '/v1/metrics'),
22
+ headers: this.options.headers,
31
23
  }),
32
24
  exportIntervalMillis: EXPORT_INTERVAL,
33
25
  });
34
26
  this._meterProvider = new MeterProvider({
35
- resource,
27
+ resource: this.options.resource,
36
28
  readers: [grafanaMetricReader],
37
29
  });
38
30
  this._meter = this._meterProvider.getMeter('dxos-observability');
@@ -0,0 +1 @@
1
+ {"version":3,"file":"metrics.js","sourceRoot":"","sources":["../../../../../src/extensions/otel/metrics.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,19 @@
1
+ import { type Resource } from '@opentelemetry/resources';
2
+ export type OtelOptions = {
3
+ endpoint: string;
4
+ headers: Record<string, string>;
5
+ resource: Resource;
6
+ getTags: () => {
7
+ [key: string]: string;
8
+ };
9
+ consoleDiagLogLevel?: string;
10
+ };
11
+ export declare const setDiagLogger: (level?: string) => void;
12
+ /**
13
+ * Resolve a possibly-relative OTLP exporter URL to an absolute URL.
14
+ * The OpenTelemetry browser HTTP exporter validates user-provided URLs with `new URL(url)`,
15
+ * which throws on relative paths like `/api/otel/v1/logs`. In a browser context we resolve
16
+ * against `window.location.origin`; outside the browser we return the input unchanged.
17
+ */
18
+ export declare const resolveOtlpUrl: (url: string) => string;
19
+ //# sourceMappingURL=otel.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"otel.d.ts","sourceRoot":"","sources":["../../../../../src/extensions/otel/otel.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,KAAK,QAAQ,EAAE,MAAM,0BAA0B,CAAC;AAEzD,MAAM,MAAM,WAAW,GAAG;IACxB,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAChC,QAAQ,EAAE,QAAQ,CAAC;IACnB,OAAO,EAAE,MAAM;QAAE,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAAA;KAAE,CAAC;IACzC,mBAAmB,CAAC,EAAE,MAAM,CAAC;CAC9B,CAAC;AAEF,eAAO,MAAM,aAAa,WAAY,MAAM,SAK3C,CAAC;AAEF;;;;;GAKG;AACH,eAAO,MAAM,cAAc,QAAS,MAAM,KAAG,MAK5C,CAAC"}
@@ -0,0 +1,23 @@
1
+ //
2
+ // Copyright 2024 DXOS.org
3
+ //
4
+ import { DiagConsoleLogger, DiagLogLevel, diag } from '@opentelemetry/api';
5
+ export const setDiagLogger = (level) => {
6
+ const logLevel = DiagLogLevel[level];
7
+ if (logLevel) {
8
+ diag.setLogger(new DiagConsoleLogger(), logLevel);
9
+ }
10
+ };
11
+ /**
12
+ * Resolve a possibly-relative OTLP exporter URL to an absolute URL.
13
+ * The OpenTelemetry browser HTTP exporter validates user-provided URLs with `new URL(url)`,
14
+ * which throws on relative paths like `/api/otel/v1/logs`. In a browser context we resolve
15
+ * against `window.location.origin`; outside the browser we return the input unchanged.
16
+ */
17
+ export const resolveOtlpUrl = (url) => {
18
+ if (typeof window !== 'undefined' && url.startsWith('/')) {
19
+ return new URL(url, window.location.origin).toString();
20
+ }
21
+ return url;
22
+ };
23
+ //# sourceMappingURL=otel.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"otel.js","sourceRoot":"","sources":["../../../../../src/extensions/otel/otel.ts"],"names":[],"mappings":"AAAA,EAAE;AACF,0BAA0B;AAC1B,EAAE;AAEF,OAAO,EAAE,iBAAiB,EAAE,YAAY,EAAE,IAAI,EAAE,MAAM,oBAAoB,CAAC;AAW3E,MAAM,CAAC,MAAM,aAAa,GAAG,CAAC,KAAc,EAAE,EAAE;IAC9C,MAAM,QAAQ,GAAG,YAAY,CAAC,KAAkC,CAAC,CAAC;IAClE,IAAI,QAAQ,EAAE,CAAC;QACb,IAAI,CAAC,SAAS,CAAC,IAAI,iBAAiB,EAAE,EAAE,QAAQ,CAAC,CAAC;IACpD,CAAC;AACH,CAAC,CAAC;AAEF;;;;;GAKG;AACH,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,GAAW,EAAU,EAAE;IACpD,IAAI,OAAO,MAAM,KAAK,WAAW,IAAI,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;QACzD,OAAO,IAAI,GAAG,CAAC,GAAG,EAAE,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,QAAQ,EAAE,CAAC;IACzD,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC,CAAC"}
@@ -0,0 +1,25 @@
1
+ import { type Context } from '@opentelemetry/api';
2
+ import { type ReadableSpan, type Span, type SpanProcessor } from '@opentelemetry/sdk-trace-base';
3
+ /**
4
+ * Injects dynamic tags as attributes on every span.
5
+ *
6
+ * This is an `onStart`-only processor; `onEnd`/`shutdown`/`forceFlush` are no-ops
7
+ * because this processor never holds pending work (delegates export to downstream
8
+ * processors like BatchSpanProcessor).
9
+ *
10
+ * Use for tags that are not known at provider construction (e.g. identity
11
+ * resolved asynchronously after login). For values known at startup, prefer
12
+ * putting them on the `Resource` — see `extension.ts`.
13
+ *
14
+ * Failures in the tag provider are swallowed so they can never break span
15
+ * recording (the processor is best-effort and runs on the startSpan hot path).
16
+ */
17
+ export declare class TagInjectorSpanProcessor implements SpanProcessor {
18
+ private readonly _getTags;
19
+ constructor(_getTags: () => Record<string, string>);
20
+ onStart(span: Span, _parentContext: Context): void;
21
+ onEnd(_span: ReadableSpan): void;
22
+ shutdown(): Promise<void>;
23
+ forceFlush(): Promise<void>;
24
+ }
25
+ //# sourceMappingURL=span-processors.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"span-processors.d.ts","sourceRoot":"","sources":["../../../../../src/extensions/otel/span-processors.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,KAAK,OAAO,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,KAAK,YAAY,EAAE,KAAK,IAAI,EAAE,KAAK,aAAa,EAAE,MAAM,+BAA+B,CAAC;AAIjG;;;;;;;;;;;;;GAaG;AACH,qBAAa,wBAAyB,YAAW,aAAa;IAChD,OAAO,CAAC,QAAQ,CAAC,QAAQ;IAArC,YAA6B,QAAQ,EAAE,MAAM,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EAAI;IAEvE,OAAO,CAAC,IAAI,EAAE,IAAI,EAAE,cAAc,EAAE,OAAO,GAAG,IAAI,CAWjD;IAED,KAAK,CAAC,KAAK,EAAE,YAAY,GAAG,IAAI,CAAG;IAE7B,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC,CAAG;IAE5B,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC,CAAG;CACrC"}
@@ -0,0 +1,41 @@
1
+ //
2
+ // Copyright 2025 DXOS.org
3
+ //
4
+ import { log } from '@dxos/log';
5
+ /**
6
+ * Injects dynamic tags as attributes on every span.
7
+ *
8
+ * This is an `onStart`-only processor; `onEnd`/`shutdown`/`forceFlush` are no-ops
9
+ * because this processor never holds pending work (delegates export to downstream
10
+ * processors like BatchSpanProcessor).
11
+ *
12
+ * Use for tags that are not known at provider construction (e.g. identity
13
+ * resolved asynchronously after login). For values known at startup, prefer
14
+ * putting them on the `Resource` — see `extension.ts`.
15
+ *
16
+ * Failures in the tag provider are swallowed so they can never break span
17
+ * recording (the processor is best-effort and runs on the startSpan hot path).
18
+ */
19
+ export class TagInjectorSpanProcessor {
20
+ _getTags;
21
+ constructor(_getTags) {
22
+ this._getTags = _getTags;
23
+ }
24
+ onStart(span, _parentContext) {
25
+ let tags;
26
+ try {
27
+ tags = this._getTags();
28
+ }
29
+ catch (err) {
30
+ log.catch(err);
31
+ return;
32
+ }
33
+ for (const [key, value] of Object.entries(tags)) {
34
+ span.setAttribute(key, value);
35
+ }
36
+ }
37
+ onEnd(_span) { }
38
+ async shutdown() { }
39
+ async forceFlush() { }
40
+ }
41
+ //# sourceMappingURL=span-processors.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"span-processors.js","sourceRoot":"","sources":["../../../../../src/extensions/otel/span-processors.ts"],"names":[],"mappings":"AAAA,EAAE;AACF,0BAA0B;AAC1B,EAAE;AAKF,OAAO,EAAE,GAAG,EAAE,MAAM,WAAW,CAAC;AAEhC;;;;;;;;;;;;;GAaG;AACH,MAAM,OAAO,wBAAwB;IACN,QAAQ;IAArC,YAA6B,QAAsC;wBAAtC,QAAQ;IAAiC,CAAC;IAEvE,OAAO,CAAC,IAAU,EAAE,cAAuB;QACzC,IAAI,IAA4B,CAAC;QACjC,IAAI,CAAC;YACH,IAAI,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC;QACzB,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;YACf,OAAO;QACT,CAAC;QACD,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC;YAChD,IAAI,CAAC,YAAY,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;QAChC,CAAC;IACH,CAAC;IAED,KAAK,CAAC,KAAmB,IAAS,CAAC;IAEnC,KAAK,CAAC,QAAQ,KAAmB,CAAC;IAElC,KAAK,CAAC,UAAU,KAAmB,CAAC;CACrC"}
@@ -0,0 +1,25 @@
1
+ import { type OtelOptions } from './otel';
2
+ export declare class OtelTraces {
3
+ private readonly options;
4
+ private _tracer;
5
+ private readonly _tracerProvider;
6
+ constructor(options: OtelOptions);
7
+ /**
8
+ * Forcibly flush the BatchSpanProcessor. Call before process exit / page unload
9
+ * to avoid losing queued spans (which manifests as "Missing Span" in SigNoz —
10
+ * their already-exported children reference a parent that never made it to OTLP).
11
+ */
12
+ flush(): Promise<void>;
13
+ /**
14
+ * Flush + shut down the tracer provider via `WebTracerProvider.shutdown()`,
15
+ * which forces a final export then terminates all span processors.
16
+ *
17
+ * Terminal and effectively one-shot: safe to call after `flush()`, but
18
+ * `flush()` MUST NOT be called after `close()` — shutdown stops further
19
+ * exporting, so subsequent `close()`/`flush()` calls resolve without
20
+ * emitting new spans.
21
+ */
22
+ close(): Promise<void>;
23
+ start(): void;
24
+ }
25
+ //# sourceMappingURL=traces-browser.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"traces-browser.d.ts","sourceRoot":"","sources":["../../../../../src/extensions/otel/traces-browser.ts"],"names":[],"mappings":"AA4BA,OAAO,EAAE,KAAK,WAAW,EAAkB,MAAM,QAAQ,CAAC;AAG1D,qBAAa,UAAU;IAIT,OAAO,CAAC,QAAQ,CAAC,OAAO;IAHpC,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAoB;IAEpD,YAA6B,OAAO,EAAE,WAAW,EA6BhD;IAED;;;;OAIG;IACU,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAElC;IAED;;;;;;;;OAQG;IACU,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAElC;IAEM,KAAK,IAAI,IAAI,CAiDnB;CACF"}
@@ -0,0 +1,105 @@
1
+ //
2
+ // Copyright 2024 DXOS.org
3
+ //
4
+ import { ROOT_CONTEXT, SpanStatusCode, context as otelContext, propagation, trace, } from '@opentelemetry/api';
5
+ import { getWebAutoInstrumentations } from '@opentelemetry/auto-instrumentations-web';
6
+ import { W3CTraceContextPropagator } from '@opentelemetry/core';
7
+ import { OTLPTraceExporter } from '@opentelemetry/exporter-trace-otlp-http';
8
+ import { registerInstrumentations } from '@opentelemetry/instrumentation';
9
+ import { AlwaysOnSampler, BatchSpanProcessor, ParentBasedSampler, TraceIdRatioBasedSampler, } from '@opentelemetry/sdk-trace-base';
10
+ import { WebTracerProvider } from '@opentelemetry/sdk-trace-web';
11
+ import { ATTR_SERVICE_VERSION } from '@opentelemetry/semantic-conventions';
12
+ import { log } from '@dxos/log';
13
+ import { TRACE_ALL_KEY, TRACE_PROCESSOR } from '@dxos/tracing';
14
+ import { resolveOtlpUrl } from './otel';
15
+ import { TagInjectorSpanProcessor } from './span-processors';
16
+ export class OtelTraces {
17
+ options;
18
+ _tracer;
19
+ _tracerProvider;
20
+ constructor(options) {
21
+ this.options = options;
22
+ propagation.setGlobalPropagator(new W3CTraceContextPropagator());
23
+ const forceTraceAll = typeof localStorage !== 'undefined' && localStorage.getItem(TRACE_ALL_KEY) === 'true';
24
+ this._tracerProvider = new WebTracerProvider({
25
+ resource: this.options.resource,
26
+ sampler: new ParentBasedSampler({
27
+ root: forceTraceAll ? new AlwaysOnSampler() : new TraceIdRatioBasedSampler(0.3),
28
+ }),
29
+ spanProcessors: [
30
+ new TagInjectorSpanProcessor(this.options.getTags),
31
+ new BatchSpanProcessor(new OTLPTraceExporter({
32
+ url: resolveOtlpUrl(this.options.endpoint + '/v1/traces'),
33
+ headers: this.options.headers,
34
+ concurrencyLimit: 10,
35
+ }), { scheduledDelayMillis: 5_000 }),
36
+ ],
37
+ });
38
+ trace.setGlobalTracerProvider(this._tracerProvider);
39
+ this._tracer = trace.getTracer('dxos-observability', this.options.resource.attributes[ATTR_SERVICE_VERSION]?.toString());
40
+ }
41
+ /**
42
+ * Forcibly flush the BatchSpanProcessor. Call before process exit / page unload
43
+ * to avoid losing queued spans (which manifests as "Missing Span" in SigNoz —
44
+ * their already-exported children reference a parent that never made it to OTLP).
45
+ */
46
+ async flush() {
47
+ await this._tracerProvider.forceFlush();
48
+ }
49
+ /**
50
+ * Flush + shut down the tracer provider via `WebTracerProvider.shutdown()`,
51
+ * which forces a final export then terminates all span processors.
52
+ *
53
+ * Terminal and effectively one-shot: safe to call after `flush()`, but
54
+ * `flush()` MUST NOT be called after `close()` — shutdown stops further
55
+ * exporting, so subsequent `close()`/`flush()` calls resolve without
56
+ * emitting new spans.
57
+ */
58
+ async close() {
59
+ await this._tracerProvider.shutdown();
60
+ }
61
+ start() {
62
+ log('trace processor registered');
63
+ registerInstrumentations({
64
+ instrumentations: [
65
+ getWebAutoInstrumentations({
66
+ '@opentelemetry/instrumentation-fetch': { enabled: false, ignoreUrls: [/api\.ipdata\.co/] },
67
+ '@opentelemetry/instrumentation-document-load': { enabled: false },
68
+ '@opentelemetry/instrumentation-xml-http-request': { enabled: false },
69
+ '@opentelemetry/instrumentation-user-interaction': { enabled: false },
70
+ }),
71
+ ],
72
+ });
73
+ const tracer = this._tracer;
74
+ TRACE_PROCESSOR.tracingBackend = {
75
+ startSpan: (options) => {
76
+ log('begin otel trace', { options });
77
+ const parentCtx = options.parentContext
78
+ ? propagation.extract(ROOT_CONTEXT, {
79
+ traceparent: options.parentContext.traceparent,
80
+ tracestate: options.parentContext.tracestate ?? '',
81
+ })
82
+ : otelContext.active();
83
+ const span = tracer.startSpan(options.name, options, parentCtx);
84
+ const sc = span.spanContext();
85
+ const spanContext = sc && sc.traceId && sc.spanId
86
+ ? {
87
+ traceparent: `00-${sc.traceId}-${sc.spanId}-${(sc.traceFlags ?? 0).toString(16).padStart(2, '0')}`,
88
+ tracestate: sc.traceState?.serialize(),
89
+ }
90
+ : undefined;
91
+ return {
92
+ end: (endTime) => span.end(endTime),
93
+ setError: (err) => {
94
+ if (err instanceof Error) {
95
+ span.recordException(err);
96
+ }
97
+ span.setStatus({ code: SpanStatusCode.ERROR, message: err instanceof Error ? err.message : String(err) });
98
+ },
99
+ spanContext,
100
+ };
101
+ },
102
+ };
103
+ }
104
+ }
105
+ //# sourceMappingURL=traces-browser.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"traces-browser.js","sourceRoot":"","sources":["../../../../../src/extensions/otel/traces-browser.ts"],"names":[],"mappings":"AAAA,EAAE;AACF,0BAA0B;AAC1B,EAAE;AAEF,OAAO,EACL,YAAY,EACZ,cAAc,EAEd,OAAO,IAAI,WAAW,EACtB,WAAW,EACX,KAAK,GACN,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAE,0BAA0B,EAAE,MAAM,0CAA0C,CAAC;AACtF,OAAO,EAAE,yBAAyB,EAAE,MAAM,qBAAqB,CAAC;AAChE,OAAO,EAAE,iBAAiB,EAAE,MAAM,yCAAyC,CAAC;AAC5E,OAAO,EAAE,wBAAwB,EAAE,MAAM,gCAAgC,CAAC;AAC1E,OAAO,EACL,eAAe,EACf,kBAAkB,EAClB,kBAAkB,EAClB,wBAAwB,GACzB,MAAM,+BAA+B,CAAC;AACvC,OAAO,EAAE,iBAAiB,EAAE,MAAM,8BAA8B,CAAC;AACjE,OAAO,EAAE,oBAAoB,EAAE,MAAM,qCAAqC,CAAC;AAE3E,OAAO,EAAE,GAAG,EAAE,MAAM,WAAW,CAAC;AAChC,OAAO,EAAE,aAAa,EAA0C,eAAe,EAAE,MAAM,eAAe,CAAC;AAEvG,OAAO,EAAoB,cAAc,EAAE,MAAM,QAAQ,CAAC;AAC1D,OAAO,EAAE,wBAAwB,EAAE,MAAM,mBAAmB,CAAC;AAE7D,MAAM,OAAO,UAAU;IAIQ,OAAO;IAH5B,OAAO,CAAS;IACP,eAAe,CAAoB;IAEpD,YAA6B,OAAoB;uBAApB,OAAO;QAClC,WAAW,CAAC,mBAAmB,CAAC,IAAI,yBAAyB,EAAE,CAAC,CAAC;QAEjE,MAAM,aAAa,GAAG,OAAO,YAAY,KAAK,WAAW,IAAI,YAAY,CAAC,OAAO,CAAC,aAAa,CAAC,KAAK,MAAM,CAAC;QAE5G,IAAI,CAAC,eAAe,GAAG,IAAI,iBAAiB,CAAC;YAC3C,QAAQ,EAAE,IAAI,CAAC,OAAO,CAAC,QAAQ;YAC/B,OAAO,EAAE,IAAI,kBAAkB,CAAC;gBAC9B,IAAI,EAAE,aAAa,CAAC,CAAC,CAAC,IAAI,eAAe,EAAE,CAAC,CAAC,CAAC,IAAI,wBAAwB,CAAC,GAAG,CAAC;aAChF,CAAC;YACF,cAAc,EAAE;gBACd,IAAI,wBAAwB,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC;gBAClD,IAAI,kBAAkB,CACpB,IAAI,iBAAiB,CAAC;oBACpB,GAAG,EAAE,cAAc,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,GAAG,YAAY,CAAC;oBACzD,OAAO,EAAE,IAAI,CAAC,OAAO,CAAC,OAAO;oBAC7B,gBAAgB,EAAE,EAAE;iBACrB,CAAC,EACF,EAAE,oBAAoB,EAAE,KAAK,EAAE,CAChC;aACF;SACF,CAAC,CAAC;QAEH,KAAK,CAAC,uBAAuB,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;QAEpD,IAAI,CAAC,OAAO,GAAG,KAAK,CAAC,SAAS,CAC5B,oBAAoB,EACpB,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAC,oBAAoB,CAAC,EAAE,QAAQ,EAAE,CACnE,CAAC;IACJ,CAAC;IAED;;;;OAIG;IACI,KAAK,CAAC,KAAK;QAChB,MAAM,IAAI,CAAC,eAAe,CAAC,UAAU,EAAE,CAAC;IAC1C,CAAC;IAED;;;;;;;;OAQG;IACI,KAAK,CAAC,KAAK;QAChB,MAAM,IAAI,CAAC,eAAe,CAAC,QAAQ,EAAE,CAAC;IACxC,CAAC;IAEM,KAAK;QACV,GAAG,CAAC,4BAA4B,CAAC,CAAC;QAElC,wBAAwB,CAAC;YACvB,gBAAgB,EAAE;gBAChB,0BAA0B,CAAC;oBACzB,sCAAsC,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,UAAU,EAAE,CAAC,iBAAiB,CAAC,EAAE;oBAC3F,8CAA8C,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE;oBAClE,iDAAiD,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE;oBACrE,iDAAiD,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE;iBACtE,CAAC;aACH;SACF,CAAC,CAAC;QAEH,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC;QAE5B,eAAe,CAAC,cAAc,GAAG;YAC/B,SAAS,EAAE,CAAC,OAAyB,EAAc,EAAE;gBACnD,GAAG,CAAC,kBAAkB,EAAE,EAAE,OAAO,EAAE,CAAC,CAAC;gBACrC,MAAM,SAAS,GAAG,OAAO,CAAC,aAAa;oBACrC,CAAC,CAAC,WAAW,CAAC,OAAO,CAAC,YAAY,EAAE;wBAChC,WAAW,EAAE,OAAO,CAAC,aAAa,CAAC,WAAW;wBAC9C,UAAU,EAAE,OAAO,CAAC,aAAa,CAAC,UAAU,IAAI,EAAE;qBACnD,CAAC;oBACJ,CAAC,CAAC,WAAW,CAAC,MAAM,EAAE,CAAC;gBAEzB,MAAM,IAAI,GAAG,MAAM,CAAC,SAAS,CAAC,OAAO,CAAC,IAAI,EAAE,OAAO,EAAE,SAAS,CAAC,CAAC;gBAEhE,MAAM,EAAE,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC;gBAC9B,MAAM,WAAW,GACf,EAAE,IAAI,EAAE,CAAC,OAAO,IAAI,EAAE,CAAC,MAAM;oBAC3B,CAAC,CAAC;wBACE,WAAW,EAAE,MAAM,EAAE,CAAC,OAAO,IAAI,EAAE,CAAC,MAAM,IAAI,CAAC,EAAE,CAAC,UAAU,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE;wBAClG,UAAU,EAAE,EAAE,CAAC,UAAU,EAAE,SAAS,EAAE;qBACvC;oBACH,CAAC,CAAC,SAAS,CAAC;gBAEhB,OAAO;oBACL,GAAG,EAAE,CAAC,OAAgB,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC;oBAC5C,QAAQ,EAAE,CAAC,GAAY,EAAE,EAAE;wBACzB,IAAI,GAAG,YAAY,KAAK,EAAE,CAAC;4BACzB,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,CAAC;wBAC5B,CAAC;wBACD,IAAI,CAAC,SAAS,CAAC,EAAE,IAAI,EAAE,cAAc,CAAC,KAAK,EAAE,OAAO,EAAE,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;oBAC5G,CAAC;oBACD,WAAW;iBACZ,CAAC;YACJ,CAAC;SACF,CAAC;IACJ,CAAC;CACF"}
@@ -0,0 +1,25 @@
1
+ import { type OtelOptions } from './otel';
2
+ export declare class OtelTraces {
3
+ private readonly options;
4
+ private _tracer;
5
+ private readonly _tracerProvider;
6
+ constructor(options: OtelOptions);
7
+ /**
8
+ * Forcibly flush the BatchSpanProcessor. Call before process exit to avoid
9
+ * losing queued spans (which manifests as "Missing Span" in SigNoz — their
10
+ * already-exported children reference a parent that never made it to OTLP).
11
+ */
12
+ flush(): Promise<void>;
13
+ /**
14
+ * Flush + shut down the tracer provider via `BasicTracerProvider.shutdown()`,
15
+ * which forces a final export then terminates all span processors.
16
+ *
17
+ * Terminal and effectively one-shot: safe to call after `flush()`, but
18
+ * `flush()` MUST NOT be called after `close()` — shutdown stops further
19
+ * exporting, so subsequent `close()`/`flush()` calls resolve without
20
+ * emitting new spans.
21
+ */
22
+ close(): Promise<void>;
23
+ start(): void;
24
+ }
25
+ //# sourceMappingURL=traces.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"traces.d.ts","sourceRoot":"","sources":["../../../../../src/extensions/otel/traces.ts"],"names":[],"mappings":"AAoBA,OAAO,EAAE,KAAK,WAAW,EAAkB,MAAM,QAAQ,CAAC;AAG1D,qBAAa,UAAU;IAIT,OAAO,CAAC,QAAQ,CAAC,OAAO;IAHpC,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAsB;IAEtD,YAA6B,OAAO,EAAE,WAAW,EAsBhD;IAED;;;;OAIG;IACU,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAElC;IAED;;;;;;;;OAQG;IACU,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAElC;IAEM,KAAK,IAAI,IAAI,CAsCnB;CACF"}
@@ -0,0 +1,88 @@
1
+ //
2
+ // Copyright 2024 DXOS.org
3
+ //
4
+ import { ROOT_CONTEXT, SpanStatusCode, context as otelContext, propagation, trace, } from '@opentelemetry/api';
5
+ import { W3CTraceContextPropagator } from '@opentelemetry/core';
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 '@dxos/log';
10
+ import { TRACE_PROCESSOR } from '@dxos/tracing';
11
+ import { resolveOtlpUrl } from './otel';
12
+ import { TagInjectorSpanProcessor } from './span-processors';
13
+ export class OtelTraces {
14
+ options;
15
+ _tracer;
16
+ _tracerProvider;
17
+ constructor(options) {
18
+ this.options = options;
19
+ propagation.setGlobalPropagator(new W3CTraceContextPropagator());
20
+ this._tracerProvider = new BasicTracerProvider({
21
+ resource: this.options.resource,
22
+ spanProcessors: [
23
+ new TagInjectorSpanProcessor(this.options.getTags),
24
+ new BatchSpanProcessor(new OTLPTraceExporter({
25
+ url: resolveOtlpUrl(this.options.endpoint + '/v1/traces'),
26
+ headers: this.options.headers,
27
+ concurrencyLimit: 10,
28
+ })),
29
+ ],
30
+ });
31
+ trace.setGlobalTracerProvider(this._tracerProvider);
32
+ this._tracer = trace.getTracer('dxos-observability', this.options.resource.attributes[ATTR_SERVICE_VERSION]?.toString());
33
+ }
34
+ /**
35
+ * Forcibly flush the BatchSpanProcessor. Call before process exit to avoid
36
+ * losing queued spans (which manifests as "Missing Span" in SigNoz — their
37
+ * already-exported children reference a parent that never made it to OTLP).
38
+ */
39
+ async flush() {
40
+ await this._tracerProvider.forceFlush();
41
+ }
42
+ /**
43
+ * Flush + shut down the tracer provider via `BasicTracerProvider.shutdown()`,
44
+ * which forces a final export then terminates all span processors.
45
+ *
46
+ * Terminal and effectively one-shot: safe to call after `flush()`, but
47
+ * `flush()` MUST NOT be called after `close()` — shutdown stops further
48
+ * exporting, so subsequent `close()`/`flush()` calls resolve without
49
+ * emitting new spans.
50
+ */
51
+ async close() {
52
+ await this._tracerProvider.shutdown();
53
+ }
54
+ start() {
55
+ log('trace processor registered');
56
+ const tracer = this._tracer;
57
+ TRACE_PROCESSOR.tracingBackend = {
58
+ startSpan: (options) => {
59
+ log('begin otel trace', { options });
60
+ const parentCtx = options.parentContext
61
+ ? propagation.extract(ROOT_CONTEXT, {
62
+ traceparent: options.parentContext.traceparent,
63
+ tracestate: options.parentContext.tracestate ?? '',
64
+ })
65
+ : otelContext.active();
66
+ const span = tracer.startSpan(options.name, options, parentCtx);
67
+ const sc = span.spanContext();
68
+ const spanContext = sc && sc.traceId && sc.spanId
69
+ ? {
70
+ traceparent: `00-${sc.traceId}-${sc.spanId}-${(sc.traceFlags ?? 0).toString(16).padStart(2, '0')}`,
71
+ tracestate: sc.traceState?.serialize(),
72
+ }
73
+ : undefined;
74
+ return {
75
+ end: (endTime) => span.end(endTime),
76
+ setError: (err) => {
77
+ if (err instanceof Error) {
78
+ span.recordException(err);
79
+ }
80
+ span.setStatus({ code: SpanStatusCode.ERROR, message: err instanceof Error ? err.message : String(err) });
81
+ },
82
+ spanContext,
83
+ };
84
+ },
85
+ };
86
+ }
87
+ }
88
+ //# sourceMappingURL=traces.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"traces.js","sourceRoot":"","sources":["../../../../../src/extensions/otel/traces.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,28 @@
1
+ import * as Effect from 'effect/Effect';
2
+ import { type PostHogConfig } from 'posthog-js';
3
+ import { type Config } from '@dxos/config';
4
+ import { type IdbLogStore } from '@dxos/log-store-idb';
5
+ import { type Extension } from '../../observability-extension';
6
+ export type ExtensionsOptions = {
7
+ config: Config;
8
+ /** Release identifier, e.g. `composer@0.8.3`. */
9
+ release?: string;
10
+ /** Deployment environment, e.g. `production` or `staging`. */
11
+ environment?: string;
12
+ posthog?: Partial<PostHogConfig>;
13
+ /**
14
+ * Shared persistent log store for debug log dumps.
15
+ * The owning app is expected to register `logStore.processor` with `log` itself —
16
+ * this extension only consumes the buffered logs (via `export()`).
17
+ */
18
+ logStore?: IdbLogStore;
19
+ /**
20
+ * Maximum byte size passed to `logStore.export()` when uploading feedback logs.
21
+ * Should match the upload limit enforced by the server receiving the logs.
22
+ * When omitted the full store is exported without trimming.
23
+ */
24
+ feedbackLogMaxSize?: number;
25
+ };
26
+ /** Create a PostHog-backed observability extension for events, errors, and feedback. */
27
+ export declare const extensions: (options: ExtensionsOptions) => Effect.Effect<Extension>;
28
+ //# sourceMappingURL=extension.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"extension.d.ts","sourceRoot":"","sources":["../../../../../src/extensions/posthog/extension.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,MAAM,MAAM,eAAe,CAAC;AACxC,OAAO,EAAE,KAAK,aAAa,EAAE,MAAM,YAAY,CAAC;AAEhD,OAAO,EAAE,KAAK,MAAM,EAAE,MAAM,cAAc,CAAC;AAE3C,OAAO,EAAE,KAAK,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAEvD,OAAO,EAAE,KAAK,SAAS,EAAE,MAAM,+BAA+B,CAAC;AAG/D,MAAM,MAAM,iBAAiB,GAAG;IAC9B,MAAM,EAAE,MAAM,CAAC;IACf,iDAAiD;IACjD,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,8DAA8D;IAC9D,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,OAAO,CAAC,EAAE,OAAO,CAAC,aAAa,CAAC,CAAC;IACjC;;;;OAIG;IACH,QAAQ,CAAC,EAAE,WAAW,CAAC;IACvB;;;;OAIG;IACH,kBAAkB,CAAC,EAAE,MAAM,CAAC;CAC7B,CAAC;AAsBF,wFAAwF;AACxF,eAAO,MAAM,UAAU,EAAE,CAAC,OAAO,EAAE,iBAAiB,KAAK,MAAM,CAAC,MAAM,CAAC,SAAS,CAmI9E,CAAC"}