@dxos/observability 0.8.4-main.a4bbb77 → 0.8.4-main.abd8ff62ef

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 (324) hide show
  1. package/README.md +14 -11
  2. package/dist/lib/browser/chunk-3534PNWM.mjs +13 -0
  3. package/dist/lib/browser/chunk-3534PNWM.mjs.map +7 -0
  4. package/dist/lib/browser/chunk-J5LGTIGS.mjs +10 -0
  5. package/dist/lib/browser/index.mjs +940 -34
  6. package/dist/lib/browser/index.mjs.map +4 -4
  7. package/dist/lib/browser/log-processor-HPHWNBOK.mjs +38 -0
  8. package/dist/lib/browser/log-processor-HPHWNBOK.mjs.map +7 -0
  9. package/dist/lib/browser/logs-A2VDAHHD.mjs +115 -0
  10. package/dist/lib/browser/logs-A2VDAHHD.mjs.map +7 -0
  11. package/dist/lib/browser/meta.json +1 -1
  12. package/dist/lib/browser/metrics-6OSN54ZV.mjs +115 -0
  13. package/dist/lib/browser/metrics-6OSN54ZV.mjs.map +7 -0
  14. package/dist/lib/browser/traces-browser-6MRGAKFC.mjs +151 -0
  15. package/dist/lib/browser/traces-browser-6MRGAKFC.mjs.map +7 -0
  16. package/dist/lib/node-esm/chunk-HSLMI22Q.mjs +11 -0
  17. package/dist/lib/node-esm/chunk-SYPJQI4L.mjs +15 -0
  18. package/dist/lib/node-esm/chunk-SYPJQI4L.mjs.map +7 -0
  19. package/dist/lib/node-esm/index.mjs +962 -34
  20. package/dist/lib/node-esm/index.mjs.map +4 -4
  21. package/dist/lib/node-esm/log-processor-ZODHERST.mjs +39 -0
  22. package/dist/lib/node-esm/log-processor-ZODHERST.mjs.map +7 -0
  23. package/dist/lib/node-esm/logs-TA32MBMW.mjs +116 -0
  24. package/dist/lib/node-esm/logs-TA32MBMW.mjs.map +7 -0
  25. package/dist/lib/node-esm/meta.json +1 -1
  26. package/dist/lib/node-esm/metrics-C5IKPAWD.mjs +116 -0
  27. package/dist/lib/node-esm/metrics-C5IKPAWD.mjs.map +7 -0
  28. package/dist/lib/node-esm/traces-5LKHMVVG.mjs +122 -0
  29. package/dist/lib/node-esm/traces-5LKHMVVG.mjs.map +7 -0
  30. package/dist/types/src/cli-observability-secrets.json +3 -4
  31. package/dist/types/src/extensions/index.d.ts +3 -0
  32. package/dist/types/src/extensions/index.d.ts.map +1 -0
  33. package/dist/types/src/extensions/index.js +6 -0
  34. package/dist/types/src/extensions/index.js.map +1 -0
  35. package/dist/types/src/extensions/otel/extension.d.ts +23 -0
  36. package/dist/types/src/extensions/otel/extension.d.ts.map +1 -0
  37. package/dist/types/src/extensions/otel/extension.js +201 -0
  38. package/dist/types/src/extensions/otel/extension.js.map +1 -0
  39. package/dist/types/src/extensions/otel/index.d.ts +2 -0
  40. package/dist/types/src/extensions/otel/index.d.ts.map +1 -0
  41. package/dist/types/src/extensions/otel/index.js +5 -0
  42. package/dist/types/src/extensions/otel/index.js.map +1 -0
  43. package/dist/types/src/{otel → extensions/otel}/logs.d.ts +4 -3
  44. package/dist/types/src/extensions/otel/logs.d.ts.map +1 -0
  45. package/dist/types/src/{otel → extensions/otel}/logs.js +52 -19
  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/span-processors.d.ts +25 -0
  54. package/dist/types/src/extensions/otel/span-processors.d.ts.map +1 -0
  55. package/dist/types/src/extensions/otel/span-processors.js +41 -0
  56. package/dist/types/src/extensions/otel/span-processors.js.map +1 -0
  57. package/dist/types/src/extensions/otel/traces-browser.d.ts +25 -0
  58. package/dist/types/src/extensions/otel/traces-browser.d.ts.map +1 -0
  59. package/dist/types/src/extensions/otel/traces-browser.js +104 -0
  60. package/dist/types/src/extensions/otel/traces-browser.js.map +1 -0
  61. package/dist/types/src/extensions/otel/traces.d.ts +25 -0
  62. package/dist/types/src/extensions/otel/traces.d.ts.map +1 -0
  63. package/dist/types/src/extensions/otel/traces.js +87 -0
  64. package/dist/types/src/extensions/otel/traces.js.map +1 -0
  65. package/dist/types/src/extensions/posthog/extension.d.ts +22 -0
  66. package/dist/types/src/extensions/posthog/extension.d.ts.map +1 -0
  67. package/dist/types/src/extensions/posthog/extension.js +144 -0
  68. package/dist/types/src/extensions/posthog/extension.js.map +1 -0
  69. package/dist/types/src/extensions/posthog/index.d.ts +2 -0
  70. package/dist/types/src/extensions/posthog/index.d.ts.map +1 -0
  71. package/dist/types/src/extensions/posthog/index.js +5 -0
  72. package/dist/types/src/extensions/posthog/index.js.map +1 -0
  73. package/dist/types/src/extensions/posthog/log-processor.d.ts +3 -0
  74. package/dist/types/src/extensions/posthog/log-processor.d.ts.map +1 -0
  75. package/dist/types/src/extensions/posthog/log-processor.js +36 -0
  76. package/dist/types/src/extensions/posthog/log-processor.js.map +1 -0
  77. package/dist/types/src/extensions/posthog/log-processor.test.d.ts +2 -0
  78. package/dist/types/src/extensions/posthog/log-processor.test.d.ts.map +1 -0
  79. package/dist/types/src/extensions/posthog/log-processor.test.js +146 -0
  80. package/dist/types/src/extensions/posthog/log-processor.test.js.map +1 -0
  81. package/dist/types/src/extensions/stub.d.ts +3 -0
  82. package/dist/types/src/extensions/stub.d.ts.map +1 -0
  83. package/dist/types/src/extensions/stub.js +16 -0
  84. package/dist/types/src/extensions/stub.js.map +1 -0
  85. package/dist/types/src/index.d.ts +3 -2
  86. package/dist/types/src/index.d.ts.map +1 -1
  87. package/dist/types/src/index.js +4 -3
  88. package/dist/types/src/index.js.map +1 -1
  89. package/dist/types/src/observability-extension.d.ts +74 -0
  90. package/dist/types/src/observability-extension.d.ts.map +1 -0
  91. package/dist/types/src/observability-extension.js +5 -0
  92. package/dist/types/src/observability-extension.js.map +1 -0
  93. package/dist/types/src/observability.d.ts +32 -110
  94. package/dist/types/src/observability.d.ts.map +1 -1
  95. package/dist/types/src/observability.js +177 -465
  96. package/dist/types/src/observability.js.map +1 -1
  97. package/dist/types/src/observability.test.d.ts +2 -0
  98. package/dist/types/src/observability.test.d.ts.map +1 -0
  99. package/dist/types/src/observability.test.js +312 -0
  100. package/dist/types/src/observability.test.js.map +1 -0
  101. package/dist/types/src/providers/client-observability.d.ts +11 -0
  102. package/dist/types/src/providers/client-observability.d.ts.map +1 -0
  103. package/dist/types/src/providers/client-observability.js +202 -0
  104. package/dist/types/src/providers/client-observability.js.map +1 -0
  105. package/dist/types/src/providers/index.d.ts +4 -0
  106. package/dist/types/src/providers/index.d.ts.map +1 -0
  107. package/dist/types/src/providers/index.js +7 -0
  108. package/dist/types/src/providers/index.js.map +1 -0
  109. package/dist/types/src/providers/ip-data.d.ts +5 -0
  110. package/dist/types/src/providers/ip-data.d.ts.map +1 -0
  111. package/dist/types/src/providers/ip-data.js +57 -0
  112. package/dist/types/src/providers/ip-data.js.map +1 -0
  113. package/dist/types/src/providers/storage.d.ts +3 -0
  114. package/dist/types/src/providers/storage.d.ts.map +1 -0
  115. package/dist/types/src/providers/storage.js +19 -0
  116. package/dist/types/src/providers/storage.js.map +1 -0
  117. package/dist/types/src/storage/browser.d.ts +19 -0
  118. package/dist/types/src/storage/browser.d.ts.map +1 -0
  119. package/dist/types/src/storage/browser.js +69 -0
  120. package/dist/types/src/storage/browser.js.map +1 -0
  121. package/dist/types/src/storage/index.d.ts +2 -0
  122. package/dist/types/src/storage/index.d.ts.map +1 -0
  123. package/dist/types/src/storage/index.js.map +1 -0
  124. package/dist/types/src/storage/node.d.ts +26 -0
  125. package/dist/types/src/storage/node.d.ts.map +1 -0
  126. package/dist/types/src/{helpers/node-observability.js → storage/node.js} +38 -43
  127. package/dist/types/src/storage/node.js.map +1 -0
  128. package/dist/types/src/storage/node.test.d.ts +2 -0
  129. package/dist/types/src/storage/node.test.d.ts.map +1 -0
  130. package/dist/types/src/storage/node.test.js +103 -0
  131. package/dist/types/src/storage/node.test.js.map +1 -0
  132. package/dist/types/tsconfig.tsbuildinfo +1 -1
  133. package/package.json +34 -54
  134. package/src/cli-observability-secrets.json +3 -4
  135. package/src/extensions/index.ts +6 -0
  136. package/src/extensions/otel/extension.ts +258 -0
  137. package/src/extensions/otel/index.ts +5 -0
  138. package/src/extensions/otel/logs.ts +137 -0
  139. package/src/{otel → extensions/otel}/metrics.ts +2 -12
  140. package/src/{otel → extensions/otel}/otel.ts +3 -3
  141. package/src/extensions/otel/span-processors.ts +45 -0
  142. package/src/extensions/otel/traces-browser.ts +139 -0
  143. package/src/extensions/otel/traces.ts +113 -0
  144. package/src/extensions/posthog/extension.ts +181 -0
  145. package/src/extensions/posthog/index.ts +5 -0
  146. package/src/extensions/posthog/log-processor.test.ts +186 -0
  147. package/src/extensions/posthog/log-processor.ts +43 -0
  148. package/src/extensions/stub.ts +19 -0
  149. package/src/index.ts +4 -3
  150. package/src/observability-extension.ts +94 -0
  151. package/src/observability.test.ts +531 -0
  152. package/src/observability.ts +236 -577
  153. package/src/providers/client-observability.ts +255 -0
  154. package/src/providers/index.ts +7 -0
  155. package/src/providers/ip-data.ts +91 -0
  156. package/src/providers/storage.ts +23 -0
  157. package/src/storage/browser.ts +71 -0
  158. package/src/{segment → storage}/index.ts +0 -1
  159. package/src/storage/node.test.ts +129 -0
  160. package/src/{helpers/node-observability.ts → storage/node.ts} +41 -71
  161. package/src/vite-import-meta.d.ts +14 -0
  162. package/dist/lib/browser/chunk-5ICT2XF2.mjs +0 -1
  163. package/dist/lib/browser/chunk-ICKR6U3G.mjs +0 -161
  164. package/dist/lib/browser/chunk-ICKR6U3G.mjs.map +0 -7
  165. package/dist/lib/browser/chunk-LJO63BXO.mjs +0 -164
  166. package/dist/lib/browser/chunk-LJO63BXO.mjs.map +0 -7
  167. package/dist/lib/browser/chunk-YTRUOREY.mjs +0 -1025
  168. package/dist/lib/browser/chunk-YTRUOREY.mjs.map +0 -7
  169. package/dist/lib/browser/observability-CQGG3MID.mjs +0 -10
  170. package/dist/lib/browser/otel-6FVBNA5F.mjs +0 -327
  171. package/dist/lib/browser/otel-6FVBNA5F.mjs.map +0 -7
  172. package/dist/lib/browser/segment/index.mjs +0 -11
  173. package/dist/lib/browser/segment/index.mjs.map +0 -7
  174. package/dist/lib/browser/sentry/index.mjs +0 -24
  175. package/dist/lib/browser/sentry/index.mjs.map +0 -7
  176. package/dist/lib/browser/sentry-log-processor-RG4CFVGL.mjs +0 -162
  177. package/dist/lib/browser/sentry-log-processor-RG4CFVGL.mjs.map +0 -7
  178. package/dist/lib/node-esm/chunk-24NMRR4E.mjs +0 -229
  179. package/dist/lib/node-esm/chunk-24NMRR4E.mjs.map +0 -7
  180. package/dist/lib/node-esm/chunk-4EWQFQ2F.mjs +0 -1026
  181. package/dist/lib/node-esm/chunk-4EWQFQ2F.mjs.map +0 -7
  182. package/dist/lib/node-esm/chunk-QK5IUYVA.mjs +0 -135
  183. package/dist/lib/node-esm/chunk-QK5IUYVA.mjs.map +0 -7
  184. package/dist/lib/node-esm/chunk-QUZL7LKE.mjs +0 -2
  185. package/dist/lib/node-esm/chunk-QUZL7LKE.mjs.map +0 -7
  186. package/dist/lib/node-esm/observability-DHNVVRC7.mjs +0 -11
  187. package/dist/lib/node-esm/observability-DHNVVRC7.mjs.map +0 -7
  188. package/dist/lib/node-esm/otel-KHSGBROB.mjs +0 -310
  189. package/dist/lib/node-esm/otel-KHSGBROB.mjs.map +0 -7
  190. package/dist/lib/node-esm/segment/index.mjs +0 -12
  191. package/dist/lib/node-esm/segment/index.mjs.map +0 -7
  192. package/dist/lib/node-esm/sentry/index.mjs +0 -25
  193. package/dist/lib/node-esm/sentry/index.mjs.map +0 -7
  194. package/dist/lib/node-esm/sentry-log-processor-3BDS4BB4.mjs +0 -163
  195. package/dist/lib/node-esm/sentry-log-processor-3BDS4BB4.mjs.map +0 -7
  196. package/dist/types/src/helpers/browser-observability.d.ts +0 -17
  197. package/dist/types/src/helpers/browser-observability.d.ts.map +0 -1
  198. package/dist/types/src/helpers/browser-observability.js +0 -138
  199. package/dist/types/src/helpers/browser-observability.js.map +0 -1
  200. package/dist/types/src/helpers/common.d.ts +0 -12
  201. package/dist/types/src/helpers/common.d.ts.map +0 -1
  202. package/dist/types/src/helpers/common.js +0 -23
  203. package/dist/types/src/helpers/common.js.map +0 -1
  204. package/dist/types/src/helpers/index.d.ts +0 -6
  205. package/dist/types/src/helpers/index.d.ts.map +0 -1
  206. package/dist/types/src/helpers/index.js +0 -9
  207. package/dist/types/src/helpers/index.js.map +0 -1
  208. package/dist/types/src/helpers/map-spaces.d.ts +0 -18
  209. package/dist/types/src/helpers/map-spaces.d.ts.map +0 -1
  210. package/dist/types/src/helpers/map-spaces.js +0 -36
  211. package/dist/types/src/helpers/map-spaces.js.map +0 -1
  212. package/dist/types/src/helpers/node-observability.d.ts +0 -24
  213. package/dist/types/src/helpers/node-observability.d.ts.map +0 -1
  214. package/dist/types/src/helpers/node-observability.js.map +0 -1
  215. package/dist/types/src/helpers/setup-telemetry-listeners.d.ts +0 -4
  216. package/dist/types/src/helpers/setup-telemetry-listeners.d.ts.map +0 -1
  217. package/dist/types/src/helpers/setup-telemetry-listeners.js +0 -94
  218. package/dist/types/src/helpers/setup-telemetry-listeners.js.map +0 -1
  219. package/dist/types/src/otel/index.d.ts +0 -5
  220. package/dist/types/src/otel/index.d.ts.map +0 -1
  221. package/dist/types/src/otel/index.js +0 -8
  222. package/dist/types/src/otel/index.js.map +0 -1
  223. package/dist/types/src/otel/logs.d.ts.map +0 -1
  224. package/dist/types/src/otel/logs.js.map +0 -1
  225. package/dist/types/src/otel/metrics.d.ts.map +0 -1
  226. package/dist/types/src/otel/metrics.js.map +0 -1
  227. package/dist/types/src/otel/otel.d.ts.map +0 -1
  228. package/dist/types/src/otel/otel.js.map +0 -1
  229. package/dist/types/src/otel/traces-browser.d.ts +0 -8
  230. package/dist/types/src/otel/traces-browser.d.ts.map +0 -1
  231. package/dist/types/src/otel/traces-browser.js +0 -53
  232. package/dist/types/src/otel/traces-browser.js.map +0 -1
  233. package/dist/types/src/otel/traces.d.ts +0 -8
  234. package/dist/types/src/otel/traces.d.ts.map +0 -1
  235. package/dist/types/src/otel/traces.js +0 -46
  236. package/dist/types/src/otel/traces.js.map +0 -1
  237. package/dist/types/src/segment/base.d.ts +0 -15
  238. package/dist/types/src/segment/base.d.ts.map +0 -1
  239. package/dist/types/src/segment/base.js +0 -51
  240. package/dist/types/src/segment/base.js.map +0 -1
  241. package/dist/types/src/segment/browser.d.ts +0 -15
  242. package/dist/types/src/segment/browser.d.ts.map +0 -1
  243. package/dist/types/src/segment/browser.js +0 -63
  244. package/dist/types/src/segment/browser.js.map +0 -1
  245. package/dist/types/src/segment/index.d.ts +0 -3
  246. package/dist/types/src/segment/index.d.ts.map +0 -1
  247. package/dist/types/src/segment/index.js +0 -6
  248. package/dist/types/src/segment/index.js.map +0 -1
  249. package/dist/types/src/segment/node.d.ts +0 -16
  250. package/dist/types/src/segment/node.d.ts.map +0 -1
  251. package/dist/types/src/segment/node.js +0 -84
  252. package/dist/types/src/segment/node.js.map +0 -1
  253. package/dist/types/src/segment/types.d.ts +0 -52
  254. package/dist/types/src/segment/types.d.ts.map +0 -1
  255. package/dist/types/src/segment/types.js +0 -18
  256. package/dist/types/src/segment/types.js.map +0 -1
  257. package/dist/types/src/sentry/browser.d.ts +0 -32
  258. package/dist/types/src/sentry/browser.d.ts.map +0 -1
  259. package/dist/types/src/sentry/browser.js +0 -110
  260. package/dist/types/src/sentry/browser.js.map +0 -1
  261. package/dist/types/src/sentry/index.d.ts +0 -3
  262. package/dist/types/src/sentry/index.d.ts.map +0 -1
  263. package/dist/types/src/sentry/index.js.map +0 -1
  264. package/dist/types/src/sentry/node.d.ts +0 -32
  265. package/dist/types/src/sentry/node.d.ts.map +0 -1
  266. package/dist/types/src/sentry/node.js +0 -106
  267. package/dist/types/src/sentry/node.js.map +0 -1
  268. package/dist/types/src/sentry/node.node.test.d.ts +0 -2
  269. package/dist/types/src/sentry/node.node.test.d.ts.map +0 -1
  270. package/dist/types/src/sentry/node.node.test.js +0 -32
  271. package/dist/types/src/sentry/node.node.test.js.map +0 -1
  272. package/dist/types/src/sentry/sentry-log-processor.d.ts +0 -9
  273. package/dist/types/src/sentry/sentry-log-processor.d.ts.map +0 -1
  274. package/dist/types/src/sentry/sentry-log-processor.js +0 -144
  275. package/dist/types/src/sentry/sentry-log-processor.js.map +0 -1
  276. package/dist/types/src/sentry/sentry.node.test.d.ts +0 -2
  277. package/dist/types/src/sentry/sentry.node.test.d.ts.map +0 -1
  278. package/dist/types/src/sentry/sentry.node.test.js +0 -28
  279. package/dist/types/src/sentry/sentry.node.test.js.map +0 -1
  280. package/dist/types/src/sentry/types.d.ts +0 -18
  281. package/dist/types/src/sentry/types.d.ts.map +0 -1
  282. package/dist/types/src/sentry/types.js +0 -4
  283. package/dist/types/src/sentry/types.js.map +0 -1
  284. package/dist/types/src/testing/index.d.ts +0 -2
  285. package/dist/types/src/testing/index.d.ts.map +0 -1
  286. package/dist/types/src/testing/index.js +0 -5
  287. package/dist/types/src/testing/index.js.map +0 -1
  288. package/dist/types/src/testing/testkit/browser.d.ts +0 -2
  289. package/dist/types/src/testing/testkit/browser.d.ts.map +0 -1
  290. package/dist/types/src/testing/testkit/browser.js +0 -7
  291. package/dist/types/src/testing/testkit/browser.js.map +0 -1
  292. package/dist/types/src/testing/testkit/index.d.ts +0 -2
  293. package/dist/types/src/testing/testkit/index.d.ts.map +0 -1
  294. package/dist/types/src/testing/testkit/index.js +0 -6
  295. package/dist/types/src/testing/testkit/index.js.map +0 -1
  296. package/src/helpers/browser-observability.ts +0 -178
  297. package/src/helpers/common.ts +0 -38
  298. package/src/helpers/index.ts +0 -9
  299. package/src/helpers/map-spaces.ts +0 -48
  300. package/src/helpers/setup-telemetry-listeners.ts +0 -109
  301. package/src/otel/index.ts +0 -8
  302. package/src/otel/logs.ts +0 -102
  303. package/src/otel/traces-browser.ts +0 -62
  304. package/src/otel/traces.ts +0 -60
  305. package/src/segment/base.ts +0 -69
  306. package/src/segment/browser.ts +0 -69
  307. package/src/segment/node.ts +0 -95
  308. package/src/segment/types.ts +0 -57
  309. package/src/sentry/browser.ts +0 -133
  310. package/src/sentry/index.ts +0 -6
  311. package/src/sentry/node.node.test.ts +0 -40
  312. package/src/sentry/node.ts +0 -126
  313. package/src/sentry/sentry-log-processor.ts +0 -174
  314. package/src/sentry/sentry.node.test.ts +0 -35
  315. package/src/sentry/types.ts +0 -22
  316. package/src/testing/index.ts +0 -5
  317. package/src/testing/testkit/browser.ts +0 -8
  318. package/src/testing/testkit/index.ts +0 -7
  319. package/src/testing/testkit/shims.d.ts +0 -5
  320. /package/dist/lib/browser/{chunk-5ICT2XF2.mjs.map → chunk-J5LGTIGS.mjs.map} +0 -0
  321. /package/dist/lib/{browser/observability-CQGG3MID.mjs.map → node-esm/chunk-HSLMI22Q.mjs.map} +0 -0
  322. /package/dist/types/src/{otel → extensions/otel}/metrics.d.ts +0 -0
  323. /package/dist/types/src/{otel → extensions/otel}/otel.js +0 -0
  324. /package/dist/types/src/{sentry → storage}/index.js +0 -0
