@dxos/observability 0.8.4-main.72ec0f3 → 0.8.4-main.74a063c4e0

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 (314) 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 +1013 -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-PUNCJ5KV.mjs +112 -0
  15. package/dist/lib/browser/traces-browser-PUNCJ5KV.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 +1016 -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/extensions/otel/traces-browser.js +85 -0
  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 +144 -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 +59 -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} +38 -43
  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 +32 -52
  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/extensions/otel/traces-browser.ts +110 -0
  136. package/src/{otel → extensions/otel}/traces.ts +10 -21
  137. package/src/extensions/posthog/extension.ts +176 -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 +62 -0
  151. package/src/{segment → storage}/index.ts +0 -1
  152. package/src/storage/node.test.ts +129 -0
  153. package/src/{helpers/node-observability.ts → storage/node.ts} +41 -71
  154. package/src/vite-import-meta.d.ts +14 -0
  155. package/dist/lib/browser/chunk-5ICT2XF2.mjs +0 -1
  156. package/dist/lib/browser/chunk-VIGEEYDR.mjs +0 -1019
  157. package/dist/lib/browser/chunk-VIGEEYDR.mjs.map +0 -7
  158. package/dist/lib/browser/chunk-XNAF22QM.mjs +0 -148
  159. package/dist/lib/browser/chunk-XNAF22QM.mjs.map +0 -7
  160. package/dist/lib/browser/chunk-ZI3ZS3PA.mjs +0 -164
  161. package/dist/lib/browser/chunk-ZI3ZS3PA.mjs.map +0 -7
  162. package/dist/lib/browser/observability-I65SW7NE.mjs +0 -10
  163. package/dist/lib/browser/otel-UH7ZRWC2.mjs +0 -287
  164. package/dist/lib/browser/otel-UH7ZRWC2.mjs.map +0 -7
  165. package/dist/lib/browser/segment/index.mjs +0 -11
  166. package/dist/lib/browser/segment/index.mjs.map +0 -7
  167. package/dist/lib/browser/sentry/index.mjs +0 -24
  168. package/dist/lib/browser/sentry/index.mjs.map +0 -7
  169. package/dist/lib/browser/sentry-log-processor-5VGDTKZN.mjs +0 -146
  170. package/dist/lib/browser/sentry-log-processor-5VGDTKZN.mjs.map +0 -7
  171. package/dist/lib/node-esm/chunk-MTKIPRBH.mjs +0 -1020
  172. package/dist/lib/node-esm/chunk-MTKIPRBH.mjs.map +0 -7
  173. package/dist/lib/node-esm/chunk-OJV247NY.mjs +0 -204
  174. package/dist/lib/node-esm/chunk-OJV247NY.mjs.map +0 -7
  175. package/dist/lib/node-esm/chunk-QK5IUYVA.mjs +0 -135
  176. package/dist/lib/node-esm/chunk-QK5IUYVA.mjs.map +0 -7
  177. package/dist/lib/node-esm/chunk-QUZL7LKE.mjs +0 -2
  178. package/dist/lib/node-esm/chunk-QUZL7LKE.mjs.map +0 -7
  179. package/dist/lib/node-esm/observability-5KKD7B6J.mjs +0 -11
  180. package/dist/lib/node-esm/observability-5KKD7B6J.mjs.map +0 -7
  181. package/dist/lib/node-esm/otel-7PUCFSTY.mjs +0 -270
  182. package/dist/lib/node-esm/otel-7PUCFSTY.mjs.map +0 -7
  183. package/dist/lib/node-esm/segment/index.mjs +0 -12
  184. package/dist/lib/node-esm/segment/index.mjs.map +0 -7
  185. package/dist/lib/node-esm/sentry/index.mjs +0 -25
  186. package/dist/lib/node-esm/sentry/index.mjs.map +0 -7
  187. package/dist/lib/node-esm/sentry-log-processor-A2EV7P3Y.mjs +0 -147
  188. package/dist/lib/node-esm/sentry-log-processor-A2EV7P3Y.mjs.map +0 -7
  189. package/dist/types/src/helpers/browser-observability.d.ts +0 -17
  190. package/dist/types/src/helpers/browser-observability.d.ts.map +0 -1
  191. package/dist/types/src/helpers/browser-observability.js +0 -138
  192. package/dist/types/src/helpers/browser-observability.js.map +0 -1
  193. package/dist/types/src/helpers/common.d.ts +0 -12
  194. package/dist/types/src/helpers/common.d.ts.map +0 -1
  195. package/dist/types/src/helpers/common.js +0 -23
  196. package/dist/types/src/helpers/common.js.map +0 -1
  197. package/dist/types/src/helpers/index.d.ts +0 -6
  198. package/dist/types/src/helpers/index.d.ts.map +0 -1
  199. package/dist/types/src/helpers/index.js +0 -9
  200. package/dist/types/src/helpers/index.js.map +0 -1
  201. package/dist/types/src/helpers/map-spaces.d.ts +0 -18
  202. package/dist/types/src/helpers/map-spaces.d.ts.map +0 -1
  203. package/dist/types/src/helpers/map-spaces.js +0 -36
  204. package/dist/types/src/helpers/map-spaces.js.map +0 -1
  205. package/dist/types/src/helpers/node-observability.d.ts +0 -24
  206. package/dist/types/src/helpers/node-observability.d.ts.map +0 -1
  207. package/dist/types/src/helpers/node-observability.js.map +0 -1
  208. package/dist/types/src/helpers/setup-telemetry-listeners.d.ts +0 -4
  209. package/dist/types/src/helpers/setup-telemetry-listeners.d.ts.map +0 -1
  210. package/dist/types/src/helpers/setup-telemetry-listeners.js +0 -94
  211. package/dist/types/src/helpers/setup-telemetry-listeners.js.map +0 -1
  212. package/dist/types/src/otel/index.d.ts +0 -5
  213. package/dist/types/src/otel/index.d.ts.map +0 -1
  214. package/dist/types/src/otel/index.js +0 -8
  215. package/dist/types/src/otel/index.js.map +0 -1
  216. package/dist/types/src/otel/logs.d.ts.map +0 -1
  217. package/dist/types/src/otel/logs.js.map +0 -1
  218. package/dist/types/src/otel/metrics.d.ts.map +0 -1
  219. package/dist/types/src/otel/metrics.js.map +0 -1
  220. package/dist/types/src/otel/otel.d.ts.map +0 -1
  221. package/dist/types/src/otel/otel.js.map +0 -1
  222. package/dist/types/src/otel/traces-browser.d.ts.map +0 -1
  223. package/dist/types/src/otel/traces-browser.js +0 -53
  224. package/dist/types/src/otel/traces-browser.js.map +0 -1
  225. package/dist/types/src/otel/traces.d.ts.map +0 -1
  226. package/dist/types/src/otel/traces.js.map +0 -1
  227. package/dist/types/src/segment/base.d.ts +0 -15
  228. package/dist/types/src/segment/base.d.ts.map +0 -1
  229. package/dist/types/src/segment/base.js +0 -51
  230. package/dist/types/src/segment/base.js.map +0 -1
  231. package/dist/types/src/segment/browser.d.ts +0 -15
  232. package/dist/types/src/segment/browser.d.ts.map +0 -1
  233. package/dist/types/src/segment/browser.js +0 -63
  234. package/dist/types/src/segment/browser.js.map +0 -1
  235. package/dist/types/src/segment/index.d.ts +0 -3
  236. package/dist/types/src/segment/index.d.ts.map +0 -1
  237. package/dist/types/src/segment/index.js +0 -6
  238. package/dist/types/src/segment/index.js.map +0 -1
  239. package/dist/types/src/segment/node.d.ts +0 -16
  240. package/dist/types/src/segment/node.d.ts.map +0 -1
  241. package/dist/types/src/segment/node.js +0 -84
  242. package/dist/types/src/segment/node.js.map +0 -1
  243. package/dist/types/src/segment/types.d.ts +0 -52
  244. package/dist/types/src/segment/types.d.ts.map +0 -1
  245. package/dist/types/src/segment/types.js +0 -18
  246. package/dist/types/src/segment/types.js.map +0 -1
  247. package/dist/types/src/sentry/browser.d.ts +0 -32
  248. package/dist/types/src/sentry/browser.d.ts.map +0 -1
  249. package/dist/types/src/sentry/browser.js +0 -110
  250. package/dist/types/src/sentry/browser.js.map +0 -1
  251. package/dist/types/src/sentry/index.d.ts +0 -3
  252. package/dist/types/src/sentry/index.d.ts.map +0 -1
  253. package/dist/types/src/sentry/index.js.map +0 -1
  254. package/dist/types/src/sentry/node.d.ts +0 -32
  255. package/dist/types/src/sentry/node.d.ts.map +0 -1
  256. package/dist/types/src/sentry/node.js +0 -106
  257. package/dist/types/src/sentry/node.js.map +0 -1
  258. package/dist/types/src/sentry/node.node.test.d.ts +0 -2
  259. package/dist/types/src/sentry/node.node.test.d.ts.map +0 -1
  260. package/dist/types/src/sentry/node.node.test.js +0 -32
  261. package/dist/types/src/sentry/node.node.test.js.map +0 -1
  262. package/dist/types/src/sentry/sentry-log-processor.d.ts +0 -9
  263. package/dist/types/src/sentry/sentry-log-processor.d.ts.map +0 -1
  264. package/dist/types/src/sentry/sentry-log-processor.js +0 -144
  265. package/dist/types/src/sentry/sentry-log-processor.js.map +0 -1
  266. package/dist/types/src/sentry/sentry.node.test.d.ts +0 -2
  267. package/dist/types/src/sentry/sentry.node.test.d.ts.map +0 -1
  268. package/dist/types/src/sentry/sentry.node.test.js +0 -28
  269. package/dist/types/src/sentry/sentry.node.test.js.map +0 -1
  270. package/dist/types/src/sentry/types.d.ts +0 -18
  271. package/dist/types/src/sentry/types.d.ts.map +0 -1
  272. package/dist/types/src/sentry/types.js +0 -4
  273. package/dist/types/src/sentry/types.js.map +0 -1
  274. package/dist/types/src/testing/index.d.ts +0 -2
  275. package/dist/types/src/testing/index.d.ts.map +0 -1
  276. package/dist/types/src/testing/index.js +0 -5
  277. package/dist/types/src/testing/index.js.map +0 -1
  278. package/dist/types/src/testing/testkit/browser.d.ts +0 -2
  279. package/dist/types/src/testing/testkit/browser.d.ts.map +0 -1
  280. package/dist/types/src/testing/testkit/browser.js +0 -7
  281. package/dist/types/src/testing/testkit/browser.js.map +0 -1
  282. package/dist/types/src/testing/testkit/index.d.ts +0 -2
  283. package/dist/types/src/testing/testkit/index.d.ts.map +0 -1
  284. package/dist/types/src/testing/testkit/index.js +0 -6
  285. package/dist/types/src/testing/testkit/index.js.map +0 -1
  286. package/src/helpers/browser-observability.ts +0 -178
  287. package/src/helpers/common.ts +0 -38
  288. package/src/helpers/index.ts +0 -9
  289. package/src/helpers/map-spaces.ts +0 -48
  290. package/src/helpers/setup-telemetry-listeners.ts +0 -109
  291. package/src/otel/index.ts +0 -8
  292. package/src/otel/traces-browser.ts +0 -62
  293. package/src/segment/base.ts +0 -69
  294. package/src/segment/browser.ts +0 -69
  295. package/src/segment/node.ts +0 -95
  296. package/src/segment/types.ts +0 -57
  297. package/src/sentry/browser.ts +0 -133
  298. package/src/sentry/index.ts +0 -6
  299. package/src/sentry/node.node.test.ts +0 -40
  300. package/src/sentry/node.ts +0 -126
  301. package/src/sentry/sentry-log-processor.ts +0 -176
  302. package/src/sentry/sentry.node.test.ts +0 -35
  303. package/src/sentry/types.ts +0 -22
  304. package/src/testing/index.ts +0 -5
  305. package/src/testing/testkit/browser.ts +0 -8
  306. package/src/testing/testkit/index.ts +0 -7
  307. package/src/testing/testkit/shims.d.ts +0 -5
  308. /package/dist/lib/browser/{chunk-5ICT2XF2.mjs.map → chunk-J5LGTIGS.mjs.map} +0 -0
  309. /package/dist/lib/{browser/observability-I65SW7NE.mjs.map → node-esm/chunk-HSLMI22Q.mjs.map} +0 -0
  310. /package/dist/types/src/{otel → extensions/otel}/metrics.d.ts +0 -0
  311. /package/dist/types/src/{otel → extensions/otel}/otel.js +0 -0
  312. /package/dist/types/src/{otel → extensions/otel}/traces-browser.d.ts +0 -0
  313. /package/dist/types/src/{otel → extensions/otel}/traces.d.ts +0 -0
  314. /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';
