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

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 (319) hide show
  1. package/dist/esm/SessionRecorderIdGenerator.js +1 -1
  2. package/dist/esm/SessionRecorderIdGenerator.js.map +1 -1
  3. package/dist/esm/SessionRecorderJsonTraceSerializer.d.ts.map +1 -1
  4. package/dist/esm/SessionRecorderJsonTraceSerializer.js +75 -7
  5. package/dist/esm/SessionRecorderJsonTraceSerializer.js.map +1 -1
  6. package/dist/esm/SessionRecorderTraceIdRatioBasedSampler.js +1 -1
  7. package/dist/esm/SessionRecorderTraceIdRatioBasedSampler.js.map +1 -1
  8. package/dist/esm/{constants.base.d.ts → constants/constants.base.d.ts} +14 -0
  9. package/dist/esm/constants/constants.base.d.ts.map +1 -0
  10. package/dist/esm/{constants.base.js → constants/constants.base.js} +14 -0
  11. package/dist/esm/constants/constants.base.js.map +1 -0
  12. package/dist/esm/constants/constants.browser.d.ts.map +1 -0
  13. package/dist/esm/constants/constants.browser.js.map +1 -0
  14. package/dist/esm/constants/constants.node.d.ts.map +1 -0
  15. package/dist/esm/constants/constants.node.js.map +1 -0
  16. package/dist/esm/exporters/SessionRecorderBrowserTraceExporter.d.ts +31 -0
  17. package/dist/esm/exporters/SessionRecorderBrowserTraceExporter.d.ts.map +1 -0
  18. package/dist/esm/exporters/SessionRecorderBrowserTraceExporter.js +220 -0
  19. package/dist/esm/exporters/SessionRecorderBrowserTraceExporter.js.map +1 -0
  20. package/dist/esm/exporters/SessionRecorderGrpcLogsExporter.d.ts +22 -0
  21. package/dist/esm/exporters/SessionRecorderGrpcLogsExporter.d.ts.map +1 -0
  22. package/dist/esm/exporters/SessionRecorderGrpcLogsExporter.js +51 -0
  23. package/dist/esm/exporters/SessionRecorderGrpcLogsExporter.js.map +1 -0
  24. package/dist/esm/exporters/SessionRecorderGrpcTraceExporter.d.ts +22 -0
  25. package/dist/esm/exporters/SessionRecorderGrpcTraceExporter.d.ts.map +1 -0
  26. package/dist/esm/exporters/SessionRecorderGrpcTraceExporter.js +48 -0
  27. package/dist/esm/exporters/SessionRecorderGrpcTraceExporter.js.map +1 -0
  28. package/dist/esm/exporters/SessionRecorderHttpLogsExporter.d.ts +20 -0
  29. package/dist/esm/exporters/SessionRecorderHttpLogsExporter.d.ts.map +1 -0
  30. package/dist/esm/exporters/SessionRecorderHttpLogsExporter.js +50 -0
  31. package/dist/esm/exporters/SessionRecorderHttpLogsExporter.js.map +1 -0
  32. package/dist/esm/exporters/SessionRecorderHttpTraceExporter.d.ts +25 -0
  33. package/dist/esm/exporters/SessionRecorderHttpTraceExporter.d.ts.map +1 -0
  34. package/dist/esm/exporters/SessionRecorderHttpTraceExporter.js +56 -0
  35. package/dist/esm/exporters/SessionRecorderHttpTraceExporter.js.map +1 -0
  36. package/dist/esm/exporters/SessionRecorderLogsExporterWrapper.d.ts +13 -0
  37. package/dist/esm/exporters/SessionRecorderLogsExporterWrapper.d.ts.map +1 -0
  38. package/dist/esm/exporters/SessionRecorderLogsExporterWrapper.js +25 -0
  39. package/dist/esm/exporters/SessionRecorderLogsExporterWrapper.js.map +1 -0
  40. package/dist/esm/exporters/SessionRecorderTraceExporterWrapper.d.ts +13 -0
  41. package/dist/esm/exporters/SessionRecorderTraceExporterWrapper.d.ts.map +1 -0
  42. package/dist/esm/exporters/SessionRecorderTraceExporterWrapper.js +24 -0
  43. package/dist/esm/exporters/SessionRecorderTraceExporterWrapper.js.map +1 -0
  44. package/dist/esm/exporters/index-browser.d.ts +2 -0
  45. package/dist/esm/exporters/index-browser.d.ts.map +1 -0
  46. package/dist/esm/exporters/index-browser.js +2 -0
  47. package/dist/esm/exporters/index-browser.js.map +1 -0
  48. package/dist/esm/exporters/index-node.d.ts +7 -0
  49. package/dist/esm/exporters/index-node.d.ts.map +1 -0
  50. package/dist/esm/exporters/index-node.js +7 -0
  51. package/dist/esm/exporters/index-node.js.map +1 -0
  52. package/dist/esm/exporters/index.d.ts +8 -0
  53. package/dist/esm/exporters/index.d.ts.map +1 -0
  54. package/dist/esm/exporters/index.js +8 -0
  55. package/dist/esm/exporters/index.js.map +1 -0
  56. package/dist/esm/index-browser.d.ts +2 -2
  57. package/dist/esm/index-browser.d.ts.map +1 -1
  58. package/dist/esm/index-browser.js +2 -2
  59. package/dist/esm/index-browser.js.map +1 -1
  60. package/dist/esm/index-node.d.ts +3 -2
  61. package/dist/esm/index-node.d.ts.map +1 -1
  62. package/dist/esm/index-node.js +3 -2
  63. package/dist/esm/index-node.js.map +1 -1
  64. package/dist/esm/index.d.ts +3 -4
  65. package/dist/esm/index.d.ts.map +1 -1
  66. package/dist/esm/index.js +3 -4
  67. package/dist/esm/index.js.map +1 -1
  68. package/dist/esm/instrumentations/SessionRecorderHttpInstrumentationHooksNode.d.ts.map +1 -0
  69. package/dist/esm/{SessionRecorderHttpInstrumentationHooksNode.js → instrumentations/SessionRecorderHttpInstrumentationHooksNode.js} +3 -3
  70. package/dist/esm/instrumentations/SessionRecorderHttpInstrumentationHooksNode.js.map +1 -0
  71. package/dist/esm/instrumentations/index-node.d.ts +2 -0
  72. package/dist/esm/instrumentations/index-node.d.ts.map +1 -0
  73. package/dist/esm/instrumentations/index-node.js +2 -0
  74. package/dist/esm/instrumentations/index-node.js.map +1 -0
  75. package/dist/esm/sdk/mask.js +1 -1
  76. package/dist/esm/sdk/mask.js.map +1 -1
  77. package/dist/esm/sdk/save-continuous-deb-session.js +1 -1
  78. package/dist/esm/sdk/save-continuous-deb-session.js.map +1 -1
  79. package/dist/esm/sdk/set-attribute.js +1 -1
  80. package/dist/esm/sdk/set-attribute.js.map +1 -1
  81. package/dist/esm/tsconfig.esm.tsbuildinfo +1 -1
  82. package/dist/esnext/SessionRecorderIdGenerator.js +1 -1
  83. package/dist/esnext/SessionRecorderIdGenerator.js.map +1 -1
  84. package/dist/esnext/SessionRecorderJsonTraceSerializer.d.ts.map +1 -1
  85. package/dist/esnext/SessionRecorderJsonTraceSerializer.js +47 -7
  86. package/dist/esnext/SessionRecorderJsonTraceSerializer.js.map +1 -1
  87. package/dist/esnext/SessionRecorderTraceIdRatioBasedSampler.js +1 -1
  88. package/dist/esnext/SessionRecorderTraceIdRatioBasedSampler.js.map +1 -1
  89. package/dist/{src → esnext/constants}/constants.base.d.ts +14 -0
  90. package/dist/esnext/constants/constants.base.d.ts.map +1 -0
  91. package/dist/esnext/{constants.base.js → constants/constants.base.js} +14 -0
  92. package/dist/esnext/constants/constants.base.js.map +1 -0
  93. package/dist/esnext/constants/constants.browser.d.ts.map +1 -0
  94. package/dist/esnext/constants/constants.browser.js.map +1 -0
  95. package/dist/esnext/constants/constants.node.d.ts.map +1 -0
  96. package/dist/esnext/constants/constants.node.js.map +1 -0
  97. package/dist/esnext/exporters/SessionRecorderBrowserTraceExporter.d.ts +31 -0
  98. package/dist/esnext/exporters/SessionRecorderBrowserTraceExporter.d.ts.map +1 -0
  99. package/dist/esnext/exporters/SessionRecorderBrowserTraceExporter.js +159 -0
  100. package/dist/esnext/exporters/SessionRecorderBrowserTraceExporter.js.map +1 -0
  101. package/dist/esnext/exporters/SessionRecorderGrpcLogsExporter.d.ts +22 -0
  102. package/dist/esnext/exporters/SessionRecorderGrpcLogsExporter.d.ts.map +1 -0
  103. package/dist/esnext/exporters/SessionRecorderGrpcLogsExporter.js +33 -0
  104. package/dist/esnext/exporters/SessionRecorderGrpcLogsExporter.js.map +1 -0
  105. package/dist/esnext/exporters/SessionRecorderGrpcTraceExporter.d.ts +22 -0
  106. package/dist/esnext/exporters/SessionRecorderGrpcTraceExporter.d.ts.map +1 -0
  107. package/dist/esnext/exporters/SessionRecorderGrpcTraceExporter.js +30 -0
  108. package/dist/esnext/exporters/SessionRecorderGrpcTraceExporter.js.map +1 -0
  109. package/dist/esnext/exporters/SessionRecorderHttpLogsExporter.d.ts +20 -0
  110. package/dist/esnext/exporters/SessionRecorderHttpLogsExporter.d.ts.map +1 -0
  111. package/dist/esnext/exporters/SessionRecorderHttpLogsExporter.js +32 -0
  112. package/dist/esnext/exporters/SessionRecorderHttpLogsExporter.js.map +1 -0
  113. package/dist/esnext/exporters/SessionRecorderHttpTraceExporter.d.ts +25 -0
  114. package/dist/esnext/exporters/SessionRecorderHttpTraceExporter.d.ts.map +1 -0
  115. package/dist/esnext/exporters/SessionRecorderHttpTraceExporter.js +38 -0
  116. package/dist/esnext/exporters/SessionRecorderHttpTraceExporter.js.map +1 -0
  117. package/dist/esnext/exporters/SessionRecorderLogsExporterWrapper.d.ts +13 -0
  118. package/dist/esnext/exporters/SessionRecorderLogsExporterWrapper.d.ts.map +1 -0
  119. package/dist/esnext/exporters/SessionRecorderLogsExporterWrapper.js +23 -0
  120. package/dist/esnext/exporters/SessionRecorderLogsExporterWrapper.js.map +1 -0
  121. package/dist/esnext/exporters/SessionRecorderTraceExporterWrapper.d.ts +13 -0
  122. package/dist/esnext/exporters/SessionRecorderTraceExporterWrapper.d.ts.map +1 -0
  123. package/dist/esnext/exporters/SessionRecorderTraceExporterWrapper.js +22 -0
  124. package/dist/esnext/exporters/SessionRecorderTraceExporterWrapper.js.map +1 -0
  125. package/dist/esnext/exporters/index-browser.d.ts +2 -0
  126. package/dist/esnext/exporters/index-browser.d.ts.map +1 -0
  127. package/dist/esnext/exporters/index-browser.js +2 -0
  128. package/dist/esnext/exporters/index-browser.js.map +1 -0
  129. package/dist/esnext/exporters/index-node.d.ts +7 -0
  130. package/dist/esnext/exporters/index-node.d.ts.map +1 -0
  131. package/dist/esnext/exporters/index-node.js +7 -0
  132. package/dist/esnext/exporters/index-node.js.map +1 -0
  133. package/dist/esnext/exporters/index.d.ts +8 -0
  134. package/dist/esnext/exporters/index.d.ts.map +1 -0
  135. package/dist/esnext/exporters/index.js +8 -0
  136. package/dist/esnext/exporters/index.js.map +1 -0
  137. package/dist/esnext/index-browser.d.ts +2 -2
  138. package/dist/esnext/index-browser.d.ts.map +1 -1
  139. package/dist/esnext/index-browser.js +2 -2
  140. package/dist/esnext/index-browser.js.map +1 -1
  141. package/dist/esnext/index-node.d.ts +3 -2
  142. package/dist/esnext/index-node.d.ts.map +1 -1
  143. package/dist/esnext/index-node.js +3 -2
  144. package/dist/esnext/index-node.js.map +1 -1
  145. package/dist/esnext/index.d.ts +3 -4
  146. package/dist/esnext/index.d.ts.map +1 -1
  147. package/dist/esnext/index.js +3 -4
  148. package/dist/esnext/index.js.map +1 -1
  149. package/dist/esnext/instrumentations/SessionRecorderHttpInstrumentationHooksNode.d.ts.map +1 -0
  150. package/dist/esnext/{SessionRecorderHttpInstrumentationHooksNode.js → instrumentations/SessionRecorderHttpInstrumentationHooksNode.js} +3 -3
  151. package/dist/esnext/instrumentations/SessionRecorderHttpInstrumentationHooksNode.js.map +1 -0
  152. package/dist/esnext/instrumentations/index-node.d.ts +2 -0
  153. package/dist/esnext/instrumentations/index-node.d.ts.map +1 -0
  154. package/dist/esnext/instrumentations/index-node.js +2 -0
  155. package/dist/esnext/instrumentations/index-node.js.map +1 -0
  156. package/dist/esnext/sdk/mask.js +1 -1
  157. package/dist/esnext/sdk/mask.js.map +1 -1
  158. package/dist/esnext/sdk/save-continuous-deb-session.js +1 -1
  159. package/dist/esnext/sdk/save-continuous-deb-session.js.map +1 -1
  160. package/dist/esnext/sdk/set-attribute.js +1 -1
  161. package/dist/esnext/sdk/set-attribute.js.map +1 -1
  162. package/dist/esnext/tsconfig.esnext.tsbuildinfo +1 -1
  163. package/dist/src/SessionRecorderIdGenerator.js +1 -1
  164. package/dist/src/SessionRecorderIdGenerator.js.map +1 -1
  165. package/dist/src/SessionRecorderJsonTraceSerializer.d.ts.map +1 -1
  166. package/dist/src/SessionRecorderJsonTraceSerializer.js +47 -7
  167. package/dist/src/SessionRecorderJsonTraceSerializer.js.map +1 -1
  168. package/dist/src/SessionRecorderTraceIdRatioBasedSampler.js +1 -1
  169. package/dist/src/SessionRecorderTraceIdRatioBasedSampler.js.map +1 -1
  170. package/dist/{esnext → src/constants}/constants.base.d.ts +14 -0
  171. package/dist/src/constants/constants.base.d.ts.map +1 -0
  172. package/dist/src/{constants.base.js → constants/constants.base.js} +15 -1
  173. package/dist/src/constants/constants.base.js.map +1 -0
  174. package/dist/src/constants/constants.browser.d.ts.map +1 -0
  175. package/dist/src/constants/constants.browser.js.map +1 -0
  176. package/dist/src/constants/constants.node.d.ts.map +1 -0
  177. package/dist/src/constants/constants.node.js.map +1 -0
  178. package/dist/src/exporters/SessionRecorderBrowserTraceExporter.d.ts +31 -0
  179. package/dist/src/exporters/SessionRecorderBrowserTraceExporter.d.ts.map +1 -0
  180. package/dist/src/exporters/SessionRecorderBrowserTraceExporter.js +163 -0
  181. package/dist/src/exporters/SessionRecorderBrowserTraceExporter.js.map +1 -0
  182. package/dist/src/exporters/SessionRecorderGrpcLogsExporter.d.ts +22 -0
  183. package/dist/src/exporters/SessionRecorderGrpcLogsExporter.d.ts.map +1 -0
  184. package/dist/src/exporters/SessionRecorderGrpcLogsExporter.js +37 -0
  185. package/dist/src/exporters/SessionRecorderGrpcLogsExporter.js.map +1 -0
  186. package/dist/src/exporters/SessionRecorderGrpcTraceExporter.d.ts +22 -0
  187. package/dist/src/exporters/SessionRecorderGrpcTraceExporter.d.ts.map +1 -0
  188. package/dist/src/exporters/SessionRecorderGrpcTraceExporter.js +34 -0
  189. package/dist/src/exporters/SessionRecorderGrpcTraceExporter.js.map +1 -0
  190. package/dist/src/exporters/SessionRecorderHttpLogsExporter.d.ts +20 -0
  191. package/dist/src/exporters/SessionRecorderHttpLogsExporter.d.ts.map +1 -0
  192. package/dist/src/exporters/SessionRecorderHttpLogsExporter.js +36 -0
  193. package/dist/src/exporters/SessionRecorderHttpLogsExporter.js.map +1 -0
  194. package/dist/src/exporters/SessionRecorderHttpTraceExporter.d.ts +25 -0
  195. package/dist/src/exporters/SessionRecorderHttpTraceExporter.d.ts.map +1 -0
  196. package/dist/src/exporters/SessionRecorderHttpTraceExporter.js +42 -0
  197. package/dist/src/exporters/SessionRecorderHttpTraceExporter.js.map +1 -0
  198. package/dist/src/exporters/SessionRecorderLogsExporterWrapper.d.ts +13 -0
  199. package/dist/src/exporters/SessionRecorderLogsExporterWrapper.d.ts.map +1 -0
  200. package/dist/src/exporters/SessionRecorderLogsExporterWrapper.js +27 -0
  201. package/dist/src/exporters/SessionRecorderLogsExporterWrapper.js.map +1 -0
  202. package/dist/src/exporters/SessionRecorderTraceExporterWrapper.d.ts +13 -0
  203. package/dist/src/exporters/SessionRecorderTraceExporterWrapper.d.ts.map +1 -0
  204. package/dist/src/exporters/SessionRecorderTraceExporterWrapper.js +26 -0
  205. package/dist/src/exporters/SessionRecorderTraceExporterWrapper.js.map +1 -0
  206. package/dist/src/exporters/index-browser.d.ts +2 -0
  207. package/dist/src/exporters/index-browser.d.ts.map +1 -0
  208. package/dist/src/exporters/index-browser.js +18 -0
  209. package/dist/src/exporters/index-browser.js.map +1 -0
  210. package/dist/src/exporters/index-node.d.ts +7 -0
  211. package/dist/src/exporters/index-node.d.ts.map +1 -0
  212. package/dist/src/exporters/index-node.js +23 -0
  213. package/dist/src/exporters/index-node.js.map +1 -0
  214. package/dist/src/exporters/index.d.ts +8 -0
  215. package/dist/src/exporters/index.d.ts.map +1 -0
  216. package/dist/src/exporters/index.js +24 -0
  217. package/dist/src/exporters/index.js.map +1 -0
  218. package/dist/src/index-browser.d.ts +2 -2
  219. package/dist/src/index-browser.d.ts.map +1 -1
  220. package/dist/src/index-browser.js +3 -4
  221. package/dist/src/index-browser.js.map +1 -1
  222. package/dist/src/index-node.d.ts +3 -2
  223. package/dist/src/index-node.d.ts.map +1 -1
  224. package/dist/src/index-node.js +3 -2
  225. package/dist/src/index-node.js.map +1 -1
  226. package/dist/src/index.d.ts +3 -4
  227. package/dist/src/index.d.ts.map +1 -1
  228. package/dist/src/index.js +4 -8
  229. package/dist/src/index.js.map +1 -1
  230. package/dist/src/instrumentations/SessionRecorderHttpInstrumentationHooksNode.d.ts.map +1 -0
  231. package/dist/src/{SessionRecorderHttpInstrumentationHooksNode.js → instrumentations/SessionRecorderHttpInstrumentationHooksNode.js} +3 -3
  232. package/dist/src/instrumentations/SessionRecorderHttpInstrumentationHooksNode.js.map +1 -0
  233. package/dist/src/instrumentations/index-node.d.ts +2 -0
  234. package/dist/src/instrumentations/index-node.d.ts.map +1 -0
  235. package/dist/src/instrumentations/index-node.js +18 -0
  236. package/dist/src/instrumentations/index-node.js.map +1 -0
  237. package/dist/src/sdk/mask.js +1 -1
  238. package/dist/src/sdk/mask.js.map +1 -1
  239. package/dist/src/sdk/save-continuous-deb-session.js +1 -1
  240. package/dist/src/sdk/save-continuous-deb-session.js.map +1 -1
  241. package/dist/src/sdk/set-attribute.js +1 -1
  242. package/dist/src/sdk/set-attribute.js.map +1 -1
  243. package/package.json +10 -4
  244. package/src/SessionRecorderIdGenerator.ts +1 -1
  245. package/src/SessionRecorderJsonTraceSerializer.ts +48 -8
  246. package/src/SessionRecorderTraceIdRatioBasedSampler.ts +1 -1
  247. package/src/{constants.base.ts → constants/constants.base.ts} +19 -0
  248. package/src/exporters/SessionRecorderBrowserTraceExporter.ts +212 -0
  249. package/src/exporters/SessionRecorderGrpcLogsExporter.ts +52 -0
  250. package/src/exporters/SessionRecorderGrpcTraceExporter.ts +50 -0
  251. package/src/exporters/SessionRecorderHttpLogsExporter.ts +58 -0
  252. package/src/exporters/SessionRecorderHttpTraceExporter.ts +65 -0
  253. package/src/exporters/SessionRecorderLogsExporterWrapper.ts +36 -0
  254. package/src/exporters/SessionRecorderTraceExporterWrapper.ts +36 -0
  255. package/src/exporters/index-browser.ts +1 -0
  256. package/src/exporters/index-node.ts +6 -0
  257. package/src/exporters/index.ts +7 -0
  258. package/src/index-browser.ts +2 -2
  259. package/src/index-node.ts +3 -2
  260. package/src/index.ts +3 -4
  261. package/src/{SessionRecorderHttpInstrumentationHooksNode.ts → instrumentations/SessionRecorderHttpInstrumentationHooksNode.ts} +3 -3
  262. package/src/instrumentations/index-node.ts +1 -0
  263. package/src/sdk/mask.ts +1 -1
  264. package/src/sdk/save-continuous-deb-session.ts +1 -1
  265. package/src/sdk/set-attribute.ts +1 -1
  266. package/dist/esm/SessionRecorderHttpInstrumentationHooksNode.d.ts.map +0 -1
  267. package/dist/esm/SessionRecorderHttpInstrumentationHooksNode.js.map +0 -1
  268. package/dist/esm/SessionRecorderHttpTraceExporterBrowser.d.ts +0 -26
  269. package/dist/esm/SessionRecorderHttpTraceExporterBrowser.d.ts.map +0 -1
  270. package/dist/esm/SessionRecorderHttpTraceExporterBrowser.js +0 -116
  271. package/dist/esm/SessionRecorderHttpTraceExporterBrowser.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/constants.base.d.ts.map +0 -1
  285. package/dist/esnext/constants.base.js.map +0 -1
  286. package/dist/esnext/constants.browser.d.ts.map +0 -1
  287. package/dist/esnext/constants.browser.js.map +0 -1
  288. package/dist/esnext/constants.node.d.ts.map +0 -1
  289. package/dist/esnext/constants.node.js.map +0 -1
  290. package/dist/src/SessionRecorderHttpInstrumentationHooksNode.d.ts.map +0 -1
  291. package/dist/src/SessionRecorderHttpInstrumentationHooksNode.js.map +0 -1
  292. package/dist/src/SessionRecorderHttpTraceExporterBrowser.d.ts +0 -26
  293. package/dist/src/SessionRecorderHttpTraceExporterBrowser.d.ts.map +0 -1
  294. package/dist/src/SessionRecorderHttpTraceExporterBrowser.js +0 -86
  295. package/dist/src/SessionRecorderHttpTraceExporterBrowser.js.map +0 -1
  296. package/dist/src/constants.base.d.ts.map +0 -1
  297. package/dist/src/constants.base.js.map +0 -1
  298. package/dist/src/constants.browser.d.ts.map +0 -1
  299. package/dist/src/constants.browser.js.map +0 -1
  300. package/dist/src/constants.node.d.ts.map +0 -1
  301. package/dist/src/constants.node.js.map +0 -1
  302. package/src/SessionRecorderHttpTraceExporterBrowser.ts +0 -123
  303. /package/dist/esm/{constants.browser.d.ts → constants/constants.browser.d.ts} +0 -0
  304. /package/dist/esm/{constants.browser.js → constants/constants.browser.js} +0 -0
  305. /package/dist/esm/{constants.node.d.ts → constants/constants.node.d.ts} +0 -0
  306. /package/dist/esm/{constants.node.js → constants/constants.node.js} +0 -0
  307. /package/dist/esm/{SessionRecorderHttpInstrumentationHooksNode.d.ts → instrumentations/SessionRecorderHttpInstrumentationHooksNode.d.ts} +0 -0
  308. /package/dist/esnext/{constants.browser.d.ts → constants/constants.browser.d.ts} +0 -0
  309. /package/dist/esnext/{constants.browser.js → constants/constants.browser.js} +0 -0
  310. /package/dist/esnext/{constants.node.d.ts → constants/constants.node.d.ts} +0 -0
  311. /package/dist/esnext/{constants.node.js → constants/constants.node.js} +0 -0
  312. /package/dist/esnext/{SessionRecorderHttpInstrumentationHooksNode.d.ts → instrumentations/SessionRecorderHttpInstrumentationHooksNode.d.ts} +0 -0
  313. /package/dist/src/{constants.browser.d.ts → constants/constants.browser.d.ts} +0 -0
  314. /package/dist/src/{constants.browser.js → constants/constants.browser.js} +0 -0
  315. /package/dist/src/{constants.node.d.ts → constants/constants.node.d.ts} +0 -0
  316. /package/dist/src/{constants.node.js → constants/constants.node.js} +0 -0
  317. /package/dist/src/{SessionRecorderHttpInstrumentationHooksNode.d.ts → instrumentations/SessionRecorderHttpInstrumentationHooksNode.d.ts} +0 -0
  318. /package/src/{constants.browser.ts → constants/constants.browser.ts} +0 -0
  319. /package/src/{constants.node.ts → constants/constants.node.ts} +0 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SessionRecorderHttpInstrumentationHooksNode.js","sourceRoot":"","sources":["../../../src/instrumentations/SessionRecorderHttpInstrumentationHooksNode.ts"],"names":[],"mappings":"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","sourcesContent":["import type {\n IncomingMessage,\n ServerResponse,\n ClientRequest,\n} from 'http'\nimport * as zlib from 'zlib'\nimport type { Span } from '@opentelemetry/api'\nimport {\n ATTR_MULTIPLAYER_HTTP_REQUEST_BODY,\n ATTR_MULTIPLAYER_HTTP_REQUEST_HEADERS,\n ATTR_MULTIPLAYER_HTTP_RESPONSE_BODY,\n ATTR_MULTIPLAYER_HTTP_RESPONSE_HEADERS,\n MULTIPLAYER_MAX_HTTP_REQUEST_RESPONSE_SIZE,\n ATTR_MULTIPLAYER_HTTP_RESPONSE_BODY_ENCODING,\n MULTIPLAYER_TRACE_DEBUG_PREFIX,\n MULTIPLAYER_TRACE_DOC_PREFIX,\n} from '../constants/constants.node'\nimport {\n mask,\n schemify,\n isGzip,\n} from '../sdk'\nimport {\n sensitiveFields,\n sensitiveHeaders,\n} from '../sdk/mask'\n\ninterface HttpResponseHookOptions {\n maxPayloadSizeBytes?: number\n schemifyDocSpanPayload?: boolean\n uncompressPayload?: boolean\n\n captureHeaders?: boolean\n captureBody?: boolean\n\n isMaskBodyEnabled?: boolean\n isMaskHeadersEnabled?: boolean\n\n maskBody?: (arg: any, span: Span) => any\n maskHeaders?: (arg: any, span: Span) => any\n\n maskBodyFieldsList?: string[]\n maskHeadersList?: string[]\n\n headersToInclude?: string[]\n headersToExclude?: string[]\n}\n\ninterface HttpRequestHookOptions {\n maxPayloadSizeBytes?: number\n schemifyDocSpanPayload?: boolean\n\n captureHeaders?: boolean\n captureBody?: boolean\n\n isMaskBodyEnabled?: boolean\n isMaskHeadersEnabled?: boolean\n\n maskBody?: (arg: any, span: Span) => any\n maskHeaders?: (arg: any, span: Span) => any\n\n maskBodyFieldsList?: string[]\n maskHeadersList?: string[]\n\n headersToInclude?: string[]\n headersToExclude?: string[]\n}\n\nconst setDefaultOptions = (\n options: HttpResponseHookOptions | HttpResponseHookOptions,\n): Omit<HttpResponseHookOptions & HttpResponseHookOptions, 'maskBody' | 'maskHeaders'>\n & {\n maskBody: (arg: any, span: Span) => any\n maskHeaders: (arg: any, span: Span) => any\n captureHeaders: boolean,\n captureBody: boolean,\n isMaskBodyEnabled: boolean\n isMaskHeadersEnabled: boolean\n schemifyDocSpanPayload: boolean,\n uncompressPayload: boolean,\n maxPayloadSizeBytes: number\n } => {\n options.captureHeaders = 'captureHeaders' in options\n ? options.captureHeaders\n : true\n options.captureBody = 'captureBody' in options\n ? options.captureBody\n : true\n options.isMaskBodyEnabled = 'isMaskBodyEnabled' in options\n ? options.isMaskBodyEnabled\n : true\n options.isMaskHeadersEnabled = 'isMaskHeadersEnabled' in options\n ? options.isMaskHeadersEnabled\n : true\n options.schemifyDocSpanPayload = 'schemifyDocSpanPayload' in options\n ? options.schemifyDocSpanPayload\n : false\n options.uncompressPayload = 'uncompressPayload' in options\n ? options.uncompressPayload\n : true\n options.maskBody = options.maskBody || mask([\n ...(\n Array.isArray(options.maskBodyFieldsList)\n ? options.maskBodyFieldsList\n : sensitiveFields\n ),\n ...(\n Array.isArray(options.maskHeadersList)\n ? options.maskHeadersList\n : sensitiveHeaders\n ),\n ])\n options.maskHeaders = options.maskHeaders || mask([\n ...(\n Array.isArray(options.maskBodyFieldsList)\n ? options.maskBodyFieldsList\n : sensitiveFields\n ),\n ...(\n Array.isArray(options.maskHeadersList)\n ? options.maskHeadersList\n : sensitiveHeaders\n ),\n ])\n options.maxPayloadSizeBytes = options.maxPayloadSizeBytes || MULTIPLAYER_MAX_HTTP_REQUEST_RESPONSE_SIZE\n\n return options as Omit<HttpResponseHookOptions & HttpResponseHookOptions, 'maskBody' | 'maskHeaders'>\n & {\n maskBody: (arg: any, span: Span) => any\n maskHeaders: (arg: any, span: Span) => any\n captureHeaders: boolean,\n captureBody: boolean,\n isMaskBodyEnabled: boolean,\n isMaskHeadersEnabled: boolean,\n schemifyDocSpanPayload: boolean,\n uncompressPayload: boolean,\n maxPayloadSizeBytes: number\n }\n}\n\nexport const SessionRecorderHttpInstrumentationHooksNode = {\n responseHook: (options: HttpResponseHookOptions = {}) =>\n (span: Span, response: IncomingMessage | ServerResponse) => {\n try {\n const _options = setDefaultOptions(options)\n\n if (!_options.captureBody && !_options.captureHeaders) {\n return\n }\n\n const _response = response as ServerResponse\n const traceId = span.spanContext().traceId\n\n if (_response.setHeader) {\n _response.setHeader('X-Trace-Id', traceId)\n }\n\n const [oldWrite, oldEnd] = [_response.write, _response.end]\n\n const chunks: Buffer[] = []\n\n if (_options.captureBody) {\n (_response.write as unknown) = function (...restArgs: any[]) {\n chunks.push(Buffer.from(restArgs[0]))\n\n // @ts-ignore\n oldWrite.apply(_response, restArgs)\n }\n }\n\n\n // @ts-ignore\n _response.end = async function (...restArgs) {\n if (_options.captureBody && restArgs[0]) {\n chunks.push(Buffer.from(restArgs[0]))\n }\n\n const responseBuffer = Buffer.concat(chunks)\n\n if (\n _options.captureBody\n && responseBuffer.byteLength > 0\n && responseBuffer.byteLength < _options.maxPayloadSizeBytes\n ) {\n let responseBody: string\n let skipResponseBodyModification = false\n\n if (isGzip(responseBuffer)) {\n if (_options.uncompressPayload) {\n const dezippedBuffer = await new Promise((resolve) => zlib\n .gunzip(responseBuffer, function (err, dezipped) {\n if (err) {\n return resolve(Buffer.from(''))\n } else {\n return resolve(dezipped)\n }\n })) as Buffer\n responseBody = dezippedBuffer.toString('utf-8')\n } else {\n span.setAttribute(\n ATTR_MULTIPLAYER_HTTP_RESPONSE_BODY_ENCODING,\n 'gzip',\n )\n\n skipResponseBodyModification = true\n responseBody = responseBuffer.toString('hex')\n }\n } else {\n responseBody = responseBuffer.toString('utf-8')\n }\n\n if (responseBody.length) {\n responseBody = JSON.parse(JSON.stringify(responseBody))\n }\n\n if (!skipResponseBodyModification) {\n if (\n traceId.startsWith(MULTIPLAYER_TRACE_DEBUG_PREFIX)\n && _options.isMaskBodyEnabled\n ) {\n responseBody = _options.maskBody(responseBody, span)\n } else if (\n traceId.startsWith(MULTIPLAYER_TRACE_DOC_PREFIX)\n && _options.schemifyDocSpanPayload\n ) {\n responseBody = schemify(responseBody)\n } else if (typeof responseBody !== 'string') {\n responseBody = JSON.stringify(responseBody)\n }\n }\n\n if (responseBody.length) {\n span.setAttribute(\n ATTR_MULTIPLAYER_HTTP_RESPONSE_BODY,\n responseBody,\n )\n }\n }\n\n if (_options.captureHeaders) {\n let _headers = JSON.parse(JSON.stringify(_response.getHeaders() || {}))\n if (_options.isMaskHeadersEnabled) {\n _headers = _options.maskHeaders(_headers, span)\n }\n\n if (_options.headersToInclude) {\n const filteredHeaders: any = {}\n for (const headerName of _options.headersToInclude) {\n filteredHeaders[headerName] = _headers[headerName]\n }\n _headers = filteredHeaders\n }\n\n if (_options.headersToExclude?.length) {\n for (const headerName of _options.headersToExclude) {\n delete _headers[headerName]\n }\n }\n\n const stringifiedHeaders = JSON.stringify(_headers)\n\n if (stringifiedHeaders?.length) {\n span.setAttribute(\n ATTR_MULTIPLAYER_HTTP_RESPONSE_HEADERS,\n stringifiedHeaders,\n )\n }\n }\n\n\n // @ts-ignore\n return oldEnd.apply(_response, restArgs)\n }\n } catch (error) {\n // eslint-disable-next-line\n console.error('An error occured in multiplayer otlp http responseHook', error)\n }\n },\n requestHook: (options: HttpRequestHookOptions = {}) =>\n (span: Span, request: ClientRequest | IncomingMessage) => {\n try {\n const _options = setDefaultOptions(options)\n\n if (!_options.captureBody && !_options.captureHeaders) {\n return\n }\n\n const traceId = span.spanContext().traceId\n const _request = request as IncomingMessage\n\n if (_options.captureHeaders) {\n let _headers = JSON.parse(JSON.stringify(_request.headers || {}))\n\n if (_options.isMaskHeadersEnabled) {\n _headers = _options.maskHeaders(_headers, span)\n }\n\n if (_options.headersToInclude) {\n const filteredHeaders: any = {}\n for (const headerName of _options.headersToInclude) {\n filteredHeaders[headerName] = _headers[headerName]\n }\n _headers = filteredHeaders\n }\n\n if (_options.headersToExclude?.length) {\n for (const headerName of _options.headersToExclude) {\n delete _headers[headerName]\n }\n }\n\n span.setAttribute(\n ATTR_MULTIPLAYER_HTTP_REQUEST_HEADERS,\n JSON.stringify(_headers),\n )\n }\n\n const contentType = _request?.headers?.['content-type']\n if (\n _options.captureBody\n && contentType?.includes('application/json')\n ) {\n let body = ''\n _request.on('data', (chunk) => {\n body += chunk\n })\n _request.on('end', () => {\n try {\n const requestBodySizeBytes = Buffer.byteLength(body, 'utf8')\n\n if (\n requestBodySizeBytes === 0\n || requestBodySizeBytes > _options.maxPayloadSizeBytes\n ) {\n return\n }\n\n let requestBody = body\n if (!requestBody) return\n\n requestBody = JSON.parse(JSON.stringify(requestBody))\n\n if (\n traceId.startsWith(MULTIPLAYER_TRACE_DEBUG_PREFIX)\n && _options.isMaskBodyEnabled\n ) {\n requestBody = _options.maskBody(requestBody, span)\n } else if (\n traceId.startsWith(MULTIPLAYER_TRACE_DOC_PREFIX)\n && _options.schemifyDocSpanPayload\n ) {\n requestBody = schemify(requestBody)\n } else if (typeof requestBody !== 'string') {\n requestBody = JSON.stringify(requestBody)\n }\n\n if (requestBody?.length) {\n span.setAttribute(\n ATTR_MULTIPLAYER_HTTP_REQUEST_BODY,\n requestBody,\n )\n }\n } catch (err) {\n // eslint-disable-next-line\n console.error('[MULTIPLAYER-HTTP-REQ-HOOK] An error occured in multiplayer otlp http requestHook', err)\n }\n })\n }\n\n } catch (error) {\n // eslint-disable-next-line\n console.error('An error occured in multiplayer otlp http requestHook', error)\n }\n },\n}\n"]}
@@ -0,0 +1,2 @@
1
+ export * from './SessionRecorderHttpInstrumentationHooksNode';
2
+ //# sourceMappingURL=index-node.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index-node.d.ts","sourceRoot":"","sources":["../../../src/instrumentations/index-node.ts"],"names":[],"mappings":"AAAA,cAAc,+CAA+C,CAAA"}
@@ -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":";;;AACA,sDAAoD;AAEpD,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.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":"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","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":";;;AAAA,4CAI2B;AAC3B,sDAU0B;AAC1B,iCAAgE;AAEhE;;;;;GAKG;AACI,MAAM,YAAY,GAAG,CAAC,GAAW,EAAE,KAAqB,EAAE,EAAE;IACjE,MAAM,IAAI,GAAG,WAAK,CAAC,OAAO,CAAC,aAAO,CAAC,MAAM,EAAE,CAAC,CAAA;IAC5C,IAAI,CAAC,IAAI;QAAE,OAAM;IAEjB,IAAI,CAAC,YAAY,CAAC,GAAG,EAAE,KAAK,CAAC,CAAA;AAC/B,CAAC,CAAA;AALY,QAAA,YAAY,gBAKxB;AAED;;;;;GAKG;AACI,MAAM,kBAAkB,GAAG,CAChC,IAAS,EACT,UAA6B,EAAE,IAAI,EAAE,IAAI,EAAE,EAC3C,EAAE;IACF,MAAM,IAAI,GAAG,WAAK,CAAC,OAAO,CAAC,aAAO,CAAC,MAAM,EAAE,CAAC,CAAA;IAC5C,IAAI,CAAC,IAAI;QAAE,OAAM;IAEjB,IAAI,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,IAAI,EAAE,CAAC;QAClB,IAAI,GAAG,IAAA,cAAI,EAAC,sBAAe,CAAC,CAAC,IAAI,EAAE,IAAI,CAAC,CAAA;IAC1C,CAAC;IAED,IAAI,CAAC,YAAY,CAAC,mDAAkC,EAAE,IAAI,CAAC,CAAA;AAC7D,CAAC,CAAA;AAZY,QAAA,kBAAkB,sBAY9B;AAED;;;;;GAKG;AACI,MAAM,qBAAqB,GAAG,CACnC,IAAS,EACT,UAA6B,EAAE,IAAI,EAAE,IAAI,EAAE,EAC3C,EAAE;IACF,MAAM,IAAI,GAAG,WAAK,CAAC,OAAO,CAAC,aAAO,CAAC,MAAM,EAAE,CAAC,CAAA;IAC5C,IAAI,CAAC,IAAI;QAAE,OAAM;IAEjB,IAAI,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,IAAI,EAAE,CAAC;QAClB,IAAI,GAAG,IAAA,cAAI,EAAC,uBAAgB,CAAC,CAAC,IAAI,EAAE,IAAI,CAAC,CAAA;IAC3C,CAAC;IAED,IAAI,CAAC,YAAY,CAAC,sDAAqC,EAAE,IAAI,CAAC,CAAA;AAChE,CAAC,CAAA;AAZY,QAAA,qBAAqB,yBAYjC;AAED;;;;;GAKG;AACI,MAAM,mBAAmB,GAAG,CACjC,IAAS,EACT,UAA6B,EAAE,IAAI,EAAE,IAAI,EAAE,EAC3C,EAAE;IACF,MAAM,IAAI,GAAG,WAAK,CAAC,OAAO,CAAC,aAAO,CAAC,MAAM,EAAE,CAAC,CAAA;IAC5C,IAAI,CAAC,IAAI;QAAE,OAAM;IAEjB,IAAI,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,IAAI,EAAE,CAAC;QAClB,IAAI,GAAG,IAAA,cAAI,EAAC,sBAAe,CAAC,CAAC,IAAI,EAAE,IAAI,CAAC,CAAA;IAC1C,CAAC;IAED,IAAI,CAAC,YAAY,CAAC,oDAAmC,EAAE,IAAI,CAAC,CAAA;AAC9D,CAAC,CAAA;AAZY,QAAA,mBAAmB,uBAY/B;AAED;;;;;GAKG;AACI,MAAM,sBAAsB,GAAG,CACpC,IAAS,EACT,UAA6B,EAAE,IAAI,EAAE,IAAI,EAAE,EAC3C,EAAE;IACF,MAAM,IAAI,GAAG,WAAK,CAAC,OAAO,CAAC,aAAO,CAAC,MAAM,EAAE,CAAC,CAAA;IAC5C,IAAI,CAAC,IAAI;QAAE,OAAM;IAEjB,IAAI,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,IAAI,EAAE,CAAC;QAClB,IAAI,GAAG,IAAA,cAAI,EAAC,sBAAe,CAAC,CAAC,IAAI,EAAE,IAAI,CAAC,CAAA;IAC1C,CAAC;IAED,IAAI,CAAC,YAAY,CAAC,uDAAsC,EAAE,IAAI,CAAC,CAAA;AACjE,CAAC,CAAA;AAZY,QAAA,sBAAsB,0BAYlC;AAED;;;;;GAKG;AACI,MAAM,cAAc,GAAG,CAC5B,IAAS,EACT,UAA6B,EAAE,IAAI,EAAE,IAAI,EAAE,EAC3C,EAAE;IACF,MAAM,IAAI,GAAG,WAAK,CAAC,OAAO,CAAC,aAAO,CAAC,MAAM,EAAE,CAAC,CAAA;IAC5C,IAAI,CAAC,IAAI;QAAE,OAAM;IAEjB,IAAI,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,IAAI,EAAE,CAAC;QAClB,IAAI,GAAG,IAAA,cAAI,EAAC,sBAAe,CAAC,CAAC,IAAI,EAAE,IAAI,CAAC,CAAA;IAC1C,CAAC;IAED,IAAI,CAAC,YAAY,CAAC,wDAAuC,EAAE,IAAI,CAAC,CAAA;AAClE,CAAC,CAAA;AAZY,QAAA,cAAc,kBAY1B;AAED;;;;;GAKG;AACI,MAAM,oBAAoB,GAAG,CAClC,IAAS,EACT,UAA6B,EAAE,IAAI,EAAE,IAAI,EAAE,EAC3C,EAAE;IACF,MAAM,IAAI,GAAG,WAAK,CAAC,OAAO,CAAC,aAAO,CAAC,MAAM,EAAE,CAAC,CAAA;IAC5C,IAAI,CAAC,IAAI;QAAE,OAAM;IAEjB,IAAI,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,IAAI,EAAE,CAAC;QAClB,IAAI,GAAG,IAAA,cAAI,EAAC,sBAAe,CAAC,CAAC,IAAI,EAAE,IAAI,CAAC,CAAA;IAC1C,CAAC;IAED,IAAI,CAAC,YAAY,CAAC,qDAAoC,EAAE,IAAI,CAAC,CAAA;AAC/D,CAAC,CAAA;AAZY,QAAA,oBAAoB,wBAYhC;AAED;;;;;GAKG;AACI,MAAM,qBAAqB,GAAG,CACnC,IAAS,EACT,UAA6B,EAAE,IAAI,EAAE,IAAI,EAAE,EAC3C,EAAE;IACF,MAAM,IAAI,GAAG,WAAK,CAAC,OAAO,CAAC,aAAO,CAAC,MAAM,EAAE,CAAC,CAAA;IAC5C,IAAI,CAAC,IAAI;QAAE,OAAM;IAEjB,IAAI,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,IAAI,EAAE,CAAC;QAClB,IAAI,GAAG,IAAA,cAAI,EAAC,sBAAe,CAAC,CAAC,IAAI,EAAE,IAAI,CAAC,CAAA;IAC1C,CAAC;IAED,IAAI,CAAC,YAAY,CAAC,sDAAqC,EAAE,IAAI,CAAC,CAAA;AAChE,CAAC,CAAA;AAZY,QAAA,qBAAqB,yBAYjC;AAED;;;;;GAKG;AACI,MAAM,qBAAqB,GAAG,CACnC,IAAS,EACT,UAA6B,EAAE,IAAI,EAAE,IAAI,EAAE,EAC3C,EAAE;IACF,MAAM,IAAI,GAAG,WAAK,CAAC,OAAO,CAAC,aAAO,CAAC,MAAM,EAAE,CAAC,CAAA;IAC5C,IAAI,CAAC,IAAI;QAAE,OAAM;IAEjB,IAAI,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,IAAI,EAAE,CAAC;QAClB,IAAI,GAAG,IAAA,cAAI,EAAC,sBAAe,CAAC,CAAC,IAAI,EAAE,IAAI,CAAC,CAAA;IAC1C,CAAC;IAED,IAAI,CAAC,YAAY,CAAC,sDAAqC,EAAE,IAAI,CAAC,CAAA;AAChE,CAAC,CAAA;AAZY,QAAA,qBAAqB,yBAYjC;AAED;;;;;GAKG;AACI,MAAM,sBAAsB,GAAG,CACpC,IAAS,EACT,UAA6B,EAAE,IAAI,EAAE,IAAI,EAAE,EAC3C,EAAE;IACF,MAAM,IAAI,GAAG,WAAK,CAAC,OAAO,CAAC,aAAO,CAAC,MAAM,EAAE,CAAC,CAAA;IAC5C,IAAI,CAAC,IAAI;QAAE,OAAM;IAEjB,IAAI,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,IAAI,EAAE,CAAC;QAClB,IAAI,GAAG,IAAA,cAAI,EAAC,sBAAe,CAAC,CAAC,IAAI,EAAE,IAAI,CAAC,CAAA;IAC1C,CAAC;IAED,IAAI,CAAC,YAAY,CAAC,uDAAsC,EAAE,IAAI,CAAC,CAAA;AACjE,CAAC,CAAA;AAZY,QAAA,sBAAsB,0BAYlC","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":";;;AAAA,4CAI2B;AAC3B,gEAUoC;AACpC,iCAAgE;AAEhE;;;;;GAKG;AACI,MAAM,YAAY,GAAG,CAAC,GAAW,EAAE,KAAqB,EAAE,EAAE;IACjE,MAAM,IAAI,GAAG,WAAK,CAAC,OAAO,CAAC,aAAO,CAAC,MAAM,EAAE,CAAC,CAAA;IAC5C,IAAI,CAAC,IAAI;QAAE,OAAM;IAEjB,IAAI,CAAC,YAAY,CAAC,GAAG,EAAE,KAAK,CAAC,CAAA;AAC/B,CAAC,CAAA;AALY,QAAA,YAAY,gBAKxB;AAED;;;;;GAKG;AACI,MAAM,kBAAkB,GAAG,CAChC,IAAS,EACT,UAA6B,EAAE,IAAI,EAAE,IAAI,EAAE,EAC3C,EAAE;IACF,MAAM,IAAI,GAAG,WAAK,CAAC,OAAO,CAAC,aAAO,CAAC,MAAM,EAAE,CAAC,CAAA;IAC5C,IAAI,CAAC,IAAI;QAAE,OAAM;IAEjB,IAAI,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,IAAI,EAAE,CAAC;QAClB,IAAI,GAAG,IAAA,cAAI,EAAC,sBAAe,CAAC,CAAC,IAAI,EAAE,IAAI,CAAC,CAAA;IAC1C,CAAC;IAED,IAAI,CAAC,YAAY,CAAC,mDAAkC,EAAE,IAAI,CAAC,CAAA;AAC7D,CAAC,CAAA;AAZY,QAAA,kBAAkB,sBAY9B;AAED;;;;;GAKG;AACI,MAAM,qBAAqB,GAAG,CACnC,IAAS,EACT,UAA6B,EAAE,IAAI,EAAE,IAAI,EAAE,EAC3C,EAAE;IACF,MAAM,IAAI,GAAG,WAAK,CAAC,OAAO,CAAC,aAAO,CAAC,MAAM,EAAE,CAAC,CAAA;IAC5C,IAAI,CAAC,IAAI;QAAE,OAAM;IAEjB,IAAI,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,IAAI,EAAE,CAAC;QAClB,IAAI,GAAG,IAAA,cAAI,EAAC,uBAAgB,CAAC,CAAC,IAAI,EAAE,IAAI,CAAC,CAAA;IAC3C,CAAC;IAED,IAAI,CAAC,YAAY,CAAC,sDAAqC,EAAE,IAAI,CAAC,CAAA;AAChE,CAAC,CAAA;AAZY,QAAA,qBAAqB,yBAYjC;AAED;;;;;GAKG;AACI,MAAM,mBAAmB,GAAG,CACjC,IAAS,EACT,UAA6B,EAAE,IAAI,EAAE,IAAI,EAAE,EAC3C,EAAE;IACF,MAAM,IAAI,GAAG,WAAK,CAAC,OAAO,CAAC,aAAO,CAAC,MAAM,EAAE,CAAC,CAAA;IAC5C,IAAI,CAAC,IAAI;QAAE,OAAM;IAEjB,IAAI,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,IAAI,EAAE,CAAC;QAClB,IAAI,GAAG,IAAA,cAAI,EAAC,sBAAe,CAAC,CAAC,IAAI,EAAE,IAAI,CAAC,CAAA;IAC1C,CAAC;IAED,IAAI,CAAC,YAAY,CAAC,oDAAmC,EAAE,IAAI,CAAC,CAAA;AAC9D,CAAC,CAAA;AAZY,QAAA,mBAAmB,uBAY/B;AAED;;;;;GAKG;AACI,MAAM,sBAAsB,GAAG,CACpC,IAAS,EACT,UAA6B,EAAE,IAAI,EAAE,IAAI,EAAE,EAC3C,EAAE;IACF,MAAM,IAAI,GAAG,WAAK,CAAC,OAAO,CAAC,aAAO,CAAC,MAAM,EAAE,CAAC,CAAA;IAC5C,IAAI,CAAC,IAAI;QAAE,OAAM;IAEjB,IAAI,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,IAAI,EAAE,CAAC;QAClB,IAAI,GAAG,IAAA,cAAI,EAAC,sBAAe,CAAC,CAAC,IAAI,EAAE,IAAI,CAAC,CAAA;IAC1C,CAAC;IAED,IAAI,CAAC,YAAY,CAAC,uDAAsC,EAAE,IAAI,CAAC,CAAA;AACjE,CAAC,CAAA;AAZY,QAAA,sBAAsB,0BAYlC;AAED;;;;;GAKG;AACI,MAAM,cAAc,GAAG,CAC5B,IAAS,EACT,UAA6B,EAAE,IAAI,EAAE,IAAI,EAAE,EAC3C,EAAE;IACF,MAAM,IAAI,GAAG,WAAK,CAAC,OAAO,CAAC,aAAO,CAAC,MAAM,EAAE,CAAC,CAAA;IAC5C,IAAI,CAAC,IAAI;QAAE,OAAM;IAEjB,IAAI,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,IAAI,EAAE,CAAC;QAClB,IAAI,GAAG,IAAA,cAAI,EAAC,sBAAe,CAAC,CAAC,IAAI,EAAE,IAAI,CAAC,CAAA;IAC1C,CAAC;IAED,IAAI,CAAC,YAAY,CAAC,wDAAuC,EAAE,IAAI,CAAC,CAAA;AAClE,CAAC,CAAA;AAZY,QAAA,cAAc,kBAY1B;AAED;;;;;GAKG;AACI,MAAM,oBAAoB,GAAG,CAClC,IAAS,EACT,UAA6B,EAAE,IAAI,EAAE,IAAI,EAAE,EAC3C,EAAE;IACF,MAAM,IAAI,GAAG,WAAK,CAAC,OAAO,CAAC,aAAO,CAAC,MAAM,EAAE,CAAC,CAAA;IAC5C,IAAI,CAAC,IAAI;QAAE,OAAM;IAEjB,IAAI,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,IAAI,EAAE,CAAC;QAClB,IAAI,GAAG,IAAA,cAAI,EAAC,sBAAe,CAAC,CAAC,IAAI,EAAE,IAAI,CAAC,CAAA;IAC1C,CAAC;IAED,IAAI,CAAC,YAAY,CAAC,qDAAoC,EAAE,IAAI,CAAC,CAAA;AAC/D,CAAC,CAAA;AAZY,QAAA,oBAAoB,wBAYhC;AAED;;;;;GAKG;AACI,MAAM,qBAAqB,GAAG,CACnC,IAAS,EACT,UAA6B,EAAE,IAAI,EAAE,IAAI,EAAE,EAC3C,EAAE;IACF,MAAM,IAAI,GAAG,WAAK,CAAC,OAAO,CAAC,aAAO,CAAC,MAAM,EAAE,CAAC,CAAA;IAC5C,IAAI,CAAC,IAAI;QAAE,OAAM;IAEjB,IAAI,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,IAAI,EAAE,CAAC;QAClB,IAAI,GAAG,IAAA,cAAI,EAAC,sBAAe,CAAC,CAAC,IAAI,EAAE,IAAI,CAAC,CAAA;IAC1C,CAAC;IAED,IAAI,CAAC,YAAY,CAAC,sDAAqC,EAAE,IAAI,CAAC,CAAA;AAChE,CAAC,CAAA;AAZY,QAAA,qBAAqB,yBAYjC;AAED;;;;;GAKG;AACI,MAAM,qBAAqB,GAAG,CACnC,IAAS,EACT,UAA6B,EAAE,IAAI,EAAE,IAAI,EAAE,EAC3C,EAAE;IACF,MAAM,IAAI,GAAG,WAAK,CAAC,OAAO,CAAC,aAAO,CAAC,MAAM,EAAE,CAAC,CAAA;IAC5C,IAAI,CAAC,IAAI;QAAE,OAAM;IAEjB,IAAI,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,IAAI,EAAE,CAAC;QAClB,IAAI,GAAG,IAAA,cAAI,EAAC,sBAAe,CAAC,CAAC,IAAI,EAAE,IAAI,CAAC,CAAA;IAC1C,CAAC;IAED,IAAI,CAAC,YAAY,CAAC,sDAAqC,EAAE,IAAI,CAAC,CAAA;AAChE,CAAC,CAAA;AAZY,QAAA,qBAAqB,yBAYjC;AAED;;;;;GAKG;AACI,MAAM,sBAAsB,GAAG,CACpC,IAAS,EACT,UAA6B,EAAE,IAAI,EAAE,IAAI,EAAE,EAC3C,EAAE;IACF,MAAM,IAAI,GAAG,WAAK,CAAC,OAAO,CAAC,aAAO,CAAC,MAAM,EAAE,CAAC,CAAA;IAC5C,IAAI,CAAC,IAAI;QAAE,OAAM;IAEjB,IAAI,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,IAAI,EAAE,CAAC;QAClB,IAAI,GAAG,IAAA,cAAI,EAAC,sBAAe,CAAC,CAAC,IAAI,EAAE,IAAI,CAAC,CAAA;IAC1C,CAAC;IAED,IAAI,CAAC,YAAY,CAAC,uDAAsC,EAAE,IAAI,CAAC,CAAA;AACjE,CAAC,CAAA;AAZY,QAAA,sBAAsB,0BAYlC","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.0",
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": {
@@ -10,7 +10,7 @@ import {
10
10
  MULTIPLAYER_TRACE_DEBUG_PREFIX,
11
11
  MULTIPLAYER_TRACE_DOC_PREFIX,
12
12
  MULTIPLAYER_TRACE_CONTINUOUS_DEBUG_PREFIX,
13
- } from './constants.base'
13
+ } from './constants/constants.base'
14
14
  import { getIdGenerator } from './sdk'
15
15
 
16
16
  export class SessionRecorderIdGenerator extends RandomIdGenerator {
@@ -1,14 +1,12 @@
1
1
  import { ReadableSpan } from '@opentelemetry/sdk-trace-base'
2
2
  import {
3
3
  IExportTraceServiceResponse,
4
- createExportTraceServiceRequest,
5
4
  ISerializer,
6
5
  } from '@opentelemetry/otlp-transformer'
7
6
  import {
8
7
  MULTIPLAYER_TRACE_DEBUG_PREFIX,
9
- MULTIPLAYER_TRACE_DOC_PREFIX,
10
8
  MULTIPLAYER_TRACE_CONTINUOUS_DEBUG_PREFIX,
11
- } from './constants.base'
9
+ } from './constants/constants.base'
12
10
 
13
11
  export const SessionRecorderJsonTraceSerializer: ISerializer<
14
12
  ReadableSpan[],
@@ -20,7 +18,6 @@ IExportTraceServiceResponse
20
18
 
21
19
  if (
22
20
  traceId.startsWith(MULTIPLAYER_TRACE_DEBUG_PREFIX)
23
- || traceId.startsWith(MULTIPLAYER_TRACE_DOC_PREFIX)
24
21
  || traceId.startsWith(MULTIPLAYER_TRACE_CONTINUOUS_DEBUG_PREFIX)
25
22
  ) {
26
23
  return true
@@ -29,10 +26,53 @@ IExportTraceServiceResponse
29
26
  return false
30
27
  })
31
28
 
32
- const request = createExportTraceServiceRequest(filteredArg, {
33
- useHex: true,
34
- useLongBits: false,
35
- })
29
+ // Create a simple trace service request structure
30
+ const request = {
31
+ resourceSpans: filteredArg.map(span => ({
32
+ resource: {
33
+ attributes: Object.entries(span.resource.attributes).map(([key, value]) => ({
34
+ key,
35
+ value: { stringValue: String(value) },
36
+ })),
37
+ },
38
+ scopeSpans: [{
39
+ spans: [{
40
+ traceId: span.spanContext().traceId,
41
+ spanId: span.spanContext().spanId,
42
+ parentSpanId: span.spanContext().spanId, // Using spanId as fallback
43
+ name: span.name,
44
+ kind: span.kind,
45
+ startTimeUnixNano: span.startTime[0] * 1e9 + span.startTime[1],
46
+ endTimeUnixNano: span.endTime ? span.endTime[0] * 1e9 + span.endTime[1] : undefined,
47
+ attributes: Object.entries(span.attributes).map(([key, value]) => ({
48
+ key,
49
+ value: { stringValue: String(value) },
50
+ })),
51
+ events: span.events.map(event => ({
52
+ timeUnixNano: event.time[0] * 1e9 + event.time[1],
53
+ name: event.name,
54
+ attributes: Object.entries(event.attributes || {}).map(([key, value]) => ({
55
+ key,
56
+ value: { stringValue: String(value) },
57
+ })),
58
+ })),
59
+ links: span.links.map(link => ({
60
+ traceId: link.context.traceId,
61
+ spanId: link.context.spanId,
62
+ attributes: Object.entries(link.attributes || {}).map(([key, value]) => ({
63
+ key,
64
+ value: { stringValue: String(value) },
65
+ })),
66
+ })),
67
+ status: {
68
+ code: span.status.code,
69
+ message: span.status.message || '',
70
+ },
71
+ }],
72
+ }],
73
+ })),
74
+ }
75
+
36
76
  const encoder = new TextEncoder()
37
77
  return encoder.encode(JSON.stringify(request))
38
78
  },
@@ -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
+ }