From 5254a9781a442291e83e68c3652179c751d36ee1 Mon Sep 17 00:00:00 2001 From: John Yeo Date: Tue, 24 Jun 2025 12:53:50 +0100 Subject: [PATCH] feat: added otel logging to axiom --- docker-compose.unix.yml | 2 + docker/dev.dockerfile | 2 +- pnpm-lock.yaml | 1232 +++++++++++++++++ server/package.json | 9 + server/src/errors/logger.ts | 26 +- server/src/external/logtail/logtailUtils.ts | 1 - .../webhookHandlers/handleSubUpdated.ts | 7 - server/src/index.ts | 82 +- server/src/instrumentation.ts | 35 + .../internal/analytics/tracer/spanUtils.ts | 22 + .../src/internal/api/entitled/checkUtils.ts | 1 - .../internal/api/entitled/entitledRouter.ts | 18 +- .../internal/api/entitled/getCheckPreview.ts | 2 - server/src/internal/api/events/usageRouter.ts | 26 +- server/src/internal/customers/CusService.ts | 92 +- .../customers/cusUtils/getOrCreateCustomer.ts | 4 + .../handlers/handleCreateCustomer.ts | 18 +- .../customers/handlers/handleGetCustomer.ts | 39 +- server/src/internal/mainRouter.ts | 1 + server/src/middleware/analyticsMiddleware.ts | 9 + server/src/middleware/apiAuthMiddleware.ts | 212 ++- server/src/utils/constants.ts | 5 +- shared/enums/ErrCode.ts | 5 +- vite/src/app/layout.tsx | 31 +- vite/src/views/customers/CustomersTable.tsx | 10 +- vite/src/views/customers/CustomersView.tsx | 35 +- vite/src/views/developer/ApiKeys.tsx | 13 +- vite/src/views/main-sidebar/MainSidebar.tsx | 38 +- vite/src/views/main-sidebar/SidebarTop.tsx | 106 -- .../main-sidebar/components/OrgDropdown.tsx | 18 +- .../org-dropdown/components/OrgLogo.tsx | 2 +- vite/src/views/products/ProductsTable.tsx | 12 +- .../product-item-config/FeatureItemConfig.tsx | 2 +- .../components/feature-price/FeaturePrice.tsx | 5 - 34 files changed, 1663 insertions(+), 459 deletions(-) create mode 100644 server/src/instrumentation.ts create mode 100644 server/src/internal/analytics/tracer/spanUtils.ts diff --git a/docker-compose.unix.yml b/docker-compose.unix.yml index 592bccd40..90e1d31a1 100644 --- a/docker-compose.unix.yml +++ b/docker-compose.unix.yml @@ -60,6 +60,7 @@ services: volumes: - ./server:/app/server - shared-dist:/app/shared/dist + - server-node-modules:/app/server/node_modules - root-node-modules:/app/node_modules environment: - NODE_ENV=development @@ -78,6 +79,7 @@ services: # Mount server source for hot reload (workers use server code) - ./server:/app/server - shared-dist:/app/shared/dist + - server-node-modules:/app/server/node_modules - root-node-modules:/app/node_modules environment: - NODE_ENV=development diff --git a/docker/dev.dockerfile b/docker/dev.dockerfile index 82021e90f..d788b44aa 100644 --- a/docker/dev.dockerfile +++ b/docker/dev.dockerfile @@ -46,5 +46,5 @@ CMD ["pnpm", "run", "dev"] FROM base AS workers COPY server/ ./server/ WORKDIR /app/server -RUN pnpm install +# RUN pnpm install CMD ["pnpm", "run", "workers"] \ No newline at end of file diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index d49b37ae6..ec08668b3 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -57,6 +57,33 @@ importers: '@logtail/node': specifier: ^0.5.2 version: 0.5.5 + '@opentelemetry/api': + specifier: ^1.9.0 + version: 1.9.0 + '@opentelemetry/auto-instrumentations-node': + specifier: ^0.60.1 + version: 0.60.1(@opentelemetry/api@1.9.0)(@opentelemetry/core@1.30.1(@opentelemetry/api@1.9.0)) + '@opentelemetry/exporter-trace-otlp-proto': + specifier: ^0.202.0 + version: 0.202.0(@opentelemetry/api@1.9.0) + '@opentelemetry/resources': + specifier: ^2.0.1 + version: 2.0.1(@opentelemetry/api@1.9.0) + '@opentelemetry/sdk-metrics': + specifier: ^2.0.1 + version: 2.0.1(@opentelemetry/api@1.9.0) + '@opentelemetry/sdk-node': + specifier: ^0.202.0 + version: 0.202.0(@opentelemetry/api@1.9.0) + '@opentelemetry/sdk-trace-base': + specifier: ^2.0.1 + version: 2.0.1(@opentelemetry/api@1.9.0) + '@opentelemetry/sdk-trace-node': + specifier: ^2.0.1 + version: 2.0.1(@opentelemetry/api@1.9.0) + '@opentelemetry/semantic-conventions': + specifier: ^1.34.0 + version: 1.34.0 '@react-email/components': specifier: ^0.0.42 version: 0.0.42(react-dom@18.3.1(react@18.3.1))(react@18.3.1) @@ -1538,6 +1565,10 @@ packages: resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==} engines: {node: '>= 8'} + '@opentelemetry/api-logs@0.202.0': + resolution: {integrity: sha512-fTBjMqKCfotFWfLzaKyhjLvyEyq5vDKTTFfBmx21btv3gvy8Lq6N5Dh2OzqeuN4DjtpSvNT1uNVfg08eD2Rfxw==} + engines: {node: '>=8.0.0'} + '@opentelemetry/api-logs@0.51.1': resolution: {integrity: sha512-E3skn949Pk1z2XtXu/lxf6QAZpawuTM/IUEXcAzpiUkTd73Hmvw26FiN3cJuTmkpM5hZzHwkomVdtrh/n/zzwA==} engines: {node: '>=14'} @@ -1556,72 +1587,151 @@ packages: peerDependencies: '@opentelemetry/api': ^1.4.1 + '@opentelemetry/auto-instrumentations-node@0.60.1': + resolution: {integrity: sha512-oMBVXiun0qWhj693Y24Ie+75q45YXHRFeH9vX/XBWKRNJIM/02ufjmNvmOdoHY0EPxU9rBmWCW82Uidf54iSPA==} + engines: {node: ^18.19.0 || >=20.6.0} + peerDependencies: + '@opentelemetry/api': ^1.4.1 + '@opentelemetry/core': ^2.0.0 + '@opentelemetry/context-async-hooks@1.30.1': resolution: {integrity: sha512-s5vvxXPVdjqS3kTLKMeBMvop9hbWkwzBpu+mUO2M7sZtlkyDJGwFe33wRKnbaYDo8ExRVBIIdwIGrqpxHuKttA==} engines: {node: '>=14'} peerDependencies: '@opentelemetry/api': '>=1.0.0 <1.10.0' + '@opentelemetry/context-async-hooks@2.0.1': + resolution: {integrity: sha512-XuY23lSI3d4PEqKA+7SLtAgwqIfc6E/E9eAQWLN1vlpC53ybO3o6jW4BsXo1xvz9lYyyWItfQDDLzezER01mCw==} + engines: {node: ^18.19.0 || >=20.6.0} + peerDependencies: + '@opentelemetry/api': '>=1.0.0 <1.10.0' + '@opentelemetry/core@1.30.1': resolution: {integrity: sha512-OOCM2C/QIURhJMuKaekP3TRBxBKxG/TWWA0TL2J6nXUtDnuCtccy49LUJF8xPFXMX+0LMcxFpCo8M9cGY1W6rQ==} engines: {node: '>=14'} peerDependencies: '@opentelemetry/api': '>=1.0.0 <1.10.0' + '@opentelemetry/core@2.0.1': + resolution: {integrity: sha512-MaZk9SJIDgo1peKevlbhP6+IwIiNPNmswNL4AF0WaQJLbHXjr9SrZMgS12+iqr9ToV4ZVosCcc0f8Rg67LXjxw==} + engines: {node: ^18.19.0 || >=20.6.0} + peerDependencies: + '@opentelemetry/api': '>=1.0.0 <1.10.0' + + '@opentelemetry/exporter-logs-otlp-grpc@0.202.0': + resolution: {integrity: sha512-Y84L8Yja/A2qjGEzC/To0yrMUXHrtwJzHtZ2za1/ulZplRe5QFsLNyHixIS42ZYUKuNyWMDgOFhnN2Pz5uThtg==} + engines: {node: ^18.19.0 || >=20.6.0} + peerDependencies: + '@opentelemetry/api': ^1.3.0 + '@opentelemetry/exporter-logs-otlp-grpc@0.57.2': resolution: {integrity: sha512-eovEy10n3umjKJl2Ey6TLzikPE+W4cUQ4gCwgGP1RqzTGtgDra0WjIqdy29ohiUKfvmbiL3MndZww58xfIvyFw==} engines: {node: '>=14'} peerDependencies: '@opentelemetry/api': ^1.3.0 + '@opentelemetry/exporter-logs-otlp-http@0.202.0': + resolution: {integrity: sha512-mJWLkmoG+3r+SsYQC+sbWoy1rjowJhMhFvFULeIPTxSI+EZzKPya0+NZ3+vhhgx2UTybGQlye3FBtCH3o6Rejg==} + engines: {node: ^18.19.0 || >=20.6.0} + peerDependencies: + '@opentelemetry/api': ^1.3.0 + '@opentelemetry/exporter-logs-otlp-http@0.57.2': resolution: {integrity: sha512-0rygmvLcehBRp56NQVLSleJ5ITTduq/QfU7obOkyWgPpFHulwpw2LYTqNIz5TczKZuy5YY+5D3SDnXZL1tXImg==} engines: {node: '>=14'} peerDependencies: '@opentelemetry/api': ^1.3.0 + '@opentelemetry/exporter-logs-otlp-proto@0.202.0': + resolution: {integrity: sha512-qYwbmNWPkP7AbzX8o4DRu5bb/a0TWYNcpZc1NEAOhuV7pgBpAUPEClxRWPN94ulIia+PfQjzFGMaRwmLGmNP6g==} + engines: {node: ^18.19.0 || >=20.6.0} + peerDependencies: + '@opentelemetry/api': ^1.3.0 + '@opentelemetry/exporter-logs-otlp-proto@0.57.2': resolution: {integrity: sha512-ta0ithCin0F8lu9eOf4lEz9YAScecezCHkMMyDkvd9S7AnZNX5ikUmC5EQOQADU+oCcgo/qkQIaKcZvQ0TYKDw==} engines: {node: '>=14'} peerDependencies: '@opentelemetry/api': ^1.3.0 + '@opentelemetry/exporter-metrics-otlp-grpc@0.202.0': + resolution: {integrity: sha512-/dq/rf4KCkTYoP+NyPXTE+5wjvfhAHSqK62vRsJ/IalG61VPQvwaL18yWcavbI+44ImQwtMeZxfIJSox7oQL0w==} + engines: {node: ^18.19.0 || >=20.6.0} + peerDependencies: + '@opentelemetry/api': ^1.3.0 + '@opentelemetry/exporter-metrics-otlp-grpc@0.57.2': resolution: {integrity: sha512-r70B8yKR41F0EC443b5CGB4rUaOMm99I5N75QQt6sHKxYDzSEc6gm48Diz1CI1biwa5tDPznpylTrywO/pT7qw==} engines: {node: '>=14'} peerDependencies: '@opentelemetry/api': ^1.3.0 + '@opentelemetry/exporter-metrics-otlp-http@0.202.0': + resolution: {integrity: sha512-ooYcrf/m9ZuVGpQnER7WRH+JZbDPD389HG7VS/EnvIEF5WpNYEqf+NdmtaAcs51d81QrytTYAubc5bVWi//28w==} + engines: {node: ^18.19.0 || >=20.6.0} + peerDependencies: + '@opentelemetry/api': ^1.3.0 + '@opentelemetry/exporter-metrics-otlp-http@0.57.2': resolution: {integrity: sha512-ttb9+4iKw04IMubjm3t0EZsYRNWr3kg44uUuzfo9CaccYlOh8cDooe4QObDUkvx9d5qQUrbEckhrWKfJnKhemA==} engines: {node: '>=14'} peerDependencies: '@opentelemetry/api': ^1.3.0 + '@opentelemetry/exporter-metrics-otlp-proto@0.202.0': + resolution: {integrity: sha512-X0RpPpPjyCAmIq9tySZm0Hk3Ltw8KWsqeNq5I7gS9AR9RzbVHb/l+eiMI1CqSRvW9R47HXcUu/epmEzY8ebFAg==} + engines: {node: ^18.19.0 || >=20.6.0} + peerDependencies: + '@opentelemetry/api': ^1.3.0 + '@opentelemetry/exporter-metrics-otlp-proto@0.57.2': resolution: {integrity: sha512-HX068Q2eNs38uf7RIkNN9Hl4Ynl+3lP0++KELkXMCpsCbFO03+0XNNZ1SkwxPlP9jrhQahsMPMkzNXpq3fKsnw==} engines: {node: '>=14'} peerDependencies: '@opentelemetry/api': ^1.3.0 + '@opentelemetry/exporter-prometheus@0.202.0': + resolution: {integrity: sha512-6RvQqZHAPFiwL1OKRJe4ta6SgJx/g8or41B+OovVVEie3HeCDhDGL9S1VJNkBozUz6wTY8a47fQwdMrCOUdMhQ==} + engines: {node: ^18.19.0 || >=20.6.0} + peerDependencies: + '@opentelemetry/api': ^1.3.0 + '@opentelemetry/exporter-prometheus@0.57.2': resolution: {integrity: sha512-VqIqXnuxWMWE/1NatAGtB1PvsQipwxDcdG4RwA/umdBcW3/iOHp0uejvFHTRN2O78ZPged87ErJajyUBPUhlDQ==} engines: {node: '>=14'} peerDependencies: '@opentelemetry/api': ^1.3.0 + '@opentelemetry/exporter-trace-otlp-grpc@0.202.0': + resolution: {integrity: sha512-d5wLdbNA3ahpSeD0I34vbDFMTh4vPsXemH0bKDXLeCVULCAjOJXuZmEiuRammiDgVvvX7CAb/IGLDz8d2QHvoA==} + engines: {node: ^18.19.0 || >=20.6.0} + peerDependencies: + '@opentelemetry/api': ^1.3.0 + '@opentelemetry/exporter-trace-otlp-grpc@0.57.2': resolution: {integrity: sha512-gHU1vA3JnHbNxEXg5iysqCWxN9j83d7/epTYBZflqQnTyCC4N7yZXn/dMM+bEmyhQPGjhCkNZLx4vZuChH1PYw==} engines: {node: '>=14'} peerDependencies: '@opentelemetry/api': ^1.3.0 + '@opentelemetry/exporter-trace-otlp-http@0.202.0': + resolution: {integrity: sha512-/hKE8DaFCJuaQqE1IxpgkcjOolUIwgi3TgHElPVKGdGRBSmJMTmN/cr6vWa55pCJIXPyhKvcMrbrya7DZ3VmzA==} + engines: {node: ^18.19.0 || >=20.6.0} + peerDependencies: + '@opentelemetry/api': ^1.3.0 + '@opentelemetry/exporter-trace-otlp-http@0.57.2': resolution: {integrity: sha512-sB/gkSYFu+0w2dVQ0PWY9fAMl172PKMZ/JrHkkW8dmjCL0CYkmXeE+ssqIL/yBUTPOvpLIpenX5T9RwXRBW/3g==} engines: {node: '>=14'} peerDependencies: '@opentelemetry/api': ^1.3.0 + '@opentelemetry/exporter-trace-otlp-proto@0.202.0': + resolution: {integrity: sha512-z3vzdMclCETGIn8uUBgpz7w651ftCiH2qh3cewhBk+rF0EYPNQ3mJvyxktLnKIBZ/ci0zUknAzzYC7LIIZmggQ==} + engines: {node: ^18.19.0 || >=20.6.0} + peerDependencies: + '@opentelemetry/api': ^1.3.0 + '@opentelemetry/exporter-trace-otlp-proto@0.57.2': resolution: {integrity: sha512-awDdNRMIwDvUtoRYxRhja5QYH6+McBLtoz1q9BeEsskhZcrGmH/V1fWpGx8n+Rc+542e8pJA6y+aullbIzQmlw==} engines: {node: '>=14'} @@ -1634,90 +1744,186 @@ packages: peerDependencies: '@opentelemetry/api': ^1.0.0 + '@opentelemetry/exporter-zipkin@2.0.1': + resolution: {integrity: sha512-a9eeyHIipfdxzCfc2XPrE+/TI3wmrZUDFtG2RRXHSbZZULAny7SyybSvaDvS77a7iib5MPiAvluwVvbGTsHxsw==} + engines: {node: ^18.19.0 || >=20.6.0} + peerDependencies: + '@opentelemetry/api': ^1.0.0 + '@opentelemetry/instrumentation-amqplib@0.46.1': resolution: {integrity: sha512-AyXVnlCf/xV3K/rNumzKxZqsULyITJH6OVLiW6730JPRqWA7Zc9bvYoVNpN6iOpTU8CasH34SU/ksVJmObFibQ==} engines: {node: '>=14'} peerDependencies: '@opentelemetry/api': ^1.3.0 + '@opentelemetry/instrumentation-amqplib@0.49.0': + resolution: {integrity: sha512-OCGkE+1JoUN+gOzs3u0GSa7GV//KX6NMKzaPchedae7ZwFVyyBQ8VECJngHgW3k/FLABFnq9Oiym2WZGiWugVQ==} + engines: {node: ^18.19.0 || >=20.6.0} + peerDependencies: + '@opentelemetry/api': ^1.3.0 + '@opentelemetry/instrumentation-aws-lambda@0.50.3': resolution: {integrity: sha512-kotm/mRvSWUauudxcylc5YCDei+G/r+jnOH6q5S99aPLQ/Ms8D2yonMIxEJUILIPlthEmwLYxkw3ualWzMjm/A==} engines: {node: '>=14'} peerDependencies: '@opentelemetry/api': ^1.3.0 + '@opentelemetry/instrumentation-aws-lambda@0.53.0': + resolution: {integrity: sha512-dZywDIc4t7o28eU9W4QMB+mNhRdH5/kVxVmxRtB46/diHg8Im6RFncuiCVJ1l9ig/RUtwR3dU9LX1huFBwxkPw==} + engines: {node: ^18.19.0 || >=20.6.0} + peerDependencies: + '@opentelemetry/api': ^1.3.0 + '@opentelemetry/instrumentation-aws-sdk@0.49.1': resolution: {integrity: sha512-Vbj4BYeV/1K4Pbbfk+gQ8gwYL0w+tBeUwG88cOxnF7CLPO1XnskGV8Q3Gzut2Ah/6Dg17dBtlzEqL3UiFP2Z6A==} engines: {node: '>=14'} peerDependencies: '@opentelemetry/api': ^1.3.0 + '@opentelemetry/instrumentation-aws-sdk@0.54.0': + resolution: {integrity: sha512-4XnXfpACX8fpOnt/D8d/1AFg3uOwBTG9TopQBuikDZJYUrLUSdT7UiotCFqAM/Z6hQJh72Jy3591C/OrmKct7A==} + engines: {node: ^18.19.0 || >=20.6.0} + peerDependencies: + '@opentelemetry/api': ^1.3.0 + '@opentelemetry/instrumentation-bunyan@0.45.1': resolution: {integrity: sha512-T9POV9ccS41UjpsjLrJ4i0m8LfplBiN3dMeH9XZ2btiDrjoaWtDrst6tNb1avetBjkeshOuBp1EWKP22EVSr0g==} engines: {node: '>=14'} peerDependencies: '@opentelemetry/api': ^1.3.0 + '@opentelemetry/instrumentation-bunyan@0.48.0': + resolution: {integrity: sha512-Q6ay5CXIKuyejadPoLboz+jKumB3Zuxyk35ycFh9vfIeww3+mNRyMVj6KxHRS0Imbv9zhNbP3uyrUpvEMMyHuw==} + engines: {node: ^18.19.0 || >=20.6.0} + peerDependencies: + '@opentelemetry/api': ^1.3.0 + '@opentelemetry/instrumentation-cassandra-driver@0.45.1': resolution: {integrity: sha512-RqnP0rK2hcKK1AKcmYvedLiL6G5TvFGiSUt2vI9wN0cCBdTt9Y9+wxxY19KoGxq7e9T/aHow6P5SUhCVI1sHvQ==} engines: {node: '>=14'} peerDependencies: '@opentelemetry/api': ^1.3.0 + '@opentelemetry/instrumentation-cassandra-driver@0.48.0': + resolution: {integrity: sha512-0dcX8Kx0S6ZAOknrbA+BBh1j5lg5F20W18m5VYoGUxkuLIUbWkQA3uaqeTfqbOwmnBmb1upDPUWPR+g5N12B4Q==} + engines: {node: ^18.19.0 || >=20.6.0} + peerDependencies: + '@opentelemetry/api': ^1.3.0 + '@opentelemetry/instrumentation-connect@0.43.1': resolution: {integrity: sha512-ht7YGWQuV5BopMcw5Q2hXn3I8eG8TH0J/kc/GMcW4CuNTgiP6wCu44BOnucJWL3CmFWaRHI//vWyAhaC8BwePw==} engines: {node: '>=14'} peerDependencies: '@opentelemetry/api': ^1.3.0 + '@opentelemetry/instrumentation-connect@0.46.0': + resolution: {integrity: sha512-YNq/7M1JXnWRkpKPC9dbYZA36cg547gY0p1bijW7vuZJ9t5f3alo6w8TWtZwV/hOFtBGHDXVhKVfp2Mh6zVHjQ==} + engines: {node: ^18.19.0 || >=20.6.0} + peerDependencies: + '@opentelemetry/api': ^1.3.0 + '@opentelemetry/instrumentation-cucumber@0.14.1': resolution: {integrity: sha512-ybO+tmH85pDO0ywTskmrMtZcccKyQr7Eb7wHy1keR2HFfx46SzZbjHo1AuGAX//Hook3gjM7+w211gJ2bwKe1Q==} engines: {node: '>=14'} peerDependencies: '@opentelemetry/api': ^1.0.0 + '@opentelemetry/instrumentation-cucumber@0.17.0': + resolution: {integrity: sha512-TTfQ9DmUlbeBsYZjNdJqs8mlcn1uY3t/AsTsALDBEFg6tWV+S1ADM9kVmKnscfbCwcQX2x17f/6a1Kpq5p91ww==} + engines: {node: ^18.19.0 || >=20.6.0} + peerDependencies: + '@opentelemetry/api': ^1.0.0 + '@opentelemetry/instrumentation-dataloader@0.16.1': resolution: {integrity: sha512-K/qU4CjnzOpNkkKO4DfCLSQshejRNAJtd4esgigo/50nxCB6XCyi1dhAblUHM9jG5dRm8eu0FB+t87nIo99LYQ==} engines: {node: '>=14'} peerDependencies: '@opentelemetry/api': ^1.3.0 + '@opentelemetry/instrumentation-dataloader@0.19.0': + resolution: {integrity: sha512-zIVRnRs3zDZCqStQcpIdRx3Dz9WXFSVj9qimqI7CRuKao9qnrZYUVQHvvVlLZX3JAg+nDC6JRS95zvbq50hj4A==} + engines: {node: ^18.19.0 || >=20.6.0} + peerDependencies: + '@opentelemetry/api': ^1.3.0 + '@opentelemetry/instrumentation-dns@0.43.1': resolution: {integrity: sha512-e/tMZYU1nc+k+J3259CQtqVZIPsPRSLNoAQbGEmSKrjLEY/KJSbpBZ17lu4dFVBzqoF1cZYIZxn9WPQxy4V9ng==} engines: {node: '>=14'} peerDependencies: '@opentelemetry/api': ^1.3.0 + '@opentelemetry/instrumentation-dns@0.46.0': + resolution: {integrity: sha512-m8u72x2fSIjhP1ITJX9Ims3eR4Qn8ze+QWy9NHYO01JlmiMamoc9TfIOd4dyOtxVja4tjnkWceKQdlEH9F9BoA==} + engines: {node: ^18.19.0 || >=20.6.0} + peerDependencies: + '@opentelemetry/api': ^1.3.0 + '@opentelemetry/instrumentation-express@0.47.1': resolution: {integrity: sha512-QNXPTWteDclR2B4pDFpz0TNghgB33UMjUt14B+BZPmtH1MwUFAfLHBaP5If0Z5NZC+jaH8oF2glgYjrmhZWmSw==} engines: {node: '>=14'} peerDependencies: '@opentelemetry/api': ^1.3.0 + '@opentelemetry/instrumentation-express@0.51.0': + resolution: {integrity: sha512-v1mgfvyeQh7yfsZ8wZlr+jgFGk9FxzLfNH0EH0UYGO9das8fCIkixsEasZMWhjwAJKjlf+ElTZ2jE2pT7I3DyQ==} + engines: {node: ^18.19.0 || >=20.6.0} + peerDependencies: + '@opentelemetry/api': ^1.3.0 + '@opentelemetry/instrumentation-fastify@0.44.2': resolution: {integrity: sha512-arSp97Y4D2NWogoXRb8CzFK3W2ooVdvqRRtQDljFt9uC3zI6OuShgey6CVFC0JxT1iGjkAr1r4PDz23mWrFULQ==} engines: {node: '>=14'} peerDependencies: '@opentelemetry/api': ^1.3.0 + '@opentelemetry/instrumentation-fastify@0.47.0': + resolution: {integrity: sha512-dLld0pI63WR1BXvNiGKFWzqrnhgItiIDNsRf/vVOhKV20HQNUQk5FfzcX0eUyiJtW/+u95Txh/vdfeQRwLELcA==} + engines: {node: ^18.19.0 || >=20.6.0} + peerDependencies: + '@opentelemetry/api': ^1.3.0 + '@opentelemetry/instrumentation-fs@0.19.1': resolution: {integrity: sha512-6g0FhB3B9UobAR60BGTcXg4IHZ6aaYJzp0Ki5FhnxyAPt8Ns+9SSvgcrnsN2eGmk3RWG5vYycUGOEApycQL24A==} engines: {node: '>=14'} peerDependencies: '@opentelemetry/api': ^1.3.0 + '@opentelemetry/instrumentation-fs@0.22.0': + resolution: {integrity: sha512-ktQVFD6pd8eAIW6t2DtDuXj2lxq+wnQ8WUkJLNZzl3rEE2TZEiHg7wIkWVoxl4Cz4pJ2YZJbdU2fHAizuDebDw==} + engines: {node: ^18.19.0 || >=20.6.0} + peerDependencies: + '@opentelemetry/api': ^1.3.0 + '@opentelemetry/instrumentation-generic-pool@0.43.1': resolution: {integrity: sha512-M6qGYsp1cURtvVLGDrPPZemMFEbuMmCXgQYTReC/IbimV5sGrLBjB+/hANUpRZjX67nGLdKSVLZuQQAiNz+sww==} engines: {node: '>=14'} peerDependencies: '@opentelemetry/api': ^1.3.0 + '@opentelemetry/instrumentation-generic-pool@0.46.0': + resolution: {integrity: sha512-QJUH9n5Ld0xz54gX1k3L2RDoSyJjeZaASA17Zvm0uVa40v+s8oMfCa1/4y9TONFSVbL0fPbAGojVsRRtg6dJ5w==} + engines: {node: ^18.19.0 || >=20.6.0} + peerDependencies: + '@opentelemetry/api': ^1.3.0 + '@opentelemetry/instrumentation-graphql@0.47.1': resolution: {integrity: sha512-EGQRWMGqwiuVma8ZLAZnExQ7sBvbOx0N/AE/nlafISPs8S+QtXX+Viy6dcQwVWwYHQPAcuY3bFt3xgoAwb4ZNQ==} engines: {node: '>=14'} peerDependencies: '@opentelemetry/api': ^1.3.0 + '@opentelemetry/instrumentation-graphql@0.50.0': + resolution: {integrity: sha512-Nn3vBS5T0Dv4+9WF1dGR0Lgsxuz6ztQmTsxoHvesm6YAAXiHffnwsxBEJUKEJcjxfXzjO1SVuLDkv1bAeQ3NFw==} + engines: {node: ^18.19.0 || >=20.6.0} + peerDependencies: + '@opentelemetry/api': ^1.3.0 + + '@opentelemetry/instrumentation-grpc@0.202.0': + resolution: {integrity: sha512-dWvefHNAyAfaHVmxQ/ySLQSI2hGKLgK1sBtvae4w9xruqU08bBMtvmVeGMA/5whfiUDU8ftp1/84U4Zoe5N56A==} + engines: {node: ^18.19.0 || >=20.6.0} + peerDependencies: + '@opentelemetry/api': ^1.3.0 + '@opentelemetry/instrumentation-grpc@0.57.2': resolution: {integrity: sha512-TR6YQA67cLSZzdxbf2SrbADJy2Y8eBW1+9mF15P0VK2MYcpdoUSmQTF1oMkBwa3B9NwqDFA2fq7wYTTutFQqaQ==} engines: {node: '>=14'} @@ -1730,6 +1936,18 @@ packages: peerDependencies: '@opentelemetry/api': ^1.3.0 + '@opentelemetry/instrumentation-hapi@0.49.0': + resolution: {integrity: sha512-d4BcCjbW7Pfg4FpbAAF0cK/ue3dN02WMw0uO2G792KzDjxj05MtZm3eBTz672j3ejV9hM0HvPPhUHUsIC0H6Gw==} + engines: {node: ^18.19.0 || >=20.6.0} + peerDependencies: + '@opentelemetry/api': ^1.3.0 + + '@opentelemetry/instrumentation-http@0.202.0': + resolution: {integrity: sha512-oX+jyY2KBg4/nVH3vZhSWDbhywkHgE0fq3YinhUBx0jv+YUWC2UKA7qLkxr/CSzfKsFi/Km0NKV+llH17yYGKw==} + engines: {node: ^18.19.0 || >=20.6.0} + peerDependencies: + '@opentelemetry/api': ^1.3.0 + '@opentelemetry/instrumentation-http@0.57.2': resolution: {integrity: sha512-1Uz5iJ9ZAlFOiPuwYg29Bf7bJJc/GeoeJIFKJYQf67nTVKFe8RHbEtxgkOmK4UGZNHKXcpW4P8cWBYzBn1USpg==} engines: {node: '>=14'} @@ -1742,6 +1960,18 @@ packages: peerDependencies: '@opentelemetry/api': ^1.3.0 + '@opentelemetry/instrumentation-ioredis@0.50.0': + resolution: {integrity: sha512-f2e+3xPxMRdlt1rjZpRhxuqrfumlWe3NX0Y+W857RBBV11HhbeZZaYbO5MMaxV3xBZv4dwPSGx96GjExUWY0WA==} + engines: {node: ^18.19.0 || >=20.6.0} + peerDependencies: + '@opentelemetry/api': ^1.3.0 + + '@opentelemetry/instrumentation-kafkajs@0.11.0': + resolution: {integrity: sha512-+i9VqVEPNObB1tkwcLV6zAafnve72h2Iwo48E11M/kVXMNXlgGhiYckYCmzba8c2u5XD/V98XZDrCIyO8CLCNA==} + engines: {node: ^18.19.0 || >=20.6.0} + peerDependencies: + '@opentelemetry/api': ^1.3.0 + '@opentelemetry/instrumentation-kafkajs@0.7.1': resolution: {integrity: sha512-OtjaKs8H7oysfErajdYr1yuWSjMAectT7Dwr+axIoZqT9lmEOkD/H/3rgAs8h/NIuEi2imSXD+vL4MZtOuJfqQ==} engines: {node: '>=14'} @@ -1754,126 +1984,264 @@ packages: peerDependencies: '@opentelemetry/api': ^1.3.0 + '@opentelemetry/instrumentation-knex@0.47.0': + resolution: {integrity: sha512-OjqjnzXD5+FXVGkOznbRAz9yByb4UWzIUhXjuHvOQ50IUY8mv3rM2Gj6Ar7m5JsENiS5DtAy2Vfwk4e9zNC0ng==} + engines: {node: ^18.19.0 || >=20.6.0} + peerDependencies: + '@opentelemetry/api': ^1.3.0 + '@opentelemetry/instrumentation-koa@0.47.1': resolution: {integrity: sha512-l/c+Z9F86cOiPJUllUCt09v+kICKvT+Vg1vOAJHtHPsJIzurGayucfCMq2acd/A/yxeNWunl9d9eqZ0G+XiI6A==} engines: {node: '>=14'} peerDependencies: '@opentelemetry/api': ^1.3.0 + '@opentelemetry/instrumentation-koa@0.50.1': + resolution: {integrity: sha512-HoQ9OuzLx4z6/BfA4medM6cj5+UXWQWakQVCd/Xd+gU+gA1eCxwdoECH44p+mTl3GFS7/icgfGE1if/lguaG0Q==} + engines: {node: ^18.19.0 || >=20.6.0} + peerDependencies: + '@opentelemetry/api': ^1.3.0 + '@opentelemetry/instrumentation-lru-memoizer@0.44.1': resolution: {integrity: sha512-5MPkYCvG2yw7WONEjYj5lr5JFehTobW7wX+ZUFy81oF2lr9IPfZk9qO+FTaM0bGEiymwfLwKe6jE15nHn1nmHg==} engines: {node: '>=14'} peerDependencies: '@opentelemetry/api': ^1.3.0 + '@opentelemetry/instrumentation-lru-memoizer@0.47.0': + resolution: {integrity: sha512-UJ2UlCAIF+N4zNkiHdMr4O0caN0K6YboAso3/zaFdG1QiPR2zqZcbWAGFBikZ9HSByU+NwbxTXDzlpkcDZIqWg==} + engines: {node: ^18.19.0 || >=20.6.0} + peerDependencies: + '@opentelemetry/api': ^1.3.0 + '@opentelemetry/instrumentation-memcached@0.43.1': resolution: {integrity: sha512-rK5YWC22gmsLp2aEbaPk5F+9r6BFFZuc9GTnW/ErrWpz2XNHUgeFInoPDg4t+Trs8OttIfn8XwkfFkSKqhxanw==} engines: {node: '>=14'} peerDependencies: '@opentelemetry/api': ^1.3.0 + '@opentelemetry/instrumentation-memcached@0.46.0': + resolution: {integrity: sha512-FFDcOVJUxZQqbg57gVskZGXRfEsZXwOvCaPv6/qIZRw5glLXPTulpnfG/s8NAltsj2buXSvS4eKFo+0HKH0apw==} + engines: {node: ^18.19.0 || >=20.6.0} + peerDependencies: + '@opentelemetry/api': ^1.3.0 + '@opentelemetry/instrumentation-mongodb@0.52.0': resolution: {integrity: sha512-1xmAqOtRUQGR7QfJFfGV/M2kC7wmI2WgZdpru8hJl3S0r4hW0n3OQpEHlSGXJAaNFyvT+ilnwkT+g5L4ljHR6g==} engines: {node: '>=14'} peerDependencies: '@opentelemetry/api': ^1.3.0 + '@opentelemetry/instrumentation-mongodb@0.55.1': + resolution: {integrity: sha512-Wb13YixWm8nB27ZSQW3h070UWkivoh6bjeyDUY6lLimSUulALr+YHBn0t71U1aTcUeaZv3IBNaPRimFXhz6gBA==} + engines: {node: ^18.19.0 || >=20.6.0} + peerDependencies: + '@opentelemetry/api': ^1.3.0 + '@opentelemetry/instrumentation-mongoose@0.46.1': resolution: {integrity: sha512-3kINtW1LUTPkiXFRSSBmva1SXzS/72we/jL22N+BnF3DFcoewkdkHPYOIdAAk9gSicJ4d5Ojtt1/HeibEc5OQg==} engines: {node: '>=14'} peerDependencies: '@opentelemetry/api': ^1.3.0 + '@opentelemetry/instrumentation-mongoose@0.49.0': + resolution: {integrity: sha512-nF+43QFe8IoW20TmTJZdxZhnVZGEglODUvzAo3fRmaBFAkwUXRGzRgABS255PCjIbScEaRRDCXc6EAsSkwRNPg==} + engines: {node: ^18.19.0 || >=20.6.0} + peerDependencies: + '@opentelemetry/api': ^1.3.0 + '@opentelemetry/instrumentation-mysql2@0.45.2': resolution: {integrity: sha512-h6Ad60FjCYdJZ5DTz1Lk2VmQsShiViKe0G7sYikb0GHI0NVvApp2XQNRHNjEMz87roFttGPLHOYVPlfy+yVIhQ==} engines: {node: '>=14'} peerDependencies: '@opentelemetry/api': ^1.3.0 + '@opentelemetry/instrumentation-mysql2@0.48.0': + resolution: {integrity: sha512-eCRpv0WV2s0Pa6CpjPWzZiLZDqx8kqZJopJESd4ywoUwtijXzBiTRidp/8aL9k+kl4drhm2GVNr4thUCMlEOSA==} + engines: {node: ^18.19.0 || >=20.6.0} + peerDependencies: + '@opentelemetry/api': ^1.3.0 + '@opentelemetry/instrumentation-mysql@0.45.1': resolution: {integrity: sha512-TKp4hQ8iKQsY7vnp/j0yJJ4ZsP109Ht6l4RHTj0lNEG1TfgTrIH5vJMbgmoYXWzNHAqBH2e7fncN12p3BP8LFg==} engines: {node: '>=14'} peerDependencies: '@opentelemetry/api': ^1.3.0 + '@opentelemetry/instrumentation-mysql@0.48.0': + resolution: {integrity: sha512-o7DwkkRn3eLWfzJdbXrlCS1EhbIOgB0W74eucbP+5Lk0XDGixy4yURTkmNclCcsemgzRZfEq0YvYQV29Yhpo5A==} + engines: {node: ^18.19.0 || >=20.6.0} + peerDependencies: + '@opentelemetry/api': ^1.3.0 + '@opentelemetry/instrumentation-nestjs-core@0.44.1': resolution: {integrity: sha512-4TXaqJK27QXoMqrt4+hcQ6rKFd8B6V4JfrTJKnqBmWR1cbaqd/uwyl9yxhNH1JEkyo8GaBfdpBC4ZE4FuUhPmg==} engines: {node: '>=14'} peerDependencies: '@opentelemetry/api': ^1.3.0 + '@opentelemetry/instrumentation-nestjs-core@0.48.0': + resolution: {integrity: sha512-ytK4ABSkWcD9vyMU8GpinvodAGaRxBFuxybP/m7sgLtEboXMJjdWnEHb7lH/CX1ICiVKRXWdYg9npdu6yBCW5Q==} + engines: {node: ^18.19.0 || >=20.6.0} + peerDependencies: + '@opentelemetry/api': ^1.3.0 + '@opentelemetry/instrumentation-net@0.43.1': resolution: {integrity: sha512-TaMqP6tVx9/SxlY81dHlSyP5bWJIKq+K7vKfk4naB/LX4LBePPY3++1s0edpzH+RfwN+tEGVW9zTb9ci0up/lQ==} engines: {node: '>=14'} peerDependencies: '@opentelemetry/api': ^1.3.0 + '@opentelemetry/instrumentation-net@0.46.1': + resolution: {integrity: sha512-r7Buqem+odrTTPlWfT7EqS24QnDAL4U+c4e38RzcRtdZF00Z34oqEpge7TZcQLo0vEASWbHQ/WjWNR7ZYKFKBA==} + engines: {node: ^18.19.0 || >=20.6.0} + peerDependencies: + '@opentelemetry/api': ^1.3.0 + + '@opentelemetry/instrumentation-oracledb@0.28.0': + resolution: {integrity: sha512-VObbQRd3g8nDLLOeGjm5l6TnB9dtEaJoedLfLwMGrlD6lkai+hdfalYh6FOF5dce+dJouZdW6NUUAaBj4f4KcA==} + engines: {node: ^18.19.0 || >=20.6.0} + peerDependencies: + '@opentelemetry/api': ^1.3.0 + '@opentelemetry/instrumentation-pg@0.51.1': resolution: {integrity: sha512-QxgjSrxyWZc7Vk+qGSfsejPVFL1AgAJdSBMYZdDUbwg730D09ub3PXScB9d04vIqPriZ+0dqzjmQx0yWKiCi2Q==} engines: {node: '>=14'} peerDependencies: '@opentelemetry/api': ^1.3.0 + '@opentelemetry/instrumentation-pg@0.54.0': + resolution: {integrity: sha512-KQnEGwm65p1zFZGjKGw+oMilGcR4l1q3qgRmETO7ySEfMddH3t6jwlbqmcjO3N3bVcPkYgjioGVQGvdpvz7O1w==} + engines: {node: ^18.19.0 || >=20.6.0} + peerDependencies: + '@opentelemetry/api': ^1.3.0 + '@opentelemetry/instrumentation-pino@0.46.1': resolution: {integrity: sha512-HB8gD/9CNAKlTV+mdZehnFC4tLUtQ7e+729oGq88e4WipxzZxmMYuRwZ2vzOA9/APtq+MRkERJ9PcoDqSIjZ+g==} engines: {node: '>=14'} peerDependencies: '@opentelemetry/api': ^1.3.0 + '@opentelemetry/instrumentation-pino@0.49.0': + resolution: {integrity: sha512-nngcqUnIeVnDvRMf6fixYwlMbTNzCVGv93CacyR/8TL/pjyumje020PC5q7b6CfcTdToiD5GMTMKvWBiTd08cA==} + engines: {node: ^18.19.0 || >=20.6.0} + peerDependencies: + '@opentelemetry/api': ^1.3.0 + '@opentelemetry/instrumentation-redis-4@0.46.1': resolution: {integrity: sha512-UMqleEoabYMsWoTkqyt9WAzXwZ4BlFZHO40wr3d5ZvtjKCHlD4YXLm+6OLCeIi/HkX7EXvQaz8gtAwkwwSEvcQ==} engines: {node: '>=14'} peerDependencies: '@opentelemetry/api': ^1.3.0 + '@opentelemetry/instrumentation-redis-4@0.49.0': + resolution: {integrity: sha512-i+Wsl7M2LXEDA2yXouNJ3fttSzzb5AhlehvSBVRIFuinY51XrrKSH66biO0eox+pYQMwAlPxJ778XcMQffN78A==} + engines: {node: ^18.19.0 || >=20.6.0} + peerDependencies: + '@opentelemetry/api': ^1.3.0 + '@opentelemetry/instrumentation-redis@0.46.1': resolution: {integrity: sha512-AN7OvlGlXmlvsgbLHs6dS1bggp6Fcki+GxgYZdSrb/DB692TyfjR7sVILaCe0crnP66aJuXsg9cge3hptHs9UA==} engines: {node: '>=14'} peerDependencies: '@opentelemetry/api': ^1.3.0 + '@opentelemetry/instrumentation-redis@0.49.1': + resolution: {integrity: sha512-Ds5Ke9qE9kTlDThqLSJJntkIvuMQCBPiFKwHntocb/3q/9q5D47BNwawO5Mj9sVMV6zkld5M5Pb9Av39iieuOg==} + engines: {node: ^18.19.0 || >=20.6.0} + peerDependencies: + '@opentelemetry/api': ^1.3.0 + '@opentelemetry/instrumentation-restify@0.45.1': resolution: {integrity: sha512-Zd6Go9iEa+0zcoA2vDka9r/plYKaT3BhD3ESIy4JNIzFWXeQBGbH3zZxQIsz0jbNTMEtonlymU7eTLeaGWiApA==} engines: {node: '>=14'} peerDependencies: '@opentelemetry/api': ^1.3.0 + '@opentelemetry/instrumentation-restify@0.48.1': + resolution: {integrity: sha512-0KY7mWpm0TJJ8ajhsNsLUmsBE/yNr70o128Crn30eDmnyRQkG7uS0xfDi6keExjF7SKzXQabs3Gtx7SuFmE80Q==} + engines: {node: ^18.19.0 || >=20.6.0} + peerDependencies: + '@opentelemetry/api': ^1.3.0 + '@opentelemetry/instrumentation-router@0.44.1': resolution: {integrity: sha512-l4T/S7ByjpY5TCUPeDe1GPns02/5BpR0jroSMexyH3ZnXJt9PtYqx1IKAlOjaFEGEOQF2tGDsMi4PY5l+fSniQ==} engines: {node: '>=14'} peerDependencies: '@opentelemetry/api': ^1.3.0 + '@opentelemetry/instrumentation-router@0.47.0': + resolution: {integrity: sha512-U0zA1LTDqtTWyd5e4SdoqQA/8QUOhc4LDv9U7b+8FMFTty95OF84apUdatl09Dzc51XeWPWIV7VutmSCd/zsUg==} + engines: {node: ^18.19.0 || >=20.6.0} + peerDependencies: + '@opentelemetry/api': ^1.3.0 + '@opentelemetry/instrumentation-runtime-node@0.12.2': resolution: {integrity: sha512-HNBW1rJiHDBTHQlh5oH1IAcV8O5VR7/L5BBOfGAMpGno3Jq9cNqTh96uUp0qBXBuxD8Yl1eoI5N+B5TdmjLteQ==} engines: {node: '>=17.4.0'} peerDependencies: '@opentelemetry/api': ^1.3.0 + '@opentelemetry/instrumentation-runtime-node@0.16.0': + resolution: {integrity: sha512-Q/GB9LsKLrRCEIPLAQTDQvydnLmLXBSRkYkWzwKzY/LCkOs+Cl8YiJG08p6D4CaJ6lvP0iG4kwPHk1ydNbdehg==} + engines: {node: ^18.19.0 || >=20.6.0} + peerDependencies: + '@opentelemetry/api': ^1.3.0 + '@opentelemetry/instrumentation-socket.io@0.46.1': resolution: {integrity: sha512-9AsCVUAHOqvfe2RM/2I0DsDnx2ihw1d5jIN4+Bly1YPFTJIbk4+bXjAkr9+X6PUfhiV5urQHZkiYYPU1Q4yzPA==} engines: {node: '>=14'} peerDependencies: '@opentelemetry/api': ^1.3.0 + '@opentelemetry/instrumentation-socket.io@0.49.0': + resolution: {integrity: sha512-DpMtNBEcaLCcbP1WVBPCSgRiBs31igTQkal1gUm40VL/XAv5GUqRAUnvHZrQh3yPipOqzV65pdb0jJXdps/tug==} + engines: {node: ^18.19.0 || >=20.6.0} + peerDependencies: + '@opentelemetry/api': ^1.3.0 + '@opentelemetry/instrumentation-tedious@0.18.1': resolution: {integrity: sha512-5Cuy/nj0HBaH+ZJ4leuD7RjgvA844aY2WW+B5uLcWtxGjRZl3MNLuxnNg5DYWZNPO+NafSSnra0q49KWAHsKBg==} engines: {node: '>=14'} peerDependencies: '@opentelemetry/api': ^1.3.0 + '@opentelemetry/instrumentation-tedious@0.21.0': + resolution: {integrity: sha512-pt37kHYGQ8D2vBOQwyB/TKUqLPF8Q4rfTNu3whZsPOsc6QHDPXpfQISIupWAnMjAaeujF/Spg6IA04W6jXrzRQ==} + engines: {node: ^18.19.0 || >=20.6.0} + peerDependencies: + '@opentelemetry/api': ^1.3.0 + '@opentelemetry/instrumentation-undici@0.10.1': resolution: {integrity: sha512-rkOGikPEyRpMCmNu9AQuV5dtRlDmJp2dK5sw8roVshAGoB6hH/3QjDtRhdwd75SsJwgynWUNRUYe0wAkTo16tQ==} engines: {node: '>=14'} peerDependencies: '@opentelemetry/api': ^1.7.0 + '@opentelemetry/instrumentation-undici@0.13.1': + resolution: {integrity: sha512-w0e7q983oNa+dQiWOEgU+1R6H48ks6mICZKrIxY08KqZPFroPUYbH4Db7X6p8m4QhuHgI2/wEAgLf9h03ILzcg==} + engines: {node: ^18.19.0 || >=20.6.0} + peerDependencies: + '@opentelemetry/api': ^1.7.0 + '@opentelemetry/instrumentation-winston@0.44.1': resolution: {integrity: sha512-iexblTsT3fP0hHUz/M1mWr+Ylg3bsYN2En/jvKXZtboW3Qkvt17HrQJYTF9leVIkXAfN97QxAcTE99YGbQW7vQ==} engines: {node: '>=14'} peerDependencies: '@opentelemetry/api': ^1.3.0 + '@opentelemetry/instrumentation-winston@0.47.0': + resolution: {integrity: sha512-r+GqnZU/aFldQyB5QdOlxsMlH9KZ4+zJfnYplz3lbC9f9ozAIlVAeoshvWTtbv7Oxp2NnK64EfnNP1pClaGEqA==} + engines: {node: ^18.19.0 || >=20.6.0} + peerDependencies: + '@opentelemetry/api': ^1.3.0 + + '@opentelemetry/instrumentation@0.202.0': + resolution: {integrity: sha512-Uz3BxZWPgDwgHM2+vCKEQRh0R8WKrd/q6Tus1vThRClhlPO39Dyz7mDrOr6KuqGXAlBQ1e5Tnymzri4RMZNaWA==} + engines: {node: ^18.19.0 || >=20.6.0} + peerDependencies: + '@opentelemetry/api': ^1.3.0 + '@opentelemetry/instrumentation@0.51.1': resolution: {integrity: sha512-JIrvhpgqY6437QIqToyozrUG1h5UhwHkaGK/WAX+fkrpyPtc+RO5FkRtUd9BH0MibabHHvqsnBGKfKVijbmp8w==} engines: {node: '>=14'} @@ -1886,18 +2254,36 @@ packages: peerDependencies: '@opentelemetry/api': ^1.3.0 + '@opentelemetry/otlp-exporter-base@0.202.0': + resolution: {integrity: sha512-nMEOzel+pUFYuBJg2znGmHJWbmvMbdX5/RhoKNKowguMbURhz0fwik5tUKplLcUtl8wKPL1y9zPnPxeBn65N0Q==} + engines: {node: ^18.19.0 || >=20.6.0} + peerDependencies: + '@opentelemetry/api': ^1.3.0 + '@opentelemetry/otlp-exporter-base@0.57.2': resolution: {integrity: sha512-XdxEzL23Urhidyebg5E6jZoaiW5ygP/mRjxLHixogbqwDy2Faduzb5N0o/Oi+XTIJu+iyxXdVORjXax+Qgfxag==} engines: {node: '>=14'} peerDependencies: '@opentelemetry/api': ^1.3.0 + '@opentelemetry/otlp-grpc-exporter-base@0.202.0': + resolution: {integrity: sha512-yIEHVxFA5dmYif7lZbbB66qulLLhrklj6mI2X3cuGW5hYPyUErztEmbroM+6teu/XobBi9bLHid2VT4NIaRuGg==} + engines: {node: ^18.19.0 || >=20.6.0} + peerDependencies: + '@opentelemetry/api': ^1.3.0 + '@opentelemetry/otlp-grpc-exporter-base@0.57.2': resolution: {integrity: sha512-USn173KTWy0saqqRB5yU9xUZ2xdgb1Rdu5IosJnm9aV4hMTuFFRTUsQxbgc24QxpCHeoKzzCSnS/JzdV0oM2iQ==} engines: {node: '>=14'} peerDependencies: '@opentelemetry/api': ^1.3.0 + '@opentelemetry/otlp-transformer@0.202.0': + resolution: {integrity: sha512-5XO77QFzs9WkexvJQL9ksxL8oVFb/dfi9NWQSq7Sv0Efr9x3N+nb1iklP1TeVgxqJ7m1xWiC/Uv3wupiQGevMw==} + engines: {node: ^18.19.0 || >=20.6.0} + peerDependencies: + '@opentelemetry/api': ^1.3.0 + '@opentelemetry/otlp-transformer@0.57.2': resolution: {integrity: sha512-48IIRj49gbQVK52jYsw70+Jv+JbahT8BqT2Th7C4H7RCM9d0gZ5sgNPoMpWldmfjvIsSgiGJtjfk9MeZvjhoig==} engines: {node: '>=14'} @@ -1910,58 +2296,122 @@ packages: peerDependencies: '@opentelemetry/api': ^1.0.0 + '@opentelemetry/propagation-utils@0.31.2': + resolution: {integrity: sha512-FlJzdZ0cQY8qqOsJ/A+L/t05LvZtnsMq6vbamunVMYRi9TAy+xq37t+nT/dx3dKJ/2k409jDj9eA0Yhj9RtTug==} + engines: {node: ^18.19.0 || >=20.6.0} + peerDependencies: + '@opentelemetry/api': ^1.0.0 + '@opentelemetry/propagator-b3@1.30.1': resolution: {integrity: sha512-oATwWWDIJzybAZ4pO76ATN5N6FFbOA1otibAVlS8v90B4S1wClnhRUk7K+2CHAwN1JKYuj4jh/lpCEG5BAqFuQ==} engines: {node: '>=14'} peerDependencies: '@opentelemetry/api': '>=1.0.0 <1.10.0' + '@opentelemetry/propagator-b3@2.0.1': + resolution: {integrity: sha512-Hc09CaQ8Tf5AGLmf449H726uRoBNGPBL4bjr7AnnUpzWMvhdn61F78z9qb6IqB737TffBsokGAK1XykFEZ1igw==} + engines: {node: ^18.19.0 || >=20.6.0} + peerDependencies: + '@opentelemetry/api': '>=1.0.0 <1.10.0' + '@opentelemetry/propagator-jaeger@1.30.1': resolution: {integrity: sha512-Pj/BfnYEKIOImirH76M4hDaBSx6HyZ2CXUqk+Kj02m6BB80c/yo4BdWkn/1gDFfU+YPY+bPR2U0DKBfdxCKwmg==} engines: {node: '>=14'} peerDependencies: '@opentelemetry/api': '>=1.0.0 <1.10.0' + '@opentelemetry/propagator-jaeger@2.0.1': + resolution: {integrity: sha512-7PMdPBmGVH2eQNb/AtSJizQNgeNTfh6jQFqys6lfhd6P4r+m/nTh3gKPPpaCXVdRQ+z93vfKk+4UGty390283w==} + engines: {node: ^18.19.0 || >=20.6.0} + peerDependencies: + '@opentelemetry/api': '>=1.0.0 <1.10.0' + '@opentelemetry/redis-common@0.36.2': resolution: {integrity: sha512-faYX1N0gpLhej/6nyp6bgRjzAKXn5GOEMYY7YhciSfCoITAktLUtQ36d24QEWNA1/WA1y6qQunCe0OhHRkVl9g==} engines: {node: '>=14'} + '@opentelemetry/redis-common@0.37.0': + resolution: {integrity: sha512-tJwgE6jt32bLs/9J6jhQRKU2EZnsD8qaO13aoFyXwF6s4LhpT7YFHf3Z03MqdILk6BA2BFUhoyh7k9fj9i032A==} + engines: {node: ^18.19.0 || >=20.6.0} + '@opentelemetry/resource-detector-alibaba-cloud@0.30.1': resolution: {integrity: sha512-9l0FVP3F4+Z6ax27vMzkmhZdNtxAbDqEfy7rduzya3xFLaRiJSvOpw6cru6Edl5LwO+WvgNui+VzHa9ViE8wCg==} engines: {node: '>=14'} peerDependencies: '@opentelemetry/api': ^1.0.0 + '@opentelemetry/resource-detector-alibaba-cloud@0.31.2': + resolution: {integrity: sha512-Itp6duMXkAIQzmDHIf1kc6Llj/fa0BxilaELp0K6Fp9y+b0ex9LksNAQfTDFPHNine7tFoXauvvHbJFXIB6mqw==} + engines: {node: ^18.19.0 || >=20.6.0} + peerDependencies: + '@opentelemetry/api': ^1.0.0 + '@opentelemetry/resource-detector-aws@1.12.0': resolution: {integrity: sha512-Cvi7ckOqiiuWlHBdA1IjS0ufr3sltex2Uws2RK6loVp4gzIJyOijsddAI6IZ5kiO8h/LgCWe8gxPmwkTKImd+Q==} engines: {node: '>=14'} peerDependencies: '@opentelemetry/api': ^1.0.0 + '@opentelemetry/resource-detector-aws@2.2.0': + resolution: {integrity: sha512-6k7//RWAv4U1PeZhv0Too0Sv7sp7/A6s6g9h5ZYauPcroh2t4gOmkQSspSLYCynn34YZwn3FGbuaMwTDjHEJig==} + engines: {node: ^18.19.0 || >=20.6.0} + peerDependencies: + '@opentelemetry/api': ^1.0.0 + '@opentelemetry/resource-detector-azure@0.6.1': resolution: {integrity: sha512-Djr31QCExVfWViaf9cGJnH+bUInD72p0GEfgDGgjCAztyvyji6WJvKjs6qmkpPN+Ig6KLk0ho2VgzT5Kdl4L2Q==} engines: {node: '>=14'} peerDependencies: '@opentelemetry/api': ^1.0.0 + '@opentelemetry/resource-detector-azure@0.9.0': + resolution: {integrity: sha512-5wJwAAW2vhbqIhgaRisU1y0F5mUco59F/dKgmnnnT6YNbxjrbdUZYxKF5Wl7deJoACVdL5wi/3N97GCXPEwwCQ==} + engines: {node: ^18.19.0 || >=20.6.0} + peerDependencies: + '@opentelemetry/api': ^1.0.0 + '@opentelemetry/resource-detector-container@0.6.1': resolution: {integrity: sha512-o4sLzx149DQXDmVa8pgjBDEEKOj9SuQnkSLbjUVOpQNnn10v0WNR6wLwh30mFsK26xOJ6SpqZBGKZiT7i5MjlA==} engines: {node: '>=14'} peerDependencies: '@opentelemetry/api': ^1.0.0 + '@opentelemetry/resource-detector-container@0.7.2': + resolution: {integrity: sha512-St3Krrbpvq7k0UoUNlm7Z4Xqf9HdS9R5yPslwl/WPaZpj/Bf/54WZTPmNQat+93Ey6PTX0ISKg26DfcjPemUhg==} + engines: {node: ^18.19.0 || >=20.6.0} + peerDependencies: + '@opentelemetry/api': ^1.0.0 + '@opentelemetry/resource-detector-gcp@0.33.1': resolution: {integrity: sha512-/aZJXI1rU6Eus04ih2vU0hxXAibXXMzH1WlDZ8bXcTJmhwmTY8cP392+6l7cWeMnTQOibBUz8UKV3nhcCBAefw==} engines: {node: '>=14'} peerDependencies: '@opentelemetry/api': ^1.0.0 + '@opentelemetry/resource-detector-gcp@0.36.0': + resolution: {integrity: sha512-mWnEcg4tA+IDPrkETWo42psEsDN20dzYZSm4ZH8m8uiQALnNksVmf5C3An0GUEj5zrrxMasjSuv4zEH1gI40XQ==} + engines: {node: ^18.19.0 || >=20.6.0} + peerDependencies: + '@opentelemetry/api': ^1.0.0 + '@opentelemetry/resources@1.30.1': resolution: {integrity: sha512-5UxZqiAgLYGFjS4s9qm5mBVo433u+dSPUFWVWXmLAD4wB65oMCoXaJP1KJa9DIYYMeHu3z4BZcStG3LC593cWA==} engines: {node: '>=14'} peerDependencies: '@opentelemetry/api': '>=1.0.0 <1.10.0' + '@opentelemetry/resources@2.0.1': + resolution: {integrity: sha512-dZOB3R6zvBwDKnHDTB4X1xtMArB/d324VsbiPkX/Yu0Q8T2xceRthoIVFhJdvgVM2QhGVUyX9tzwiNxGtoBJUw==} + engines: {node: ^18.19.0 || >=20.6.0} + peerDependencies: + '@opentelemetry/api': '>=1.3.0 <1.10.0' + + '@opentelemetry/sdk-logs@0.202.0': + resolution: {integrity: sha512-pv8QiQLQzk4X909YKm0lnW4hpuQg4zHwJ4XBd5bZiXcd9urvrJNoNVKnxGHPiDVX/GiLFvr5DMYsDBQbZCypRQ==} + engines: {node: ^18.19.0 || >=20.6.0} + peerDependencies: + '@opentelemetry/api': '>=1.4.0 <1.10.0' + '@opentelemetry/sdk-logs@0.57.2': resolution: {integrity: sha512-TXFHJ5c+BKggWbdEQ/inpgIzEmS2BGQowLE9UhsMd7YYlUfBQJ4uax0VF/B5NYigdM/75OoJGhAV3upEhK+3gg==} engines: {node: '>=14'} @@ -1974,6 +2424,18 @@ packages: peerDependencies: '@opentelemetry/api': '>=1.3.0 <1.10.0' + '@opentelemetry/sdk-metrics@2.0.1': + resolution: {integrity: sha512-wf8OaJoSnujMAHWR3g+/hGvNcsC16rf9s1So4JlMiFaFHiE4HpIA3oUh+uWZQ7CNuK8gVW/pQSkgoa5HkkOl0g==} + engines: {node: ^18.19.0 || >=20.6.0} + peerDependencies: + '@opentelemetry/api': '>=1.9.0 <1.10.0' + + '@opentelemetry/sdk-node@0.202.0': + resolution: {integrity: sha512-SF9vXWVd9I5CZ69mW3GfwfLI2SHgyvEqntcg0en5y8kRp5+2PPoa3Mkgj0WzFLrbSgTw4PsXn7c7H6eSdrtV0w==} + engines: {node: ^18.19.0 || >=20.6.0} + peerDependencies: + '@opentelemetry/api': '>=1.3.0 <1.10.0' + '@opentelemetry/sdk-node@0.57.2': resolution: {integrity: sha512-8BaeqZyN5sTuPBtAoY+UtKwXBdqyuRKmekN5bFzAO40CgbGzAxfTpiL3PBerT7rhZ7p2nBdq7FaMv/tBQgHE4A==} engines: {node: '>=14'} @@ -1986,12 +2448,24 @@ packages: peerDependencies: '@opentelemetry/api': '>=1.0.0 <1.10.0' + '@opentelemetry/sdk-trace-base@2.0.1': + resolution: {integrity: sha512-xYLlvk/xdScGx1aEqvxLwf6sXQLXCjk3/1SQT9X9AoN5rXRhkdvIFShuNNmtTEPRBqcsMbS4p/gJLNI2wXaDuQ==} + engines: {node: ^18.19.0 || >=20.6.0} + peerDependencies: + '@opentelemetry/api': '>=1.3.0 <1.10.0' + '@opentelemetry/sdk-trace-node@1.30.1': resolution: {integrity: sha512-cBjYOINt1JxXdpw1e5MlHmFRc5fgj4GW/86vsKFxJCJ8AL4PdVtYH41gWwl4qd4uQjqEL1oJVrXkSy5cnduAnQ==} engines: {node: '>=14'} peerDependencies: '@opentelemetry/api': '>=1.0.0 <1.10.0' + '@opentelemetry/sdk-trace-node@2.0.1': + resolution: {integrity: sha512-UhdbPF19pMpBtCWYP5lHbTogLWx9N0EBxtdagvkn5YtsAnCBZzL7SjktG+ZmupRgifsHMjwUaCCaVmqGfSADmA==} + engines: {node: ^18.19.0 || >=20.6.0} + peerDependencies: + '@opentelemetry/api': '>=1.0.0 <1.10.0' + '@opentelemetry/semantic-conventions@1.28.0': resolution: {integrity: sha512-lp4qAiMTD4sNWW4DbKLBkfiMZ4jbAboJIGOQr5DvciMRI494OapieI9qiODpOt0XBr1LjIDy1xAGAnVs5supTA==} engines: {node: '>=14'} @@ -2006,6 +2480,12 @@ packages: peerDependencies: '@opentelemetry/api': ^1.1.0 + '@opentelemetry/sql-common@0.41.0': + resolution: {integrity: sha512-pmzXctVbEERbqSfiAgdes9Y63xjoOyXcD7B6IXBkVb+vbM7M9U98mn33nGXxPf4dfYR0M+vhcKRZmbSJ7HfqFA==} + engines: {node: ^18.19.0 || >=20.6.0} + peerDependencies: + '@opentelemetry/api': ^1.1.0 + '@paralleldrive/cuid2@2.2.2': resolution: {integrity: sha512-ZOBkgDwEdoYVlSeRbYYXs0S9MejQofiVYoTbKzy/6GQa39/q5tQU2IX46+shYnUkpEl3wc+J6wRlar7r2EK2xA==} @@ -3039,9 +3519,15 @@ packages: '@types/node@24.0.3': resolution: {integrity: sha512-R4I/kzCYAdRLzfiCabn9hxWfbuHS573x+r0dJMkkzThEa7pbrcDWK+9zu3e7aBOouf+rQAciqPFMnxwr0aWgKg==} + '@types/oracledb@6.5.2': + resolution: {integrity: sha512-kK1eBS/Adeyis+3OlBDMeQQuasIDLUYXsi2T15ccNJ0iyUpQ4xDF7svFu3+bGVrI0CMBUclPciz+lsQR3JX3TQ==} + '@types/pg-pool@2.0.6': resolution: {integrity: sha512-TaAUE5rq2VQYxab5Ts7WZhKNmuN78Q6PiFonTDdpbx8a1H0M1vhy3rhiMjl+e2iHmogyMw7jZF4FrE6eJUy5HQ==} + '@types/pg@8.15.1': + resolution: {integrity: sha512-YKHrkGWBX5+ivzvOQ66I0fdqsQTsvxqM0AGP2i0XrVZ9DP5VA/deEbTf7VuLPGpY7fJB9uGbkZ6KjVhuHcrTkQ==} + '@types/pg@8.15.4': resolution: {integrity: sha512-I6UNVBAoYbvuWkkU3oosC8yxqH21f4/Jc4DK71JLG3dT2mdlGe1z+ep/LQGXaKaOgcvUrsQoPRqfgtMcvZiJhg==} @@ -5157,6 +5643,9 @@ packages: resolution: {integrity: sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew==} engines: {node: '>= 0.4'} + obuf@1.1.2: + resolution: {integrity: sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg==} + on-exit-leak-free@2.1.2: resolution: {integrity: sha512-0eJJY6hXLGf1udHwfNftBqH+g73EU4B504nZeKpz1sYRKafAghwxEJunB2O7rDZkL4PGfsMVnTXZ2EjibbqcsA==} engines: {node: '>=14.0.0'} @@ -5288,6 +5777,10 @@ packages: resolution: {integrity: sha512-WCtabS6t3c8SkpDBUlb1kjOs7l66xsGdKpIPZsg4wR+B3+u9UAum2odSsF9tnvxg80h4ZxLWMy4pRjOsFIqQpw==} engines: {node: '>=4.0.0'} + pg-numeric@1.0.2: + resolution: {integrity: sha512-BM/Thnrw5jm2kKLE5uJkXqqExRUY/toLHda65XgFTBTFYZyopbKjBe29Ii3RbkvlsMoFwD+tHeGaCjjv0gHlyw==} + engines: {node: '>=4'} + pg-pool@3.10.0: resolution: {integrity: sha512-DzZ26On4sQ0KmqnO34muPcmKbhrjmyiO4lCCR0VwEd7MjmiKf5NTg/6+apUEu0NF7ESa37CGzFxH513CoUmWnA==} peerDependencies: @@ -5300,6 +5793,10 @@ packages: resolution: {integrity: sha512-qTAAlrEsl8s4OiEQY69wDvcMIdQN6wdz5ojQiOy6YRMuynxenON0O5oCpJI6lshc6scgAY8qvJ2On/p+CXY0GA==} engines: {node: '>=4'} + pg-types@4.0.2: + resolution: {integrity: sha512-cRL3JpS3lKMGsKaWndugWQoLOCoP+Cic8oseVcbr0qhPzYD5DWXK+RZ9LY9wxRf7RQia4SCwQlXk0q6FCPrVng==} + engines: {node: '>=10'} + pg@8.16.0: resolution: {integrity: sha512-7SKfdvP8CTNXjMUzfcVTaI+TDzBEeaUnVwiVGZQD1Hh33Kpev7liQba9uLd4CfN8r9mCVsD0JIpq03+Unpz+kg==} engines: {node: '>= 8.0.0'} @@ -5356,18 +5853,37 @@ packages: resolution: {integrity: sha512-VpZrUqU5A69eQyW2c5CA1jtLecCsN2U/bD6VilrFDWq5+5UIEVO7nazS3TEcHf1zuPYO/sqGvUvW62g86RXZuA==} engines: {node: '>=4'} + postgres-array@3.0.4: + resolution: {integrity: sha512-nAUSGfSDGOaOAEGwqsRY27GPOea7CNipJPOA7lPbdEpx5Kg3qzdP0AaWC5MlhTWV9s4hFX39nomVZ+C4tnGOJQ==} + engines: {node: '>=12'} + postgres-bytea@1.0.0: resolution: {integrity: sha512-xy3pmLuQqRBZBXDULy7KbaitYqLcmxigw14Q5sj8QBVLqEwXfeybIKVWiqAXTlcvdvb0+xkOtDbfQMOf4lST1w==} engines: {node: '>=0.10.0'} + postgres-bytea@3.0.0: + resolution: {integrity: sha512-CNd4jim9RFPkObHSjVHlVrxoVQXz7quwNFpz7RY1okNNme49+sVyiTvTRobiLV548Hx/hb1BG+iE7h9493WzFw==} + engines: {node: '>= 6'} + postgres-date@1.0.7: resolution: {integrity: sha512-suDmjLVQg78nMK2UZ454hAG+OAW+HQPZ6n++TNDUX+L0+uUlLywnoxJKDou51Zm+zTCjrCl0Nq6J9C5hP9vK/Q==} engines: {node: '>=0.10.0'} + postgres-date@2.1.0: + resolution: {integrity: sha512-K7Juri8gtgXVcDfZttFKVmhglp7epKb1K4pgrkLxehjqkrgPhfG6OO8LHLkfaqkbpjNRnra018XwAr1yQFWGcA==} + engines: {node: '>=12'} + postgres-interval@1.2.0: resolution: {integrity: sha512-9ZhXKM/rw350N1ovuWHbGxnGh/SNJ4cnxHiM0rxE4VN41wsg8P8zWn9hv/buK00RP4WvlOyr/RBDiptyxVbkZQ==} engines: {node: '>=0.10.0'} + postgres-interval@3.0.0: + resolution: {integrity: sha512-BSNDnbyZCXSxgA+1f5UU2GmwhoI0aU5yMxRGO8CdFEcY2BQF9xm/7MqKnYoM1nJDk8nONNWDk9WeSmePFhQdlw==} + engines: {node: '>=12'} + + postgres-range@1.1.4: + resolution: {integrity: sha512-i/hbxIE9803Alj/6ytL7UHQxRvZkI9O4Sy+J3HGc4F4oo/2eQAjTSNJ0bfxyse3bH0nuVesCk+3IRLaMtG3H6w==} + postgres@3.4.7: resolution: {integrity: sha512-Jtc2612XINuBjIl/QTWsV5UvE8UHuNblcO3vVADSrKsrc6RqGX6lOW1cEo3CM2v0XG4Nat8nI+YM7/f26VxXLw==} engines: {node: '>=12'} @@ -7496,6 +8012,10 @@ snapshots: '@nodelib/fs.scandir': 2.1.5 fastq: 1.19.1 + '@opentelemetry/api-logs@0.202.0': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/api-logs@0.51.1': dependencies: '@opentelemetry/api': 1.9.0 @@ -7560,15 +8080,91 @@ snapshots: - encoding - supports-color + '@opentelemetry/auto-instrumentations-node@0.60.1(@opentelemetry/api@1.9.0)(@opentelemetry/core@1.30.1(@opentelemetry/api@1.9.0))': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/core': 1.30.1(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation': 0.202.0(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation-amqplib': 0.49.0(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation-aws-lambda': 0.53.0(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation-aws-sdk': 0.54.0(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation-bunyan': 0.48.0(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation-cassandra-driver': 0.48.0(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation-connect': 0.46.0(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation-cucumber': 0.17.0(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation-dataloader': 0.19.0(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation-dns': 0.46.0(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation-express': 0.51.0(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation-fastify': 0.47.0(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation-fs': 0.22.0(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation-generic-pool': 0.46.0(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation-graphql': 0.50.0(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation-grpc': 0.202.0(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation-hapi': 0.49.0(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation-http': 0.202.0(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation-ioredis': 0.50.0(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation-kafkajs': 0.11.0(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation-knex': 0.47.0(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation-koa': 0.50.1(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation-lru-memoizer': 0.47.0(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation-memcached': 0.46.0(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation-mongodb': 0.55.1(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation-mongoose': 0.49.0(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation-mysql': 0.48.0(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation-mysql2': 0.48.0(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation-nestjs-core': 0.48.0(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation-net': 0.46.1(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation-oracledb': 0.28.0(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation-pg': 0.54.0(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation-pino': 0.49.0(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation-redis': 0.49.1(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation-redis-4': 0.49.0(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation-restify': 0.48.1(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation-router': 0.47.0(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation-runtime-node': 0.16.0(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation-socket.io': 0.49.0(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation-tedious': 0.21.0(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation-undici': 0.13.1(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation-winston': 0.47.0(@opentelemetry/api@1.9.0) + '@opentelemetry/resource-detector-alibaba-cloud': 0.31.2(@opentelemetry/api@1.9.0) + '@opentelemetry/resource-detector-aws': 2.2.0(@opentelemetry/api@1.9.0) + '@opentelemetry/resource-detector-azure': 0.9.0(@opentelemetry/api@1.9.0) + '@opentelemetry/resource-detector-container': 0.7.2(@opentelemetry/api@1.9.0) + '@opentelemetry/resource-detector-gcp': 0.36.0(@opentelemetry/api@1.9.0) + '@opentelemetry/resources': 2.0.1(@opentelemetry/api@1.9.0) + '@opentelemetry/sdk-node': 0.202.0(@opentelemetry/api@1.9.0) + transitivePeerDependencies: + - encoding + - supports-color + '@opentelemetry/context-async-hooks@1.30.1(@opentelemetry/api@1.9.0)': dependencies: '@opentelemetry/api': 1.9.0 + '@opentelemetry/context-async-hooks@2.0.1(@opentelemetry/api@1.9.0)': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/core@1.30.1(@opentelemetry/api@1.9.0)': dependencies: '@opentelemetry/api': 1.9.0 '@opentelemetry/semantic-conventions': 1.28.0 + '@opentelemetry/core@2.0.1(@opentelemetry/api@1.9.0)': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/semantic-conventions': 1.34.0 + + '@opentelemetry/exporter-logs-otlp-grpc@0.202.0(@opentelemetry/api@1.9.0)': + dependencies: + '@grpc/grpc-js': 1.13.4 + '@opentelemetry/api': 1.9.0 + '@opentelemetry/core': 2.0.1(@opentelemetry/api@1.9.0) + '@opentelemetry/otlp-exporter-base': 0.202.0(@opentelemetry/api@1.9.0) + '@opentelemetry/otlp-grpc-exporter-base': 0.202.0(@opentelemetry/api@1.9.0) + '@opentelemetry/otlp-transformer': 0.202.0(@opentelemetry/api@1.9.0) + '@opentelemetry/sdk-logs': 0.202.0(@opentelemetry/api@1.9.0) + '@opentelemetry/exporter-logs-otlp-grpc@0.57.2(@opentelemetry/api@1.9.0)': dependencies: '@grpc/grpc-js': 1.13.4 @@ -7579,6 +8175,15 @@ snapshots: '@opentelemetry/otlp-transformer': 0.57.2(@opentelemetry/api@1.9.0) '@opentelemetry/sdk-logs': 0.57.2(@opentelemetry/api@1.9.0) + '@opentelemetry/exporter-logs-otlp-http@0.202.0(@opentelemetry/api@1.9.0)': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/api-logs': 0.202.0 + '@opentelemetry/core': 2.0.1(@opentelemetry/api@1.9.0) + '@opentelemetry/otlp-exporter-base': 0.202.0(@opentelemetry/api@1.9.0) + '@opentelemetry/otlp-transformer': 0.202.0(@opentelemetry/api@1.9.0) + '@opentelemetry/sdk-logs': 0.202.0(@opentelemetry/api@1.9.0) + '@opentelemetry/exporter-logs-otlp-http@0.57.2(@opentelemetry/api@1.9.0)': dependencies: '@opentelemetry/api': 1.9.0 @@ -7588,6 +8193,17 @@ snapshots: '@opentelemetry/otlp-transformer': 0.57.2(@opentelemetry/api@1.9.0) '@opentelemetry/sdk-logs': 0.57.2(@opentelemetry/api@1.9.0) + '@opentelemetry/exporter-logs-otlp-proto@0.202.0(@opentelemetry/api@1.9.0)': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/api-logs': 0.202.0 + '@opentelemetry/core': 2.0.1(@opentelemetry/api@1.9.0) + '@opentelemetry/otlp-exporter-base': 0.202.0(@opentelemetry/api@1.9.0) + '@opentelemetry/otlp-transformer': 0.202.0(@opentelemetry/api@1.9.0) + '@opentelemetry/resources': 2.0.1(@opentelemetry/api@1.9.0) + '@opentelemetry/sdk-logs': 0.202.0(@opentelemetry/api@1.9.0) + '@opentelemetry/sdk-trace-base': 2.0.1(@opentelemetry/api@1.9.0) + '@opentelemetry/exporter-logs-otlp-proto@0.57.2(@opentelemetry/api@1.9.0)': dependencies: '@opentelemetry/api': 1.9.0 @@ -7599,6 +8215,18 @@ snapshots: '@opentelemetry/sdk-logs': 0.57.2(@opentelemetry/api@1.9.0) '@opentelemetry/sdk-trace-base': 1.30.1(@opentelemetry/api@1.9.0) + '@opentelemetry/exporter-metrics-otlp-grpc@0.202.0(@opentelemetry/api@1.9.0)': + dependencies: + '@grpc/grpc-js': 1.13.4 + '@opentelemetry/api': 1.9.0 + '@opentelemetry/core': 2.0.1(@opentelemetry/api@1.9.0) + '@opentelemetry/exporter-metrics-otlp-http': 0.202.0(@opentelemetry/api@1.9.0) + '@opentelemetry/otlp-exporter-base': 0.202.0(@opentelemetry/api@1.9.0) + '@opentelemetry/otlp-grpc-exporter-base': 0.202.0(@opentelemetry/api@1.9.0) + '@opentelemetry/otlp-transformer': 0.202.0(@opentelemetry/api@1.9.0) + '@opentelemetry/resources': 2.0.1(@opentelemetry/api@1.9.0) + '@opentelemetry/sdk-metrics': 2.0.1(@opentelemetry/api@1.9.0) + '@opentelemetry/exporter-metrics-otlp-grpc@0.57.2(@opentelemetry/api@1.9.0)': dependencies: '@grpc/grpc-js': 1.13.4 @@ -7611,6 +8239,15 @@ snapshots: '@opentelemetry/resources': 1.30.1(@opentelemetry/api@1.9.0) '@opentelemetry/sdk-metrics': 1.30.1(@opentelemetry/api@1.9.0) + '@opentelemetry/exporter-metrics-otlp-http@0.202.0(@opentelemetry/api@1.9.0)': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/core': 2.0.1(@opentelemetry/api@1.9.0) + '@opentelemetry/otlp-exporter-base': 0.202.0(@opentelemetry/api@1.9.0) + '@opentelemetry/otlp-transformer': 0.202.0(@opentelemetry/api@1.9.0) + '@opentelemetry/resources': 2.0.1(@opentelemetry/api@1.9.0) + '@opentelemetry/sdk-metrics': 2.0.1(@opentelemetry/api@1.9.0) + '@opentelemetry/exporter-metrics-otlp-http@0.57.2(@opentelemetry/api@1.9.0)': dependencies: '@opentelemetry/api': 1.9.0 @@ -7620,6 +8257,16 @@ snapshots: '@opentelemetry/resources': 1.30.1(@opentelemetry/api@1.9.0) '@opentelemetry/sdk-metrics': 1.30.1(@opentelemetry/api@1.9.0) + '@opentelemetry/exporter-metrics-otlp-proto@0.202.0(@opentelemetry/api@1.9.0)': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/core': 2.0.1(@opentelemetry/api@1.9.0) + '@opentelemetry/exporter-metrics-otlp-http': 0.202.0(@opentelemetry/api@1.9.0) + '@opentelemetry/otlp-exporter-base': 0.202.0(@opentelemetry/api@1.9.0) + '@opentelemetry/otlp-transformer': 0.202.0(@opentelemetry/api@1.9.0) + '@opentelemetry/resources': 2.0.1(@opentelemetry/api@1.9.0) + '@opentelemetry/sdk-metrics': 2.0.1(@opentelemetry/api@1.9.0) + '@opentelemetry/exporter-metrics-otlp-proto@0.57.2(@opentelemetry/api@1.9.0)': dependencies: '@opentelemetry/api': 1.9.0 @@ -7630,6 +8277,13 @@ snapshots: '@opentelemetry/resources': 1.30.1(@opentelemetry/api@1.9.0) '@opentelemetry/sdk-metrics': 1.30.1(@opentelemetry/api@1.9.0) + '@opentelemetry/exporter-prometheus@0.202.0(@opentelemetry/api@1.9.0)': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/core': 2.0.1(@opentelemetry/api@1.9.0) + '@opentelemetry/resources': 2.0.1(@opentelemetry/api@1.9.0) + '@opentelemetry/sdk-metrics': 2.0.1(@opentelemetry/api@1.9.0) + '@opentelemetry/exporter-prometheus@0.57.2(@opentelemetry/api@1.9.0)': dependencies: '@opentelemetry/api': 1.9.0 @@ -7637,6 +8291,17 @@ snapshots: '@opentelemetry/resources': 1.30.1(@opentelemetry/api@1.9.0) '@opentelemetry/sdk-metrics': 1.30.1(@opentelemetry/api@1.9.0) + '@opentelemetry/exporter-trace-otlp-grpc@0.202.0(@opentelemetry/api@1.9.0)': + dependencies: + '@grpc/grpc-js': 1.13.4 + '@opentelemetry/api': 1.9.0 + '@opentelemetry/core': 2.0.1(@opentelemetry/api@1.9.0) + '@opentelemetry/otlp-exporter-base': 0.202.0(@opentelemetry/api@1.9.0) + '@opentelemetry/otlp-grpc-exporter-base': 0.202.0(@opentelemetry/api@1.9.0) + '@opentelemetry/otlp-transformer': 0.202.0(@opentelemetry/api@1.9.0) + '@opentelemetry/resources': 2.0.1(@opentelemetry/api@1.9.0) + '@opentelemetry/sdk-trace-base': 2.0.1(@opentelemetry/api@1.9.0) + '@opentelemetry/exporter-trace-otlp-grpc@0.57.2(@opentelemetry/api@1.9.0)': dependencies: '@grpc/grpc-js': 1.13.4 @@ -7648,6 +8313,15 @@ snapshots: '@opentelemetry/resources': 1.30.1(@opentelemetry/api@1.9.0) '@opentelemetry/sdk-trace-base': 1.30.1(@opentelemetry/api@1.9.0) + '@opentelemetry/exporter-trace-otlp-http@0.202.0(@opentelemetry/api@1.9.0)': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/core': 2.0.1(@opentelemetry/api@1.9.0) + '@opentelemetry/otlp-exporter-base': 0.202.0(@opentelemetry/api@1.9.0) + '@opentelemetry/otlp-transformer': 0.202.0(@opentelemetry/api@1.9.0) + '@opentelemetry/resources': 2.0.1(@opentelemetry/api@1.9.0) + '@opentelemetry/sdk-trace-base': 2.0.1(@opentelemetry/api@1.9.0) + '@opentelemetry/exporter-trace-otlp-http@0.57.2(@opentelemetry/api@1.9.0)': dependencies: '@opentelemetry/api': 1.9.0 @@ -7657,6 +8331,15 @@ snapshots: '@opentelemetry/resources': 1.30.1(@opentelemetry/api@1.9.0) '@opentelemetry/sdk-trace-base': 1.30.1(@opentelemetry/api@1.9.0) + '@opentelemetry/exporter-trace-otlp-proto@0.202.0(@opentelemetry/api@1.9.0)': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/core': 2.0.1(@opentelemetry/api@1.9.0) + '@opentelemetry/otlp-exporter-base': 0.202.0(@opentelemetry/api@1.9.0) + '@opentelemetry/otlp-transformer': 0.202.0(@opentelemetry/api@1.9.0) + '@opentelemetry/resources': 2.0.1(@opentelemetry/api@1.9.0) + '@opentelemetry/sdk-trace-base': 2.0.1(@opentelemetry/api@1.9.0) + '@opentelemetry/exporter-trace-otlp-proto@0.57.2(@opentelemetry/api@1.9.0)': dependencies: '@opentelemetry/api': 1.9.0 @@ -7674,6 +8357,14 @@ snapshots: '@opentelemetry/sdk-trace-base': 1.30.1(@opentelemetry/api@1.9.0) '@opentelemetry/semantic-conventions': 1.28.0 + '@opentelemetry/exporter-zipkin@2.0.1(@opentelemetry/api@1.9.0)': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/core': 2.0.1(@opentelemetry/api@1.9.0) + '@opentelemetry/resources': 2.0.1(@opentelemetry/api@1.9.0) + '@opentelemetry/sdk-trace-base': 2.0.1(@opentelemetry/api@1.9.0) + '@opentelemetry/semantic-conventions': 1.34.0 + '@opentelemetry/instrumentation-amqplib@0.46.1(@opentelemetry/api@1.9.0)': dependencies: '@opentelemetry/api': 1.9.0 @@ -7683,6 +8374,15 @@ snapshots: transitivePeerDependencies: - supports-color + '@opentelemetry/instrumentation-amqplib@0.49.0(@opentelemetry/api@1.9.0)': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/core': 2.0.1(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation': 0.202.0(@opentelemetry/api@1.9.0) + '@opentelemetry/semantic-conventions': 1.34.0 + transitivePeerDependencies: + - supports-color + '@opentelemetry/instrumentation-aws-lambda@0.50.3(@opentelemetry/api@1.9.0)': dependencies: '@opentelemetry/api': 1.9.0 @@ -7692,6 +8392,15 @@ snapshots: transitivePeerDependencies: - supports-color + '@opentelemetry/instrumentation-aws-lambda@0.53.0(@opentelemetry/api@1.9.0)': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/instrumentation': 0.202.0(@opentelemetry/api@1.9.0) + '@opentelemetry/semantic-conventions': 1.34.0 + '@types/aws-lambda': 8.10.147 + transitivePeerDependencies: + - supports-color + '@opentelemetry/instrumentation-aws-sdk@0.49.1(@opentelemetry/api@1.9.0)': dependencies: '@opentelemetry/api': 1.9.0 @@ -7702,6 +8411,16 @@ snapshots: transitivePeerDependencies: - supports-color + '@opentelemetry/instrumentation-aws-sdk@0.54.0(@opentelemetry/api@1.9.0)': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/core': 2.0.1(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation': 0.202.0(@opentelemetry/api@1.9.0) + '@opentelemetry/propagation-utils': 0.31.2(@opentelemetry/api@1.9.0) + '@opentelemetry/semantic-conventions': 1.34.0 + transitivePeerDependencies: + - supports-color + '@opentelemetry/instrumentation-bunyan@0.45.1(@opentelemetry/api@1.9.0)': dependencies: '@opentelemetry/api': 1.9.0 @@ -7711,6 +8430,15 @@ snapshots: transitivePeerDependencies: - supports-color + '@opentelemetry/instrumentation-bunyan@0.48.0(@opentelemetry/api@1.9.0)': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/api-logs': 0.202.0 + '@opentelemetry/instrumentation': 0.202.0(@opentelemetry/api@1.9.0) + '@types/bunyan': 1.8.11 + transitivePeerDependencies: + - supports-color + '@opentelemetry/instrumentation-cassandra-driver@0.45.1(@opentelemetry/api@1.9.0)': dependencies: '@opentelemetry/api': 1.9.0 @@ -7719,6 +8447,14 @@ snapshots: transitivePeerDependencies: - supports-color + '@opentelemetry/instrumentation-cassandra-driver@0.48.0(@opentelemetry/api@1.9.0)': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/instrumentation': 0.202.0(@opentelemetry/api@1.9.0) + '@opentelemetry/semantic-conventions': 1.34.0 + transitivePeerDependencies: + - supports-color + '@opentelemetry/instrumentation-connect@0.43.1(@opentelemetry/api@1.9.0)': dependencies: '@opentelemetry/api': 1.9.0 @@ -7729,6 +8465,16 @@ snapshots: transitivePeerDependencies: - supports-color + '@opentelemetry/instrumentation-connect@0.46.0(@opentelemetry/api@1.9.0)': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/core': 2.0.1(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation': 0.202.0(@opentelemetry/api@1.9.0) + '@opentelemetry/semantic-conventions': 1.34.0 + '@types/connect': 3.4.38 + transitivePeerDependencies: + - supports-color + '@opentelemetry/instrumentation-cucumber@0.14.1(@opentelemetry/api@1.9.0)': dependencies: '@opentelemetry/api': 1.9.0 @@ -7737,6 +8483,14 @@ snapshots: transitivePeerDependencies: - supports-color + '@opentelemetry/instrumentation-cucumber@0.17.0(@opentelemetry/api@1.9.0)': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/instrumentation': 0.202.0(@opentelemetry/api@1.9.0) + '@opentelemetry/semantic-conventions': 1.34.0 + transitivePeerDependencies: + - supports-color + '@opentelemetry/instrumentation-dataloader@0.16.1(@opentelemetry/api@1.9.0)': dependencies: '@opentelemetry/api': 1.9.0 @@ -7744,6 +8498,13 @@ snapshots: transitivePeerDependencies: - supports-color + '@opentelemetry/instrumentation-dataloader@0.19.0(@opentelemetry/api@1.9.0)': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/instrumentation': 0.202.0(@opentelemetry/api@1.9.0) + transitivePeerDependencies: + - supports-color + '@opentelemetry/instrumentation-dns@0.43.1(@opentelemetry/api@1.9.0)': dependencies: '@opentelemetry/api': 1.9.0 @@ -7751,6 +8512,13 @@ snapshots: transitivePeerDependencies: - supports-color + '@opentelemetry/instrumentation-dns@0.46.0(@opentelemetry/api@1.9.0)': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/instrumentation': 0.202.0(@opentelemetry/api@1.9.0) + transitivePeerDependencies: + - supports-color + '@opentelemetry/instrumentation-express@0.47.1(@opentelemetry/api@1.9.0)': dependencies: '@opentelemetry/api': 1.9.0 @@ -7760,6 +8528,15 @@ snapshots: transitivePeerDependencies: - supports-color + '@opentelemetry/instrumentation-express@0.51.0(@opentelemetry/api@1.9.0)': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/core': 2.0.1(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation': 0.202.0(@opentelemetry/api@1.9.0) + '@opentelemetry/semantic-conventions': 1.34.0 + transitivePeerDependencies: + - supports-color + '@opentelemetry/instrumentation-fastify@0.44.2(@opentelemetry/api@1.9.0)': dependencies: '@opentelemetry/api': 1.9.0 @@ -7769,6 +8546,15 @@ snapshots: transitivePeerDependencies: - supports-color + '@opentelemetry/instrumentation-fastify@0.47.0(@opentelemetry/api@1.9.0)': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/core': 2.0.1(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation': 0.202.0(@opentelemetry/api@1.9.0) + '@opentelemetry/semantic-conventions': 1.34.0 + transitivePeerDependencies: + - supports-color + '@opentelemetry/instrumentation-fs@0.19.1(@opentelemetry/api@1.9.0)': dependencies: '@opentelemetry/api': 1.9.0 @@ -7777,6 +8563,14 @@ snapshots: transitivePeerDependencies: - supports-color + '@opentelemetry/instrumentation-fs@0.22.0(@opentelemetry/api@1.9.0)': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/core': 2.0.1(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation': 0.202.0(@opentelemetry/api@1.9.0) + transitivePeerDependencies: + - supports-color + '@opentelemetry/instrumentation-generic-pool@0.43.1(@opentelemetry/api@1.9.0)': dependencies: '@opentelemetry/api': 1.9.0 @@ -7784,6 +8578,13 @@ snapshots: transitivePeerDependencies: - supports-color + '@opentelemetry/instrumentation-generic-pool@0.46.0(@opentelemetry/api@1.9.0)': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/instrumentation': 0.202.0(@opentelemetry/api@1.9.0) + transitivePeerDependencies: + - supports-color + '@opentelemetry/instrumentation-graphql@0.47.1(@opentelemetry/api@1.9.0)': dependencies: '@opentelemetry/api': 1.9.0 @@ -7791,6 +8592,21 @@ snapshots: transitivePeerDependencies: - supports-color + '@opentelemetry/instrumentation-graphql@0.50.0(@opentelemetry/api@1.9.0)': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/instrumentation': 0.202.0(@opentelemetry/api@1.9.0) + transitivePeerDependencies: + - supports-color + + '@opentelemetry/instrumentation-grpc@0.202.0(@opentelemetry/api@1.9.0)': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/instrumentation': 0.202.0(@opentelemetry/api@1.9.0) + '@opentelemetry/semantic-conventions': 1.34.0 + transitivePeerDependencies: + - supports-color + '@opentelemetry/instrumentation-grpc@0.57.2(@opentelemetry/api@1.9.0)': dependencies: '@opentelemetry/api': 1.9.0 @@ -7808,6 +8624,25 @@ snapshots: transitivePeerDependencies: - supports-color + '@opentelemetry/instrumentation-hapi@0.49.0(@opentelemetry/api@1.9.0)': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/core': 2.0.1(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation': 0.202.0(@opentelemetry/api@1.9.0) + '@opentelemetry/semantic-conventions': 1.34.0 + transitivePeerDependencies: + - supports-color + + '@opentelemetry/instrumentation-http@0.202.0(@opentelemetry/api@1.9.0)': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/core': 2.0.1(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation': 0.202.0(@opentelemetry/api@1.9.0) + '@opentelemetry/semantic-conventions': 1.34.0 + forwarded-parse: 2.1.2 + transitivePeerDependencies: + - supports-color + '@opentelemetry/instrumentation-http@0.57.2(@opentelemetry/api@1.9.0)': dependencies: '@opentelemetry/api': 1.9.0 @@ -7828,6 +8663,23 @@ snapshots: transitivePeerDependencies: - supports-color + '@opentelemetry/instrumentation-ioredis@0.50.0(@opentelemetry/api@1.9.0)': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/instrumentation': 0.202.0(@opentelemetry/api@1.9.0) + '@opentelemetry/redis-common': 0.37.0 + '@opentelemetry/semantic-conventions': 1.34.0 + transitivePeerDependencies: + - supports-color + + '@opentelemetry/instrumentation-kafkajs@0.11.0(@opentelemetry/api@1.9.0)': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/instrumentation': 0.202.0(@opentelemetry/api@1.9.0) + '@opentelemetry/semantic-conventions': 1.34.0 + transitivePeerDependencies: + - supports-color + '@opentelemetry/instrumentation-kafkajs@0.7.1(@opentelemetry/api@1.9.0)': dependencies: '@opentelemetry/api': 1.9.0 @@ -7844,6 +8696,14 @@ snapshots: transitivePeerDependencies: - supports-color + '@opentelemetry/instrumentation-knex@0.47.0(@opentelemetry/api@1.9.0)': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/instrumentation': 0.202.0(@opentelemetry/api@1.9.0) + '@opentelemetry/semantic-conventions': 1.34.0 + transitivePeerDependencies: + - supports-color + '@opentelemetry/instrumentation-koa@0.47.1(@opentelemetry/api@1.9.0)': dependencies: '@opentelemetry/api': 1.9.0 @@ -7853,6 +8713,15 @@ snapshots: transitivePeerDependencies: - supports-color + '@opentelemetry/instrumentation-koa@0.50.1(@opentelemetry/api@1.9.0)': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/core': 2.0.1(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation': 0.202.0(@opentelemetry/api@1.9.0) + '@opentelemetry/semantic-conventions': 1.34.0 + transitivePeerDependencies: + - supports-color + '@opentelemetry/instrumentation-lru-memoizer@0.44.1(@opentelemetry/api@1.9.0)': dependencies: '@opentelemetry/api': 1.9.0 @@ -7860,6 +8729,13 @@ snapshots: transitivePeerDependencies: - supports-color + '@opentelemetry/instrumentation-lru-memoizer@0.47.0(@opentelemetry/api@1.9.0)': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/instrumentation': 0.202.0(@opentelemetry/api@1.9.0) + transitivePeerDependencies: + - supports-color + '@opentelemetry/instrumentation-memcached@0.43.1(@opentelemetry/api@1.9.0)': dependencies: '@opentelemetry/api': 1.9.0 @@ -7869,6 +8745,15 @@ snapshots: transitivePeerDependencies: - supports-color + '@opentelemetry/instrumentation-memcached@0.46.0(@opentelemetry/api@1.9.0)': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/instrumentation': 0.202.0(@opentelemetry/api@1.9.0) + '@opentelemetry/semantic-conventions': 1.34.0 + '@types/memcached': 2.2.10 + transitivePeerDependencies: + - supports-color + '@opentelemetry/instrumentation-mongodb@0.52.0(@opentelemetry/api@1.9.0)': dependencies: '@opentelemetry/api': 1.9.0 @@ -7877,6 +8762,14 @@ snapshots: transitivePeerDependencies: - supports-color + '@opentelemetry/instrumentation-mongodb@0.55.1(@opentelemetry/api@1.9.0)': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/instrumentation': 0.202.0(@opentelemetry/api@1.9.0) + '@opentelemetry/semantic-conventions': 1.34.0 + transitivePeerDependencies: + - supports-color + '@opentelemetry/instrumentation-mongoose@0.46.1(@opentelemetry/api@1.9.0)': dependencies: '@opentelemetry/api': 1.9.0 @@ -7886,6 +8779,15 @@ snapshots: transitivePeerDependencies: - supports-color + '@opentelemetry/instrumentation-mongoose@0.49.0(@opentelemetry/api@1.9.0)': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/core': 2.0.1(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation': 0.202.0(@opentelemetry/api@1.9.0) + '@opentelemetry/semantic-conventions': 1.34.0 + transitivePeerDependencies: + - supports-color + '@opentelemetry/instrumentation-mysql2@0.45.2(@opentelemetry/api@1.9.0)': dependencies: '@opentelemetry/api': 1.9.0 @@ -7895,6 +8797,15 @@ snapshots: transitivePeerDependencies: - supports-color + '@opentelemetry/instrumentation-mysql2@0.48.0(@opentelemetry/api@1.9.0)': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/instrumentation': 0.202.0(@opentelemetry/api@1.9.0) + '@opentelemetry/semantic-conventions': 1.34.0 + '@opentelemetry/sql-common': 0.41.0(@opentelemetry/api@1.9.0) + transitivePeerDependencies: + - supports-color + '@opentelemetry/instrumentation-mysql@0.45.1(@opentelemetry/api@1.9.0)': dependencies: '@opentelemetry/api': 1.9.0 @@ -7904,6 +8815,15 @@ snapshots: transitivePeerDependencies: - supports-color + '@opentelemetry/instrumentation-mysql@0.48.0(@opentelemetry/api@1.9.0)': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/instrumentation': 0.202.0(@opentelemetry/api@1.9.0) + '@opentelemetry/semantic-conventions': 1.34.0 + '@types/mysql': 2.15.26 + transitivePeerDependencies: + - supports-color + '@opentelemetry/instrumentation-nestjs-core@0.44.1(@opentelemetry/api@1.9.0)': dependencies: '@opentelemetry/api': 1.9.0 @@ -7912,6 +8832,14 @@ snapshots: transitivePeerDependencies: - supports-color + '@opentelemetry/instrumentation-nestjs-core@0.48.0(@opentelemetry/api@1.9.0)': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/instrumentation': 0.202.0(@opentelemetry/api@1.9.0) + '@opentelemetry/semantic-conventions': 1.34.0 + transitivePeerDependencies: + - supports-color + '@opentelemetry/instrumentation-net@0.43.1(@opentelemetry/api@1.9.0)': dependencies: '@opentelemetry/api': 1.9.0 @@ -7920,6 +8848,23 @@ snapshots: transitivePeerDependencies: - supports-color + '@opentelemetry/instrumentation-net@0.46.1(@opentelemetry/api@1.9.0)': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/instrumentation': 0.202.0(@opentelemetry/api@1.9.0) + '@opentelemetry/semantic-conventions': 1.34.0 + transitivePeerDependencies: + - supports-color + + '@opentelemetry/instrumentation-oracledb@0.28.0(@opentelemetry/api@1.9.0)': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/instrumentation': 0.202.0(@opentelemetry/api@1.9.0) + '@opentelemetry/semantic-conventions': 1.34.0 + '@types/oracledb': 6.5.2 + transitivePeerDependencies: + - supports-color + '@opentelemetry/instrumentation-pg@0.51.1(@opentelemetry/api@1.9.0)': dependencies: '@opentelemetry/api': 1.9.0 @@ -7932,6 +8877,18 @@ snapshots: transitivePeerDependencies: - supports-color + '@opentelemetry/instrumentation-pg@0.54.0(@opentelemetry/api@1.9.0)': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/core': 2.0.1(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation': 0.202.0(@opentelemetry/api@1.9.0) + '@opentelemetry/semantic-conventions': 1.34.0 + '@opentelemetry/sql-common': 0.41.0(@opentelemetry/api@1.9.0) + '@types/pg': 8.15.1 + '@types/pg-pool': 2.0.6 + transitivePeerDependencies: + - supports-color + '@opentelemetry/instrumentation-pino@0.46.1(@opentelemetry/api@1.9.0)': dependencies: '@opentelemetry/api': 1.9.0 @@ -7941,6 +8898,15 @@ snapshots: transitivePeerDependencies: - supports-color + '@opentelemetry/instrumentation-pino@0.49.0(@opentelemetry/api@1.9.0)': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/api-logs': 0.202.0 + '@opentelemetry/core': 2.0.1(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation': 0.202.0(@opentelemetry/api@1.9.0) + transitivePeerDependencies: + - supports-color + '@opentelemetry/instrumentation-redis-4@0.46.1(@opentelemetry/api@1.9.0)': dependencies: '@opentelemetry/api': 1.9.0 @@ -7950,6 +8916,15 @@ snapshots: transitivePeerDependencies: - supports-color + '@opentelemetry/instrumentation-redis-4@0.49.0(@opentelemetry/api@1.9.0)': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/instrumentation': 0.202.0(@opentelemetry/api@1.9.0) + '@opentelemetry/redis-common': 0.37.0 + '@opentelemetry/semantic-conventions': 1.34.0 + transitivePeerDependencies: + - supports-color + '@opentelemetry/instrumentation-redis@0.46.1(@opentelemetry/api@1.9.0)': dependencies: '@opentelemetry/api': 1.9.0 @@ -7959,6 +8934,15 @@ snapshots: transitivePeerDependencies: - supports-color + '@opentelemetry/instrumentation-redis@0.49.1(@opentelemetry/api@1.9.0)': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/instrumentation': 0.202.0(@opentelemetry/api@1.9.0) + '@opentelemetry/redis-common': 0.37.0 + '@opentelemetry/semantic-conventions': 1.34.0 + transitivePeerDependencies: + - supports-color + '@opentelemetry/instrumentation-restify@0.45.1(@opentelemetry/api@1.9.0)': dependencies: '@opentelemetry/api': 1.9.0 @@ -7968,6 +8952,15 @@ snapshots: transitivePeerDependencies: - supports-color + '@opentelemetry/instrumentation-restify@0.48.1(@opentelemetry/api@1.9.0)': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/core': 2.0.1(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation': 0.202.0(@opentelemetry/api@1.9.0) + '@opentelemetry/semantic-conventions': 1.34.0 + transitivePeerDependencies: + - supports-color + '@opentelemetry/instrumentation-router@0.44.1(@opentelemetry/api@1.9.0)': dependencies: '@opentelemetry/api': 1.9.0 @@ -7976,6 +8969,14 @@ snapshots: transitivePeerDependencies: - supports-color + '@opentelemetry/instrumentation-router@0.47.0(@opentelemetry/api@1.9.0)': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/instrumentation': 0.202.0(@opentelemetry/api@1.9.0) + '@opentelemetry/semantic-conventions': 1.34.0 + transitivePeerDependencies: + - supports-color + '@opentelemetry/instrumentation-runtime-node@0.12.2(@opentelemetry/api@1.9.0)': dependencies: '@opentelemetry/api': 1.9.0 @@ -7983,6 +8984,13 @@ snapshots: transitivePeerDependencies: - supports-color + '@opentelemetry/instrumentation-runtime-node@0.16.0(@opentelemetry/api@1.9.0)': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/instrumentation': 0.202.0(@opentelemetry/api@1.9.0) + transitivePeerDependencies: + - supports-color + '@opentelemetry/instrumentation-socket.io@0.46.1(@opentelemetry/api@1.9.0)': dependencies: '@opentelemetry/api': 1.9.0 @@ -7991,6 +8999,14 @@ snapshots: transitivePeerDependencies: - supports-color + '@opentelemetry/instrumentation-socket.io@0.49.0(@opentelemetry/api@1.9.0)': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/instrumentation': 0.202.0(@opentelemetry/api@1.9.0) + '@opentelemetry/semantic-conventions': 1.34.0 + transitivePeerDependencies: + - supports-color + '@opentelemetry/instrumentation-tedious@0.18.1(@opentelemetry/api@1.9.0)': dependencies: '@opentelemetry/api': 1.9.0 @@ -8000,6 +9016,15 @@ snapshots: transitivePeerDependencies: - supports-color + '@opentelemetry/instrumentation-tedious@0.21.0(@opentelemetry/api@1.9.0)': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/instrumentation': 0.202.0(@opentelemetry/api@1.9.0) + '@opentelemetry/semantic-conventions': 1.34.0 + '@types/tedious': 4.0.14 + transitivePeerDependencies: + - supports-color + '@opentelemetry/instrumentation-undici@0.10.1(@opentelemetry/api@1.9.0)': dependencies: '@opentelemetry/api': 1.9.0 @@ -8008,6 +9033,14 @@ snapshots: transitivePeerDependencies: - supports-color + '@opentelemetry/instrumentation-undici@0.13.1(@opentelemetry/api@1.9.0)': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/core': 2.0.1(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation': 0.202.0(@opentelemetry/api@1.9.0) + transitivePeerDependencies: + - supports-color + '@opentelemetry/instrumentation-winston@0.44.1(@opentelemetry/api@1.9.0)': dependencies: '@opentelemetry/api': 1.9.0 @@ -8016,6 +9049,23 @@ snapshots: transitivePeerDependencies: - supports-color + '@opentelemetry/instrumentation-winston@0.47.0(@opentelemetry/api@1.9.0)': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/api-logs': 0.202.0 + '@opentelemetry/instrumentation': 0.202.0(@opentelemetry/api@1.9.0) + transitivePeerDependencies: + - supports-color + + '@opentelemetry/instrumentation@0.202.0(@opentelemetry/api@1.9.0)': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/api-logs': 0.202.0 + import-in-the-middle: 1.14.2 + require-in-the-middle: 7.5.2 + transitivePeerDependencies: + - supports-color + '@opentelemetry/instrumentation@0.51.1(@opentelemetry/api@1.9.0)': dependencies: '@opentelemetry/api': 1.9.0 @@ -8040,12 +9090,26 @@ snapshots: transitivePeerDependencies: - supports-color + '@opentelemetry/otlp-exporter-base@0.202.0(@opentelemetry/api@1.9.0)': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/core': 2.0.1(@opentelemetry/api@1.9.0) + '@opentelemetry/otlp-transformer': 0.202.0(@opentelemetry/api@1.9.0) + '@opentelemetry/otlp-exporter-base@0.57.2(@opentelemetry/api@1.9.0)': dependencies: '@opentelemetry/api': 1.9.0 '@opentelemetry/core': 1.30.1(@opentelemetry/api@1.9.0) '@opentelemetry/otlp-transformer': 0.57.2(@opentelemetry/api@1.9.0) + '@opentelemetry/otlp-grpc-exporter-base@0.202.0(@opentelemetry/api@1.9.0)': + dependencies: + '@grpc/grpc-js': 1.13.4 + '@opentelemetry/api': 1.9.0 + '@opentelemetry/core': 2.0.1(@opentelemetry/api@1.9.0) + '@opentelemetry/otlp-exporter-base': 0.202.0(@opentelemetry/api@1.9.0) + '@opentelemetry/otlp-transformer': 0.202.0(@opentelemetry/api@1.9.0) + '@opentelemetry/otlp-grpc-exporter-base@0.57.2(@opentelemetry/api@1.9.0)': dependencies: '@grpc/grpc-js': 1.13.4 @@ -8054,6 +9118,17 @@ snapshots: '@opentelemetry/otlp-exporter-base': 0.57.2(@opentelemetry/api@1.9.0) '@opentelemetry/otlp-transformer': 0.57.2(@opentelemetry/api@1.9.0) + '@opentelemetry/otlp-transformer@0.202.0(@opentelemetry/api@1.9.0)': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/api-logs': 0.202.0 + '@opentelemetry/core': 2.0.1(@opentelemetry/api@1.9.0) + '@opentelemetry/resources': 2.0.1(@opentelemetry/api@1.9.0) + '@opentelemetry/sdk-logs': 0.202.0(@opentelemetry/api@1.9.0) + '@opentelemetry/sdk-metrics': 2.0.1(@opentelemetry/api@1.9.0) + '@opentelemetry/sdk-trace-base': 2.0.1(@opentelemetry/api@1.9.0) + protobufjs: 7.5.3 + '@opentelemetry/otlp-transformer@0.57.2(@opentelemetry/api@1.9.0)': dependencies: '@opentelemetry/api': 1.9.0 @@ -8069,18 +9144,34 @@ snapshots: dependencies: '@opentelemetry/api': 1.9.0 + '@opentelemetry/propagation-utils@0.31.2(@opentelemetry/api@1.9.0)': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/propagator-b3@1.30.1(@opentelemetry/api@1.9.0)': dependencies: '@opentelemetry/api': 1.9.0 '@opentelemetry/core': 1.30.1(@opentelemetry/api@1.9.0) + '@opentelemetry/propagator-b3@2.0.1(@opentelemetry/api@1.9.0)': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/core': 2.0.1(@opentelemetry/api@1.9.0) + '@opentelemetry/propagator-jaeger@1.30.1(@opentelemetry/api@1.9.0)': dependencies: '@opentelemetry/api': 1.9.0 '@opentelemetry/core': 1.30.1(@opentelemetry/api@1.9.0) + '@opentelemetry/propagator-jaeger@2.0.1(@opentelemetry/api@1.9.0)': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/core': 2.0.1(@opentelemetry/api@1.9.0) + '@opentelemetry/redis-common@0.36.2': {} + '@opentelemetry/redis-common@0.37.0': {} + '@opentelemetry/resource-detector-alibaba-cloud@0.30.1(@opentelemetry/api@1.9.0)': dependencies: '@opentelemetry/api': 1.9.0 @@ -8088,6 +9179,13 @@ snapshots: '@opentelemetry/resources': 1.30.1(@opentelemetry/api@1.9.0) '@opentelemetry/semantic-conventions': 1.34.0 + '@opentelemetry/resource-detector-alibaba-cloud@0.31.2(@opentelemetry/api@1.9.0)': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/core': 2.0.1(@opentelemetry/api@1.9.0) + '@opentelemetry/resources': 2.0.1(@opentelemetry/api@1.9.0) + '@opentelemetry/semantic-conventions': 1.34.0 + '@opentelemetry/resource-detector-aws@1.12.0(@opentelemetry/api@1.9.0)': dependencies: '@opentelemetry/api': 1.9.0 @@ -8095,6 +9193,13 @@ snapshots: '@opentelemetry/resources': 1.30.1(@opentelemetry/api@1.9.0) '@opentelemetry/semantic-conventions': 1.34.0 + '@opentelemetry/resource-detector-aws@2.2.0(@opentelemetry/api@1.9.0)': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/core': 2.0.1(@opentelemetry/api@1.9.0) + '@opentelemetry/resources': 2.0.1(@opentelemetry/api@1.9.0) + '@opentelemetry/semantic-conventions': 1.34.0 + '@opentelemetry/resource-detector-azure@0.6.1(@opentelemetry/api@1.9.0)': dependencies: '@opentelemetry/api': 1.9.0 @@ -8102,6 +9207,13 @@ snapshots: '@opentelemetry/resources': 1.30.1(@opentelemetry/api@1.9.0) '@opentelemetry/semantic-conventions': 1.34.0 + '@opentelemetry/resource-detector-azure@0.9.0(@opentelemetry/api@1.9.0)': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/core': 2.0.1(@opentelemetry/api@1.9.0) + '@opentelemetry/resources': 2.0.1(@opentelemetry/api@1.9.0) + '@opentelemetry/semantic-conventions': 1.34.0 + '@opentelemetry/resource-detector-container@0.6.1(@opentelemetry/api@1.9.0)': dependencies: '@opentelemetry/api': 1.9.0 @@ -8109,6 +9221,13 @@ snapshots: '@opentelemetry/resources': 1.30.1(@opentelemetry/api@1.9.0) '@opentelemetry/semantic-conventions': 1.34.0 + '@opentelemetry/resource-detector-container@0.7.2(@opentelemetry/api@1.9.0)': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/core': 2.0.1(@opentelemetry/api@1.9.0) + '@opentelemetry/resources': 2.0.1(@opentelemetry/api@1.9.0) + '@opentelemetry/semantic-conventions': 1.34.0 + '@opentelemetry/resource-detector-gcp@0.33.1(@opentelemetry/api@1.9.0)': dependencies: '@opentelemetry/api': 1.9.0 @@ -8120,12 +9239,36 @@ snapshots: - encoding - supports-color + '@opentelemetry/resource-detector-gcp@0.36.0(@opentelemetry/api@1.9.0)': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/core': 2.0.1(@opentelemetry/api@1.9.0) + '@opentelemetry/resources': 2.0.1(@opentelemetry/api@1.9.0) + '@opentelemetry/semantic-conventions': 1.34.0 + gcp-metadata: 6.1.1 + transitivePeerDependencies: + - encoding + - supports-color + '@opentelemetry/resources@1.30.1(@opentelemetry/api@1.9.0)': dependencies: '@opentelemetry/api': 1.9.0 '@opentelemetry/core': 1.30.1(@opentelemetry/api@1.9.0) '@opentelemetry/semantic-conventions': 1.28.0 + '@opentelemetry/resources@2.0.1(@opentelemetry/api@1.9.0)': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/core': 2.0.1(@opentelemetry/api@1.9.0) + '@opentelemetry/semantic-conventions': 1.34.0 + + '@opentelemetry/sdk-logs@0.202.0(@opentelemetry/api@1.9.0)': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/api-logs': 0.202.0 + '@opentelemetry/core': 2.0.1(@opentelemetry/api@1.9.0) + '@opentelemetry/resources': 2.0.1(@opentelemetry/api@1.9.0) + '@opentelemetry/sdk-logs@0.57.2(@opentelemetry/api@1.9.0)': dependencies: '@opentelemetry/api': 1.9.0 @@ -8139,6 +9282,40 @@ snapshots: '@opentelemetry/core': 1.30.1(@opentelemetry/api@1.9.0) '@opentelemetry/resources': 1.30.1(@opentelemetry/api@1.9.0) + '@opentelemetry/sdk-metrics@2.0.1(@opentelemetry/api@1.9.0)': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/core': 2.0.1(@opentelemetry/api@1.9.0) + '@opentelemetry/resources': 2.0.1(@opentelemetry/api@1.9.0) + + '@opentelemetry/sdk-node@0.202.0(@opentelemetry/api@1.9.0)': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/api-logs': 0.202.0 + '@opentelemetry/core': 2.0.1(@opentelemetry/api@1.9.0) + '@opentelemetry/exporter-logs-otlp-grpc': 0.202.0(@opentelemetry/api@1.9.0) + '@opentelemetry/exporter-logs-otlp-http': 0.202.0(@opentelemetry/api@1.9.0) + '@opentelemetry/exporter-logs-otlp-proto': 0.202.0(@opentelemetry/api@1.9.0) + '@opentelemetry/exporter-metrics-otlp-grpc': 0.202.0(@opentelemetry/api@1.9.0) + '@opentelemetry/exporter-metrics-otlp-http': 0.202.0(@opentelemetry/api@1.9.0) + '@opentelemetry/exporter-metrics-otlp-proto': 0.202.0(@opentelemetry/api@1.9.0) + '@opentelemetry/exporter-prometheus': 0.202.0(@opentelemetry/api@1.9.0) + '@opentelemetry/exporter-trace-otlp-grpc': 0.202.0(@opentelemetry/api@1.9.0) + '@opentelemetry/exporter-trace-otlp-http': 0.202.0(@opentelemetry/api@1.9.0) + '@opentelemetry/exporter-trace-otlp-proto': 0.202.0(@opentelemetry/api@1.9.0) + '@opentelemetry/exporter-zipkin': 2.0.1(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation': 0.202.0(@opentelemetry/api@1.9.0) + '@opentelemetry/propagator-b3': 2.0.1(@opentelemetry/api@1.9.0) + '@opentelemetry/propagator-jaeger': 2.0.1(@opentelemetry/api@1.9.0) + '@opentelemetry/resources': 2.0.1(@opentelemetry/api@1.9.0) + '@opentelemetry/sdk-logs': 0.202.0(@opentelemetry/api@1.9.0) + '@opentelemetry/sdk-metrics': 2.0.1(@opentelemetry/api@1.9.0) + '@opentelemetry/sdk-trace-base': 2.0.1(@opentelemetry/api@1.9.0) + '@opentelemetry/sdk-trace-node': 2.0.1(@opentelemetry/api@1.9.0) + '@opentelemetry/semantic-conventions': 1.34.0 + transitivePeerDependencies: + - supports-color + '@opentelemetry/sdk-node@0.57.2(@opentelemetry/api@1.9.0)': dependencies: '@opentelemetry/api': 1.9.0 @@ -8172,6 +9349,13 @@ snapshots: '@opentelemetry/resources': 1.30.1(@opentelemetry/api@1.9.0) '@opentelemetry/semantic-conventions': 1.28.0 + '@opentelemetry/sdk-trace-base@2.0.1(@opentelemetry/api@1.9.0)': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/core': 2.0.1(@opentelemetry/api@1.9.0) + '@opentelemetry/resources': 2.0.1(@opentelemetry/api@1.9.0) + '@opentelemetry/semantic-conventions': 1.34.0 + '@opentelemetry/sdk-trace-node@1.30.1(@opentelemetry/api@1.9.0)': dependencies: '@opentelemetry/api': 1.9.0 @@ -8182,6 +9366,13 @@ snapshots: '@opentelemetry/sdk-trace-base': 1.30.1(@opentelemetry/api@1.9.0) semver: 7.7.2 + '@opentelemetry/sdk-trace-node@2.0.1(@opentelemetry/api@1.9.0)': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/context-async-hooks': 2.0.1(@opentelemetry/api@1.9.0) + '@opentelemetry/core': 2.0.1(@opentelemetry/api@1.9.0) + '@opentelemetry/sdk-trace-base': 2.0.1(@opentelemetry/api@1.9.0) + '@opentelemetry/semantic-conventions@1.28.0': {} '@opentelemetry/semantic-conventions@1.34.0': {} @@ -8191,6 +9382,11 @@ snapshots: '@opentelemetry/api': 1.9.0 '@opentelemetry/core': 1.30.1(@opentelemetry/api@1.9.0) + '@opentelemetry/sql-common@0.41.0(@opentelemetry/api@1.9.0)': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/core': 2.0.1(@opentelemetry/api@1.9.0) + '@paralleldrive/cuid2@2.2.2': dependencies: '@noble/hashes': 1.8.0 @@ -9263,10 +10459,20 @@ snapshots: dependencies: undici-types: 7.8.0 + '@types/oracledb@6.5.2': + dependencies: + '@types/node': 22.15.32 + '@types/pg-pool@2.0.6': dependencies: '@types/pg': 8.15.4 + '@types/pg@8.15.1': + dependencies: + '@types/node': 22.15.32 + pg-protocol: 1.10.0 + pg-types: 4.0.2 + '@types/pg@8.15.4': dependencies: '@types/node': 24.0.3 @@ -11427,6 +12633,8 @@ snapshots: object-inspect@1.13.4: {} + obuf@1.1.2: {} + on-exit-leak-free@2.1.2: {} on-finished@2.4.1: @@ -11580,6 +12788,8 @@ snapshots: pg-int8@1.0.1: {} + pg-numeric@1.0.2: {} + pg-pool@3.10.0(pg@8.16.0): dependencies: pg: 8.16.0 @@ -11594,6 +12804,16 @@ snapshots: postgres-date: 1.0.7 postgres-interval: 1.2.0 + pg-types@4.0.2: + dependencies: + pg-int8: 1.0.1 + pg-numeric: 1.0.2 + postgres-array: 3.0.4 + postgres-bytea: 3.0.0 + postgres-date: 2.1.0 + postgres-interval: 3.0.0 + postgres-range: 1.1.4 + pg@8.16.0: dependencies: pg-connection-string: 2.9.0 @@ -11673,14 +12893,26 @@ snapshots: postgres-array@2.0.0: {} + postgres-array@3.0.4: {} + postgres-bytea@1.0.0: {} + postgres-bytea@3.0.0: + dependencies: + obuf: 1.1.2 + postgres-date@1.0.7: {} + postgres-date@2.1.0: {} + postgres-interval@1.2.0: dependencies: xtend: 4.0.2 + postgres-interval@3.0.0: {} + + postgres-range@1.1.4: {} + postgres@3.4.7: {} posthog-js@1.252.1: diff --git a/server/package.json b/server/package.json index 989af6d59..243ae889e 100644 --- a/server/package.json +++ b/server/package.json @@ -43,6 +43,15 @@ "@date-fns/utc": "^2.1.0", "@hyperdx/node-opentelemetry": "^0.8.2", "@logtail/node": "^0.5.2", + "@opentelemetry/api": "^1.9.0", + "@opentelemetry/auto-instrumentations-node": "^0.60.1", + "@opentelemetry/exporter-trace-otlp-proto": "^0.202.0", + "@opentelemetry/resources": "^2.0.1", + "@opentelemetry/sdk-metrics": "^2.0.1", + "@opentelemetry/sdk-node": "^0.202.0", + "@opentelemetry/sdk-trace-base": "^2.0.1", + "@opentelemetry/sdk-trace-node": "^2.0.1", + "@opentelemetry/semantic-conventions": "^1.34.0", "@react-email/components": "^0.0.42", "@sentry/node": "^9.30.0", "@supabase/supabase-js": "^2.46.2", diff --git a/server/src/errors/logger.ts b/server/src/errors/logger.ts index 18cde2fb0..d6f3e678b 100644 --- a/server/src/errors/logger.ts +++ b/server/src/errors/logger.ts @@ -37,7 +37,7 @@ export const initLogger = () => { options: { colorize: true, translateTime: "UTC:yyyy-mm-dd HH:MM:ss", - ignore: "pid,hostname,res,context,req,statusCode,worker", + ignore: "pid,hostname,res,statusCode,worker,context,req", customColors: { default: "white", 60: "bgRed", @@ -55,18 +55,18 @@ export const initLogger = () => { }); } - if (process.env.AXIOM_TOKEN) { - streams.push({ - level: "info", - stream: pino.transport({ - target: "@axiomhq/pino", - options: { - dataset: "express", - token: "xaat-32eb7e2b-8291-40c3-a5bf-c3a0b233fcf8", - }, - }), - }); - } + // if (process.env.AXIOM_TOKEN) { + // streams.push({ + // level: "info", + // stream: pino.transport({ + // target: "@axiomhq/pino", + // options: { + // dataset: "express", + // token: "xaat-32eb7e2b-8291-40c3-a5bf-c3a0b233fcf8", + // }, + // }), + // }); + // } const logger = pino.default( { diff --git a/server/src/external/logtail/logtailUtils.ts b/server/src/external/logtail/logtailUtils.ts index b8ed51e7c..89f054f35 100644 --- a/server/src/external/logtail/logtailUtils.ts +++ b/server/src/external/logtail/logtailUtils.ts @@ -80,7 +80,6 @@ export const createLogger = () => { info: createLogMethod(basePinoLogger.info.bind(basePinoLogger)), warn: createLogMethod(basePinoLogger.warn.bind(basePinoLogger)), error: createLogMethod(basePinoLogger.error.bind(basePinoLogger)), - child: ({ context, onlyProd = false, diff --git a/server/src/external/stripe/webhookHandlers/handleSubUpdated.ts b/server/src/external/stripe/webhookHandlers/handleSubUpdated.ts index 4565673b2..27c577ecb 100644 --- a/server/src/external/stripe/webhookHandlers/handleSubUpdated.ts +++ b/server/src/external/stripe/webhookHandlers/handleSubUpdated.ts @@ -2,18 +2,11 @@ import { AppEnv, CollectionMethod, CusProductStatus, - ErrCode, Organization, } from "@autumn/shared"; import { createStripeCli } from "../utils.js"; import { CusProductService } from "@/internal/customers/cusProducts/CusProductService.js"; - -import { - getWebhookLock, - releaseWebhookLock, -} from "@/external/redis/stripeWebhookLocks.js"; -import RecaseError from "@/utils/errorUtils.js"; import { SubService } from "@/internal/subscriptions/SubService.js"; import { DrizzleCli } from "@/db/initDrizzle.js"; diff --git a/server/src/index.ts b/server/src/index.ts index fc33ec7d6..df9b1350f 100644 --- a/server/src/index.ts +++ b/server/src/index.ts @@ -1,19 +1,21 @@ import { config } from "dotenv"; config(); +import "./instrumentation"; +import { trace, context } from "@opentelemetry/api"; + import http from "http"; import cluster from "cluster"; import os from "os"; import mainRouter from "./internal/mainRouter.js"; import express from "express"; import cors from "cors"; -import chalk from "chalk"; import webhooksRouter from "./external/webhooks/webhooksRouter.js"; import { apiRouter } from "./internal/api/apiRouter.js"; import { QueueManager } from "./queue/QueueManager.js"; -import { AppEnv, AuthType } from "@autumn/shared"; +import { AppEnv } from "@autumn/shared"; import { CacheManager } from "./external/caching/CacheManager.js"; import { logger } from "./external/logtail/logtailUtils.js"; import { createPosthogCli } from "./external/posthog/createPosthogCli.js"; @@ -25,6 +27,8 @@ import { auth } from "./utils/auth.js"; import { checkEnvVars } from "./utils/initUtils.js"; import { initLogger } from "./errors/logger.js"; +const tracer = trace.getTracer("express"); + checkEnvVars(); const init = async () => { @@ -75,7 +79,7 @@ const init = async () => { subscribeToOrgUpdates({ db }); - app.use((req: any, res: any, next: any) => { + app.use(async (req: any, res: any, next: any) => { req.env = req.env = req.headers["app_env"] || AppEnv.Sandbox; req.db = db; // req.logtailAll = logtailAll; @@ -83,49 +87,61 @@ const init = async () => { req.id = req.headers["rndr-id"] || generateId("local_req"); req.timestamp = Date.now(); + const reqContext = { + id: req.id, + env: req.headers["app_env"] || undefined, + method: req.method, + url: req.originalUrl, + body: req.body, + timestamp: req.timestamp, + }; + + // Create span + const spanName = `${req.method} ${req.originalUrl} - ${req.id}`; + const span = tracer.startSpan(spanName); + span.setAttributes({ + req_id: req.id, + method: req.method, + url: req.originalUrl, + }); + + // Store span on request for potential use in other middleware/handlers + req.span = span; + req.logtail = logger.child({ context: { - req: { - id: req.id, - env: req.env, - method: req.method, - url: req.originalUrl, - body: req.body, - timestamp: req.timestamp, - }, + req: reqContext, }, }); - next(); + // End span when response finishes + res.on("finish", () => { + span.setAttributes({ + "http.response.status_code": res.statusCode, + "http.response.body.size": res.get("content-length") || 0, + "http.response.duration": Date.now() - req.timestamp, + }); + span.end(); + }); + + // Run the rest of the request processing within the span's context + context.with(trace.setSpan(context.active(), span), () => { + next(); + }); }); app.use("/webhooks", webhooksRouter); + app.use(express.json()); app.use((req: any, res: any, next: any) => { - req.logtail.info(`${req.method} ${req.originalUrl}`); + req.logtail.info(`${req.method} ${req.originalUrl}`, { + context: { + body: req.body, + }, + }); next(); }); - // app.use((req: any, res, next) => { - // const method = req.method; - // const path = req.url; - // const methodToColor: any = { - // GET: chalk.green, - // POST: chalk.yellow, - // PUT: chalk.blue, - // DELETE: chalk.red, - // PATCH: chalk.magenta, - // }; - - // const methodColor: any = methodToColor[method] || chalk.gray; - - // console.log(`${methodColor(method).padEnd(18)} ${path}`); - - // next(); - // }); - - app.use(express.json()); - app.use(mainRouter); app.use("/v1", apiRouter); diff --git a/server/src/instrumentation.ts b/server/src/instrumentation.ts new file mode 100644 index 000000000..56095c714 --- /dev/null +++ b/server/src/instrumentation.ts @@ -0,0 +1,35 @@ +import "dotenv/config"; +import { NodeSDK } from "@opentelemetry/sdk-node"; +import { getNodeAutoInstrumentations } from "@opentelemetry/auto-instrumentations-node"; +import { OTLPTraceExporter } from "@opentelemetry/exporter-trace-otlp-proto"; +import { BatchSpanProcessor } from "@opentelemetry/sdk-trace-base"; +import { resourceFromAttributes } from "@opentelemetry/resources"; +import { ATTR_SERVICE_NAME } from "@opentelemetry/semantic-conventions"; + +// Initialize OTLP trace exporter with the endpoint URL and headers + +if (process.env.AXIOM_TOKEN) { + const traceExporter = new OTLPTraceExporter({ + url: "https://api.axiom.co/v1/traces", + headers: { + Authorization: `Bearer ${process.env.AXIOM_TOKEN}`, + "X-Axiom-Dataset": "express_otel", + }, + }); + + // Creating a resource to identify your service in traces + const resource = resourceFromAttributes({ + [ATTR_SERVICE_NAME]: "express", + }); + + // Configuring the OpenTelemetry Node SDK + const sdk = new NodeSDK({ + spanProcessor: new BatchSpanProcessor(traceExporter), + resource: resource, + instrumentations: [getNodeAutoInstrumentations()], + }); + + // Starting the OpenTelemetry SDK to begin collecting telemetry data + console.log("Starting OpenTelemetry"); + sdk.start(); +} diff --git a/server/src/internal/analytics/tracer/spanUtils.ts b/server/src/internal/analytics/tracer/spanUtils.ts new file mode 100644 index 000000000..daaf74332 --- /dev/null +++ b/server/src/internal/analytics/tracer/spanUtils.ts @@ -0,0 +1,22 @@ +import { context, trace } from "@opentelemetry/api"; + +const tracer = trace.getTracer("express"); + +export const withSpan = ({ + name, + attributes, + fn, +}: { + name: string; + attributes: Record; + fn: () => Promise; +}) => { + const span = tracer.startSpan(name); + span.setAttributes(attributes); + + return context.with(trace.setSpan(context.active(), span), async () => { + const result = await fn(); + span.end(); + return result; + }); +}; diff --git a/server/src/internal/api/entitled/checkUtils.ts b/server/src/internal/api/entitled/checkUtils.ts index c9815ac4d..810024ec7 100644 --- a/server/src/internal/api/entitled/checkUtils.ts +++ b/server/src/internal/api/entitled/checkUtils.ts @@ -66,7 +66,6 @@ export const getBooleanEntitledResult = async ({ allowed, balance: undefined, feature, - raw: false, cusProducts, allFeatures, }) diff --git a/server/src/internal/api/entitled/entitledRouter.ts b/server/src/internal/api/entitled/entitledRouter.ts index a4e8cdaba..d604ca190 100644 --- a/server/src/internal/api/entitled/entitledRouter.ts +++ b/server/src/internal/api/entitled/entitledRouter.ts @@ -233,7 +233,7 @@ const getCusEntsAndFeatures = async ({ if (!feature) { throw new RecaseError({ - message: "Feature not found", + message: `feature with id ${feature_id} not found`, code: ErrCode.FeatureNotFound, statusCode: StatusCodes.NOT_FOUND, }); @@ -298,7 +298,7 @@ entitledRouter.post("", async (req: any, res: any) => { if (!customer_id) { throw new RecaseError({ - message: "Customer ID is required", + message: "`customer_id` is required", code: ErrCode.InvalidRequest, statusCode: StatusCodes.BAD_REQUEST, }); @@ -306,7 +306,7 @@ entitledRouter.post("", async (req: any, res: any) => { if (!feature_id && !product_id) { throw new RecaseError({ - message: "Feature ID or product ID is required", + message: "`feature_id` or `product_id` is required", code: ErrCode.InvalidRequest, statusCode: StatusCodes.BAD_REQUEST, }); @@ -315,7 +315,7 @@ entitledRouter.post("", async (req: any, res: any) => { if (feature_id && product_id) { throw new RecaseError({ message: - "Provide either feature_id or product_id. Not allowed to provide both.", + "Provide either feature_id or product_id. Not allowed to provide both", code: ErrCode.InvalidRequest, statusCode: StatusCodes.BAD_REQUEST, }); @@ -442,15 +442,6 @@ entitledRouter.post("", async (req: any, res: any) => { // 3. If with preview, get preview let preview = undefined; if (req.body.with_preview) { - // let withPreview = notNullish(req.body.with_preview); - // if (withPreview !== "raw" && withPreview !== "formatted") { - // throw new RecaseError({ - // message: "with_preview must be 'raw' or 'formatted'", - // code: ErrCode.InvalidRequest, - // statusCode: StatusCodes.BAD_REQUEST, - // }); - // } - try { preview = await getCheckPreview({ db, @@ -458,7 +449,6 @@ entitledRouter.post("", async (req: any, res: any) => { balance: balanceObj?.balance, feature: featureToUse!, cusProducts, - raw: req.body.with_preview === "raw", allFeatures, }); } catch (error) { diff --git a/server/src/internal/api/entitled/getCheckPreview.ts b/server/src/internal/api/entitled/getCheckPreview.ts index c6745ef80..fd831d771 100644 --- a/server/src/internal/api/entitled/getCheckPreview.ts +++ b/server/src/internal/api/entitled/getCheckPreview.ts @@ -21,7 +21,6 @@ export const getCheckPreview = async ({ balance, feature, cusProducts, - raw = false, allFeatures, }: { db: DrizzleCli; @@ -29,7 +28,6 @@ export const getCheckPreview = async ({ balance?: number; feature: Feature; cusProducts: FullCusProduct[]; - raw?: boolean; allFeatures: Feature[]; }) => { if (allowed) { diff --git a/server/src/internal/api/events/usageRouter.ts b/server/src/internal/api/events/usageRouter.ts index a06630274..f83b31be2 100644 --- a/server/src/internal/api/events/usageRouter.ts +++ b/server/src/internal/api/events/usageRouter.ts @@ -19,6 +19,7 @@ import { addTaskToQueue } from "@/queue/queueUtils.js"; import { getEventTimestamp } from "./eventUtils.js"; import { ExtendedRequest } from "@/utils/models/Request.js"; import { runUpdateUsageTask } from "@/trigger/updateUsageTask.js"; +import { logger } from "@/external/logtail/logtailUtils.js"; export const eventsRouter: Router = Router(); export const usageRouter: Router = Router(); @@ -39,17 +40,15 @@ const getCusFeatureAndOrg = async ({ // 1. Get customer const { org, features } = req; - let [customer] = await Promise.all([ - getOrCreateCustomer({ - req, - customerId, - customerData, - inStatuses: [CusProductStatus.Active, CusProductStatus.PastDue], + let customer = await getOrCreateCustomer({ + req, + customerId, + customerData, + inStatuses: [CusProductStatus.Active, CusProductStatus.PastDue], - entityId, - entityData: req.body.entity_data, - }), - ]); + entityId, + entityData: req.body.entity_data, + }); let feature = features.find((f) => f.id == featureId); let creditSystems = features.filter( @@ -136,6 +135,8 @@ export const handleUsageEvent = async ({ entity_id, idempotency_key, } = req.body; + const { logtail: logger } = req; + if (!customer_id || !feature_id) { throw new RecaseError({ message: "customer_id and feature_id are required", @@ -146,6 +147,8 @@ export const handleUsageEvent = async ({ properties = properties || {}; + logger.info(`/track: customer ${customer_id}, feature ${feature_id}`); + const startTime = Date.now(); const { customer, org, feature, creditSystems } = await getCusFeatureAndOrg({ req, customerId: customer_id, @@ -153,6 +156,8 @@ export const handleUsageEvent = async ({ customerData: customer_data, entityId: entity_id, }); + logger.info(`/track: get customer took ${Date.now() - startTime}ms`); + const startTime2 = Date.now(); let newEvent = await createAndInsertEvent({ req, @@ -163,6 +168,7 @@ export const handleUsageEvent = async ({ properties, idempotencyKey: idempotency_key, }); + logger.info(`/track: insert event took ${Date.now() - startTime2}ms`); const features = [feature, ...creditSystems]; diff --git a/server/src/internal/customers/CusService.ts b/server/src/internal/customers/CusService.ts index 66bd9c41d..049b2a7cf 100644 --- a/server/src/internal/customers/CusService.ts +++ b/server/src/internal/customers/CusService.ts @@ -15,7 +15,11 @@ import { StatusCodes } from "http-status-codes"; import { and, eq, or, sql } from "drizzle-orm"; import { DrizzleCli } from "@/db/initDrizzle.js"; import { getFullCusQuery } from "./getFullCusQuery.js"; -import { flipProductResults } from "./cusUtils/cusUtils.js"; +import { trace } from "@opentelemetry/api"; +import { withSpan } from "../analytics/tracer/spanUtils.js"; + +const tracer = trace.getTracer("express"); + export class CusService { static async getFull({ db, @@ -47,51 +51,61 @@ export class CusService { const includeInvoices = expand?.includes(CusExpand.Invoices) || false; const withTrialsUsed = expand?.includes(CusExpand.TrialsUsed) || false; - const query = getFullCusQuery( - idOrInternalId, - orgId, - env, - inStatuses, - includeInvoices, - withEntities, - withTrialsUsed, - withSubs, - entityId, - ); + return withSpan({ + name: "CusService.getFull", + attributes: { + idOrInternalId, + entityId, + orgId, + env, + inStatuses, + withEntities, + withSubs, + }, + fn: async () => { + const query = getFullCusQuery( + idOrInternalId, + orgId, + env, + inStatuses, + includeInvoices, + withEntities, + withTrialsUsed, + withSubs, + entityId, + ); - let result = await db.execute(query); + let result = await db.execute(query); - if (!result || result.length == 0) { - if (allowNotFound) { - // @ts-ignore - return null; - } + if (!result || result.length == 0) { + if (allowNotFound) { + // @ts-ignore + return null as FullCustomer; + } - throw new RecaseError({ - message: `Customer ${idOrInternalId} not found`, - code: ErrCode.CustomerNotFound, - statusCode: StatusCodes.NOT_FOUND, - }); - } + throw new RecaseError({ + message: `Customer ${idOrInternalId} not found`, + code: ErrCode.CustomerNotFound, + statusCode: StatusCodes.NOT_FOUND, + }); + } - let data = result[0]; - data.created_at = Number(data.created_at); + let data = result[0]; + data.created_at = Number(data.created_at); - for (const product of data.customer_products as FullCusProduct[]) { - if (!product.customer_prices) { - product.customer_prices = []; - } + for (const product of data.customer_products as FullCusProduct[]) { + if (!product.customer_prices) { + product.customer_prices = []; + } - if (!product.customer_entitlements) { - product.customer_entitlements = []; - } - } + if (!product.customer_entitlements) { + product.customer_entitlements = []; + } + } - // data.invoices = data.invoices || []; - // data.subscriptions = data.subscriptions || []; - // data.trials_used = data.trials_used || []; - - return data as FullCustomer; + return data as FullCustomer; + }, + }); } static async get({ diff --git a/server/src/internal/customers/cusUtils/getOrCreateCustomer.ts b/server/src/internal/customers/cusUtils/getOrCreateCustomer.ts index 7af8120ee..ed9234ec4 100644 --- a/server/src/internal/customers/cusUtils/getOrCreateCustomer.ts +++ b/server/src/internal/customers/cusUtils/getOrCreateCustomer.ts @@ -52,6 +52,10 @@ export const getOrCreateCustomer = async ({ const { db, org, features, env, logtail: logger } = req; + if (!withEntities) { + withEntities = expand?.includes(CusExpand.Entities) || false; + } + if (!skipGet) { customer = await CusService.getFull({ db, diff --git a/server/src/internal/customers/handlers/handleCreateCustomer.ts b/server/src/internal/customers/handlers/handleCreateCustomer.ts index 86b45417c..4e9131c5b 100644 --- a/server/src/internal/customers/handlers/handleCreateCustomer.ts +++ b/server/src/internal/customers/handlers/handleCreateCustomer.ts @@ -2,31 +2,19 @@ import { CusService } from "@/internal/customers/CusService.js"; import RecaseError from "@/utils/errorUtils.js"; import { AppEnv, - AttachScenario, - BillingInterval, CreateCustomer, CreateCustomerSchema, - CusProductStatus, Customer, ErrCode, FullProduct, Organization, } from "@autumn/shared"; import { StatusCodes } from "http-status-codes"; -import { generateId, notNullish } from "@/utils/genUtils.js"; -import { createStripeCli } from "@/external/stripe/utils.js"; -import { createFullCusProduct } from "@/internal/customers/add-product/createFullCusProduct.js"; -import { handleAddProduct } from "@/internal/customers/attach/attachFunctions/addProductFlow/handleAddProduct.js"; -import { getNextStartOfMonthUnix } from "@/internal/products/prices/billingIntervalUtils.js"; -import { ProductService } from "@/internal/products/ProductService.js"; -import { - initProductInStripe, - isFreeProduct, -} from "@/internal/products/productUtils.js"; +import { notNullish } from "@/utils/genUtils.js"; +import { initProductInStripe } from "@/internal/products/productUtils.js"; import { createStripeCusIfNotExists } from "@/external/stripe/stripeCusUtils.js"; import { DrizzleCli } from "@/db/initDrizzle.js"; -import { ActionRequest, ExtendedRequest } from "@/utils/models/Request.js"; -import { addCustomerCreatedTask } from "@/internal/analytics/handlers/handleCustomerCreated.js"; +import { ExtendedRequest } from "@/utils/models/Request.js"; import { createNewCustomer } from "../cusUtils/createNewCustomer.js"; export const initStripeCusAndProducts = async ({ diff --git a/server/src/internal/customers/handlers/handleGetCustomer.ts b/server/src/internal/customers/handlers/handleGetCustomer.ts index f0a058a70..7248db239 100644 --- a/server/src/internal/customers/handlers/handleGetCustomer.ts +++ b/server/src/internal/customers/handlers/handleGetCustomer.ts @@ -14,30 +14,29 @@ export const handleGetCustomer = async (req: any, res: any) => action: "get customer", handler: async () => { let customerId = req.params.customer_id; - let { orgId, env, db } = req; + let { env, db, logtail: logger, org, features } = req; let { expand } = req.query; let expandArray = parseCusExpand(expand); - const [features, org, customer] = await Promise.all([ - FeatureService.getFromReq(req), - OrgService.getFromReq(req), - CusService.getFull({ - db, - idOrInternalId: customerId, - orgId: orgId, - env: env, - inStatuses: [ - CusProductStatus.Active, - CusProductStatus.PastDue, - CusProductStatus.Scheduled, - ], - withEntities: true, - // withEntities: expandArray.includes(CusExpand.Entities), - expand: expandArray, - allowNotFound: true, - }), - ]); + logger.info(`getting customer ${customerId} for org ${org.slug}`); + const startTime = Date.now(); + const customer = await CusService.getFull({ + db, + idOrInternalId: customerId, + orgId: org.id, + env: env, + inStatuses: [ + CusProductStatus.Active, + CusProductStatus.PastDue, + CusProductStatus.Scheduled, + ], + withEntities: true, + // withEntities: expandArray.includes(CusExpand.Entities), + expand: expandArray, + allowNotFound: true, + }); + logger.info(`get customer took ${Date.now() - startTime}ms`); if (!customer) { req.logtail.warn( diff --git a/server/src/internal/mainRouter.ts b/server/src/internal/mainRouter.ts index f5f753cfd..90f6c78c8 100644 --- a/server/src/internal/mainRouter.ts +++ b/server/src/internal/mainRouter.ts @@ -60,6 +60,7 @@ mainRouter.use( headers: { cookie: req.headers.cookie, "Content-Type": "application/json", + origin: req.get("origin"), }, }); return client as any; diff --git a/server/src/middleware/analyticsMiddleware.ts b/server/src/middleware/analyticsMiddleware.ts index eea622157..01266d179 100644 --- a/server/src/middleware/analyticsMiddleware.ts +++ b/server/src/middleware/analyticsMiddleware.ts @@ -50,6 +50,15 @@ export const analyticsMiddleware = async (req: any, res: any, next: any) => { req?.body?.customer_id || parseCustomerIdFromUrl(req.originalUrl), }; + if (req.span) { + req.span.setAttributes({ + org_id: req.org?.id, + org_slug: req.org?.slug, + env: req.env, + customer_id: reqContext.customer_id, + }); + } + req.logtail = req.logtail.child({ context: { context: reqContext, diff --git a/server/src/middleware/apiAuthMiddleware.ts b/server/src/middleware/apiAuthMiddleware.ts index efc890580..61e9a2725 100644 --- a/server/src/middleware/apiAuthMiddleware.ts +++ b/server/src/middleware/apiAuthMiddleware.ts @@ -3,6 +3,27 @@ import { verifyKey } from "@/internal/dev/api-keys/apiKeyUtils.js"; import { verifyBearerPublishableKey } from "./publicAuthMiddleware.js"; import { AuthType, ErrCode } from "@autumn/shared"; import { floatToVersion } from "@/utils/versionUtils.js"; +import RecaseError from "@/utils/errorUtils.js"; +import { dashboardOrigins } from "@/utils/constants.js"; + +const verifyApiVersion = (version: string) => { + let versionFloat = parseFloat(version); + let apiVersion = floatToVersion(versionFloat); + + if (isNaN(versionFloat) || !apiVersion) { + throw new RecaseError({ + message: `${version} is not a valid API version`, + code: ErrCode.InvalidApiVersion, + statusCode: 400, + }); + } + + return apiVersion; +}; + +const maskApiKey = (apiKey: string) => { + return apiKey.slice(0, 15) + apiKey.slice(15).replace(/./g, "*"); +}; export const verifySecretKey = async (req: any, res: any, next: any) => { const authHeader = @@ -12,159 +33,92 @@ export const verifySecretKey = async (req: any, res: any, next: any) => { const version = req.headers["x-api-version"]; if (version) { - let versionFloat = parseFloat(version); - - if (isNaN(versionFloat)) { - return { - error: ErrCode.InvalidApiVersion, - fallback: false, - statusCode: 400, - }; - } - - let apiVersion = floatToVersion(versionFloat); - if (!apiVersion) { - return { - error: ErrCode.InvalidApiVersion, - fallback: false, - statusCode: 400, - }; - } - - req.apiVersion = apiVersion; + req.apiVersion = verifyApiVersion(version); } if (!authHeader || !authHeader.startsWith("Bearer ")) { - return { - error: ErrCode.NoAuthHeader, - fallback: true, - }; + let origin = req.get("origin"); + if (dashboardOrigins.includes(origin)) { + return withOrgAuth(req, res, next); + } else { + throw new RecaseError({ + message: "Secret key not found in Authorization header", + code: ErrCode.NoSecretKey, + statusCode: 401, + }); + } } const apiKey = authHeader.split(" ")[1]; if (!apiKey.startsWith("am_")) { - return { - error: ErrCode.InvalidAuthHeader, - fallback: true, - statusCode: null, - }; + throw new RecaseError({ + message: "Invalid secret key", + code: ErrCode.InvalidSecretKey, + statusCode: 401, + }); } if (apiKey.startsWith("am_pk")) { return await verifyBearerPublishableKey(apiKey, req, res, next); } - // Try verify via Autumn + const { valid, data } = await verifyKey({ + db: req.db, + key: apiKey, + }); - try { - const { valid, data } = await verifyKey({ - db: req.db, - key: apiKey, + if (!valid || !data) { + throw new RecaseError({ + message: "Invalid secret key", + code: ErrCode.InvalidSecretKey, + statusCode: 401, }); - - if (valid && data) { - let { org, features, env } = data; - req.orgId = org.id; - req.env = env; - req.minOrg = { - id: org.id, - slug: org.slug, - }; - req.org = org; - req.features = features; - req.authType = AuthType.SecretKey; - - next(); - - return { - error: null, - fallback: null, - statusCode: null, - }; - } else { - logger.info(`Autumn API verification failed`); - return { - error: ErrCode.FailedToVerifySecretKey, - fallback: true, - statusCode: 401, - }; - } - } catch (error) { - try { - logger.error("Failed to fetch key from Autumn", error); - } catch (error) { - console.error("(log failed) Failed to fetch key from Autumn", error); - } - return { - error: ErrCode.FailedToFetchKeyFromAutumn, - fallback: true, - statusCode: 500, - }; } + + let { org, features, env } = data; + req.orgId = org.id; + req.env = env; + req.minOrg = { + id: org.id, + slug: org.slug, + }; + req.org = org; + req.features = features; + req.authType = AuthType.SecretKey; + + next(); }; export const apiAuthMiddleware = async (req: any, res: any, next: any) => { - // 1. Verify secret key + const logger = req.logtail; try { - const { error, fallback, statusCode } = await verifySecretKey( - req, - res, - next, - ); + await verifySecretKey(req, res, next); - if (!error) { - return; - } - - if (error && !fallback) { - res.status(statusCode).json({ - message: error, - code: error, - }); - return; - } + return; } catch (error: any) { - try { - let logger = req.logtail; - logger.error("Error: verifySecretKey failed", error); - } catch (error) { - console.error("(log failed) Error: verifySecretKey failed", error); + if (error instanceof RecaseError) { + if (error.code === ErrCode.InvalidSecretKey) { + let apiKey = req.headers["authorization"]?.split(" ")[1]; + error.message = `Invalid secret key: ${maskApiKey(apiKey)}`; + } + + logger.warn(`auth warning: ${error.message}`); + + res.status(error.statusCode).json({ + message: error.message, + code: error.code, + }); + } else { + logger.error(`auth error: ${error.message}`, { + error, + }); + res.status(500).json({ + message: `Failed to verify secret key: ${error.message}`, + code: ErrCode.InternalError, + }); } - res.status(500).json({ - message: "Failed to verify secret key -- internal server error", - code: ErrCode.FailedToVerifySecretKey, - }); + return; } - - withOrgAuth(req, res, next); - - // // 2. Verify publishable key (through x-publishable-key header) - // try { - // const { error, fallback, statusCode } = await verifyPublishableKey( - // req, - // res, - // next - // ); - - // if (!error) { - // return; - // } - - // if (error && !fallback) { - // res.status(statusCode).json({ - // message: error, - // code: error, - // }); - // return; - // } - // } catch (error) { - // console.log("Error: verifyPublishableKey failed", error); - // res.status(500).json({ - // message: "Failed to verify publishable key -- internal server error", - // code: ErrCode.FailedToVerifyPublishableKey, - // }); - // return; - // } }; diff --git a/server/src/utils/constants.ts b/server/src/utils/constants.ts index d0f0e97a1..509118ca0 100644 --- a/server/src/utils/constants.ts +++ b/server/src/utils/constants.ts @@ -13,4 +13,7 @@ export const ADMIN_USER_IDs = ? ["user_2tMgAiPsQzX8JTHjZZh9m0VdvUv", "user_2sB3tBXsnVVLlTKliQIqvvM2xfB"] : ["user_2rypooIKyMQx81vMS8FFGx24UHU"]; -// console.log(ADMIN_USER_IDs); +export const dashboardOrigins = [ + "http://localhost:3000", + "https://app.useautumn.com", +]; diff --git a/shared/enums/ErrCode.ts b/shared/enums/ErrCode.ts index 248adcce5..35606f6a2 100644 --- a/shared/enums/ErrCode.ts +++ b/shared/enums/ErrCode.ts @@ -1,5 +1,9 @@ export const ErrCode = { // Auth + InvalidApiVersion: "invalid_api_version", + NoSecretKey: "no_secret_key", + InvalidSecretKey: "invalid_secret_key", + NoAuthHeader: "no_auth_header", InvalidAuthHeader: "invalid_auth_header", FailedToVerifySecretKey: "failed_to_verify_secret_key", @@ -10,7 +14,6 @@ export const ErrCode = { GetOrgFromPublishableKeyFailed: "get_org_from_publishable_key_failed", EndpointNotPublic: "endpoint_not_public", FailedToVerifyPublishableKey: "failed_to_verify_publishable_key", - InvalidApiVersion: "invalid_api_version", // General InvalidInputs: "invalid_inputs", diff --git a/vite/src/app/layout.tsx b/vite/src/app/layout.tsx index 9121954a0..5fb53dae2 100644 --- a/vite/src/app/layout.tsx +++ b/vite/src/app/layout.tsx @@ -13,12 +13,17 @@ import { ArrowUpRightFromSquare, PanelLeft, PanelRight } from "lucide-react"; import { AutumnProvider } from "autumn-js/react"; import { useSession } from "@/lib/auth-client"; import { CustomToaster } from "@/components/general/CustomToaster"; -import { SidebarContext, useSidebarContext } from "@/views/main-sidebar/SidebarContext"; +import { + SidebarContext, + useSidebarContext, +} from "@/views/main-sidebar/SidebarContext"; export function MainLayout() { const env = useEnv(); const { data, isPending } = useSession(); - const [sidebarState, setSidebarState] = useState<"expanded" | "collapsed">("expanded"); + const [sidebarState, setSidebarState] = useState<"expanded" | "collapsed">( + "expanded", + ); const navigate = useNavigate(); const posthog = usePostHog(); @@ -39,7 +44,9 @@ export function MainLayout() { // 1. If not loaded, show loading screen if (isPending) { return ( - +
@@ -88,7 +95,9 @@ export function MainLayout() { return ( - +
@@ -104,23 +113,11 @@ const MainContent = () => { const navigate = useNavigate(); const { state, setState } = useSidebarContext(); - const toggleSidebar = () => { - setState(state === "expanded" ? "collapsed" : "expanded"); - }; - return (
{/* Toggle Button */} - - + {env === AppEnv.Sandbox && (

You're in sandbox

diff --git a/vite/src/views/customers/CustomersTable.tsx b/vite/src/views/customers/CustomersTable.tsx index b39aec9bd..8a91bca15 100644 --- a/vite/src/views/customers/CustomersTable.tsx +++ b/vite/src/views/customers/CustomersTable.tsx @@ -29,7 +29,7 @@ import CopyButton from "@/components/general/CopyButton"; const CustomerWithProductsSchema = CustomerSchema.extend({ customer_products: z.array( - CusProductSchema.extend({ product: ProductSchema }) + CusProductSchema.extend({ product: ProductSchema }), ), }); type CustomerWithProducts = z.infer; @@ -53,7 +53,7 @@ export const CustomersTable = ({ // Filter out expired products first const activeProducts = customer.customer_products.filter( - (cusProduct) => cusProduct.status !== CusProductStatus.Expired + (cusProduct) => cusProduct.status !== CusProductStatus.Expired, ); if (activeProducts.length === 0) { @@ -67,7 +67,7 @@ export const CustomersTable = ({ const versionCount = versionCounts[cusProduct.product.id]; const version = cusProduct.product.version; - let prodName = ( + const prodName = ( <> {name} {versionCount > 1 && ( @@ -172,7 +172,7 @@ export const CustomersTable = ({ {children} diff --git a/vite/src/views/customers/CustomersView.tsx b/vite/src/views/customers/CustomersView.tsx index 0d138bbd6..2eea91daa 100644 --- a/vite/src/views/customers/CustomersView.tsx +++ b/vite/src/views/customers/CustomersView.tsx @@ -227,24 +227,23 @@ function CustomersView({ env }: { env: AppEnv }) {
) : ( -
- No customers - - { - // Show loading state during search transitions to prevent flash of incorrect message - (paginationLoading || searching) - ? "Loading..." - : searchParams.get("q")?.trim() - ? "No matching results found. Try a different search." - : "No customers found... yet 😉" - } - -
+
+ {/* No customers */} + + { + // Show loading state during search transitions to prevent flash of incorrect message + + searchParams.get("q")?.trim() + ? "No matching results found. Try a different search." + : "Create your first customer by interacting with an Autumn function via the API." + } + +
)}
{/*
diff --git a/vite/src/views/developer/ApiKeys.tsx b/vite/src/views/developer/ApiKeys.tsx index c9ad02018..cd633eded 100644 --- a/vite/src/views/developer/ApiKeys.tsx +++ b/vite/src/views/developer/ApiKeys.tsx @@ -17,15 +17,17 @@ export const ApiKeysView = ({ apiKeys }: any) => { {apiKeys.length > 0 ? ( ) : ( -
- + {/* No API Keys -

+ /> */} +

API keys are used to securely authenticate your requests from your server. Learn more{" "} { .

- )}
); diff --git a/vite/src/views/main-sidebar/MainSidebar.tsx b/vite/src/views/main-sidebar/MainSidebar.tsx index 5f0a83283..fe4b2dc1c 100644 --- a/vite/src/views/main-sidebar/MainSidebar.tsx +++ b/vite/src/views/main-sidebar/MainSidebar.tsx @@ -4,17 +4,27 @@ import { useEnv } from "@/utils/envUtils"; import { cn } from "@/lib/utils"; import { useSidebarContext } from "./SidebarContext"; import { useHotkeys } from "react-hotkeys-hook"; -import { Code, Package, Shield, User } from "lucide-react"; +import { + Code, + Package, + PanelLeft, + PanelRight, + Shield, + User, +} from "lucide-react"; import { EnvDropdown } from "./EnvDropdown"; import { OrgDropdown } from "./components/OrgDropdown"; import { AdminOnly } from "../admin/components/AdminOnly"; +import { Button } from "@/components/ui/button"; export const MainSidebar = () => { const env = useEnv(); const { state, setState } = useSidebarContext(); useHotkeys(["meta+b", "ctrl+b"], () => { - setState((prev: "expanded" | "collapsed") => (prev == "expanded" ? "collapsed" : "expanded")); + setState((prev: "expanded" | "collapsed") => + prev == "expanded" ? "collapsed" : "expanded", + ); }); return ( @@ -26,9 +36,29 @@ export const MainSidebar = () => { : "min-w-[50px] max-w-[50px]", )} > -
+
+ - {/* */} +
{ - const { state, setState } = useSidebarContext(); - return (
- {/*
- -
*/}
); }; - -const CopyText = ({ text }: { text: string }) => { - const [isHover, setIsHover] = useState(false); - const [isCopied, setIsCopied] = useState(false); - - return ( -
-

setIsHover(true)} - onMouseLeave={() => setIsHover(false)} - className="flex items-center gap-1 font-mono hover:underline cursor-pointer" - onClick={(e) => { - e.stopPropagation(); - e.preventDefault(); - navigator.clipboard.writeText(text); - setIsCopied(true); - setTimeout(() => { - setIsCopied(false); - }, 1000); - }} - > - {text} -

- {(isCopied || isHover) && ( -
{ - navigator.clipboard.writeText(text); - setIsCopied(true); - }} - > - {isCopied ? : } -
- )} -
- ); -}; - -// { -// state == "expanded" && ( -//
-//
-// -// {organization && ( -// - -// -// )} -//
-//
-// ); -// } diff --git a/vite/src/views/main-sidebar/components/OrgDropdown.tsx b/vite/src/views/main-sidebar/components/OrgDropdown.tsx index 924c5fc40..faa08f57d 100644 --- a/vite/src/views/main-sidebar/components/OrgDropdown.tsx +++ b/vite/src/views/main-sidebar/components/OrgDropdown.tsx @@ -28,6 +28,7 @@ import { DropdownMenuGroup } from "@radix-ui/react-dropdown-menu"; import { ChevronDown, LogOut, + PanelRight, Plus, Settings, Shield, @@ -45,9 +46,7 @@ import { useMemberships } from "../org-dropdown/hooks/useMemberships"; import { useSidebarContext } from "../SidebarContext"; import { OrgLogo } from "../org-dropdown/components/OrgLogo"; import { AdminHover } from "@/components/general/AdminHover"; -import { NavButton } from "../NavButton"; -import { AdminOnly } from "@/views/admin/components/AdminOnly"; -import { getBackendErr, notNullish } from "@/utils/genUtils"; + import { AdminDropdownItems } from "./AdminDropdownItems"; export const OrgDropdown = () => { @@ -155,6 +154,19 @@ export const OrgDropdown = () => {
+ {state === "collapsed" && ( + { + setState("expanded"); + setDropdownOpen(false); + }} + > +
+ Open Sidebar + +
+
+ )} diff --git a/vite/src/views/main-sidebar/org-dropdown/components/OrgLogo.tsx b/vite/src/views/main-sidebar/org-dropdown/components/OrgLogo.tsx index cc40ed08a..549eeb1a0 100644 --- a/vite/src/views/main-sidebar/org-dropdown/components/OrgLogo.tsx +++ b/vite/src/views/main-sidebar/org-dropdown/components/OrgLogo.tsx @@ -16,7 +16,7 @@ export const OrgLogo = ({ org }: { org: FrontendOrg }) => { {org.logo ? ( {org.name} ) : ( - + {firstLetter} )} diff --git a/vite/src/views/products/ProductsTable.tsx b/vite/src/views/products/ProductsTable.tsx index 60de0356a..edeee4bc5 100644 --- a/vite/src/views/products/ProductsTable.tsx +++ b/vite/src/views/products/ProductsTable.tsx @@ -47,19 +47,19 @@ export const ProductsTable = ({
- Products - - Products define the features your customers can access and how much{" "} -
- they cost. Create your first product to get started ☝️. + /> */} + + Products define the features your customers can access and how + much they cost. Create your first product to get started ☝️.
) diff --git a/vite/src/views/products/product/product-item/product-item-config/FeatureItemConfig.tsx b/vite/src/views/products/product/product-item/product-item-config/FeatureItemConfig.tsx index 9c6fc0f19..2eb6474a5 100644 --- a/vite/src/views/products/product/product-item/product-item-config/FeatureItemConfig.tsx +++ b/vite/src/views/products/product/product-item/product-item-config/FeatureItemConfig.tsx @@ -64,7 +64,6 @@ export const FeatureConfig = () => { )} - {isFeature && (
)} + ); }; diff --git a/vite/src/views/products/product/product-item/product-item-config/components/feature-price/FeaturePrice.tsx b/vite/src/views/products/product/product-item/product-item-config/components/feature-price/FeaturePrice.tsx index 73795c022..07c518804 100644 --- a/vite/src/views/products/product/product-item/product-item-config/components/feature-price/FeaturePrice.tsx +++ b/vite/src/views/products/product/product-item/product-item-config/components/feature-price/FeaturePrice.tsx @@ -1,8 +1,6 @@ import { Button } from "@/components/ui/button"; import { cn } from "@/lib/utils"; import { Plus, X } from "lucide-react"; -import { Input } from "@/components/ui/input"; -import { useState } from "react"; import { useProductContext } from "../../../../ProductContext"; import { useProductItemContext } from "../../../ProductItemContext"; import { Feature, FeatureItemSchema, TierInfinite } from "@autumn/shared"; @@ -15,9 +13,6 @@ export default function FeaturePrice() { const { item, setItem } = useProductItemContext(); const feature = features.find((f: Feature) => f.id == item.feature_id); - const featureName = feature?.name; - - const [editBillingUnits, setEditBillingUnits] = useState(false); const setUsageTier = (index: number, key: string, value: string | number) => { const newUsageTiers = [...item.tiers];