From 44bc466ee634cea37c1399cbb6a8e3fc5c8f1629 Mon Sep 17 00:00:00 2001 From: Jaseem T K Date: Wed, 25 Mar 2026 15:51:20 +0530 Subject: [PATCH 1/3] feat: integrate telemetry monitoring using OpenTelemetry --- gateway/package.json | 5 + gateway/src/server.ts | 1 + gateway/src/telemetry.ts | 19 + pnpm-lock.yaml | 1723 +++++++++++++++-- services/checkout-service/package.json | 5 + services/checkout-service/src/server.ts | 1 + services/checkout-service/src/telemetry.ts | 19 + .../src/workers/order.worker.ts | 2 +- services/product-service/package.json | 5 + services/product-service/src/server.ts | 1 + services/product-service/src/telemetry.ts | 19 + services/user-service/package.json | 7 +- services/user-service/src/server.ts | 1 + services/user-service/src/telemetry.ts | 19 + 14 files changed, 1705 insertions(+), 122 deletions(-) create mode 100644 gateway/src/telemetry.ts create mode 100644 services/checkout-service/src/telemetry.ts create mode 100644 services/product-service/src/telemetry.ts create mode 100644 services/user-service/src/telemetry.ts diff --git a/gateway/package.json b/gateway/package.json index 5cd52a0..05cbd46 100644 --- a/gateway/package.json +++ b/gateway/package.json @@ -15,6 +15,11 @@ "license": "ISC", "packageManager": "pnpm@10.26.0", "dependencies": { + "@opentelemetry/auto-instrumentations-node": "^0.71.0", + "@opentelemetry/exporter-trace-otlp-http": "^0.213.0", + "@opentelemetry/resources": "^2.6.0", + "@opentelemetry/sdk-node": "^0.213.0", + "@opentelemetry/semantic-conventions": "^1.40.0", "axios": "^1.13.2", "cookie-parser": "^1.4.7", "cors": "^2.8.5", diff --git a/gateway/src/server.ts b/gateway/src/server.ts index 4eea1c8..b50ecf0 100644 --- a/gateway/src/server.ts +++ b/gateway/src/server.ts @@ -1,3 +1,4 @@ +import "./telemetry.js"; import 'dotenv/config'; import app from './app.js'; diff --git a/gateway/src/telemetry.ts b/gateway/src/telemetry.ts new file mode 100644 index 0000000..06f3731 --- /dev/null +++ b/gateway/src/telemetry.ts @@ -0,0 +1,19 @@ +import { NodeSDK } from "@opentelemetry/sdk-node"; +import { getNodeAutoInstrumentations } from "@opentelemetry/auto-instrumentations-node"; +import { OTLPTraceExporter } from "@opentelemetry/exporter-trace-otlp-http"; +import { resourceFromAttributes } from "@opentelemetry/resources"; +import { ATTR_SERVICE_NAME } from "@opentelemetry/semantic-conventions"; + +const traceExporter = new OTLPTraceExporter({ + url: "http://localhost:4318/v1/traces", +}); + +const sdk = new NodeSDK({ + traceExporter, + instrumentations: [getNodeAutoInstrumentations()], + resource: resourceFromAttributes({ + [ATTR_SERVICE_NAME]: "gateway", + }), +}); + +sdk.start(); \ No newline at end of file diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 1af5aa1..5bda739 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -213,6 +213,21 @@ importers: gateway: dependencies: + '@opentelemetry/auto-instrumentations-node': + specifier: ^0.71.0 + version: 0.71.0(@opentelemetry/api@1.9.0)(@opentelemetry/core@2.6.0(@opentelemetry/api@1.9.0)) + '@opentelemetry/exporter-trace-otlp-http': + specifier: ^0.213.0 + version: 0.213.0(@opentelemetry/api@1.9.0) + '@opentelemetry/resources': + specifier: ^2.6.0 + version: 2.6.0(@opentelemetry/api@1.9.0) + '@opentelemetry/sdk-node': + specifier: ^0.213.0 + version: 0.213.0(@opentelemetry/api@1.9.0) + '@opentelemetry/semantic-conventions': + specifier: ^1.40.0 + version: 1.40.0 axios: specifier: ^1.13.2 version: 1.13.2 @@ -299,6 +314,21 @@ importers: '@aws-sdk/lib-dynamodb': specifier: ^3.968.0 version: 3.968.0(@aws-sdk/client-dynamodb@3.968.0) + '@opentelemetry/auto-instrumentations-node': + specifier: ^0.71.0 + version: 0.71.0(@opentelemetry/api@1.9.0)(@opentelemetry/core@2.6.0(@opentelemetry/api@1.9.0)) + '@opentelemetry/exporter-trace-otlp-http': + specifier: ^0.213.0 + version: 0.213.0(@opentelemetry/api@1.9.0) + '@opentelemetry/resources': + specifier: ^2.6.0 + version: 2.6.0(@opentelemetry/api@1.9.0) + '@opentelemetry/sdk-node': + specifier: ^0.213.0 + version: 0.213.0(@opentelemetry/api@1.9.0) + '@opentelemetry/semantic-conventions': + specifier: ^1.40.0 + version: 1.40.0 amqplib: specifier: ^0.10.9 version: 0.10.9 @@ -366,6 +396,21 @@ importers: '@elastic/elasticsearch': specifier: ^8.19.1 version: 8.19.1 + '@opentelemetry/auto-instrumentations-node': + specifier: ^0.71.0 + version: 0.71.0(@opentelemetry/api@1.9.0)(@opentelemetry/core@2.6.0(@opentelemetry/api@1.9.0)) + '@opentelemetry/exporter-trace-otlp-http': + specifier: ^0.213.0 + version: 0.213.0(@opentelemetry/api@1.9.0) + '@opentelemetry/resources': + specifier: ^2.6.0 + version: 2.6.0(@opentelemetry/api@1.9.0) + '@opentelemetry/sdk-node': + specifier: ^0.213.0 + version: 0.213.0(@opentelemetry/api@1.9.0) + '@opentelemetry/semantic-conventions': + specifier: ^1.40.0 + version: 1.40.0 cors: specifier: ^2.8.5 version: 2.8.5 @@ -412,6 +457,21 @@ importers: '@healix/contracts': specifier: workspace:* version: link:../../packages/contracts + '@opentelemetry/auto-instrumentations-node': + specifier: ^0.71.0 + version: 0.71.0(@opentelemetry/api@1.9.0)(@opentelemetry/core@2.6.0(@opentelemetry/api@1.9.0)) + '@opentelemetry/exporter-trace-otlp-http': + specifier: ^0.213.0 + version: 0.213.0(@opentelemetry/api@1.9.0) + '@opentelemetry/resources': + specifier: ^2.6.0 + version: 2.6.0(@opentelemetry/api@1.9.0) + '@opentelemetry/sdk-node': + specifier: ^0.213.0 + version: 0.213.0(@opentelemetry/api@1.9.0) + '@opentelemetry/semantic-conventions': + specifier: ^1.40.0 + version: 1.40.0 bcryptjs: specifier: ^3.0.3 version: 3.0.3 @@ -1431,6 +1491,15 @@ packages: '@floating-ui/utils@0.2.10': resolution: {integrity: sha512-aGTxbpbg8/b5JfU1HXSrbH3wXZuLPJcNEcZQFMxLs3oSzgtVu6nFPkbbGGUvBcUjKV2YyB9Wxxabo+HEH9tcRQ==} + '@grpc/grpc-js@1.14.3': + resolution: {integrity: sha512-Iq8QQQ/7X3Sac15oB6p0FmUg/klxQvXLeileoqrTRGJYLV+/9tubbr9ipz0GKHjmXVsgFPo/+W+2cA8eNcR+XA==} + engines: {node: '>=12.10.0'} + + '@grpc/proto-loader@0.8.0': + resolution: {integrity: sha512-rc1hOQtjIWGxcxpb9aHAfLpIctjEnsDehj0DAiVfBlmT84uvR0uUtN2hEi/ecvWVjXUGf5qPF4qEgiLOx1YIMQ==} + engines: {node: '>=6'} + hasBin: true + '@hono/node-server@1.19.9': resolution: {integrity: sha512-vHL6w3ecZsky+8P5MD+eFfaGTyCeOHUIFYMGpQGbrBTSmNNoxv0if69rEZ5giu36weC5saFuznL411gRX7bJDw==} engines: {node: '>=18.14.1'} @@ -1665,6 +1734,9 @@ packages: '@jridgewell/trace-mapping@0.3.9': resolution: {integrity: sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==} + '@js-sdsl/ordered-map@4.4.2': + resolution: {integrity: sha512-iUKgm52T8HOE/makSxjqoWhe95ZJA1/G1sYsGev2JDKUSS14KAgg1LHb+Ba+IPow0xflbnSkOsZcO08C7w1gYw==} + '@modelcontextprotocol/sdk@1.26.0': resolution: {integrity: sha512-Y5RmPncpiDtTXDbLKswIJzTqu2hyBKxTNsgKqKclDbhIgg1wgtf1fRuvxgTnRfcnxtvvgbIEcqUOzZrJ6iSReg==} engines: {node: '>=18'} @@ -1779,20 +1851,467 @@ packages: '@open-draft/until@2.1.0': resolution: {integrity: sha512-U69T3ItWHvLwGg5eJ0n3I62nWuE6ilHlmz7zM0npLBRvPRd7e6NYmg54vvRtP5mZG7kZqZCFVdsTWo7BPtBujg==} + '@opentelemetry/api-logs@0.213.0': + resolution: {integrity: sha512-zRM5/Qj6G84Ej3F1yt33xBVY/3tnMxtL1fiDIxYbDWYaZ/eudVw3/PBiZ8G7JwUxXxjW8gU4g6LnOyfGKYHYgw==} + engines: {node: '>=8.0.0'} + '@opentelemetry/api@1.9.0': resolution: {integrity: sha512-3giAOQvZiH5F9bMlMiv8+GSPMeqg0dbaeo58/0SlA9sxSqZhnUtxzX9/2FzyhS9sWQf5S0GJE0AKBrFqjpeYcg==} engines: {node: '>=8.0.0'} - '@opentelemetry/core@2.5.1': - resolution: {integrity: sha512-Dwlc+3HAZqpgTYq0MUyZABjFkcrKTePwuiFVLjahGD8cx3enqihmpAmdgNFO1R4m/sIe5afjJrA25Prqy4NXlA==} + '@opentelemetry/auto-instrumentations-node@0.71.0': + resolution: {integrity: sha512-umqazfIujHj9fE+p3skrPMO9uCsDodSUqIgVRtELaPX036HhGkVaI7MwCQL3/kiyqrXRsKYSow2vCBR4CVsnOA==} + engines: {node: ^18.19.0 || >=20.6.0} + peerDependencies: + '@opentelemetry/api': ^1.4.1 + '@opentelemetry/core': ^2.0.0 + + '@opentelemetry/configuration@0.213.0': + resolution: {integrity: sha512-MfVgZiUuwL1d3bPPvXcEkVHGTGNUGoqGK97lfwBuRoKttcVGGqDyxTCCVa5MGbirtBQkUTysXMBUVWPaq7zbWw==} + engines: {node: ^18.19.0 || >=20.6.0} + peerDependencies: + '@opentelemetry/api': ^1.9.0 + + '@opentelemetry/context-async-hooks@2.6.0': + resolution: {integrity: sha512-L8UyDwqpTcbkIK5cgwDRDYDoEhQoj8wp8BwsO19w3LB1Z41yEQm2VJyNfAi9DrLP/YTqXqWpKHyZfR9/tFYo1Q==} + engines: {node: ^18.19.0 || >=20.6.0} + peerDependencies: + '@opentelemetry/api': '>=1.0.0 <1.10.0' + + '@opentelemetry/core@2.6.0': + resolution: {integrity: sha512-HLM1v2cbZ4TgYN6KEOj+Bbj8rAKriOdkF9Ed3tG25FoprSiQl7kYc+RRT6fUZGOvx0oMi5U67GoFdT+XUn8zEg==} + engines: {node: ^18.19.0 || >=20.6.0} + peerDependencies: + '@opentelemetry/api': '>=1.0.0 <1.10.0' + + '@opentelemetry/exporter-logs-otlp-grpc@0.213.0': + resolution: {integrity: sha512-QiRZzvayEOFnenSXi85Eorgy5WTqyNQ+E7gjl6P6r+W3IUIwAIH8A9/BgMWfP056LwmdrBL6+qvnwaIEmug6Yg==} + engines: {node: ^18.19.0 || >=20.6.0} + peerDependencies: + '@opentelemetry/api': ^1.3.0 + + '@opentelemetry/exporter-logs-otlp-http@0.213.0': + resolution: {integrity: sha512-vqDVSpLp09ZzcFIdb7QZrEFPxUlO3GzdhBKLstq3jhYB5ow3+ZtV5V0ngSdi/0BZs+J5WPiN1+UDV4X5zD/GzA==} + engines: {node: ^18.19.0 || >=20.6.0} + peerDependencies: + '@opentelemetry/api': ^1.3.0 + + '@opentelemetry/exporter-logs-otlp-proto@0.213.0': + resolution: {integrity: sha512-gQk41nqfK3KhDk8jbSo3LR/fQBlV7f6Q5xRcfDmL1hZlbgXQPdVFV9/rIfYUrCoq1OM+2NnKnFfGjBt6QpLSsA==} + engines: {node: ^18.19.0 || >=20.6.0} + peerDependencies: + '@opentelemetry/api': ^1.3.0 + + '@opentelemetry/exporter-metrics-otlp-grpc@0.213.0': + resolution: {integrity: sha512-Z8gYKUAU48qwm+a1tjnGv9xbE7a5lukVIwgF6Z5i3VPXPVMe4Sjra0nN3zU7m277h+V+ZpsPGZJ2Xf0OTkL7/w==} + engines: {node: ^18.19.0 || >=20.6.0} + peerDependencies: + '@opentelemetry/api': ^1.3.0 + + '@opentelemetry/exporter-metrics-otlp-http@0.213.0': + resolution: {integrity: sha512-yw3fTIw4KQIRXC/ZyYQq5gtA3Ogfdfz/g5HVgleobQAcjUUE8Nj3spGMx8iQPp+S+u6/js7BixufRkXhzLmpJA==} + engines: {node: ^18.19.0 || >=20.6.0} + peerDependencies: + '@opentelemetry/api': ^1.3.0 + + '@opentelemetry/exporter-metrics-otlp-proto@0.213.0': + resolution: {integrity: sha512-geHF+zZaDb0/WRkJTxR8o8dG4fCWT/Wq7HBdNZCxwH5mxhwRi/5f37IDYH7nvU+dwU6IeY4Pg8TPI435JCiNkg==} + engines: {node: ^18.19.0 || >=20.6.0} + peerDependencies: + '@opentelemetry/api': ^1.3.0 + + '@opentelemetry/exporter-prometheus@0.213.0': + resolution: {integrity: sha512-FyV3/JfKGAgx+zJUwCHdjQHbs+YeGd2fOWvBHYrW6dmfv/w89lb8WhJTSZEoWgP525jwv/gFeBttlGu1flebdA==} + engines: {node: ^18.19.0 || >=20.6.0} + peerDependencies: + '@opentelemetry/api': ^1.3.0 + + '@opentelemetry/exporter-trace-otlp-grpc@0.213.0': + resolution: {integrity: sha512-L8y6piP4jBIIx1Nv7/9hkx25ql6/Cro/kQrs+f9e8bPF0Ar5Dm991v7PnbtubKz6Q4fT872H56QXUWVnz/Cs4Q==} + engines: {node: ^18.19.0 || >=20.6.0} + peerDependencies: + '@opentelemetry/api': ^1.3.0 + + '@opentelemetry/exporter-trace-otlp-http@0.213.0': + resolution: {integrity: sha512-tnRmJD39aWrE/Sp7F6AbRNAjKHToDkAqBi6i0lESpGWz3G+f4bhVAV6mgSXH2o18lrDVJXo6jf9bAywQw43wRA==} + engines: {node: ^18.19.0 || >=20.6.0} + peerDependencies: + '@opentelemetry/api': ^1.3.0 + + '@opentelemetry/exporter-trace-otlp-proto@0.213.0': + resolution: {integrity: sha512-six3vPq3sL+ge1iZOfKEg+RHuFQhGb8ZTdlvD234w/0gi8ty/qKD46qoGpKvM3amy5yYunWBKiFBW47WaVS26w==} + engines: {node: ^18.19.0 || >=20.6.0} + peerDependencies: + '@opentelemetry/api': ^1.3.0 + + '@opentelemetry/exporter-zipkin@2.6.0': + resolution: {integrity: sha512-AFP77OQMLfw/Jzh6WT2PtrywstNjdoyT9t9lYrYdk1s4igsvnMZ8DkZKCwxsItC01D+4Lydgrb+Wy0bAvpp8xg==} + engines: {node: ^18.19.0 || >=20.6.0} + peerDependencies: + '@opentelemetry/api': ^1.0.0 + + '@opentelemetry/instrumentation-amqplib@0.60.0': + resolution: {integrity: sha512-q/B2IvoVXRm1M00MvhnzpMN6rKYOszPXVsALi6u0ss4AYHe+TidZEtLW9N1ZhrobI1dSriHnBqqtAOZVAv07sg==} + engines: {node: ^18.19.0 || >=20.6.0} + peerDependencies: + '@opentelemetry/api': ^1.3.0 + + '@opentelemetry/instrumentation-aws-lambda@0.65.0': + resolution: {integrity: sha512-7SiaXnyEH0abDi61r72YCpkeQr27ePiCK3SaE2uFEF/riAUwk18r6vDXQKPZczWv3BGrGpk1YDc4qYYlY0uomA==} + engines: {node: ^18.19.0 || >=20.6.0} + peerDependencies: + '@opentelemetry/api': ^1.3.0 + + '@opentelemetry/instrumentation-aws-sdk@0.68.0': + resolution: {integrity: sha512-nHXSRX3iYSE9MaiPE+jIovuNA8dTmleeg0vdLHkk5nvWCYFf/I9kMdqA3KcfKCPonVc5+NtSTft6OVtuGtawIA==} + engines: {node: ^18.19.0 || >=20.6.0} + peerDependencies: + '@opentelemetry/api': ^1.3.0 + + '@opentelemetry/instrumentation-bunyan@0.58.0': + resolution: {integrity: sha512-vxotqOCzUQf2C4Dlrv+feY9XhQSa2wG/R+0S/JZ/axhbW0/yJeNKWsWWQ1FUFZQkUlZUS5nyWM8ePvgVmPq/Kg==} + engines: {node: ^18.19.0 || >=20.6.0} + peerDependencies: + '@opentelemetry/api': ^1.3.0 + + '@opentelemetry/instrumentation-cassandra-driver@0.58.0': + resolution: {integrity: sha512-qPzEANo6IVz02sctrbihMwcNGq+LUUrISnzFitUmFzBz5SjPp5iEPy59KFNqpNa9k/oas5B7650OWB/z2Ld7qQ==} + engines: {node: ^18.19.0 || >=20.6.0} + peerDependencies: + '@opentelemetry/api': ^1.3.0 + + '@opentelemetry/instrumentation-connect@0.56.0': + resolution: {integrity: sha512-PKp+sSZ7AfzMvGgO3VCyo1inwNu+q7A1k9X88WK4PQ+S6Hp7eFk8pie+sWHDTaARovmqq5V2osav3lQej2B0nw==} + engines: {node: ^18.19.0 || >=20.6.0} + peerDependencies: + '@opentelemetry/api': ^1.3.0 + + '@opentelemetry/instrumentation-cucumber@0.29.0': + resolution: {integrity: sha512-u3bECWikRK/nHQemb5TJbfht/eC70sVUwzkhAOTuXHAU+QAtUV9XLy6snjtGSJ1RLgOXU26tb4SqNplLa26COA==} + engines: {node: ^18.19.0 || >=20.6.0} + peerDependencies: + '@opentelemetry/api': ^1.0.0 + + '@opentelemetry/instrumentation-dataloader@0.30.0': + resolution: {integrity: sha512-MXHP2Q38cd2OhzEBKAIXUi9uBlPEYzF6BNJbyjUXBQ6kLaf93kRC41vNMIz0Nl5mnuwK7fDvKT+/lpx7BXRwdg==} + engines: {node: ^18.19.0 || >=20.6.0} + peerDependencies: + '@opentelemetry/api': ^1.3.0 + + '@opentelemetry/instrumentation-dns@0.56.0': + resolution: {integrity: sha512-u2E07CxapafcgNkTH5V0XSeE7xm3VA19HpKVEcwV+j9S7lKb9CE1j42dAM6nT7NgIQocIyyon1vFU2ubS0ukpA==} + engines: {node: ^18.19.0 || >=20.6.0} + peerDependencies: + '@opentelemetry/api': ^1.3.0 + + '@opentelemetry/instrumentation-express@0.61.0': + resolution: {integrity: sha512-Xdmqo9RZuZlL29Flg8QdwrrX7eW1CZ7wFQPKHyXljNymgKhN1MCsYuqQ/7uxavhSKwAl7WxkTzKhnqpUApLMvQ==} + engines: {node: ^18.19.0 || >=20.6.0} + peerDependencies: + '@opentelemetry/api': ^1.3.0 + + '@opentelemetry/instrumentation-fastify@0.57.0': + resolution: {integrity: sha512-D+rwRtbiOediYocpKGvY/RQTpuLsLdCVwaOREyqWViwItJGibWI7O/wgd9xIV63pMP0D9IdSy27wnARfUaotKg==} + engines: {node: ^18.19.0 || >=20.6.0} + peerDependencies: + '@opentelemetry/api': ^1.3.0 + + '@opentelemetry/instrumentation-fs@0.32.0': + resolution: {integrity: sha512-koR6apx0g0wX6RRiPpjA4AFQUQUbXrK16kq4/SZjVp7u5cffJhNkY4TnITxcGA4acGSPYAfx3NHRIv4Khn1axQ==} + engines: {node: ^18.19.0 || >=20.6.0} + peerDependencies: + '@opentelemetry/api': ^1.3.0 + + '@opentelemetry/instrumentation-generic-pool@0.56.0': + resolution: {integrity: sha512-fg+Jffs6fqrf0uQS0hom7qBFKsbtpBiBl8+Vkc63Gx8xh6pVh+FhagmiO6oM0m3vyb683t1lP7yGYq22SiDnqg==} + engines: {node: ^18.19.0 || >=20.6.0} + peerDependencies: + '@opentelemetry/api': ^1.3.0 + + '@opentelemetry/instrumentation-graphql@0.61.0': + resolution: {integrity: sha512-pUiVASv6nh2XrerTvlbVHh7vKFzscpgwiQ/xvnZuAIzQ5lRjWVdRPUuXbvZJ/Yq79QsE81TZdJ7z9YsXiss1ew==} + engines: {node: ^18.19.0 || >=20.6.0} + peerDependencies: + '@opentelemetry/api': ^1.3.0 + + '@opentelemetry/instrumentation-grpc@0.213.0': + resolution: {integrity: sha512-GT53wIJnEffHcWlDUXRodTSUUspy57PNBZXc46z9rfy3Ee+VeM5XqWnieF1yefCd01QTaISYB49LXNc2SayIBQ==} + engines: {node: ^18.19.0 || >=20.6.0} + peerDependencies: + '@opentelemetry/api': ^1.3.0 + + '@opentelemetry/instrumentation-hapi@0.59.0': + resolution: {integrity: sha512-33wa4mEr+9+ztwdgLor1SeBu4Opz4IsmpcLETXAd3VmBrOjez8uQtrsOhPCa5Vhbm5gzDlMYTgFRLQzf8/YHFA==} + engines: {node: ^18.19.0 || >=20.6.0} + peerDependencies: + '@opentelemetry/api': ^1.3.0 + + '@opentelemetry/instrumentation-http@0.213.0': + resolution: {integrity: sha512-B978Xsm5XEPGhm1P07grDoaOFLHapJPkOG9h016cJsyWWxmiLnPu2M/4Nrm7UCkHSiLnkXgC+zVGUAIahy8EEA==} + engines: {node: ^18.19.0 || >=20.6.0} + peerDependencies: + '@opentelemetry/api': ^1.3.0 + + '@opentelemetry/instrumentation-ioredis@0.61.0': + resolution: {integrity: sha512-hsHDadUtAFbws1YSDc1XW0svGFKiUbqv2td1Cby+UAiwvojm1NyBo/taifH0t8CuFZ0x/2SDm0iuTwrM5pnVOg==} + engines: {node: ^18.19.0 || >=20.6.0} + peerDependencies: + '@opentelemetry/api': ^1.3.0 + + '@opentelemetry/instrumentation-kafkajs@0.22.0': + resolution: {integrity: sha512-wJU4IBQMUikdJAcTChLFqK5lo+flo7pahqd8DSLv7uMxsdOdAHj6RzKYAm8pPfUS6ItKYutYyuicwKaFwQKsoA==} + engines: {node: ^18.19.0 || >=20.6.0} + peerDependencies: + '@opentelemetry/api': ^1.3.0 + + '@opentelemetry/instrumentation-knex@0.57.0': + resolution: {integrity: sha512-vMCSh8kolEm5rRsc+FZeTZymWmIJwc40hjIKnXH4O0Dv/gAkJJIRXCsPX5cPbe0c0j/34+PsENd0HqKruwhVYw==} + engines: {node: ^18.19.0 || >=20.6.0} + peerDependencies: + '@opentelemetry/api': ^1.3.0 + + '@opentelemetry/instrumentation-koa@0.61.0': + resolution: {integrity: sha512-lvrfWe9ShK/D2X4brmx8ZqqeWPfRl8xekU0FCn7C1dHm5k6+rTOOi36+4fnaHAP8lig9Ux6XQ1D4RNIpPCt1WQ==} + engines: {node: ^18.19.0 || >=20.6.0} + peerDependencies: + '@opentelemetry/api': ^1.9.0 + + '@opentelemetry/instrumentation-lru-memoizer@0.57.0': + resolution: {integrity: sha512-cEqpUocSKJfwDtLYTTJehRLWzkZ2eoePCxfVIgGkGkb83fMB71O+y4MvRHJPbeV2bdoWdOVrl8uO0+EynWhTEA==} + engines: {node: ^18.19.0 || >=20.6.0} + peerDependencies: + '@opentelemetry/api': ^1.3.0 + + '@opentelemetry/instrumentation-memcached@0.56.0': + resolution: {integrity: sha512-rU5kc6g465SgG52uUl2Qlf5OiNopYleqzNgJCDPokPdEeUb3Hpj3O7kqjAJ5bKEVMZVG9UC1MBp2TQwGv60byw==} + engines: {node: ^18.19.0 || >=20.6.0} + peerDependencies: + '@opentelemetry/api': ^1.3.0 + + '@opentelemetry/instrumentation-mongodb@0.66.0': + resolution: {integrity: sha512-d7m9QnAY+4TCWI4q1QRkfrc6fo/92VwssaB1DzQfXNRvu51b78P+HJlWP7Qg6N6nkwdb9faMZNBCZJfftmszkw==} + engines: {node: ^18.19.0 || >=20.6.0} + peerDependencies: + '@opentelemetry/api': ^1.3.0 + + '@opentelemetry/instrumentation-mongoose@0.59.0': + resolution: {integrity: sha512-6/jWU+c1NgznkVLDU/2y0bXV2nJo3o9FWZ9mZ9nN6T/JBNRoMnVXZl2FdBmgH+a5MwaWLs5kmRJTP5oUVGIkPw==} + engines: {node: ^18.19.0 || >=20.6.0} + peerDependencies: + '@opentelemetry/api': ^1.3.0 + + '@opentelemetry/instrumentation-mysql2@0.59.0': + resolution: {integrity: sha512-n9/xrVCRBfG9egVbffnlU1uhr+HX0vF4GgtAB/Bvm48wpFgRidqD8msBMiym1kRYzmpWvJqTxNT47u1MkgBEdw==} + engines: {node: ^18.19.0 || >=20.6.0} + peerDependencies: + '@opentelemetry/api': ^1.3.0 + + '@opentelemetry/instrumentation-mysql@0.59.0': + resolution: {integrity: sha512-r+V/Fh0sm7Ga8/zk/TI5H5FQRAjwr0RrpfPf8kNIehlsKf12XnvIaZi8ViZkpX0gyPEpLXqzqWD6QHlgObgzZw==} + engines: {node: ^18.19.0 || >=20.6.0} + peerDependencies: + '@opentelemetry/api': ^1.3.0 + + '@opentelemetry/instrumentation-nestjs-core@0.59.0': + resolution: {integrity: sha512-tt2cFTENV8XB3D3xjhOz0q4hLc1eqkMZS5UyT9nnHF5FfYH94S2vAGdssvsMv+pFtA6/PmhPUZd4onUN1O7STg==} + engines: {node: ^18.19.0 || >=20.6.0} + peerDependencies: + '@opentelemetry/api': ^1.3.0 + + '@opentelemetry/instrumentation-net@0.57.0': + resolution: {integrity: sha512-UUb59z83btvU8q9sQFOc3wr6dsxZP9O17dPlqRUxl1gVrxx8+CIajEGFP+KhJNdlkGyRjH09UfMRvWvCtJdakw==} + engines: {node: ^18.19.0 || >=20.6.0} + peerDependencies: + '@opentelemetry/api': ^1.3.0 + + '@opentelemetry/instrumentation-openai@0.11.0': + resolution: {integrity: sha512-dlE35fB8xUFBFvlVOQcaMMii+mKk6kWeQbwQEePOLBp2U4oQd2wGGeVPYyihMnTFLVhQdQm2k5DVPFc2Gcllow==} + engines: {node: ^18.19.0 || >=20.6.0} + peerDependencies: + '@opentelemetry/api': ^1.3.0 + + '@opentelemetry/instrumentation-oracledb@0.38.0': + resolution: {integrity: sha512-xPVEN9jO5pdpuzRYY8d7JTMEk2sPA3KShzoK4mBQgfLvM2BR3k0XwtyyX/FmWYSrjE7oxnO30HlhuyfkEd6o5A==} + engines: {node: ^18.19.0 || >=20.6.0} + peerDependencies: + '@opentelemetry/api': ^1.3.0 + + '@opentelemetry/instrumentation-pg@0.65.0': + resolution: {integrity: sha512-W0zpHEIEuyZ8zvb3njaX9AAbHgPYOsSWVOoWmv1sjVRSF6ZpBqtlxBWbU+6hhq1TFWBeWJOXZ8nZS/PUFpLJYQ==} + engines: {node: ^18.19.0 || >=20.6.0} + peerDependencies: + '@opentelemetry/api': ^1.3.0 + + '@opentelemetry/instrumentation-pino@0.59.0': + resolution: {integrity: sha512-IgImVFtWjfMmqxc0NIe3iSjp+J3Asf9lLX8reouUFUk3Aa/qJQO5PEvOtO3sNQtJBkC9bAd1OQdFaFWSFQc03g==} + engines: {node: ^18.19.0 || >=20.6.0} + peerDependencies: + '@opentelemetry/api': ^1.3.0 + + '@opentelemetry/instrumentation-redis@0.61.0': + resolution: {integrity: sha512-JnPexA034/0UJRsvH96B0erQoNOqKJZjE2ZRSw9hiTSC23LzE0nJE/u6D+xqOhgUhRnhhcPHq4MdYtmUdYTF+Q==} + engines: {node: ^18.19.0 || >=20.6.0} + peerDependencies: + '@opentelemetry/api': ^1.3.0 + + '@opentelemetry/instrumentation-restify@0.58.0': + resolution: {integrity: sha512-E8pEjW9d5rd6xxLhgHiQTwUG6YBOBeWzH/pe/IkdIGwkDzm1NVoExjSCVtMLQ8dRZbVo0nSdv2TqzyDcysuiSQ==} + engines: {node: ^18.19.0 || >=20.6.0} + peerDependencies: + '@opentelemetry/api': ^1.3.0 + + '@opentelemetry/instrumentation-router@0.57.0': + resolution: {integrity: sha512-iWhLFvNee9ZX5QhFbXZeGdoT966QemUfd1i+zxPWceE58P22qf9va6x662LbrNhcvJfXnf7hoW7BU9tzaBLmYg==} + engines: {node: ^18.19.0 || >=20.6.0} + peerDependencies: + '@opentelemetry/api': ^1.3.0 + + '@opentelemetry/instrumentation-runtime-node@0.26.0': + resolution: {integrity: sha512-Q6xlV3o/ogtAJ1stWNNqL7kKFD6sMEDyC3Rb9GqnMQ5uH1wfnXO189F2XwMNt7Xe52asNU1WCrqiGa0iSrkq1g==} + engines: {node: ^18.19.0 || >=20.6.0} + peerDependencies: + '@opentelemetry/api': ^1.3.0 + + '@opentelemetry/instrumentation-socket.io@0.60.0': + resolution: {integrity: sha512-gzIkrN+hJzuQR87CA1zVCUQASOuuz0uC7kk7qDt9E/4sNvWrCIfI0YYa8ZTPgbaofqZE1fGWt0UqzIzQTb5BWQ==} + engines: {node: ^18.19.0 || >=20.6.0} + peerDependencies: + '@opentelemetry/api': ^1.3.0 + + '@opentelemetry/instrumentation-tedious@0.32.0': + resolution: {integrity: sha512-BQS6gG8RJ1foEqfEZ+wxoqlwfCAzb1ZVG0ad8Gfe4x8T658HJCLGLd4E4NaoQd8EvPfLqOXgzGaE/2U4ytDSWA==} + engines: {node: ^18.19.0 || >=20.6.0} + peerDependencies: + '@opentelemetry/api': ^1.3.0 + + '@opentelemetry/instrumentation-undici@0.23.0': + resolution: {integrity: sha512-LL0VySzKVR2cJSFVZaTYpZl1XTpBGnfzoQPe2W7McS2267ldsaEIqtQY6VXs2KCXN0poFjze5110PIpxHDaDGg==} + engines: {node: ^18.19.0 || >=20.6.0} + peerDependencies: + '@opentelemetry/api': ^1.7.0 + + '@opentelemetry/instrumentation-winston@0.57.0': + resolution: {integrity: sha512-0MEeeyTd55OcXEd3SRkDwPvpb2equZ4kIADI7boVB9OYyaxAR2TB7jPX1IGORn1n/V+FXVWlYn9pQc2GuboJ+w==} + engines: {node: ^18.19.0 || >=20.6.0} + peerDependencies: + '@opentelemetry/api': ^1.3.0 + + '@opentelemetry/instrumentation@0.213.0': + resolution: {integrity: sha512-3i9NdkET/KvQomeh7UaR/F4r9P25Rx6ooALlWXPIjypcEOUxksCmVu0zA70NBJWlrMW1rPr/LRidFAflLI+s/w==} + engines: {node: ^18.19.0 || >=20.6.0} + peerDependencies: + '@opentelemetry/api': ^1.3.0 + + '@opentelemetry/otlp-exporter-base@0.213.0': + resolution: {integrity: sha512-MegxAP1/n09Ob2dQvY5NBDVjAFkZRuKtWKxYev1R2M8hrsgXzQGkaMgoEKeUOyQ0FUyYcO29UOnYdQWmWa0PXg==} + engines: {node: ^18.19.0 || >=20.6.0} + peerDependencies: + '@opentelemetry/api': ^1.3.0 + + '@opentelemetry/otlp-grpc-exporter-base@0.213.0': + resolution: {integrity: sha512-XgRGuLE9usFNlnw2lgMIM4HTwpcIyjdU/xPoJ8v3LbBLBfjaDkIugjc9HoWa7ZSJ/9Bhzgvm/aD0bGdYUFgnTw==} + engines: {node: ^18.19.0 || >=20.6.0} + peerDependencies: + '@opentelemetry/api': ^1.3.0 + + '@opentelemetry/otlp-transformer@0.213.0': + resolution: {integrity: sha512-RSuAlxFFPjeK4d5Y6ps8L2WhaQI6CXWllIjvo5nkAlBpmq2XdYWEBGiAbOF4nDs8CX4QblJDv5BbMUft3sEfDw==} + engines: {node: ^18.19.0 || >=20.6.0} + peerDependencies: + '@opentelemetry/api': ^1.3.0 + + '@opentelemetry/propagator-b3@2.6.0': + resolution: {integrity: sha512-SguK4jMmRvQ0c0dxAMl6K+Eu1+01X0OP7RLiIuHFjOS8hlB23ZYNnhnbAdSQEh5xVXQmH0OAS0TnmVI+6vB2Kg==} + engines: {node: ^18.19.0 || >=20.6.0} + peerDependencies: + '@opentelemetry/api': '>=1.0.0 <1.10.0' + + '@opentelemetry/propagator-jaeger@2.6.0': + resolution: {integrity: sha512-KGWJuvp9X8X36bhHgIhWEnHAzXDInFr+Fvo9IQhhuu6pXLT8mF7HzFyx/X+auZUITvPaZhM39Phj3vK12MbhwA==} + engines: {node: ^18.19.0 || >=20.6.0} + peerDependencies: + '@opentelemetry/api': '>=1.0.0 <1.10.0' + + '@opentelemetry/redis-common@0.38.2': + resolution: {integrity: sha512-1BCcU93iwSRZvDAgwUxC/DV4T/406SkMfxGqu5ojc3AvNI+I9GhV7v0J1HljsczuuhcnFLYqD5VmwVXfCGHzxA==} + engines: {node: ^18.19.0 || >=20.6.0} + + '@opentelemetry/resource-detector-alibaba-cloud@0.33.3': + resolution: {integrity: sha512-Ep3LDWALU+wCgGzAa1rgFXh3TObahN7HaQZntAeVQnnNhZ3VSXnBniRGeSCTIRvRr7YdZvq+G+rstixtAN5Ugw==} + engines: {node: ^18.19.0 || >=20.6.0} + peerDependencies: + '@opentelemetry/api': ^1.0.0 + + '@opentelemetry/resource-detector-aws@2.13.0': + resolution: {integrity: sha512-ZPCn7gZhGqUYUoD+RCHIlayoHBMaJaEjfqlgz2EPKoXJ4y7Ru7CUm+Tm3yJVMKF92cN9xUQR0j5KALyF0fg9aw==} + engines: {node: ^18.19.0 || >=20.6.0} + peerDependencies: + '@opentelemetry/api': ^1.0.0 + + '@opentelemetry/resource-detector-azure@0.21.0': + resolution: {integrity: sha512-gAjK+lKeywMcRk9X/DjJsK9aPrQo+tM9vcp6AKpAAHRN5hNwzO/vAaW/Ezdodu76BK4ELo/O77y/b9qP+uU7vg==} + engines: {node: ^18.19.0 || >=20.6.0} + peerDependencies: + '@opentelemetry/api': ^1.0.0 + + '@opentelemetry/resource-detector-container@0.8.4': + resolution: {integrity: sha512-kIvGHkMSacp+kb7btTuXbOAIWLyOCO+P/h/8xxaeLcp5ptmHRZ67uEdLAQo61ApdayFB/uqjJ9gY4x2/i/KsoA==} + engines: {node: ^18.19.0 || >=20.6.0} + peerDependencies: + '@opentelemetry/api': ^1.0.0 + + '@opentelemetry/resource-detector-gcp@0.48.0': + resolution: {integrity: sha512-kT/iG9zjlbWYaj22ixQ+vso0fXKCSKLH0loTb0Xfq+nQpu19MBTAa63IdITGCfqjcffh8/aB4hdyExypwAC16A==} + engines: {node: ^18.19.0 || >=20.6.0} + peerDependencies: + '@opentelemetry/api': ^1.0.0 + + '@opentelemetry/resources@2.6.0': + resolution: {integrity: sha512-D4y/+OGe3JSuYUCBxtH5T9DSAWNcvCb/nQWIga8HNtXTVPQn59j0nTBAgaAXxUVBDl40mG3Tc76b46wPlZaiJQ==} + engines: {node: ^18.19.0 || >=20.6.0} + peerDependencies: + '@opentelemetry/api': '>=1.3.0 <1.10.0' + + '@opentelemetry/sdk-logs@0.213.0': + resolution: {integrity: sha512-00xlU3GZXo3kXKve4DLdrAL0NAFUaZ9appU/mn00S/5kSUdAvyYsORaDUfR04Mp2CLagAOhrzfUvYozY/EZX2g==} + engines: {node: ^18.19.0 || >=20.6.0} + peerDependencies: + '@opentelemetry/api': '>=1.4.0 <1.10.0' + + '@opentelemetry/sdk-metrics@2.6.0': + resolution: {integrity: sha512-CicxWZxX6z35HR83jl+PLgtFgUrKRQ9LCXyxgenMnz5A1lgYWfAog7VtdOvGkJYyQgMNPhXQwkYrDLujk7z1Iw==} + engines: {node: ^18.19.0 || >=20.6.0} + peerDependencies: + '@opentelemetry/api': '>=1.9.0 <1.10.0' + + '@opentelemetry/sdk-node@0.213.0': + resolution: {integrity: sha512-8s7SQtY8DIAjraXFrUf0+I90SBAUQbsMWMtUGKmusswRHWXtKJx42aJQMoxEtC82Csqj+IlBH6FoP8XmmUDSrQ==} + engines: {node: ^18.19.0 || >=20.6.0} + peerDependencies: + '@opentelemetry/api': '>=1.3.0 <1.10.0' + + '@opentelemetry/sdk-trace-base@2.6.0': + resolution: {integrity: sha512-g/OZVkqlxllgFM7qMKqbPV9c1DUPhQ7d4n3pgZFcrnrNft9eJXZM2TNHTPYREJBrtNdRytYyvwjgL5geDKl3EQ==} + engines: {node: ^18.19.0 || >=20.6.0} + peerDependencies: + '@opentelemetry/api': '>=1.3.0 <1.10.0' + + '@opentelemetry/sdk-trace-node@2.6.0': + resolution: {integrity: sha512-YhswtasmsbIGEFvLGvR9p/y3PVRTfFf+mgY8van4Ygpnv4sA3vooAjvh+qAn9PNWxs4/IwGGqiQS0PPsaRJ0vQ==} engines: {node: ^18.19.0 || >=20.6.0} peerDependencies: '@opentelemetry/api': '>=1.0.0 <1.10.0' - '@opentelemetry/semantic-conventions@1.39.0': - resolution: {integrity: sha512-R5R9tb2AXs2IRLNKLBJDynhkfmx7mX0vi8NkhZb3gUkPWHn6HXk5J8iQ/dql0U3ApfWym4kXXmBDRGO+oeOfjg==} + '@opentelemetry/semantic-conventions@1.40.0': + resolution: {integrity: sha512-cifvXDhcqMwwTlTK04GBNeIe7yyo28Mfby85QXFe1Yk8nmi36Ab/5UQwptOx84SsoGNRg+EVSjwzfSZMy6pmlw==} engines: {node: '>=14'} + '@opentelemetry/sql-common@0.41.2': + resolution: {integrity: sha512-4mhWm3Z8z+i508zQJ7r6Xi7y4mmoJpdvH0fZPFRkWrdp5fq7hhZ2HhYokEOLkfqSMgPR4Z9EyB3DBkbKGOqZiQ==} + engines: {node: ^18.19.0 || >=20.6.0} + peerDependencies: + '@opentelemetry/api': ^1.1.0 + '@panva/hkdf@1.2.1': resolution: {integrity: sha512-6oclG6Y3PiDFcoyk8srjLfVKyMfVCKJ27JwNPViuXziFpmdz+MZnZN/aKY0JGXgYuO/VghU0jcOAZgWXZ1Dmrw==} @@ -1800,6 +2319,36 @@ packages: resolution: {integrity: sha512-QNqXyfVS2wm9hweSYD2O7F0G06uurj9kZ96TRQE5Y9hU7+tgdZwIkbAKc5Ocy1HxEY2kuDQa6cQ1WRs/O5LFKA==} engines: {node: ^12.20.0 || ^14.18.0 || >=16.0.0} + '@protobufjs/aspromise@1.1.2': + resolution: {integrity: sha512-j+gKExEuLmKwvz3OgROXtrJ2UG2x8Ch2YZUxahh+s1F2HZ+wAceUNLkvy6zKCPVRkU++ZWQrdxsUeQXmcg4uoQ==} + + '@protobufjs/base64@1.1.2': + resolution: {integrity: sha512-AZkcAA5vnN/v4PDqKyMR5lx7hZttPDgClv83E//FMNhR2TMcLUhfRUBHCmSl0oi9zMgDDqRUJkSxO3wm85+XLg==} + + '@protobufjs/codegen@2.0.4': + resolution: {integrity: sha512-YyFaikqM5sH0ziFZCN3xDC7zeGaB/d0IUb9CATugHWbd1FRFwWwt4ld4OYMPWu5a3Xe01mGAULCdqhMlPl29Jg==} + + '@protobufjs/eventemitter@1.1.0': + resolution: {integrity: sha512-j9ednRT81vYJ9OfVuXG6ERSTdEL1xVsNgqpkxMsbIabzSo3goCjDIveeGv5d03om39ML71RdmrGNjG5SReBP/Q==} + + '@protobufjs/fetch@1.1.0': + resolution: {integrity: sha512-lljVXpqXebpsijW71PZaCYeIcE5on1w5DlQy5WH6GLbFryLUrBD4932W/E2BSpfRJWseIL4v/KPgBFxDOIdKpQ==} + + '@protobufjs/float@1.0.2': + resolution: {integrity: sha512-Ddb+kVXlXst9d+R9PfTIxh1EdNkgoRe5tOX6t01f1lYWOvJnSPDBlG241QLzcyPdoNTsblLUdujGSE4RzrTZGQ==} + + '@protobufjs/inquire@1.1.0': + resolution: {integrity: sha512-kdSefcPdruJiFMVSbn801t4vFK7KB/5gd2fYvrxhuJYg8ILrmn9SKSX2tZdV6V+ksulWqS7aXjBcRXl3wHoD9Q==} + + '@protobufjs/path@1.1.2': + resolution: {integrity: sha512-6JOcJ5Tm08dOHAbdR3GrvP+yUUfkjG5ePsHYczMFLq3ZmMkAD98cDgcT2iA1lJ9NVwFd4tH/iSSoe44YWkltEA==} + + '@protobufjs/pool@1.1.0': + resolution: {integrity: sha512-0kELaGSIDBKvcgS4zkjz1PeddatrjYcmMWOlAuAPwAeccUrPHdUqo/J6LiymHHEiJT5NrF1UVwxY14f+fy4WQw==} + + '@protobufjs/utf8@1.1.0': + resolution: {integrity: sha512-Vvn3zZrhQZkkBE8LSuW3em98c0FwgO4nxzv6OdSxPKJIEKY2bGbHn+mhGIPerzI4twdxaP8/0+06HBpwf345Lw==} + '@radix-ui/number@1.1.1': resolution: {integrity: sha512-MkKCwxlXTgz6CFoJx3pCwn07GKp36+aZyu/u2Ln2VrA5DcdyCZkASEDBTd8x5whTQQL5CiYf4prXKLcgQdv29g==} @@ -3047,9 +3596,15 @@ packages: '@types/amqplib@0.10.8': resolution: {integrity: sha512-vtDp8Pk1wsE/AuQ8/Rgtm6KUZYqcnTgNvEHwzCkX8rL7AGsC6zqAfKAAJhUZXFhM/Pp++tbnUHiam/8vVpPztA==} + '@types/aws-lambda@8.10.161': + resolution: {integrity: sha512-rUYdp+MQwSFocxIOcSsYSF3YYYC/uUpMbCY/mbO21vGqfrEYvNSoPyKYDj6RhXXpPfS0KstW9RwG3qXh9sL7FQ==} + '@types/body-parser@1.19.6': resolution: {integrity: sha512-HLFeCYgz89uk22N5Qg3dvGvsv46B8GLvKKo1zKG4NybA8U2DiEO3w9lqGg29t/tfLRJpJ6iQxnVw4OnB7MoM9g==} + '@types/bunyan@1.8.11': + resolution: {integrity: sha512-758fRH7umIMk5qt5ELmRMff4mLDlN+xyYzC+dkPTdKwbSkJFvz6xwyScrytPU0QIBbRRwbiE8/BIg8bpajerNQ==} + '@types/command-line-args@5.2.3': resolution: {integrity: sha512-uv0aG6R0Y8WHZLTamZwtfsDLVRnOa+n+n5rEvFWL5Na5gZ8V2Teab/duDPFzIIIhs9qizDpcavCusCLJZu62Kw==} @@ -3121,12 +3676,18 @@ packages: '@types/jsonwebtoken@9.0.10': resolution: {integrity: sha512-asx5hIG9Qmf/1oStypjanR7iKTv0gXQ1Ov/jfrX6kS/EO0OFni8orbmGCn0672NHR3kXHwpAwR+B368ZGN/2rA==} + '@types/memcached@2.2.10': + resolution: {integrity: sha512-AM9smvZN55Gzs2wRrqeMHVP7KE8KWgCJO/XL5yCly2xF6EKa4YlbpK+cLSAH4NG/Ah64HrlegmGqW8kYws7Vxg==} + '@types/morgan@1.9.10': resolution: {integrity: sha512-sS4A1zheMvsADRVfT0lYbJ4S9lmsey8Zo2F7cnbYjWHP67Q0AwMYuuzLlkIM2N8gAbb9cubhIVFwcIN2XyYCkA==} '@types/ms@2.1.0': resolution: {integrity: sha512-GsCCIZDE/p3i96vtEqx+7dBUGXrc7zeSK3wwPHIaRThS+9OhWIXRqzs4d6k1SVU8g91DrNRWxWUGhp5KXQb2VA==} + '@types/mysql@2.15.27': + resolution: {integrity: sha512-YfWiV16IY0OeBfBCk8+hXKmdTKrKlwKN1MNKAPBu5JYxLwBEZl7QzeEpGnlZb3VMGJrrGmB84gXiH+ofs/TezA==} + '@types/node@20.19.27': resolution: {integrity: sha512-N2clP5pJhB2YnZJ3PIHFk5RkygRX5WO/5f0WC08tp0wd+sv0rsJk3MqWn3CbNmT2J505a5336jaQj4ph1AdMug==} @@ -3145,6 +3706,9 @@ packages: '@types/oauth@0.9.6': resolution: {integrity: sha512-H9TRCVKBNOhZZmyHLqFt9drPM9l+ShWiqqJijU1B8P3DX3ub84NjxDuy+Hjrz+fEca5Kwip3qPMKNyiLgNJtIA==} + '@types/oracledb@6.5.2': + resolution: {integrity: sha512-kK1eBS/Adeyis+3OlBDMeQQuasIDLUYXsi2T15ccNJ0iyUpQ4xDF7svFu3+bGVrI0CMBUclPciz+lsQR3JX3TQ==} + '@types/passport-google-oauth20@2.0.17': resolution: {integrity: sha512-MHNOd2l7gOTCn3iS+wInPQMiukliAUvMpODO3VlXxOiwNEMSyzV7UNvAdqxSN872o8OXx1SqPDVT6tLW74AtqQ==} @@ -3154,6 +3718,12 @@ packages: '@types/passport@1.0.17': resolution: {integrity: sha512-aciLyx+wDwT2t2/kJGJR2AEeBz0nJU4WuRX04Wu9Dqc5lSUtwu0WERPHYsLhF9PtseiAMPBGNUOtFjxZ56prsg==} + '@types/pg-pool@2.0.7': + resolution: {integrity: sha512-U4CwmGVQcbEuqpyju8/ptOKg6gEC+Tqsvj2xS9o1g71bUh8twxnC6ZL5rZKCsGN0iyH0CwgUyc9VR5owNQF9Ng==} + + '@types/pg@8.15.6': + resolution: {integrity: sha512-NoaMtzhxOrubeL/7UZuNTrejB4MPAJ0RpxZqXQf2qXuVlTPuG6Y8p4u9dKRaue4yjmC7ZhzVO2/Yyyn25znrPQ==} + '@types/qs@6.14.0': resolution: {integrity: sha512-eOunJqu0K1923aExK6y8p6fsihYEn/BYuQ4g0CxAAgFc4b/ZLN4CrsRZ55srTdqoiLzU2B2evC+apEIxprEzkQ==} @@ -3183,6 +3753,9 @@ packages: '@types/strip-json-comments@0.0.30': resolution: {integrity: sha512-7NQmHra/JILCd1QqpSzl8+mJRc8ZHz3uDm8YV1Ks9IhK0epEiTw8aIErbvH9PI+6XbqhyIQy3462nEsn7UVzjQ==} + '@types/tedious@4.0.14': + resolution: {integrity: sha512-KHPsfX/FoVbUGbyYvk1q9MMQHLPeRZhRJZdO45Q4YjvFkv4hMNghCWTvy7rdKessBsmtz4euWCWAB6/tVpI1Iw==} + '@types/triple-beam@1.3.5': resolution: {integrity: sha512-6WaYesThRMCl19iryMYP7/x2OVgCtbIVflDGFpWnb9irXI3UjYE4AzmYuiUKY1AJstGijoY+MgUszMgRxIYTYw==} @@ -3364,6 +3937,11 @@ packages: resolution: {integrity: sha512-5cvg6CtKwfgdmVqY1WIiXKc3Q1bkRqGLi+2W/6ao+6Y7gu/RCwRuAhGEzh5B4KlszSuTLgZYuqFqo5bImjNKng==} engines: {node: '>= 0.6'} + acorn-import-attributes@1.9.5: + resolution: {integrity: sha512-n02Vykv5uA3eHGM/Z2dQrcD56kL8TyDb2p1+0P83PClMnC/nc+anbQRhIOWnSq4Ke/KvDPrY3C9hDtC/A3eHnQ==} + peerDependencies: + acorn: ^8 + acorn-jsx@5.3.2: resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==} peerDependencies: @@ -3540,6 +4118,9 @@ packages: resolution: {integrity: sha512-GlF5wPWnSa/X5LKM1o0wz0suXIINz1iHRLvTS+sLyi7XPbe5ycmYI3DlZqVGZZtDgl4DmasFg7gOB3JYbphV5g==} hasBin: true + bignumber.js@9.3.1: + resolution: {integrity: sha512-Ko0uX15oIUS7wJ3Rb30Fs6SkVbLmPBAKdlm7q9+ak9bbIeFf0MwuBsQV6z7+X768/cHsfg+WlysDWJcmthjsjQ==} + binary-extensions@2.3.0: resolution: {integrity: sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==} engines: {node: '>=8'} @@ -3626,6 +4207,9 @@ packages: resolution: {integrity: sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==} engines: {node: '>= 8.10.0'} + cjs-module-lexer@2.2.0: + resolution: {integrity: sha512-4bHTS2YuzUvtoLjdy+98ykbNB5jS0+07EvFNXerqZQJ89F7DI6ET7OQo/HJuW6K0aVsKA9hj9/RVb2kQVOrPDQ==} + class-variance-authority@0.7.1: resolution: {integrity: sha512-Ka+9Trutv7G8M6WT6SeiRWz792K5qEqIGEGzXKhAE6xOWAY6pPH8U+9IY3oCMv6kqTmLsv7Xh/2w2RigkePMsg==} @@ -4279,6 +4863,9 @@ packages: resolution: {integrity: sha512-hIS4idWWai69NezIdRt2xFVofaF4j+6INOpJlVOLDO8zXGpUVEVzIYk12UUi2JzjEzWL3IOAxcTubgz9Po0yXw==} engines: {node: '>= 18'} + extend@3.0.2: + resolution: {integrity: sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==} + fast-deep-equal@3.1.3: resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} @@ -4408,6 +4995,9 @@ packages: resolution: {integrity: sha512-buewHzMvYL29jdeQTVILecSaZKnt/RJWjoZCF5OW60Z67/GmSLBkOFM7qh1PI3zFNtJbaZL5eQu1vLfazOwj4g==} engines: {node: '>=12.20.0'} + forwarded-parse@2.1.2: + resolution: {integrity: sha512-alTFZZQDKMporBH77856pXgzhEzaUVmLCDk+egLgIgHst3Tpndzz8MnKe+GzRJRfvVdn69HhpW7cmXzvtLvJAw==} + forwarded@0.2.0: resolution: {integrity: sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==} engines: {node: '>= 0.6'} @@ -4444,6 +5034,14 @@ packages: fzf@0.5.2: resolution: {integrity: sha512-Tt4kuxLXFKHy8KT40zwsUPUkg1CrsgY25FxA2U/j/0WgEDCk3ddc/zLTCCcbSHX9FcKtLuVaDGtGE/STWC+j3Q==} + gaxios@7.1.4: + resolution: {integrity: sha512-bTIgTsM2bWn3XklZISBTQX7ZSddGW+IO3bMdGaemHZ3tbqExMENHLx6kKZ/KlejgrMtj8q7wBItt51yegqalrA==} + engines: {node: '>=18'} + + gcp-metadata@8.1.2: + resolution: {integrity: sha512-zV/5HKTfCeKWnxG0Dmrw51hEWFGfcF2xiXqcA3+J90WDuP0SvoiSO5ORvcBsifmx/FoIjgQN3oNOGaQ5PhLFkg==} + engines: {node: '>=18'} + generator-function@2.0.1: resolution: {integrity: sha512-SFdFmIJi+ybC0vjlHN0ZGVGHc3lgE0DxPAT0djjVg+kjOnSqclqmj0KQ7ykTOLP6YxoqOvuAODGdcHJn+43q3g==} engines: {node: '>= 0.4'} @@ -4528,6 +5126,10 @@ packages: resolution: {integrity: sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ==} engines: {node: '>= 0.4'} + google-logging-utils@1.1.3: + resolution: {integrity: sha512-eAmLkjDjAFCVXg7A1unxHsLf961m6y17QFqXqAXGj/gVkKFrEICfStRfwUlGNfeCEjNRa32JEWOUTlYXPyyKvA==} + engines: {node: '>=14'} + gopd@1.2.0: resolution: {integrity: sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==} engines: {node: '>= 0.4'} @@ -4641,6 +5243,10 @@ packages: resolution: {integrity: sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==} engines: {node: '>=6'} + import-in-the-middle@3.0.0: + resolution: {integrity: sha512-OnGy+eYT7wVejH2XWgLRgbmzujhhVIATQH0ztIeRilwHBjTeG3pD+XnH3PKX0r9gJ0BuJmJ68q/oh9qgXnNDQg==} + engines: {node: '>=18'} + import-meta-resolve@4.2.0: resolution: {integrity: sha512-Iqv2fzaTQN28s/FwZAoFq0ZSs/7hMAHJVX+w8PZl3cY19Pxk6jFFalxQoIfW2826i/fDLXv8IiEZRIT0lDuWcg==} @@ -4913,6 +5519,9 @@ packages: engines: {node: '>=6'} hasBin: true + json-bigint@1.0.0: + resolution: {integrity: sha512-SiPv/8VpZuWbvLSMtTDU8hEfrZWg/mH/nV/b4o0CYbSxu1UIQPLdwKOCIyLQX+VIPO5vrLX3i8qtqFyhdPSUSQ==} + json-bignum@0.0.3: resolution: {integrity: sha512-2WHyXj3OfHSgNyuzDbSxI1w2jgw5gkWSWhS7Qg4bWXx1nLk3jnbwfUeS0PSba3IzpTUWdHxBieELUzXRjQB2zg==} engines: {node: '>=0.8'} @@ -5164,6 +5773,9 @@ packages: resolution: {integrity: sha512-TFYA4jnP7PVbmlBIfhlSe+WKxs9dklXMTEGcBCIvLhE/Tn3H6Gk1norupVW7m5Cnd4bLcr08AytbyV/xj7f/kQ==} engines: {node: '>= 12.0.0'} + long@5.3.2: + resolution: {integrity: sha512-mNAgZ1GmyNhD7AuqnTG3/VQ26o760+ZYBPKjPvugO8+nLbYfX6TVpJPseBvopbdY+qpZ/lKUnmEc1LeZYS3QAA==} + loose-envify@1.4.0: resolution: {integrity: sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==} hasBin: true @@ -5262,6 +5874,9 @@ packages: mnemonist@0.38.3: resolution: {integrity: sha512-2K9QYubXx/NAjv4VLq1d1Ly8pWNC5L3BrixtdkyTegXWJIqY+zLNDhhX/A+ZwWt70tB1S8H4BE8FLYEFyNoOBw==} + module-details-from-path@1.0.4: + resolution: {integrity: sha512-EGWKgxALGMgzvxYF1UyGTy0HXX/2vHLkw6+NvDKW2jypWbHpjQuj4UMcqQWXHERJhVGKikolT06G3bcKe4fi7w==} + mongodb-connection-string-url@7.0.0: resolution: {integrity: sha512-irhhjRVLE20hbkRl4zpAYLnDMM+zIZnp0IDB9akAFFUZp/3XdOfwwddc7y6cNvF2WCEtfTYRwYbIfYa2kVY0og==} engines: {node: '>=20.19.0'} @@ -5618,6 +6233,17 @@ packages: pause@0.0.1: resolution: {integrity: sha512-KG8UEiEVkR3wGEb4m5yZkVCzigAD+cVEJck2CzYZO37ZGJfctvVptVO192MwrtPhzONn6go8ylnOdMhKqi4nfg==} + pg-int8@1.0.1: + resolution: {integrity: sha512-WCtabS6t3c8SkpDBUlb1kjOs7l66xsGdKpIPZsg4wR+B3+u9UAum2odSsF9tnvxg80h4ZxLWMy4pRjOsFIqQpw==} + engines: {node: '>=4.0.0'} + + pg-protocol@1.13.0: + resolution: {integrity: sha512-zzdvXfS6v89r6v7OcFCHfHlyG/wvry1ALxZo4LqgUoy7W9xhBDMaqOuMiF3qEV45VqsN6rdlcehHrfDtlCPc8w==} + + pg-types@2.2.0: + resolution: {integrity: sha512-qTAAlrEsl8s4OiEQY69wDvcMIdQN6wdz5ojQiOy6YRMuynxenON0O5oCpJI6lshc6scgAY8qvJ2On/p+CXY0GA==} + engines: {node: '>=4'} + picocolors@1.1.1: resolution: {integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==} @@ -5654,6 +6280,22 @@ packages: resolution: {integrity: sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg==} engines: {node: ^10 || ^12 || >=14} + postgres-array@2.0.0: + resolution: {integrity: sha512-VpZrUqU5A69eQyW2c5CA1jtLecCsN2U/bD6VilrFDWq5+5UIEVO7nazS3TEcHf1zuPYO/sqGvUvW62g86RXZuA==} + engines: {node: '>=4'} + + postgres-bytea@1.0.1: + resolution: {integrity: sha512-5+5HqXnsZPE65IJZSMkZtURARZelel2oXUEO8rH83VS/hxH5vv1uHquPg5wZs8yMAfdv971IU+kcPUczi7NVBQ==} + engines: {node: '>=0.10.0'} + + postgres-date@1.0.7: + resolution: {integrity: sha512-suDmjLVQg78nMK2UZ454hAG+OAW+HQPZ6n++TNDUX+L0+uUlLywnoxJKDou51Zm+zTCjrCl0Nq6J9C5hP9vK/Q==} + engines: {node: '>=0.10.0'} + + postgres-interval@1.2.0: + resolution: {integrity: sha512-9ZhXKM/rw350N1ovuWHbGxnGh/SNJ4cnxHiM0rxE4VN41wsg8P8zWn9hv/buK00RP4WvlOyr/RBDiptyxVbkZQ==} + engines: {node: '>=0.10.0'} + powershell-utils@0.1.0: resolution: {integrity: sha512-dM0jVuXJPsDN6DvRpea484tCUaMiXWjuCn++HGTqUWzGDjv5tZkEZldAJ/UMlqRYGFrD/etByo4/xOuC/snX2A==} engines: {node: '>=20'} @@ -5693,6 +6335,10 @@ packages: prop-types@15.8.1: resolution: {integrity: sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==} + protobufjs@7.5.4: + resolution: {integrity: sha512-CvexbZtbov6jW2eXAvLukXjXUW1TzFaivC46BpWc/3BpcCysb5Vffu+B3XHMm8lVEuy2Mm4XGex8hBSg1yapPg==} + engines: {node: '>=12.0.0'} + proxy-addr@2.0.7: resolution: {integrity: sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==} engines: {node: '>= 0.10'} @@ -5864,6 +6510,10 @@ packages: resolution: {integrity: sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==} engines: {node: '>=0.10.0'} + require-in-the-middle@8.0.1: + resolution: {integrity: sha512-QT7FVMXfWOYFbeRBF6nu+I6tr2Tf3u0q8RIEjNob/heKY/nh7drD/k7eeMFmSQgnTtCzLDcCu/XEnpW2wk4xCQ==} + engines: {node: '>=9.3.0 || >=8.10.0 <9.0.0'} + requires-port@1.0.0: resolution: {integrity: sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==} @@ -8346,7 +8996,7 @@ snapshots: '@elastic/transport@8.10.1': dependencies: '@opentelemetry/api': 1.9.0 - '@opentelemetry/core': 2.5.1(@opentelemetry/api@1.9.0) + '@opentelemetry/core': 2.6.0(@opentelemetry/api@1.9.0) debug: 4.4.3(supports-color@5.5.0) hpagent: 1.2.0 ms: 2.1.3 @@ -8359,7 +9009,7 @@ snapshots: '@elastic/transport@9.3.3': dependencies: '@opentelemetry/api': 1.9.0 - '@opentelemetry/core': 2.5.1(@opentelemetry/api@1.9.0) + '@opentelemetry/core': 2.6.0(@opentelemetry/api@1.9.0) debug: 4.4.3(supports-color@5.5.0) hpagent: 1.2.0 ms: 2.1.3 @@ -8547,6 +9197,18 @@ snapshots: '@floating-ui/utils@0.2.10': {} + '@grpc/grpc-js@1.14.3': + dependencies: + '@grpc/proto-loader': 0.8.0 + '@js-sdsl/ordered-map': 4.4.2 + + '@grpc/proto-loader@0.8.0': + dependencies: + lodash.camelcase: 4.3.0 + long: 5.3.2 + protobufjs: 7.5.4 + yargs: 17.7.2 + '@hono/node-server@1.19.9(hono@4.11.9)': dependencies: hono: 4.11.9 @@ -8676,179 +9338,879 @@ snapshots: '@inquirer/ansi@1.0.2': {} - '@inquirer/confirm@5.1.21(@types/node@20.19.27)': + '@inquirer/confirm@5.1.21(@types/node@20.19.27)': + dependencies: + '@inquirer/core': 10.3.2(@types/node@20.19.27) + '@inquirer/type': 3.0.10(@types/node@20.19.27) + optionalDependencies: + '@types/node': 20.19.27 + + '@inquirer/core@10.3.2(@types/node@20.19.27)': + dependencies: + '@inquirer/ansi': 1.0.2 + '@inquirer/figures': 1.0.15 + '@inquirer/type': 3.0.10(@types/node@20.19.27) + cli-width: 4.1.0 + mute-stream: 2.0.0 + signal-exit: 4.1.0 + wrap-ansi: 6.2.0 + yoctocolors-cjs: 2.1.3 + optionalDependencies: + '@types/node': 20.19.27 + + '@inquirer/figures@1.0.15': {} + + '@inquirer/type@3.0.10(@types/node@20.19.27)': + optionalDependencies: + '@types/node': 20.19.27 + + '@ioredis/commands@1.5.0': {} + + '@isaacs/cliui@9.0.0': {} + + '@jridgewell/gen-mapping@0.3.13': + dependencies: + '@jridgewell/sourcemap-codec': 1.5.5 + '@jridgewell/trace-mapping': 0.3.31 + + '@jridgewell/remapping@2.3.5': + dependencies: + '@jridgewell/gen-mapping': 0.3.13 + '@jridgewell/trace-mapping': 0.3.31 + + '@jridgewell/resolve-uri@3.1.2': {} + + '@jridgewell/sourcemap-codec@1.5.5': {} + + '@jridgewell/trace-mapping@0.3.31': + dependencies: + '@jridgewell/resolve-uri': 3.1.2 + '@jridgewell/sourcemap-codec': 1.5.5 + + '@jridgewell/trace-mapping@0.3.9': + dependencies: + '@jridgewell/resolve-uri': 3.1.2 + '@jridgewell/sourcemap-codec': 1.5.5 + + '@js-sdsl/ordered-map@4.4.2': {} + + '@modelcontextprotocol/sdk@1.26.0(zod@3.25.76)': + dependencies: + '@hono/node-server': 1.19.9(hono@4.11.9) + ajv: 8.17.1 + ajv-formats: 3.0.1(ajv@8.17.1) + content-type: 1.0.5 + cors: 2.8.5 + cross-spawn: 7.0.6 + eventsource: 3.0.7 + eventsource-parser: 3.0.6 + express: 5.2.1 + express-rate-limit: 8.2.1(express@5.2.1) + hono: 4.11.9 + jose: 6.1.3 + json-schema-typed: 8.0.2 + pkce-challenge: 5.0.1 + raw-body: 3.0.2 + zod: 3.25.76 + zod-to-json-schema: 3.25.1(zod@3.25.76) + transitivePeerDependencies: + - supports-color + + '@mongodb-js/saslprep@1.4.4': + dependencies: + sparse-bitfield: 3.0.3 + + '@mswjs/interceptors@0.41.3': + dependencies: + '@open-draft/deferred-promise': 2.2.0 + '@open-draft/logger': 0.3.0 + '@open-draft/until': 2.1.0 + is-node-process: 1.2.0 + outvariant: 1.4.3 + strict-event-emitter: 0.5.1 + + '@napi-rs/wasm-runtime@0.2.12': + dependencies: + '@emnapi/core': 1.8.1 + '@emnapi/runtime': 1.8.1 + '@tybys/wasm-util': 0.10.1 + optional: true + + '@next/env@16.0.10': {} + + '@next/eslint-plugin-next@16.0.10': + dependencies: + fast-glob: 3.3.1 + + '@next/eslint-plugin-next@16.1.1': + dependencies: + fast-glob: 3.3.1 + + '@next/swc-darwin-arm64@16.0.10': + optional: true + + '@next/swc-darwin-x64@16.0.10': + optional: true + + '@next/swc-linux-arm64-gnu@16.0.10': + optional: true + + '@next/swc-linux-arm64-musl@16.0.10': + optional: true + + '@next/swc-linux-x64-gnu@16.0.10': + optional: true + + '@next/swc-linux-x64-musl@16.0.10': + optional: true + + '@next/swc-win32-arm64-msvc@16.0.10': + optional: true + + '@next/swc-win32-x64-msvc@16.0.10': + optional: true + + '@noble/ciphers@1.3.0': {} + + '@noble/curves@1.9.7': + dependencies: + '@noble/hashes': 1.8.0 + + '@noble/hashes@1.8.0': {} + + '@nodelib/fs.scandir@2.1.5': + dependencies: + '@nodelib/fs.stat': 2.0.5 + run-parallel: 1.2.0 + + '@nodelib/fs.stat@2.0.5': {} + + '@nodelib/fs.walk@1.2.8': + dependencies: + '@nodelib/fs.scandir': 2.1.5 + fastq: 1.20.1 + + '@nolyfill/is-core-module@1.0.39': {} + + '@open-draft/deferred-promise@2.2.0': {} + + '@open-draft/logger@0.3.0': + dependencies: + is-node-process: 1.2.0 + outvariant: 1.4.3 + + '@open-draft/until@2.1.0': {} + + '@opentelemetry/api-logs@0.213.0': + dependencies: + '@opentelemetry/api': 1.9.0 + + '@opentelemetry/api@1.9.0': {} + + '@opentelemetry/auto-instrumentations-node@0.71.0(@opentelemetry/api@1.9.0)(@opentelemetry/core@2.6.0(@opentelemetry/api@1.9.0))': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/core': 2.6.0(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation': 0.213.0(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation-amqplib': 0.60.0(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation-aws-lambda': 0.65.0(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation-aws-sdk': 0.68.0(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation-bunyan': 0.58.0(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation-cassandra-driver': 0.58.0(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation-connect': 0.56.0(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation-cucumber': 0.29.0(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation-dataloader': 0.30.0(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation-dns': 0.56.0(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation-express': 0.61.0(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation-fastify': 0.57.0(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation-fs': 0.32.0(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation-generic-pool': 0.56.0(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation-graphql': 0.61.0(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation-grpc': 0.213.0(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation-hapi': 0.59.0(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation-http': 0.213.0(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation-ioredis': 0.61.0(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation-kafkajs': 0.22.0(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation-knex': 0.57.0(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation-koa': 0.61.0(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation-lru-memoizer': 0.57.0(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation-memcached': 0.56.0(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation-mongodb': 0.66.0(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation-mongoose': 0.59.0(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation-mysql': 0.59.0(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation-mysql2': 0.59.0(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation-nestjs-core': 0.59.0(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation-net': 0.57.0(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation-openai': 0.11.0(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation-oracledb': 0.38.0(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation-pg': 0.65.0(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation-pino': 0.59.0(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation-redis': 0.61.0(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation-restify': 0.58.0(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation-router': 0.57.0(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation-runtime-node': 0.26.0(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation-socket.io': 0.60.0(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation-tedious': 0.32.0(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation-undici': 0.23.0(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation-winston': 0.57.0(@opentelemetry/api@1.9.0) + '@opentelemetry/resource-detector-alibaba-cloud': 0.33.3(@opentelemetry/api@1.9.0) + '@opentelemetry/resource-detector-aws': 2.13.0(@opentelemetry/api@1.9.0) + '@opentelemetry/resource-detector-azure': 0.21.0(@opentelemetry/api@1.9.0) + '@opentelemetry/resource-detector-container': 0.8.4(@opentelemetry/api@1.9.0) + '@opentelemetry/resource-detector-gcp': 0.48.0(@opentelemetry/api@1.9.0) + '@opentelemetry/resources': 2.6.0(@opentelemetry/api@1.9.0) + '@opentelemetry/sdk-node': 0.213.0(@opentelemetry/api@1.9.0) + transitivePeerDependencies: + - supports-color + + '@opentelemetry/configuration@0.213.0(@opentelemetry/api@1.9.0)': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/core': 2.6.0(@opentelemetry/api@1.9.0) + yaml: 2.8.2 + + '@opentelemetry/context-async-hooks@2.6.0(@opentelemetry/api@1.9.0)': + dependencies: + '@opentelemetry/api': 1.9.0 + + '@opentelemetry/core@2.6.0(@opentelemetry/api@1.9.0)': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/semantic-conventions': 1.40.0 + + '@opentelemetry/exporter-logs-otlp-grpc@0.213.0(@opentelemetry/api@1.9.0)': + dependencies: + '@grpc/grpc-js': 1.14.3 + '@opentelemetry/api': 1.9.0 + '@opentelemetry/core': 2.6.0(@opentelemetry/api@1.9.0) + '@opentelemetry/otlp-exporter-base': 0.213.0(@opentelemetry/api@1.9.0) + '@opentelemetry/otlp-grpc-exporter-base': 0.213.0(@opentelemetry/api@1.9.0) + '@opentelemetry/otlp-transformer': 0.213.0(@opentelemetry/api@1.9.0) + '@opentelemetry/sdk-logs': 0.213.0(@opentelemetry/api@1.9.0) + + '@opentelemetry/exporter-logs-otlp-http@0.213.0(@opentelemetry/api@1.9.0)': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/api-logs': 0.213.0 + '@opentelemetry/core': 2.6.0(@opentelemetry/api@1.9.0) + '@opentelemetry/otlp-exporter-base': 0.213.0(@opentelemetry/api@1.9.0) + '@opentelemetry/otlp-transformer': 0.213.0(@opentelemetry/api@1.9.0) + '@opentelemetry/sdk-logs': 0.213.0(@opentelemetry/api@1.9.0) + + '@opentelemetry/exporter-logs-otlp-proto@0.213.0(@opentelemetry/api@1.9.0)': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/api-logs': 0.213.0 + '@opentelemetry/core': 2.6.0(@opentelemetry/api@1.9.0) + '@opentelemetry/otlp-exporter-base': 0.213.0(@opentelemetry/api@1.9.0) + '@opentelemetry/otlp-transformer': 0.213.0(@opentelemetry/api@1.9.0) + '@opentelemetry/resources': 2.6.0(@opentelemetry/api@1.9.0) + '@opentelemetry/sdk-logs': 0.213.0(@opentelemetry/api@1.9.0) + '@opentelemetry/sdk-trace-base': 2.6.0(@opentelemetry/api@1.9.0) + + '@opentelemetry/exporter-metrics-otlp-grpc@0.213.0(@opentelemetry/api@1.9.0)': + dependencies: + '@grpc/grpc-js': 1.14.3 + '@opentelemetry/api': 1.9.0 + '@opentelemetry/core': 2.6.0(@opentelemetry/api@1.9.0) + '@opentelemetry/exporter-metrics-otlp-http': 0.213.0(@opentelemetry/api@1.9.0) + '@opentelemetry/otlp-exporter-base': 0.213.0(@opentelemetry/api@1.9.0) + '@opentelemetry/otlp-grpc-exporter-base': 0.213.0(@opentelemetry/api@1.9.0) + '@opentelemetry/otlp-transformer': 0.213.0(@opentelemetry/api@1.9.0) + '@opentelemetry/resources': 2.6.0(@opentelemetry/api@1.9.0) + '@opentelemetry/sdk-metrics': 2.6.0(@opentelemetry/api@1.9.0) + + '@opentelemetry/exporter-metrics-otlp-http@0.213.0(@opentelemetry/api@1.9.0)': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/core': 2.6.0(@opentelemetry/api@1.9.0) + '@opentelemetry/otlp-exporter-base': 0.213.0(@opentelemetry/api@1.9.0) + '@opentelemetry/otlp-transformer': 0.213.0(@opentelemetry/api@1.9.0) + '@opentelemetry/resources': 2.6.0(@opentelemetry/api@1.9.0) + '@opentelemetry/sdk-metrics': 2.6.0(@opentelemetry/api@1.9.0) + + '@opentelemetry/exporter-metrics-otlp-proto@0.213.0(@opentelemetry/api@1.9.0)': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/core': 2.6.0(@opentelemetry/api@1.9.0) + '@opentelemetry/exporter-metrics-otlp-http': 0.213.0(@opentelemetry/api@1.9.0) + '@opentelemetry/otlp-exporter-base': 0.213.0(@opentelemetry/api@1.9.0) + '@opentelemetry/otlp-transformer': 0.213.0(@opentelemetry/api@1.9.0) + '@opentelemetry/resources': 2.6.0(@opentelemetry/api@1.9.0) + '@opentelemetry/sdk-metrics': 2.6.0(@opentelemetry/api@1.9.0) + + '@opentelemetry/exporter-prometheus@0.213.0(@opentelemetry/api@1.9.0)': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/core': 2.6.0(@opentelemetry/api@1.9.0) + '@opentelemetry/resources': 2.6.0(@opentelemetry/api@1.9.0) + '@opentelemetry/sdk-metrics': 2.6.0(@opentelemetry/api@1.9.0) + '@opentelemetry/semantic-conventions': 1.40.0 + + '@opentelemetry/exporter-trace-otlp-grpc@0.213.0(@opentelemetry/api@1.9.0)': + dependencies: + '@grpc/grpc-js': 1.14.3 + '@opentelemetry/api': 1.9.0 + '@opentelemetry/core': 2.6.0(@opentelemetry/api@1.9.0) + '@opentelemetry/otlp-exporter-base': 0.213.0(@opentelemetry/api@1.9.0) + '@opentelemetry/otlp-grpc-exporter-base': 0.213.0(@opentelemetry/api@1.9.0) + '@opentelemetry/otlp-transformer': 0.213.0(@opentelemetry/api@1.9.0) + '@opentelemetry/resources': 2.6.0(@opentelemetry/api@1.9.0) + '@opentelemetry/sdk-trace-base': 2.6.0(@opentelemetry/api@1.9.0) + + '@opentelemetry/exporter-trace-otlp-http@0.213.0(@opentelemetry/api@1.9.0)': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/core': 2.6.0(@opentelemetry/api@1.9.0) + '@opentelemetry/otlp-exporter-base': 0.213.0(@opentelemetry/api@1.9.0) + '@opentelemetry/otlp-transformer': 0.213.0(@opentelemetry/api@1.9.0) + '@opentelemetry/resources': 2.6.0(@opentelemetry/api@1.9.0) + '@opentelemetry/sdk-trace-base': 2.6.0(@opentelemetry/api@1.9.0) + + '@opentelemetry/exporter-trace-otlp-proto@0.213.0(@opentelemetry/api@1.9.0)': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/core': 2.6.0(@opentelemetry/api@1.9.0) + '@opentelemetry/otlp-exporter-base': 0.213.0(@opentelemetry/api@1.9.0) + '@opentelemetry/otlp-transformer': 0.213.0(@opentelemetry/api@1.9.0) + '@opentelemetry/resources': 2.6.0(@opentelemetry/api@1.9.0) + '@opentelemetry/sdk-trace-base': 2.6.0(@opentelemetry/api@1.9.0) + + '@opentelemetry/exporter-zipkin@2.6.0(@opentelemetry/api@1.9.0)': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/core': 2.6.0(@opentelemetry/api@1.9.0) + '@opentelemetry/resources': 2.6.0(@opentelemetry/api@1.9.0) + '@opentelemetry/sdk-trace-base': 2.6.0(@opentelemetry/api@1.9.0) + '@opentelemetry/semantic-conventions': 1.40.0 + + '@opentelemetry/instrumentation-amqplib@0.60.0(@opentelemetry/api@1.9.0)': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/core': 2.6.0(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation': 0.213.0(@opentelemetry/api@1.9.0) + '@opentelemetry/semantic-conventions': 1.40.0 + transitivePeerDependencies: + - supports-color + + '@opentelemetry/instrumentation-aws-lambda@0.65.0(@opentelemetry/api@1.9.0)': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/instrumentation': 0.213.0(@opentelemetry/api@1.9.0) + '@opentelemetry/semantic-conventions': 1.40.0 + '@types/aws-lambda': 8.10.161 + transitivePeerDependencies: + - supports-color + + '@opentelemetry/instrumentation-aws-sdk@0.68.0(@opentelemetry/api@1.9.0)': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/core': 2.6.0(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation': 0.213.0(@opentelemetry/api@1.9.0) + '@opentelemetry/semantic-conventions': 1.40.0 + transitivePeerDependencies: + - supports-color + + '@opentelemetry/instrumentation-bunyan@0.58.0(@opentelemetry/api@1.9.0)': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/api-logs': 0.213.0 + '@opentelemetry/instrumentation': 0.213.0(@opentelemetry/api@1.9.0) + '@types/bunyan': 1.8.11 + transitivePeerDependencies: + - supports-color + + '@opentelemetry/instrumentation-cassandra-driver@0.58.0(@opentelemetry/api@1.9.0)': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/instrumentation': 0.213.0(@opentelemetry/api@1.9.0) + '@opentelemetry/semantic-conventions': 1.40.0 + transitivePeerDependencies: + - supports-color + + '@opentelemetry/instrumentation-connect@0.56.0(@opentelemetry/api@1.9.0)': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/core': 2.6.0(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation': 0.213.0(@opentelemetry/api@1.9.0) + '@opentelemetry/semantic-conventions': 1.40.0 + '@types/connect': 3.4.38 + transitivePeerDependencies: + - supports-color + + '@opentelemetry/instrumentation-cucumber@0.29.0(@opentelemetry/api@1.9.0)': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/instrumentation': 0.213.0(@opentelemetry/api@1.9.0) + '@opentelemetry/semantic-conventions': 1.40.0 + transitivePeerDependencies: + - supports-color + + '@opentelemetry/instrumentation-dataloader@0.30.0(@opentelemetry/api@1.9.0)': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/instrumentation': 0.213.0(@opentelemetry/api@1.9.0) + transitivePeerDependencies: + - supports-color + + '@opentelemetry/instrumentation-dns@0.56.0(@opentelemetry/api@1.9.0)': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/instrumentation': 0.213.0(@opentelemetry/api@1.9.0) + transitivePeerDependencies: + - supports-color + + '@opentelemetry/instrumentation-express@0.61.0(@opentelemetry/api@1.9.0)': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/core': 2.6.0(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation': 0.213.0(@opentelemetry/api@1.9.0) + '@opentelemetry/semantic-conventions': 1.40.0 + transitivePeerDependencies: + - supports-color + + '@opentelemetry/instrumentation-fastify@0.57.0(@opentelemetry/api@1.9.0)': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/core': 2.6.0(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation': 0.213.0(@opentelemetry/api@1.9.0) + '@opentelemetry/semantic-conventions': 1.40.0 + transitivePeerDependencies: + - supports-color + + '@opentelemetry/instrumentation-fs@0.32.0(@opentelemetry/api@1.9.0)': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/core': 2.6.0(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation': 0.213.0(@opentelemetry/api@1.9.0) + transitivePeerDependencies: + - supports-color + + '@opentelemetry/instrumentation-generic-pool@0.56.0(@opentelemetry/api@1.9.0)': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/instrumentation': 0.213.0(@opentelemetry/api@1.9.0) + transitivePeerDependencies: + - supports-color + + '@opentelemetry/instrumentation-graphql@0.61.0(@opentelemetry/api@1.9.0)': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/instrumentation': 0.213.0(@opentelemetry/api@1.9.0) + transitivePeerDependencies: + - supports-color + + '@opentelemetry/instrumentation-grpc@0.213.0(@opentelemetry/api@1.9.0)': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/instrumentation': 0.213.0(@opentelemetry/api@1.9.0) + '@opentelemetry/semantic-conventions': 1.40.0 + transitivePeerDependencies: + - supports-color + + '@opentelemetry/instrumentation-hapi@0.59.0(@opentelemetry/api@1.9.0)': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/core': 2.6.0(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation': 0.213.0(@opentelemetry/api@1.9.0) + '@opentelemetry/semantic-conventions': 1.40.0 + transitivePeerDependencies: + - supports-color + + '@opentelemetry/instrumentation-http@0.213.0(@opentelemetry/api@1.9.0)': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/core': 2.6.0(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation': 0.213.0(@opentelemetry/api@1.9.0) + '@opentelemetry/semantic-conventions': 1.40.0 + forwarded-parse: 2.1.2 + transitivePeerDependencies: + - supports-color + + '@opentelemetry/instrumentation-ioredis@0.61.0(@opentelemetry/api@1.9.0)': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/instrumentation': 0.213.0(@opentelemetry/api@1.9.0) + '@opentelemetry/redis-common': 0.38.2 + '@opentelemetry/semantic-conventions': 1.40.0 + transitivePeerDependencies: + - supports-color + + '@opentelemetry/instrumentation-kafkajs@0.22.0(@opentelemetry/api@1.9.0)': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/instrumentation': 0.213.0(@opentelemetry/api@1.9.0) + '@opentelemetry/semantic-conventions': 1.40.0 + transitivePeerDependencies: + - supports-color + + '@opentelemetry/instrumentation-knex@0.57.0(@opentelemetry/api@1.9.0)': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/instrumentation': 0.213.0(@opentelemetry/api@1.9.0) + '@opentelemetry/semantic-conventions': 1.40.0 + transitivePeerDependencies: + - supports-color + + '@opentelemetry/instrumentation-koa@0.61.0(@opentelemetry/api@1.9.0)': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/core': 2.6.0(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation': 0.213.0(@opentelemetry/api@1.9.0) + '@opentelemetry/semantic-conventions': 1.40.0 + transitivePeerDependencies: + - supports-color + + '@opentelemetry/instrumentation-lru-memoizer@0.57.0(@opentelemetry/api@1.9.0)': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/instrumentation': 0.213.0(@opentelemetry/api@1.9.0) + transitivePeerDependencies: + - supports-color + + '@opentelemetry/instrumentation-memcached@0.56.0(@opentelemetry/api@1.9.0)': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/instrumentation': 0.213.0(@opentelemetry/api@1.9.0) + '@opentelemetry/semantic-conventions': 1.40.0 + '@types/memcached': 2.2.10 + transitivePeerDependencies: + - supports-color + + '@opentelemetry/instrumentation-mongodb@0.66.0(@opentelemetry/api@1.9.0)': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/instrumentation': 0.213.0(@opentelemetry/api@1.9.0) + '@opentelemetry/semantic-conventions': 1.40.0 + transitivePeerDependencies: + - supports-color + + '@opentelemetry/instrumentation-mongoose@0.59.0(@opentelemetry/api@1.9.0)': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/core': 2.6.0(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation': 0.213.0(@opentelemetry/api@1.9.0) + '@opentelemetry/semantic-conventions': 1.40.0 + transitivePeerDependencies: + - supports-color + + '@opentelemetry/instrumentation-mysql2@0.59.0(@opentelemetry/api@1.9.0)': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/instrumentation': 0.213.0(@opentelemetry/api@1.9.0) + '@opentelemetry/semantic-conventions': 1.40.0 + '@opentelemetry/sql-common': 0.41.2(@opentelemetry/api@1.9.0) + transitivePeerDependencies: + - supports-color + + '@opentelemetry/instrumentation-mysql@0.59.0(@opentelemetry/api@1.9.0)': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/instrumentation': 0.213.0(@opentelemetry/api@1.9.0) + '@opentelemetry/semantic-conventions': 1.40.0 + '@types/mysql': 2.15.27 + transitivePeerDependencies: + - supports-color + + '@opentelemetry/instrumentation-nestjs-core@0.59.0(@opentelemetry/api@1.9.0)': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/instrumentation': 0.213.0(@opentelemetry/api@1.9.0) + '@opentelemetry/semantic-conventions': 1.40.0 + transitivePeerDependencies: + - supports-color + + '@opentelemetry/instrumentation-net@0.57.0(@opentelemetry/api@1.9.0)': dependencies: - '@inquirer/core': 10.3.2(@types/node@20.19.27) - '@inquirer/type': 3.0.10(@types/node@20.19.27) - optionalDependencies: - '@types/node': 20.19.27 + '@opentelemetry/api': 1.9.0 + '@opentelemetry/instrumentation': 0.213.0(@opentelemetry/api@1.9.0) + '@opentelemetry/semantic-conventions': 1.40.0 + transitivePeerDependencies: + - supports-color - '@inquirer/core@10.3.2(@types/node@20.19.27)': + '@opentelemetry/instrumentation-openai@0.11.0(@opentelemetry/api@1.9.0)': dependencies: - '@inquirer/ansi': 1.0.2 - '@inquirer/figures': 1.0.15 - '@inquirer/type': 3.0.10(@types/node@20.19.27) - cli-width: 4.1.0 - mute-stream: 2.0.0 - signal-exit: 4.1.0 - wrap-ansi: 6.2.0 - yoctocolors-cjs: 2.1.3 - optionalDependencies: - '@types/node': 20.19.27 + '@opentelemetry/api': 1.9.0 + '@opentelemetry/api-logs': 0.213.0 + '@opentelemetry/instrumentation': 0.213.0(@opentelemetry/api@1.9.0) + '@opentelemetry/semantic-conventions': 1.40.0 + transitivePeerDependencies: + - supports-color - '@inquirer/figures@1.0.15': {} + '@opentelemetry/instrumentation-oracledb@0.38.0(@opentelemetry/api@1.9.0)': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/instrumentation': 0.213.0(@opentelemetry/api@1.9.0) + '@opentelemetry/semantic-conventions': 1.40.0 + '@types/oracledb': 6.5.2 + transitivePeerDependencies: + - supports-color - '@inquirer/type@3.0.10(@types/node@20.19.27)': - optionalDependencies: - '@types/node': 20.19.27 + '@opentelemetry/instrumentation-pg@0.65.0(@opentelemetry/api@1.9.0)': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/core': 2.6.0(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation': 0.213.0(@opentelemetry/api@1.9.0) + '@opentelemetry/semantic-conventions': 1.40.0 + '@opentelemetry/sql-common': 0.41.2(@opentelemetry/api@1.9.0) + '@types/pg': 8.15.6 + '@types/pg-pool': 2.0.7 + transitivePeerDependencies: + - supports-color - '@ioredis/commands@1.5.0': {} + '@opentelemetry/instrumentation-pino@0.59.0(@opentelemetry/api@1.9.0)': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/api-logs': 0.213.0 + '@opentelemetry/core': 2.6.0(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation': 0.213.0(@opentelemetry/api@1.9.0) + transitivePeerDependencies: + - supports-color - '@isaacs/cliui@9.0.0': {} + '@opentelemetry/instrumentation-redis@0.61.0(@opentelemetry/api@1.9.0)': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/instrumentation': 0.213.0(@opentelemetry/api@1.9.0) + '@opentelemetry/redis-common': 0.38.2 + '@opentelemetry/semantic-conventions': 1.40.0 + transitivePeerDependencies: + - supports-color - '@jridgewell/gen-mapping@0.3.13': + '@opentelemetry/instrumentation-restify@0.58.0(@opentelemetry/api@1.9.0)': dependencies: - '@jridgewell/sourcemap-codec': 1.5.5 - '@jridgewell/trace-mapping': 0.3.31 + '@opentelemetry/api': 1.9.0 + '@opentelemetry/core': 2.6.0(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation': 0.213.0(@opentelemetry/api@1.9.0) + '@opentelemetry/semantic-conventions': 1.40.0 + transitivePeerDependencies: + - supports-color - '@jridgewell/remapping@2.3.5': + '@opentelemetry/instrumentation-router@0.57.0(@opentelemetry/api@1.9.0)': dependencies: - '@jridgewell/gen-mapping': 0.3.13 - '@jridgewell/trace-mapping': 0.3.31 + '@opentelemetry/api': 1.9.0 + '@opentelemetry/instrumentation': 0.213.0(@opentelemetry/api@1.9.0) + '@opentelemetry/semantic-conventions': 1.40.0 + transitivePeerDependencies: + - supports-color - '@jridgewell/resolve-uri@3.1.2': {} + '@opentelemetry/instrumentation-runtime-node@0.26.0(@opentelemetry/api@1.9.0)': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/instrumentation': 0.213.0(@opentelemetry/api@1.9.0) + transitivePeerDependencies: + - supports-color - '@jridgewell/sourcemap-codec@1.5.5': {} + '@opentelemetry/instrumentation-socket.io@0.60.0(@opentelemetry/api@1.9.0)': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/instrumentation': 0.213.0(@opentelemetry/api@1.9.0) + transitivePeerDependencies: + - supports-color - '@jridgewell/trace-mapping@0.3.31': + '@opentelemetry/instrumentation-tedious@0.32.0(@opentelemetry/api@1.9.0)': dependencies: - '@jridgewell/resolve-uri': 3.1.2 - '@jridgewell/sourcemap-codec': 1.5.5 + '@opentelemetry/api': 1.9.0 + '@opentelemetry/instrumentation': 0.213.0(@opentelemetry/api@1.9.0) + '@opentelemetry/semantic-conventions': 1.40.0 + '@types/tedious': 4.0.14 + transitivePeerDependencies: + - supports-color - '@jridgewell/trace-mapping@0.3.9': + '@opentelemetry/instrumentation-undici@0.23.0(@opentelemetry/api@1.9.0)': dependencies: - '@jridgewell/resolve-uri': 3.1.2 - '@jridgewell/sourcemap-codec': 1.5.5 + '@opentelemetry/api': 1.9.0 + '@opentelemetry/core': 2.6.0(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation': 0.213.0(@opentelemetry/api@1.9.0) + '@opentelemetry/semantic-conventions': 1.40.0 + transitivePeerDependencies: + - supports-color - '@modelcontextprotocol/sdk@1.26.0(zod@3.25.76)': + '@opentelemetry/instrumentation-winston@0.57.0(@opentelemetry/api@1.9.0)': dependencies: - '@hono/node-server': 1.19.9(hono@4.11.9) - ajv: 8.17.1 - ajv-formats: 3.0.1(ajv@8.17.1) - content-type: 1.0.5 - cors: 2.8.5 - cross-spawn: 7.0.6 - eventsource: 3.0.7 - eventsource-parser: 3.0.6 - express: 5.2.1 - express-rate-limit: 8.2.1(express@5.2.1) - hono: 4.11.9 - jose: 6.1.3 - json-schema-typed: 8.0.2 - pkce-challenge: 5.0.1 - raw-body: 3.0.2 - zod: 3.25.76 - zod-to-json-schema: 3.25.1(zod@3.25.76) + '@opentelemetry/api': 1.9.0 + '@opentelemetry/api-logs': 0.213.0 + '@opentelemetry/instrumentation': 0.213.0(@opentelemetry/api@1.9.0) transitivePeerDependencies: - supports-color - '@mongodb-js/saslprep@1.4.4': + '@opentelemetry/instrumentation@0.213.0(@opentelemetry/api@1.9.0)': dependencies: - sparse-bitfield: 3.0.3 + '@opentelemetry/api': 1.9.0 + '@opentelemetry/api-logs': 0.213.0 + import-in-the-middle: 3.0.0 + require-in-the-middle: 8.0.1 + transitivePeerDependencies: + - supports-color - '@mswjs/interceptors@0.41.3': + '@opentelemetry/otlp-exporter-base@0.213.0(@opentelemetry/api@1.9.0)': dependencies: - '@open-draft/deferred-promise': 2.2.0 - '@open-draft/logger': 0.3.0 - '@open-draft/until': 2.1.0 - is-node-process: 1.2.0 - outvariant: 1.4.3 - strict-event-emitter: 0.5.1 + '@opentelemetry/api': 1.9.0 + '@opentelemetry/core': 2.6.0(@opentelemetry/api@1.9.0) + '@opentelemetry/otlp-transformer': 0.213.0(@opentelemetry/api@1.9.0) - '@napi-rs/wasm-runtime@0.2.12': + '@opentelemetry/otlp-grpc-exporter-base@0.213.0(@opentelemetry/api@1.9.0)': dependencies: - '@emnapi/core': 1.8.1 - '@emnapi/runtime': 1.8.1 - '@tybys/wasm-util': 0.10.1 - optional: true + '@grpc/grpc-js': 1.14.3 + '@opentelemetry/api': 1.9.0 + '@opentelemetry/core': 2.6.0(@opentelemetry/api@1.9.0) + '@opentelemetry/otlp-exporter-base': 0.213.0(@opentelemetry/api@1.9.0) + '@opentelemetry/otlp-transformer': 0.213.0(@opentelemetry/api@1.9.0) - '@next/env@16.0.10': {} + '@opentelemetry/otlp-transformer@0.213.0(@opentelemetry/api@1.9.0)': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/api-logs': 0.213.0 + '@opentelemetry/core': 2.6.0(@opentelemetry/api@1.9.0) + '@opentelemetry/resources': 2.6.0(@opentelemetry/api@1.9.0) + '@opentelemetry/sdk-logs': 0.213.0(@opentelemetry/api@1.9.0) + '@opentelemetry/sdk-metrics': 2.6.0(@opentelemetry/api@1.9.0) + '@opentelemetry/sdk-trace-base': 2.6.0(@opentelemetry/api@1.9.0) + protobufjs: 7.5.4 - '@next/eslint-plugin-next@16.0.10': + '@opentelemetry/propagator-b3@2.6.0(@opentelemetry/api@1.9.0)': dependencies: - fast-glob: 3.3.1 + '@opentelemetry/api': 1.9.0 + '@opentelemetry/core': 2.6.0(@opentelemetry/api@1.9.0) - '@next/eslint-plugin-next@16.1.1': + '@opentelemetry/propagator-jaeger@2.6.0(@opentelemetry/api@1.9.0)': dependencies: - fast-glob: 3.3.1 + '@opentelemetry/api': 1.9.0 + '@opentelemetry/core': 2.6.0(@opentelemetry/api@1.9.0) - '@next/swc-darwin-arm64@16.0.10': - optional: true + '@opentelemetry/redis-common@0.38.2': {} - '@next/swc-darwin-x64@16.0.10': - optional: true + '@opentelemetry/resource-detector-alibaba-cloud@0.33.3(@opentelemetry/api@1.9.0)': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/core': 2.6.0(@opentelemetry/api@1.9.0) + '@opentelemetry/resources': 2.6.0(@opentelemetry/api@1.9.0) - '@next/swc-linux-arm64-gnu@16.0.10': - optional: true + '@opentelemetry/resource-detector-aws@2.13.0(@opentelemetry/api@1.9.0)': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/core': 2.6.0(@opentelemetry/api@1.9.0) + '@opentelemetry/resources': 2.6.0(@opentelemetry/api@1.9.0) + '@opentelemetry/semantic-conventions': 1.40.0 - '@next/swc-linux-arm64-musl@16.0.10': - optional: true + '@opentelemetry/resource-detector-azure@0.21.0(@opentelemetry/api@1.9.0)': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/core': 2.6.0(@opentelemetry/api@1.9.0) + '@opentelemetry/resources': 2.6.0(@opentelemetry/api@1.9.0) + '@opentelemetry/semantic-conventions': 1.40.0 - '@next/swc-linux-x64-gnu@16.0.10': - optional: true + '@opentelemetry/resource-detector-container@0.8.4(@opentelemetry/api@1.9.0)': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/core': 2.6.0(@opentelemetry/api@1.9.0) + '@opentelemetry/resources': 2.6.0(@opentelemetry/api@1.9.0) - '@next/swc-linux-x64-musl@16.0.10': - optional: true + '@opentelemetry/resource-detector-gcp@0.48.0(@opentelemetry/api@1.9.0)': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/core': 2.6.0(@opentelemetry/api@1.9.0) + '@opentelemetry/resources': 2.6.0(@opentelemetry/api@1.9.0) + gcp-metadata: 8.1.2 + transitivePeerDependencies: + - supports-color - '@next/swc-win32-arm64-msvc@16.0.10': - optional: true + '@opentelemetry/resources@2.6.0(@opentelemetry/api@1.9.0)': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/core': 2.6.0(@opentelemetry/api@1.9.0) + '@opentelemetry/semantic-conventions': 1.40.0 - '@next/swc-win32-x64-msvc@16.0.10': - optional: true + '@opentelemetry/sdk-logs@0.213.0(@opentelemetry/api@1.9.0)': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/api-logs': 0.213.0 + '@opentelemetry/core': 2.6.0(@opentelemetry/api@1.9.0) + '@opentelemetry/resources': 2.6.0(@opentelemetry/api@1.9.0) + '@opentelemetry/semantic-conventions': 1.40.0 - '@noble/ciphers@1.3.0': {} + '@opentelemetry/sdk-metrics@2.6.0(@opentelemetry/api@1.9.0)': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/core': 2.6.0(@opentelemetry/api@1.9.0) + '@opentelemetry/resources': 2.6.0(@opentelemetry/api@1.9.0) - '@noble/curves@1.9.7': + '@opentelemetry/sdk-node@0.213.0(@opentelemetry/api@1.9.0)': dependencies: - '@noble/hashes': 1.8.0 + '@opentelemetry/api': 1.9.0 + '@opentelemetry/api-logs': 0.213.0 + '@opentelemetry/configuration': 0.213.0(@opentelemetry/api@1.9.0) + '@opentelemetry/context-async-hooks': 2.6.0(@opentelemetry/api@1.9.0) + '@opentelemetry/core': 2.6.0(@opentelemetry/api@1.9.0) + '@opentelemetry/exporter-logs-otlp-grpc': 0.213.0(@opentelemetry/api@1.9.0) + '@opentelemetry/exporter-logs-otlp-http': 0.213.0(@opentelemetry/api@1.9.0) + '@opentelemetry/exporter-logs-otlp-proto': 0.213.0(@opentelemetry/api@1.9.0) + '@opentelemetry/exporter-metrics-otlp-grpc': 0.213.0(@opentelemetry/api@1.9.0) + '@opentelemetry/exporter-metrics-otlp-http': 0.213.0(@opentelemetry/api@1.9.0) + '@opentelemetry/exporter-metrics-otlp-proto': 0.213.0(@opentelemetry/api@1.9.0) + '@opentelemetry/exporter-prometheus': 0.213.0(@opentelemetry/api@1.9.0) + '@opentelemetry/exporter-trace-otlp-grpc': 0.213.0(@opentelemetry/api@1.9.0) + '@opentelemetry/exporter-trace-otlp-http': 0.213.0(@opentelemetry/api@1.9.0) + '@opentelemetry/exporter-trace-otlp-proto': 0.213.0(@opentelemetry/api@1.9.0) + '@opentelemetry/exporter-zipkin': 2.6.0(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation': 0.213.0(@opentelemetry/api@1.9.0) + '@opentelemetry/propagator-b3': 2.6.0(@opentelemetry/api@1.9.0) + '@opentelemetry/propagator-jaeger': 2.6.0(@opentelemetry/api@1.9.0) + '@opentelemetry/resources': 2.6.0(@opentelemetry/api@1.9.0) + '@opentelemetry/sdk-logs': 0.213.0(@opentelemetry/api@1.9.0) + '@opentelemetry/sdk-metrics': 2.6.0(@opentelemetry/api@1.9.0) + '@opentelemetry/sdk-trace-base': 2.6.0(@opentelemetry/api@1.9.0) + '@opentelemetry/sdk-trace-node': 2.6.0(@opentelemetry/api@1.9.0) + '@opentelemetry/semantic-conventions': 1.40.0 + transitivePeerDependencies: + - supports-color - '@noble/hashes@1.8.0': {} + '@opentelemetry/sdk-trace-base@2.6.0(@opentelemetry/api@1.9.0)': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/core': 2.6.0(@opentelemetry/api@1.9.0) + '@opentelemetry/resources': 2.6.0(@opentelemetry/api@1.9.0) + '@opentelemetry/semantic-conventions': 1.40.0 - '@nodelib/fs.scandir@2.1.5': + '@opentelemetry/sdk-trace-node@2.6.0(@opentelemetry/api@1.9.0)': dependencies: - '@nodelib/fs.stat': 2.0.5 - run-parallel: 1.2.0 + '@opentelemetry/api': 1.9.0 + '@opentelemetry/context-async-hooks': 2.6.0(@opentelemetry/api@1.9.0) + '@opentelemetry/core': 2.6.0(@opentelemetry/api@1.9.0) + '@opentelemetry/sdk-trace-base': 2.6.0(@opentelemetry/api@1.9.0) - '@nodelib/fs.stat@2.0.5': {} + '@opentelemetry/semantic-conventions@1.40.0': {} - '@nodelib/fs.walk@1.2.8': + '@opentelemetry/sql-common@0.41.2(@opentelemetry/api@1.9.0)': dependencies: - '@nodelib/fs.scandir': 2.1.5 - fastq: 1.20.1 + '@opentelemetry/api': 1.9.0 + '@opentelemetry/core': 2.6.0(@opentelemetry/api@1.9.0) - '@nolyfill/is-core-module@1.0.39': {} + '@panva/hkdf@1.2.1': {} - '@open-draft/deferred-promise@2.2.0': {} + '@pkgr/core@0.2.9': {} - '@open-draft/logger@0.3.0': - dependencies: - is-node-process: 1.2.0 - outvariant: 1.4.3 + '@protobufjs/aspromise@1.1.2': {} - '@open-draft/until@2.1.0': {} + '@protobufjs/base64@1.1.2': {} - '@opentelemetry/api@1.9.0': {} + '@protobufjs/codegen@2.0.4': {} + + '@protobufjs/eventemitter@1.1.0': {} - '@opentelemetry/core@2.5.1(@opentelemetry/api@1.9.0)': + '@protobufjs/fetch@1.1.0': dependencies: - '@opentelemetry/api': 1.9.0 - '@opentelemetry/semantic-conventions': 1.39.0 + '@protobufjs/aspromise': 1.1.2 + '@protobufjs/inquire': 1.1.0 - '@opentelemetry/semantic-conventions@1.39.0': {} + '@protobufjs/float@1.0.2': {} - '@panva/hkdf@1.2.1': {} + '@protobufjs/inquire@1.1.0': {} - '@pkgr/core@0.2.9': {} + '@protobufjs/path@1.1.2': {} + + '@protobufjs/pool@1.1.0': {} + + '@protobufjs/utf8@1.1.0': {} '@radix-ui/number@1.1.1': {} @@ -10336,11 +11698,17 @@ snapshots: dependencies: '@types/node': 25.0.7 + '@types/aws-lambda@8.10.161': {} + '@types/body-parser@1.19.6': dependencies: '@types/connect': 3.4.38 '@types/node': 25.0.7 + '@types/bunyan@1.8.11': + dependencies: + '@types/node': 25.0.7 + '@types/command-line-args@5.2.3': {} '@types/command-line-usage@5.0.4': {} @@ -10415,12 +11783,20 @@ snapshots: '@types/ms': 2.1.0 '@types/node': 25.0.3 + '@types/memcached@2.2.10': + dependencies: + '@types/node': 25.0.7 + '@types/morgan@1.9.10': dependencies: '@types/node': 25.0.3 '@types/ms@2.1.0': {} + '@types/mysql@2.15.27': + dependencies: + '@types/node': 25.0.7 + '@types/node@20.19.27': dependencies: undici-types: 6.21.0 @@ -10448,6 +11824,10 @@ snapshots: dependencies: '@types/node': 25.0.7 + '@types/oracledb@6.5.2': + dependencies: + '@types/node': 25.0.7 + '@types/passport-google-oauth20@2.0.17': dependencies: '@types/express': 5.0.6 @@ -10464,6 +11844,16 @@ snapshots: dependencies: '@types/express': 5.0.6 + '@types/pg-pool@2.0.7': + dependencies: + '@types/pg': 8.15.6 + + '@types/pg@8.15.6': + dependencies: + '@types/node': 25.0.7 + pg-protocol: 1.13.0 + pg-types: 2.2.0 + '@types/qs@6.14.0': {} '@types/range-parser@1.2.7': {} @@ -10491,6 +11881,10 @@ snapshots: '@types/strip-json-comments@0.0.30': {} + '@types/tedious@4.0.14': + dependencies: + '@types/node': 25.0.7 + '@types/triple-beam@1.3.5': {} '@types/uuid@11.0.0': @@ -10718,6 +12112,10 @@ snapshots: mime-types: 3.0.2 negotiator: 1.0.0 + acorn-import-attributes@1.9.5(acorn@8.15.0): + dependencies: + acorn: 8.15.0 + acorn-jsx@5.3.2(acorn@8.15.0): dependencies: acorn: 8.15.0 @@ -10913,6 +12311,8 @@ snapshots: bcryptjs@3.0.3: {} + bignumber.js@9.3.1: {} + binary-extensions@2.3.0: {} body-parser@2.2.1: @@ -11014,6 +12414,8 @@ snapshots: optionalDependencies: fsevents: 2.3.3 + cjs-module-lexer@2.2.0: {} + class-variance-authority@0.7.1: dependencies: clsx: 2.1.1 @@ -11971,6 +13373,8 @@ snapshots: transitivePeerDependencies: - supports-color + extend@3.0.2: {} + fast-deep-equal@3.1.3: {} fast-diff@1.3.0: {} @@ -12099,6 +13503,8 @@ snapshots: dependencies: fetch-blob: 3.2.0 + forwarded-parse@2.1.2: {} + forwarded@0.2.0: {} fresh@2.0.0: {} @@ -12131,6 +13537,22 @@ snapshots: fzf@0.5.2: {} + gaxios@7.1.4: + dependencies: + extend: 3.0.2 + https-proxy-agent: 7.0.6 + node-fetch: 3.3.2 + transitivePeerDependencies: + - supports-color + + gcp-metadata@8.1.2: + dependencies: + gaxios: 7.1.4 + google-logging-utils: 1.1.3 + json-bigint: 1.0.0 + transitivePeerDependencies: + - supports-color + generator-function@2.0.1: {} gensync@1.0.0-beta.2: {} @@ -12218,6 +13640,8 @@ snapshots: define-properties: 1.2.1 gopd: 1.2.0 + google-logging-utils@1.1.3: {} + gopd@1.2.0: {} graceful-fs@4.2.11: {} @@ -12319,6 +13743,13 @@ snapshots: parent-module: 1.0.1 resolve-from: 4.0.0 + import-in-the-middle@3.0.0: + dependencies: + acorn: 8.15.0 + acorn-import-attributes: 1.9.5(acorn@8.15.0) + cjs-module-lexer: 2.2.0 + module-details-from-path: 1.0.4 + import-meta-resolve@4.2.0: {} imurmurhash@0.1.4: {} @@ -12559,6 +13990,10 @@ snapshots: jsesc@3.1.0: {} + json-bigint@1.0.0: + dependencies: + bignumber.js: 9.3.1 + json-bignum@0.0.3: {} json-buffer@3.0.1: {} @@ -12781,6 +14216,8 @@ snapshots: safe-stable-stringify: 2.5.0 triple-beam: 1.4.1 + long@5.3.2: {} + loose-envify@1.4.0: dependencies: js-tokens: 4.0.0 @@ -12858,6 +14295,8 @@ snapshots: dependencies: obliterator: 1.6.1 + module-details-from-path@1.0.4: {} + mongodb-connection-string-url@7.0.0: dependencies: '@types/whatwg-url': 13.0.0 @@ -13240,6 +14679,18 @@ snapshots: pause@0.0.1: {} + pg-int8@1.0.1: {} + + pg-protocol@1.13.0: {} + + pg-types@2.2.0: + dependencies: + pg-int8: 1.0.1 + postgres-array: 2.0.0 + postgres-bytea: 1.0.1 + postgres-date: 1.0.7 + postgres-interval: 1.2.0 + picocolors@1.1.1: {} picomatch@2.3.1: {} @@ -13269,6 +14720,16 @@ snapshots: picocolors: 1.1.1 source-map-js: 1.2.1 + postgres-array@2.0.0: {} + + postgres-bytea@1.0.1: {} + + postgres-date@1.0.7: {} + + postgres-interval@1.2.0: + dependencies: + xtend: 4.0.2 + powershell-utils@0.1.0: {} preact-render-to-string@5.2.6(preact@10.28.1): @@ -13303,6 +14764,21 @@ snapshots: object-assign: 4.1.1 react-is: 16.13.1 + protobufjs@7.5.4: + dependencies: + '@protobufjs/aspromise': 1.1.2 + '@protobufjs/base64': 1.1.2 + '@protobufjs/codegen': 2.0.4 + '@protobufjs/eventemitter': 1.1.0 + '@protobufjs/fetch': 1.1.0 + '@protobufjs/float': 1.0.2 + '@protobufjs/inquire': 1.1.0 + '@protobufjs/path': 1.1.2 + '@protobufjs/pool': 1.1.0 + '@protobufjs/utf8': 1.1.0 + '@types/node': 25.0.7 + long: 5.3.2 + proxy-addr@2.0.7: dependencies: forwarded: 0.2.0 @@ -13531,6 +15007,13 @@ snapshots: require-from-string@2.0.2: {} + require-in-the-middle@8.0.1: + dependencies: + debug: 4.4.3(supports-color@5.5.0) + module-details-from-path: 1.0.4 + transitivePeerDependencies: + - supports-color + requires-port@1.0.0: {} resolve-from@4.0.0: {} diff --git a/services/checkout-service/package.json b/services/checkout-service/package.json index 0880cd6..b389ef4 100644 --- a/services/checkout-service/package.json +++ b/services/checkout-service/package.json @@ -20,6 +20,11 @@ "dependencies": { "@aws-sdk/client-dynamodb": "^3.968.0", "@aws-sdk/lib-dynamodb": "^3.968.0", + "@opentelemetry/auto-instrumentations-node": "^0.71.0", + "@opentelemetry/exporter-trace-otlp-http": "^0.213.0", + "@opentelemetry/resources": "^2.6.0", + "@opentelemetry/sdk-node": "^0.213.0", + "@opentelemetry/semantic-conventions": "^1.40.0", "amqplib": "^0.10.9", "axios": "^1.13.2", "cors": "^2.8.5", diff --git a/services/checkout-service/src/server.ts b/services/checkout-service/src/server.ts index c01dac1..cc84766 100644 --- a/services/checkout-service/src/server.ts +++ b/services/checkout-service/src/server.ts @@ -1,3 +1,4 @@ +import "./telemetry.js"; import app from './app.js'; import { checkoutDBEvents, connectDB } from './config/db.js'; import { env } from './config/env.js'; diff --git a/services/checkout-service/src/telemetry.ts b/services/checkout-service/src/telemetry.ts new file mode 100644 index 0000000..38a893f --- /dev/null +++ b/services/checkout-service/src/telemetry.ts @@ -0,0 +1,19 @@ +import { NodeSDK } from "@opentelemetry/sdk-node"; +import { getNodeAutoInstrumentations } from "@opentelemetry/auto-instrumentations-node"; +import { OTLPTraceExporter } from "@opentelemetry/exporter-trace-otlp-http"; +import { resourceFromAttributes } from "@opentelemetry/resources"; +import { ATTR_SERVICE_NAME } from "@opentelemetry/semantic-conventions"; + +const traceExporter = new OTLPTraceExporter({ + url: "http://localhost:4318/v1/traces", +}); + +const sdk = new NodeSDK({ + traceExporter, + instrumentations: [getNodeAutoInstrumentations()], + resource: resourceFromAttributes({ + [ATTR_SERVICE_NAME]: "checkout-service", + }), +}); + +sdk.start(); \ No newline at end of file diff --git a/services/checkout-service/src/workers/order.worker.ts b/services/checkout-service/src/workers/order.worker.ts index 000e9db..addeca5 100644 --- a/services/checkout-service/src/workers/order.worker.ts +++ b/services/checkout-service/src/workers/order.worker.ts @@ -106,7 +106,7 @@ async function startWorker() { process.exit(0); }); }); -} +}p startWorker().catch((error) => { console.error('order worker failed to start', error); diff --git a/services/product-service/package.json b/services/product-service/package.json index eabfdd6..98245e0 100644 --- a/services/product-service/package.json +++ b/services/product-service/package.json @@ -18,6 +18,11 @@ "@aws-sdk/client-s3": "^3.989.0", "@aws-sdk/s3-request-presigner": "^3.989.0", "@elastic/elasticsearch": "^8.19.1", + "@opentelemetry/auto-instrumentations-node": "^0.71.0", + "@opentelemetry/exporter-trace-otlp-http": "^0.213.0", + "@opentelemetry/resources": "^2.6.0", + "@opentelemetry/sdk-node": "^0.213.0", + "@opentelemetry/semantic-conventions": "^1.40.0", "cors": "^2.8.5", "dotenv": "^17.2.3", "express": "^5.2.1", diff --git a/services/product-service/src/server.ts b/services/product-service/src/server.ts index 3180784..e2a1195 100644 --- a/services/product-service/src/server.ts +++ b/services/product-service/src/server.ts @@ -1,3 +1,4 @@ +import "./telemetry.js"; import app from './app.js'; import { connectDB, productDBEvents } from './config/db.js'; import { env } from './config/env.js'; diff --git a/services/product-service/src/telemetry.ts b/services/product-service/src/telemetry.ts new file mode 100644 index 0000000..8b8300c --- /dev/null +++ b/services/product-service/src/telemetry.ts @@ -0,0 +1,19 @@ +import { NodeSDK } from "@opentelemetry/sdk-node"; +import { getNodeAutoInstrumentations } from "@opentelemetry/auto-instrumentations-node"; +import { OTLPTraceExporter } from "@opentelemetry/exporter-trace-otlp-http"; +import { resourceFromAttributes } from "@opentelemetry/resources"; +import { ATTR_SERVICE_NAME } from "@opentelemetry/semantic-conventions"; + +const traceExporter = new OTLPTraceExporter({ + url: "http://localhost:4318/v1/traces", +}); + +const sdk = new NodeSDK({ + traceExporter, + instrumentations: [getNodeAutoInstrumentations()], + resource: resourceFromAttributes({ + [ATTR_SERVICE_NAME]: "product-service", + }), +}); + +sdk.start(); \ No newline at end of file diff --git a/services/user-service/package.json b/services/user-service/package.json index bbea99b..e802c69 100644 --- a/services/user-service/package.json +++ b/services/user-service/package.json @@ -17,13 +17,18 @@ "license": "ISC", "dependencies": { "@healix/contracts": "workspace:*", + "@opentelemetry/auto-instrumentations-node": "^0.71.0", + "@opentelemetry/exporter-trace-otlp-http": "^0.213.0", + "@opentelemetry/resources": "^2.6.0", + "@opentelemetry/sdk-node": "^0.213.0", + "@opentelemetry/semantic-conventions": "^1.40.0", "bcryptjs": "^3.0.3", "cookie-parser": "^1.4.7", "cors": "^2.8.5", "dotenv": "^17.2.3", "express": "^5.2.1", - "ioredis": "^5.9.0", "install": "^0.13.0", + "ioredis": "^5.9.0", "jsonwebtoken": "^9.0.3", "mongoose": "^9.0.1", "nodemailer": "^7.0.12", diff --git a/services/user-service/src/server.ts b/services/user-service/src/server.ts index 1dd17c4..6b8233a 100644 --- a/services/user-service/src/server.ts +++ b/services/user-service/src/server.ts @@ -1,3 +1,4 @@ +import "./telemetry.js"; import app from './app.js'; import { connectDB, registerDBEvents } from './config/db.js'; import { env } from './config/env.js'; diff --git a/services/user-service/src/telemetry.ts b/services/user-service/src/telemetry.ts new file mode 100644 index 0000000..61f0c2e --- /dev/null +++ b/services/user-service/src/telemetry.ts @@ -0,0 +1,19 @@ +import { NodeSDK } from "@opentelemetry/sdk-node"; +import { getNodeAutoInstrumentations } from "@opentelemetry/auto-instrumentations-node"; +import { OTLPTraceExporter } from "@opentelemetry/exporter-trace-otlp-http"; +import { resourceFromAttributes } from "@opentelemetry/resources"; +import { ATTR_SERVICE_NAME } from "@opentelemetry/semantic-conventions"; + +const traceExporter = new OTLPTraceExporter({ + url: "http://localhost:4318/v1/traces", +}); + +const sdk = new NodeSDK({ + traceExporter, + instrumentations: [getNodeAutoInstrumentations()], + resource: resourceFromAttributes({ + [ATTR_SERVICE_NAME]: "user-service", + }), +}); + +sdk.start(); \ No newline at end of file From 36899a02649fe1947c3fd9d9180ed4d1e359328a Mon Sep 17 00:00:00 2001 From: Jaseem T K Date: Sat, 4 Apr 2026 12:09:54 +0530 Subject: [PATCH 2/3] feat: docker --- .husky/pre-commit | 0 docker-compose.yml | 39 +++++++++++++++++++ gateway/src/server.ts | 2 +- gateway/src/telemetry.ts | 16 ++++---- services/checkout-service/src/server.ts | 2 +- services/checkout-service/src/telemetry.ts | 16 ++++---- .../src/workers/order.worker.ts | 3 +- services/product-service/src/server.ts | 2 +- services/product-service/src/telemetry.ts | 16 ++++---- services/user-service/src/server.ts | 2 +- services/user-service/src/telemetry.ts | 16 ++++---- 11 files changed, 76 insertions(+), 38 deletions(-) mode change 100755 => 100644 .husky/pre-commit create mode 100644 docker-compose.yml diff --git a/.husky/pre-commit b/.husky/pre-commit old mode 100755 new mode 100644 diff --git a/docker-compose.yml b/docker-compose.yml new file mode 100644 index 0000000..d530050 --- /dev/null +++ b/docker-compose.yml @@ -0,0 +1,39 @@ +version: '3.8' + +services: + rabbitmq: + image: rabbitmq:3-management + container_name: healix-rabbitmq + ports: + - "5672:5672" + - "15672:15672" + environment: + RABBITMQ_DEFAULT_USER: guest + RABBITMQ_DEFAULT_PASS: guest + volumes: + - rabbitmq_data:/var/lib/rabbitmq + + redis: + image: redis:7-alpine + container_name: healix-redis + ports: + - "6379:6379" + volumes: + - redis_data:/data + + elasticsearch: + image: elasticsearch:8.13.0 + container_name: healix-elasticsearch + environment: + - discovery.type=single-node + - xpack.security.enabled=false + - ES_JAVA_OPTS=-Xms512m -Xmx512m + ports: + - "9200:9200" + volumes: + - es_data:/usr/share/elasticsearch/data + +volumes: + rabbitmq_data: + redis_data: + es_data: \ No newline at end of file diff --git a/gateway/src/server.ts b/gateway/src/server.ts index b50ecf0..269b0ab 100644 --- a/gateway/src/server.ts +++ b/gateway/src/server.ts @@ -1,4 +1,4 @@ -import "./telemetry.js"; +import './telemetry.js'; import 'dotenv/config'; import app from './app.js'; diff --git a/gateway/src/telemetry.ts b/gateway/src/telemetry.ts index 06f3731..ef64f23 100644 --- a/gateway/src/telemetry.ts +++ b/gateway/src/telemetry.ts @@ -1,19 +1,19 @@ -import { NodeSDK } from "@opentelemetry/sdk-node"; -import { getNodeAutoInstrumentations } from "@opentelemetry/auto-instrumentations-node"; -import { OTLPTraceExporter } from "@opentelemetry/exporter-trace-otlp-http"; -import { resourceFromAttributes } from "@opentelemetry/resources"; -import { ATTR_SERVICE_NAME } from "@opentelemetry/semantic-conventions"; +import { NodeSDK } from '@opentelemetry/sdk-node'; +import { getNodeAutoInstrumentations } from '@opentelemetry/auto-instrumentations-node'; +import { OTLPTraceExporter } from '@opentelemetry/exporter-trace-otlp-http'; +import { resourceFromAttributes } from '@opentelemetry/resources'; +import { ATTR_SERVICE_NAME } from '@opentelemetry/semantic-conventions'; const traceExporter = new OTLPTraceExporter({ - url: "http://localhost:4318/v1/traces", + url: 'http://localhost:4318/v1/traces', }); const sdk = new NodeSDK({ traceExporter, instrumentations: [getNodeAutoInstrumentations()], resource: resourceFromAttributes({ - [ATTR_SERVICE_NAME]: "gateway", + [ATTR_SERVICE_NAME]: 'gateway', }), }); -sdk.start(); \ No newline at end of file +sdk.start(); diff --git a/services/checkout-service/src/server.ts b/services/checkout-service/src/server.ts index cc84766..5fa7600 100644 --- a/services/checkout-service/src/server.ts +++ b/services/checkout-service/src/server.ts @@ -1,4 +1,4 @@ -import "./telemetry.js"; +import './telemetry.js'; import app from './app.js'; import { checkoutDBEvents, connectDB } from './config/db.js'; import { env } from './config/env.js'; diff --git a/services/checkout-service/src/telemetry.ts b/services/checkout-service/src/telemetry.ts index 38a893f..b90c093 100644 --- a/services/checkout-service/src/telemetry.ts +++ b/services/checkout-service/src/telemetry.ts @@ -1,19 +1,19 @@ -import { NodeSDK } from "@opentelemetry/sdk-node"; -import { getNodeAutoInstrumentations } from "@opentelemetry/auto-instrumentations-node"; -import { OTLPTraceExporter } from "@opentelemetry/exporter-trace-otlp-http"; -import { resourceFromAttributes } from "@opentelemetry/resources"; -import { ATTR_SERVICE_NAME } from "@opentelemetry/semantic-conventions"; +import { NodeSDK } from '@opentelemetry/sdk-node'; +import { getNodeAutoInstrumentations } from '@opentelemetry/auto-instrumentations-node'; +import { OTLPTraceExporter } from '@opentelemetry/exporter-trace-otlp-http'; +import { resourceFromAttributes } from '@opentelemetry/resources'; +import { ATTR_SERVICE_NAME } from '@opentelemetry/semantic-conventions'; const traceExporter = new OTLPTraceExporter({ - url: "http://localhost:4318/v1/traces", + url: 'http://localhost:4318/v1/traces', }); const sdk = new NodeSDK({ traceExporter, instrumentations: [getNodeAutoInstrumentations()], resource: resourceFromAttributes({ - [ATTR_SERVICE_NAME]: "checkout-service", + [ATTR_SERVICE_NAME]: 'checkout-service', }), }); -sdk.start(); \ No newline at end of file +sdk.start(); diff --git a/services/checkout-service/src/workers/order.worker.ts b/services/checkout-service/src/workers/order.worker.ts index addeca5..a1778d3 100644 --- a/services/checkout-service/src/workers/order.worker.ts +++ b/services/checkout-service/src/workers/order.worker.ts @@ -106,8 +106,7 @@ async function startWorker() { process.exit(0); }); }); -}p - +} startWorker().catch((error) => { console.error('order worker failed to start', error); process.exit(1); diff --git a/services/product-service/src/server.ts b/services/product-service/src/server.ts index e2a1195..83d2367 100644 --- a/services/product-service/src/server.ts +++ b/services/product-service/src/server.ts @@ -1,4 +1,4 @@ -import "./telemetry.js"; +import './telemetry.js'; import app from './app.js'; import { connectDB, productDBEvents } from './config/db.js'; import { env } from './config/env.js'; diff --git a/services/product-service/src/telemetry.ts b/services/product-service/src/telemetry.ts index 8b8300c..488b82e 100644 --- a/services/product-service/src/telemetry.ts +++ b/services/product-service/src/telemetry.ts @@ -1,19 +1,19 @@ -import { NodeSDK } from "@opentelemetry/sdk-node"; -import { getNodeAutoInstrumentations } from "@opentelemetry/auto-instrumentations-node"; -import { OTLPTraceExporter } from "@opentelemetry/exporter-trace-otlp-http"; -import { resourceFromAttributes } from "@opentelemetry/resources"; -import { ATTR_SERVICE_NAME } from "@opentelemetry/semantic-conventions"; +import { NodeSDK } from '@opentelemetry/sdk-node'; +import { getNodeAutoInstrumentations } from '@opentelemetry/auto-instrumentations-node'; +import { OTLPTraceExporter } from '@opentelemetry/exporter-trace-otlp-http'; +import { resourceFromAttributes } from '@opentelemetry/resources'; +import { ATTR_SERVICE_NAME } from '@opentelemetry/semantic-conventions'; const traceExporter = new OTLPTraceExporter({ - url: "http://localhost:4318/v1/traces", + url: 'http://localhost:4318/v1/traces', }); const sdk = new NodeSDK({ traceExporter, instrumentations: [getNodeAutoInstrumentations()], resource: resourceFromAttributes({ - [ATTR_SERVICE_NAME]: "product-service", + [ATTR_SERVICE_NAME]: 'product-service', }), }); -sdk.start(); \ No newline at end of file +sdk.start(); diff --git a/services/user-service/src/server.ts b/services/user-service/src/server.ts index 6b8233a..0f69987 100644 --- a/services/user-service/src/server.ts +++ b/services/user-service/src/server.ts @@ -1,4 +1,4 @@ -import "./telemetry.js"; +import './telemetry.js'; import app from './app.js'; import { connectDB, registerDBEvents } from './config/db.js'; import { env } from './config/env.js'; diff --git a/services/user-service/src/telemetry.ts b/services/user-service/src/telemetry.ts index 61f0c2e..35b90d4 100644 --- a/services/user-service/src/telemetry.ts +++ b/services/user-service/src/telemetry.ts @@ -1,19 +1,19 @@ -import { NodeSDK } from "@opentelemetry/sdk-node"; -import { getNodeAutoInstrumentations } from "@opentelemetry/auto-instrumentations-node"; -import { OTLPTraceExporter } from "@opentelemetry/exporter-trace-otlp-http"; -import { resourceFromAttributes } from "@opentelemetry/resources"; -import { ATTR_SERVICE_NAME } from "@opentelemetry/semantic-conventions"; +import { NodeSDK } from '@opentelemetry/sdk-node'; +import { getNodeAutoInstrumentations } from '@opentelemetry/auto-instrumentations-node'; +import { OTLPTraceExporter } from '@opentelemetry/exporter-trace-otlp-http'; +import { resourceFromAttributes } from '@opentelemetry/resources'; +import { ATTR_SERVICE_NAME } from '@opentelemetry/semantic-conventions'; const traceExporter = new OTLPTraceExporter({ - url: "http://localhost:4318/v1/traces", + url: 'http://localhost:4318/v1/traces', }); const sdk = new NodeSDK({ traceExporter, instrumentations: [getNodeAutoInstrumentations()], resource: resourceFromAttributes({ - [ATTR_SERVICE_NAME]: "user-service", + [ATTR_SERVICE_NAME]: 'user-service', }), }); -sdk.start(); \ No newline at end of file +sdk.start(); From 085c05c7c9d1a12dd49450e2227f22f32b7b689a Mon Sep 17 00:00:00 2001 From: Jaseem T K Date: Sat, 4 Apr 2026 14:39:56 +0530 Subject: [PATCH 3/3] feat: responsive masonry grid for mobile, tablet, desktop --- .husky/pre-commit | 0 docker-compose.yml | 39 ++++++ ...Web Folder Structure #U2013 Usage Guide.md | 19 +++ frontend/web/public/Phone/blue.png | Bin 0 -> 67802 bytes frontend/web/public/Phone/green.png | Bin 0 -> 71637 bytes frontend/web/src/app/globals.css | 14 +++ .../{ Container.tsx => Container.tsx} | 0 .../web/src/components/landingpage/Footer.tsx | 75 ++++-------- .../web/src/components/landingpage/Hero.tsx | 70 ++++------- .../src/components/landingpage/HeroText.tsx | 14 +-- .../components/landingpage/MasonrtGrid.tsx | 112 +++++++++++------- .../web/src/components/landingpage/Navbar.tsx | 52 +++++--- .../landingpage/Personalization.tsx | 23 ++-- .../components/landingpage/ProductCard.tsx | 2 +- .../components/landingpage/Testimonials.tsx | 10 +- gateway/src/server.ts | 2 +- gateway/src/telemetry.ts | 16 +-- services/checkout-service/src/server.ts | 2 +- services/checkout-service/src/telemetry.ts | 16 +-- .../src/workers/order.worker.ts | 3 +- services/product-service/src/server.ts | 2 +- services/product-service/src/telemetry.ts | 16 +-- services/user-service/src/server.ts | 2 +- services/user-service/src/telemetry.ts | 16 +-- 24 files changed, 282 insertions(+), 223 deletions(-) mode change 100755 => 100644 .husky/pre-commit create mode 100644 docker-compose.yml create mode 100644 frontend/web/Web Folder Structure #U2013 Usage Guide.md create mode 100644 frontend/web/public/Phone/blue.png create mode 100644 frontend/web/public/Phone/green.png rename frontend/web/src/components/landingpage/{ Container.tsx => Container.tsx} (100%) diff --git a/.husky/pre-commit b/.husky/pre-commit old mode 100755 new mode 100644 diff --git a/docker-compose.yml b/docker-compose.yml new file mode 100644 index 0000000..d530050 --- /dev/null +++ b/docker-compose.yml @@ -0,0 +1,39 @@ +version: '3.8' + +services: + rabbitmq: + image: rabbitmq:3-management + container_name: healix-rabbitmq + ports: + - "5672:5672" + - "15672:15672" + environment: + RABBITMQ_DEFAULT_USER: guest + RABBITMQ_DEFAULT_PASS: guest + volumes: + - rabbitmq_data:/var/lib/rabbitmq + + redis: + image: redis:7-alpine + container_name: healix-redis + ports: + - "6379:6379" + volumes: + - redis_data:/data + + elasticsearch: + image: elasticsearch:8.13.0 + container_name: healix-elasticsearch + environment: + - discovery.type=single-node + - xpack.security.enabled=false + - ES_JAVA_OPTS=-Xms512m -Xmx512m + ports: + - "9200:9200" + volumes: + - es_data:/usr/share/elasticsearch/data + +volumes: + rabbitmq_data: + redis_data: + es_data: \ No newline at end of file diff --git a/frontend/web/Web Folder Structure #U2013 Usage Guide.md b/frontend/web/Web Folder Structure #U2013 Usage Guide.md new file mode 100644 index 0000000..5a8e0bf --- /dev/null +++ b/frontend/web/Web Folder Structure #U2013 Usage Guide.md @@ -0,0 +1,19 @@ +Web Folder Structure – Usage Guide +This document explains the purpose and usage of each folder and important file inside the +frontend/web structure used in modern scalable applications. +• web/app: Contains all Next.js routes, pages, layouts, and global styles. This is where UI pages +are defined. +• web/components: Reusable UI components like buttons, navbar, footer, cards. No business +logic here. +• web/hooks: Custom React hooks such as authentication or data fetching helpers. +• web/lib: Core utilities like API configuration, authentication helpers, and shared logic. +• web/services: Handles communication with backend APIs (auth, product, order services). +• web/public: Static assets like images, icons, and SVGs. +• web/styles: Optional folder for themes, CSS modules, or design tokens. +• web/types: TypeScript interfaces and types shared across the app. +• middleware.ts: Used for route protection, authentication checks, and redirects. +• next.config.ts: Next.js configuration file. +• package.json: Project dependencies and scripts. +• tsconfig.json: TypeScript configuration. +This structure follows industry best practices and is suitable for scaling applications similar to +Amazon, Flipkart, or other large platforms. diff --git a/frontend/web/public/Phone/blue.png b/frontend/web/public/Phone/blue.png new file mode 100644 index 0000000000000000000000000000000000000000..52a07248bd2187a11be3d59be7e799af62901e64 GIT binary patch literal 67802 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±L=b^6;-FegUbP(Q8Z(N?# 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 -
+ ); } diff --git a/frontend/web/src/components/landingpage/Hero.tsx b/frontend/web/src/components/landingpage/Hero.tsx index 7570a42..664827d 100644 --- a/frontend/web/src/components/landingpage/Hero.tsx +++ b/frontend/web/src/components/landingpage/Hero.tsx @@ -5,10 +5,7 @@ import { Brain, Zap, Activity, Leaf, ArrowUpRight } from 'lucide-react'; import { CircularGallery } from '../animation/CircularGallery'; import Marquee from 'react-fast-marquee'; import { productService } from '@/src/services/product.service'; -import { - ProductApiResponse, - ProductVersion, -} from '@/src/types/api/product.api'; +import { ProductApiResponse, ProductVersion } from '@/src/types/api/product.api'; import { useRouter } from 'next/navigation'; export type GalleryItem = { @@ -39,58 +36,50 @@ export default function HealixPage() { function resolveImage(src?: string | null) { if (!src) return '/placeholder.png'; - if (src.startsWith('http')) { - return `/api/proxy?url=${encodeURIComponent(src)}`; - } + if (src.startsWith('http')) return `/api/proxy?url=${encodeURIComponent(src)}`; return `/api/proxy?url=${encodeURIComponent(S3_BASE + src)}`; } useEffect(() => { async function fetchProducts() { try { - const res = - (await productService.getProducts()) as ProductApiResponse[]; - console.log('API Response:', res); - - // Map API data to gallery items safely + const res = (await productService.getProducts()) as ProductApiResponse[]; const formatted: GalleryItem[] = res .map((dt) => { const product = dt.current_version as ProductVersion | undefined; - if (!product) return null; // skip products without a current version + if (!product) return null; return { id: dt._id, - text: product.name ? product.name : `Unnamed Product`, + text: product.name ? product.name : 'Unnamed Product', image: resolveImage(product.images?.[0] ?? ''), }; }) - .filter((item): item is GalleryItem => item !== null); // type-safe filter - + .filter((item): item is GalleryItem => item !== null); setProducts(formatted); } catch (err) { console.error('Failed to fetch products:', err); } } - fetchProducts(); }, []); return (
- {/* Top Banner Navigation */} + {/* Benefits Marquee Banner */}
-
-

+

+

Benefits That Support Your Everyday Wellness

-
+
{categories.map((cat, idx) => (
{cat.icon} - + {cat.label}
@@ -100,23 +89,16 @@ export default function HealixPage() { - {/* Hero Section */} -
-

- At Healix, we are - passionate about
- delivering clean, nutrient-dense products
- that support a healthier{' '} - lifestyle. Rooted in
- the - science of wellness, our store - sources
high-quality{' '} - ingredients and - - follows
- sustainable, transparent practices -
{' '} - to
protect your health. + {/* About / Mission Section */} +
+

+ At Healix, we are passionate about + delivering clean, nutrient-dense products that support a{' '} + healthier lifestyle. Rooted in the{' '} + science of wellness, our store sources{' '} + high-quality ingredients and{' '} + follows sustainable, transparent practices{' '} + to protect your health.

diff --git a/frontend/web/src/components/landingpage/MasonrtGrid.tsx b/frontend/web/src/components/landingpage/MasonrtGrid.tsx index 068a046..ea30e79 100644 --- a/frontend/web/src/components/landingpage/MasonrtGrid.tsx +++ b/frontend/web/src/components/landingpage/MasonrtGrid.tsx @@ -1,81 +1,101 @@ -import Container from './ Container'; +import Container from './Container'; import ProductCard from './ProductCard'; import { ArrowUpRight } from 'lucide-react'; import Link from 'next/link'; + const MasonryGrid = () => { return (
- {/* center the grid visually */}
-
- {/* Col 1 */} + + {/* ---------------- MOBILE ---------------- */} +
+
+ + + + +
+
+ + + +
+ + + Explore Products + + +
+ + + {/* ---------------- TABLET ---------------- */} +
+ + + + + + + + + + + Explore Products + + + + + +
+ + + {/* ---------------- DESKTOP ---------------- */} +
+
- - + +
- {/* Col 2 */}
- +
- {/* Col 3 */}
- + - Explore Products + Explore Products
- {/* Col 4 */}
- +
- {/* Col 5 */}
- - + +
+
+
); }; -export default MasonryGrid; +export default MasonryGrid; \ No newline at end of file diff --git a/frontend/web/src/components/landingpage/Navbar.tsx b/frontend/web/src/components/landingpage/Navbar.tsx index 08a6731..c169d2d 100644 --- a/frontend/web/src/components/landingpage/Navbar.tsx +++ b/frontend/web/src/components/landingpage/Navbar.tsx @@ -1,11 +1,16 @@ +'use client'; + import Link from 'next/link'; import Image from 'next/image'; -import { User, Heart, ShoppingBag } from 'lucide-react'; -import Container from './ Container'; +import { User, Heart, ShoppingBag, Menu, X } from 'lucide-react'; +import { useState } from 'react'; +import Container from './Container'; const Navbar = () => { + const [menuOpen, setMenuOpen] = useState(false); + return ( -