diff --git a/README.md b/README.md index d86bc9f..a0714ef 100644 --- a/README.md +++ b/README.md @@ -38,9 +38,12 @@ This is all that is needed to trace your app on Vercel or any other platform exp ## ๐Ÿงช What exactly is this package doing -This package utilizes the [`exports`](https://nodejs.org/api/packages.html#exports) API, enabling us to import the OpenTelemetry SDK in Node only. When you import `registerOTel` in a file intended for the edge, it returns an empty function because OpenTelemetry doesn't support the edge. However, if you import the same function in a file designed for Node, you'll receive a standard function that sets up the OpenTelemetry SDK correctly. +This package utilizes the [`exports`](https://nodejs.org/api/packages.html#exports) API, enabling us to import the OpenTelemetry SDK in Node and Edge runtimes. When you import `registerOTel`, you'll receive a standard function that sets up the OpenTelemetry SDK correctly. -The OpenTelemetry SDK initialization itself is straightforward. For more details, please see [the code](https://github.com/vercel/otel/blob/main/src/index.node.ts). +The OpenTelemetry SDK initialization itself is straightforward. For more details, please see the code, + +- [node](https://github.com/vercel/otel/blob/main/src/index.node.ts) +- [edge](https://github.com/vercel/otel/blob/main/src/index.edge.ts) ## ๐Ÿ“„ License diff --git a/package.json b/package.json index c122ad3..bc5274b 100644 --- a/package.json +++ b/package.json @@ -50,15 +50,22 @@ "license": "MIT", "devDependencies": { "@types/node": "18.16.1", - "typescript": "^5.0.4" + "typescript": "5.0.4" }, "dependencies": { - "@opentelemetry/api": "^1.4.1", - "@opentelemetry/exporter-trace-otlp-grpc": "^0.38.0", - "@opentelemetry/resources": "^1.12.0", - "@opentelemetry/sdk-node": "^0.38.0", - "@opentelemetry/sdk-trace-node": "^1.12.0", - "@opentelemetry/semantic-conventions": "^1.12.0" + "@opentelemetry/api": "1.4.1", + "@opentelemetry/context-async-hooks": "1.15.2", + "@opentelemetry/core": "1.15.2", + "@opentelemetry/exporter-trace-otlp-grpc": "0.41.2", + "@opentelemetry/exporter-trace-otlp-http": "0.41.2", + "@opentelemetry/otlp-exporter-base": "0.41.2", + "@opentelemetry/otlp-transformer": "0.41.2", + "@opentelemetry/resources": "1.15.2", + "@opentelemetry/sdk-node": "0.41.2", + "@opentelemetry/sdk-trace-base": "1.15.2", + "@opentelemetry/sdk-trace-node": "1.15.2", + "@opentelemetry/semantic-conventions": "1.15.2", + "performance-polyfill": "0.0.3" }, "packageManager": "pnpm@7.24.0", "engines": { diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index ad2c121..d2b4e92 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -1,30 +1,61 @@ -lockfileVersion: 5.4 - -specifiers: - '@opentelemetry/api': ^1.4.1 - '@opentelemetry/exporter-trace-otlp-grpc': ^0.38.0 - '@opentelemetry/resources': ^1.12.0 - '@opentelemetry/sdk-node': ^0.38.0 - '@opentelemetry/sdk-trace-node': ^1.12.0 - '@opentelemetry/semantic-conventions': ^1.12.0 - '@types/node': 18.16.1 - typescript: ^5.0.4 +lockfileVersion: '6.0' + +settings: + autoInstallPeers: true + excludeLinksFromLockfile: false dependencies: - '@opentelemetry/api': 1.4.1 - '@opentelemetry/exporter-trace-otlp-grpc': 0.38.0_@opentelemetry+api@1.4.1 - '@opentelemetry/resources': 1.12.0_@opentelemetry+api@1.4.1 - '@opentelemetry/sdk-node': 0.38.0_@opentelemetry+api@1.4.1 - '@opentelemetry/sdk-trace-node': 1.12.0_@opentelemetry+api@1.4.1 - '@opentelemetry/semantic-conventions': 1.12.0 + '@opentelemetry/api': + specifier: 1.4.1 + version: 1.4.1 + '@opentelemetry/context-async-hooks': + specifier: 1.15.2 + version: 1.15.2(@opentelemetry/api@1.4.1) + '@opentelemetry/core': + specifier: 1.15.2 + version: 1.15.2(@opentelemetry/api@1.4.1) + '@opentelemetry/exporter-trace-otlp-grpc': + specifier: 0.41.2 + version: 0.41.2(@opentelemetry/api@1.4.1) + '@opentelemetry/exporter-trace-otlp-http': + specifier: 0.41.2 + version: 0.41.2(@opentelemetry/api@1.4.1) + '@opentelemetry/otlp-exporter-base': + specifier: 0.41.2 + version: 0.41.2(@opentelemetry/api@1.4.1) + '@opentelemetry/otlp-transformer': + specifier: 0.41.2 + version: 0.41.2(@opentelemetry/api@1.4.1) + '@opentelemetry/resources': + specifier: 1.15.2 + version: 1.15.2(@opentelemetry/api@1.4.1) + '@opentelemetry/sdk-node': + specifier: 0.41.2 + version: 0.41.2(@opentelemetry/api@1.4.1) + '@opentelemetry/sdk-trace-base': + specifier: 1.15.2 + version: 1.15.2(@opentelemetry/api@1.4.1) + '@opentelemetry/sdk-trace-node': + specifier: 1.15.2 + version: 1.15.2(@opentelemetry/api@1.4.1) + '@opentelemetry/semantic-conventions': + specifier: 1.15.2 + version: 1.15.2 + performance-polyfill: + specifier: 0.0.3 + version: 0.0.3 devDependencies: - '@types/node': 18.16.1 - typescript: 5.0.4 + '@types/node': + specifier: 18.16.1 + version: 18.16.1 + typescript: + specifier: 5.0.4 + version: 5.0.4 packages: - /@grpc/grpc-js/1.8.14: + /@grpc/grpc-js@1.8.14: resolution: {integrity: sha512-w84maJ6CKl5aApCMzFll0hxtFNT6or9WwMslobKaqWUEf1K+zhlL43bSQhFreyYWIWR+Z0xnVFC1KtLm4ZpM/A==} engines: {node: ^8.13.0 || >=10.10.0} dependencies: @@ -32,7 +63,7 @@ packages: '@types/node': 18.16.1 dev: false - /@grpc/proto-loader/0.7.6: + /@grpc/proto-loader@0.7.6: resolution: {integrity: sha512-QyAXR8Hyh7uMDmveWxDSUcJr9NAWaZ2I6IXgAYvQmfflwouTM+rArE2eEaCtLlRqO81j7pRLCt81IefUei6Zbw==} engines: {node: '>=6'} hasBin: true @@ -44,13 +75,20 @@ packages: yargs: 16.2.0 dev: false - /@opentelemetry/api/1.4.1: + /@opentelemetry/api-logs@0.41.2: + resolution: {integrity: sha512-JEV2RAqijAFdWeT6HddYymfnkiRu2ASxoTBr4WsnGJhOjWZkEy6vp+Sx9ozr1NaIODOa2HUyckExIqQjn6qywQ==} + engines: {node: '>=14'} + dependencies: + '@opentelemetry/api': 1.4.1 + dev: false + + /@opentelemetry/api@1.4.1: resolution: {integrity: sha512-O2yRJce1GOc6PAy3QxFM4NzFiWzvScDC1/5ihYBL6BUEVdq0XMWN01sppE+H6bBXbaFYipjwFLEWLg5PaSOThA==} engines: {node: '>=8.0.0'} dev: false - /@opentelemetry/context-async-hooks/1.12.0_@opentelemetry+api@1.4.1: - resolution: {integrity: sha512-PmwAanPNWCyS9JYFzhzVzHgviLhc0UHjOwdth+hp3HgQQ9XZZNE635P8JhAUHZmbghW9/qQFafRWOS4VN9VVnQ==} + /@opentelemetry/context-async-hooks@1.15.2(@opentelemetry/api@1.4.1): + resolution: {integrity: sha512-VAMHG67srGFQDG/N2ns5AyUT9vUcoKpZ/NpJ5fDQIPfJd7t3ju+aHwvDsMcrYBWuCh03U3Ky6o16+872CZchBg==} engines: {node: '>=14'} peerDependencies: '@opentelemetry/api': '>=1.0.0 <1.5.0' @@ -58,313 +96,350 @@ packages: '@opentelemetry/api': 1.4.1 dev: false - /@opentelemetry/core/1.12.0_@opentelemetry+api@1.4.1: - resolution: {integrity: sha512-4DWYNb3dLs2mSCGl65jY3aEgbvPWSHVQV/dmDWiYeWUrMakZQFcymqZOSUNZO0uDrEJoxMu8O5tZktX6UKFwag==} + /@opentelemetry/core@1.15.2(@opentelemetry/api@1.4.1): + resolution: {integrity: sha512-+gBv15ta96WqkHZaPpcDHiaz0utiiHZVfm2YOYSqFGrUaJpPkMoSuLBB58YFQGi6Rsb9EHos84X6X5+9JspmLw==} engines: {node: '>=14'} peerDependencies: '@opentelemetry/api': '>=1.0.0 <1.5.0' dependencies: '@opentelemetry/api': 1.4.1 - '@opentelemetry/semantic-conventions': 1.12.0 + '@opentelemetry/semantic-conventions': 1.15.2 dev: false - /@opentelemetry/exporter-jaeger/1.12.0_@opentelemetry+api@1.4.1: - resolution: {integrity: sha512-MGWslvok6tlNCHexHGnfXrSyobBqUDh4YOLENt2MeQ/F974SyVG4e73TD/CDM+227/rRM587hJ8dQBzvwUac/g==} + /@opentelemetry/exporter-jaeger@1.15.2(@opentelemetry/api@1.4.1): + resolution: {integrity: sha512-BwYd5836GYvuiQcF4l5X0ca09jGJr/F37MMGyz94VH0b1dp0uYBwRJw2CQh56RlVZEdpKv29JyDRVZ/4UrRgLQ==} engines: {node: '>=14'} peerDependencies: '@opentelemetry/api': ^1.0.0 dependencies: '@opentelemetry/api': 1.4.1 - '@opentelemetry/core': 1.12.0_@opentelemetry+api@1.4.1 - '@opentelemetry/sdk-trace-base': 1.12.0_@opentelemetry+api@1.4.1 - '@opentelemetry/semantic-conventions': 1.12.0 + '@opentelemetry/core': 1.15.2(@opentelemetry/api@1.4.1) + '@opentelemetry/sdk-trace-base': 1.15.2(@opentelemetry/api@1.4.1) + '@opentelemetry/semantic-conventions': 1.15.2 jaeger-client: 3.19.0 dev: false - /@opentelemetry/exporter-trace-otlp-grpc/0.38.0_@opentelemetry+api@1.4.1: - resolution: {integrity: sha512-9pwDRnBr7qDeAZ81WHbM+aA1GSu9p8nh2ARmKgA4YrCo1E9IY94goaSBV03pbGe7gh/frOp18FQMvXmiRITGUg==} + /@opentelemetry/exporter-trace-otlp-grpc@0.41.2(@opentelemetry/api@1.4.1): + resolution: {integrity: sha512-tRM/mq7PFj7mXCws5ICMVp/rmgU93JvZdoLE0uLj4tugNz231u2ZgeRYXulBjdeHM88ZQSsWTJMu2mvr/3JV1A==} engines: {node: '>=14'} peerDependencies: '@opentelemetry/api': ^1.0.0 dependencies: '@grpc/grpc-js': 1.8.14 '@opentelemetry/api': 1.4.1 - '@opentelemetry/core': 1.12.0_@opentelemetry+api@1.4.1 - '@opentelemetry/otlp-grpc-exporter-base': 0.38.0_@opentelemetry+api@1.4.1 - '@opentelemetry/otlp-transformer': 0.38.0_@opentelemetry+api@1.4.1 - '@opentelemetry/resources': 1.12.0_@opentelemetry+api@1.4.1 - '@opentelemetry/sdk-trace-base': 1.12.0_@opentelemetry+api@1.4.1 + '@opentelemetry/core': 1.15.2(@opentelemetry/api@1.4.1) + '@opentelemetry/otlp-grpc-exporter-base': 0.41.2(@opentelemetry/api@1.4.1) + '@opentelemetry/otlp-transformer': 0.41.2(@opentelemetry/api@1.4.1) + '@opentelemetry/resources': 1.15.2(@opentelemetry/api@1.4.1) + '@opentelemetry/sdk-trace-base': 1.15.2(@opentelemetry/api@1.4.1) dev: false - /@opentelemetry/exporter-trace-otlp-http/0.38.0_@opentelemetry+api@1.4.1: - resolution: {integrity: sha512-AWpTCyijC7kt2DbLj8FmdlRquA6/rTXZ+3U4MVl4P2YNI7KLUnx/FEhn2BMTB0+rOy7UxSAocqz2tJ/5Ss/6Ng==} + /@opentelemetry/exporter-trace-otlp-http@0.41.2(@opentelemetry/api@1.4.1): + resolution: {integrity: sha512-Y0fGLipjZXLMelWtlS1/MDtrPxf25oM408KukRdkN31a1MEFo4h/ZkNwS7ZfmqHGUa+4rWRt2bi6JBiqy7Ytgw==} engines: {node: '>=14'} peerDependencies: '@opentelemetry/api': ^1.0.0 dependencies: '@opentelemetry/api': 1.4.1 - '@opentelemetry/core': 1.12.0_@opentelemetry+api@1.4.1 - '@opentelemetry/otlp-exporter-base': 0.38.0_@opentelemetry+api@1.4.1 - '@opentelemetry/otlp-transformer': 0.38.0_@opentelemetry+api@1.4.1 - '@opentelemetry/resources': 1.12.0_@opentelemetry+api@1.4.1 - '@opentelemetry/sdk-trace-base': 1.12.0_@opentelemetry+api@1.4.1 + '@opentelemetry/core': 1.15.2(@opentelemetry/api@1.4.1) + '@opentelemetry/otlp-exporter-base': 0.41.2(@opentelemetry/api@1.4.1) + '@opentelemetry/otlp-transformer': 0.41.2(@opentelemetry/api@1.4.1) + '@opentelemetry/resources': 1.15.2(@opentelemetry/api@1.4.1) + '@opentelemetry/sdk-trace-base': 1.15.2(@opentelemetry/api@1.4.1) dev: false - /@opentelemetry/exporter-trace-otlp-proto/0.38.0_@opentelemetry+api@1.4.1: - resolution: {integrity: sha512-M1YctP+T6485noDAJPsnpsx85xsfqyCr06CadTQBJHIgjStgsKTDA86iVpv7XEqW5lwdIThn/boDou2vyi0bQA==} + /@opentelemetry/exporter-trace-otlp-proto@0.41.2(@opentelemetry/api@1.4.1): + resolution: {integrity: sha512-IGZga9IIckqYE3IpRE9FO9G5umabObIrChlXUHYpMJtDgx797dsb3qXCvLeuAwB+HoB8NsEZstlzmLnoa6/HmA==} engines: {node: '>=14'} peerDependencies: '@opentelemetry/api': ^1.0.0 dependencies: '@opentelemetry/api': 1.4.1 - '@opentelemetry/core': 1.12.0_@opentelemetry+api@1.4.1 - '@opentelemetry/otlp-exporter-base': 0.38.0_@opentelemetry+api@1.4.1 - '@opentelemetry/otlp-proto-exporter-base': 0.38.0_@opentelemetry+api@1.4.1 - '@opentelemetry/otlp-transformer': 0.38.0_@opentelemetry+api@1.4.1 - '@opentelemetry/resources': 1.12.0_@opentelemetry+api@1.4.1 - '@opentelemetry/sdk-trace-base': 1.12.0_@opentelemetry+api@1.4.1 + '@opentelemetry/core': 1.15.2(@opentelemetry/api@1.4.1) + '@opentelemetry/otlp-exporter-base': 0.41.2(@opentelemetry/api@1.4.1) + '@opentelemetry/otlp-proto-exporter-base': 0.41.2(@opentelemetry/api@1.4.1) + '@opentelemetry/otlp-transformer': 0.41.2(@opentelemetry/api@1.4.1) + '@opentelemetry/resources': 1.15.2(@opentelemetry/api@1.4.1) + '@opentelemetry/sdk-trace-base': 1.15.2(@opentelemetry/api@1.4.1) dev: false - /@opentelemetry/exporter-zipkin/1.12.0_@opentelemetry+api@1.4.1: - resolution: {integrity: sha512-HJ4ww7OjVIV4x5ZGgY+h+D1JS0GsCtnHuqZUVHl7EFFQxMGpbQcf5eISRtwqgQwlQKh2iqrEbiHdDyzbgA/7XQ==} + /@opentelemetry/exporter-zipkin@1.15.2(@opentelemetry/api@1.4.1): + resolution: {integrity: sha512-j9dPe8tyx4KqIqJAfZ/LCYfkF9+ggsT0V1+bVg9ZKTBNcLf5dTsTMdcxUxc/9s599kgcn6UERnti/tozbzwa6Q==} engines: {node: '>=14'} peerDependencies: '@opentelemetry/api': ^1.0.0 dependencies: '@opentelemetry/api': 1.4.1 - '@opentelemetry/core': 1.12.0_@opentelemetry+api@1.4.1 - '@opentelemetry/resources': 1.12.0_@opentelemetry+api@1.4.1 - '@opentelemetry/sdk-trace-base': 1.12.0_@opentelemetry+api@1.4.1 - '@opentelemetry/semantic-conventions': 1.12.0 + '@opentelemetry/core': 1.15.2(@opentelemetry/api@1.4.1) + '@opentelemetry/resources': 1.15.2(@opentelemetry/api@1.4.1) + '@opentelemetry/sdk-trace-base': 1.15.2(@opentelemetry/api@1.4.1) + '@opentelemetry/semantic-conventions': 1.15.2 dev: false - /@opentelemetry/instrumentation/0.38.0_@opentelemetry+api@1.4.1: - resolution: {integrity: sha512-wr1WkIbzHGV+oz6SCme88D2c+zNG23COkCjcida8b3jIzX2lJafOpEHPDcbBF38F8ChkRSj/tVnx1wnYAXZvbA==} + /@opentelemetry/instrumentation@0.41.2(@opentelemetry/api@1.4.1): + resolution: {integrity: sha512-rxU72E0pKNH6ae2w5+xgVYZLzc5mlxAbGzF4shxMVK8YC2QQsfN38B2GPbj0jvrKWWNUElfclQ+YTykkNg/grw==} engines: {node: '>=14'} peerDependencies: '@opentelemetry/api': ^1.3.0 dependencies: '@opentelemetry/api': 1.4.1 - require-in-the-middle: 6.0.0 - semver: 7.5.0 + '@types/shimmer': 1.0.2 + import-in-the-middle: 1.4.2 + require-in-the-middle: 7.2.0 + semver: 7.5.4 shimmer: 1.2.1 transitivePeerDependencies: - supports-color dev: false - /@opentelemetry/otlp-exporter-base/0.38.0_@opentelemetry+api@1.4.1: - resolution: {integrity: sha512-VWQo7vUDyW/7/FT8RErAtM/29i/fllCc9xMtnK7kDuheAjJU68zrZ88bQOsLamHvOCU3KVpozjfTZVxZKQRYXw==} + /@opentelemetry/otlp-exporter-base@0.41.2(@opentelemetry/api@1.4.1): + resolution: {integrity: sha512-pfwa6d+Dax3itZcGWiA0AoXeVaCuZbbqUTsCtOysd2re8C2PWXNxDONUfBWsn+KgxAdi+ljwTjJGiaVLDaIEvQ==} engines: {node: '>=14'} peerDependencies: '@opentelemetry/api': ^1.0.0 dependencies: '@opentelemetry/api': 1.4.1 - '@opentelemetry/core': 1.12.0_@opentelemetry+api@1.4.1 + '@opentelemetry/core': 1.15.2(@opentelemetry/api@1.4.1) dev: false - /@opentelemetry/otlp-grpc-exporter-base/0.38.0_@opentelemetry+api@1.4.1: - resolution: {integrity: sha512-wwGxeJt80w+mIA0aE+K9OshkyEoYQrXuwXl1TNZBs9K7qE4AAiEuxU9cbd3VX3BTsp+xzNcDRWIb9WWkiU9+kA==} + /@opentelemetry/otlp-grpc-exporter-base@0.41.2(@opentelemetry/api@1.4.1): + resolution: {integrity: sha512-OErK8dYjXG01XIMIpmOV2SzL9ctkZ0Nyhf2UumICOAKtgLvR5dG1JMlsNVp8Jn0RzpsKc6Urv7JpP69wzRXN+A==} engines: {node: '>=14'} peerDependencies: '@opentelemetry/api': ^1.0.0 dependencies: '@grpc/grpc-js': 1.8.14 - '@grpc/proto-loader': 0.7.6 '@opentelemetry/api': 1.4.1 - '@opentelemetry/core': 1.12.0_@opentelemetry+api@1.4.1 - '@opentelemetry/otlp-exporter-base': 0.38.0_@opentelemetry+api@1.4.1 + '@opentelemetry/core': 1.15.2(@opentelemetry/api@1.4.1) + '@opentelemetry/otlp-exporter-base': 0.41.2(@opentelemetry/api@1.4.1) + protobufjs: 7.2.3 dev: false - /@opentelemetry/otlp-proto-exporter-base/0.38.0_@opentelemetry+api@1.4.1: - resolution: {integrity: sha512-/Z68pIgFv+IwQQfJOJQ9ga7KZ5ET2cFAnpWO9JsxrHjW9glmX+T9RgcF7rfSAFl2JSM9A+kQ11WYRjE2tNKxqg==} + /@opentelemetry/otlp-proto-exporter-base@0.41.2(@opentelemetry/api@1.4.1): + resolution: {integrity: sha512-BxmEMiP6tHiFroe5/dTt9BsxCci7BTLtF7A6d4DKHLiLweWWZxQ9l7hON7qt/IhpKrQcAFD1OzZ1Gq2ZkNzhCw==} engines: {node: '>=14'} peerDependencies: '@opentelemetry/api': ^1.0.0 dependencies: '@opentelemetry/api': 1.4.1 - '@opentelemetry/core': 1.12.0_@opentelemetry+api@1.4.1 - '@opentelemetry/otlp-exporter-base': 0.38.0_@opentelemetry+api@1.4.1 + '@opentelemetry/core': 1.15.2(@opentelemetry/api@1.4.1) + '@opentelemetry/otlp-exporter-base': 0.41.2(@opentelemetry/api@1.4.1) protobufjs: 7.2.3 dev: false - /@opentelemetry/otlp-transformer/0.38.0_@opentelemetry+api@1.4.1: - resolution: {integrity: sha512-ykQEipby0NVSi2ih5E8J2GNJ6y9zYDPSef0nD8j33XPKxfyVG5184rUrCsh6TIk1d/GlYl8gB9Wy4TdRvwl6kA==} + /@opentelemetry/otlp-transformer@0.41.2(@opentelemetry/api@1.4.1): + resolution: {integrity: sha512-jJbPwB0tNu2v+Xi0c/v/R3YBLJKLonw1p+v3RVjT2VfzeUyzSp/tBeVdY7RZtL6dzZpA9XSmp8UEfWIFQo33yA==} engines: {node: '>=14'} peerDependencies: '@opentelemetry/api': '>=1.3.0 <1.5.0' dependencies: '@opentelemetry/api': 1.4.1 - '@opentelemetry/core': 1.12.0_@opentelemetry+api@1.4.1 - '@opentelemetry/resources': 1.12.0_@opentelemetry+api@1.4.1 - '@opentelemetry/sdk-metrics': 1.12.0_@opentelemetry+api@1.4.1 - '@opentelemetry/sdk-trace-base': 1.12.0_@opentelemetry+api@1.4.1 + '@opentelemetry/api-logs': 0.41.2 + '@opentelemetry/core': 1.15.2(@opentelemetry/api@1.4.1) + '@opentelemetry/resources': 1.15.2(@opentelemetry/api@1.4.1) + '@opentelemetry/sdk-logs': 0.41.2(@opentelemetry/api-logs@0.41.2)(@opentelemetry/api@1.4.1) + '@opentelemetry/sdk-metrics': 1.15.2(@opentelemetry/api@1.4.1) + '@opentelemetry/sdk-trace-base': 1.15.2(@opentelemetry/api@1.4.1) dev: false - /@opentelemetry/propagator-b3/1.12.0_@opentelemetry+api@1.4.1: - resolution: {integrity: sha512-WFcn98075QPc2zE1obhKydJHUehI5/HuLoelPEVwATj+487hjCwjHj9r2fgmQkWpvuNSB7CJaA0ys6qqq1N6lg==} + /@opentelemetry/propagator-b3@1.15.2(@opentelemetry/api@1.4.1): + resolution: {integrity: sha512-ZSrL3DpMEDsjD8dPt9Ze3ue53nEXJt512KyxXlLgLWnSNbe1mrWaXWkh7OLDoVJh9LqFw+tlvAhDVt/x3DaFGg==} engines: {node: '>=14'} peerDependencies: '@opentelemetry/api': '>=1.0.0 <1.5.0' dependencies: '@opentelemetry/api': 1.4.1 - '@opentelemetry/core': 1.12.0_@opentelemetry+api@1.4.1 + '@opentelemetry/core': 1.15.2(@opentelemetry/api@1.4.1) dev: false - /@opentelemetry/propagator-jaeger/1.12.0_@opentelemetry+api@1.4.1: - resolution: {integrity: sha512-ugtWF7GC6X5RIJ0+iMwW2iVAGNs206CAeq8XQ8OkJRg+v0lp4H0/i+gJ4hubTT8NIL5a3IxtIrAENPLIGdLucQ==} + /@opentelemetry/propagator-jaeger@1.15.2(@opentelemetry/api@1.4.1): + resolution: {integrity: sha512-6m1yu7PVDIRz6BwA36lacfBZJCfAEHKgu+kSyukNwVdVjsTNeyD9xNPQnkl0WN7Rvhk8/yWJ83tLPEyGhk1wCQ==} engines: {node: '>=14'} peerDependencies: '@opentelemetry/api': '>=1.0.0 <1.5.0' dependencies: '@opentelemetry/api': 1.4.1 - '@opentelemetry/core': 1.12.0_@opentelemetry+api@1.4.1 + '@opentelemetry/core': 1.15.2(@opentelemetry/api@1.4.1) dev: false - /@opentelemetry/resources/1.12.0_@opentelemetry+api@1.4.1: - resolution: {integrity: sha512-gunMKXG0hJrR0LXrqh7BVbziA/+iJBL3ZbXCXO64uY+SrExkwoyJkpiq9l5ismkGF/A20mDEV7tGwh+KyPw00Q==} + /@opentelemetry/resources@1.15.2(@opentelemetry/api@1.4.1): + resolution: {integrity: sha512-xmMRLenT9CXmm5HMbzpZ1hWhaUowQf8UB4jMjFlAxx1QzQcsD3KFNAVX/CAWzFPtllTyTplrA4JrQ7sCH3qmYw==} engines: {node: '>=14'} peerDependencies: '@opentelemetry/api': '>=1.0.0 <1.5.0' dependencies: '@opentelemetry/api': 1.4.1 - '@opentelemetry/core': 1.12.0_@opentelemetry+api@1.4.1 - '@opentelemetry/semantic-conventions': 1.12.0 + '@opentelemetry/core': 1.15.2(@opentelemetry/api@1.4.1) + '@opentelemetry/semantic-conventions': 1.15.2 dev: false - /@opentelemetry/sdk-metrics/1.12.0_@opentelemetry+api@1.4.1: - resolution: {integrity: sha512-zOy88Jfk88eTxqu+9ypHLs184dGydJocSWtvWMY10QKVVaxhC3SLKa0uxI/zBtD9S+x0LP65wxrTSfSoUNtCOA==} + /@opentelemetry/sdk-logs@0.41.2(@opentelemetry/api-logs@0.41.2)(@opentelemetry/api@1.4.1): + resolution: {integrity: sha512-smqKIw0tTW15waj7BAPHFomii5c3aHnSE4LQYTszGoK5P9nZs8tEAIpu15UBxi3aG31ZfsLmm4EUQkjckdlFrw==} + engines: {node: '>=14'} + peerDependencies: + '@opentelemetry/api': '>=1.4.0 <1.5.0' + '@opentelemetry/api-logs': '>=0.39.1' + dependencies: + '@opentelemetry/api': 1.4.1 + '@opentelemetry/api-logs': 0.41.2 + '@opentelemetry/core': 1.15.2(@opentelemetry/api@1.4.1) + '@opentelemetry/resources': 1.15.2(@opentelemetry/api@1.4.1) + dev: false + + /@opentelemetry/sdk-metrics@1.15.2(@opentelemetry/api@1.4.1): + resolution: {integrity: sha512-9aIlcX8GnhcsAHW/Wl8bzk4ZnWTpNlLtud+fxUfBtFATu6OZ6TrGrF4JkT9EVrnoxwtPIDtjHdEsSjOqisY/iA==} engines: {node: '>=14'} peerDependencies: '@opentelemetry/api': '>=1.3.0 <1.5.0' dependencies: '@opentelemetry/api': 1.4.1 - '@opentelemetry/core': 1.12.0_@opentelemetry+api@1.4.1 - '@opentelemetry/resources': 1.12.0_@opentelemetry+api@1.4.1 + '@opentelemetry/core': 1.15.2(@opentelemetry/api@1.4.1) + '@opentelemetry/resources': 1.15.2(@opentelemetry/api@1.4.1) lodash.merge: 4.6.2 dev: false - /@opentelemetry/sdk-node/0.38.0_@opentelemetry+api@1.4.1: - resolution: {integrity: sha512-L91SSwq5Et9348ONtQGEimSAEKaqgJxoScRgh7OB/7OlIG0Q6l/pyIGULXtZkAlMMkiWdQOiYFkLV+0LLZr+JA==} + /@opentelemetry/sdk-node@0.41.2(@opentelemetry/api@1.4.1): + resolution: {integrity: sha512-t3vaB5ajoXLtVFoL8TSoSgaVATmOyUfkIfBE4nvykm0dM2vQjMS/SUUelzR06eiPTbMPsr2UkevWhy2/oXy2vg==} engines: {node: '>=14'} peerDependencies: '@opentelemetry/api': '>=1.3.0 <1.5.0' dependencies: '@opentelemetry/api': 1.4.1 - '@opentelemetry/core': 1.12.0_@opentelemetry+api@1.4.1 - '@opentelemetry/exporter-jaeger': 1.12.0_@opentelemetry+api@1.4.1 - '@opentelemetry/exporter-trace-otlp-grpc': 0.38.0_@opentelemetry+api@1.4.1 - '@opentelemetry/exporter-trace-otlp-http': 0.38.0_@opentelemetry+api@1.4.1 - '@opentelemetry/exporter-trace-otlp-proto': 0.38.0_@opentelemetry+api@1.4.1 - '@opentelemetry/exporter-zipkin': 1.12.0_@opentelemetry+api@1.4.1 - '@opentelemetry/instrumentation': 0.38.0_@opentelemetry+api@1.4.1 - '@opentelemetry/resources': 1.12.0_@opentelemetry+api@1.4.1 - '@opentelemetry/sdk-metrics': 1.12.0_@opentelemetry+api@1.4.1 - '@opentelemetry/sdk-trace-base': 1.12.0_@opentelemetry+api@1.4.1 - '@opentelemetry/sdk-trace-node': 1.12.0_@opentelemetry+api@1.4.1 - '@opentelemetry/semantic-conventions': 1.12.0 + '@opentelemetry/api-logs': 0.41.2 + '@opentelemetry/core': 1.15.2(@opentelemetry/api@1.4.1) + '@opentelemetry/exporter-jaeger': 1.15.2(@opentelemetry/api@1.4.1) + '@opentelemetry/exporter-trace-otlp-grpc': 0.41.2(@opentelemetry/api@1.4.1) + '@opentelemetry/exporter-trace-otlp-http': 0.41.2(@opentelemetry/api@1.4.1) + '@opentelemetry/exporter-trace-otlp-proto': 0.41.2(@opentelemetry/api@1.4.1) + '@opentelemetry/exporter-zipkin': 1.15.2(@opentelemetry/api@1.4.1) + '@opentelemetry/instrumentation': 0.41.2(@opentelemetry/api@1.4.1) + '@opentelemetry/resources': 1.15.2(@opentelemetry/api@1.4.1) + '@opentelemetry/sdk-logs': 0.41.2(@opentelemetry/api-logs@0.41.2)(@opentelemetry/api@1.4.1) + '@opentelemetry/sdk-metrics': 1.15.2(@opentelemetry/api@1.4.1) + '@opentelemetry/sdk-trace-base': 1.15.2(@opentelemetry/api@1.4.1) + '@opentelemetry/sdk-trace-node': 1.15.2(@opentelemetry/api@1.4.1) + '@opentelemetry/semantic-conventions': 1.15.2 transitivePeerDependencies: - supports-color dev: false - /@opentelemetry/sdk-trace-base/1.12.0_@opentelemetry+api@1.4.1: - resolution: {integrity: sha512-pfCOB3tNDlYVoWuz4D7Ji+Jmy9MHnATWHVpkERdCEiwUGEZ+4IvNPXUcPc37wJVmMpjGLeaWgPPrie0KIpWf1A==} + /@opentelemetry/sdk-trace-base@1.15.2(@opentelemetry/api@1.4.1): + resolution: {integrity: sha512-BEaxGZbWtvnSPchV98qqqqa96AOcb41pjgvhfzDij10tkBhIu9m0Jd6tZ1tJB5ZHfHbTffqYVYE0AOGobec/EQ==} engines: {node: '>=14'} peerDependencies: '@opentelemetry/api': '>=1.0.0 <1.5.0' dependencies: '@opentelemetry/api': 1.4.1 - '@opentelemetry/core': 1.12.0_@opentelemetry+api@1.4.1 - '@opentelemetry/resources': 1.12.0_@opentelemetry+api@1.4.1 - '@opentelemetry/semantic-conventions': 1.12.0 + '@opentelemetry/core': 1.15.2(@opentelemetry/api@1.4.1) + '@opentelemetry/resources': 1.15.2(@opentelemetry/api@1.4.1) + '@opentelemetry/semantic-conventions': 1.15.2 dev: false - /@opentelemetry/sdk-trace-node/1.12.0_@opentelemetry+api@1.4.1: - resolution: {integrity: sha512-PxpDemnNZLLeFNLAu95/K3QubjlaScXVjVQPlwPui65VRxIvxGVysnN7DFfsref+qoh1hI6nlrYSij43vxdm2w==} + /@opentelemetry/sdk-trace-node@1.15.2(@opentelemetry/api@1.4.1): + resolution: {integrity: sha512-5deakfKLCbPpKJRCE2GPI8LBE2LezyvR17y3t37ZI3sbaeogtyxmBaFV+slmG9fN8OaIT+EUsm1QAT1+z59gbQ==} engines: {node: '>=14'} peerDependencies: '@opentelemetry/api': '>=1.0.0 <1.5.0' dependencies: '@opentelemetry/api': 1.4.1 - '@opentelemetry/context-async-hooks': 1.12.0_@opentelemetry+api@1.4.1 - '@opentelemetry/core': 1.12.0_@opentelemetry+api@1.4.1 - '@opentelemetry/propagator-b3': 1.12.0_@opentelemetry+api@1.4.1 - '@opentelemetry/propagator-jaeger': 1.12.0_@opentelemetry+api@1.4.1 - '@opentelemetry/sdk-trace-base': 1.12.0_@opentelemetry+api@1.4.1 - semver: 7.5.0 + '@opentelemetry/context-async-hooks': 1.15.2(@opentelemetry/api@1.4.1) + '@opentelemetry/core': 1.15.2(@opentelemetry/api@1.4.1) + '@opentelemetry/propagator-b3': 1.15.2(@opentelemetry/api@1.4.1) + '@opentelemetry/propagator-jaeger': 1.15.2(@opentelemetry/api@1.4.1) + '@opentelemetry/sdk-trace-base': 1.15.2(@opentelemetry/api@1.4.1) + semver: 7.5.4 dev: false - /@opentelemetry/semantic-conventions/1.12.0: - resolution: {integrity: sha512-hO+bdeGOlJwqowUBoZF5LyP3ORUFOP1G0GRv8N45W/cztXbT2ZEXaAzfokRS9Xc9FWmYrDj32mF6SzH6wuoIyA==} + /@opentelemetry/semantic-conventions@1.15.2: + resolution: {integrity: sha512-CjbOKwk2s+3xPIMcd5UNYQzsf+v94RczbdNix9/kQh38WiQkM90sUOi3if8eyHFgiBjBjhwXrA7W3ydiSQP9mw==} engines: {node: '>=14'} dev: false - /@protobufjs/aspromise/1.1.2: + /@protobufjs/aspromise@1.1.2: resolution: {integrity: sha512-j+gKExEuLmKwvz3OgROXtrJ2UG2x8Ch2YZUxahh+s1F2HZ+wAceUNLkvy6zKCPVRkU++ZWQrdxsUeQXmcg4uoQ==} dev: false - /@protobufjs/base64/1.1.2: + /@protobufjs/base64@1.1.2: resolution: {integrity: sha512-AZkcAA5vnN/v4PDqKyMR5lx7hZttPDgClv83E//FMNhR2TMcLUhfRUBHCmSl0oi9zMgDDqRUJkSxO3wm85+XLg==} dev: false - /@protobufjs/codegen/2.0.4: + /@protobufjs/codegen@2.0.4: resolution: {integrity: sha512-YyFaikqM5sH0ziFZCN3xDC7zeGaB/d0IUb9CATugHWbd1FRFwWwt4ld4OYMPWu5a3Xe01mGAULCdqhMlPl29Jg==} dev: false - /@protobufjs/eventemitter/1.1.0: + /@protobufjs/eventemitter@1.1.0: resolution: {integrity: sha512-j9ednRT81vYJ9OfVuXG6ERSTdEL1xVsNgqpkxMsbIabzSo3goCjDIveeGv5d03om39ML71RdmrGNjG5SReBP/Q==} dev: false - /@protobufjs/fetch/1.1.0: + /@protobufjs/fetch@1.1.0: resolution: {integrity: sha512-lljVXpqXebpsijW71PZaCYeIcE5on1w5DlQy5WH6GLbFryLUrBD4932W/E2BSpfRJWseIL4v/KPgBFxDOIdKpQ==} dependencies: '@protobufjs/aspromise': 1.1.2 '@protobufjs/inquire': 1.1.0 dev: false - /@protobufjs/float/1.0.2: + /@protobufjs/float@1.0.2: resolution: {integrity: sha512-Ddb+kVXlXst9d+R9PfTIxh1EdNkgoRe5tOX6t01f1lYWOvJnSPDBlG241QLzcyPdoNTsblLUdujGSE4RzrTZGQ==} dev: false - /@protobufjs/inquire/1.1.0: + /@protobufjs/inquire@1.1.0: resolution: {integrity: sha512-kdSefcPdruJiFMVSbn801t4vFK7KB/5gd2fYvrxhuJYg8ILrmn9SKSX2tZdV6V+ksulWqS7aXjBcRXl3wHoD9Q==} dev: false - /@protobufjs/path/1.1.2: + /@protobufjs/path@1.1.2: resolution: {integrity: sha512-6JOcJ5Tm08dOHAbdR3GrvP+yUUfkjG5ePsHYczMFLq3ZmMkAD98cDgcT2iA1lJ9NVwFd4tH/iSSoe44YWkltEA==} dev: false - /@protobufjs/pool/1.1.0: + /@protobufjs/pool@1.1.0: resolution: {integrity: sha512-0kELaGSIDBKvcgS4zkjz1PeddatrjYcmMWOlAuAPwAeccUrPHdUqo/J6LiymHHEiJT5NrF1UVwxY14f+fy4WQw==} dev: false - /@protobufjs/utf8/1.1.0: + /@protobufjs/utf8@1.1.0: resolution: {integrity: sha512-Vvn3zZrhQZkkBE8LSuW3em98c0FwgO4nxzv6OdSxPKJIEKY2bGbHn+mhGIPerzI4twdxaP8/0+06HBpwf345Lw==} dev: false - /@types/long/4.0.2: + /@types/long@4.0.2: resolution: {integrity: sha512-MqTGEo5bj5t157U6fA/BiDynNkn0YknVdh48CMPkTSpFTVmvao5UQmm7uEF6xBEo7qIMAlY/JSleYaE6VOdpaA==} dev: false - /@types/node/18.16.1: + /@types/node@18.16.1: resolution: {integrity: sha512-DZxSZWXxFfOlx7k7Rv4LAyiMroaxa3Ly/7OOzZO8cBNho0YzAi4qlbrx8W27JGqG57IgR/6J7r+nOJWw6kcvZA==} - /ansi-color/0.2.1: + /@types/shimmer@1.0.2: + resolution: {integrity: sha512-dKkr1bTxbEsFlh2ARpKzcaAmsYixqt9UyCdoEZk8rHyE4iQYcDCyvSjDSf7JUWJHlJiTtbIoQjxKh6ViywqDAg==} + dev: false + + /acorn-import-assertions@1.9.0(acorn@8.10.0): + resolution: {integrity: sha512-cmMwop9x+8KFhxvKrKfPYmN6/pKTYYHBqLa0DfvVZcKMJWNyWLnaqND7dx/qn66R7ewM1UX5XMaDVP5wlVTaVA==} + peerDependencies: + acorn: ^8 + dependencies: + acorn: 8.10.0 + dev: false + + /acorn@8.10.0: + resolution: {integrity: sha512-F0SAmZ8iUtS//m8DmCTA0jlh6TDKkHQyK6xc6V4KDTyZKA9dnvX9/3sRTVQrWm79glUAZbnmmNcdYwUIHWVybw==} + engines: {node: '>=0.4.0'} + hasBin: true + dev: false + + /ansi-color@0.2.1: resolution: {integrity: sha512-bF6xLaZBLpOQzgYUtYEhJx090nPSZk1BQ/q2oyBK9aMMcJHzx9uXGCjI2Y+LebsN4Jwoykr0V9whbPiogdyHoQ==} dev: false - /ansi-regex/5.0.1: + /ansi-regex@5.0.1: resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} engines: {node: '>=8'} dev: false - /ansi-styles/4.3.0: + /ansi-styles@4.3.0: resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} engines: {node: '>=8'} dependencies: color-convert: 2.0.1 dev: false - /bufrw/1.3.0: + /bufrw@1.3.0: resolution: {integrity: sha512-jzQnSbdJqhIltU9O5KUiTtljP9ccw2u5ix59McQy4pV2xGhVLhRZIndY8GIrgh5HjXa6+QJ9AQhOd2QWQizJFQ==} engines: {node: '>= 0.10.x'} dependencies: @@ -374,7 +449,11 @@ packages: xtend: 4.0.2 dev: false - /cliui/7.0.4: + /cjs-module-lexer@1.2.3: + resolution: {integrity: sha512-0TNiGstbQmCFwt4akjjBg5pLRTSyj/PkWQ1ZoO2zntmg9yLqSRxwEa4iCfQLGjqhiqBfOJa7W/E8wfGrTDmlZQ==} + dev: false + + /cliui@7.0.4: resolution: {integrity: sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==} dependencies: string-width: 4.2.3 @@ -382,18 +461,18 @@ packages: wrap-ansi: 7.0.0 dev: false - /color-convert/2.0.1: + /color-convert@2.0.1: resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} engines: {node: '>=7.0.0'} dependencies: color-name: 1.1.4 dev: false - /color-name/1.1.4: + /color-name@1.1.4: resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} dev: false - /debug/4.3.4: + /debug@4.3.4: resolution: {integrity: sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==} engines: {node: '>=6.0'} peerDependencies: @@ -405,39 +484,39 @@ packages: ms: 2.1.2 dev: false - /emoji-regex/8.0.0: + /emoji-regex@8.0.0: resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} dev: false - /error/7.0.2: + /error@7.0.2: resolution: {integrity: sha512-UtVv4l5MhijsYUxPJo4390gzfZvAnTHreNnDjnTZaKIiZ/SemXxAhBkYSKtWa5RtBXbLP8tMgn/n0RUa/H7jXw==} dependencies: string-template: 0.2.1 xtend: 4.0.2 dev: false - /escalade/3.1.1: + /escalade@3.1.1: resolution: {integrity: sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==} engines: {node: '>=6'} dev: false - /function-bind/1.1.1: + /function-bind@1.1.1: resolution: {integrity: sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==} dev: false - /get-caller-file/2.0.5: + /get-caller-file@2.0.5: resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==} engines: {node: 6.* || 8.* || >= 10.*} dev: false - /has/1.0.3: + /has@1.0.3: resolution: {integrity: sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==} engines: {node: '>= 0.4.0'} dependencies: function-bind: 1.1.1 dev: false - /hexer/1.5.0: + /hexer@1.5.0: resolution: {integrity: sha512-dyrPC8KzBzUJ19QTIo1gXNqIISRXQ0NwteW6OeQHRN4ZuZeHkdODfj0zHBdOlHbRY8GqbqK57C9oWSvQZizFsg==} engines: {node: '>= 0.10.x'} hasBin: true @@ -448,18 +527,27 @@ packages: xtend: 4.0.2 dev: false - /is-core-module/2.12.0: + /import-in-the-middle@1.4.2: + resolution: {integrity: sha512-9WOz1Yh/cvO/p69sxRmhyQwrIGGSp7EIdcb+fFNVi7CzQGQB8U1/1XrKVSbEd/GNOAeM0peJtmi7+qphe7NvAw==} + dependencies: + acorn: 8.10.0 + acorn-import-assertions: 1.9.0(acorn@8.10.0) + cjs-module-lexer: 1.2.3 + module-details-from-path: 1.0.3 + dev: false + + /is-core-module@2.12.0: resolution: {integrity: sha512-RECHCBCd/viahWmwj6enj19sKbHfJrddi/6cBDsNTKbNq0f7VeaUkBo60BqzvPqo/W54ChS62Z5qyun7cfOMqQ==} dependencies: has: 1.0.3 dev: false - /is-fullwidth-code-point/3.0.0: + /is-fullwidth-code-point@3.0.0: resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==} engines: {node: '>=8'} dev: false - /jaeger-client/3.19.0: + /jaeger-client@3.19.0: resolution: {integrity: sha512-M0c7cKHmdyEUtjemnJyx/y9uX16XHocL46yQvyqDlPdvAcwPDbHrIbKjQdBqtiE4apQ/9dmr+ZLJYYPGnurgpw==} engines: {node: '>=10'} dependencies: @@ -470,65 +558,70 @@ packages: xorshift: 1.2.0 dev: false - /lodash.camelcase/4.3.0: + /lodash.camelcase@4.3.0: resolution: {integrity: sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA==} dev: false - /lodash.merge/4.6.2: + /lodash.merge@4.6.2: resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==} dev: false - /long/2.4.0: + /long@2.4.0: resolution: {integrity: sha512-ijUtjmO/n2A5PaosNG9ZGDsQ3vxJg7ZW8vsY8Kp0f2yIZWhSJvjmegV7t+9RPQKxKrvj8yKGehhS+po14hPLGQ==} engines: {node: '>=0.6'} dev: false - /long/4.0.0: + /long@4.0.0: resolution: {integrity: sha512-XsP+KhQif4bjX1kbuSiySJFNAehNxgLb6hPRGJ9QsUr8ajHkuXGdrHmFUTUUXhDwVX2R5bY4JNZEwbUiMhV+MA==} dev: false - /long/5.2.3: + /long@5.2.3: resolution: {integrity: sha512-lcHwpNoggQTObv5apGNCTdJrO69eHOZMi4BNC+rTLER8iHAqGrUVeLh/irVIM7zTw2bOXA8T6uNPeujwOLg/2Q==} dev: false - /lru-cache/6.0.0: + /lru-cache@6.0.0: resolution: {integrity: sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==} engines: {node: '>=10'} dependencies: yallist: 4.0.0 dev: false - /minimist/1.2.8: + /minimist@1.2.8: resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==} dev: false - /module-details-from-path/1.0.3: + /module-details-from-path@1.0.3: resolution: {integrity: sha512-ySViT69/76t8VhE1xXHK6Ch4NcDd26gx0MzKXLO+F7NOtnqH68d9zF94nT8ZWSxXh8ELOERsnJO/sWt1xZYw5A==} dev: false - /ms/2.1.2: + /ms@2.1.2: resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==} dev: false - /node-int64/0.4.0: + /node-int64@0.4.0: resolution: {integrity: sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==} dev: false - /opentracing/0.14.7: + /opentracing@0.14.7: resolution: {integrity: sha512-vz9iS7MJ5+Bp1URw8Khvdyw1H/hGvzHWlKQ7eRrQojSCDL1/SrWfrY9QebLw97n2deyRtzHRC3MkQfVNUCo91Q==} engines: {node: '>=0.10'} dev: false - /path-parse/1.0.7: + /path-parse@1.0.7: resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==} dev: false - /process/0.10.1: + /performance-polyfill@0.0.3: + resolution: {integrity: sha512-+47HUpSgfgSIcYF64ao5KAkEe9wR7SWZWTvYhmf1mE3Tw8sZP69JvE8no9zeZGkC+AeaqctHQLLFxNIXnEnjQw==} + engines: {node: '>= 0.8.0'} + dev: false + + /process@0.10.1: resolution: {integrity: sha512-dyIett8dgGIZ/TXKUzeYExt7WA6ldDzys9vTDU/cCA9L17Ypme+KzS+NjQCjpn9xsvi/shbMC+yP/BcFMBz0NA==} engines: {node: '>= 0.6.0'} dev: false - /protobufjs/7.2.3: + /protobufjs@7.2.3: resolution: {integrity: sha512-TtpvOqwB5Gdz/PQmOjgsrGH1nHjAQVCN7JG4A6r1sXRWESL5rNMAiRcBQlCAdKxZcAbstExQePYG8xof/JVRgg==} engines: {node: '>=12.0.0'} requiresBuild: true @@ -547,13 +640,13 @@ packages: long: 5.2.3 dev: false - /require-directory/2.1.1: + /require-directory@2.1.1: resolution: {integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==} engines: {node: '>=0.10.0'} dev: false - /require-in-the-middle/6.0.0: - resolution: {integrity: sha512-+dtWQ7l2lqQDxheaG3jjyN1QI37gEwvzACSgjYi4/C2y+ZTUMeRW8BIOm+9NBKvwaMBUSZfPXVOt1skB0vBkRw==} + /require-in-the-middle@7.2.0: + resolution: {integrity: sha512-3TLx5TGyAY6AOqLBoXmHkNql0HIf2RGbuMgCDT2WO/uGVAPJs6h7Kl+bN6TIZGd9bWhWPwnDnTHGtW8Iu77sdw==} engines: {node: '>=8.6.0'} dependencies: debug: 4.3.4 @@ -563,7 +656,7 @@ packages: - supports-color dev: false - /resolve/1.22.2: + /resolve@1.22.2: resolution: {integrity: sha512-Sb+mjNHOULsBv818T40qSPeRiuWLyaGMa5ewydRLFimneixmVy2zdivRl+AF6jaYPC8ERxGDmFSiqui6SfPd+g==} hasBin: true dependencies: @@ -572,23 +665,23 @@ packages: supports-preserve-symlinks-flag: 1.0.0 dev: false - /semver/7.5.0: - resolution: {integrity: sha512-+XC0AD/R7Q2mPSRuy2Id0+CGTZ98+8f+KvwirxOKIEyid+XSx6HbC63p+O4IndTHuX5Z+JxQ0TghCkO5Cg/2HA==} + /semver@7.5.4: + resolution: {integrity: sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==} engines: {node: '>=10'} hasBin: true dependencies: lru-cache: 6.0.0 dev: false - /shimmer/1.2.1: + /shimmer@1.2.1: resolution: {integrity: sha512-sQTKC1Re/rM6XyFM6fIAGHRPVGvyXfgzIDvzoq608vM+jeyVD0Tu1E6Np0Kc2zAIFWIj963V2800iF/9LPieQw==} dev: false - /string-template/0.2.1: + /string-template@0.2.1: resolution: {integrity: sha512-Yptehjogou2xm4UJbxJ4CxgZx12HBfeystp0y3x7s4Dj32ltVVG1Gg8YhKjHZkHicuKpZX/ffilA8505VbUbpw==} dev: false - /string-width/4.2.3: + /string-width@4.2.3: resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==} engines: {node: '>=8'} dependencies: @@ -597,19 +690,19 @@ packages: strip-ansi: 6.0.1 dev: false - /strip-ansi/6.0.1: + /strip-ansi@6.0.1: resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} engines: {node: '>=8'} dependencies: ansi-regex: 5.0.1 dev: false - /supports-preserve-symlinks-flag/1.0.0: + /supports-preserve-symlinks-flag@1.0.0: resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} engines: {node: '>= 0.4'} dev: false - /thriftrw/3.12.0: + /thriftrw@3.12.0: resolution: {integrity: sha512-4YZvR4DPEI41n4Opwr4jmrLGG4hndxr7387kzRFIIzxHQjarPusH4lGXrugvgb7TtPrfZVTpZCVe44/xUxowEw==} engines: {node: '>= 0.10.x'} hasBin: true @@ -619,18 +712,18 @@ packages: long: 2.4.0 dev: false - /typescript/5.0.4: + /typescript@5.0.4: resolution: {integrity: sha512-cW9T5W9xY37cc+jfEnaUvX91foxtHkza3Nw3wkoF4sSlKn0MONdkdEndig/qPBWXNkmplh3NzayQzCiHM4/hqw==} engines: {node: '>=12.20'} hasBin: true dev: true - /uuid/8.3.2: + /uuid@8.3.2: resolution: {integrity: sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==} hasBin: true dev: false - /wrap-ansi/7.0.0: + /wrap-ansi@7.0.0: resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==} engines: {node: '>=10'} dependencies: @@ -639,30 +732,30 @@ packages: strip-ansi: 6.0.1 dev: false - /xorshift/1.2.0: + /xorshift@1.2.0: resolution: {integrity: sha512-iYgNnGyeeJ4t6U11NpA/QiKy+PXn5Aa3Azg5qkwIFz1tBLllQrjjsk9yzD7IAK0naNU4JxdeDgqW9ov4u/hc4g==} dev: false - /xtend/4.0.2: + /xtend@4.0.2: resolution: {integrity: sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==} engines: {node: '>=0.4'} dev: false - /y18n/5.0.8: + /y18n@5.0.8: resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==} engines: {node: '>=10'} dev: false - /yallist/4.0.0: + /yallist@4.0.0: resolution: {integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==} dev: false - /yargs-parser/20.2.9: + /yargs-parser@20.2.9: resolution: {integrity: sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==} engines: {node: '>=10'} dev: false - /yargs/16.2.0: + /yargs@16.2.0: resolution: {integrity: sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==} engines: {node: '>=10'} dependencies: diff --git a/src/index.edge.ts b/src/index.edge.ts index c71526f..a1b3d26 100644 --- a/src/index.edge.ts +++ b/src/index.edge.ts @@ -1,4 +1,106 @@ +import "performance-polyfill"; +import { + BasicTracerProvider, + ReadableSpan, + SDKRegistrationConfig, + SimpleSpanProcessor, + TracerConfig, +} from "@opentelemetry/sdk-trace-base"; +import { AsyncLocalStorageContextManager } from "@opentelemetry/context-async-hooks"; +import { Resource } from "@opentelemetry/resources"; +import { SemanticResourceAttributes } from "@opentelemetry/semantic-conventions"; +import { + OTLPExporterBase, + OTLPExporterError, + OTLPExporterConfigBase, +} from "@opentelemetry/otlp-exporter-base"; +import { diag } from "@opentelemetry/api"; +import { createExportTraceServiceRequest } from "@opentelemetry/otlp-transformer"; +import { IExportTraceServiceRequest } from "@opentelemetry/otlp-transformer"; +import { getEnv } from "@opentelemetry/core"; + +const DEFAULT_COLLECTOR_RESOURCE_PATH = "v1/traces"; +const DEFAULT_COLLECTOR_URL = `http://localhost:4318/${DEFAULT_COLLECTOR_RESOURCE_PATH}`; + +class EdgeTraceProvider extends BasicTracerProvider { + constructor(config: TracerConfig = {}) { + super(config); + } + + register(config: SDKRegistrationConfig = {}) { + if (config.contextManager === undefined) { + config.contextManager = new AsyncLocalStorageContextManager(); + config.contextManager.enable(); + } + + super.register(config); + } +} + +abstract class OTLPExporterEdgeBase< + ExportItem, + ServiceRequest +> extends OTLPExporterBase { + onShutdown() {} + onInit(_config: OTLPExporterConfigBase) {} + send( + items: ExportItem[], + onSuccess: () => void, + onError: (error: OTLPExporterError) => void + ): void { + if (this._shutdownOnce.isCalled) { + diag.debug("Shutdown already started. Cannot send objects"); + return; + } + const serviceRequest = this.convert(items); + + const promise = fetch(this.url, { + method: "POST", + body: JSON.stringify(serviceRequest), + headers: { + "Content-Type": "application/json", + }, + // @ts-ignore + next: { + internal: true, + }, + }).then(onSuccess, onError); + + this._sendingPromises.push(promise); + const popPromise = () => { + const index = this._sendingPromises.indexOf(promise); + this._sendingPromises.splice(index, 1); + }; + promise.finally(popPromise); + } +} + +class OTLPTraceExporter extends OTLPExporterEdgeBase< + ReadableSpan, + IExportTraceServiceRequest +> { + convert(spans: ReadableSpan[]): IExportTraceServiceRequest { + return createExportTraceServiceRequest(spans, true); + } + getDefaultUrl(config: OTLPExporterConfigBase) { + return typeof config.url === "string" + ? config.url + : getEnv().OTEL_EXPORTER_OTLP_TRACES_ENDPOINT.length > 0 + ? getEnv().OTEL_EXPORTER_OTLP_TRACES_ENDPOINT + : DEFAULT_COLLECTOR_URL; + } +} + export const registerOTel = (serviceName: string) => { - // We don't support OTel on edge yet - void serviceName; + const provider = new EdgeTraceProvider({ + resource: new Resource({ + [SemanticResourceAttributes.SERVICE_NAME]: serviceName, + }), + }); + // For now, we'll support the simple span processor. + // In the future, we want to change this to a batch span processor that + // takes advantage of the `waitUntil` API to ensure that the batch is sent + // and does not interfere with the page lifecycle. + provider.addSpanProcessor(new SimpleSpanProcessor(new OTLPTraceExporter())); + provider.register(); }; diff --git a/src/index.node.ts b/src/index.node.ts index e6856c2..21a34d1 100644 --- a/src/index.node.ts +++ b/src/index.node.ts @@ -9,6 +9,10 @@ export const registerOTel = (serviceName: string) => { resource: new Resource({ [SemanticResourceAttributes.SERVICE_NAME]: serviceName, }), + // For now, we'll support the simple span processor. + // In the future, we want to change this to a batch span processor that + // takes advantage of the `waitUntil` API to ensure that the batch is sent + // and does not interfere with the page lifecycle. spanProcessor: new SimpleSpanProcessor(new OTLPTraceExporter()), }); sdk.start();