@@ -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,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
- }
@@ -1,57 +0,0 @@
1
- //
2
- // Copyright 2022 DXOS.org
3
- //
4
-
5
- export type Tags = Record<string, string>;
6
-
7
- export type SegmentTelemetryOptions = {
8
- apiKey?: string;
9
- batchSize?: number;
10
- enable?: boolean;
11
- getTags: () => Tags;
12
- };
13
-
14
- // Copied from @segment/analytics-node.
15
- export type SegmentIdentityOptions =
16
- | { userId: string; anonymousId?: string }
17
- | { userId?: string; anonymousId: string };
18
-
19
- // TODO(burdon): Should require one or the other.
20
- export type IdentityOptions = { did?: string; installationId?: string };
21
-
22
- export type CommonOptions = IdentityOptions & {
23
- timestamp?: Date;
24
- properties?: Record<string, unknown>;
25
- };
26
-
27
- /**
28
- * Page views.
29
- * https://segment.com/docs/connections/sources/catalog/libraries/server/node/#page
30
- */
31
- export type PageOptions = CommonOptions & {
32
- category?: string;
33
- name?: string;
34
- };
35
-
36
- /**
37
- * Track actions.
38
- * https://segment.com/docs/connections/sources/catalog/libraries/server/node/#track
39
- */
40
- export type TrackOptions = CommonOptions & {
41
- event?: TelemetryEvent;
42
- action: string;
43
- };
44
-
45
- /**
46
- * Each event will be mapped to a different Postgres table via segment.
47
- */
48
- export enum TelemetryEvent {
49
- /**
50
- * Use actions.
51
- */
52
- ACTION = 'action',
53
- /**
54
- * High-volume technical metrics.
55
- */
56
- METRICS = 'metrics',
57
- }
@@ -1,133 +0,0 @@
1
- //
2
- // Copyright 2022 DXOS.org
3
- //
4
-
5
- import {
6
- breadcrumbsIntegration,
7
- browserTracingIntegration,
8
- feedbackIntegration,
9
- httpClientIntegration,
10
- metrics,
11
- addBreadcrumb as naturalAddBreadcrumb,
12
- captureException as naturalCaptureException,
13
- captureMessage as naturalCaptureMessage,
14
- init as naturalInit,
15
- sendFeedback as naturalSendFeedback,
16
- withScope as naturalWithScope,
17
- replayIntegration,
18
- setTag,
19
- startInactiveSpan,
20
- } from '@sentry/browser';
21
-
22
- import { log } from '@dxos/log';
23
- import { TRACE_PROCESSOR } from '@dxos/tracing';
24
-
25
- import { type InitOptions } from './types';
26
-
27
- // Polyfill export.
28
- export { setTag, setTags, setUser } from '@sentry/browser';
29
-
30
- /**
31
- * To use this SDK, call the init function as early as possible when loading the web page.
32
- * To set context information or send manual events, use the provided methods.
33
- *
34
- * @param options {InitOptions}
35
- */
36
- export const init = (options: InitOptions) => {
37
- try {
38
- log('sentry init', options);
39
- naturalInit({
40
- enabled: options.enable ?? true,
41
- dsn: options.destination,
42
- release: options.release,
43
- environment: options.environment,
44
- integrations: [
45
- breadcrumbsIntegration({ console: false, fetch: false }),
46
- httpClientIntegration({
47
- failedRequestStatusCodes: [
48
- // 401 errors are omitted as they happen as a part of the EDGE authentication flow.
49
- [400, 400],
50
- [402, 599],
51
- ],
52
- }),
53
- feedbackIntegration({ autoInject: false }),
54
- ...(options.tracing ? [browserTracingIntegration()] : []),
55
- ...(options.replay ? [replayIntegration({ blockAllMedia: true, maskAllText: true })] : []),
56
- ],
57
- replaysSessionSampleRate: options.replaySampleRate,
58
- replaysOnErrorSampleRate: options.replaySampleRateOnError,
59
- tracesSampleRate: options.sampleRate,
60
- transport: options.transport as any, // TODO(dmaretskyi): Fix
61
- beforeSend: (event) => {
62
- options.onError?.(event);
63
- return event;
64
- },
65
- });
66
-
67
- if (options.tracing) {
68
- TRACE_PROCESSOR.remoteMetrics.registerProcessor(metrics);
69
- TRACE_PROCESSOR.remoteTracing.registerProcessor({
70
- startSpan: startInactiveSpan,
71
- });
72
- }
73
-
74
- Object.entries(options.properties ?? {}).forEach(([key, value]) => {
75
- setTag(key, value);
76
- });
77
- } catch (err) {
78
- log.catch('Failed to initialize sentry', err);
79
- }
80
- };
81
-
82
- /**
83
- * Records a new breadcrumb which will be attached to future events.
84
- *
85
- * Breadcrumbs will be added to subsequent events to provide more context on user's actions prior to an error or crash.
86
- *
87
- * https://docs.sentry.io/platforms/javascript/enriching-events/breadcrumbs/
88
- *
89
- * @param breadcrumb — The breadcrumb to record.
90
- */
91
- export const addBreadcrumb: typeof naturalAddBreadcrumb = (breadcrumb) => {
92
- try {
93
- naturalAddBreadcrumb(breadcrumb);
94
- log('add breadcrumb', breadcrumb);
95
- } catch (err) {
96
- log.catch('Failed to add breadcrumb', err);
97
- }
98
- };
99
-
100
- /**
101
- * Captures an exception event and sends it to Sentry.
102
- *
103
- * @param exception — An exception-like object.
104
- * @param captureContext — Additional scope data to apply to exception event.
105
- * @returns — The generated eventId.
106
- */
107
- export const captureException: typeof naturalCaptureException = (exception, captureContext) => {
108
- try {
109
- const eventId = naturalCaptureException(exception, captureContext);
110
- log('capture exception', { exception, eventId, ...captureContext });
111
- return eventId;
112
- } catch (err) {
113
- log.catch('Failed to capture exception', err);
114
- return 'unknown';
115
- }
116
- };
117
-
118
- export const captureMessage: typeof naturalCaptureMessage = (exception, captureContext) => {
119
- try {
120
- const eventId = naturalCaptureMessage(exception, captureContext);
121
- log('capture message', { exception, eventId, captureContext });
122
- return eventId;
123
- } catch (err) {
124
- log.catch('Failed to capture message', err);
125
- return 'unknown';
126
- }
127
- };
128
-
129
- export const captureUserFeedback = (message: string) => {
130
- return naturalSendFeedback({ message }, { includeReplay: true });
131
- };
132
-
133
- export const withScope = naturalWithScope;