@multiplayer-app/session-recorder-common 1.0.0 → 1.0.1-alpha.1

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 (328) hide show
  1. package/dist/esm/SessionRecorderIdGenerator.d.ts +1 -6
  2. package/dist/esm/SessionRecorderIdGenerator.d.ts.map +1 -1
  3. package/dist/esm/SessionRecorderIdGenerator.js +3 -12
  4. package/dist/esm/SessionRecorderIdGenerator.js.map +1 -1
  5. package/dist/esm/SessionRecorderTraceIdRatioBasedSampler.js +1 -1
  6. package/dist/esm/SessionRecorderTraceIdRatioBasedSampler.js.map +1 -1
  7. package/dist/esm/{constants.base.d.ts → constants/constants.base.d.ts} +14 -0
  8. package/dist/esm/constants/constants.base.d.ts.map +1 -0
  9. package/dist/esm/{constants.base.js → constants/constants.base.js} +14 -0
  10. package/dist/esm/constants/constants.base.js.map +1 -0
  11. package/dist/esm/constants/constants.browser.d.ts.map +1 -0
  12. package/dist/esm/constants/constants.browser.js.map +1 -0
  13. package/dist/esm/constants/constants.node.d.ts.map +1 -0
  14. package/dist/esm/constants/constants.node.js.map +1 -0
  15. package/dist/esm/exporters/SessionRecorderBrowserTraceExporter.d.ts +31 -0
  16. package/dist/esm/exporters/SessionRecorderBrowserTraceExporter.d.ts.map +1 -0
  17. package/dist/esm/exporters/SessionRecorderBrowserTraceExporter.js +220 -0
  18. package/dist/esm/exporters/SessionRecorderBrowserTraceExporter.js.map +1 -0
  19. package/dist/esm/exporters/SessionRecorderGrpcLogsExporter.d.ts +22 -0
  20. package/dist/esm/exporters/SessionRecorderGrpcLogsExporter.d.ts.map +1 -0
  21. package/dist/esm/exporters/SessionRecorderGrpcLogsExporter.js +51 -0
  22. package/dist/esm/exporters/SessionRecorderGrpcLogsExporter.js.map +1 -0
  23. package/dist/esm/exporters/SessionRecorderGrpcTraceExporter.d.ts +22 -0
  24. package/dist/esm/exporters/SessionRecorderGrpcTraceExporter.d.ts.map +1 -0
  25. package/dist/esm/exporters/SessionRecorderGrpcTraceExporter.js +48 -0
  26. package/dist/esm/exporters/SessionRecorderGrpcTraceExporter.js.map +1 -0
  27. package/dist/esm/exporters/SessionRecorderHttpLogsExporter.d.ts +20 -0
  28. package/dist/esm/exporters/SessionRecorderHttpLogsExporter.d.ts.map +1 -0
  29. package/dist/esm/exporters/SessionRecorderHttpLogsExporter.js +50 -0
  30. package/dist/esm/exporters/SessionRecorderHttpLogsExporter.js.map +1 -0
  31. package/dist/esm/exporters/SessionRecorderHttpTraceExporter.d.ts +25 -0
  32. package/dist/esm/exporters/SessionRecorderHttpTraceExporter.d.ts.map +1 -0
  33. package/dist/esm/exporters/SessionRecorderHttpTraceExporter.js +56 -0
  34. package/dist/esm/exporters/SessionRecorderHttpTraceExporter.js.map +1 -0
  35. package/dist/esm/exporters/SessionRecorderLogsExporterWrapper.d.ts +13 -0
  36. package/dist/esm/exporters/SessionRecorderLogsExporterWrapper.d.ts.map +1 -0
  37. package/dist/esm/exporters/SessionRecorderLogsExporterWrapper.js +25 -0
  38. package/dist/esm/exporters/SessionRecorderLogsExporterWrapper.js.map +1 -0
  39. package/dist/esm/exporters/SessionRecorderTraceExporterWrapper.d.ts +13 -0
  40. package/dist/esm/exporters/SessionRecorderTraceExporterWrapper.d.ts.map +1 -0
  41. package/dist/esm/exporters/SessionRecorderTraceExporterWrapper.js +24 -0
  42. package/dist/esm/exporters/SessionRecorderTraceExporterWrapper.js.map +1 -0
  43. package/dist/esm/exporters/index-browser.d.ts +2 -0
  44. package/dist/esm/exporters/index-browser.d.ts.map +1 -0
  45. package/dist/esm/exporters/index-browser.js +2 -0
  46. package/dist/esm/exporters/index-browser.js.map +1 -0
  47. package/dist/esm/exporters/index-node.d.ts +7 -0
  48. package/dist/esm/exporters/index-node.d.ts.map +1 -0
  49. package/dist/esm/exporters/index-node.js +7 -0
  50. package/dist/esm/exporters/index-node.js.map +1 -0
  51. package/dist/esm/exporters/index.d.ts +8 -0
  52. package/dist/esm/exporters/index.d.ts.map +1 -0
  53. package/dist/esm/exporters/index.js +8 -0
  54. package/dist/esm/exporters/index.js.map +1 -0
  55. package/dist/esm/index-browser.d.ts +2 -3
  56. package/dist/esm/index-browser.d.ts.map +1 -1
  57. package/dist/esm/index-browser.js +2 -3
  58. package/dist/esm/index-browser.js.map +1 -1
  59. package/dist/esm/index-node.d.ts +3 -3
  60. package/dist/esm/index-node.d.ts.map +1 -1
  61. package/dist/esm/index-node.js +3 -3
  62. package/dist/esm/index-node.js.map +1 -1
  63. package/dist/esm/index.d.ts +3 -4
  64. package/dist/esm/index.d.ts.map +1 -1
  65. package/dist/esm/index.js +3 -4
  66. package/dist/esm/index.js.map +1 -1
  67. package/dist/esm/instrumentations/SessionRecorderHttpInstrumentationHooksNode.d.ts.map +1 -0
  68. package/dist/esm/{SessionRecorderHttpInstrumentationHooksNode.js → instrumentations/SessionRecorderHttpInstrumentationHooksNode.js} +3 -3
  69. package/dist/esm/instrumentations/SessionRecorderHttpInstrumentationHooksNode.js.map +1 -0
  70. package/dist/esm/instrumentations/index-node.d.ts +2 -0
  71. package/dist/esm/instrumentations/index-node.d.ts.map +1 -0
  72. package/dist/esm/instrumentations/index-node.js +2 -0
  73. package/dist/esm/instrumentations/index-node.js.map +1 -0
  74. package/dist/esm/sdk/mask.js +1 -1
  75. package/dist/esm/sdk/mask.js.map +1 -1
  76. package/dist/esm/sdk/save-continuous-deb-session.js +1 -1
  77. package/dist/esm/sdk/save-continuous-deb-session.js.map +1 -1
  78. package/dist/esm/sdk/set-attribute.js +1 -1
  79. package/dist/esm/sdk/set-attribute.js.map +1 -1
  80. package/dist/esm/tsconfig.esm.tsbuildinfo +1 -1
  81. package/dist/esnext/SessionRecorderIdGenerator.d.ts +1 -6
  82. package/dist/esnext/SessionRecorderIdGenerator.d.ts.map +1 -1
  83. package/dist/esnext/SessionRecorderIdGenerator.js +3 -11
  84. package/dist/esnext/SessionRecorderIdGenerator.js.map +1 -1
  85. package/dist/esnext/SessionRecorderTraceIdRatioBasedSampler.js +1 -1
  86. package/dist/esnext/SessionRecorderTraceIdRatioBasedSampler.js.map +1 -1
  87. package/dist/{src → esnext/constants}/constants.base.d.ts +14 -0
  88. package/dist/esnext/constants/constants.base.d.ts.map +1 -0
  89. package/dist/esnext/{constants.base.js → constants/constants.base.js} +14 -0
  90. package/dist/esnext/constants/constants.base.js.map +1 -0
  91. package/dist/esnext/constants/constants.browser.d.ts.map +1 -0
  92. package/dist/esnext/constants/constants.browser.js.map +1 -0
  93. package/dist/esnext/constants/constants.node.d.ts.map +1 -0
  94. package/dist/esnext/constants/constants.node.js.map +1 -0
  95. package/dist/esnext/exporters/SessionRecorderBrowserTraceExporter.d.ts +31 -0
  96. package/dist/esnext/exporters/SessionRecorderBrowserTraceExporter.d.ts.map +1 -0
  97. package/dist/esnext/exporters/SessionRecorderBrowserTraceExporter.js +159 -0
  98. package/dist/esnext/exporters/SessionRecorderBrowserTraceExporter.js.map +1 -0
  99. package/dist/esnext/exporters/SessionRecorderGrpcLogsExporter.d.ts +22 -0
  100. package/dist/esnext/exporters/SessionRecorderGrpcLogsExporter.d.ts.map +1 -0
  101. package/dist/esnext/exporters/SessionRecorderGrpcLogsExporter.js +33 -0
  102. package/dist/esnext/exporters/SessionRecorderGrpcLogsExporter.js.map +1 -0
  103. package/dist/esnext/exporters/SessionRecorderGrpcTraceExporter.d.ts +22 -0
  104. package/dist/esnext/exporters/SessionRecorderGrpcTraceExporter.d.ts.map +1 -0
  105. package/dist/esnext/exporters/SessionRecorderGrpcTraceExporter.js +30 -0
  106. package/dist/esnext/exporters/SessionRecorderGrpcTraceExporter.js.map +1 -0
  107. package/dist/esnext/exporters/SessionRecorderHttpLogsExporter.d.ts +20 -0
  108. package/dist/esnext/exporters/SessionRecorderHttpLogsExporter.d.ts.map +1 -0
  109. package/dist/esnext/exporters/SessionRecorderHttpLogsExporter.js +32 -0
  110. package/dist/esnext/exporters/SessionRecorderHttpLogsExporter.js.map +1 -0
  111. package/dist/esnext/exporters/SessionRecorderHttpTraceExporter.d.ts +25 -0
  112. package/dist/esnext/exporters/SessionRecorderHttpTraceExporter.d.ts.map +1 -0
  113. package/dist/esnext/exporters/SessionRecorderHttpTraceExporter.js +38 -0
  114. package/dist/esnext/exporters/SessionRecorderHttpTraceExporter.js.map +1 -0
  115. package/dist/esnext/exporters/SessionRecorderLogsExporterWrapper.d.ts +13 -0
  116. package/dist/esnext/exporters/SessionRecorderLogsExporterWrapper.d.ts.map +1 -0
  117. package/dist/esnext/exporters/SessionRecorderLogsExporterWrapper.js +23 -0
  118. package/dist/esnext/exporters/SessionRecorderLogsExporterWrapper.js.map +1 -0
  119. package/dist/esnext/exporters/SessionRecorderTraceExporterWrapper.d.ts +13 -0
  120. package/dist/esnext/exporters/SessionRecorderTraceExporterWrapper.d.ts.map +1 -0
  121. package/dist/esnext/exporters/SessionRecorderTraceExporterWrapper.js +22 -0
  122. package/dist/esnext/exporters/SessionRecorderTraceExporterWrapper.js.map +1 -0
  123. package/dist/esnext/exporters/index-browser.d.ts +2 -0
  124. package/dist/esnext/exporters/index-browser.d.ts.map +1 -0
  125. package/dist/esnext/exporters/index-browser.js +2 -0
  126. package/dist/esnext/exporters/index-browser.js.map +1 -0
  127. package/dist/esnext/exporters/index-node.d.ts +7 -0
  128. package/dist/esnext/exporters/index-node.d.ts.map +1 -0
  129. package/dist/esnext/exporters/index-node.js +7 -0
  130. package/dist/esnext/exporters/index-node.js.map +1 -0
  131. package/dist/esnext/exporters/index.d.ts +8 -0
  132. package/dist/esnext/exporters/index.d.ts.map +1 -0
  133. package/dist/esnext/exporters/index.js +8 -0
  134. package/dist/esnext/exporters/index.js.map +1 -0
  135. package/dist/esnext/index-browser.d.ts +2 -3
  136. package/dist/esnext/index-browser.d.ts.map +1 -1
  137. package/dist/esnext/index-browser.js +2 -3
  138. package/dist/esnext/index-browser.js.map +1 -1
  139. package/dist/esnext/index-node.d.ts +3 -3
  140. package/dist/esnext/index-node.d.ts.map +1 -1
  141. package/dist/esnext/index-node.js +3 -3
  142. package/dist/esnext/index-node.js.map +1 -1
  143. package/dist/esnext/index.d.ts +3 -4
  144. package/dist/esnext/index.d.ts.map +1 -1
  145. package/dist/esnext/index.js +3 -4
  146. package/dist/esnext/index.js.map +1 -1
  147. package/dist/esnext/instrumentations/SessionRecorderHttpInstrumentationHooksNode.d.ts.map +1 -0
  148. package/dist/esnext/{SessionRecorderHttpInstrumentationHooksNode.js → instrumentations/SessionRecorderHttpInstrumentationHooksNode.js} +3 -3
  149. package/dist/esnext/instrumentations/SessionRecorderHttpInstrumentationHooksNode.js.map +1 -0
  150. package/dist/esnext/instrumentations/index-node.d.ts +2 -0
  151. package/dist/esnext/instrumentations/index-node.d.ts.map +1 -0
  152. package/dist/esnext/instrumentations/index-node.js +2 -0
  153. package/dist/esnext/instrumentations/index-node.js.map +1 -0
  154. package/dist/esnext/sdk/mask.js +1 -1
  155. package/dist/esnext/sdk/mask.js.map +1 -1
  156. package/dist/esnext/sdk/save-continuous-deb-session.js +1 -1
  157. package/dist/esnext/sdk/save-continuous-deb-session.js.map +1 -1
  158. package/dist/esnext/sdk/set-attribute.js +1 -1
  159. package/dist/esnext/sdk/set-attribute.js.map +1 -1
  160. package/dist/esnext/tsconfig.esnext.tsbuildinfo +1 -1
  161. package/dist/src/SessionRecorderIdGenerator.d.ts +1 -6
  162. package/dist/src/SessionRecorderIdGenerator.d.ts.map +1 -1
  163. package/dist/src/SessionRecorderIdGenerator.js +2 -10
  164. package/dist/src/SessionRecorderIdGenerator.js.map +1 -1
  165. package/dist/src/SessionRecorderTraceIdRatioBasedSampler.js +1 -1
  166. package/dist/src/SessionRecorderTraceIdRatioBasedSampler.js.map +1 -1
  167. package/dist/{esnext → src/constants}/constants.base.d.ts +14 -0
  168. package/dist/src/constants/constants.base.d.ts.map +1 -0
  169. package/dist/src/{constants.base.js → constants/constants.base.js} +15 -1
  170. package/dist/src/constants/constants.base.js.map +1 -0
  171. package/dist/src/constants/constants.browser.d.ts.map +1 -0
  172. package/dist/src/constants/constants.browser.js.map +1 -0
  173. package/dist/src/constants/constants.node.d.ts.map +1 -0
  174. package/dist/src/constants/constants.node.js.map +1 -0
  175. package/dist/src/exporters/SessionRecorderBrowserTraceExporter.d.ts +31 -0
  176. package/dist/src/exporters/SessionRecorderBrowserTraceExporter.d.ts.map +1 -0
  177. package/dist/src/exporters/SessionRecorderBrowserTraceExporter.js +163 -0
  178. package/dist/src/exporters/SessionRecorderBrowserTraceExporter.js.map +1 -0
  179. package/dist/src/exporters/SessionRecorderGrpcLogsExporter.d.ts +22 -0
  180. package/dist/src/exporters/SessionRecorderGrpcLogsExporter.d.ts.map +1 -0
  181. package/dist/src/exporters/SessionRecorderGrpcLogsExporter.js +37 -0
  182. package/dist/src/exporters/SessionRecorderGrpcLogsExporter.js.map +1 -0
  183. package/dist/src/exporters/SessionRecorderGrpcTraceExporter.d.ts +22 -0
  184. package/dist/src/exporters/SessionRecorderGrpcTraceExporter.d.ts.map +1 -0
  185. package/dist/src/exporters/SessionRecorderGrpcTraceExporter.js +34 -0
  186. package/dist/src/exporters/SessionRecorderGrpcTraceExporter.js.map +1 -0
  187. package/dist/src/exporters/SessionRecorderHttpLogsExporter.d.ts +20 -0
  188. package/dist/src/exporters/SessionRecorderHttpLogsExporter.d.ts.map +1 -0
  189. package/dist/src/exporters/SessionRecorderHttpLogsExporter.js +36 -0
  190. package/dist/src/exporters/SessionRecorderHttpLogsExporter.js.map +1 -0
  191. package/dist/src/exporters/SessionRecorderHttpTraceExporter.d.ts +25 -0
  192. package/dist/src/exporters/SessionRecorderHttpTraceExporter.d.ts.map +1 -0
  193. package/dist/src/exporters/SessionRecorderHttpTraceExporter.js +42 -0
  194. package/dist/src/exporters/SessionRecorderHttpTraceExporter.js.map +1 -0
  195. package/dist/src/exporters/SessionRecorderLogsExporterWrapper.d.ts +13 -0
  196. package/dist/src/exporters/SessionRecorderLogsExporterWrapper.d.ts.map +1 -0
  197. package/dist/src/exporters/SessionRecorderLogsExporterWrapper.js +27 -0
  198. package/dist/src/exporters/SessionRecorderLogsExporterWrapper.js.map +1 -0
  199. package/dist/src/exporters/SessionRecorderTraceExporterWrapper.d.ts +13 -0
  200. package/dist/src/exporters/SessionRecorderTraceExporterWrapper.d.ts.map +1 -0
  201. package/dist/src/exporters/SessionRecorderTraceExporterWrapper.js +26 -0
  202. package/dist/src/exporters/SessionRecorderTraceExporterWrapper.js.map +1 -0
  203. package/dist/src/exporters/index-browser.d.ts +2 -0
  204. package/dist/src/exporters/index-browser.d.ts.map +1 -0
  205. package/dist/src/exporters/index-browser.js +18 -0
  206. package/dist/src/exporters/index-browser.js.map +1 -0
  207. package/dist/src/exporters/index-node.d.ts +7 -0
  208. package/dist/src/exporters/index-node.d.ts.map +1 -0
  209. package/dist/src/exporters/index-node.js +23 -0
  210. package/dist/src/exporters/index-node.js.map +1 -0
  211. package/dist/src/exporters/index.d.ts +8 -0
  212. package/dist/src/exporters/index.d.ts.map +1 -0
  213. package/dist/src/exporters/index.js +24 -0
  214. package/dist/src/exporters/index.js.map +1 -0
  215. package/dist/src/index-browser.d.ts +2 -3
  216. package/dist/src/index-browser.d.ts.map +1 -1
  217. package/dist/src/index-browser.js +3 -6
  218. package/dist/src/index-browser.js.map +1 -1
  219. package/dist/src/index-node.d.ts +3 -3
  220. package/dist/src/index-node.d.ts.map +1 -1
  221. package/dist/src/index-node.js +4 -5
  222. package/dist/src/index-node.js.map +1 -1
  223. package/dist/src/index.d.ts +3 -4
  224. package/dist/src/index.d.ts.map +1 -1
  225. package/dist/src/index.js +4 -8
  226. package/dist/src/index.js.map +1 -1
  227. package/dist/src/instrumentations/SessionRecorderHttpInstrumentationHooksNode.d.ts.map +1 -0
  228. package/dist/src/{SessionRecorderHttpInstrumentationHooksNode.js → instrumentations/SessionRecorderHttpInstrumentationHooksNode.js} +3 -3
  229. package/dist/src/instrumentations/SessionRecorderHttpInstrumentationHooksNode.js.map +1 -0
  230. package/dist/src/instrumentations/index-node.d.ts +2 -0
  231. package/dist/src/instrumentations/index-node.d.ts.map +1 -0
  232. package/dist/src/instrumentations/index-node.js +18 -0
  233. package/dist/src/instrumentations/index-node.js.map +1 -0
  234. package/dist/src/sdk/mask.js +1 -1
  235. package/dist/src/sdk/mask.js.map +1 -1
  236. package/dist/src/sdk/save-continuous-deb-session.js +1 -1
  237. package/dist/src/sdk/save-continuous-deb-session.js.map +1 -1
  238. package/dist/src/sdk/set-attribute.js +1 -1
  239. package/dist/src/sdk/set-attribute.js.map +1 -1
  240. package/package.json +10 -4
  241. package/src/SessionRecorderIdGenerator.ts +3 -22
  242. package/src/SessionRecorderTraceIdRatioBasedSampler.ts +1 -1
  243. package/src/{constants.base.ts → constants/constants.base.ts} +19 -0
  244. package/src/exporters/SessionRecorderBrowserTraceExporter.ts +212 -0
  245. package/src/exporters/SessionRecorderGrpcLogsExporter.ts +52 -0
  246. package/src/exporters/SessionRecorderGrpcTraceExporter.ts +50 -0
  247. package/src/exporters/SessionRecorderHttpLogsExporter.ts +58 -0
  248. package/src/exporters/SessionRecorderHttpTraceExporter.ts +65 -0
  249. package/src/exporters/SessionRecorderLogsExporterWrapper.ts +36 -0
  250. package/src/exporters/SessionRecorderTraceExporterWrapper.ts +36 -0
  251. package/src/exporters/index-browser.ts +1 -0
  252. package/src/exporters/index-node.ts +6 -0
  253. package/src/exporters/index.ts +7 -0
  254. package/src/index-browser.ts +2 -3
  255. package/src/index-node.ts +3 -3
  256. package/src/index.ts +3 -4
  257. package/src/{SessionRecorderHttpInstrumentationHooksNode.ts → instrumentations/SessionRecorderHttpInstrumentationHooksNode.ts} +3 -3
  258. package/src/instrumentations/index-node.ts +1 -0
  259. package/src/sdk/mask.ts +1 -1
  260. package/src/sdk/save-continuous-deb-session.ts +1 -1
  261. package/src/sdk/set-attribute.ts +1 -1
  262. package/dist/esm/SessionRecorderHttpInstrumentationHooksNode.d.ts.map +0 -1
  263. package/dist/esm/SessionRecorderHttpInstrumentationHooksNode.js.map +0 -1
  264. package/dist/esm/SessionRecorderHttpTraceExporterBrowser.d.ts +0 -26
  265. package/dist/esm/SessionRecorderHttpTraceExporterBrowser.d.ts.map +0 -1
  266. package/dist/esm/SessionRecorderHttpTraceExporterBrowser.js +0 -116
  267. package/dist/esm/SessionRecorderHttpTraceExporterBrowser.js.map +0 -1
  268. package/dist/esm/SessionRecorderJsonTraceSerializer.d.ts +0 -4
  269. package/dist/esm/SessionRecorderJsonTraceSerializer.d.ts.map +0 -1
  270. package/dist/esm/SessionRecorderJsonTraceSerializer.js +0 -26
  271. package/dist/esm/SessionRecorderJsonTraceSerializer.js.map +0 -1
  272. package/dist/esm/constants.base.d.ts.map +0 -1
  273. package/dist/esm/constants.base.js.map +0 -1
  274. package/dist/esm/constants.browser.d.ts.map +0 -1
  275. package/dist/esm/constants.browser.js.map +0 -1
  276. package/dist/esm/constants.node.d.ts.map +0 -1
  277. package/dist/esm/constants.node.js.map +0 -1
  278. package/dist/esnext/SessionRecorderHttpInstrumentationHooksNode.d.ts.map +0 -1
  279. package/dist/esnext/SessionRecorderHttpInstrumentationHooksNode.js.map +0 -1
  280. package/dist/esnext/SessionRecorderHttpTraceExporterBrowser.d.ts +0 -26
  281. package/dist/esnext/SessionRecorderHttpTraceExporterBrowser.d.ts.map +0 -1
  282. package/dist/esnext/SessionRecorderHttpTraceExporterBrowser.js +0 -82
  283. package/dist/esnext/SessionRecorderHttpTraceExporterBrowser.js.map +0 -1
  284. package/dist/esnext/SessionRecorderJsonTraceSerializer.d.ts +0 -4
  285. package/dist/esnext/SessionRecorderJsonTraceSerializer.d.ts.map +0 -1
  286. package/dist/esnext/SessionRecorderJsonTraceSerializer.js +0 -26
  287. package/dist/esnext/SessionRecorderJsonTraceSerializer.js.map +0 -1
  288. package/dist/esnext/constants.base.d.ts.map +0 -1
  289. package/dist/esnext/constants.base.js.map +0 -1
  290. package/dist/esnext/constants.browser.d.ts.map +0 -1
  291. package/dist/esnext/constants.browser.js.map +0 -1
  292. package/dist/esnext/constants.node.d.ts.map +0 -1
  293. package/dist/esnext/constants.node.js.map +0 -1
  294. package/dist/src/SessionRecorderHttpInstrumentationHooksNode.d.ts.map +0 -1
  295. package/dist/src/SessionRecorderHttpInstrumentationHooksNode.js.map +0 -1
  296. package/dist/src/SessionRecorderHttpTraceExporterBrowser.d.ts +0 -26
  297. package/dist/src/SessionRecorderHttpTraceExporterBrowser.d.ts.map +0 -1
  298. package/dist/src/SessionRecorderHttpTraceExporterBrowser.js +0 -86
  299. package/dist/src/SessionRecorderHttpTraceExporterBrowser.js.map +0 -1
  300. package/dist/src/SessionRecorderJsonTraceSerializer.d.ts +0 -4
  301. package/dist/src/SessionRecorderJsonTraceSerializer.d.ts.map +0 -1
  302. package/dist/src/SessionRecorderJsonTraceSerializer.js +0 -29
  303. package/dist/src/SessionRecorderJsonTraceSerializer.js.map +0 -1
  304. package/dist/src/constants.base.d.ts.map +0 -1
  305. package/dist/src/constants.base.js.map +0 -1
  306. package/dist/src/constants.browser.d.ts.map +0 -1
  307. package/dist/src/constants.browser.js.map +0 -1
  308. package/dist/src/constants.node.d.ts.map +0 -1
  309. package/dist/src/constants.node.js.map +0 -1
  310. package/src/SessionRecorderHttpTraceExporterBrowser.ts +0 -123
  311. package/src/SessionRecorderJsonTraceSerializer.ts +0 -43
  312. /package/dist/esm/{constants.browser.d.ts → constants/constants.browser.d.ts} +0 -0
  313. /package/dist/esm/{constants.browser.js → constants/constants.browser.js} +0 -0
  314. /package/dist/esm/{constants.node.d.ts → constants/constants.node.d.ts} +0 -0
  315. /package/dist/esm/{constants.node.js → constants/constants.node.js} +0 -0
  316. /package/dist/esm/{SessionRecorderHttpInstrumentationHooksNode.d.ts → instrumentations/SessionRecorderHttpInstrumentationHooksNode.d.ts} +0 -0
  317. /package/dist/esnext/{constants.browser.d.ts → constants/constants.browser.d.ts} +0 -0
  318. /package/dist/esnext/{constants.browser.js → constants/constants.browser.js} +0 -0
  319. /package/dist/esnext/{constants.node.d.ts → constants/constants.node.d.ts} +0 -0
  320. /package/dist/esnext/{constants.node.js → constants/constants.node.js} +0 -0
  321. /package/dist/esnext/{SessionRecorderHttpInstrumentationHooksNode.d.ts → instrumentations/SessionRecorderHttpInstrumentationHooksNode.d.ts} +0 -0
  322. /package/dist/src/{constants.browser.d.ts → constants/constants.browser.d.ts} +0 -0
  323. /package/dist/src/{constants.browser.js → constants/constants.browser.js} +0 -0
  324. /package/dist/src/{constants.node.d.ts → constants/constants.node.d.ts} +0 -0
  325. /package/dist/src/{constants.node.js → constants/constants.node.js} +0 -0
  326. /package/dist/src/{SessionRecorderHttpInstrumentationHooksNode.d.ts → instrumentations/SessionRecorderHttpInstrumentationHooksNode.d.ts} +0 -0
  327. /package/src/{constants.browser.ts → constants/constants.browser.ts} +0 -0
  328. /package/src/{constants.node.ts → constants/constants.node.ts} +0 -0
