From 66c33f3a58dc7ebcb687e1786281ed7bd6001eda Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Adnan=20Rahi=C4=87?= Date: Fri, 11 Oct 2024 15:29:10 +0200 Subject: [PATCH] examples(lgtm): add code sample for blog post (#4047) * examples(lgtm): add code for blogpost * examples(lgtm): update grafana db * examples(lgtm): edit readme --- .../.dockerignore | 4 + .../.env.sample | 6 + .../.gitignore | 3 + .../Dockerfile | 6 + .../docker-compose.yml | 68 + .../grafana/grafana.db | Bin 0 -> 1155072 bytes .../index.js | 37 + .../logger.js | 21 + .../meter.js | 30 + .../package-lock.json | 3226 +++++++++++++++++ .../package.json | 29 + .../prometheus.yml | 7 + .../readme.md | 55 + .../tempo.yaml | 41 + .../tracer.js | 13 + .../tracetest-test.yaml | 17 + .../tracetest-trace-ingestion.yaml | 15 + 17 files changed, 3578 insertions(+) create mode 100644 examples/lgtm-end-to-end-observability-testing/.dockerignore create mode 100644 examples/lgtm-end-to-end-observability-testing/.env.sample create mode 100644 examples/lgtm-end-to-end-observability-testing/.gitignore create mode 100644 examples/lgtm-end-to-end-observability-testing/Dockerfile create mode 100644 examples/lgtm-end-to-end-observability-testing/docker-compose.yml create mode 100644 examples/lgtm-end-to-end-observability-testing/grafana/grafana.db create mode 100644 examples/lgtm-end-to-end-observability-testing/index.js create mode 100644 examples/lgtm-end-to-end-observability-testing/logger.js create mode 100644 examples/lgtm-end-to-end-observability-testing/meter.js create mode 100644 examples/lgtm-end-to-end-observability-testing/package-lock.json create mode 100644 examples/lgtm-end-to-end-observability-testing/package.json create mode 100644 examples/lgtm-end-to-end-observability-testing/prometheus.yml create mode 100644 examples/lgtm-end-to-end-observability-testing/readme.md create mode 100644 examples/lgtm-end-to-end-observability-testing/tempo.yaml create mode 100644 examples/lgtm-end-to-end-observability-testing/tracer.js create mode 100644 examples/lgtm-end-to-end-observability-testing/tracetest-test.yaml create mode 100644 examples/lgtm-end-to-end-observability-testing/tracetest-trace-ingestion.yaml diff --git a/examples/lgtm-end-to-end-observability-testing/.dockerignore b/examples/lgtm-end-to-end-observability-testing/.dockerignore new file mode 100644 index 0000000000..f89037f598 --- /dev/null +++ b/examples/lgtm-end-to-end-observability-testing/.dockerignore @@ -0,0 +1,4 @@ +node_modules +docker-compose +tempo-data +grafana \ No newline at end of file diff --git a/examples/lgtm-end-to-end-observability-testing/.env.sample b/examples/lgtm-end-to-end-observability-testing/.env.sample new file mode 100644 index 0000000000..d92eb50b7c --- /dev/null +++ b/examples/lgtm-end-to-end-observability-testing/.env.sample @@ -0,0 +1,6 @@ +# Get the required information here: https://app.tracetest.io/retrieve-token + +TRACETEST_TOKEN= +TRACETEST_ENVIRONMENT_ID= + +OTEL_EXPORTER_OTLP_TRACES_ENDPOINT="http://tempo:4318/v1/traces" diff --git a/examples/lgtm-end-to-end-observability-testing/.gitignore b/examples/lgtm-end-to-end-observability-testing/.gitignore new file mode 100644 index 0000000000..7aa61a1509 --- /dev/null +++ b/examples/lgtm-end-to-end-observability-testing/.gitignore @@ -0,0 +1,3 @@ +.env +node_modules +tempo-data diff --git a/examples/lgtm-end-to-end-observability-testing/Dockerfile b/examples/lgtm-end-to-end-observability-testing/Dockerfile new file mode 100644 index 0000000000..b4c65052ed --- /dev/null +++ b/examples/lgtm-end-to-end-observability-testing/Dockerfile @@ -0,0 +1,6 @@ +FROM node:slim +WORKDIR /usr/src/app/ +COPY package*.json ./ +RUN npm install +COPY . . +EXPOSE 8081 diff --git a/examples/lgtm-end-to-end-observability-testing/docker-compose.yml b/examples/lgtm-end-to-end-observability-testing/docker-compose.yml new file mode 100644 index 0000000000..2de189e712 --- /dev/null +++ b/examples/lgtm-end-to-end-observability-testing/docker-compose.yml @@ -0,0 +1,68 @@ +version: '3.8' + +services: + app: + image: adnanrahic/tracetest-app + build: . + command: npm run index-with-tracer + ports: + - "8081:8081" + environment: + - OTEL_EXPORTER_OTLP_TRACES_ENDPOINT=${OTEL_EXPORTER_OTLP_TRACES_ENDPOINT} + depends_on: + tempo: + condition: service_started + tracetest-agent: + condition: service_started + + prometheus: + image: prom/prometheus + volumes: + - ./prometheus.yml:/etc/prometheus/prometheus.yml + ports: + - "9090:9090" + + loki: + image: grafana/loki:2.9.10 + ports: + - "3100:3100" + environment: + - LOKI_ENABLE_API=true + + init: + image: &tempoImage grafana/tempo:latest + user: root + entrypoint: + - "chown" + - "10001:10001" + - "/var/tempo" + volumes: + - ./tempo-data:/var/tempo + + tempo: + image: *tempoImage + command: [ "-config.file=/etc/tempo.yaml" ] + volumes: + - ./tempo.yaml:/etc/tempo.yaml + - ./tempo-data:/var/tempo + ports: + - "3200:80" # tempo http + - "9095:9095" # tempo grpc + depends_on: + - init + + tracetest-agent: + image: kubeshop/tracetest-agent:v1.7.1 + environment: + - TRACETEST_API_KEY=${TRACETEST_TOKEN} + - TRACETEST_ENVIRONMENT_ID=${TRACETEST_ENVIRONMENT_ID} + + grafana: + image: grafana/grafana:latest + ports: + - "3000:3000" + environment: + - GF_SECURITY_ADMIN_PASSWORD=admin + volumes: + - ./grafana:/var/lib/grafana + diff --git a/examples/lgtm-end-to-end-observability-testing/grafana/grafana.db b/examples/lgtm-end-to-end-observability-testing/grafana/grafana.db new file mode 100644 index 0000000000000000000000000000000000000000..2539566dfed70acf821d35f06db4d9e4a39cee68 GIT binary patch literal 1155072 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 K#TGpOxBdS{G*H+8 literal 0 HcmV?d00001 diff --git a/examples/lgtm-end-to-end-observability-testing/index.js b/examples/lgtm-end-to-end-observability-testing/index.js new file mode 100644 index 0000000000..fa1040cf69 --- /dev/null +++ b/examples/lgtm-end-to-end-observability-testing/index.js @@ -0,0 +1,37 @@ +const express = require('express'); +const logger = require('./logger'); +const meter = require('./meter'); +// const tracer = require('./tracer'); + +// Create an Express app +const app = express(); + +// Define a custom metric (e.g., a request counter) +const requestCounter = meter.createCounter('http_requests', { + description: 'Counts HTTP requests', +}); + +// Middleware to increment the counter on every request +app.use((req, res, next) => { + // Increment the request counter + logger.info(`Received request for ${req.url}`); + requestCounter.add(1, { method: req.method, route: req.path }); + next(); +}); + +// Define a simple route +app.get('/', (req, res) => { + // const span = tracer.startSpan('handle_root_request'); + + // Simulate some work + setTimeout(() => { + res.send('Hello, World!'); + // span.end(); + }, 100); +}); + +// Start the server +app.listen(8081, () => { + logger.info('Server is running on http://localhost:5000'); + console.log('Server is running on http://localhost:5000'); +}); \ No newline at end of file diff --git a/examples/lgtm-end-to-end-observability-testing/logger.js b/examples/lgtm-end-to-end-observability-testing/logger.js new file mode 100644 index 0000000000..616a6e8246 --- /dev/null +++ b/examples/lgtm-end-to-end-observability-testing/logger.js @@ -0,0 +1,21 @@ +// logger.js +const winston = require('winston'); +const LokiTransport = require('winston-loki'); + +// Configure Winston to send logs to Loki +const logger = winston.createLogger({ + level: 'info', + format: winston.format.json(), + transports: [ + new LokiTransport({ + host: 'http://loki:3100', // Assuming Loki is accessible at this URL + labels: { job: 'loki-service' }, + json: true, + batching: true, + interval: 5, // Send logs in batches every 5 seconds + }), + ], +}); + +module.exports = logger; + diff --git a/examples/lgtm-end-to-end-observability-testing/meter.js b/examples/lgtm-end-to-end-observability-testing/meter.js new file mode 100644 index 0000000000..5b8b2a5a41 --- /dev/null +++ b/examples/lgtm-end-to-end-observability-testing/meter.js @@ -0,0 +1,30 @@ +const { MeterProvider } = require('@opentelemetry/sdk-metrics'); +const { PrometheusExporter } = require('@opentelemetry/exporter-prometheus'); +const { Resource } = require('@opentelemetry/resources'); +const { SemanticResourceAttributes } = require('@opentelemetry/semantic-conventions'); + +// Prometheus Exporter for metrics +const prometheusExporter = new PrometheusExporter({ + port: 9464, // Port where metrics will be exposed + endpoint: '/metrics', // Endpoint for Prometheus to scrape +}, () => { + console.log('Prometheus scrape endpoint: http://localhost:9464/metrics'); +}); + +// MeterProvider for manual metrics instrumentation +const meterProvider = new MeterProvider({ + resource: new Resource({ + [SemanticResourceAttributes.SERVICE_NAME]: 'hello-world-app', // Use semantic attributes for service name + }), +}); + +// Bind the PrometheusExporter as a MetricReader to the MeterProvider +meterProvider.addMetricReader(prometheusExporter); + +// Create a meter from the meterProvider +const meter = meterProvider.getMeter('hello-world-meter'); + +module.exports = meter; + + + diff --git a/examples/lgtm-end-to-end-observability-testing/package-lock.json b/examples/lgtm-end-to-end-observability-testing/package-lock.json new file mode 100644 index 0000000000..bc8a212faa --- /dev/null +++ b/examples/lgtm-end-to-end-observability-testing/package-lock.json @@ -0,0 +1,3226 @@ +{ + "name": "end-to-end-observability", + "version": "1.0.0", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "end-to-end-observability", + "version": "1.0.0", + "license": "ISC", + "dependencies": { + "@opentelemetry/api": "^1.9.0", + "@opentelemetry/auto-instrumentations-node": "^0.50.0", + "@opentelemetry/exporter-prometheus": "^0.53.0", + "@opentelemetry/exporter-trace-otlp-grpc": "^0.53.0", + "@opentelemetry/exporter-trace-otlp-http": "^0.53.0", + "@opentelemetry/instrumentation": "^0.53.0", + "@opentelemetry/metrics": "^0.24.0", + "@opentelemetry/resources": "^1.26.0", + "@opentelemetry/sdk-node": "^0.53.0", + "@opentelemetry/sdk-trace-base": "^1.26.0", + "@opentelemetry/sdk-trace-node": "^1.26.0", + "@opentelemetry/semantic-conventions": "^1.27.0", + "dotenv": "^16.4.5", + "express": "^4.19.2", + "winston": "^3.14.2", + "winston-loki": "^6.1.2" + } + }, + "node_modules/@colors/colors": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/@colors/colors/-/colors-1.6.0.tgz", + "integrity": "sha512-Ir+AOibqzrIsL6ajt3Rz3LskB7OiMVHqltZmspbW/TJuTVuyOMirVqAkjfY6JISiLHgyNqicAC8AyHHGzNd/dA==", + "engines": { + "node": ">=0.1.90" + } + }, + "node_modules/@dabh/diagnostics": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@dabh/diagnostics/-/diagnostics-2.0.3.tgz", + "integrity": "sha512-hrlQOIi7hAfzsMqlGSFyVucrx38O+j6wiGOf//H2ecvIEqYN4ADBSS2iLMh5UFyDunCNniUIPk/q3riFv45xRA==", + "dependencies": { + "colorspace": "1.1.x", + "enabled": "2.0.x", + "kuler": "^2.0.0" + } + }, + "node_modules/@grpc/grpc-js": { + "version": "1.11.2", + "resolved": "https://registry.npmjs.org/@grpc/grpc-js/-/grpc-js-1.11.2.tgz", + "integrity": "sha512-DWp92gDD7/Qkj7r8kus6/HCINeo3yPZWZ3paKgDgsbKbSpoxKg1yvN8xe2Q8uE3zOsPe3bX8FQX2+XValq2yTw==", + "dependencies": { + "@grpc/proto-loader": "^0.7.13", + "@js-sdsl/ordered-map": "^4.4.2" + }, + "engines": { + "node": ">=12.10.0" + } + }, + "node_modules/@grpc/proto-loader": { + "version": "0.7.13", + "resolved": "https://registry.npmjs.org/@grpc/proto-loader/-/proto-loader-0.7.13.tgz", + "integrity": "sha512-AiXO/bfe9bmxBjxxtYxFAXGZvMaN5s8kO+jBHAJCON8rJoB5YS/D6X7ZNc6XQkuHNmyl4CYaMI1fJ/Gn27RGGw==", + "dependencies": { + "lodash.camelcase": "^4.3.0", + "long": "^5.0.0", + "protobufjs": "^7.2.5", + "yargs": "^17.7.2" + }, + "bin": { + "proto-loader-gen-types": "build/bin/proto-loader-gen-types.js" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/@js-sdsl/ordered-map": { + "version": "4.4.2", + "resolved": "https://registry.npmjs.org/@js-sdsl/ordered-map/-/ordered-map-4.4.2.tgz", + "integrity": "sha512-iUKgm52T8HOE/makSxjqoWhe95ZJA1/G1sYsGev2JDKUSS14KAgg1LHb+Ba+IPow0xflbnSkOsZcO08C7w1gYw==", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/js-sdsl" + } + }, + "node_modules/@napi-rs/snappy-android-arm-eabi": { + "version": "7.2.2", + "resolved": "https://registry.npmjs.org/@napi-rs/snappy-android-arm-eabi/-/snappy-android-arm-eabi-7.2.2.tgz", + "integrity": "sha512-H7DuVkPCK5BlAr1NfSU8bDEN7gYs+R78pSHhDng83QxRnCLmVIZk33ymmIwurmoA1HrdTxbkbuNl+lMvNqnytw==", + "cpu": [ + "arm" + ], + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@napi-rs/snappy-android-arm64": { + "version": "7.2.2", + "resolved": "https://registry.npmjs.org/@napi-rs/snappy-android-arm64/-/snappy-android-arm64-7.2.2.tgz", + "integrity": "sha512-2R/A3qok+nGtpVK8oUMcrIi5OMDckGYNoBLFyli3zp8w6IArPRfg1yOfVUcHvpUDTo9T7LOS1fXgMOoC796eQw==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@napi-rs/snappy-darwin-arm64": { + "version": "7.2.2", + "resolved": "https://registry.npmjs.org/@napi-rs/snappy-darwin-arm64/-/snappy-darwin-arm64-7.2.2.tgz", + "integrity": "sha512-USgArHbfrmdbuq33bD5ssbkPIoT7YCXCRLmZpDS6dMDrx+iM7eD2BecNbOOo7/v1eu6TRmQ0xOzeQ6I/9FIi5g==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@napi-rs/snappy-darwin-x64": { + "version": "7.2.2", + "resolved": "https://registry.npmjs.org/@napi-rs/snappy-darwin-x64/-/snappy-darwin-x64-7.2.2.tgz", + "integrity": "sha512-0APDu8iO5iT0IJKblk2lH0VpWSl9zOZndZKnBYIc+ei1npw2L5QvuErFOTeTdHBtzvUHASB+9bvgaWnQo4PvTQ==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@napi-rs/snappy-freebsd-x64": { + "version": "7.2.2", + "resolved": "https://registry.npmjs.org/@napi-rs/snappy-freebsd-x64/-/snappy-freebsd-x64-7.2.2.tgz", + "integrity": "sha512-mRTCJsuzy0o/B0Hnp9CwNB5V6cOJ4wedDTWEthsdKHSsQlO7WU9W1yP7H3Qv3Ccp/ZfMyrmG98Ad7u7lG58WXA==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@napi-rs/snappy-linux-arm-gnueabihf": { + "version": "7.2.2", + "resolved": "https://registry.npmjs.org/@napi-rs/snappy-linux-arm-gnueabihf/-/snappy-linux-arm-gnueabihf-7.2.2.tgz", + "integrity": "sha512-v1uzm8+6uYjasBPcFkv90VLZ+WhLzr/tnfkZ/iD9mHYiULqkqpRuC8zvc3FZaJy5wLQE9zTDkTJN1IvUcZ+Vcg==", + "cpu": [ + "arm" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@napi-rs/snappy-linux-arm64-gnu": { + "version": "7.2.2", + "resolved": "https://registry.npmjs.org/@napi-rs/snappy-linux-arm64-gnu/-/snappy-linux-arm64-gnu-7.2.2.tgz", + "integrity": "sha512-LrEMa5pBScs4GXWOn6ZYXfQ72IzoolZw5txqUHVGs8eK4g1HR9HTHhb2oY5ySNaKakG5sOgMsb1rwaEnjhChmQ==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@napi-rs/snappy-linux-arm64-musl": { + "version": "7.2.2", + "resolved": "https://registry.npmjs.org/@napi-rs/snappy-linux-arm64-musl/-/snappy-linux-arm64-musl-7.2.2.tgz", + "integrity": "sha512-3orWZo9hUpGQcB+3aTLW7UFDqNCQfbr0+MvV67x8nMNYj5eAeUtMmUE/HxLznHO4eZ1qSqiTwLbVx05/Socdlw==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@napi-rs/snappy-linux-x64-gnu": { + "version": "7.2.2", + "resolved": "https://registry.npmjs.org/@napi-rs/snappy-linux-x64-gnu/-/snappy-linux-x64-gnu-7.2.2.tgz", + "integrity": "sha512-jZt8Jit/HHDcavt80zxEkDpH+R1Ic0ssiVCoueASzMXa7vwPJeF4ZxZyqUw4qeSy7n8UUExomu8G8ZbP6VKhgw==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@napi-rs/snappy-linux-x64-musl": { + "version": "7.2.2", + "resolved": "https://registry.npmjs.org/@napi-rs/snappy-linux-x64-musl/-/snappy-linux-x64-musl-7.2.2.tgz", + "integrity": "sha512-Dh96IXgcZrV39a+Tej/owcd9vr5ihiZ3KRix11rr1v0MWtVb61+H1GXXlz6+Zcx9y8jM1NmOuiIuJwkV4vZ4WA==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@napi-rs/snappy-win32-arm64-msvc": { + "version": "7.2.2", + "resolved": "https://registry.npmjs.org/@napi-rs/snappy-win32-arm64-msvc/-/snappy-win32-arm64-msvc-7.2.2.tgz", + "integrity": "sha512-9No0b3xGbHSWv2wtLEn3MO76Yopn1U2TdemZpCaEgOGccz1V+a/1d16Piz3ofSmnA13HGFz3h9NwZH9EOaIgYA==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@napi-rs/snappy-win32-ia32-msvc": { + "version": "7.2.2", + "resolved": "https://registry.npmjs.org/@napi-rs/snappy-win32-ia32-msvc/-/snappy-win32-ia32-msvc-7.2.2.tgz", + "integrity": "sha512-QiGe+0G86J74Qz1JcHtBwM3OYdTni1hX1PFyLRo3HhQUSpmi13Bzc1En7APn+6Pvo7gkrcy81dObGLDSxFAkQQ==", + "cpu": [ + "ia32" + ], + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@napi-rs/snappy-win32-x64-msvc": { + "version": "7.2.2", + "resolved": "https://registry.npmjs.org/@napi-rs/snappy-win32-x64-msvc/-/snappy-win32-x64-msvc-7.2.2.tgz", + "integrity": "sha512-a43cyx1nK0daw6BZxVcvDEXxKMFLSBSDTAhsFD0VqSKcC7MGUBMaqyoWUcMiI7LBSz4bxUmxDWKfCYzpEmeb3w==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@opentelemetry/api": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/api/-/api-1.9.0.tgz", + "integrity": "sha512-3giAOQvZiH5F9bMlMiv8+GSPMeqg0dbaeo58/0SlA9sxSqZhnUtxzX9/2FzyhS9sWQf5S0GJE0AKBrFqjpeYcg==", + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/@opentelemetry/api-logs": { + "version": "0.53.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/api-logs/-/api-logs-0.53.0.tgz", + "integrity": "sha512-8HArjKx+RaAI8uEIgcORbZIPklyh1YLjPSBus8hjRmvLi6DeFzgOcdZ7KwPabKj8mXF8dX0hyfAyGfycz0DbFw==", + "dependencies": { + "@opentelemetry/api": "^1.0.0" + }, + "engines": { + "node": ">=14" + } + }, + "node_modules/@opentelemetry/api-metrics": { + "version": "0.24.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/api-metrics/-/api-metrics-0.24.0.tgz", + "integrity": "sha512-hdpkMeVlRGTuMshD2ZFaDjA/U0cZTkxUkJFvS/4yOiWfw+kEASmGE+U0/i9lbdQKuCR7X1rXSjbcYumlHcMG+A==", + "deprecated": "Please use @opentelemetry/api >= 1.3.0", + "engines": { + "node": ">=8.0.0" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.0.1" + } + }, + "node_modules/@opentelemetry/auto-instrumentations-node": { + "version": "0.50.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/auto-instrumentations-node/-/auto-instrumentations-node-0.50.0.tgz", + "integrity": "sha512-LqoSiWrOM4Cnr395frDHL4R/o5c2fuqqrqW8sZwhxvkasImmVlyL66YMPHllM2O5xVj2nP2ANUKHZSd293meZA==", + "dependencies": { + "@opentelemetry/instrumentation": "^0.53.0", + "@opentelemetry/instrumentation-amqplib": "^0.42.0", + "@opentelemetry/instrumentation-aws-lambda": "^0.44.0", + "@opentelemetry/instrumentation-aws-sdk": "^0.44.0", + "@opentelemetry/instrumentation-bunyan": "^0.41.0", + "@opentelemetry/instrumentation-cassandra-driver": "^0.41.0", + "@opentelemetry/instrumentation-connect": "^0.39.0", + "@opentelemetry/instrumentation-cucumber": "^0.9.0", + "@opentelemetry/instrumentation-dataloader": "^0.12.0", + "@opentelemetry/instrumentation-dns": "^0.39.0", + "@opentelemetry/instrumentation-express": "^0.42.0", + "@opentelemetry/instrumentation-fastify": "^0.39.0", + "@opentelemetry/instrumentation-fs": "^0.15.0", + "@opentelemetry/instrumentation-generic-pool": "^0.39.0", + "@opentelemetry/instrumentation-graphql": "^0.43.0", + "@opentelemetry/instrumentation-grpc": "^0.53.0", + "@opentelemetry/instrumentation-hapi": "^0.41.0", + "@opentelemetry/instrumentation-http": "^0.53.0", + "@opentelemetry/instrumentation-ioredis": "^0.43.0", + "@opentelemetry/instrumentation-kafkajs": "^0.3.0", + "@opentelemetry/instrumentation-knex": "^0.40.0", + "@opentelemetry/instrumentation-koa": "^0.43.0", + "@opentelemetry/instrumentation-lru-memoizer": "^0.40.0", + "@opentelemetry/instrumentation-memcached": "^0.39.0", + "@opentelemetry/instrumentation-mongodb": "^0.47.0", + "@opentelemetry/instrumentation-mongoose": "^0.42.0", + "@opentelemetry/instrumentation-mysql": "^0.41.0", + "@opentelemetry/instrumentation-mysql2": "^0.41.0", + "@opentelemetry/instrumentation-nestjs-core": "^0.40.0", + "@opentelemetry/instrumentation-net": "^0.39.0", + "@opentelemetry/instrumentation-pg": "^0.44.0", + "@opentelemetry/instrumentation-pino": "^0.42.0", + "@opentelemetry/instrumentation-redis": "^0.42.0", + "@opentelemetry/instrumentation-redis-4": "^0.42.0", + "@opentelemetry/instrumentation-restify": "^0.41.0", + "@opentelemetry/instrumentation-router": "^0.40.0", + "@opentelemetry/instrumentation-socket.io": "^0.42.0", + "@opentelemetry/instrumentation-tedious": "^0.14.0", + "@opentelemetry/instrumentation-undici": "^0.6.0", + "@opentelemetry/instrumentation-winston": "^0.40.0", + "@opentelemetry/resource-detector-alibaba-cloud": "^0.29.1", + "@opentelemetry/resource-detector-aws": "^1.6.1", + "@opentelemetry/resource-detector-azure": "^0.2.11", + "@opentelemetry/resource-detector-container": "^0.4.1", + "@opentelemetry/resource-detector-gcp": "^0.29.11", + "@opentelemetry/resources": "^1.24.0", + "@opentelemetry/sdk-node": "^0.53.0" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.4.1" + } + }, + "node_modules/@opentelemetry/context-async-hooks": { + "version": "1.26.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/context-async-hooks/-/context-async-hooks-1.26.0.tgz", + "integrity": "sha512-HedpXXYzzbaoutw6DFLWLDket2FwLkLpil4hGCZ1xYEIMTcivdfwEOISgdbLEWyG3HW52gTq2V9mOVJrONgiwg==", + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": ">=1.0.0 <1.10.0" + } + }, + "node_modules/@opentelemetry/core": { + "version": "1.26.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/core/-/core-1.26.0.tgz", + "integrity": "sha512-1iKxXXE8415Cdv0yjG3G6hQnB5eVEsJce3QaawX8SjDn0mAS0ZM8fAbZZJD4ajvhC15cePvosSCut404KrIIvQ==", + "dependencies": { + "@opentelemetry/semantic-conventions": "1.27.0" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": ">=1.0.0 <1.10.0" + } + }, + "node_modules/@opentelemetry/exporter-logs-otlp-grpc": { + "version": "0.53.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/exporter-logs-otlp-grpc/-/exporter-logs-otlp-grpc-0.53.0.tgz", + "integrity": "sha512-x5ygAQgWAQOI+UOhyV3z9eW7QU2dCfnfOuIBiyYmC2AWr74f6x/3JBnP27IAcEx6aihpqBYWKnpoUTztkVPAZw==", + "dependencies": { + "@grpc/grpc-js": "^1.7.1", + "@opentelemetry/core": "1.26.0", + "@opentelemetry/otlp-grpc-exporter-base": "0.53.0", + "@opentelemetry/otlp-transformer": "0.53.0", + "@opentelemetry/sdk-logs": "0.53.0" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.0.0" + } + }, + "node_modules/@opentelemetry/exporter-logs-otlp-http": { + "version": "0.53.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/exporter-logs-otlp-http/-/exporter-logs-otlp-http-0.53.0.tgz", + "integrity": "sha512-cSRKgD/n8rb+Yd+Cif6EnHEL/VZg1o8lEcEwFji1lwene6BdH51Zh3feAD9p2TyVoBKrl6Q9Zm2WltSp2k9gWQ==", + "dependencies": { + "@opentelemetry/api-logs": "0.53.0", + "@opentelemetry/core": "1.26.0", + "@opentelemetry/otlp-exporter-base": "0.53.0", + "@opentelemetry/otlp-transformer": "0.53.0", + "@opentelemetry/sdk-logs": "0.53.0" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.0.0" + } + }, + "node_modules/@opentelemetry/exporter-logs-otlp-proto": { + "version": "0.53.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/exporter-logs-otlp-proto/-/exporter-logs-otlp-proto-0.53.0.tgz", + "integrity": "sha512-jhEcVL1deeWNmTUP05UZMriZPSWUBcfg94ng7JuBb1q2NExgnADQFl1VQQ+xo62/JepK+MxQe4xAwlsDQFbISA==", + "dependencies": { + "@opentelemetry/api-logs": "0.53.0", + "@opentelemetry/core": "1.26.0", + "@opentelemetry/otlp-exporter-base": "0.53.0", + "@opentelemetry/otlp-transformer": "0.53.0", + "@opentelemetry/resources": "1.26.0", + "@opentelemetry/sdk-logs": "0.53.0", + "@opentelemetry/sdk-trace-base": "1.26.0" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.0.0" + } + }, + "node_modules/@opentelemetry/exporter-prometheus": { + "version": "0.53.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/exporter-prometheus/-/exporter-prometheus-0.53.0.tgz", + "integrity": "sha512-STP2FZQOykUByPnibbouTirNxnG69Ph8TiMXDsaZuWxGDJ7wsYsRQydJkAVpvG+p0hTMP/hIfZp9zT/1iHpIkQ==", + "dependencies": { + "@opentelemetry/core": "1.26.0", + "@opentelemetry/resources": "1.26.0", + "@opentelemetry/sdk-metrics": "1.26.0" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.3.0" + } + }, + "node_modules/@opentelemetry/exporter-trace-otlp-grpc": { + "version": "0.53.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/exporter-trace-otlp-grpc/-/exporter-trace-otlp-grpc-0.53.0.tgz", + "integrity": "sha512-m6KSh6OBDwfDjpzPVbuJbMgMbkoZfpxYH2r262KckgX9cMYvooWXEKzlJYsNDC6ADr28A1rtRoUVRwNfIN4tUg==", + "dependencies": { + "@grpc/grpc-js": "^1.7.1", + "@opentelemetry/core": "1.26.0", + "@opentelemetry/otlp-grpc-exporter-base": "0.53.0", + "@opentelemetry/otlp-transformer": "0.53.0", + "@opentelemetry/resources": "1.26.0", + "@opentelemetry/sdk-trace-base": "1.26.0" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.0.0" + } + }, + "node_modules/@opentelemetry/exporter-trace-otlp-http": { + "version": "0.53.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/exporter-trace-otlp-http/-/exporter-trace-otlp-http-0.53.0.tgz", + "integrity": "sha512-m7F5ZTq+V9mKGWYpX8EnZ7NjoqAU7VemQ1E2HAG+W/u0wpY1x0OmbxAXfGKFHCspdJk8UKlwPGrpcB8nay3P8A==", + "dependencies": { + "@opentelemetry/core": "1.26.0", + "@opentelemetry/otlp-exporter-base": "0.53.0", + "@opentelemetry/otlp-transformer": "0.53.0", + "@opentelemetry/resources": "1.26.0", + "@opentelemetry/sdk-trace-base": "1.26.0" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.0.0" + } + }, + "node_modules/@opentelemetry/exporter-trace-otlp-proto": { + "version": "0.53.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/exporter-trace-otlp-proto/-/exporter-trace-otlp-proto-0.53.0.tgz", + "integrity": "sha512-T/bdXslwRKj23S96qbvGtaYOdfyew3TjPEKOk5mHjkCmkVl1O9C/YMdejwSsdLdOq2YW30KjR9kVi0YMxZushQ==", + "dependencies": { + "@opentelemetry/core": "1.26.0", + "@opentelemetry/otlp-exporter-base": "0.53.0", + "@opentelemetry/otlp-transformer": "0.53.0", + "@opentelemetry/resources": "1.26.0", + "@opentelemetry/sdk-trace-base": "1.26.0" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.0.0" + } + }, + "node_modules/@opentelemetry/exporter-zipkin": { + "version": "1.26.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/exporter-zipkin/-/exporter-zipkin-1.26.0.tgz", + "integrity": "sha512-PW5R34n3SJHO4t0UetyHKiXL6LixIqWN6lWncg3eRXhKuT30x+b7m5sDJS0kEWRfHeS+kG7uCw2vBzmB2lk3Dw==", + "dependencies": { + "@opentelemetry/core": "1.26.0", + "@opentelemetry/resources": "1.26.0", + "@opentelemetry/sdk-trace-base": "1.26.0", + "@opentelemetry/semantic-conventions": "1.27.0" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.0.0" + } + }, + "node_modules/@opentelemetry/instrumentation": { + "version": "0.53.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation/-/instrumentation-0.53.0.tgz", + "integrity": "sha512-DMwg0hy4wzf7K73JJtl95m/e0boSoWhH07rfvHvYzQtBD3Bmv0Wc1x733vyZBqmFm8OjJD0/pfiUg1W3JjFX0A==", + "dependencies": { + "@opentelemetry/api-logs": "0.53.0", + "@types/shimmer": "^1.2.0", + "import-in-the-middle": "^1.8.1", + "require-in-the-middle": "^7.1.1", + "semver": "^7.5.2", + "shimmer": "^1.2.1" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.3.0" + } + }, + "node_modules/@opentelemetry/instrumentation-amqplib": { + "version": "0.42.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-amqplib/-/instrumentation-amqplib-0.42.0.tgz", + "integrity": "sha512-fiuU6OKsqHJiydHWgTRQ7MnIrJ2lEqsdgFtNIH4LbAUJl/5XmrIeoDzDnox+hfkgWK65jsleFuQDtYb5hW1koQ==", + "dependencies": { + "@opentelemetry/core": "^1.8.0", + "@opentelemetry/instrumentation": "^0.53.0", + "@opentelemetry/semantic-conventions": "^1.27.0" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.3.0" + } + }, + "node_modules/@opentelemetry/instrumentation-aws-lambda": { + "version": "0.44.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-aws-lambda/-/instrumentation-aws-lambda-0.44.0.tgz", + "integrity": "sha512-6vmr7FJIuopZzsQjEQTp4xWtF6kBp7DhD7pPIN8FN0dKUKyuVraABIpgWjMfelaUPy4rTYUGkYqPluhG0wx8Dw==", + "dependencies": { + "@opentelemetry/instrumentation": "^0.53.0", + "@opentelemetry/propagator-aws-xray": "^1.3.1", + "@opentelemetry/resources": "^1.8.0", + "@opentelemetry/semantic-conventions": "^1.27.0", + "@types/aws-lambda": "8.10.143" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.3.0" + } + }, + "node_modules/@opentelemetry/instrumentation-aws-sdk": { + "version": "0.44.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-aws-sdk/-/instrumentation-aws-sdk-0.44.0.tgz", + "integrity": "sha512-HIWFg4TDQsayceiikOnruMmyQ0SZYW6WiR+wknWwWVLHC3lHTCpAnqzp5V42ckArOdlwHZu2Jvq2GMSM4Myx3w==", + "dependencies": { + "@opentelemetry/core": "^1.8.0", + "@opentelemetry/instrumentation": "^0.53.0", + "@opentelemetry/propagation-utils": "^0.30.11", + "@opentelemetry/semantic-conventions": "^1.27.0" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.3.0" + } + }, + "node_modules/@opentelemetry/instrumentation-bunyan": { + "version": "0.41.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-bunyan/-/instrumentation-bunyan-0.41.0.tgz", + "integrity": "sha512-NoQS+gcwQ7pzb2PZFyra6bAxDAVXBMmpKxBblEuXJWirGrAksQllg9XTdmqhrwT/KxUYrbVca/lMams7e51ysg==", + "dependencies": { + "@opentelemetry/api-logs": "^0.53.0", + "@opentelemetry/instrumentation": "^0.53.0", + "@types/bunyan": "1.8.9" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.3.0" + } + }, + "node_modules/@opentelemetry/instrumentation-cassandra-driver": { + "version": "0.41.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-cassandra-driver/-/instrumentation-cassandra-driver-0.41.0.tgz", + "integrity": "sha512-hvTNcC8qjCQEHZTLAlTmDptjsEGqCKpN+90hHH8Nn/GwilGr5TMSwGrlfstdJuZWyw8HAnRUed6bcjvmHHk2Xw==", + "dependencies": { + "@opentelemetry/instrumentation": "^0.53.0", + "@opentelemetry/semantic-conventions": "^1.27.0" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.3.0" + } + }, + "node_modules/@opentelemetry/instrumentation-connect": { + "version": "0.39.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-connect/-/instrumentation-connect-0.39.0.tgz", + "integrity": "sha512-pGBiKevLq7NNglMgqzmeKczF4XQMTOUOTkK8afRHMZMnrK3fcETyTH7lVaSozwiOM3Ws+SuEmXZT7DYrrhxGlg==", + "dependencies": { + "@opentelemetry/core": "^1.8.0", + "@opentelemetry/instrumentation": "^0.53.0", + "@opentelemetry/semantic-conventions": "^1.27.0", + "@types/connect": "3.4.36" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.3.0" + } + }, + "node_modules/@opentelemetry/instrumentation-cucumber": { + "version": "0.9.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-cucumber/-/instrumentation-cucumber-0.9.0.tgz", + "integrity": "sha512-4PQNFnIqnA2WM3ZHpr0xhZpHSqJ5xJ6ppTIzZC7wPqe+ZBpj41vG8B6ieqiPfq+im4QdqbYnzLb3rj48GDEN9g==", + "dependencies": { + "@opentelemetry/instrumentation": "^0.53.0", + "@opentelemetry/semantic-conventions": "^1.27.0" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.0.0" + } + }, + "node_modules/@opentelemetry/instrumentation-dataloader": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-dataloader/-/instrumentation-dataloader-0.12.0.tgz", + "integrity": "sha512-pnPxatoFE0OXIZDQhL2okF//dmbiWFzcSc8pUg9TqofCLYZySSxDCgQc69CJBo5JnI3Gz1KP+mOjS4WAeRIH4g==", + "dependencies": { + "@opentelemetry/instrumentation": "^0.53.0" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.3.0" + } + }, + "node_modules/@opentelemetry/instrumentation-dns": { + "version": "0.39.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-dns/-/instrumentation-dns-0.39.0.tgz", + "integrity": "sha512-+iPzvXqVdJa67QBuz2tuP0UI3LS1/cMMo6dS7360DDtOQX+sQzkiN+mo3Omn4T6ZRhkTDw6c7uwsHBcmL31+1g==", + "dependencies": { + "@opentelemetry/instrumentation": "^0.53.0", + "semver": "^7.5.4" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.3.0" + } + }, + "node_modules/@opentelemetry/instrumentation-express": { + "version": "0.42.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-express/-/instrumentation-express-0.42.0.tgz", + "integrity": "sha512-YNcy7ZfGnLsVEqGXQPT+S0G1AE46N21ORY7i7yUQyfhGAL4RBjnZUqefMI0NwqIl6nGbr1IpF0rZGoN8Q7x12Q==", + "dependencies": { + "@opentelemetry/core": "^1.8.0", + "@opentelemetry/instrumentation": "^0.53.0", + "@opentelemetry/semantic-conventions": "^1.27.0" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.3.0" + } + }, + "node_modules/@opentelemetry/instrumentation-fastify": { + "version": "0.39.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-fastify/-/instrumentation-fastify-0.39.0.tgz", + "integrity": "sha512-SS9uSlKcsWZabhBp2szErkeuuBDgxOUlllwkS92dVaWRnMmwysPhcEgHKB8rUe3BHg/GnZC1eo1hbTZv4YhfoA==", + "dependencies": { + "@opentelemetry/core": "^1.8.0", + "@opentelemetry/instrumentation": "^0.53.0", + "@opentelemetry/semantic-conventions": "^1.27.0" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.3.0" + } + }, + "node_modules/@opentelemetry/instrumentation-fs": { + "version": "0.15.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-fs/-/instrumentation-fs-0.15.0.tgz", + "integrity": "sha512-JWVKdNLpu1skqZQA//jKOcKdJC66TWKqa2FUFq70rKohvaSq47pmXlnabNO+B/BvLfmidfiaN35XakT5RyMl2Q==", + "dependencies": { + "@opentelemetry/core": "^1.8.0", + "@opentelemetry/instrumentation": "^0.53.0" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.3.0" + } + }, + "node_modules/@opentelemetry/instrumentation-generic-pool": { + "version": "0.39.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-generic-pool/-/instrumentation-generic-pool-0.39.0.tgz", + "integrity": "sha512-y4v8Y+tSfRB3NNBvHjbjrn7rX/7sdARG7FuK6zR8PGb28CTa0kHpEGCJqvL9L8xkTNvTXo+lM36ajFGUaK1aNw==", + "dependencies": { + "@opentelemetry/instrumentation": "^0.53.0" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.3.0" + } + }, + "node_modules/@opentelemetry/instrumentation-graphql": { + "version": "0.43.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-graphql/-/instrumentation-graphql-0.43.0.tgz", + "integrity": "sha512-aI3YMmC2McGd8KW5du1a2gBA0iOMOGLqg4s9YjzwbjFwjlmMNFSK1P3AIg374GWg823RPUGfVTIgZ/juk9CVOA==", + "dependencies": { + "@opentelemetry/instrumentation": "^0.53.0" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.3.0" + } + }, + "node_modules/@opentelemetry/instrumentation-grpc": { + "version": "0.53.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-grpc/-/instrumentation-grpc-0.53.0.tgz", + "integrity": "sha512-Ss338T92yE1UCgr9zXSY3cPuaAy27uQw+wAC5IwsQKCXL5wwkiOgkd+2Ngksa9EGsgUEMwGeHi76bDdHFJ5Rrw==", + "dependencies": { + "@opentelemetry/instrumentation": "0.53.0", + "@opentelemetry/semantic-conventions": "1.27.0" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.3.0" + } + }, + "node_modules/@opentelemetry/instrumentation-hapi": { + "version": "0.41.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-hapi/-/instrumentation-hapi-0.41.0.tgz", + "integrity": "sha512-jKDrxPNXDByPlYcMdZjNPYCvw0SQJjN+B1A+QH+sx+sAHsKSAf9hwFiJSrI6C4XdOls43V/f/fkp9ITkHhKFbQ==", + "dependencies": { + "@opentelemetry/core": "^1.8.0", + "@opentelemetry/instrumentation": "^0.53.0", + "@opentelemetry/semantic-conventions": "^1.27.0" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.3.0" + } + }, + "node_modules/@opentelemetry/instrumentation-http": { + "version": "0.53.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-http/-/instrumentation-http-0.53.0.tgz", + "integrity": "sha512-H74ErMeDuZfj7KgYCTOFGWF5W9AfaPnqLQQxeFq85+D29wwV2yqHbz2IKLYpkOh7EI6QwDEl7rZCIxjJLyc/CQ==", + "dependencies": { + "@opentelemetry/core": "1.26.0", + "@opentelemetry/instrumentation": "0.53.0", + "@opentelemetry/semantic-conventions": "1.27.0", + "semver": "^7.5.2" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.3.0" + } + }, + "node_modules/@opentelemetry/instrumentation-ioredis": { + "version": "0.43.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-ioredis/-/instrumentation-ioredis-0.43.0.tgz", + "integrity": "sha512-i3Dke/LdhZbiUAEImmRG3i7Dimm/BD7t8pDDzwepSvIQ6s2X6FPia7561gw+64w+nx0+G9X14D7rEfaMEmmjig==", + "dependencies": { + "@opentelemetry/instrumentation": "^0.53.0", + "@opentelemetry/redis-common": "^0.36.2", + "@opentelemetry/semantic-conventions": "^1.27.0" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.3.0" + } + }, + "node_modules/@opentelemetry/instrumentation-kafkajs": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-kafkajs/-/instrumentation-kafkajs-0.3.0.tgz", + "integrity": "sha512-UnkZueYK1ise8FXQeKlpBd7YYUtC7mM8J0wzUSccEfc/G8UqHQqAzIyYCUOUPUKp8GsjLnWOOK/3hJc4owb7Jg==", + "dependencies": { + "@opentelemetry/instrumentation": "^0.53.0", + "@opentelemetry/semantic-conventions": "^1.27.0" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.3.0" + } + }, + "node_modules/@opentelemetry/instrumentation-knex": { + "version": "0.40.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-knex/-/instrumentation-knex-0.40.0.tgz", + "integrity": "sha512-6jka2jfX8+fqjEbCn6hKWHVWe++mHrIkLQtaJqUkBt3ZBs2xn1+y0khxiDS0v/mNb0bIKDJWwtpKFfsQDM1Geg==", + "dependencies": { + "@opentelemetry/instrumentation": "^0.53.0", + "@opentelemetry/semantic-conventions": "^1.27.0" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.3.0" + } + }, + "node_modules/@opentelemetry/instrumentation-koa": { + "version": "0.43.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-koa/-/instrumentation-koa-0.43.0.tgz", + "integrity": "sha512-lDAhSnmoTIN6ELKmLJBplXzT/Jqs5jGZehuG22EdSMaTwgjMpxMDI1YtlKEhiWPWkrz5LUsd0aOO0ZRc9vn3AQ==", + "dependencies": { + "@opentelemetry/core": "^1.8.0", + "@opentelemetry/instrumentation": "^0.53.0", + "@opentelemetry/semantic-conventions": "^1.27.0" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.3.0" + } + }, + "node_modules/@opentelemetry/instrumentation-lru-memoizer": { + "version": "0.40.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-lru-memoizer/-/instrumentation-lru-memoizer-0.40.0.tgz", + "integrity": "sha512-21xRwZsEdMPnROu/QsaOIODmzw59IYpGFmuC4aFWvMj6stA8+Ei1tX67nkarJttlNjoM94um0N4X26AD7ff54A==", + "dependencies": { + "@opentelemetry/instrumentation": "^0.53.0" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.3.0" + } + }, + "node_modules/@opentelemetry/instrumentation-memcached": { + "version": "0.39.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-memcached/-/instrumentation-memcached-0.39.0.tgz", + "integrity": "sha512-WfwvKAZ9I1qILRP5EUd88HQjwAAL+trXpCpozjBi4U6a0A07gB3fZ5PFAxbXemSjF5tHk9KVoROnqHvQ+zzFSQ==", + "dependencies": { + "@opentelemetry/instrumentation": "^0.53.0", + "@opentelemetry/semantic-conventions": "^1.27.0", + "@types/memcached": "^2.2.6" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.3.0" + } + }, + "node_modules/@opentelemetry/instrumentation-mongodb": { + "version": "0.47.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-mongodb/-/instrumentation-mongodb-0.47.0.tgz", + "integrity": "sha512-yqyXRx2SulEURjgOQyJzhCECSh5i1uM49NUaq9TqLd6fA7g26OahyJfsr9NE38HFqGRHpi4loyrnfYGdrsoVjQ==", + "dependencies": { + "@opentelemetry/instrumentation": "^0.53.0", + "@opentelemetry/sdk-metrics": "^1.9.1", + "@opentelemetry/semantic-conventions": "^1.27.0" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.3.0" + } + }, + "node_modules/@opentelemetry/instrumentation-mongoose": { + "version": "0.42.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-mongoose/-/instrumentation-mongoose-0.42.0.tgz", + "integrity": "sha512-AnWv+RaR86uG3qNEMwt3plKX1ueRM7AspfszJYVkvkehiicC3bHQA6vWdb6Zvy5HAE14RyFbu9+2hUUjR2NSyg==", + "dependencies": { + "@opentelemetry/core": "^1.8.0", + "@opentelemetry/instrumentation": "^0.53.0", + "@opentelemetry/semantic-conventions": "^1.27.0" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.3.0" + } + }, + "node_modules/@opentelemetry/instrumentation-mysql": { + "version": "0.41.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-mysql/-/instrumentation-mysql-0.41.0.tgz", + "integrity": "sha512-jnvrV6BsQWyHS2qb2fkfbfSb1R/lmYwqEZITwufuRl37apTopswu9izc0b1CYRp/34tUG/4k/V39PND6eyiNvw==", + "dependencies": { + "@opentelemetry/instrumentation": "^0.53.0", + "@opentelemetry/semantic-conventions": "^1.27.0", + "@types/mysql": "2.15.26" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.3.0" + } + }, + "node_modules/@opentelemetry/instrumentation-mysql2": { + "version": "0.41.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-mysql2/-/instrumentation-mysql2-0.41.0.tgz", + "integrity": "sha512-REQB0x+IzVTpoNgVmy5b+UnH1/mDByrneimP6sbDHkp1j8QOl1HyWOrBH/6YWR0nrbU3l825Em5PlybjT3232g==", + "dependencies": { + "@opentelemetry/instrumentation": "^0.53.0", + "@opentelemetry/semantic-conventions": "^1.27.0", + "@opentelemetry/sql-common": "^0.40.1" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.3.0" + } + }, + "node_modules/@opentelemetry/instrumentation-nestjs-core": { + "version": "0.40.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-nestjs-core/-/instrumentation-nestjs-core-0.40.0.tgz", + "integrity": "sha512-WF1hCUed07vKmf5BzEkL0wSPinqJgH7kGzOjjMAiTGacofNXjb/y4KQ8loj2sNsh5C/NN7s1zxQuCgbWbVTGKg==", + "dependencies": { + "@opentelemetry/instrumentation": "^0.53.0", + "@opentelemetry/semantic-conventions": "^1.27.0" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.3.0" + } + }, + "node_modules/@opentelemetry/instrumentation-net": { + "version": "0.39.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-net/-/instrumentation-net-0.39.0.tgz", + "integrity": "sha512-rixHoODfI/Cx1B0mH1BpxCT0bRSxktuBDrt9IvpT2KSEutK5hR0RsRdgdz/GKk+BQ4u+IG6godgMSGwNQCueEA==", + "dependencies": { + "@opentelemetry/instrumentation": "^0.53.0", + "@opentelemetry/semantic-conventions": "^1.27.0" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.3.0" + } + }, + "node_modules/@opentelemetry/instrumentation-pg": { + "version": "0.44.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-pg/-/instrumentation-pg-0.44.0.tgz", + "integrity": "sha512-oTWVyzKqXud1BYEGX1loo2o4k4vaU1elr3vPO8NZolrBtFvQ34nx4HgUaexUDuEog00qQt+MLR5gws/p+JXMLQ==", + "dependencies": { + "@opentelemetry/instrumentation": "^0.53.0", + "@opentelemetry/semantic-conventions": "^1.27.0", + "@opentelemetry/sql-common": "^0.40.1", + "@types/pg": "8.6.1", + "@types/pg-pool": "2.0.6" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.3.0" + } + }, + "node_modules/@opentelemetry/instrumentation-pino": { + "version": "0.42.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-pino/-/instrumentation-pino-0.42.0.tgz", + "integrity": "sha512-SoX6FzucBfTuFNMZjdurJhcYWq2ve8/LkhmyVLUW31HpIB45RF1JNum0u4MkGisosDmXlK4njomcgUovShI+WA==", + "dependencies": { + "@opentelemetry/api-logs": "^0.53.0", + "@opentelemetry/core": "^1.25.0", + "@opentelemetry/instrumentation": "^0.53.0" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.3.0" + } + }, + "node_modules/@opentelemetry/instrumentation-redis": { + "version": "0.42.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-redis/-/instrumentation-redis-0.42.0.tgz", + "integrity": "sha512-jZBoqve0rEC51q0HuhjtZVq1DtUvJHzEJ3YKGvzGar2MU1J4Yt5+pQAQYh1W4jSoDyKeaI4hyeUdWM5N0c2lqA==", + "dependencies": { + "@opentelemetry/instrumentation": "^0.53.0", + "@opentelemetry/redis-common": "^0.36.2", + "@opentelemetry/semantic-conventions": "^1.27.0" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.3.0" + } + }, + "node_modules/@opentelemetry/instrumentation-redis-4": { + "version": "0.42.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-redis-4/-/instrumentation-redis-4-0.42.0.tgz", + "integrity": "sha512-NaD+t2JNcOzX/Qa7kMy68JbmoVIV37fT/fJYzLKu2Wwd+0NCxt+K2OOsOakA8GVg8lSpFdbx4V/suzZZ2Pvdjg==", + "dependencies": { + "@opentelemetry/instrumentation": "^0.53.0", + "@opentelemetry/redis-common": "^0.36.2", + "@opentelemetry/semantic-conventions": "^1.27.0" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.3.0" + } + }, + "node_modules/@opentelemetry/instrumentation-restify": { + "version": "0.41.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-restify/-/instrumentation-restify-0.41.0.tgz", + "integrity": "sha512-gKEo+X/wVKUBuD2WDDlF7SlDNBHMWjSQoLxFCsGqeKgHR0MGtwMel8uaDGg9LJ83nKqYy+7Vl/cDFxjba6H+/w==", + "dependencies": { + "@opentelemetry/core": "^1.8.0", + "@opentelemetry/instrumentation": "^0.53.0", + "@opentelemetry/semantic-conventions": "^1.27.0" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.3.0" + } + }, + "node_modules/@opentelemetry/instrumentation-router": { + "version": "0.40.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-router/-/instrumentation-router-0.40.0.tgz", + "integrity": "sha512-bRo4RaclGFiKtmv/N1D0MuzO7DuxbeqMkMCbPPng6mDwzpHAMpHz/K/IxJmF+H1Hi/NYXVjCKvHGClageLe9eA==", + "dependencies": { + "@opentelemetry/instrumentation": "^0.53.0", + "@opentelemetry/semantic-conventions": "^1.27.0" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.3.0" + } + }, + "node_modules/@opentelemetry/instrumentation-socket.io": { + "version": "0.42.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-socket.io/-/instrumentation-socket.io-0.42.0.tgz", + "integrity": "sha512-xB5tdsBzuZyicQTO3hDzJIpHQ7V1BYJ6vWPWgl19gWZDBdjEGc3HOupjkd3BUJyDoDhbMEHGk2nNlkUU99EfkA==", + "dependencies": { + "@opentelemetry/instrumentation": "^0.53.0", + "@opentelemetry/semantic-conventions": "^1.27.0" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.3.0" + } + }, + "node_modules/@opentelemetry/instrumentation-tedious": { + "version": "0.14.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-tedious/-/instrumentation-tedious-0.14.0.tgz", + "integrity": "sha512-ofq7pPhSqvRDvD2FVx3RIWPj76wj4QubfrbqJtEx0A+fWoaYxJOCIQ92tYJh28elAmjMmgF/XaYuJuBhBv5J3A==", + "dependencies": { + "@opentelemetry/instrumentation": "^0.53.0", + "@opentelemetry/semantic-conventions": "^1.27.0", + "@types/tedious": "^4.0.14" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.3.0" + } + }, + "node_modules/@opentelemetry/instrumentation-undici": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-undici/-/instrumentation-undici-0.6.0.tgz", + "integrity": "sha512-ABJBhm5OdhGmbh0S/fOTE4N69IZ00CsHC5ijMYfzbw3E5NwLgpQk5xsljaECrJ8wz1SfXbO03FiSuu5AyRAkvQ==", + "dependencies": { + "@opentelemetry/core": "^1.8.0", + "@opentelemetry/instrumentation": "^0.53.0" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.7.0" + } + }, + "node_modules/@opentelemetry/instrumentation-winston": { + "version": "0.40.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-winston/-/instrumentation-winston-0.40.0.tgz", + "integrity": "sha512-eMk2tKl86YJ8/yHvtDbyhrE35/R0InhO9zuHTflPx8T0+IvKVUhPV71MsJr32sImftqeOww92QHt4Jd+a5db4g==", + "dependencies": { + "@opentelemetry/api-logs": "^0.53.0", + "@opentelemetry/instrumentation": "^0.53.0" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.3.0" + } + }, + "node_modules/@opentelemetry/metrics": { + "version": "0.24.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/metrics/-/metrics-0.24.0.tgz", + "integrity": "sha512-QqmQCzrSuJE+sCOJ2xXNhctWPp/Am9ILs0Y01MDS08PRJoK20akKHM7eC4oU8ZdXphMg8rYgW2w7tY8rqvYnJg==", + "deprecated": "Package renamed to @opentelemetry/sdk-metrics-base", + "dependencies": { + "@opentelemetry/api-metrics": "0.24.0", + "@opentelemetry/core": "0.24.0", + "@opentelemetry/resources": "0.24.0", + "lodash.merge": "^4.6.2" + }, + "engines": { + "node": ">=8.0.0" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.0.1" + } + }, + "node_modules/@opentelemetry/metrics/node_modules/@opentelemetry/core": { + "version": "0.24.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/core/-/core-0.24.0.tgz", + "integrity": "sha512-KpsfxBbFTZT9zaB4Es/fFLbvSzVl9Io/8UUu/TYl4/HgqkmyVInNlWTgRiKyz9nsHzFpGP1kdZJj+YIut0IFsw==", + "dependencies": { + "@opentelemetry/semantic-conventions": "0.24.0", + "semver": "^7.1.3" + }, + "engines": { + "node": ">=8.5.0" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.0.1" + } + }, + "node_modules/@opentelemetry/metrics/node_modules/@opentelemetry/resources": { + "version": "0.24.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/resources/-/resources-0.24.0.tgz", + "integrity": "sha512-uEr2m13IRkjQAjX6fsYqJ21aONCspRvuQunaCl8LbH1NS1Gj82TuRUHF6TM82ulBPK8pU+nrrqXKuky2cMcIzw==", + "dependencies": { + "@opentelemetry/core": "0.24.0", + "@opentelemetry/semantic-conventions": "0.24.0" + }, + "engines": { + "node": ">=8.0.0" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.0.1" + } + }, + "node_modules/@opentelemetry/metrics/node_modules/@opentelemetry/semantic-conventions": { + "version": "0.24.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/semantic-conventions/-/semantic-conventions-0.24.0.tgz", + "integrity": "sha512-a/szuMQV0Quy0/M7kKdglcbRSoorleyyOwbTNNJ32O+RBN766wbQlMTvdimImTmwYWGr+NJOni1EcC242WlRcA==", + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/@opentelemetry/otlp-exporter-base": { + "version": "0.53.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/otlp-exporter-base/-/otlp-exporter-base-0.53.0.tgz", + "integrity": "sha512-UCWPreGQEhD6FjBaeDuXhiMf6kkBODF0ZQzrk/tuQcaVDJ+dDQ/xhJp192H9yWnKxVpEjFrSSLnpqmX4VwX+eA==", + "dependencies": { + "@opentelemetry/core": "1.26.0", + "@opentelemetry/otlp-transformer": "0.53.0" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.0.0" + } + }, + "node_modules/@opentelemetry/otlp-grpc-exporter-base": { + "version": "0.53.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/otlp-grpc-exporter-base/-/otlp-grpc-exporter-base-0.53.0.tgz", + "integrity": "sha512-F7RCN8VN+lzSa4fGjewit8Z5fEUpY/lmMVy5EWn2ZpbAabg3EE3sCLuTNfOiooNGnmvzimUPruoeqeko/5/TzQ==", + "dependencies": { + "@grpc/grpc-js": "^1.7.1", + "@opentelemetry/core": "1.26.0", + "@opentelemetry/otlp-exporter-base": "0.53.0", + "@opentelemetry/otlp-transformer": "0.53.0" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.0.0" + } + }, + "node_modules/@opentelemetry/otlp-transformer": { + "version": "0.53.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/otlp-transformer/-/otlp-transformer-0.53.0.tgz", + "integrity": "sha512-rM0sDA9HD8dluwuBxLetUmoqGJKSAbWenwD65KY9iZhUxdBHRLrIdrABfNDP7aiTjcgK8XFyTn5fhDz7N+W6DA==", + "dependencies": { + "@opentelemetry/api-logs": "0.53.0", + "@opentelemetry/core": "1.26.0", + "@opentelemetry/resources": "1.26.0", + "@opentelemetry/sdk-logs": "0.53.0", + "@opentelemetry/sdk-metrics": "1.26.0", + "@opentelemetry/sdk-trace-base": "1.26.0", + "protobufjs": "^7.3.0" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.3.0" + } + }, + "node_modules/@opentelemetry/propagation-utils": { + "version": "0.30.11", + "resolved": "https://registry.npmjs.org/@opentelemetry/propagation-utils/-/propagation-utils-0.30.11.tgz", + "integrity": "sha512-rY4L/2LWNk5p/22zdunpqVmgz6uN419DsRTw5KFMa6u21tWhXS8devlMy4h8m8nnS20wM7r6yYweCNNKjgLYJw==", + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.0.0" + } + }, + "node_modules/@opentelemetry/propagator-aws-xray": { + "version": "1.26.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/propagator-aws-xray/-/propagator-aws-xray-1.26.0.tgz", + "integrity": "sha512-Sex+JyEZ/xX328TArBqQjh1NZSfNyw5NdASUIi9hnPsnMBMSBaDe7B9JRnXv0swz7niNyAnXa6MY7yOCV76EvA==", + "dependencies": { + "@opentelemetry/core": "1.26.0" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": ">=1.0.0 <1.10.0" + } + }, + "node_modules/@opentelemetry/propagator-b3": { + "version": "1.26.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/propagator-b3/-/propagator-b3-1.26.0.tgz", + "integrity": "sha512-vvVkQLQ/lGGyEy9GT8uFnI047pajSOVnZI2poJqVGD3nJ+B9sFGdlHNnQKophE3lHfnIH0pw2ubrCTjZCgIj+Q==", + "dependencies": { + "@opentelemetry/core": "1.26.0" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": ">=1.0.0 <1.10.0" + } + }, + "node_modules/@opentelemetry/propagator-jaeger": { + "version": "1.26.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/propagator-jaeger/-/propagator-jaeger-1.26.0.tgz", + "integrity": "sha512-DelFGkCdaxA1C/QA0Xilszfr0t4YbGd3DjxiCDPh34lfnFr+VkkrjV9S8ZTJvAzfdKERXhfOxIKBoGPJwoSz7Q==", + "dependencies": { + "@opentelemetry/core": "1.26.0" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": ">=1.0.0 <1.10.0" + } + }, + "node_modules/@opentelemetry/redis-common": { + "version": "0.36.2", + "resolved": "https://registry.npmjs.org/@opentelemetry/redis-common/-/redis-common-0.36.2.tgz", + "integrity": "sha512-faYX1N0gpLhej/6nyp6bgRjzAKXn5GOEMYY7YhciSfCoITAktLUtQ36d24QEWNA1/WA1y6qQunCe0OhHRkVl9g==", + "engines": { + "node": ">=14" + } + }, + "node_modules/@opentelemetry/resource-detector-alibaba-cloud": { + "version": "0.29.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/resource-detector-alibaba-cloud/-/resource-detector-alibaba-cloud-0.29.1.tgz", + "integrity": "sha512-Qshebw6azBuKUqGkVgambZlLS6Xh+LCoLXep1oqW1RSzSOHQxGYDsPs99v8NzO65eJHHOu8wc2yKsWZQAgYsSw==", + "dependencies": { + "@opentelemetry/resources": "^1.0.0", + "@opentelemetry/semantic-conventions": "^1.27.0" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.0.0" + } + }, + "node_modules/@opentelemetry/resource-detector-aws": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/resource-detector-aws/-/resource-detector-aws-1.6.1.tgz", + "integrity": "sha512-A/3lqx9xoew7sFi+AVUUVr6VgB7UJ5qqddkKR3gQk9hWLm1R7HUXVJG09cLcZ7DMNpX13DohPRGmHE/vp1vafw==", + "dependencies": { + "@opentelemetry/core": "^1.0.0", + "@opentelemetry/resources": "^1.10.0", + "@opentelemetry/semantic-conventions": "^1.27.0" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.0.0" + } + }, + "node_modules/@opentelemetry/resource-detector-azure": { + "version": "0.2.11", + "resolved": "https://registry.npmjs.org/@opentelemetry/resource-detector-azure/-/resource-detector-azure-0.2.11.tgz", + "integrity": "sha512-XepvQfTXWyHAoAziCfXGwYbSZL0LHtFk5iuKKN2VE2vzcoiw5Tepi0Qafuwb7CCtpQRReao4H7E29MFbCmh47g==", + "dependencies": { + "@opentelemetry/core": "^1.25.1", + "@opentelemetry/resources": "^1.10.1", + "@opentelemetry/semantic-conventions": "^1.27.0" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.0.0" + } + }, + "node_modules/@opentelemetry/resource-detector-container": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/resource-detector-container/-/resource-detector-container-0.4.1.tgz", + "integrity": "sha512-v0bvO6RxYtbxvY/HwqrPQnZ4UtP4nBq4AOyS30iqV2vEtiLTY1gNTbNvTF1lwN/gg/g5CY1tRSrHcYODDOv0vw==", + "dependencies": { + "@opentelemetry/resources": "^1.10.0", + "@opentelemetry/semantic-conventions": "^1.27.0" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.0.0" + } + }, + "node_modules/@opentelemetry/resource-detector-gcp": { + "version": "0.29.11", + "resolved": "https://registry.npmjs.org/@opentelemetry/resource-detector-gcp/-/resource-detector-gcp-0.29.11.tgz", + "integrity": "sha512-07wJx4nyxD/c2z3n70OQOg8fmoO/baTsq8uU+f7tZaehRNQx76MPkRbV2L902N40Z21SPIG8biUZ30OXE9tOIg==", + "dependencies": { + "@opentelemetry/core": "^1.0.0", + "@opentelemetry/resources": "^1.0.0", + "@opentelemetry/semantic-conventions": "^1.27.0", + "gcp-metadata": "^6.0.0" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.0.0" + } + }, + "node_modules/@opentelemetry/resources": { + "version": "1.26.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/resources/-/resources-1.26.0.tgz", + "integrity": "sha512-CPNYchBE7MBecCSVy0HKpUISEeJOniWqcHaAHpmasZ3j9o6V3AyBzhRc90jdmemq0HOxDr6ylhUbDhBqqPpeNw==", + "dependencies": { + "@opentelemetry/core": "1.26.0", + "@opentelemetry/semantic-conventions": "1.27.0" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": ">=1.0.0 <1.10.0" + } + }, + "node_modules/@opentelemetry/sdk-logs": { + "version": "0.53.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/sdk-logs/-/sdk-logs-0.53.0.tgz", + "integrity": "sha512-dhSisnEgIj/vJZXZV6f6KcTnyLDx/VuQ6l3ejuZpMpPlh9S1qMHiZU9NMmOkVkwwHkMy3G6mEBwdP23vUZVr4g==", + "dependencies": { + "@opentelemetry/api-logs": "0.53.0", + "@opentelemetry/core": "1.26.0", + "@opentelemetry/resources": "1.26.0" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": ">=1.4.0 <1.10.0" + } + }, + "node_modules/@opentelemetry/sdk-metrics": { + "version": "1.26.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/sdk-metrics/-/sdk-metrics-1.26.0.tgz", + "integrity": "sha512-0SvDXmou/JjzSDOjUmetAAvcKQW6ZrvosU0rkbDGpXvvZN+pQF6JbK/Kd4hNdK4q/22yeruqvukXEJyySTzyTQ==", + "dependencies": { + "@opentelemetry/core": "1.26.0", + "@opentelemetry/resources": "1.26.0" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": ">=1.3.0 <1.10.0" + } + }, + "node_modules/@opentelemetry/sdk-node": { + "version": "0.53.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/sdk-node/-/sdk-node-0.53.0.tgz", + "integrity": "sha512-0hsxfq3BKy05xGktwG8YdGdxV978++x40EAKyKr1CaHZRh8uqVlXnclnl7OMi9xLMJEcXUw7lGhiRlArFcovyg==", + "dependencies": { + "@opentelemetry/api-logs": "0.53.0", + "@opentelemetry/core": "1.26.0", + "@opentelemetry/exporter-logs-otlp-grpc": "0.53.0", + "@opentelemetry/exporter-logs-otlp-http": "0.53.0", + "@opentelemetry/exporter-logs-otlp-proto": "0.53.0", + "@opentelemetry/exporter-trace-otlp-grpc": "0.53.0", + "@opentelemetry/exporter-trace-otlp-http": "0.53.0", + "@opentelemetry/exporter-trace-otlp-proto": "0.53.0", + "@opentelemetry/exporter-zipkin": "1.26.0", + "@opentelemetry/instrumentation": "0.53.0", + "@opentelemetry/resources": "1.26.0", + "@opentelemetry/sdk-logs": "0.53.0", + "@opentelemetry/sdk-metrics": "1.26.0", + "@opentelemetry/sdk-trace-base": "1.26.0", + "@opentelemetry/sdk-trace-node": "1.26.0", + "@opentelemetry/semantic-conventions": "1.27.0" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": ">=1.3.0 <1.10.0" + } + }, + "node_modules/@opentelemetry/sdk-trace-base": { + "version": "1.26.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/sdk-trace-base/-/sdk-trace-base-1.26.0.tgz", + "integrity": "sha512-olWQldtvbK4v22ymrKLbIcBi9L2SpMO84sCPY54IVsJhP9fRsxJT194C/AVaAuJzLE30EdhhM1VmvVYR7az+cw==", + "dependencies": { + "@opentelemetry/core": "1.26.0", + "@opentelemetry/resources": "1.26.0", + "@opentelemetry/semantic-conventions": "1.27.0" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": ">=1.0.0 <1.10.0" + } + }, + "node_modules/@opentelemetry/sdk-trace-node": { + "version": "1.26.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/sdk-trace-node/-/sdk-trace-node-1.26.0.tgz", + "integrity": "sha512-Fj5IVKrj0yeUwlewCRwzOVcr5avTuNnMHWf7GPc1t6WaT78J6CJyF3saZ/0RkZfdeNO8IcBl/bNcWMVZBMRW8Q==", + "dependencies": { + "@opentelemetry/context-async-hooks": "1.26.0", + "@opentelemetry/core": "1.26.0", + "@opentelemetry/propagator-b3": "1.26.0", + "@opentelemetry/propagator-jaeger": "1.26.0", + "@opentelemetry/sdk-trace-base": "1.26.0", + "semver": "^7.5.2" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": ">=1.0.0 <1.10.0" + } + }, + "node_modules/@opentelemetry/semantic-conventions": { + "version": "1.27.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/semantic-conventions/-/semantic-conventions-1.27.0.tgz", + "integrity": "sha512-sAay1RrB+ONOem0OZanAR1ZI/k7yDpnOQSQmTMuGImUQb2y8EbSaCJ94FQluM74xoU03vlb2d2U90hZluL6nQg==", + "engines": { + "node": ">=14" + } + }, + "node_modules/@opentelemetry/sql-common": { + "version": "0.40.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/sql-common/-/sql-common-0.40.1.tgz", + "integrity": "sha512-nSDlnHSqzC3pXn/wZEZVLuAuJ1MYMXPBwtv2qAbCa3847SaHItdE7SzUq/Jtb0KZmh1zfAbNi3AAMjztTT4Ugg==", + "dependencies": { + "@opentelemetry/core": "^1.1.0" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.1.0" + } + }, + "node_modules/@protobufjs/aspromise": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@protobufjs/aspromise/-/aspromise-1.1.2.tgz", + "integrity": "sha512-j+gKExEuLmKwvz3OgROXtrJ2UG2x8Ch2YZUxahh+s1F2HZ+wAceUNLkvy6zKCPVRkU++ZWQrdxsUeQXmcg4uoQ==" + }, + "node_modules/@protobufjs/base64": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@protobufjs/base64/-/base64-1.1.2.tgz", + "integrity": "sha512-AZkcAA5vnN/v4PDqKyMR5lx7hZttPDgClv83E//FMNhR2TMcLUhfRUBHCmSl0oi9zMgDDqRUJkSxO3wm85+XLg==" + }, + "node_modules/@protobufjs/codegen": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@protobufjs/codegen/-/codegen-2.0.4.tgz", + "integrity": "sha512-YyFaikqM5sH0ziFZCN3xDC7zeGaB/d0IUb9CATugHWbd1FRFwWwt4ld4OYMPWu5a3Xe01mGAULCdqhMlPl29Jg==" + }, + "node_modules/@protobufjs/eventemitter": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@protobufjs/eventemitter/-/eventemitter-1.1.0.tgz", + "integrity": "sha512-j9ednRT81vYJ9OfVuXG6ERSTdEL1xVsNgqpkxMsbIabzSo3goCjDIveeGv5d03om39ML71RdmrGNjG5SReBP/Q==" + }, + "node_modules/@protobufjs/fetch": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@protobufjs/fetch/-/fetch-1.1.0.tgz", + "integrity": "sha512-lljVXpqXebpsijW71PZaCYeIcE5on1w5DlQy5WH6GLbFryLUrBD4932W/E2BSpfRJWseIL4v/KPgBFxDOIdKpQ==", + "dependencies": { + "@protobufjs/aspromise": "^1.1.1", + "@protobufjs/inquire": "^1.1.0" + } + }, + "node_modules/@protobufjs/float": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@protobufjs/float/-/float-1.0.2.tgz", + "integrity": "sha512-Ddb+kVXlXst9d+R9PfTIxh1EdNkgoRe5tOX6t01f1lYWOvJnSPDBlG241QLzcyPdoNTsblLUdujGSE4RzrTZGQ==" + }, + "node_modules/@protobufjs/inquire": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@protobufjs/inquire/-/inquire-1.1.0.tgz", + "integrity": "sha512-kdSefcPdruJiFMVSbn801t4vFK7KB/5gd2fYvrxhuJYg8ILrmn9SKSX2tZdV6V+ksulWqS7aXjBcRXl3wHoD9Q==" + }, + "node_modules/@protobufjs/path": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@protobufjs/path/-/path-1.1.2.tgz", + "integrity": "sha512-6JOcJ5Tm08dOHAbdR3GrvP+yUUfkjG5ePsHYczMFLq3ZmMkAD98cDgcT2iA1lJ9NVwFd4tH/iSSoe44YWkltEA==" + }, + "node_modules/@protobufjs/pool": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@protobufjs/pool/-/pool-1.1.0.tgz", + "integrity": "sha512-0kELaGSIDBKvcgS4zkjz1PeddatrjYcmMWOlAuAPwAeccUrPHdUqo/J6LiymHHEiJT5NrF1UVwxY14f+fy4WQw==" + }, + "node_modules/@protobufjs/utf8": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@protobufjs/utf8/-/utf8-1.1.0.tgz", + "integrity": "sha512-Vvn3zZrhQZkkBE8LSuW3em98c0FwgO4nxzv6OdSxPKJIEKY2bGbHn+mhGIPerzI4twdxaP8/0+06HBpwf345Lw==" + }, + "node_modules/@types/aws-lambda": { + "version": "8.10.143", + "resolved": "https://registry.npmjs.org/@types/aws-lambda/-/aws-lambda-8.10.143.tgz", + "integrity": "sha512-u5vzlcR14ge/4pMTTMDQr3MF0wEe38B2F9o84uC4F43vN5DGTy63npRrB6jQhyt+C0lGv4ZfiRcRkqJoZuPnmg==" + }, + "node_modules/@types/bunyan": { + "version": "1.8.9", + "resolved": "https://registry.npmjs.org/@types/bunyan/-/bunyan-1.8.9.tgz", + "integrity": "sha512-ZqS9JGpBxVOvsawzmVt30sP++gSQMTejCkIAQ3VdadOcRE8izTyW66hufvwLeH+YEGP6Js2AW7Gz+RMyvrEbmw==", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/connect": { + "version": "3.4.36", + "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.36.tgz", + "integrity": "sha512-P63Zd/JUGq+PdrM1lv0Wv5SBYeA2+CORvbrXbngriYY0jzLUWfQMQQxOhjONEz/wlHOAxOdY7CY65rgQdTjq2w==", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/memcached": { + "version": "2.2.10", + "resolved": "https://registry.npmjs.org/@types/memcached/-/memcached-2.2.10.tgz", + "integrity": "sha512-AM9smvZN55Gzs2wRrqeMHVP7KE8KWgCJO/XL5yCly2xF6EKa4YlbpK+cLSAH4NG/Ah64HrlegmGqW8kYws7Vxg==", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/mysql": { + "version": "2.15.26", + "resolved": "https://registry.npmjs.org/@types/mysql/-/mysql-2.15.26.tgz", + "integrity": "sha512-DSLCOXhkvfS5WNNPbfn2KdICAmk8lLc+/PNvnPnF7gOdMZCxopXduqv0OQ13y/yA/zXTSikZZqVgybUxOEg6YQ==", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/node": { + "version": "22.5.4", + "resolved": "https://registry.npmjs.org/@types/node/-/node-22.5.4.tgz", + "integrity": "sha512-FDuKUJQm/ju9fT/SeX/6+gBzoPzlVCzfzmGkwKvRHQVxi4BntVbyIwf6a4Xn62mrvndLiml6z/UBXIdEVjQLXg==", + "dependencies": { + "undici-types": "~6.19.2" + } + }, + "node_modules/@types/pg": { + "version": "8.6.1", + "resolved": "https://registry.npmjs.org/@types/pg/-/pg-8.6.1.tgz", + "integrity": "sha512-1Kc4oAGzAl7uqUStZCDvaLFqZrW9qWSjXOmBfdgyBP5La7Us6Mg4GBvRlSoaZMhQF/zSj1C8CtKMBkoiT8eL8w==", + "dependencies": { + "@types/node": "*", + "pg-protocol": "*", + "pg-types": "^2.2.0" + } + }, + "node_modules/@types/pg-pool": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/@types/pg-pool/-/pg-pool-2.0.6.tgz", + "integrity": "sha512-TaAUE5rq2VQYxab5Ts7WZhKNmuN78Q6PiFonTDdpbx8a1H0M1vhy3rhiMjl+e2iHmogyMw7jZF4FrE6eJUy5HQ==", + "dependencies": { + "@types/pg": "*" + } + }, + "node_modules/@types/shimmer": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@types/shimmer/-/shimmer-1.2.0.tgz", + "integrity": "sha512-UE7oxhQLLd9gub6JKIAhDq06T0F6FnztwMNRvYgjeQSBeMc1ZG/tA47EwfduvkuQS8apbkM/lpLpWsaCeYsXVg==" + }, + "node_modules/@types/tedious": { + "version": "4.0.14", + "resolved": "https://registry.npmjs.org/@types/tedious/-/tedious-4.0.14.tgz", + "integrity": "sha512-KHPsfX/FoVbUGbyYvk1q9MMQHLPeRZhRJZdO45Q4YjvFkv4hMNghCWTvy7rdKessBsmtz4euWCWAB6/tVpI1Iw==", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/triple-beam": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/@types/triple-beam/-/triple-beam-1.3.5.tgz", + "integrity": "sha512-6WaYesThRMCl19iryMYP7/x2OVgCtbIVflDGFpWnb9irXI3UjYE4AzmYuiUKY1AJstGijoY+MgUszMgRxIYTYw==" + }, + "node_modules/accepts": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", + "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", + "dependencies": { + "mime-types": "~2.1.34", + "negotiator": "0.6.3" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/acorn": { + "version": "8.12.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.12.1.tgz", + "integrity": "sha512-tcpGyI9zbizT9JbV6oYE477V6mTlXvvi0T0G3SNIYE2apm/G5huBa1+K89VGeovbg+jycCrfhl3ADxErOuO6Jg==", + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/acorn-import-attributes": { + "version": "1.9.5", + "resolved": "https://registry.npmjs.org/acorn-import-attributes/-/acorn-import-attributes-1.9.5.tgz", + "integrity": "sha512-n02Vykv5uA3eHGM/Z2dQrcD56kL8TyDb2p1+0P83PClMnC/nc+anbQRhIOWnSq4Ke/KvDPrY3C9hDtC/A3eHnQ==", + "peerDependencies": { + "acorn": "^8" + } + }, + "node_modules/agent-base": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.1.tgz", + "integrity": "sha512-H0TSyFNDMomMNJQBn8wFV5YC/2eJ+VXECwOadZJT554xP6cODZHPX3H9QMQECxvrgiSOP1pHjy1sMWQVYJOUOA==", + "dependencies": { + "debug": "^4.3.4" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/agent-base/node_modules/debug": { + "version": "4.3.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.7.tgz", + "integrity": "sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==", + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/agent-base/node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" + }, + "node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "engines": { + "node": ">=8" + } + }, + "node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/ansi-styles/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/ansi-styles/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + }, + "node_modules/array-flatten": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", + "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==" + }, + "node_modules/async": { + "version": "3.2.6", + "resolved": "https://registry.npmjs.org/async/-/async-3.2.6.tgz", + "integrity": "sha512-htCUDlxyyCLMgaM3xXg0C0LW2xqfuQ6p05pCEIsXuyQ+a1koYKTuBMzRNwmybfLgvJDMd0r1LTn4+E0Ti6C2AA==" + }, + "node_modules/async-exit-hook": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/async-exit-hook/-/async-exit-hook-2.0.1.tgz", + "integrity": "sha512-NW2cX8m1Q7KPA7a5M2ULQeZ2wR5qI5PAbw5L0UOMxdioVk9PMZ0h1TmyZEkPYrCvYjDlFICusOu1dlEKAAeXBw==", + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/bignumber.js": { + "version": "9.1.2", + "resolved": "https://registry.npmjs.org/bignumber.js/-/bignumber.js-9.1.2.tgz", + "integrity": "sha512-2/mKyZH9K85bzOEfhXDBFZTGd1CTs+5IHpeFQo9luiBG7hghdC851Pj2WAhb6E3R6b9tZj/XKhbg4fum+Kepug==", + "engines": { + "node": "*" + } + }, + "node_modules/body-parser": { + "version": "1.20.2", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.2.tgz", + "integrity": "sha512-ml9pReCu3M61kGlqoTm2umSXTlRTuGTx0bfYj+uIUKKYycG5NtSbeetV3faSU6R7ajOPw0g/J1PvK4qNy7s5bA==", + "dependencies": { + "bytes": "3.1.2", + "content-type": "~1.0.5", + "debug": "2.6.9", + "depd": "2.0.0", + "destroy": "1.2.0", + "http-errors": "2.0.0", + "iconv-lite": "0.4.24", + "on-finished": "2.4.1", + "qs": "6.11.0", + "raw-body": "2.5.2", + "type-is": "~1.6.18", + "unpipe": "1.0.0" + }, + "engines": { + "node": ">= 0.8", + "npm": "1.2.8000 || >= 1.4.16" + } + }, + "node_modules/btoa": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/btoa/-/btoa-1.2.1.tgz", + "integrity": "sha512-SB4/MIGlsiVkMcHmT+pSmIPoNDoHg+7cMzmt3Uxt628MTz2487DKSqK/fuhFBrkuqrYv5UCEnACpF4dTFNKc/g==", + "bin": { + "btoa": "bin/btoa.js" + }, + "engines": { + "node": ">= 0.4.0" + } + }, + "node_modules/bytes": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", + "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/call-bind": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.7.tgz", + "integrity": "sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==", + "dependencies": { + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.4", + "set-function-length": "^1.2.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/cjs-module-lexer": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-1.4.1.tgz", + "integrity": "sha512-cuSVIHi9/9E/+821Qjdvngor+xpnlwnuwIyZOaLmHBVdXL+gP+I6QQB9VkO7RI77YIcTV+S1W9AreJ5eN63JBA==" + }, + "node_modules/cliui": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", + "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.1", + "wrap-ansi": "^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/color": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/color/-/color-3.2.1.tgz", + "integrity": "sha512-aBl7dZI9ENN6fUGC7mWpMTPNHmWUSNan9tuWN6ahh5ZLNk9baLJOnSMlrQkHcrfFgz2/RigjUVAjdx36VcemKA==", + "dependencies": { + "color-convert": "^1.9.3", + "color-string": "^1.6.0" + } + }, + "node_modules/color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==" + }, + "node_modules/color-string": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/color-string/-/color-string-1.9.1.tgz", + "integrity": "sha512-shrVawQFojnZv6xM40anx4CkoDP+fZsw/ZerEMsW/pyzsRbElpsL/DBVW7q3ExxwusdNXI3lXpuhEZkzs8p5Eg==", + "dependencies": { + "color-name": "^1.0.0", + "simple-swizzle": "^0.2.2" + } + }, + "node_modules/colorspace": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/colorspace/-/colorspace-1.1.4.tgz", + "integrity": "sha512-BgvKJiuVu1igBUF2kEjRCZXol6wiiGbY5ipL/oVPwm0BL9sIpMIzM8IK7vwuxIIzOXMV3Ey5w+vxhm0rR/TN8w==", + "dependencies": { + "color": "^3.1.3", + "text-hex": "1.0.x" + } + }, + "node_modules/content-disposition": { + "version": "0.5.4", + "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz", + "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==", + "dependencies": { + "safe-buffer": "5.2.1" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/content-type": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz", + "integrity": "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/cookie": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.6.0.tgz", + "integrity": "sha512-U71cyTamuh1CRNCfpGY6to28lxvNwPG4Guz/EVjgf3Jmzv0vlDp1atT9eS5dDjMYHucpHbWns6Lwf3BKz6svdw==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/cookie-signature": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", + "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==" + }, + "node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/define-data-property": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz", + "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==", + "dependencies": { + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "gopd": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/depd": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", + "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/destroy": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", + "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==", + "engines": { + "node": ">= 0.8", + "npm": "1.2.8000 || >= 1.4.16" + } + }, + "node_modules/dotenv": { + "version": "16.4.5", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.4.5.tgz", + "integrity": "sha512-ZmdL2rui+eB2YwhsWzjInR8LldtZHGDoQ1ugH85ppHKwpUHL7j7rN0Ti9NCnGiQbhaZ11FpR+7ao1dNsmduNUg==", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://dotenvx.com" + } + }, + "node_modules/ee-first": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", + "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==" + }, + "node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" + }, + "node_modules/enabled": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/enabled/-/enabled-2.0.0.tgz", + "integrity": "sha512-AKrN98kuwOzMIdAizXGI86UFBoo26CL21UM763y1h/GMSJ4/OHU9k2YlsmBpyScFo/wbLzWQJBMCW4+IO3/+OQ==" + }, + "node_modules/encodeurl": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", + "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/es-define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.0.tgz", + "integrity": "sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==", + "dependencies": { + "get-intrinsic": "^1.2.4" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-errors": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", + "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/escalade": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", + "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==", + "engines": { + "node": ">=6" + } + }, + "node_modules/escape-html": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", + "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==" + }, + "node_modules/etag": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", + "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/express": { + "version": "4.19.2", + "resolved": "https://registry.npmjs.org/express/-/express-4.19.2.tgz", + "integrity": "sha512-5T6nhjsT+EOMzuck8JjBHARTHfMht0POzlA60WV2pMD3gyXw2LZnZ+ueGdNxG+0calOJcWKbpFcuzLZ91YWq9Q==", + "dependencies": { + "accepts": "~1.3.8", + "array-flatten": "1.1.1", + "body-parser": "1.20.2", + "content-disposition": "0.5.4", + "content-type": "~1.0.4", + "cookie": "0.6.0", + "cookie-signature": "1.0.6", + "debug": "2.6.9", + "depd": "2.0.0", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "finalhandler": "1.2.0", + "fresh": "0.5.2", + "http-errors": "2.0.0", + "merge-descriptors": "1.0.1", + "methods": "~1.1.2", + "on-finished": "2.4.1", + "parseurl": "~1.3.3", + "path-to-regexp": "0.1.7", + "proxy-addr": "~2.0.7", + "qs": "6.11.0", + "range-parser": "~1.2.1", + "safe-buffer": "5.2.1", + "send": "0.18.0", + "serve-static": "1.15.0", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "type-is": "~1.6.18", + "utils-merge": "1.0.1", + "vary": "~1.1.2" + }, + "engines": { + "node": ">= 0.10.0" + } + }, + "node_modules/extend": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", + "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==" + }, + "node_modules/fecha": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/fecha/-/fecha-4.2.3.tgz", + "integrity": "sha512-OP2IUU6HeYKJi3i0z4A19kHMQoLVs4Hc+DPqqxI2h/DPZHTm/vjsfC6P0b4jCMy14XizLBqvndQ+UilD7707Jw==" + }, + "node_modules/finalhandler": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.2.0.tgz", + "integrity": "sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==", + "dependencies": { + "debug": "2.6.9", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "on-finished": "2.4.1", + "parseurl": "~1.3.3", + "statuses": "2.0.1", + "unpipe": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/fn.name": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/fn.name/-/fn.name-1.1.0.tgz", + "integrity": "sha512-GRnmB5gPyJpAhTQdSZTSp9uaPSvl09KoYcMQtsB9rQoOmzs9dH6ffeccH+Z+cv6P68Hu5bC6JjRh4Ah/mHSNRw==" + }, + "node_modules/forwarded": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", + "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/fresh": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", + "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/function-bind": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/gaxios": { + "version": "6.7.1", + "resolved": "https://registry.npmjs.org/gaxios/-/gaxios-6.7.1.tgz", + "integrity": "sha512-LDODD4TMYx7XXdpwxAVRAIAuB0bzv0s+ywFonY46k126qzQHT9ygyoa9tncmOiQmmDrik65UYsEkv3lbfqQ3yQ==", + "dependencies": { + "extend": "^3.0.2", + "https-proxy-agent": "^7.0.1", + "is-stream": "^2.0.0", + "node-fetch": "^2.6.9", + "uuid": "^9.0.1" + }, + "engines": { + "node": ">=14" + } + }, + "node_modules/gcp-metadata": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/gcp-metadata/-/gcp-metadata-6.1.0.tgz", + "integrity": "sha512-Jh/AIwwgaxan+7ZUUmRLCjtchyDiqh4KjBJ5tW3plBZb5iL/BPcso8A5DlzeD9qlw0duCamnNdpFjxwaT0KyKg==", + "dependencies": { + "gaxios": "^6.0.0", + "json-bigint": "^1.0.0" + }, + "engines": { + "node": ">=14" + } + }, + "node_modules/get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "engines": { + "node": "6.* || 8.* || >= 10.*" + } + }, + "node_modules/get-intrinsic": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.4.tgz", + "integrity": "sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==", + "dependencies": { + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "has-proto": "^1.0.1", + "has-symbols": "^1.0.3", + "hasown": "^2.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/gopd": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", + "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", + "dependencies": { + "get-intrinsic": "^1.1.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-property-descriptors": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz", + "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==", + "dependencies": { + "es-define-property": "^1.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-proto": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.3.tgz", + "integrity": "sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q==", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-symbols": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", + "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/hasown": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", + "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", + "dependencies": { + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/http-errors": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", + "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", + "dependencies": { + "depd": "2.0.0", + "inherits": "2.0.4", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "toidentifier": "1.0.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/https-proxy-agent": { + "version": "7.0.5", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.5.tgz", + "integrity": "sha512-1e4Wqeblerz+tMKPIq2EMGiiWW1dIjZOksyHWSUm1rmuvw/how9hBHZ38lAGj5ID4Ik6EdkOw7NmWPy6LAwalw==", + "dependencies": { + "agent-base": "^7.0.2", + "debug": "4" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/https-proxy-agent/node_modules/debug": { + "version": "4.3.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.7.tgz", + "integrity": "sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==", + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/https-proxy-agent/node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" + }, + "node_modules/iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/import-in-the-middle": { + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/import-in-the-middle/-/import-in-the-middle-1.11.0.tgz", + "integrity": "sha512-5DimNQGoe0pLUHbR9qK84iWaWjjbsxiqXnw6Qz64+azRgleqv9k2kTt5fw7QsOpmaGYtuxxursnPPsnTKEx10Q==", + "dependencies": { + "acorn": "^8.8.2", + "acorn-import-attributes": "^1.9.5", + "cjs-module-lexer": "^1.2.2", + "module-details-from-path": "^1.0.3" + } + }, + "node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" + }, + "node_modules/ipaddr.js": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", + "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==", + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/is-arrayish": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.3.2.tgz", + "integrity": "sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==" + }, + "node_modules/is-core-module": { + "version": "2.15.1", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.15.1.tgz", + "integrity": "sha512-z0vtXSwucUJtANQWldhbtbt7BnL0vxiFjIdDLAatwhDYty2bad6s+rijD6Ri4YuYJubLzIJLUidCh09e1djEVQ==", + "dependencies": { + "hasown": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "engines": { + "node": ">=8" + } + }, + "node_modules/is-stream": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", + "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/json-bigint": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-bigint/-/json-bigint-1.0.0.tgz", + "integrity": "sha512-SiPv/8VpZuWbvLSMtTDU8hEfrZWg/mH/nV/b4o0CYbSxu1UIQPLdwKOCIyLQX+VIPO5vrLX3i8qtqFyhdPSUSQ==", + "dependencies": { + "bignumber.js": "^9.0.0" + } + }, + "node_modules/kuler": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/kuler/-/kuler-2.0.0.tgz", + "integrity": "sha512-Xq9nH7KlWZmXAtodXDDRE7vs6DU1gTU8zYDHDiWLSip45Egwq3plLHzPn27NgvzL2r1LMPC1vdqh98sQxtqj4A==" + }, + "node_modules/lodash.camelcase": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz", + "integrity": "sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA==" + }, + "node_modules/lodash.merge": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", + "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==" + }, + "node_modules/logform": { + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/logform/-/logform-2.6.1.tgz", + "integrity": "sha512-CdaO738xRapbKIMVn2m4F6KTj4j7ooJ8POVnebSgKo3KBz5axNXRAL7ZdRjIV6NOr2Uf4vjtRkxrFETOioCqSA==", + "dependencies": { + "@colors/colors": "1.6.0", + "@types/triple-beam": "^1.3.2", + "fecha": "^4.2.0", + "ms": "^2.1.1", + "safe-stable-stringify": "^2.3.1", + "triple-beam": "^1.3.0" + }, + "engines": { + "node": ">= 12.0.0" + } + }, + "node_modules/logform/node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" + }, + "node_modules/long": { + "version": "5.2.3", + "resolved": "https://registry.npmjs.org/long/-/long-5.2.3.tgz", + "integrity": "sha512-lcHwpNoggQTObv5apGNCTdJrO69eHOZMi4BNC+rTLER8iHAqGrUVeLh/irVIM7zTw2bOXA8T6uNPeujwOLg/2Q==" + }, + "node_modules/media-typer": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", + "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/merge-descriptors": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", + "integrity": "sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w==" + }, + "node_modules/methods": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", + "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mime": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", + "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", + "bin": { + "mime": "cli.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "dependencies": { + "mime-db": "1.52.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/module-details-from-path": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/module-details-from-path/-/module-details-from-path-1.0.3.tgz", + "integrity": "sha512-ySViT69/76t8VhE1xXHK6Ch4NcDd26gx0MzKXLO+F7NOtnqH68d9zF94nT8ZWSxXh8ELOERsnJO/sWt1xZYw5A==" + }, + "node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" + }, + "node_modules/negotiator": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", + "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/node-fetch": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz", + "integrity": "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==", + "dependencies": { + "whatwg-url": "^5.0.0" + }, + "engines": { + "node": "4.x || >=6.0.0" + }, + "peerDependencies": { + "encoding": "^0.1.0" + }, + "peerDependenciesMeta": { + "encoding": { + "optional": true + } + } + }, + "node_modules/object-inspect": { + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.2.tgz", + "integrity": "sha512-IRZSRuzJiynemAXPYtPe5BoI/RESNYR7TYm50MC5Mqbd3Jmw5y790sErYw3V6SryFJD64b74qQQs9wn5Bg/k3g==", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/on-finished": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", + "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", + "dependencies": { + "ee-first": "1.1.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/one-time": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/one-time/-/one-time-1.0.0.tgz", + "integrity": "sha512-5DXOiRKwuSEcQ/l0kGCF6Q3jcADFv5tSmRaJck/OqkVFcOzutB134KRSfF0xDrL39MNnqxbHBbUUcjZIhTgb2g==", + "dependencies": { + "fn.name": "1.x.x" + } + }, + "node_modules/parseurl": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", + "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/path-parse": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==" + }, + "node_modules/path-to-regexp": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", + "integrity": "sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==" + }, + "node_modules/pg-int8": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/pg-int8/-/pg-int8-1.0.1.tgz", + "integrity": "sha512-WCtabS6t3c8SkpDBUlb1kjOs7l66xsGdKpIPZsg4wR+B3+u9UAum2odSsF9tnvxg80h4ZxLWMy4pRjOsFIqQpw==", + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/pg-protocol": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/pg-protocol/-/pg-protocol-1.6.1.tgz", + "integrity": "sha512-jPIlvgoD63hrEuihvIg+tJhoGjUsLPn6poJY9N5CnlPd91c2T18T/9zBtLxZSb1EhYxBRoZJtzScCaWlYLtktg==" + }, + "node_modules/pg-types": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/pg-types/-/pg-types-2.2.0.tgz", + "integrity": "sha512-qTAAlrEsl8s4OiEQY69wDvcMIdQN6wdz5ojQiOy6YRMuynxenON0O5oCpJI6lshc6scgAY8qvJ2On/p+CXY0GA==", + "dependencies": { + "pg-int8": "1.0.1", + "postgres-array": "~2.0.0", + "postgres-bytea": "~1.0.0", + "postgres-date": "~1.0.4", + "postgres-interval": "^1.1.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/postgres-array": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/postgres-array/-/postgres-array-2.0.0.tgz", + "integrity": "sha512-VpZrUqU5A69eQyW2c5CA1jtLecCsN2U/bD6VilrFDWq5+5UIEVO7nazS3TEcHf1zuPYO/sqGvUvW62g86RXZuA==", + "engines": { + "node": ">=4" + } + }, + "node_modules/postgres-bytea": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/postgres-bytea/-/postgres-bytea-1.0.0.tgz", + "integrity": "sha512-xy3pmLuQqRBZBXDULy7KbaitYqLcmxigw14Q5sj8QBVLqEwXfeybIKVWiqAXTlcvdvb0+xkOtDbfQMOf4lST1w==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/postgres-date": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/postgres-date/-/postgres-date-1.0.7.tgz", + "integrity": "sha512-suDmjLVQg78nMK2UZ454hAG+OAW+HQPZ6n++TNDUX+L0+uUlLywnoxJKDou51Zm+zTCjrCl0Nq6J9C5hP9vK/Q==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/postgres-interval": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/postgres-interval/-/postgres-interval-1.2.0.tgz", + "integrity": "sha512-9ZhXKM/rw350N1ovuWHbGxnGh/SNJ4cnxHiM0rxE4VN41wsg8P8zWn9hv/buK00RP4WvlOyr/RBDiptyxVbkZQ==", + "dependencies": { + "xtend": "^4.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/protobufjs": { + "version": "7.4.0", + "resolved": "https://registry.npmjs.org/protobufjs/-/protobufjs-7.4.0.tgz", + "integrity": "sha512-mRUWCc3KUU4w1jU8sGxICXH/gNS94DvI1gxqDvBzhj1JpcsimQkYiOJfwsPUykUI5ZaspFbSgmBLER8IrQ3tqw==", + "hasInstallScript": true, + "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": ">=13.7.0", + "long": "^5.0.0" + }, + "engines": { + "node": ">=12.0.0" + } + }, + "node_modules/proxy-addr": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", + "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", + "dependencies": { + "forwarded": "0.2.0", + "ipaddr.js": "1.9.1" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/qs": { + "version": "6.11.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz", + "integrity": "sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==", + "dependencies": { + "side-channel": "^1.0.4" + }, + "engines": { + "node": ">=0.6" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/range-parser": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", + "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/raw-body": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.2.tgz", + "integrity": "sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA==", + "dependencies": { + "bytes": "3.1.2", + "http-errors": "2.0.0", + "iconv-lite": "0.4.24", + "unpipe": "1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/readable-stream": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/require-in-the-middle": { + "version": "7.4.0", + "resolved": "https://registry.npmjs.org/require-in-the-middle/-/require-in-the-middle-7.4.0.tgz", + "integrity": "sha512-X34iHADNbNDfr6OTStIAHWSAvvKQRYgLO6duASaVf7J2VA3lvmNYboAHOuLC2huav1IwgZJtyEcJCKVzFxOSMQ==", + "dependencies": { + "debug": "^4.3.5", + "module-details-from-path": "^1.0.3", + "resolve": "^1.22.8" + }, + "engines": { + "node": ">=8.6.0" + } + }, + "node_modules/require-in-the-middle/node_modules/debug": { + "version": "4.3.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.7.tgz", + "integrity": "sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==", + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/require-in-the-middle/node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" + }, + "node_modules/resolve": { + "version": "1.22.8", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz", + "integrity": "sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==", + "dependencies": { + "is-core-module": "^2.13.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/safe-stable-stringify": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/safe-stable-stringify/-/safe-stable-stringify-2.5.0.tgz", + "integrity": "sha512-b3rppTKm9T+PsVCBEOUR46GWI7fdOs00VKZ1+9c1EWDaDMvjQc6tUwuFyIprgGgTcWoVHSKrU8H31ZHA2e0RHA==", + "engines": { + "node": ">=10" + } + }, + "node_modules/safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" + }, + "node_modules/semver": { + "version": "7.6.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", + "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/send": { + "version": "0.18.0", + "resolved": "https://registry.npmjs.org/send/-/send-0.18.0.tgz", + "integrity": "sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==", + "dependencies": { + "debug": "2.6.9", + "depd": "2.0.0", + "destroy": "1.2.0", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "fresh": "0.5.2", + "http-errors": "2.0.0", + "mime": "1.6.0", + "ms": "2.1.3", + "on-finished": "2.4.1", + "range-parser": "~1.2.1", + "statuses": "2.0.1" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/send/node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" + }, + "node_modules/serve-static": { + "version": "1.15.0", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.15.0.tgz", + "integrity": "sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==", + "dependencies": { + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "parseurl": "~1.3.3", + "send": "0.18.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/set-function-length": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz", + "integrity": "sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==", + "dependencies": { + "define-data-property": "^1.1.4", + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.4", + "gopd": "^1.0.1", + "has-property-descriptors": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/setprototypeof": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", + "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==" + }, + "node_modules/shimmer": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/shimmer/-/shimmer-1.2.1.tgz", + "integrity": "sha512-sQTKC1Re/rM6XyFM6fIAGHRPVGvyXfgzIDvzoq608vM+jeyVD0Tu1E6Np0Kc2zAIFWIj963V2800iF/9LPieQw==" + }, + "node_modules/side-channel": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.6.tgz", + "integrity": "sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA==", + "dependencies": { + "call-bind": "^1.0.7", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.4", + "object-inspect": "^1.13.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/simple-swizzle": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/simple-swizzle/-/simple-swizzle-0.2.2.tgz", + "integrity": "sha512-JA//kQgZtbuY83m+xT+tXJkmJncGMTFT+C+g2h2R9uxkYIrE2yy9sgmcLhCnw57/WSD+Eh3J97FPEDFnbXnDUg==", + "dependencies": { + "is-arrayish": "^0.3.1" + } + }, + "node_modules/snappy": { + "version": "7.2.2", + "resolved": "https://registry.npmjs.org/snappy/-/snappy-7.2.2.tgz", + "integrity": "sha512-iADMq1kY0v3vJmGTuKcFWSXt15qYUz7wFkArOrsSg0IFfI3nJqIJvK2/ZbEIndg7erIJLtAVX2nSOqPz7DcwbA==", + "optional": true, + "engines": { + "node": ">= 10" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/Brooooooklyn" + }, + "optionalDependencies": { + "@napi-rs/snappy-android-arm-eabi": "7.2.2", + "@napi-rs/snappy-android-arm64": "7.2.2", + "@napi-rs/snappy-darwin-arm64": "7.2.2", + "@napi-rs/snappy-darwin-x64": "7.2.2", + "@napi-rs/snappy-freebsd-x64": "7.2.2", + "@napi-rs/snappy-linux-arm-gnueabihf": "7.2.2", + "@napi-rs/snappy-linux-arm64-gnu": "7.2.2", + "@napi-rs/snappy-linux-arm64-musl": "7.2.2", + "@napi-rs/snappy-linux-x64-gnu": "7.2.2", + "@napi-rs/snappy-linux-x64-musl": "7.2.2", + "@napi-rs/snappy-win32-arm64-msvc": "7.2.2", + "@napi-rs/snappy-win32-ia32-msvc": "7.2.2", + "@napi-rs/snappy-win32-x64-msvc": "7.2.2" + } + }, + "node_modules/stack-trace": { + "version": "0.0.10", + "resolved": "https://registry.npmjs.org/stack-trace/-/stack-trace-0.0.10.tgz", + "integrity": "sha512-KGzahc7puUKkzyMt+IqAep+TVNbKP+k2Lmwhub39m1AsTSkaDutx56aDCo+HLDzf/D26BIHTJWNiTG1KAJiQCg==", + "engines": { + "node": "*" + } + }, + "node_modules/statuses": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", + "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/string_decoder": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", + "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", + "dependencies": { + "safe-buffer": "~5.2.0" + } + }, + "node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/supports-preserve-symlinks-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/text-hex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/text-hex/-/text-hex-1.0.0.tgz", + "integrity": "sha512-uuVGNWzgJ4yhRaNSiubPY7OjISw4sw4E5Uv0wbjp+OzcbmVU/rsT8ujgcXJhn9ypzsgr5vlzpPqP+MBBKcGvbg==" + }, + "node_modules/toidentifier": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", + "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", + "engines": { + "node": ">=0.6" + } + }, + "node_modules/tr46": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", + "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==" + }, + "node_modules/triple-beam": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/triple-beam/-/triple-beam-1.4.1.tgz", + "integrity": "sha512-aZbgViZrg1QNcG+LULa7nhZpJTZSLm/mXnHXnbAbjmN5aSa0y7V+wvv6+4WaBtpISJzThKy+PIPxc1Nq1EJ9mg==", + "engines": { + "node": ">= 14.0.0" + } + }, + "node_modules/type-is": { + "version": "1.6.18", + "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", + "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", + "dependencies": { + "media-typer": "0.3.0", + "mime-types": "~2.1.24" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/undici-types": { + "version": "6.19.8", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.19.8.tgz", + "integrity": "sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw==" + }, + "node_modules/unpipe": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", + "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/url-polyfill": { + "version": "1.1.12", + "resolved": "https://registry.npmjs.org/url-polyfill/-/url-polyfill-1.1.12.tgz", + "integrity": "sha512-mYFmBHCapZjtcNHW0MDq9967t+z4Dmg5CJ0KqysK3+ZbyoNOWQHksGCTWwDhxGXllkWlOc10Xfko6v4a3ucM6A==" + }, + "node_modules/util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==" + }, + "node_modules/utils-merge": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", + "integrity": "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==", + "engines": { + "node": ">= 0.4.0" + } + }, + "node_modules/uuid": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-9.0.1.tgz", + "integrity": "sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==", + "funding": [ + "https://github.com/sponsors/broofa", + "https://github.com/sponsors/ctavan" + ], + "bin": { + "uuid": "dist/bin/uuid" + } + }, + "node_modules/vary": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", + "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/webidl-conversions": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", + "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==" + }, + "node_modules/whatwg-url": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", + "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", + "dependencies": { + "tr46": "~0.0.3", + "webidl-conversions": "^3.0.0" + } + }, + "node_modules/winston": { + "version": "3.14.2", + "resolved": "https://registry.npmjs.org/winston/-/winston-3.14.2.tgz", + "integrity": "sha512-CO8cdpBB2yqzEf8v895L+GNKYJiEq8eKlHU38af3snQBQ+sdAIUepjMSguOIJC7ICbzm0ZI+Af2If4vIJrtmOg==", + "dependencies": { + "@colors/colors": "^1.6.0", + "@dabh/diagnostics": "^2.0.2", + "async": "^3.2.3", + "is-stream": "^2.0.0", + "logform": "^2.6.0", + "one-time": "^1.0.0", + "readable-stream": "^3.4.0", + "safe-stable-stringify": "^2.3.1", + "stack-trace": "0.0.x", + "triple-beam": "^1.3.0", + "winston-transport": "^4.7.0" + }, + "engines": { + "node": ">= 12.0.0" + } + }, + "node_modules/winston-loki": { + "version": "6.1.2", + "resolved": "https://registry.npmjs.org/winston-loki/-/winston-loki-6.1.2.tgz", + "integrity": "sha512-l1iqDDaEUt63Q8arDsiVCXIrK3jLjPOEc5UTs+WMVnWf8D+A8ZRErAAXKDOduT240aNGzpTbCwe5zfdqqLlzMg==", + "dependencies": { + "async-exit-hook": "2.0.1", + "btoa": "^1.2.1", + "protobufjs": "^7.2.4", + "url-polyfill": "^1.1.12", + "winston-transport": "^4.3.0" + }, + "optionalDependencies": { + "snappy": "^7.2.2" + } + }, + "node_modules/winston-transport": { + "version": "4.7.1", + "resolved": "https://registry.npmjs.org/winston-transport/-/winston-transport-4.7.1.tgz", + "integrity": "sha512-wQCXXVgfv/wUPOfb2x0ruxzwkcZfxcktz6JIMUaPLmcNhO4bZTwA/WtDWK74xV3F2dKu8YadrFv0qhwYjVEwhA==", + "dependencies": { + "logform": "^2.6.1", + "readable-stream": "^3.6.2", + "triple-beam": "^1.3.0" + }, + "engines": { + "node": ">= 12.0.0" + } + }, + "node_modules/wrap-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/xtend": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", + "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", + "engines": { + "node": ">=0.4" + } + }, + "node_modules/y18n": { + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", + "engines": { + "node": ">=10" + } + }, + "node_modules/yargs": { + "version": "17.7.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", + "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", + "dependencies": { + "cliui": "^8.0.1", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.3", + "y18n": "^5.0.5", + "yargs-parser": "^21.1.1" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/yargs-parser": { + "version": "21.1.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", + "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", + "engines": { + "node": ">=12" + } + } + } +} diff --git a/examples/lgtm-end-to-end-observability-testing/package.json b/examples/lgtm-end-to-end-observability-testing/package.json new file mode 100644 index 0000000000..12240be89c --- /dev/null +++ b/examples/lgtm-end-to-end-observability-testing/package.json @@ -0,0 +1,29 @@ +{ + "name": "end-to-end-observability", + "version": "1.0.0", + "main": "index.js", + "scripts": { + "index-with-tracer": "node -r ./tracer.js index.js" + }, + "author": "", + "license": "ISC", + "description": "", + "dependencies": { + "@opentelemetry/api": "^1.9.0", + "@opentelemetry/auto-instrumentations-node": "^0.50.0", + "@opentelemetry/exporter-prometheus": "^0.53.0", + "@opentelemetry/exporter-trace-otlp-grpc": "^0.53.0", + "@opentelemetry/exporter-trace-otlp-http": "^0.53.0", + "@opentelemetry/instrumentation": "^0.53.0", + "@opentelemetry/metrics": "^0.24.0", + "@opentelemetry/resources": "^1.26.0", + "@opentelemetry/sdk-node": "^0.53.0", + "@opentelemetry/sdk-trace-base": "^1.26.0", + "@opentelemetry/sdk-trace-node": "^1.26.0", + "@opentelemetry/semantic-conventions": "^1.27.0", + "dotenv": "^16.4.5", + "express": "^4.19.2", + "winston": "^3.14.2", + "winston-loki": "^6.1.2" + } +} diff --git a/examples/lgtm-end-to-end-observability-testing/prometheus.yml b/examples/lgtm-end-to-end-observability-testing/prometheus.yml new file mode 100644 index 0000000000..9e4c9653eb --- /dev/null +++ b/examples/lgtm-end-to-end-observability-testing/prometheus.yml @@ -0,0 +1,7 @@ +global: + scrape_interval: 5s + +scrape_configs: + - job_name: 'hello-world-app' + static_configs: + - targets: ['app:9464'] # Metrics exposed on port 9464 diff --git a/examples/lgtm-end-to-end-observability-testing/readme.md b/examples/lgtm-end-to-end-observability-testing/readme.md new file mode 100644 index 0000000000..f37d71285f --- /dev/null +++ b/examples/lgtm-end-to-end-observability-testing/readme.md @@ -0,0 +1,55 @@ +# End-to-End Observability + +This project demonstrates an end-to-end observability setup using the Grafana stack: **Grafana**, **Prometheus**, **Loki**, and **Tempo**. The application uses **OpenTelemetry (OTel)** to generate traces and metrics, and **Winston-Loki** to produce logs. + +## Stack Overview + +- **Grafana**: Visualization of metrics, traces, and logs. +- **Prometheus**: Metrics collection and storage. +- **Loki**: Logs aggregation. +- **Tempo**: Distributed tracing backend. +- **OpenTelemetry (OTel)**: Traces and metrics generator. +- **Winston-Loki**: Logging integration for Loki. +- **Tracetest**: Trace-based testing. + +## Prerequisites + +Make sure you have the following installed: + +- [Docker](https://docs.docker.com/get-docker/) +- [Node.js](https://nodejs.org/) + +## Getting Started + +### 1. Copy the `.env.sample` into a `.env` + +- Get your Tracetest token and env id [here](https://app.tracetest.io/retrieve-token). + +### 2. Start the Observability Stack and the App + +Use Docker Compose: + +```bash +docker-compose up -d +``` + +This will spin up the following services: + +- Grafana on [localhost:3000](localhost:3000) +- Prometheus on [localhost:9090](localhost:9090) +- Loki on [localhost:3100](localhost:3100) +- Tempo on [localhost:3200](localhost:3200) +- Tracetest Agent connected to [your Tracetest account](https://app.tracetest.io) +- Node app on [localhost:8081](localhost:8081) + +### 3. Configure Trace Ingestion + +```bash +tracetest apply datastore -f ./tracetest-trace-ingestion.yaml +``` + +### 4. Trigger a Test + +```bash +tracetest run test -f ./tracetest-test.yaml +``` diff --git a/examples/lgtm-end-to-end-observability-testing/tempo.yaml b/examples/lgtm-end-to-end-observability-testing/tempo.yaml new file mode 100644 index 0000000000..22d13a3672 --- /dev/null +++ b/examples/lgtm-end-to-end-observability-testing/tempo.yaml @@ -0,0 +1,41 @@ +stream_over_http_enabled: true +server: + http_listen_port: 80 + log_level: info + +query_frontend: + search: + duration_slo: 5s + throughput_bytes_slo: 1.073741824e+09 + trace_by_id: + duration_slo: 5s + +distributor: + receivers: + jaeger: + protocols: + thrift_http: + grpc: + thrift_binary: + thrift_compact: + zipkin: + otlp: + protocols: + http: + grpc: + opencensus: + +ingester: + max_block_duration: 5m + +compactor: + compaction: + block_retention: 1h + +storage: + trace: + backend: local + wal: + path: /var/tempo/wal + local: + path: /var/tempo/blocks diff --git a/examples/lgtm-end-to-end-observability-testing/tracer.js b/examples/lgtm-end-to-end-observability-testing/tracer.js new file mode 100644 index 0000000000..fbda5efd6c --- /dev/null +++ b/examples/lgtm-end-to-end-observability-testing/tracer.js @@ -0,0 +1,13 @@ +const opentelemetry = require('@opentelemetry/sdk-node') +const { getNodeAutoInstrumentations } = require('@opentelemetry/auto-instrumentations-node') +const { OTLPTraceExporter } = require('@opentelemetry/exporter-trace-otlp-http') +const { ConsoleSpanExporter } = require('@opentelemetry/sdk-trace-node'); +const dotenv = require("dotenv") +dotenv.config() + +const sdk = new opentelemetry.NodeSDK({ + // traceExporter: new ConsoleSpanExporter(), + traceExporter: new OTLPTraceExporter({ url: process.env.OTEL_EXPORTER_OTLP_TRACES_ENDPOINT }), + instrumentations: [getNodeAutoInstrumentations()], +}) +sdk.start() diff --git a/examples/lgtm-end-to-end-observability-testing/tracetest-test.yaml b/examples/lgtm-end-to-end-observability-testing/tracetest-test.yaml new file mode 100644 index 0000000000..5258db48c3 --- /dev/null +++ b/examples/lgtm-end-to-end-observability-testing/tracetest-test.yaml @@ -0,0 +1,17 @@ +type: Test +spec: + id: XyJkbaeIg + name: Test API + trigger: + type: http + httpRequest: + method: GET + url: http://app:8081 + headers: + - key: Content-Type + value: application/json + specs: + - selector: span[tracetest.span.type="http"] + name: "All HTTP Spans: Status code is 200" + assertions: + - attr:http.status_code = 200 diff --git a/examples/lgtm-end-to-end-observability-testing/tracetest-trace-ingestion.yaml b/examples/lgtm-end-to-end-observability-testing/tracetest-trace-ingestion.yaml new file mode 100644 index 0000000000..0d408b8575 --- /dev/null +++ b/examples/lgtm-end-to-end-observability-testing/tracetest-trace-ingestion.yaml @@ -0,0 +1,15 @@ +type: DataStore +spec: + id: current + name: Grafana Tempo + type: tempo + default: true + tempo: + type: http + http: + url: http://tempo + tls: + insecure: true + +# RUN: +# tracetest apply datastore -f tracetest-trace-ingestion.yaml