@@ -1,38 +0,0 @@
1
- //
2
- // Copyright 2022 DXOS.org
3
- //
4
-
5
- import type { Client } from '@dxos/client';
6
-
7
- import { type IdentityOptions } from '../segment';
8
-
9
- export type IPData = {
10
- city: string;
11
- region: string;
12
- country: string;
13
- latitude: number;
14
- longitude: number;
15
- };
16
-
17
- // TODO(wittjosiah): Improve privacy of telemetry identifiers.
18
- // - Identifier should be generated client-side with no attachment to identity.
19
- // - Identifier can then be reset by user.
20
- // - Identifier can be synced via HALO to allow for correlation of events bewteen devices.
21
- // - Identifier should also be stored outside of HALO such that it is available immediately on startup.
22
- export const getTelemetryIdentifier = (client: Client): string | undefined => {
23
- if (!client?.initialized) {
24
- return undefined;
25
- }
26
-
27
- const identity = client.halo.identity.get();
28
- if (identity) {
29
- return identity.did;
30
- }
31
-
32
- return undefined;
33
- };
34
-
35
- export const getTelemetryIdentity = (client: Client): IdentityOptions => {
36
- const did = getTelemetryIdentifier(client);
37
- return { did };
38
- };
@@ -1,9 +0,0 @@
1
- //
2
- // Copyright 2022 DXOS.org
3
- //
4
-
5
- export * from './browser-observability';
6
- export * from './common';
7
- export * from './node-observability';
8
- export * from './map-spaces';
9
- export * from './setup-telemetry-listeners';
@@ -1,48 +0,0 @@
1
- //
2
- // Copyright 2023 DXOS.org
3
- //
4
-
5
- import type { Space } from '@dxos/client-protocol';
6
-
7
- export type MapSpacesOptions = {
8
- verbose?: boolean;
9
- truncateKeys?: boolean;
10
- };
11
-
12
- export const mapSpaces = (spaces: Space[], options: MapSpacesOptions = { verbose: false, truncateKeys: false }) => {
13
- return spaces.map((space) => {
14
- // TODO(burdon): Factor out.
15
- // TODO(burdon): Agent needs to restart before `ready` is available.
16
- const { open, ready } = space.internal.data.metrics ?? {};
17
- const startup = open && ready && ready.getTime() - open.getTime();
18
-
19
- // TODO(burdon): Get feeds from client-services if verbose (factor out from devtools/diagnostics).
20
- // const host = client.services.services.DevtoolsHost!;
21
- const pipeline = space.internal.data.pipeline;
22
- const startDataMutations = pipeline?.currentEpoch?.subject.assertion.timeframe.totalMessages() ?? 0;
23
- const epoch = pipeline?.currentEpoch?.subject.assertion.number;
24
- // const appliedEpoch = pipeline?.appliedEpoch?.subject.assertion.number;
25
- const currentDataMutations = pipeline?.currentDataTimeframe?.totalMessages() ?? 0;
26
- const totalDataMutations = pipeline?.targetDataTimeframe?.totalMessages() ?? 0;
27
-
28
- return {
29
- // TODO(nf): truncate keys for DD?
30
- key: space.key.truncate(),
31
- open: space.isOpen,
32
- members: space.members.get().length,
33
- objects: space.db.coreDatabase.getAllObjectIds().length,
34
- startup,
35
- epoch,
36
- // appliedEpoch,
37
- startDataMutations,
38
- currentDataMutations,
39
- totalDataMutations,
40
-
41
- // TODO(burdon): Negative?
42
- progress: (
43
- Math.min(Math.abs((currentDataMutations - startDataMutations) / (totalDataMutations - startDataMutations)), 1) *
44
- 100
45
- ).toFixed(0),
46
- };
47
- });
48
- };
@@ -1,109 +0,0 @@
1
- //
2
- // Copyright 2022 DXOS.org
3
- //
4
-
5
- import type { Client } from '@dxos/client';
6
-
7
- import { type Observability } from '../observability';
8
-
9
- import { getTelemetryIdentity } from './common';
10
-
11
- let lastFocusEvent = new Date();
12
- let totalTime = 0;
13
-
14
- export const setupTelemetryListeners = (namespace: string, client: Client, observability: Observability) => {
15
- const clickCallback = (event: Event) => {
16
- const id = (event.target as HTMLElement)?.id;
17
- if (!id) {
18
- return;
19
- }
20
-
21
- setTimeout(() => {
22
- observability.track({
23
- ...getTelemetryIdentity(client),
24
- action: 'window.click',
25
- properties: {
26
- id: (event.target as HTMLElement)?.id,
27
- path: (event.composedPath() as HTMLElement[])
28
- .filter((el) => Boolean(el.tagName))
29
- .map((el) => `${el.tagName.toLowerCase()}${el.id ? `#${el.id}` : ''}`)
30
- .reverse()
31
- .join('>'),
32
- },
33
- });
34
- });
35
- };
36
-
37
- const focusCallback = () => {
38
- const now = new Date();
39
- setTimeout(() => {
40
- observability.track({
41
- ...getTelemetryIdentity(client),
42
- action: 'window.focus',
43
- properties: {
44
- timeAway: now.getTime() - lastFocusEvent.getTime(),
45
- },
46
- });
47
- });
48
-
49
- lastFocusEvent = now;
50
- };
51
-
52
- const blurCallback = () => {
53
- const now = new Date();
54
- const duration = now.getTime() - lastFocusEvent.getTime();
55
- setTimeout(() => {
56
- observability.track({
57
- ...getTelemetryIdentity(client),
58
- action: 'window.blur',
59
- properties: {
60
- duration,
61
- },
62
- });
63
- });
64
-
65
- lastFocusEvent = now;
66
- totalTime = totalTime + duration;
67
- };
68
-
69
- const unloadCallback = () => {
70
- setTimeout(() => {
71
- observability.track({
72
- ...getTelemetryIdentity(client),
73
- action: 'page.unload',
74
- properties: {
75
- duration: totalTime,
76
- },
77
- });
78
- });
79
- };
80
-
81
- const errorCallback = (event: ErrorEvent) => {
82
- setTimeout(() => {
83
- observability.track({
84
- ...getTelemetryIdentity(client),
85
- action: 'window.error',
86
- properties: {
87
- message: event.message,
88
- filename: event.filename,
89
- stack: (event.error as Error)?.stack,
90
- cause: (event.error as Error)?.cause,
91
- },
92
- });
93
- });
94
- };
95
-
96
- window.addEventListener('click', clickCallback, true);
97
- window.addEventListener('focus', focusCallback);
98
- window.addEventListener('blur', blurCallback);
99
- window.addEventListener('beforeunload', unloadCallback);
100
- window.addEventListener('error', errorCallback);
101
-
102
- return () => {
103
- window.removeEventListener('click', clickCallback, true);
104
- window.removeEventListener('focus', focusCallback);
105
- window.removeEventListener('blur', blurCallback);
106
- window.removeEventListener('beforeunload', unloadCallback);
107
- window.removeEventListener('error', errorCallback);
108
- };
109
- };
package/src/otel/index.ts DELETED
@@ -1,8 +0,0 @@
1
- //
2
- // Copyright 2024 DXOS.org
3
- //
4
-
5
- export * from './otel';
6
- export * from './logs';
7
- export * from './metrics';
8
- export * from './traces';
package/src/otel/logs.ts DELETED
@@ -1,102 +0,0 @@
1
- //
2
- // Copyright 2024 DXOS.org
3
- //
4
-
5
- import { SeverityNumber } from '@opentelemetry/api-logs';
6
- import { OTLPLogExporter } from '@opentelemetry/exporter-logs-otlp-http';
7
- import { defaultResource, resourceFromAttributes } from '@opentelemetry/resources';
8
- import { BatchLogRecordProcessor, LoggerProvider } from '@opentelemetry/sdk-logs';
9
- import { SEMRESATTRS_SERVICE_NAME, SEMRESATTRS_SERVICE_VERSION } from '@opentelemetry/semantic-conventions';
10
-
11
- import {
12
- type LogConfig,
13
- type LogEntry,
14
- LogLevel,
15
- type LogProcessor,
16
- getContextFromEntry,
17
- getRelativeFilename,
18
- } from '@dxos/log';
19
- import { jsonlogify } from '@dxos/util';
20
-
21
- import { type OtelOptions, setDiagLogger } from './otel';
22
-
23
- export type OtelLogOptions = OtelOptions & {
24
- logLevel: LogLevel;
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.
28
- */
29
- includeSharedWorkerLogs: boolean;
30
- };
31
-
32
- export class OtelLogs {
33
- private _loggerProvider: LoggerProvider;
34
- constructor(private readonly options: OtelLogOptions) {
35
- 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
- const logExporter = new OTLPLogExporter({
43
- url: this.options.endpoint + '/v1/logs',
44
- headers: {
45
- Authorization: this.options.authorizationHeader,
46
- },
47
- concurrencyLimit: 10, // an optional limit on pending requests
48
- });
49
- this._loggerProvider = new LoggerProvider({
50
- resource,
51
- processors: [new BatchLogRecordProcessor(logExporter)],
52
- });
53
- }
54
-
55
- public readonly logProcessor: LogProcessor = (config: LogConfig, entry: LogEntry) => {
56
- const logger = this._loggerProvider.getLogger('dxos-observability', this.options.serviceVersion);
57
-
58
- if (
59
- entry.level < this.options.logLevel ||
60
- (!this.options.includeSharedWorkerLogs && entry.meta?.S?.remoteSessionId)
61
- ) {
62
- return;
63
- }
64
-
65
- const record = {
66
- ...entry,
67
- ...(entry.meta ? { meta: { file: getRelativeFilename(entry.meta.F), line: entry.meta.L } } : {}),
68
- context: jsonlogify(getContextFromEntry(entry)),
69
- };
70
-
71
- logger.emit({
72
- severityNumber: convertLevel(entry.level),
73
- body: JSON.stringify(record),
74
- attributes: this.options.getTags(),
75
- });
76
- };
77
-
78
- flush(): Promise<void> {
79
- return this._loggerProvider.forceFlush();
80
- }
81
-
82
- close(): Promise<void> {
83
- return this._loggerProvider.shutdown();
84
- }
85
- }
86
-
87
- const convertLevel = (level: LogLevel): SeverityNumber => {
88
- switch (level) {
89
- case LogLevel.DEBUG:
90
- return SeverityNumber.DEBUG;
91
- case LogLevel.VERBOSE:
92
- return SeverityNumber.INFO;
93
- case LogLevel.INFO:
94
- return SeverityNumber.INFO;
95
- case LogLevel.WARN:
96
- return SeverityNumber.WARN;
97
- case LogLevel.ERROR:
98
- return SeverityNumber.ERROR;
99
- default:
100
- return SeverityNumber.ERROR;
101
- }
102
- };
@@ -1,62 +0,0 @@
1
- //
2
- // Copyright 2024 DXOS.org
3
- //
4
-
5
- import { type Tracer, trace } from '@opentelemetry/api';
6
- import { getWebAutoInstrumentations } from '@opentelemetry/auto-instrumentations-web';
7
- import { OTLPTraceExporter } from '@opentelemetry/exporter-trace-otlp-http';
8
- import { registerInstrumentations } from '@opentelemetry/instrumentation';
9
- import { defaultResource, resourceFromAttributes } from '@opentelemetry/resources';
10
- import { BatchSpanProcessor, ConsoleSpanExporter, SimpleSpanProcessor } from '@opentelemetry/sdk-trace-base';
11
- import { WebTracerProvider } from '@opentelemetry/sdk-trace-web';
12
- import { SEMRESATTRS_SERVICE_NAME, SEMRESATTRS_SERVICE_VERSION } from '@opentelemetry/semantic-conventions';
13
-
14
- import { log } from '@dxos/log';
15
- import { type StartSpanOptions, TRACE_PROCESSOR } from '@dxos/tracing';
16
-
17
- import { type OtelOptions } from './otel';
18
-
19
- export class OtelTraces {
20
- 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
-
29
- const tracerProvider = new WebTracerProvider({
30
- resource,
31
- spanProcessors: [
32
- new SimpleSpanProcessor(new ConsoleSpanExporter()),
33
- new BatchSpanProcessor(
34
- new OTLPTraceExporter({
35
- url: this.options.endpoint + '/v1/traces',
36
- headers: {
37
- Authorization: this.options.authorizationHeader,
38
- },
39
- concurrencyLimit: 10, // an optional limit on pending requests
40
- }),
41
- ),
42
- ],
43
- });
44
-
45
- // TODO(nf): ContextManager? Propogator?
46
- trace.setGlobalTracerProvider(tracerProvider);
47
- this._tracer = trace.getTracer('dxos-observability', this.options.serviceVersion);
48
- }
49
-
50
- public start(): void {
51
- registerInstrumentations({
52
- instrumentations: [getWebAutoInstrumentations()],
53
- });
54
- log('trace processor registered');
55
- TRACE_PROCESSOR.remoteTracing.registerProcessor({
56
- startSpan: (options: StartSpanOptions) => {
57
- log('begin otel trace', { options });
58
- return this._tracer.startSpan(options.name, options);
59
- },
60
- });
61
- }
62
- }
@@ -1,60 +0,0 @@
1
- //
2
- // Copyright 2024 DXOS.org
3
- //
4
-
5
- import { type Tracer, trace } from '@opentelemetry/api';
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';
15
- import { log } from 'debug';
16
-
17
- import { type StartSpanOptions, TRACE_PROCESSOR } from '@dxos/tracing';
18
-
19
- import { type OtelOptions } from './otel';
20
-
21
- export class OtelTraces {
22
- 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
-
31
- const tracerProvider = new BasicTracerProvider({
32
- resource,
33
- spanProcessors: [
34
- new SimpleSpanProcessor(new ConsoleSpanExporter()),
35
- new BatchSpanProcessor(
36
- new OTLPTraceExporter({
37
- url: this.options.endpoint + '/v1/traces',
38
- headers: {
39
- Authorization: this.options.authorizationHeader,
40
- },
41
- concurrencyLimit: 10, // an optional limit on pending requests
42
- }),
43
- ),
44
- ],
45
- });
46
-
47
- trace.setGlobalTracerProvider(tracerProvider);
48
- this._tracer = trace.getTracer('dxos-observability', this.options.serviceVersion);
49
- }
50
-
51
- public start(): void {
52
- log('trace processor registered');
53
- TRACE_PROCESSOR.remoteTracing.registerProcessor({
54
- startSpan: (options: StartSpanOptions) => {
55
- log('begin otel trace', { options });
56
- return this._tracer.startSpan(options.name, options);
57
- },
58
- });
59
- }
60
- }
@@ -1,69 +0,0 @@
1
- //
2
- // Copyright 2025 DXOS.org
3
- //
4
-
5
- import { type IdentifyParams, type PageParams, type TrackParams } from '@segment/analytics-node';
6
-
7
- import { log } from '@dxos/log';
8
-
9
- import {
10
- type IdentityOptions,
11
- type PageOptions,
12
- type SegmentIdentityOptions,
13
- type Tags,
14
- TelemetryEvent,
15
- type TrackOptions,
16
- } from './types';
17
-
18
- /**
19
- * NOTE: Segment provides a default ID if we don't provide one.
20
- */
21
- const getIdentityOptions = ({ did, installationId }: IdentityOptions): SegmentIdentityOptions => {
22
- if (!did && !installationId) {
23
- log.warn('No telemetry identifier provided.');
24
- }
25
-
26
- return {
27
- userId: did,
28
- anonymousId: installationId,
29
- } as SegmentIdentityOptions;
30
- };
31
-
32
- /**
33
- * Base class for Node and BrowserSegment telemetry.
34
- */
35
- export abstract class AbstractSegmentTelemetry {
36
- constructor(private readonly _getTags: () => Tags) {}
37
-
38
- abstract identify(options: IdentifyParams): void;
39
-
40
- abstract page(options: PageOptions): void;
41
-
42
- abstract track(options: TrackOptions): void;
43
-
44
- protected createPageProps(options: PageOptions): PageParams {
45
- const { properties, ...rest } = options;
46
- return {
47
- ...getIdentityOptions(options),
48
- ...rest,
49
- properties: {
50
- common: this._getTags(),
51
- custom: properties,
52
- },
53
- };
54
- }
55
-
56
- protected createTrackProps(options: TrackOptions): TrackParams {
57
- const { event, action, properties, ...rest } = options;
58
- return {
59
- ...getIdentityOptions(options),
60
- ...rest,
61
- event: event ?? TelemetryEvent.ACTION,
62
- properties: {
63
- action,
64
- common: this._getTags(),
65
- custom: properties,
66
- },
67
- };
68
- }
69
- }
@@ -1,69 +0,0 @@
1
- //
2
- // Copyright 2022 DXOS.org
3
- //
4
-
5
- import { type IdentifyParams } from '@segment/analytics-node';
6
- import snippet from '@segment/snippet';
7
-
8
- import { log } from '@dxos/log';
9
-
10
- import { captureException } from '../sentry';
11
-
12
- import { AbstractSegmentTelemetry } from './base';
13
- import type { PageOptions, SegmentTelemetryOptions, TrackOptions } from './types';
14
-
15
- /**
16
- * Browser telemetry.
17
- */
18
- // https://segment.com/docs/connections/sources/catalog/libraries/website/javascript/#basic-tracking-methods
19
- export class SegmentTelemetry extends AbstractSegmentTelemetry {
20
- constructor({ apiKey, batchSize, getTags }: SegmentTelemetryOptions) {
21
- super(getTags);
22
- try {
23
- const contents = snippet.min({ apiKey, page: false });
24
- const script = document.createElement('script');
25
- script.innerHTML = contents;
26
- document.body.append(script);
27
- } catch (err) {
28
- log.catch('failed to initialize telemetry', err);
29
- }
30
- }
31
-
32
- identify(options: IdentifyParams): void {
33
- try {
34
- (window as any).analytics?.identify(options.userId, options.traits);
35
- } catch (err) {
36
- log.catch('failed to identify', err);
37
- }
38
- }
39
-
40
- page(options: PageOptions): void {
41
- try {
42
- const props = this.createPageProps(options);
43
- (window as any).analytics?.page(props.category, props.name, props.properties);
44
- } catch (err) {
45
- log.catch('failed to track page', err);
46
- }
47
- }
48
-
49
- track(options: TrackOptions): void {
50
- try {
51
- const props = this.createTrackProps(options);
52
- (window as any).analytics?.track(props.event, props.properties);
53
- } catch (err) {
54
- log.catch('failed to track event', err);
55
- }
56
- }
57
-
58
- async flush(): Promise<void> {
59
- try {
60
- await (window as any).analytics?.flush((err: any) => {
61
- captureException(err);
62
- });
63
- } catch (err) {
64
- log.catch('failed to flush telemetry', err);
65
- }
66
- }
67
-
68
- async close(): Promise<void> {}
69
- }
@@ -1,95 +0,0 @@
1
- //
2
- // Copyright 2022 DXOS.org
3
- //
4
-
5
- import { Analytics, type IdentifyParams } from '@segment/analytics-node';
6
-
7
- import { invariant } from '@dxos/invariant';
8
- import { log } from '@dxos/log';
9
-
10
- import { captureException } from '../sentry';
11
-
12
- import { AbstractSegmentTelemetry } from './base';
13
- import type { PageOptions, SegmentTelemetryOptions, TrackOptions } from './types';
14
-
15
- /**
16
- * Node telemetry.
17
- */
18
- export class SegmentTelemetry extends AbstractSegmentTelemetry {
19
- private _analytics?: Analytics;
20
-
21
- constructor({ apiKey, batchSize, getTags }: SegmentTelemetryOptions) {
22
- super(getTags);
23
- try {
24
- invariant(apiKey, 'Missing API key.');
25
- this._analytics = new Analytics({
26
- writeKey: apiKey,
27
- flushAt: batchSize,
28
- });
29
- } catch (err) {
30
- log.catch('Failed to initialize telemetry', err);
31
- }
32
- }
33
-
34
- identify(options: IdentifyParams): void {
35
- if (!this._analytics) {
36
- log('Analytics not initialized', { action: 'identify' });
37
- return;
38
- }
39
-
40
- try {
41
- this._analytics.identify(options);
42
- } catch (err) {
43
- log.catch('Failed to identify', err);
44
- }
45
- }
46
-
47
- page(options: PageOptions): void {
48
- if (!this._analytics) {
49
- log('Analytics not initialized', { action: 'page' });
50
- return;
51
- }
52
-
53
- try {
54
- this._analytics.page(this.createPageProps(options));
55
- } catch (err) {
56
- log.catch('Failed to track page', err);
57
- }
58
- }
59
-
60
- track(options: TrackOptions): void {
61
- if (!this._analytics) {
62
- log('Analytics not initialized', { action: 'track' });
63
- return;
64
- }
65
-
66
- log.info('sending event to telemetry', { options });
67
- try {
68
- this._analytics.track(this.createTrackProps(options));
69
- } catch (err) {
70
- log.catch('Failed to track action', err);
71
- }
72
- }
73
-
74
- async flush(): Promise<void> {
75
- if (!this._analytics) {
76
- log('Analytics not initialized', { action: 'flush' });
77
- return;
78
- }
79
-
80
- try {
81
- await this._analytics.flush();
82
- } catch (err) {
83
- // are these errors worth capturing?
84
- captureException(err);
85
- }
86
- }
87
-
88
- async close(): Promise<void> {
89
- if (!this._analytics) {
90
- return;
91
- }
92
-
93
- await this._analytics.closeAndFlush();
94
- }
95
- }