@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.
- package/dist/esm/SessionRecorderIdGenerator.d.ts +1 -6
- package/dist/esm/SessionRecorderIdGenerator.d.ts.map +1 -1
- package/dist/esm/SessionRecorderIdGenerator.js +3 -12
- package/dist/esm/SessionRecorderIdGenerator.js.map +1 -1
- package/dist/esm/SessionRecorderTraceIdRatioBasedSampler.js +1 -1
- package/dist/esm/SessionRecorderTraceIdRatioBasedSampler.js.map +1 -1
- package/dist/esm/{constants.base.d.ts → constants/constants.base.d.ts} +14 -0
- package/dist/esm/constants/constants.base.d.ts.map +1 -0
- package/dist/esm/{constants.base.js → constants/constants.base.js} +14 -0
- package/dist/esm/constants/constants.base.js.map +1 -0
- package/dist/esm/constants/constants.browser.d.ts.map +1 -0
- package/dist/esm/constants/constants.browser.js.map +1 -0
- package/dist/esm/constants/constants.node.d.ts.map +1 -0
- package/dist/esm/constants/constants.node.js.map +1 -0
- package/dist/esm/exporters/SessionRecorderBrowserTraceExporter.d.ts +31 -0
- package/dist/esm/exporters/SessionRecorderBrowserTraceExporter.d.ts.map +1 -0
- package/dist/esm/exporters/SessionRecorderBrowserTraceExporter.js +220 -0
- package/dist/esm/exporters/SessionRecorderBrowserTraceExporter.js.map +1 -0
- package/dist/esm/exporters/SessionRecorderGrpcLogsExporter.d.ts +22 -0
- package/dist/esm/exporters/SessionRecorderGrpcLogsExporter.d.ts.map +1 -0
- package/dist/esm/exporters/SessionRecorderGrpcLogsExporter.js +51 -0
- package/dist/esm/exporters/SessionRecorderGrpcLogsExporter.js.map +1 -0
- package/dist/esm/exporters/SessionRecorderGrpcTraceExporter.d.ts +22 -0
- package/dist/esm/exporters/SessionRecorderGrpcTraceExporter.d.ts.map +1 -0
- package/dist/esm/exporters/SessionRecorderGrpcTraceExporter.js +48 -0
- package/dist/esm/exporters/SessionRecorderGrpcTraceExporter.js.map +1 -0
- package/dist/esm/exporters/SessionRecorderHttpLogsExporter.d.ts +20 -0
- package/dist/esm/exporters/SessionRecorderHttpLogsExporter.d.ts.map +1 -0
- package/dist/esm/exporters/SessionRecorderHttpLogsExporter.js +50 -0
- package/dist/esm/exporters/SessionRecorderHttpLogsExporter.js.map +1 -0
- package/dist/esm/exporters/SessionRecorderHttpTraceExporter.d.ts +25 -0
- package/dist/esm/exporters/SessionRecorderHttpTraceExporter.d.ts.map +1 -0
- package/dist/esm/exporters/SessionRecorderHttpTraceExporter.js +56 -0
- package/dist/esm/exporters/SessionRecorderHttpTraceExporter.js.map +1 -0
- package/dist/esm/exporters/SessionRecorderLogsExporterWrapper.d.ts +13 -0
- package/dist/esm/exporters/SessionRecorderLogsExporterWrapper.d.ts.map +1 -0
- package/dist/esm/exporters/SessionRecorderLogsExporterWrapper.js +25 -0
- package/dist/esm/exporters/SessionRecorderLogsExporterWrapper.js.map +1 -0
- package/dist/esm/exporters/SessionRecorderTraceExporterWrapper.d.ts +13 -0
- package/dist/esm/exporters/SessionRecorderTraceExporterWrapper.d.ts.map +1 -0
- package/dist/esm/exporters/SessionRecorderTraceExporterWrapper.js +24 -0
- package/dist/esm/exporters/SessionRecorderTraceExporterWrapper.js.map +1 -0
- package/dist/esm/exporters/index-browser.d.ts +2 -0
- package/dist/esm/exporters/index-browser.d.ts.map +1 -0
- package/dist/esm/exporters/index-browser.js +2 -0
- package/dist/esm/exporters/index-browser.js.map +1 -0
- package/dist/esm/exporters/index-node.d.ts +7 -0
- package/dist/esm/exporters/index-node.d.ts.map +1 -0
- package/dist/esm/exporters/index-node.js +7 -0
- package/dist/esm/exporters/index-node.js.map +1 -0
- package/dist/esm/exporters/index.d.ts +8 -0
- package/dist/esm/exporters/index.d.ts.map +1 -0
- package/dist/esm/exporters/index.js +8 -0
- package/dist/esm/exporters/index.js.map +1 -0
- package/dist/esm/index-browser.d.ts +2 -3
- package/dist/esm/index-browser.d.ts.map +1 -1
- package/dist/esm/index-browser.js +2 -3
- package/dist/esm/index-browser.js.map +1 -1
- package/dist/esm/index-node.d.ts +3 -3
- package/dist/esm/index-node.d.ts.map +1 -1
- package/dist/esm/index-node.js +3 -3
- package/dist/esm/index-node.js.map +1 -1
- package/dist/esm/index.d.ts +3 -4
- package/dist/esm/index.d.ts.map +1 -1
- package/dist/esm/index.js +3 -4
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/instrumentations/SessionRecorderHttpInstrumentationHooksNode.d.ts.map +1 -0
- package/dist/esm/{SessionRecorderHttpInstrumentationHooksNode.js → instrumentations/SessionRecorderHttpInstrumentationHooksNode.js} +3 -3
- package/dist/esm/instrumentations/SessionRecorderHttpInstrumentationHooksNode.js.map +1 -0
- package/dist/esm/instrumentations/index-node.d.ts +2 -0
- package/dist/esm/instrumentations/index-node.d.ts.map +1 -0
- package/dist/esm/instrumentations/index-node.js +2 -0
- package/dist/esm/instrumentations/index-node.js.map +1 -0
- package/dist/esm/sdk/mask.js +1 -1
- package/dist/esm/sdk/mask.js.map +1 -1
- package/dist/esm/sdk/save-continuous-deb-session.js +1 -1
- package/dist/esm/sdk/save-continuous-deb-session.js.map +1 -1
- package/dist/esm/sdk/set-attribute.js +1 -1
- package/dist/esm/sdk/set-attribute.js.map +1 -1
- package/dist/esm/tsconfig.esm.tsbuildinfo +1 -1
- package/dist/esnext/SessionRecorderIdGenerator.d.ts +1 -6
- package/dist/esnext/SessionRecorderIdGenerator.d.ts.map +1 -1
- package/dist/esnext/SessionRecorderIdGenerator.js +3 -11
- package/dist/esnext/SessionRecorderIdGenerator.js.map +1 -1
- package/dist/esnext/SessionRecorderTraceIdRatioBasedSampler.js +1 -1
- package/dist/esnext/SessionRecorderTraceIdRatioBasedSampler.js.map +1 -1
- package/dist/{src → esnext/constants}/constants.base.d.ts +14 -0
- package/dist/esnext/constants/constants.base.d.ts.map +1 -0
- package/dist/esnext/{constants.base.js → constants/constants.base.js} +14 -0
- package/dist/esnext/constants/constants.base.js.map +1 -0
- package/dist/esnext/constants/constants.browser.d.ts.map +1 -0
- package/dist/esnext/constants/constants.browser.js.map +1 -0
- package/dist/esnext/constants/constants.node.d.ts.map +1 -0
- package/dist/esnext/constants/constants.node.js.map +1 -0
- package/dist/esnext/exporters/SessionRecorderBrowserTraceExporter.d.ts +31 -0
- package/dist/esnext/exporters/SessionRecorderBrowserTraceExporter.d.ts.map +1 -0
- package/dist/esnext/exporters/SessionRecorderBrowserTraceExporter.js +159 -0
- package/dist/esnext/exporters/SessionRecorderBrowserTraceExporter.js.map +1 -0
- package/dist/esnext/exporters/SessionRecorderGrpcLogsExporter.d.ts +22 -0
- package/dist/esnext/exporters/SessionRecorderGrpcLogsExporter.d.ts.map +1 -0
- package/dist/esnext/exporters/SessionRecorderGrpcLogsExporter.js +33 -0
- package/dist/esnext/exporters/SessionRecorderGrpcLogsExporter.js.map +1 -0
- package/dist/esnext/exporters/SessionRecorderGrpcTraceExporter.d.ts +22 -0
- package/dist/esnext/exporters/SessionRecorderGrpcTraceExporter.d.ts.map +1 -0
- package/dist/esnext/exporters/SessionRecorderGrpcTraceExporter.js +30 -0
- package/dist/esnext/exporters/SessionRecorderGrpcTraceExporter.js.map +1 -0
- package/dist/esnext/exporters/SessionRecorderHttpLogsExporter.d.ts +20 -0
- package/dist/esnext/exporters/SessionRecorderHttpLogsExporter.d.ts.map +1 -0
- package/dist/esnext/exporters/SessionRecorderHttpLogsExporter.js +32 -0
- package/dist/esnext/exporters/SessionRecorderHttpLogsExporter.js.map +1 -0
- package/dist/esnext/exporters/SessionRecorderHttpTraceExporter.d.ts +25 -0
- package/dist/esnext/exporters/SessionRecorderHttpTraceExporter.d.ts.map +1 -0
- package/dist/esnext/exporters/SessionRecorderHttpTraceExporter.js +38 -0
- package/dist/esnext/exporters/SessionRecorderHttpTraceExporter.js.map +1 -0
- package/dist/esnext/exporters/SessionRecorderLogsExporterWrapper.d.ts +13 -0
- package/dist/esnext/exporters/SessionRecorderLogsExporterWrapper.d.ts.map +1 -0
- package/dist/esnext/exporters/SessionRecorderLogsExporterWrapper.js +23 -0
- package/dist/esnext/exporters/SessionRecorderLogsExporterWrapper.js.map +1 -0
- package/dist/esnext/exporters/SessionRecorderTraceExporterWrapper.d.ts +13 -0
- package/dist/esnext/exporters/SessionRecorderTraceExporterWrapper.d.ts.map +1 -0
- package/dist/esnext/exporters/SessionRecorderTraceExporterWrapper.js +22 -0
- package/dist/esnext/exporters/SessionRecorderTraceExporterWrapper.js.map +1 -0
- package/dist/esnext/exporters/index-browser.d.ts +2 -0
- package/dist/esnext/exporters/index-browser.d.ts.map +1 -0
- package/dist/esnext/exporters/index-browser.js +2 -0
- package/dist/esnext/exporters/index-browser.js.map +1 -0
- package/dist/esnext/exporters/index-node.d.ts +7 -0
- package/dist/esnext/exporters/index-node.d.ts.map +1 -0
- package/dist/esnext/exporters/index-node.js +7 -0
- package/dist/esnext/exporters/index-node.js.map +1 -0
- package/dist/esnext/exporters/index.d.ts +8 -0
- package/dist/esnext/exporters/index.d.ts.map +1 -0
- package/dist/esnext/exporters/index.js +8 -0
- package/dist/esnext/exporters/index.js.map +1 -0
- package/dist/esnext/index-browser.d.ts +2 -3
- package/dist/esnext/index-browser.d.ts.map +1 -1
- package/dist/esnext/index-browser.js +2 -3
- package/dist/esnext/index-browser.js.map +1 -1
- package/dist/esnext/index-node.d.ts +3 -3
- package/dist/esnext/index-node.d.ts.map +1 -1
- package/dist/esnext/index-node.js +3 -3
- package/dist/esnext/index-node.js.map +1 -1
- package/dist/esnext/index.d.ts +3 -4
- package/dist/esnext/index.d.ts.map +1 -1
- package/dist/esnext/index.js +3 -4
- package/dist/esnext/index.js.map +1 -1
- package/dist/esnext/instrumentations/SessionRecorderHttpInstrumentationHooksNode.d.ts.map +1 -0
- package/dist/esnext/{SessionRecorderHttpInstrumentationHooksNode.js → instrumentations/SessionRecorderHttpInstrumentationHooksNode.js} +3 -3
- package/dist/esnext/instrumentations/SessionRecorderHttpInstrumentationHooksNode.js.map +1 -0
- package/dist/esnext/instrumentations/index-node.d.ts +2 -0
- package/dist/esnext/instrumentations/index-node.d.ts.map +1 -0
- package/dist/esnext/instrumentations/index-node.js +2 -0
- package/dist/esnext/instrumentations/index-node.js.map +1 -0
- package/dist/esnext/sdk/mask.js +1 -1
- package/dist/esnext/sdk/mask.js.map +1 -1
- package/dist/esnext/sdk/save-continuous-deb-session.js +1 -1
- package/dist/esnext/sdk/save-continuous-deb-session.js.map +1 -1
- package/dist/esnext/sdk/set-attribute.js +1 -1
- package/dist/esnext/sdk/set-attribute.js.map +1 -1
- package/dist/esnext/tsconfig.esnext.tsbuildinfo +1 -1
- package/dist/src/SessionRecorderIdGenerator.d.ts +1 -6
- package/dist/src/SessionRecorderIdGenerator.d.ts.map +1 -1
- package/dist/src/SessionRecorderIdGenerator.js +2 -10
- package/dist/src/SessionRecorderIdGenerator.js.map +1 -1
- package/dist/src/SessionRecorderTraceIdRatioBasedSampler.js +1 -1
- package/dist/src/SessionRecorderTraceIdRatioBasedSampler.js.map +1 -1
- package/dist/{esnext → src/constants}/constants.base.d.ts +14 -0
- package/dist/src/constants/constants.base.d.ts.map +1 -0
- package/dist/src/{constants.base.js → constants/constants.base.js} +15 -1
- package/dist/src/constants/constants.base.js.map +1 -0
- package/dist/src/constants/constants.browser.d.ts.map +1 -0
- package/dist/src/constants/constants.browser.js.map +1 -0
- package/dist/src/constants/constants.node.d.ts.map +1 -0
- package/dist/src/constants/constants.node.js.map +1 -0
- package/dist/src/exporters/SessionRecorderBrowserTraceExporter.d.ts +31 -0
- package/dist/src/exporters/SessionRecorderBrowserTraceExporter.d.ts.map +1 -0
- package/dist/src/exporters/SessionRecorderBrowserTraceExporter.js +163 -0
- package/dist/src/exporters/SessionRecorderBrowserTraceExporter.js.map +1 -0
- package/dist/src/exporters/SessionRecorderGrpcLogsExporter.d.ts +22 -0
- package/dist/src/exporters/SessionRecorderGrpcLogsExporter.d.ts.map +1 -0
- package/dist/src/exporters/SessionRecorderGrpcLogsExporter.js +37 -0
- package/dist/src/exporters/SessionRecorderGrpcLogsExporter.js.map +1 -0
- package/dist/src/exporters/SessionRecorderGrpcTraceExporter.d.ts +22 -0
- package/dist/src/exporters/SessionRecorderGrpcTraceExporter.d.ts.map +1 -0
- package/dist/src/exporters/SessionRecorderGrpcTraceExporter.js +34 -0
- package/dist/src/exporters/SessionRecorderGrpcTraceExporter.js.map +1 -0
- package/dist/src/exporters/SessionRecorderHttpLogsExporter.d.ts +20 -0
- package/dist/src/exporters/SessionRecorderHttpLogsExporter.d.ts.map +1 -0
- package/dist/src/exporters/SessionRecorderHttpLogsExporter.js +36 -0
- package/dist/src/exporters/SessionRecorderHttpLogsExporter.js.map +1 -0
- package/dist/src/exporters/SessionRecorderHttpTraceExporter.d.ts +25 -0
- package/dist/src/exporters/SessionRecorderHttpTraceExporter.d.ts.map +1 -0
- package/dist/src/exporters/SessionRecorderHttpTraceExporter.js +42 -0
- package/dist/src/exporters/SessionRecorderHttpTraceExporter.js.map +1 -0
- package/dist/src/exporters/SessionRecorderLogsExporterWrapper.d.ts +13 -0
- package/dist/src/exporters/SessionRecorderLogsExporterWrapper.d.ts.map +1 -0
- package/dist/src/exporters/SessionRecorderLogsExporterWrapper.js +27 -0
- package/dist/src/exporters/SessionRecorderLogsExporterWrapper.js.map +1 -0
- package/dist/src/exporters/SessionRecorderTraceExporterWrapper.d.ts +13 -0
- package/dist/src/exporters/SessionRecorderTraceExporterWrapper.d.ts.map +1 -0
- package/dist/src/exporters/SessionRecorderTraceExporterWrapper.js +26 -0
- package/dist/src/exporters/SessionRecorderTraceExporterWrapper.js.map +1 -0
- package/dist/src/exporters/index-browser.d.ts +2 -0
- package/dist/src/exporters/index-browser.d.ts.map +1 -0
- package/dist/src/exporters/index-browser.js +18 -0
- package/dist/src/exporters/index-browser.js.map +1 -0
- package/dist/src/exporters/index-node.d.ts +7 -0
- package/dist/src/exporters/index-node.d.ts.map +1 -0
- package/dist/src/exporters/index-node.js +23 -0
- package/dist/src/exporters/index-node.js.map +1 -0
- package/dist/src/exporters/index.d.ts +8 -0
- package/dist/src/exporters/index.d.ts.map +1 -0
- package/dist/src/exporters/index.js +24 -0
- package/dist/src/exporters/index.js.map +1 -0
- package/dist/src/index-browser.d.ts +2 -3
- package/dist/src/index-browser.d.ts.map +1 -1
- package/dist/src/index-browser.js +3 -6
- package/dist/src/index-browser.js.map +1 -1
- package/dist/src/index-node.d.ts +3 -3
- package/dist/src/index-node.d.ts.map +1 -1
- package/dist/src/index-node.js +4 -5
- package/dist/src/index-node.js.map +1 -1
- package/dist/src/index.d.ts +3 -4
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/index.js +4 -8
- package/dist/src/index.js.map +1 -1
- package/dist/src/instrumentations/SessionRecorderHttpInstrumentationHooksNode.d.ts.map +1 -0
- package/dist/src/{SessionRecorderHttpInstrumentationHooksNode.js → instrumentations/SessionRecorderHttpInstrumentationHooksNode.js} +3 -3
- package/dist/src/instrumentations/SessionRecorderHttpInstrumentationHooksNode.js.map +1 -0
- package/dist/src/instrumentations/index-node.d.ts +2 -0
- package/dist/src/instrumentations/index-node.d.ts.map +1 -0
- package/dist/src/instrumentations/index-node.js +18 -0
- package/dist/src/instrumentations/index-node.js.map +1 -0
- package/dist/src/sdk/mask.js +1 -1
- package/dist/src/sdk/mask.js.map +1 -1
- package/dist/src/sdk/save-continuous-deb-session.js +1 -1
- package/dist/src/sdk/save-continuous-deb-session.js.map +1 -1
- package/dist/src/sdk/set-attribute.js +1 -1
- package/dist/src/sdk/set-attribute.js.map +1 -1
- package/package.json +10 -4
- package/src/SessionRecorderIdGenerator.ts +3 -22
- package/src/SessionRecorderTraceIdRatioBasedSampler.ts +1 -1
- package/src/{constants.base.ts → constants/constants.base.ts} +19 -0
- package/src/exporters/SessionRecorderBrowserTraceExporter.ts +212 -0
- package/src/exporters/SessionRecorderGrpcLogsExporter.ts +52 -0
- package/src/exporters/SessionRecorderGrpcTraceExporter.ts +50 -0
- package/src/exporters/SessionRecorderHttpLogsExporter.ts +58 -0
- package/src/exporters/SessionRecorderHttpTraceExporter.ts +65 -0
- package/src/exporters/SessionRecorderLogsExporterWrapper.ts +36 -0
- package/src/exporters/SessionRecorderTraceExporterWrapper.ts +36 -0
- package/src/exporters/index-browser.ts +1 -0
- package/src/exporters/index-node.ts +6 -0
- package/src/exporters/index.ts +7 -0
- package/src/index-browser.ts +2 -3
- package/src/index-node.ts +3 -3
- package/src/index.ts +3 -4
- package/src/{SessionRecorderHttpInstrumentationHooksNode.ts → instrumentations/SessionRecorderHttpInstrumentationHooksNode.ts} +3 -3
- package/src/instrumentations/index-node.ts +1 -0
- package/src/sdk/mask.ts +1 -1
- package/src/sdk/save-continuous-deb-session.ts +1 -1
- package/src/sdk/set-attribute.ts +1 -1
- package/dist/esm/SessionRecorderHttpInstrumentationHooksNode.d.ts.map +0 -1
- package/dist/esm/SessionRecorderHttpInstrumentationHooksNode.js.map +0 -1
- package/dist/esm/SessionRecorderHttpTraceExporterBrowser.d.ts +0 -26
- package/dist/esm/SessionRecorderHttpTraceExporterBrowser.d.ts.map +0 -1
- package/dist/esm/SessionRecorderHttpTraceExporterBrowser.js +0 -116
- package/dist/esm/SessionRecorderHttpTraceExporterBrowser.js.map +0 -1
- package/dist/esm/SessionRecorderJsonTraceSerializer.d.ts +0 -4
- package/dist/esm/SessionRecorderJsonTraceSerializer.d.ts.map +0 -1
- package/dist/esm/SessionRecorderJsonTraceSerializer.js +0 -26
- package/dist/esm/SessionRecorderJsonTraceSerializer.js.map +0 -1
- package/dist/esm/constants.base.d.ts.map +0 -1
- package/dist/esm/constants.base.js.map +0 -1
- package/dist/esm/constants.browser.d.ts.map +0 -1
- package/dist/esm/constants.browser.js.map +0 -1
- package/dist/esm/constants.node.d.ts.map +0 -1
- package/dist/esm/constants.node.js.map +0 -1
- package/dist/esnext/SessionRecorderHttpInstrumentationHooksNode.d.ts.map +0 -1
- package/dist/esnext/SessionRecorderHttpInstrumentationHooksNode.js.map +0 -1
- package/dist/esnext/SessionRecorderHttpTraceExporterBrowser.d.ts +0 -26
- package/dist/esnext/SessionRecorderHttpTraceExporterBrowser.d.ts.map +0 -1
- package/dist/esnext/SessionRecorderHttpTraceExporterBrowser.js +0 -82
- package/dist/esnext/SessionRecorderHttpTraceExporterBrowser.js.map +0 -1
- package/dist/esnext/SessionRecorderJsonTraceSerializer.d.ts +0 -4
- package/dist/esnext/SessionRecorderJsonTraceSerializer.d.ts.map +0 -1
- package/dist/esnext/SessionRecorderJsonTraceSerializer.js +0 -26
- package/dist/esnext/SessionRecorderJsonTraceSerializer.js.map +0 -1
- package/dist/esnext/constants.base.d.ts.map +0 -1
- package/dist/esnext/constants.base.js.map +0 -1
- package/dist/esnext/constants.browser.d.ts.map +0 -1
- package/dist/esnext/constants.browser.js.map +0 -1
- package/dist/esnext/constants.node.d.ts.map +0 -1
- package/dist/esnext/constants.node.js.map +0 -1
- package/dist/src/SessionRecorderHttpInstrumentationHooksNode.d.ts.map +0 -1
- package/dist/src/SessionRecorderHttpInstrumentationHooksNode.js.map +0 -1
- package/dist/src/SessionRecorderHttpTraceExporterBrowser.d.ts +0 -26
- package/dist/src/SessionRecorderHttpTraceExporterBrowser.d.ts.map +0 -1
- package/dist/src/SessionRecorderHttpTraceExporterBrowser.js +0 -86
- package/dist/src/SessionRecorderHttpTraceExporterBrowser.js.map +0 -1
- package/dist/src/SessionRecorderJsonTraceSerializer.d.ts +0 -4
- package/dist/src/SessionRecorderJsonTraceSerializer.d.ts.map +0 -1
- package/dist/src/SessionRecorderJsonTraceSerializer.js +0 -29
- package/dist/src/SessionRecorderJsonTraceSerializer.js.map +0 -1
- package/dist/src/constants.base.d.ts.map +0 -1
- package/dist/src/constants.base.js.map +0 -1
- package/dist/src/constants.browser.d.ts.map +0 -1
- package/dist/src/constants.browser.js.map +0 -1
- package/dist/src/constants.node.d.ts.map +0 -1
- package/dist/src/constants.node.js.map +0 -1
- package/src/SessionRecorderHttpTraceExporterBrowser.ts +0 -123
- package/src/SessionRecorderJsonTraceSerializer.ts +0 -43
- /package/dist/esm/{constants.browser.d.ts → constants/constants.browser.d.ts} +0 -0
- /package/dist/esm/{constants.browser.js → constants/constants.browser.js} +0 -0
- /package/dist/esm/{constants.node.d.ts → constants/constants.node.d.ts} +0 -0
- /package/dist/esm/{constants.node.js → constants/constants.node.js} +0 -0
- /package/dist/esm/{SessionRecorderHttpInstrumentationHooksNode.d.ts → instrumentations/SessionRecorderHttpInstrumentationHooksNode.d.ts} +0 -0
- /package/dist/esnext/{constants.browser.d.ts → constants/constants.browser.d.ts} +0 -0
- /package/dist/esnext/{constants.browser.js → constants/constants.browser.js} +0 -0
- /package/dist/esnext/{constants.node.d.ts → constants/constants.node.d.ts} +0 -0
- /package/dist/esnext/{constants.node.js → constants/constants.node.js} +0 -0
- /package/dist/esnext/{SessionRecorderHttpInstrumentationHooksNode.d.ts → instrumentations/SessionRecorderHttpInstrumentationHooksNode.d.ts} +0 -0
- /package/dist/src/{constants.browser.d.ts → constants/constants.browser.d.ts} +0 -0
- /package/dist/src/{constants.browser.js → constants/constants.browser.js} +0 -0
- /package/dist/src/{constants.node.d.ts → constants/constants.node.d.ts} +0 -0
- /package/dist/src/{constants.node.js → constants/constants.node.js} +0 -0
- /package/dist/src/{SessionRecorderHttpInstrumentationHooksNode.d.ts → instrumentations/SessionRecorderHttpInstrumentationHooksNode.d.ts} +0 -0
- /package/src/{constants.browser.ts → constants/constants.browser.ts} +0 -0
- /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"]}
|
package/dist/src/sdk/mask.js
CHANGED
|
@@ -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',
|
package/dist/src/sdk/mask.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mask.js","sourceRoot":"","sources":["../../../src/sdk/mask.ts"],"names":[],"mappings":";;;AACA,
|
|
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,
|
|
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,
|
|
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.
|
|
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-
|
|
42
|
-
"@opentelemetry/otlp-
|
|
43
|
-
"@opentelemetry/
|
|
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(
|
|
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
|
+
}
|