@@ -0,0 +1,18 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
+ };
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ __exportStar(require("./SessionRecorderHttpInstrumentationHooksNode"), exports);
18
+ //# sourceMappingURL=index-node.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index-node.js","sourceRoot":"","sources":["../../../src/instrumentations/index-node.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,gFAA6D","sourcesContent":["export * from './SessionRecorderHttpInstrumentationHooksNode'\n"]}
@@ -1,7 +1,7 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.sensitiveHeaders = exports.sensitiveFields = void 0;
4
- const constants_base_1 = require("../constants.base");
4
+ const constants_base_1 = require("../constants/constants.base");
5
5
  const MAX_DEPTH = 8;
6
6
  exports.sensitiveFields = [
7
7
  'password',
@@ -1 +1 @@
1
- {"version":3,"file":"mask.js","sourceRoot":"","sources":["../../../src/sdk/mask.ts"],"names":[],"mappings":"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","sourcesContent":["import type { Span } from '@opentelemetry/api'\nimport { MASK_PLACEHOLDER } from '../constants.base'\n\nconst MAX_DEPTH = 8\nexport const sensitiveFields: string[] = [\n 'password',\n 'pass',\n 'passwd',\n 'pwd',\n 'token',\n 'access_token',\n 'accessToken',\n 'refresh_token',\n 'refreshToken',\n 'secret',\n 'api_key',\n 'apiKey',\n 'authorization',\n 'auth_token',\n 'authToken',\n 'jwt',\n 'session_id',\n 'sessionId',\n 'sessionToken',\n 'client_secret',\n 'clientSecret',\n 'private_key',\n 'privateKey',\n 'public_key',\n 'publicKey',\n 'key',\n 'encryption_key',\n 'encryptionKey',\n 'credit_card',\n 'creditCard',\n 'card_number',\n 'cardNumber',\n 'cvv',\n 'cvc',\n 'ssn',\n 'sin',\n 'pin',\n 'security_code',\n 'securityCode',\n 'bank_account',\n 'bankAccount',\n 'iban',\n 'swift',\n 'bic',\n 'routing_number',\n 'routingNumber',\n 'license_key',\n 'licenseKey',\n 'otp',\n 'mfa_code',\n 'mfaCode',\n 'phone_number',\n 'phoneNumber',\n 'email',\n 'address',\n 'dob',\n 'tax_id',\n 'taxId',\n 'passport_number',\n 'passportNumber',\n 'driver_license',\n 'driverLicense',\n\n 'set-cookie',\n 'cookie',\n 'authorization',\n 'proxyAuthorization',\n]\n\nexport const sensitiveHeaders: string[] = [\n 'set-cookie',\n 'cookie',\n 'authorization',\n 'proxyAuthorization',\n]\n\nconst maskAll = (value: any, depth = 0) => {\n const type = typeof value\n const isObject = type === 'object'\n let isArray = false\n\n if (Array.isArray(value)) {\n isArray = true\n }\n\n if (depth > MAX_DEPTH && (isObject || isArray)) {\n return undefined\n }\n\n if (isArray) {\n return value.map((val: any) => maskAll(val, depth + 1), value)\n }\n\n if (isObject) {\n for (const key in value) {\n value[key] = maskAll(value[key], depth + 1)\n }\n\n return value\n }\n\n if (type === 'string') {\n return MASK_PLACEHOLDER\n }\n\n return value\n}\n\nconst maskSelected = (value: any, keysToMask: string[]): any => {\n const type = typeof value\n const isObject = type === 'object'\n\n const _keysToMask = new Set(keysToMask)\n\n if (Array.isArray(value)) {\n return value.map((val: any) => maskSelected(val, keysToMask), value)\n }\n\n if (isObject) {\n for (const key in value) {\n if (_keysToMask.has(key)) {\n value[key] = MASK_PLACEHOLDER\n } else {\n value[key] = maskSelected(value[key], keysToMask)\n }\n }\n\n return value\n }\n\n if (type === 'string') {\n return value\n }\n\n return value\n}\n\nexport default (keysToMask: string[] = []) => (value: any, span?: Span): any => {\n let payloadJson\n try {\n payloadJson = JSON.parse(value)\n } catch {\n payloadJson = value\n }\n let maskedData\n if (keysToMask.length) {\n maskedData = maskSelected(payloadJson, keysToMask)\n } else {\n maskedData = maskAll(payloadJson)\n }\n if (typeof maskedData !== 'string') {\n maskedData = JSON.stringify(maskedData)\n }\n\n return maskedData\n}\n"]}
1
+ {"version":3,"file":"mask.js","sourceRoot":"","sources":["../../../src/sdk/mask.ts"],"names":[],"mappings":";;;AACA,gEAA8D;AAE9D,MAAM,SAAS,GAAG,CAAC,CAAA;AACN,QAAA,eAAe,GAAa;IACvC,UAAU;IACV,MAAM;IACN,QAAQ;IACR,KAAK;IACL,OAAO;IACP,cAAc;IACd,aAAa;IACb,eAAe;IACf,cAAc;IACd,QAAQ;IACR,SAAS;IACT,QAAQ;IACR,eAAe;IACf,YAAY;IACZ,WAAW;IACX,KAAK;IACL,YAAY;IACZ,WAAW;IACX,cAAc;IACd,eAAe;IACf,cAAc;IACd,aAAa;IACb,YAAY;IACZ,YAAY;IACZ,WAAW;IACX,KAAK;IACL,gBAAgB;IAChB,eAAe;IACf,aAAa;IACb,YAAY;IACZ,aAAa;IACb,YAAY;IACZ,KAAK;IACL,KAAK;IACL,KAAK;IACL,KAAK;IACL,KAAK;IACL,eAAe;IACf,cAAc;IACd,cAAc;IACd,aAAa;IACb,MAAM;IACN,OAAO;IACP,KAAK;IACL,gBAAgB;IAChB,eAAe;IACf,aAAa;IACb,YAAY;IACZ,KAAK;IACL,UAAU;IACV,SAAS;IACT,cAAc;IACd,aAAa;IACb,OAAO;IACP,SAAS;IACT,KAAK;IACL,QAAQ;IACR,OAAO;IACP,iBAAiB;IACjB,gBAAgB;IAChB,gBAAgB;IAChB,eAAe;IAEf,YAAY;IACZ,QAAQ;IACR,eAAe;IACf,oBAAoB;CACrB,CAAA;AAEY,QAAA,gBAAgB,GAAa;IACxC,YAAY;IACZ,QAAQ;IACR,eAAe;IACf,oBAAoB;CACrB,CAAA;AAED,MAAM,OAAO,GAAG,CAAC,KAAU,EAAE,KAAK,GAAG,CAAC,EAAE,EAAE;IACxC,MAAM,IAAI,GAAG,OAAO,KAAK,CAAA;IACzB,MAAM,QAAQ,GAAG,IAAI,KAAK,QAAQ,CAAA;IAClC,IAAI,OAAO,GAAG,KAAK,CAAA;IAEnB,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QACzB,OAAO,GAAG,IAAI,CAAA;IAChB,CAAC;IAED,IAAI,KAAK,GAAG,SAAS,IAAI,CAAC,QAAQ,IAAI,OAAO,CAAC,EAAE,CAAC;QAC/C,OAAO,SAAS,CAAA;IAClB,CAAC;IAED,IAAI,OAAO,EAAE,CAAC;QACZ,OAAO,KAAK,CAAC,GAAG,CAAC,CAAC,GAAQ,EAAE,EAAE,CAAC,OAAO,CAAC,GAAG,EAAE,KAAK,GAAG,CAAC,CAAC,EAAE,KAAK,CAAC,CAAA;IAChE,CAAC;IAED,IAAI,QAAQ,EAAE,CAAC;QACb,KAAK,MAAM,GAAG,IAAI,KAAK,EAAE,CAAC;YACxB,KAAK,CAAC,GAAG,CAAC,GAAG,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,KAAK,GAAG,CAAC,CAAC,CAAA;QAC7C,CAAC;QAED,OAAO,KAAK,CAAA;IACd,CAAC;IAED,IAAI,IAAI,KAAK,QAAQ,EAAE,CAAC;QACtB,OAAO,iCAAgB,CAAA;IACzB,CAAC;IAED,OAAO,KAAK,CAAA;AACd,CAAC,CAAA;AAED,MAAM,YAAY,GAAG,CAAC,KAAU,EAAE,UAAoB,EAAO,EAAE;IAC7D,MAAM,IAAI,GAAG,OAAO,KAAK,CAAA;IACzB,MAAM,QAAQ,GAAG,IAAI,KAAK,QAAQ,CAAA;IAElC,MAAM,WAAW,GAAG,IAAI,GAAG,CAAC,UAAU,CAAC,CAAA;IAEvC,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QACzB,OAAO,KAAK,CAAC,GAAG,CAAC,CAAC,GAAQ,EAAE,EAAE,CAAC,YAAY,CAAC,GAAG,EAAE,UAAU,CAAC,EAAE,KAAK,CAAC,CAAA;IACtE,CAAC;IAED,IAAI,QAAQ,EAAE,CAAC;QACb,KAAK,MAAM,GAAG,IAAI,KAAK,EAAE,CAAC;YACxB,IAAI,WAAW,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;gBACzB,KAAK,CAAC,GAAG,CAAC,GAAG,iCAAgB,CAAA;YAC/B,CAAC;iBAAM,CAAC;gBACN,KAAK,CAAC,GAAG,CAAC,GAAG,YAAY,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,UAAU,CAAC,CAAA;YACnD,CAAC;QACH,CAAC;QAED,OAAO,KAAK,CAAA;IACd,CAAC;IAED,IAAI,IAAI,KAAK,QAAQ,EAAE,CAAC;QACtB,OAAO,KAAK,CAAA;IACd,CAAC;IAED,OAAO,KAAK,CAAA;AACd,CAAC,CAAA;AAED,kBAAe,CAAC,aAAuB,EAAE,EAAE,EAAE,CAAC,CAAC,KAAU,EAAE,IAAW,EAAO,EAAE;IAC7E,IAAI,WAAW,CAAA;IACf,IAAI,CAAC;QACH,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAA;IACjC,CAAC;IAAC,WAAM,CAAC;QACP,WAAW,GAAG,KAAK,CAAA;IACrB,CAAC;IACD,IAAI,UAAU,CAAA;IACd,IAAI,UAAU,CAAC,MAAM,EAAE,CAAC;QACtB,UAAU,GAAG,YAAY,CAAC,WAAW,EAAE,UAAU,CAAC,CAAA;IACpD,CAAC;SAAM,CAAC;QACN,UAAU,GAAG,OAAO,CAAC,WAAW,CAAC,CAAA;IACnC,CAAC;IACD,IAAI,OAAO,UAAU,KAAK,QAAQ,EAAE,CAAC;QACnC,UAAU,GAAG,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,CAAA;IACzC,CAAC;IAED,OAAO,UAAU,CAAA;AACnB,CAAC,CAAA","sourcesContent":["import type { Span } from '@opentelemetry/api'\nimport { MASK_PLACEHOLDER } from '../constants/constants.base'\n\nconst MAX_DEPTH = 8\nexport const sensitiveFields: string[] = [\n 'password',\n 'pass',\n 'passwd',\n 'pwd',\n 'token',\n 'access_token',\n 'accessToken',\n 'refresh_token',\n 'refreshToken',\n 'secret',\n 'api_key',\n 'apiKey',\n 'authorization',\n 'auth_token',\n 'authToken',\n 'jwt',\n 'session_id',\n 'sessionId',\n 'sessionToken',\n 'client_secret',\n 'clientSecret',\n 'private_key',\n 'privateKey',\n 'public_key',\n 'publicKey',\n 'key',\n 'encryption_key',\n 'encryptionKey',\n 'credit_card',\n 'creditCard',\n 'card_number',\n 'cardNumber',\n 'cvv',\n 'cvc',\n 'ssn',\n 'sin',\n 'pin',\n 'security_code',\n 'securityCode',\n 'bank_account',\n 'bankAccount',\n 'iban',\n 'swift',\n 'bic',\n 'routing_number',\n 'routingNumber',\n 'license_key',\n 'licenseKey',\n 'otp',\n 'mfa_code',\n 'mfaCode',\n 'phone_number',\n 'phoneNumber',\n 'email',\n 'address',\n 'dob',\n 'tax_id',\n 'taxId',\n 'passport_number',\n 'passportNumber',\n 'driver_license',\n 'driverLicense',\n\n 'set-cookie',\n 'cookie',\n 'authorization',\n 'proxyAuthorization',\n]\n\nexport const sensitiveHeaders: string[] = [\n 'set-cookie',\n 'cookie',\n 'authorization',\n 'proxyAuthorization',\n]\n\nconst maskAll = (value: any, depth = 0) => {\n const type = typeof value\n const isObject = type === 'object'\n let isArray = false\n\n if (Array.isArray(value)) {\n isArray = true\n }\n\n if (depth > MAX_DEPTH && (isObject || isArray)) {\n return undefined\n }\n\n if (isArray) {\n return value.map((val: any) => maskAll(val, depth + 1), value)\n }\n\n if (isObject) {\n for (const key in value) {\n value[key] = maskAll(value[key], depth + 1)\n }\n\n return value\n }\n\n if (type === 'string') {\n return MASK_PLACEHOLDER\n }\n\n return value\n}\n\nconst maskSelected = (value: any, keysToMask: string[]): any => {\n const type = typeof value\n const isObject = type === 'object'\n\n const _keysToMask = new Set(keysToMask)\n\n if (Array.isArray(value)) {\n return value.map((val: any) => maskSelected(val, keysToMask), value)\n }\n\n if (isObject) {\n for (const key in value) {\n if (_keysToMask.has(key)) {\n value[key] = MASK_PLACEHOLDER\n } else {\n value[key] = maskSelected(value[key], keysToMask)\n }\n }\n\n return value\n }\n\n if (type === 'string') {\n return value\n }\n\n return value\n}\n\nexport default (keysToMask: string[] = []) => (value: any, span?: Span): any => {\n let payloadJson\n try {\n payloadJson = JSON.parse(value)\n } catch {\n payloadJson = value\n }\n let maskedData\n if (keysToMask.length) {\n maskedData = maskSelected(payloadJson, keysToMask)\n } else {\n maskedData = maskAll(payloadJson)\n }\n if (typeof maskedData !== 'string') {\n maskedData = JSON.stringify(maskedData)\n }\n\n return maskedData\n}\n"]}
@@ -2,7 +2,7 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.saveContinuousSession = void 0;
4
4
  const api_1 = require("@opentelemetry/api");
5
- const constants_base_1 = require("../constants.base");
5
+ const constants_base_1 = require("../constants/constants.base");
6
6
  /**
7
7
  * @description Set auto save attribute to span
8
8
  * @param {String} reason
@@ -1 +1 @@
1
- {"version":3,"file":"save-continuous-deb-session.js","sourceRoot":"","sources":["../../../src/sdk/save-continuous-deb-session.ts"],"names":[],"mappings":";;;AAAA,4CAAmD;AACnD,sDAG0B;AAC1B;;;;GAIG;AACI,MAAM,qBAAqB,GAAG,CACnC,MAAe,EACf,EAAE;IACF,MAAM,IAAI,GAAG,WAAK,CAAC,OAAO,CAAC,aAAO,CAAC,MAAM,EAAE,CAAC,CAAA;IAE5C,IAAI,CAAC,IAAI,EAAE,CAAC;QACV,OAAM;QACN,cAAc;IAChB,CAAC;IAED,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,YAAY,CAAC,8DAA6C,EAAE,IAAI,CAAC,CAAA;IAEvE,IAAI,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,MAAM,EAAE,CAAC;QACnB,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,QAAQ,CAAC,qEAAoD,EAAE;YACnE,MAAM;SACP,CAAC,CAAA;IACJ,CAAC;AACH,CAAC,CAAA;AAjBY,QAAA,qBAAqB,yBAiBjC","sourcesContent":["import { context, trace } from '@opentelemetry/api'\nimport {\n ATTR_MULTIPLAYER_CONTINUOUS_SESSION_AUTO_SAVE,\n ATTR_MULTIPLAYER_CONTINUOUS_SESSION_AUTO_SAVE_REASON,\n} from '../constants.base'\n/**\n * @description Set auto save attribute to span\n * @param {String} reason\n * @returns {void}\n */\nexport const saveContinuousSession = (\n reason?: string,\n) => {\n const span = trace.getSpan(context.active())\n\n if (!span) {\n return\n // create span\n }\n\n span?.setAttribute(ATTR_MULTIPLAYER_CONTINUOUS_SESSION_AUTO_SAVE, true)\n\n if (reason?.length) {\n span?.addEvent(ATTR_MULTIPLAYER_CONTINUOUS_SESSION_AUTO_SAVE_REASON, {\n reason,\n })\n }\n}\n"]}
1
+ {"version":3,"file":"save-continuous-deb-session.js","sourceRoot":"","sources":["../../../src/sdk/save-continuous-deb-session.ts"],"names":[],"mappings":";;;AAAA,4CAAmD;AACnD,gEAGoC;AACpC;;;;GAIG;AACI,MAAM,qBAAqB,GAAG,CACnC,MAAe,EACf,EAAE;IACF,MAAM,IAAI,GAAG,WAAK,CAAC,OAAO,CAAC,aAAO,CAAC,MAAM,EAAE,CAAC,CAAA;IAE5C,IAAI,CAAC,IAAI,EAAE,CAAC;QACV,OAAM;QACN,cAAc;IAChB,CAAC;IAED,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,YAAY,CAAC,8DAA6C,EAAE,IAAI,CAAC,CAAA;IAEvE,IAAI,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,MAAM,EAAE,CAAC;QACnB,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,QAAQ,CAAC,qEAAoD,EAAE;YACnE,MAAM;SACP,CAAC,CAAA;IACJ,CAAC;AACH,CAAC,CAAA;AAjBY,QAAA,qBAAqB,yBAiBjC","sourcesContent":["import { context, trace } from '@opentelemetry/api'\nimport {\n ATTR_MULTIPLAYER_CONTINUOUS_SESSION_AUTO_SAVE,\n ATTR_MULTIPLAYER_CONTINUOUS_SESSION_AUTO_SAVE_REASON,\n} from '../constants/constants.base'\n/**\n * @description Set auto save attribute to span\n * @param {String} reason\n * @returns {void}\n */\nexport const saveContinuousSession = (\n reason?: string,\n) => {\n const span = trace.getSpan(context.active())\n\n if (!span) {\n return\n // create span\n }\n\n span?.setAttribute(ATTR_MULTIPLAYER_CONTINUOUS_SESSION_AUTO_SAVE, true)\n\n if (reason?.length) {\n span?.addEvent(ATTR_MULTIPLAYER_CONTINUOUS_SESSION_AUTO_SAVE_REASON, {\n reason,\n })\n }\n}\n"]}
@@ -2,7 +2,7 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.setGrpcResponseMessage = exports.setGrpcRequestMessage = exports.setRpcResponseMessage = exports.setRpcRequestMessage = exports.setMessageBody = exports.setHttpResponseHeaders = exports.setHttpResponseBody = exports.setHttpRequestHeaders = exports.setHttpRequestBody = exports.setAttribute = void 0;
4
4
  const api_1 = require("@opentelemetry/api");
5
- const constants_base_1 = require("../constants.base");
5
+ const constants_base_1 = require("../constants/constants.base");
6
6
  const mask_1 = require("./mask");
7
7
  /**
8
8
  * @description Set attribute to current span
@@ -1 +1 @@
1
- {"version":3,"file":"set-attribute.js","sourceRoot":"","sources":["../../../src/sdk/set-attribute.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n trace,\n AttributeValue,\n context,\n} from '@opentelemetry/api'\nimport {\n ATTR_MULTIPLAYER_HTTP_RESPONSE_BODY,\n ATTR_MULTIPLAYER_HTTP_RESPONSE_HEADERS,\n ATTR_MULTIPLAYER_HTTP_REQUEST_BODY,\n ATTR_MULTIPLAYER_HTTP_REQUEST_HEADERS,\n ATTR_MULTIPLAYER_RPC_REQUEST_MESSAGE,\n ATTR_MULTIPLAYER_RPC_RESPONSE_MESSAGE,\n ATTR_MULTIPLAYER_GRPC_REQUEST_MESSAGE,\n ATTR_MULTIPLAYER_GRPC_RESPONSE_MESSAGE,\n ATTR_MULTIPLAYER_MESSAGING_MESSAGE_BODY,\n} from '../constants.base'\nimport mask, { sensitiveFields, sensitiveHeaders } from './mask'\n\n/**\n * @description Set attribute to current span\n * @param {string} key\n * @param {AttributeValue} value\n * @returns {void}\n */\nexport const setAttribute = (key: string, value: AttributeValue) => {\n const span = trace.getSpan(context.active())\n if (!span) return\n\n span.setAttribute(key, value)\n}\n\n/**\n * @description Set request body to current span attributes\n * @param body\n * @param {{ mask: boolean }} options\n * @returns {void}\n */\nexport const setHttpRequestBody = (\n body: any,\n options: { mask: boolean } = { mask: true },\n) => {\n const span = trace.getSpan(context.active())\n if (!span) return\n\n if (options?.mask) {\n body = mask(sensitiveFields)(body, span)\n }\n\n span.setAttribute(ATTR_MULTIPLAYER_HTTP_REQUEST_BODY, body)\n}\n\n/**\n * @description Set request headers to current span attributes\n * @param body\n * @param {{ mask: boolean }} options\n * @returns {void}\n */\nexport const setHttpRequestHeaders = (\n body: any,\n options: { mask: boolean } = { mask: true },\n) => {\n const span = trace.getSpan(context.active())\n if (!span) return\n\n if (options?.mask) {\n body = mask(sensitiveHeaders)(body, span)\n }\n\n span.setAttribute(ATTR_MULTIPLAYER_HTTP_REQUEST_HEADERS, body)\n}\n\n/**\n * @description Set response body to current span attributes\n * @param body\n * @param {{ mask: boolean }} options\n * @returns {void}\n */\nexport const setHttpResponseBody = (\n body: any,\n options: { mask: boolean } = { mask: true },\n) => {\n const span = trace.getSpan(context.active())\n if (!span) return\n\n if (options?.mask) {\n body = mask(sensitiveFields)(body, span)\n }\n\n span.setAttribute(ATTR_MULTIPLAYER_HTTP_RESPONSE_BODY, body)\n}\n\n/**\n * @description Set response body to current span attributes\n * @param body\n * @param {{ mask: boolean }} options\n * @returns {void}\n */\nexport const setHttpResponseHeaders = (\n body: any,\n options: { mask: boolean } = { mask: true },\n) => {\n const span = trace.getSpan(context.active())\n if (!span) return\n\n if (options?.mask) {\n body = mask(sensitiveFields)(body, span)\n }\n\n span.setAttribute(ATTR_MULTIPLAYER_HTTP_RESPONSE_HEADERS, body)\n}\n\n/**\n * @description Set message body to current span attributes\n * @param body\n * @param {{ mask: boolean }} options\n * @returns {void}\n */\nexport const setMessageBody = (\n body: any,\n options: { mask: boolean } = { mask: true },\n) => {\n const span = trace.getSpan(context.active())\n if (!span) return\n\n if (options?.mask) {\n body = mask(sensitiveFields)(body, span)\n }\n\n span.setAttribute(ATTR_MULTIPLAYER_MESSAGING_MESSAGE_BODY, body)\n}\n\n/**\n * @description Set rpc request message to current span attributes\n * @param body\n * @param {{ mask: boolean }} options\n * @returns {void}\n */\nexport const setRpcRequestMessage = (\n body: any,\n options: { mask: boolean } = { mask: true },\n) => {\n const span = trace.getSpan(context.active())\n if (!span) return\n\n if (options?.mask) {\n body = mask(sensitiveFields)(body, span)\n }\n\n span.setAttribute(ATTR_MULTIPLAYER_RPC_REQUEST_MESSAGE, body)\n}\n\n/**\n * @description Set rpc response message to current span attributes\n * @param body\n * @param {{ mask: boolean }} options\n * @returns {void}\n */\nexport const setRpcResponseMessage = (\n body: any,\n options: { mask: boolean } = { mask: true },\n) => {\n const span = trace.getSpan(context.active())\n if (!span) return\n\n if (options?.mask) {\n body = mask(sensitiveFields)(body, span)\n }\n\n span.setAttribute(ATTR_MULTIPLAYER_RPC_RESPONSE_MESSAGE, body)\n}\n\n/**\n * @description Set grpc request message to current span attributes\n * @param body\n * @param {{ mask: boolean }} options\n * @returns {void}\n */\nexport const setGrpcRequestMessage = (\n body: any,\n options: { mask: boolean } = { mask: true },\n) => {\n const span = trace.getSpan(context.active())\n if (!span) return\n\n if (options?.mask) {\n body = mask(sensitiveFields)(body, span)\n }\n\n span.setAttribute(ATTR_MULTIPLAYER_GRPC_REQUEST_MESSAGE, body)\n}\n\n/**\n * @description Set grpc response message to current span attributes\n * @param body\n * @param {{ mask: boolean }} options\n * @returns {void}\n */\nexport const setGrpcResponseMessage = (\n body: any,\n options: { mask: boolean } = { mask: true },\n) => {\n const span = trace.getSpan(context.active())\n if (!span) return\n\n if (options?.mask) {\n body = mask(sensitiveFields)(body, span)\n }\n\n span.setAttribute(ATTR_MULTIPLAYER_GRPC_RESPONSE_MESSAGE, body)\n}\n"]}
1
+ {"version":3,"file":"set-attribute.js","sourceRoot":"","sources":["../../../src/sdk/set-attribute.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n trace,\n AttributeValue,\n context,\n} from '@opentelemetry/api'\nimport {\n ATTR_MULTIPLAYER_HTTP_RESPONSE_BODY,\n ATTR_MULTIPLAYER_HTTP_RESPONSE_HEADERS,\n ATTR_MULTIPLAYER_HTTP_REQUEST_BODY,\n ATTR_MULTIPLAYER_HTTP_REQUEST_HEADERS,\n ATTR_MULTIPLAYER_RPC_REQUEST_MESSAGE,\n ATTR_MULTIPLAYER_RPC_RESPONSE_MESSAGE,\n ATTR_MULTIPLAYER_GRPC_REQUEST_MESSAGE,\n ATTR_MULTIPLAYER_GRPC_RESPONSE_MESSAGE,\n ATTR_MULTIPLAYER_MESSAGING_MESSAGE_BODY,\n} from '../constants/constants.base'\nimport mask, { sensitiveFields, sensitiveHeaders } from './mask'\n\n/**\n * @description Set attribute to current span\n * @param {string} key\n * @param {AttributeValue} value\n * @returns {void}\n */\nexport const setAttribute = (key: string, value: AttributeValue) => {\n const span = trace.getSpan(context.active())\n if (!span) return\n\n span.setAttribute(key, value)\n}\n\n/**\n * @description Set request body to current span attributes\n * @param body\n * @param {{ mask: boolean }} options\n * @returns {void}\n */\nexport const setHttpRequestBody = (\n body: any,\n options: { mask: boolean } = { mask: true },\n) => {\n const span = trace.getSpan(context.active())\n if (!span) return\n\n if (options?.mask) {\n body = mask(sensitiveFields)(body, span)\n }\n\n span.setAttribute(ATTR_MULTIPLAYER_HTTP_REQUEST_BODY, body)\n}\n\n/**\n * @description Set request headers to current span attributes\n * @param body\n * @param {{ mask: boolean }} options\n * @returns {void}\n */\nexport const setHttpRequestHeaders = (\n body: any,\n options: { mask: boolean } = { mask: true },\n) => {\n const span = trace.getSpan(context.active())\n if (!span) return\n\n if (options?.mask) {\n body = mask(sensitiveHeaders)(body, span)\n }\n\n span.setAttribute(ATTR_MULTIPLAYER_HTTP_REQUEST_HEADERS, body)\n}\n\n/**\n * @description Set response body to current span attributes\n * @param body\n * @param {{ mask: boolean }} options\n * @returns {void}\n */\nexport const setHttpResponseBody = (\n body: any,\n options: { mask: boolean } = { mask: true },\n) => {\n const span = trace.getSpan(context.active())\n if (!span) return\n\n if (options?.mask) {\n body = mask(sensitiveFields)(body, span)\n }\n\n span.setAttribute(ATTR_MULTIPLAYER_HTTP_RESPONSE_BODY, body)\n}\n\n/**\n * @description Set response body to current span attributes\n * @param body\n * @param {{ mask: boolean }} options\n * @returns {void}\n */\nexport const setHttpResponseHeaders = (\n body: any,\n options: { mask: boolean } = { mask: true },\n) => {\n const span = trace.getSpan(context.active())\n if (!span) return\n\n if (options?.mask) {\n body = mask(sensitiveFields)(body, span)\n }\n\n span.setAttribute(ATTR_MULTIPLAYER_HTTP_RESPONSE_HEADERS, body)\n}\n\n/**\n * @description Set message body to current span attributes\n * @param body\n * @param {{ mask: boolean }} options\n * @returns {void}\n */\nexport const setMessageBody = (\n body: any,\n options: { mask: boolean } = { mask: true },\n) => {\n const span = trace.getSpan(context.active())\n if (!span) return\n\n if (options?.mask) {\n body = mask(sensitiveFields)(body, span)\n }\n\n span.setAttribute(ATTR_MULTIPLAYER_MESSAGING_MESSAGE_BODY, body)\n}\n\n/**\n * @description Set rpc request message to current span attributes\n * @param body\n * @param {{ mask: boolean }} options\n * @returns {void}\n */\nexport const setRpcRequestMessage = (\n body: any,\n options: { mask: boolean } = { mask: true },\n) => {\n const span = trace.getSpan(context.active())\n if (!span) return\n\n if (options?.mask) {\n body = mask(sensitiveFields)(body, span)\n }\n\n span.setAttribute(ATTR_MULTIPLAYER_RPC_REQUEST_MESSAGE, body)\n}\n\n/**\n * @description Set rpc response message to current span attributes\n * @param body\n * @param {{ mask: boolean }} options\n * @returns {void}\n */\nexport const setRpcResponseMessage = (\n body: any,\n options: { mask: boolean } = { mask: true },\n) => {\n const span = trace.getSpan(context.active())\n if (!span) return\n\n if (options?.mask) {\n body = mask(sensitiveFields)(body, span)\n }\n\n span.setAttribute(ATTR_MULTIPLAYER_RPC_RESPONSE_MESSAGE, body)\n}\n\n/**\n * @description Set grpc request message to current span attributes\n * @param body\n * @param {{ mask: boolean }} options\n * @returns {void}\n */\nexport const setGrpcRequestMessage = (\n body: any,\n options: { mask: boolean } = { mask: true },\n) => {\n const span = trace.getSpan(context.active())\n if (!span) return\n\n if (options?.mask) {\n body = mask(sensitiveFields)(body, span)\n }\n\n span.setAttribute(ATTR_MULTIPLAYER_GRPC_REQUEST_MESSAGE, body)\n}\n\n/**\n * @description Set grpc response message to current span attributes\n * @param body\n * @param {{ mask: boolean }} options\n * @returns {void}\n */\nexport const setGrpcResponseMessage = (\n body: any,\n options: { mask: boolean } = { mask: true },\n) => {\n const span = trace.getSpan(context.active())\n if (!span) return\n\n if (options?.mask) {\n body = mask(sensitiveFields)(body, span)\n }\n\n span.setAttribute(ATTR_MULTIPLAYER_GRPC_RESPONSE_MESSAGE, body)\n}\n"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@multiplayer-app/session-recorder-common",
3
- "version": "1.0.0",
3
+ "version": "1.0.1-alpha.1",
4
4
  "description": "Multiplayer Fullstack Session Recorder - opentelemetry",
5
5
  "author": {
6
6
  "name": "Multiplayer Software, Inc.",
@@ -38,9 +38,15 @@
38
38
  },
39
39
  "dependencies": {
40
40
  "@opentelemetry/core": "^1.29.0",
41
- "@opentelemetry/otlp-exporter-base": "^0.56.0",
42
- "@opentelemetry/otlp-transformer": "^0.56.0",
43
- "@opentelemetry/sdk-trace-base": "^1.29.0",
41
+ "@opentelemetry/exporter-logs-otlp-http": "^0.203.0",
42
+ "@opentelemetry/exporter-logs-otlp-proto": "^0.203.0",
43
+ "@opentelemetry/exporter-trace-otlp-http": "^0.203.0",
44
+ "@opentelemetry/exporter-trace-otlp-proto": "^0.203.0",
45
+ "@opentelemetry/otlp-exporter-base": "^0.203.0",
46
+ "@opentelemetry/otlp-transformer": "^0.203.0",
47
+ "@opentelemetry/resources": "^2.0.1",
48
+ "@opentelemetry/sdk-trace-base": "^2.0.1",
49
+ "@opentelemetry/semantic-conventions": "^1.36.0",
44
50
  "to-json-schema": "^0.2.5"
45
51
  },
46
52
  "devDependencies": {
@@ -1,30 +1,20 @@
1
- import {
2
- RandomIdGenerator,
3
- SamplingDecision,
4
- } from '@opentelemetry/sdk-trace-base'
1
+ import { RandomIdGenerator } from '@opentelemetry/sdk-trace-base'
5
2
  import { SessionType } from './type'
6
- import {
7
- SessionRecorderTraceIdRatioBasedSampler,
8
- } from './SessionRecorderTraceIdRatioBasedSampler'
9
3
  import {
10
4
  MULTIPLAYER_TRACE_DEBUG_PREFIX,
11
- MULTIPLAYER_TRACE_DOC_PREFIX,
12
5
  MULTIPLAYER_TRACE_CONTINUOUS_DEBUG_PREFIX,
13
- } from './constants.base'
6
+ } from './constants/constants.base'
14
7
  import { getIdGenerator } from './sdk'
15
8
 
16
9
  export class SessionRecorderIdGenerator extends RandomIdGenerator {
17
10
  sessionShortId: string
18
11
  sessionType: SessionType
19
- docSpanSampler: SessionRecorderTraceIdRatioBasedSampler
20
12
 
21
13
  generateLongId: () => string
22
14
 
23
- constructor({ autoDocTracesRatio = 0 } = {}) {
15
+ constructor() {
24
16
  super()
25
17
 
26
- this.docSpanSampler = new SessionRecorderTraceIdRatioBasedSampler(autoDocTracesRatio)
27
-
28
18
  this.generateLongId = getIdGenerator(16)
29
19
  this.sessionShortId = ''
30
20
  this.sessionType = SessionType.PLAIN
@@ -47,8 +37,6 @@ export class SessionRecorderIdGenerator extends RandomIdGenerator {
47
37
  const sessionTraceId = `${prefix}${traceId.substring(prefix.length, traceId.length)}`
48
38
 
49
39
  return sessionTraceId
50
- } else if (this._isDocTrace(traceId)) {
51
- return `${MULTIPLAYER_TRACE_DOC_PREFIX}${traceId.slice(MULTIPLAYER_TRACE_DOC_PREFIX.length, traceId.length)}`
52
40
  }
53
41
 
54
42
  return traceId
@@ -62,11 +50,4 @@ export class SessionRecorderIdGenerator extends RandomIdGenerator {
62
50
  this.sessionShortId = sessionShortId
63
51
  this.sessionType = sessionType
64
52
  }
65
-
66
- _isDocTrace(traceId: string) {
67
- return this.docSpanSampler.shouldSample(
68
- undefined,
69
- traceId,
70
- ).decision === SamplingDecision.RECORD_AND_SAMPLED
71
- }
72
53
  }
@@ -7,7 +7,7 @@ import {
7
7
  import {
8
8
  MULTIPLAYER_TRACE_DEBUG_PREFIX,
9
9
  MULTIPLAYER_TRACE_CONTINUOUS_DEBUG_PREFIX,
10
- } from './constants.base'
10
+ } from './constants/constants.base'
11
11
 
12
12
  export class SessionRecorderTraceIdRatioBasedSampler implements Sampler {
13
13
  private _upperBound: number
@@ -1,3 +1,6 @@
1
+ /**
2
+ * @deprecated
3
+ */
1
4
  export const MULTIPLAYER_TRACE_DOC_PREFIX = 'd0cd0c'
2
5
 
3
6
  export const MULTIPLAYER_TRACE_DEBUG_PREFIX = 'debdeb'
@@ -6,10 +9,26 @@ export const MULTIPLAYER_TRACE_CONTINUOUS_DEBUG_PREFIX = 'cdbcdb'
6
9
 
7
10
  export const MULTIPLAYER_TRACE_DEBUG_SESSION_SHORT_ID_LENGTH = 16
8
11
 
12
+ /**
13
+ * @deprecated Use MULTIPLAYER_OTEL_DEFAULT_TRACES_EXPORTER_HTTP_URL instead
14
+ */
9
15
  export const MULTIPLAYER_OTEL_DEFAULT_TRACES_EXPORTER_URL = 'https://api.multiplayer.app/v1/traces'
10
16
 
17
+ /**
18
+ * @deprecated Use MULTIPLAYER_OTEL_DEFAULT_LOGS_EXPORTER_HTTP_URL instead
19
+ */
11
20
  export const MULTIPLAYER_OTEL_DEFAULT_LOGS_EXPORTER_URL = 'https://api.multiplayer.app/v1/logs'
12
21
 
22
+ export const MULTIPLAYER_OTEL_DEFAULT_TRACES_EXPORTER_HTTP_URL = 'https://otlp.multiplayer.app/v1/traces'
23
+
24
+ export const MULTIPLAYER_OTEL_DEFAULT_LOGS_EXPORTER_HTTP_URL = 'https://otlp.multiplayer.app/v1/logs'
25
+
26
+ export const MULTIPLAYER_OTEL_DEFAULT_TRACES_EXPORTER_GRPC_URL = 'https://otlp.multiplayer.app:4317/v1/traces'
27
+
28
+ export const MULTIPLAYER_OTEL_DEFAULT_LOGS_EXPORTER_GRPC_URL = 'https://otlp.multiplayer.app:4317/v1/logs'
29
+
30
+ export const MULTIPLAYER_BASE_API_URL = 'https://api.multiplayer.app'
31
+
13
32
  export const MULTIPLAYER_ATTRIBUTE_PREFIX = 'multiplayer.'
14
33
 
15
34
  export const ATTR_MULTIPLAYER_WORKSPACE_ID = 'multiplayer.workspace.id'
@@ -0,0 +1,212 @@
1
+ import { ReadableSpan, SpanExporter } from '@opentelemetry/sdk-trace-base'
2
+ import {
3
+ OTLPExporterConfigBase,
4
+ OTLPExporterBase,
5
+ } from '@opentelemetry/otlp-exporter-base'
6
+ import {
7
+ createLegacyOtlpBrowserExportDelegate,
8
+ } from '@opentelemetry/otlp-exporter-base/browser-http'
9
+ import {
10
+ MULTIPLAYER_OTEL_DEFAULT_TRACES_EXPORTER_HTTP_URL,
11
+ MULTIPLAYER_TRACE_DEBUG_PREFIX,
12
+ MULTIPLAYER_TRACE_CONTINUOUS_DEBUG_PREFIX,
13
+ } from '../constants/constants.base'
14
+
15
+ export interface SessionRecorderBrowserTraceExporterConfig
16
+ extends OTLPExporterConfigBase {
17
+ /** API key for authentication. Required. */
18
+ apiKey: string
19
+ /** Whether to use postMessage fallback for cross-origin requests */
20
+ usePostMessageFallback?: boolean
21
+ /** PostMessage type identifier */
22
+ postMessageType?: string
23
+ /** PostMessage target origin */
24
+ postMessageTargetOrigin?: string
25
+ }
26
+
27
+ /**
28
+ * Browser-specific trace exporter for Session Recorder
29
+ * Exports traces via HTTP to Multiplayer's OTLP endpoint with browser-specific optimizations
30
+ * Only exports spans with trace IDs starting with Multiplayer prefixes
31
+ */
32
+ export class SessionRecorderBrowserTraceExporter
33
+ extends OTLPExporterBase<ReadableSpan[]>
34
+ implements SpanExporter {
35
+
36
+ private usePostMessage: boolean = false
37
+ private readonly postMessageType: string
38
+ private readonly postMessageTargetOrigin: string
39
+ private readonly config: SessionRecorderBrowserTraceExporterConfig
40
+
41
+ constructor(config: SessionRecorderBrowserTraceExporterConfig) {
42
+ const {
43
+ url = MULTIPLAYER_OTEL_DEFAULT_TRACES_EXPORTER_HTTP_URL,
44
+ apiKey,
45
+ headers = {},
46
+ postMessageType = 'MULTIPLAYER_SESSION_DEBUGGER_LIB',
47
+ postMessageTargetOrigin = '*',
48
+ ...restConfig
49
+ } = config
50
+
51
+ const _config = {
52
+ ...restConfig,
53
+ url,
54
+ headers: {
55
+ 'Content-Type': 'application/x-protobuf',
56
+ 'User-Agent': '@multiplayer-app/session-recorder-common/1.0.0',
57
+ 'Authorization': apiKey,
58
+ ...headers,
59
+ },
60
+ }
61
+
62
+ super(
63
+ createLegacyOtlpBrowserExportDelegate(
64
+ _config,
65
+ {
66
+ serializeRequest: (spans: ReadableSpan[]) => {
67
+ // Create a simple trace service request structure
68
+ const request = {
69
+ resourceSpans: spans.map(span => ({
70
+ resource: {
71
+ attributes: Object.entries(span.resource.attributes).map(([key, value]) => ({
72
+ key,
73
+ value: { stringValue: String(value) },
74
+ })),
75
+ },
76
+ scopeSpans: [{
77
+ spans: [{
78
+ traceId: span.spanContext().traceId,
79
+ spanId: span.spanContext().spanId,
80
+ parentSpanId: span.spanContext().spanId, // Using spanId as fallback
81
+ name: span.name,
82
+ kind: span.kind,
83
+ startTimeUnixNano: span.startTime[0] * 1e9 + span.startTime[1],
84
+ endTimeUnixNano: span.endTime ? span.endTime[0] * 1e9 + span.endTime[1] : undefined,
85
+ attributes: Object.entries(span.attributes).map(([key, value]) => ({
86
+ key,
87
+ value: { stringValue: String(value) },
88
+ })),
89
+ events: span.events.map(event => ({
90
+ timeUnixNano: event.time[0] * 1e9 + event.time[1],
91
+ name: event.name,
92
+ attributes: Object.entries(event.attributes || {}).map(([key, value]) => ({
93
+ key,
94
+ value: { stringValue: String(value) },
95
+ })),
96
+ })),
97
+ links: span.links.map(link => ({
98
+ traceId: link.context.traceId,
99
+ spanId: link.context.spanId,
100
+ attributes: Object.entries(link.attributes || {}).map(([key, value]) => ({
101
+ key,
102
+ value: { stringValue: String(value) },
103
+ })),
104
+ })),
105
+ status: {
106
+ code: span.status.code,
107
+ message: span.status.message || '',
108
+ },
109
+ }],
110
+ }],
111
+ })),
112
+ }
113
+
114
+ const encoder = new TextEncoder()
115
+ return encoder.encode(JSON.stringify(request))
116
+ },
117
+ deserializeResponse: (arg: Uint8Array) => {
118
+ const decoder = new TextDecoder()
119
+ return JSON.parse(decoder.decode(arg))
120
+ },
121
+ },
122
+ 'v1/traces',
123
+ { 'Content-Type': 'application/json' },
124
+ ),
125
+ )
126
+
127
+ this.config = config
128
+ this.postMessageType = postMessageType
129
+ this.postMessageTargetOrigin = postMessageTargetOrigin
130
+ }
131
+
132
+ override export(spans: ReadableSpan[], resultCallback: (result: { code: number }) => void): void {
133
+ // Filter spans to only include those with Multiplayer trace prefixes
134
+ const filteredSpans = spans.filter(span => {
135
+ const traceId = span.spanContext().traceId
136
+ return traceId.startsWith(MULTIPLAYER_TRACE_DEBUG_PREFIX) ||
137
+ traceId.startsWith(MULTIPLAYER_TRACE_CONTINUOUS_DEBUG_PREFIX)
138
+ })
139
+
140
+ // Only proceed if there are filtered spans
141
+ if (filteredSpans.length === 0) {
142
+ resultCallback({ code: 0 })
143
+ return
144
+ }
145
+
146
+ if (this.usePostMessage) {
147
+ this.exportViaPostMessage(filteredSpans, resultCallback)
148
+ return
149
+ }
150
+
151
+ super.export(filteredSpans, (result) => {
152
+ if (result.code === 0) {
153
+ resultCallback(result)
154
+ } else if (this.config.usePostMessageFallback) {
155
+ this.usePostMessage = true
156
+ this.exportViaPostMessage(filteredSpans, resultCallback)
157
+ } else {
158
+ resultCallback(result)
159
+ }
160
+ })
161
+ }
162
+
163
+ override shutdown(): Promise<void> {
164
+ return Promise.resolve()
165
+ }
166
+
167
+ private exportViaPostMessage(spans: ReadableSpan[], resultCallback: (result: { code: number }) => void): void {
168
+ if (typeof window === 'undefined') {
169
+ resultCallback({ code: 1 })
170
+ return
171
+ }
172
+
173
+ try {
174
+ window.postMessage(
175
+ {
176
+ action: 'traces',
177
+ type: this.postMessageType,
178
+ payload: spans.map(span => this._serializeSpan(span)),
179
+ },
180
+ this.postMessageTargetOrigin,
181
+ )
182
+ resultCallback({ code: 0 })
183
+ } catch (e) {
184
+ resultCallback({ code: 1 })
185
+ }
186
+ }
187
+
188
+ private _serializeSpan(span: ReadableSpan): any {
189
+ const spanContext = span.spanContext()
190
+ return {
191
+ _spanContext: spanContext,
192
+ name: span.name,
193
+ kind: span.kind,
194
+ links: span.links,
195
+ ended: span.ended,
196
+ events: span.events,
197
+ status: span.status,
198
+ endTime: span.endTime,
199
+ startTime: span.startTime,
200
+ duration: span.duration,
201
+ attributes: span.attributes,
202
+ parentSpanId: spanContext.spanId, // Using spanId as parentSpanId is not available in newer versions
203
+ droppedAttributesCount: span.droppedAttributesCount,
204
+ droppedEventsCount: span.droppedEventsCount,
205
+ droppedLinksCount: span.droppedLinksCount,
206
+ resource: {
207
+ attributes: span.resource.attributes,
208
+ asyncAttributesPending: span.resource.asyncAttributesPending,
209
+ },
210
+ }
211
+ }
212
+ }
@@ -0,0 +1,52 @@
1
+ import { OTLPLogExporter } from '@opentelemetry/exporter-logs-otlp-proto'
2
+ import {
3
+ MULTIPLAYER_OTEL_DEFAULT_LOGS_EXPORTER_GRPC_URL,
4
+ MULTIPLAYER_TRACE_DEBUG_PREFIX,
5
+ MULTIPLAYER_TRACE_CONTINUOUS_DEBUG_PREFIX,
6
+ } from '../constants/constants.base'
7
+
8
+ export interface SessionRecorderGrpcLogsExporterConfig {
9
+ /** The URL to send logs to. Defaults to MULTIPLAYER_OTEL_DEFAULT_LOGS_EXPORTER_GRPC_URL */
10
+ url?: string
11
+ /** API key for authentication. Required. */
12
+ apiKey: string
13
+ /** Timeout for gRPC requests in milliseconds. Defaults to 30000 */
14
+ timeoutMillis?: number
15
+ }
16
+
17
+ /**
18
+ * gRPC logs exporter for Session Recorder
19
+ * Exports logs via gRPC to Multiplayer's OTLP endpoint
20
+ * Only exports logs with trace IDs starting with Multiplayer prefixes
21
+ * Note: API key authentication may need to be handled at the gRPC client level
22
+ */
23
+ export class SessionRecorderGrpcLogsExporter extends OTLPLogExporter {
24
+ constructor(config: SessionRecorderGrpcLogsExporterConfig) {
25
+ const {
26
+ url = MULTIPLAYER_OTEL_DEFAULT_LOGS_EXPORTER_GRPC_URL,
27
+ timeoutMillis = 30000,
28
+ } = config
29
+
30
+ super({
31
+ url,
32
+ timeoutMillis,
33
+ })
34
+ }
35
+
36
+ override export(logs: any[], resultCallback: (result: { code: number }) => void): void {
37
+ // Filter logs to only include those with Multiplayer trace prefixes
38
+ const filteredLogs = logs.filter(log => {
39
+ const traceId = log.spanContext?.traceId || log.traceId
40
+ return traceId && (traceId.startsWith(MULTIPLAYER_TRACE_DEBUG_PREFIX) ||
41
+ traceId.startsWith(MULTIPLAYER_TRACE_CONTINUOUS_DEBUG_PREFIX))
42
+ })
43
+
44
+ // Only proceed if there are filtered logs
45
+ if (filteredLogs.length === 0) {
46
+ resultCallback({ code: 0 })
47
+ return
48
+ }
49
+
50
+ super.export(filteredLogs, resultCallback)
51
+ }
52
+ }
@@ -0,0 +1,50 @@
1
+ import { OTLPTraceExporter } from '@opentelemetry/exporter-trace-otlp-proto'
2
+ import {
3
+ MULTIPLAYER_OTEL_DEFAULT_TRACES_EXPORTER_GRPC_URL,
4
+ MULTIPLAYER_TRACE_DEBUG_PREFIX,
5
+ MULTIPLAYER_TRACE_CONTINUOUS_DEBUG_PREFIX,
6
+ } from '../constants/constants.base'
7
+
8
+ export interface SessionRecorderGrpcTraceExporterConfig {
9
+ /** The URL to send traces to. Defaults to MULTIPLAYER_OTEL_DEFAULT_TRACES_EXPORTER_GRPC_URL */
10
+ url?: string
11
+ /** API key for authentication. Required. */
12
+ apiKey: string
13
+ /** Timeout for gRPC requests in milliseconds. Defaults to 30000 */
14
+ timeoutMillis?: number
15
+ }
16
+
17
+ /**
18
+ * gRPC trace exporter for Session Recorder
19
+ * Exports traces via gRPC to Multiplayer's OTLP endpoint
20
+ * Only exports spans with trace IDs starting with Multiplayer prefixes
21
+ * Note: API key authentication may need to be handled at the gRPC client level
22
+ */
23
+ export class SessionRecorderGrpcTraceExporter extends OTLPTraceExporter {
24
+ constructor(config: SessionRecorderGrpcTraceExporterConfig) {
25
+ const {
26
+ url = MULTIPLAYER_OTEL_DEFAULT_TRACES_EXPORTER_GRPC_URL,
27
+ timeoutMillis = 30000,
28
+ } = config
29
+
30
+ super({
31
+ url,
32
+ timeoutMillis,
33
+ })
34
+ }
35
+
36
+ override export(spans: any[], resultCallback: (result: { code: number }) => void): void {
37
+ const filteredSpans = spans.filter(span => {
38
+ const traceId = span.spanContext().traceId
39
+ return traceId.startsWith(MULTIPLAYER_TRACE_DEBUG_PREFIX) ||
40
+ traceId.startsWith(MULTIPLAYER_TRACE_CONTINUOUS_DEBUG_PREFIX)
41
+ })
42
+
43
+ if (filteredSpans.length === 0) {
44
+ resultCallback({ code: 0 })
45
+ return
46
+ }
47
+
48
+ super.export(filteredSpans, resultCallback)
49
+ }
50
+ }
@@ -0,0 +1,58 @@
1
+ import { OTLPLogExporter } from '@opentelemetry/exporter-logs-otlp-http'
2
+ import {
3
+ MULTIPLAYER_OTEL_DEFAULT_LOGS_EXPORTER_HTTP_URL,
4
+ MULTIPLAYER_TRACE_DEBUG_PREFIX,
5
+ MULTIPLAYER_TRACE_CONTINUOUS_DEBUG_PREFIX,
6
+ } from '../constants/constants.base'
7
+
8
+ export interface SessionRecorderHttpLogsExporterConfig {
9
+ /** The URL to send logs to. Defaults to MULTIPLAYER_OTEL_DEFAULT_LOGS_EXPORTER_HTTP_URL */
10
+ url?: string
11
+ /** API key for authentication. Required. */
12
+ apiKey: string
13
+ /** Timeout for HTTP requests in milliseconds. Defaults to 30000 */
14
+ timeoutMillis?: number
15
+ /** Whether to keep the connection alive. Defaults to true */
16
+ keepAlive?: boolean
17
+ /** Maximum number of concurrent requests. Defaults to 20 */
18
+ concurrencyLimit?: number
19
+ }
20
+
21
+ export class SessionRecorderHttpLogsExporter extends OTLPLogExporter {
22
+ constructor(config: SessionRecorderHttpLogsExporterConfig) {
23
+ const {
24
+ url = MULTIPLAYER_OTEL_DEFAULT_LOGS_EXPORTER_HTTP_URL,
25
+ apiKey,
26
+ timeoutMillis = 30000,
27
+ keepAlive = true,
28
+ concurrencyLimit = 20,
29
+ } = config
30
+
31
+ super({
32
+ url,
33
+ headers: {
34
+ 'Content-Type': 'application/x-protobuf',
35
+ 'User-Agent': '@multiplayer-app/session-recorder-common/1.0.0',
36
+ 'authorization': apiKey,
37
+ },
38
+ timeoutMillis,
39
+ keepAlive,
40
+ concurrencyLimit,
41
+ })
42
+ }
43
+
44
+ override export(logs: any[], resultCallback: (result: { code: number }) => void): void {
45
+ const filteredLogs = logs.filter(log => {
46
+ const traceId = log.spanContext?.traceId || log.traceId
47
+ return traceId && (traceId.startsWith(MULTIPLAYER_TRACE_DEBUG_PREFIX) ||
48
+ traceId.startsWith(MULTIPLAYER_TRACE_CONTINUOUS_DEBUG_PREFIX))
49
+ })
50
+
51
+ if (filteredLogs.length === 0) {
52
+ resultCallback({ code: 0 })
53
+ return
54
+ }
55
+
56
+ super.export(filteredLogs, resultCallback)
57
+ }
58
+ }