From ce66ab8220c3de0c5b500e7823336e117a79cd3c Mon Sep 17 00:00:00 2001 From: Max Kurapov Date: Tue, 23 Jul 2024 12:20:15 +0200 Subject: [PATCH] feat(localenv): add trace collection (with Tempo) in local playground (#2816) * feat: add telemetry stack to localenv under command * chore: remove tempo * chore(localenv): update prometheus scrape interval * chore: explicitly set otel collector endpoint * chore: change prometheus scrape interval to 15s * chore: update dashboard queries * chore: add readme * chore: set auto-refresh within grafana dashboard * chore: add psql command * feat(backend): add trace auto-instrumentation * feat(localenv): add tempo to telemetry stack * feat(localenv): add example panel of traces in the grafana dashboard * chore: format for example dashboard * chore: rearrange dashboard * chore(backend): add instrumentation only if enabled --- localenv/telemetry/README.md | 3 +- localenv/telemetry/docker-compose.yml | 17 +- .../provisioning/dashboards/example.json | 106 +++- .../provisioning/datasources/datasources.yaml | 5 + localenv/telemetry/otel-collector-config.yaml | 8 + localenv/telemetry/tempo.yaml | 17 + packages/backend/Dockerfile.prod | 2 +- packages/backend/package.json | 12 +- packages/backend/src/config/app.ts | 5 + packages/backend/src/telemetry/index.ts | 80 +++ packages/backend/src/telemetry/service.ts | 31 +- pnpm-lock.yaml | 465 ++++++++++++++++-- 12 files changed, 683 insertions(+), 68 deletions(-) create mode 100644 localenv/telemetry/tempo.yaml create mode 100644 packages/backend/src/telemetry/index.ts diff --git a/localenv/telemetry/README.md b/localenv/telemetry/README.md index 6638b9eaf0..637df4b547 100644 --- a/localenv/telemetry/README.md +++ b/localenv/telemetry/README.md @@ -8,7 +8,8 @@ The telemetry components include: - **OpenTelemetry Collector**: Collects and processes telemetry data from `cloud-nine-backend` and `happy-life-backend` services. - **Prometheus**: Scrapes metrics from the OpenTelemetry collector, and stores them. -- **Grafana**: Visualizes metrics from Prometheus. +- **Tempo**: Ingests traces from the OpenTelemetry collector, and stores them. +- **Grafana**: Visualizes metrics from Prometheus and traces from Tempo. ## Usage diff --git a/localenv/telemetry/docker-compose.yml b/localenv/telemetry/docker-compose.yml index 89fd3771ae..b44dbe7990 100644 --- a/localenv/telemetry/docker-compose.yml +++ b/localenv/telemetry/docker-compose.yml @@ -2,17 +2,20 @@ services: cloud-nine-backend: environment: ENABLE_TELEMETRY: true + ENABLE_TELEMETRY_TRACES: true LIVENET: false OPEN_TELEMETRY_COLLECTOR_URLS: http://otel-collector:4317 + OPEN_TELEMETRY_TRACE_COLLECTOR_URLS: http://otel-collector:4317 happy-life-backend: environment: ENABLE_TELEMETRY: true + ENABLE_TELEMETRY_TRACES: true LIVENET: false OPEN_TELEMETRY_COLLECTOR_URLS: http://otel-collector:4317 + OPEN_TELEMETRY_TRACE_COLLECTOR_URLS: http://otel-collector:4317 otel-collector: - hostname: otel-collector image: otel/opentelemetry-collector:latest command: "--config=/etc/otel-collector-config.yaml" networks: @@ -30,6 +33,17 @@ services: ports: - "9090:9090" + tempo: + image: grafana/tempo:latest + command: "-config.file=/etc/tempo.yaml" + networks: + - rafiki + ports: + - "3200:3200" + volumes: + - ../telemetry/tempo.yaml:/etc/tempo.yaml + - tempo-data:/var/tempo + grafana: image: grafana/grafana:latest networks: @@ -45,3 +59,4 @@ services: volumes: grafana_storage: + tempo-data: diff --git a/localenv/telemetry/grafana/provisioning/dashboards/example.json b/localenv/telemetry/grafana/provisioning/dashboards/example.json index 1ab7c91b24..85caf94631 100644 --- a/localenv/telemetry/grafana/provisioning/dashboards/example.json +++ b/localenv/telemetry/grafana/provisioning/dashboards/example.json @@ -18,7 +18,6 @@ "editable": true, "fiscalYearStartMonth": 0, "graphTooltip": 0, - "id": 1, "links": [], "panels": [ { @@ -119,6 +118,109 @@ "title": "Transaction Amount", "type": "timeseries" }, + { + "datasource": { + "type": "tempo", + "uid": "P214B5B846CF3925F" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "custom": { + "align": "auto", + "cellOptions": { + "type": "auto" + }, + "inspect": false + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + } + }, + "overrides": [] + }, + "gridPos": { + "h": 8, + "w": 12, + "x": 12, + "y": 0 + }, + "id": 4, + "options": { + "cellHeight": "sm", + "footer": { + "countRows": false, + "fields": "", + "reducer": ["sum"], + "show": false + }, + "showHeader": true, + "sortBy": [ + { + "desc": true, + "displayName": "Duration" + } + ] + }, + "pluginVersion": "11.1.0", + "targets": [ + { + "datasource": { + "type": "tempo", + "uid": "P214B5B846CF3925F" + }, + "filters": [ + { + "id": "9bab4a0a", + "operator": "=", + "scope": "span" + }, + { + "id": "service-name", + "operator": "=", + "scope": "resource", + "tag": "service.name", + "value": ["RAFIKI_NETWORK"], + "valueType": "string" + }, + { + "id": "span-name", + "operator": "=", + "scope": "span", + "tag": "name", + "value": [], + "valueType": "string" + }, + { + "id": "min-duration", + "operator": ">", + "tag": "duration", + "value": "100ms", + "valueType": "duration" + } + ], + "limit": 20, + "queryType": "traceqlSearch", + "refId": "A", + "tableType": "traces" + } + ], + "title": "Traces > 100ms", + "type": "table" + }, { "datasource": { "type": "prometheus", @@ -339,6 +441,6 @@ "timezone": "browser", "title": "Example Dashboard", "uid": "fdr58stwkr6yof", - "version": 1, + "version": 2, "weekStart": "" } diff --git a/localenv/telemetry/grafana/provisioning/datasources/datasources.yaml b/localenv/telemetry/grafana/provisioning/datasources/datasources.yaml index b5ba6389b3..7dda1fa3e4 100644 --- a/localenv/telemetry/grafana/provisioning/datasources/datasources.yaml +++ b/localenv/telemetry/grafana/provisioning/datasources/datasources.yaml @@ -9,3 +9,8 @@ datasources: isDefault: true version: 1 editable: true + - name: Tempo + type: tempo + access: proxy + url: http://tempo:3200 + editable: true diff --git a/localenv/telemetry/otel-collector-config.yaml b/localenv/telemetry/otel-collector-config.yaml index d99ca845bf..32e08f8902 100644 --- a/localenv/telemetry/otel-collector-config.yaml +++ b/localenv/telemetry/otel-collector-config.yaml @@ -12,6 +12,10 @@ exporters: verbosity: detailed prometheus: endpoint: 0.0.0.0:8491 + otlp: + endpoint: http://tempo:8492 + tls: + insecure: true service: pipelines: @@ -19,3 +23,7 @@ service: receivers: [otlp] processors: [batch] exporters: [prometheus, debug] + traces: + receivers: [otlp] + processors: [batch] + exporters: [otlp, debug] diff --git a/localenv/telemetry/tempo.yaml b/localenv/telemetry/tempo.yaml new file mode 100644 index 0000000000..d8ade9376f --- /dev/null +++ b/localenv/telemetry/tempo.yaml @@ -0,0 +1,17 @@ +server: + http_listen_port: 3200 + +distributor: + receivers: + otlp: + protocols: + grpc: + endpoint: 0.0.0.0:8492 + +storage: + trace: + backend: local + local: + path: /var/tempo/blocks + wal: + path: /var/tempo/wal diff --git a/packages/backend/Dockerfile.prod b/packages/backend/Dockerfile.prod index 8547a723ea..f54a68f0a7 100644 --- a/packages/backend/Dockerfile.prod +++ b/packages/backend/Dockerfile.prod @@ -59,4 +59,4 @@ COPY --from=builder /home/rafiki/packages/backend/dist ./packages/backend/dist COPY --from=builder /home/rafiki/packages/token-introspection/dist ./packages/token-introspection/dist COPY --from=builder /home/rafiki/packages/backend/knexfile.js ./packages/backend/knexfile.js -CMD ["node", "/home/rafiki/packages/backend/dist/index.js"] +CMD ["node", "-r", "/home/rafiki/packages/backend/dist/telemetry/index.js", "/home/rafiki/packages/backend/dist/index.js"] diff --git a/packages/backend/package.json b/packages/backend/package.json index b63e9c62f9..fee930b1c8 100644 --- a/packages/backend/package.json +++ b/packages/backend/package.json @@ -15,7 +15,7 @@ "copy-op-schemas": "cp ./node_modules/@interledger/open-payments/dist/openapi/specs/schemas.yaml ./src/openapi/specs/", "prepack": "pnpm build", "postinstall": "pnpm copy-op-schemas", - "dev": "ts-node-dev --inspect=0.0.0.0:9229 --respawn --transpile-only src/index.ts" + "dev": "ts-node-dev --inspect=0.0.0.0:9229 --respawn --transpile-only --require ./src/telemetry/index.ts src/index.ts" }, "devDependencies": { "@apollo/client": "^3.9.9", @@ -64,8 +64,16 @@ "@koa/router": "^12.0.0", "@opentelemetry/api": "^1.8.0", "@opentelemetry/exporter-metrics-otlp-grpc": "^0.49.1", + "@opentelemetry/exporter-trace-otlp-grpc": "^0.52.1", + "@opentelemetry/instrumentation": "^0.52.1", + "@opentelemetry/instrumentation-graphql": "^0.42.0", + "@opentelemetry/instrumentation-http": "^0.52.1", + "@opentelemetry/instrumentation-pg": "^0.43.0", + "@opentelemetry/instrumentation-undici": "^0.4.0", "@opentelemetry/resources": "^1.22.0", - "@opentelemetry/sdk-metrics": "^1.22.0", + "@opentelemetry/sdk-metrics": "^1.25.1", + "@opentelemetry/sdk-node": "^0.52.1", + "@opentelemetry/sdk-trace-node": "^1.25.1", "ajv": "^8.12.0", "axios": "1.6.8", "base64url": "^3.0.1", diff --git a/packages/backend/src/config/app.ts b/packages/backend/src/config/app.ts index 9e5659115c..56a637d97c 100644 --- a/packages/backend/src/config/app.ts +++ b/packages/backend/src/config/app.ts @@ -50,6 +50,11 @@ const privateKeyFileValue = loadOrGenerateKey(privateKeyFileEnv) export const Config = { logLevel: envString('LOG_LEVEL', 'info'), enableTelemetry: envBool('ENABLE_TELEMETRY', false), + enableTelemetryTraces: envBool('ENABLE_TELEMETRY_TRACES', false), + openTelemetryTraceCollectorUrls: envStringArray( + 'OPEN_TELEMETRY_TRACE_COLLECTOR_URLS', + [] + ), livenet: envBool('LIVENET', false), openTelemetryCollectors: envStringArray( 'OPEN_TELEMETRY_COLLECTOR_URLS', diff --git a/packages/backend/src/telemetry/index.ts b/packages/backend/src/telemetry/index.ts new file mode 100644 index 0000000000..da28d3ef36 --- /dev/null +++ b/packages/backend/src/telemetry/index.ts @@ -0,0 +1,80 @@ +import { Config } from '../config/app' +import { OTLPMetricExporter } from '@opentelemetry/exporter-metrics-otlp-grpc' +import { Resource } from '@opentelemetry/resources' +import { + MeterProvider, + PeriodicExportingMetricReader +} from '@opentelemetry/sdk-metrics' + +import { OTLPTraceExporter } from '@opentelemetry/exporter-trace-otlp-grpc' +import { api } from '@opentelemetry/sdk-node' +import { PgInstrumentation } from '@opentelemetry/instrumentation-pg' +import { GraphQLInstrumentation } from '@opentelemetry/instrumentation-graphql' + +import { HttpInstrumentation } from '@opentelemetry/instrumentation-http' +import { + BatchSpanProcessor, + NodeTracerProvider +} from '@opentelemetry/sdk-trace-node' +import { registerInstrumentations } from '@opentelemetry/instrumentation' +import { UndiciInstrumentation } from '@opentelemetry/instrumentation-undici' + +// debug logger: +// diag.setLogger(new DiagConsoleLogger(), DiagLogLevel.DEBUG) + +const SERVICE_NAME = 'RAFIKI_NETWORK' +const rafikiResource = new Resource({ + 'service.name': SERVICE_NAME, + instance: Config.instanceName +}) + +if (Config.enableTelemetry) { + const meterReaders = [] + + for (const url of Config.openTelemetryCollectors) { + const metricExporter = new PeriodicExportingMetricReader({ + exporter: new OTLPMetricExporter({ + url + }), + exportIntervalMillis: Config.openTelemetryExportInterval ?? 15000 + }) + + meterReaders.push(metricExporter) + } + + const meterProvider = new MeterProvider({ + resource: rafikiResource, + readers: meterReaders + }) + + api.metrics.setGlobalMeterProvider(meterProvider) +} + +if (Config.enableTelemetryTraces) { + const tracerProvider = new NodeTracerProvider({ + resource: rafikiResource + }) + + for (const url of Config.openTelemetryTraceCollectorUrls) { + const traceExporter = new OTLPTraceExporter({ + url + }) + + tracerProvider.addSpanProcessor(new BatchSpanProcessor(traceExporter)) + } + + tracerProvider.register() + + registerInstrumentations({ + instrumentations: [ + new UndiciInstrumentation(), + new HttpInstrumentation(), + new PgInstrumentation(), + new GraphQLInstrumentation({ + mergeItems: true, + ignoreTrivialResolveSpans: true, + ignoreResolveSpans: true + }) + ] + }) +} diff --git a/packages/backend/src/telemetry/service.ts b/packages/backend/src/telemetry/service.ts index 31372750d2..f7f18cf0ec 100644 --- a/packages/backend/src/telemetry/service.ts +++ b/packages/backend/src/telemetry/service.ts @@ -1,10 +1,5 @@ import { Counter, Histogram, MetricOptions, metrics } from '@opentelemetry/api' -import { OTLPMetricExporter } from '@opentelemetry/exporter-metrics-otlp-grpc' -import { Resource } from '@opentelemetry/resources' -import { - MeterProvider, - PeriodicExportingMetricReader -} from '@opentelemetry/sdk-metrics' +import { MeterProvider } from '@opentelemetry/sdk-metrics' import { RatesService, isConvertError } from '../rates/service' import { ConvertOptions } from '../rates/util' @@ -41,7 +36,6 @@ interface TelemetryServiceDependencies extends BaseService { } const METER_NAME = 'Rafiki' -const SERVICE_NAME = 'RAFIKI_NETWORK' export function createTelemetryService( deps: TelemetryServiceDependencies @@ -58,32 +52,9 @@ class TelemetryServiceImpl implements TelemetryService { private counters: Map = new Map() private histograms: Map = new Map() constructor(private deps: TelemetryServiceDependencies) { - // debug logger: - // diag.setLogger(new DiagConsoleLogger(), DiagLogLevel.DEBUG) this.instanceName = deps.instanceName this.internalRatesService = deps.internalRatesService this.aseRatesService = deps.aseRatesService - - if (deps.collectorUrls.length === 0) { - deps.logger.info( - 'No collector URLs specified, metrics will not be exported' - ) - return - } - - this.meterProvider = new MeterProvider({ - resource: new Resource({ 'service.name': SERVICE_NAME }), - readers: deps.collectorUrls.map((url) => { - return new PeriodicExportingMetricReader({ - exporter: new OTLPMetricExporter({ - url - }), - exportIntervalMillis: deps.exportIntervalMillis ?? 15000 - }) - }) - }) - - metrics.setGlobalMeterProvider(this.meterProvider) } public async shutdown(): Promise { diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 9ac5c0c794..8f5483bd15 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -359,12 +359,36 @@ importers: '@opentelemetry/exporter-metrics-otlp-grpc': specifier: ^0.49.1 version: 0.49.1(@opentelemetry/api@1.8.0) + '@opentelemetry/exporter-trace-otlp-grpc': + specifier: ^0.52.1 + version: 0.52.1(@opentelemetry/api@1.8.0) + '@opentelemetry/instrumentation': + specifier: ^0.52.1 + version: 0.52.1(@opentelemetry/api@1.8.0) + '@opentelemetry/instrumentation-graphql': + specifier: ^0.42.0 + version: 0.42.0(@opentelemetry/api@1.8.0) + '@opentelemetry/instrumentation-http': + specifier: ^0.52.1 + version: 0.52.1(@opentelemetry/api@1.8.0) + '@opentelemetry/instrumentation-pg': + specifier: ^0.43.0 + version: 0.43.0(@opentelemetry/api@1.8.0) + '@opentelemetry/instrumentation-undici': + specifier: ^0.4.0 + version: 0.4.0(@opentelemetry/api@1.8.0) '@opentelemetry/resources': specifier: ^1.22.0 version: 1.22.0(@opentelemetry/api@1.8.0) '@opentelemetry/sdk-metrics': - specifier: ^1.22.0 - version: 1.22.0(@opentelemetry/api@1.8.0) + specifier: ^1.25.1 + version: 1.25.1(@opentelemetry/api@1.8.0) + '@opentelemetry/sdk-node': + specifier: ^0.52.1 + version: 0.52.1(@opentelemetry/api@1.8.0) + '@opentelemetry/sdk-trace-node': + specifier: ^1.25.1 + version: 1.25.1(@opentelemetry/api@1.8.0) ajv: specifier: ^8.12.0 version: 8.12.0 @@ -2381,7 +2405,7 @@ packages: '@babel/helper-split-export-declaration': 7.22.6 '@babel/parser': 7.23.9 '@babel/types': 7.23.9 - debug: 4.3.4(supports-color@9.4.0) + debug: 4.3.5 globals: 11.12.0 transitivePeerDependencies: - supports-color @@ -5081,7 +5105,7 @@ packages: resolution: {integrity: sha512-7kZUAaLscfgbwBQRbvdMYaZOWyMEcPTH/tJjnyAWJ/dvvs9Ef+CERx/qJb9GExJpl1qipaDGn7KqHnFGGixd0w==} engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} dependencies: - semver: 7.6.0 + semver: 7.6.2 dev: true /@npmcli/git@4.1.0: @@ -5094,7 +5118,7 @@ packages: proc-log: 3.0.0 promise-inflight: 1.0.1 promise-retry: 2.0.1 - semver: 7.6.0 + semver: 7.6.2 which: 3.0.1 transitivePeerDependencies: - bluebird @@ -5110,7 +5134,7 @@ packages: json-parse-even-better-errors: 3.0.1 normalize-package-data: 5.0.0 proc-log: 3.0.0 - semver: 7.6.0 + semver: 7.6.2 transitivePeerDependencies: - bluebird dev: true @@ -5129,11 +5153,27 @@ packages: '@opentelemetry/api': 1.8.0 dev: false + /@opentelemetry/api-logs@0.52.1: + resolution: {integrity: sha512-qnSqB2DQ9TPP96dl8cDubDvrUyWc0/sK81xHTK8eSUspzDM3bsewX903qclQFvVhgStjRWdC5bLb3kQqMkfV5A==} + engines: {node: '>=14'} + dependencies: + '@opentelemetry/api': 1.8.0 + dev: false + /@opentelemetry/api@1.8.0: resolution: {integrity: sha512-I/s6F7yKUDdtMsoBWXJe8Qz40Tui5vsuKCWJEWVL+5q9sSWRzzx6v2KeNsOBEwd94j0eWkpWCH4yB6rZg9Mf0w==} engines: {node: '>=8.0.0'} dev: false + /@opentelemetry/context-async-hooks@1.25.1(@opentelemetry/api@1.8.0): + resolution: {integrity: sha512-UW/ge9zjvAEmRWVapOP0qyCvPulWU6cQxGxDbWEFfGOj1VBBZAuOqTo3X6yWmDTD3Xe15ysCZChHncr2xFMIfQ==} + engines: {node: '>=14'} + peerDependencies: + '@opentelemetry/api': '>=1.0.0 <1.10.0' + dependencies: + '@opentelemetry/api': 1.8.0 + dev: false + /@opentelemetry/core@1.22.0(@opentelemetry/api@1.8.0): resolution: {integrity: sha512-0VoAlT6x+Xzik1v9goJ3pZ2ppi6+xd3aUfg4brfrLkDBHRIVjMP0eBHrKrhB+NKcDyMAg8fAbGL3Npg/F6AwWA==} engines: {node: '>=14'} @@ -5144,6 +5184,16 @@ packages: '@opentelemetry/semantic-conventions': 1.22.0 dev: false + /@opentelemetry/core@1.25.1(@opentelemetry/api@1.8.0): + resolution: {integrity: sha512-GeT/l6rBYWVQ4XArluLVB6WWQ8flHbdb6r2FCHC3smtdOAbrJBIv35tpV/yp9bmYUJf+xmZpu9DRTIeJVhFbEQ==} + engines: {node: '>=14'} + peerDependencies: + '@opentelemetry/api': '>=1.0.0 <1.10.0' + dependencies: + '@opentelemetry/api': 1.8.0 + '@opentelemetry/semantic-conventions': 1.25.1 + dev: false + /@opentelemetry/exporter-metrics-otlp-grpc@0.49.1(@opentelemetry/api@1.8.0): resolution: {integrity: sha512-bq592KlXFCtKy1K+SSx/IgnczbYZqbAMyk9NwR7TOP2m9RTdeO7HwRvoRAsyZc83obEeLjkRXIsrF3OZk9x8TQ==} engines: {node: '>=14'} @@ -5174,6 +5224,135 @@ packages: '@opentelemetry/sdk-metrics': 1.22.0(@opentelemetry/api@1.8.0) dev: false + /@opentelemetry/exporter-trace-otlp-grpc@0.52.1(@opentelemetry/api@1.8.0): + resolution: {integrity: sha512-pVkSH20crBwMTqB3nIN4jpQKUEoB0Z94drIHpYyEqs7UBr+I0cpYyOR3bqjA/UasQUMROb3GX8ZX4/9cVRqGBQ==} + engines: {node: '>=14'} + peerDependencies: + '@opentelemetry/api': ^1.0.0 + dependencies: + '@grpc/grpc-js': 1.10.9 + '@opentelemetry/api': 1.8.0 + '@opentelemetry/core': 1.25.1(@opentelemetry/api@1.8.0) + '@opentelemetry/otlp-grpc-exporter-base': 0.52.1(@opentelemetry/api@1.8.0) + '@opentelemetry/otlp-transformer': 0.52.1(@opentelemetry/api@1.8.0) + '@opentelemetry/resources': 1.25.1(@opentelemetry/api@1.8.0) + '@opentelemetry/sdk-trace-base': 1.25.1(@opentelemetry/api@1.8.0) + dev: false + + /@opentelemetry/exporter-trace-otlp-http@0.52.1(@opentelemetry/api@1.8.0): + resolution: {integrity: sha512-05HcNizx0BxcFKKnS5rwOV+2GevLTVIRA0tRgWYyw4yCgR53Ic/xk83toYKts7kbzcI+dswInUg/4s8oyA+tqg==} + engines: {node: '>=14'} + peerDependencies: + '@opentelemetry/api': ^1.0.0 + dependencies: + '@opentelemetry/api': 1.8.0 + '@opentelemetry/core': 1.25.1(@opentelemetry/api@1.8.0) + '@opentelemetry/otlp-exporter-base': 0.52.1(@opentelemetry/api@1.8.0) + '@opentelemetry/otlp-transformer': 0.52.1(@opentelemetry/api@1.8.0) + '@opentelemetry/resources': 1.25.1(@opentelemetry/api@1.8.0) + '@opentelemetry/sdk-trace-base': 1.25.1(@opentelemetry/api@1.8.0) + dev: false + + /@opentelemetry/exporter-trace-otlp-proto@0.52.1(@opentelemetry/api@1.8.0): + resolution: {integrity: sha512-pt6uX0noTQReHXNeEslQv7x311/F1gJzMnp1HD2qgypLRPbXDeMzzeTngRTUaUbP6hqWNtPxuLr4DEoZG+TcEQ==} + engines: {node: '>=14'} + peerDependencies: + '@opentelemetry/api': ^1.0.0 + dependencies: + '@opentelemetry/api': 1.8.0 + '@opentelemetry/core': 1.25.1(@opentelemetry/api@1.8.0) + '@opentelemetry/otlp-exporter-base': 0.52.1(@opentelemetry/api@1.8.0) + '@opentelemetry/otlp-transformer': 0.52.1(@opentelemetry/api@1.8.0) + '@opentelemetry/resources': 1.25.1(@opentelemetry/api@1.8.0) + '@opentelemetry/sdk-trace-base': 1.25.1(@opentelemetry/api@1.8.0) + dev: false + + /@opentelemetry/exporter-zipkin@1.25.1(@opentelemetry/api@1.8.0): + resolution: {integrity: sha512-RmOwSvkimg7ETwJbUOPTMhJm9A9bG1U8s7Zo3ajDh4zM7eYcycQ0dM7FbLD6NXWbI2yj7UY4q8BKinKYBQksyw==} + engines: {node: '>=14'} + peerDependencies: + '@opentelemetry/api': ^1.0.0 + dependencies: + '@opentelemetry/api': 1.8.0 + '@opentelemetry/core': 1.25.1(@opentelemetry/api@1.8.0) + '@opentelemetry/resources': 1.25.1(@opentelemetry/api@1.8.0) + '@opentelemetry/sdk-trace-base': 1.25.1(@opentelemetry/api@1.8.0) + '@opentelemetry/semantic-conventions': 1.25.1 + dev: false + + /@opentelemetry/instrumentation-graphql@0.42.0(@opentelemetry/api@1.8.0): + resolution: {integrity: sha512-N8SOwoKL9KQSX7z3gOaw5UaTeVQcfDO1c21csVHnmnmGUoqsXbArK2B8VuwPWcv6/BC/i3io+xTo7QGRZ/z28Q==} + engines: {node: '>=14'} + peerDependencies: + '@opentelemetry/api': ^1.3.0 + dependencies: + '@opentelemetry/api': 1.8.0 + '@opentelemetry/instrumentation': 0.52.1(@opentelemetry/api@1.8.0) + transitivePeerDependencies: + - supports-color + dev: false + + /@opentelemetry/instrumentation-http@0.52.1(@opentelemetry/api@1.8.0): + resolution: {integrity: sha512-dG/aevWhaP+7OLv4BQQSEKMJv8GyeOp3Wxl31NHqE8xo9/fYMfEljiZphUHIfyg4gnZ9swMyWjfOQs5GUQe54Q==} + engines: {node: '>=14'} + peerDependencies: + '@opentelemetry/api': ^1.3.0 + dependencies: + '@opentelemetry/api': 1.8.0 + '@opentelemetry/core': 1.25.1(@opentelemetry/api@1.8.0) + '@opentelemetry/instrumentation': 0.52.1(@opentelemetry/api@1.8.0) + '@opentelemetry/semantic-conventions': 1.25.1 + semver: 7.6.2 + transitivePeerDependencies: + - supports-color + dev: false + + /@opentelemetry/instrumentation-pg@0.43.0(@opentelemetry/api@1.8.0): + resolution: {integrity: sha512-og23KLyoxdnAeFs1UWqzSonuCkePUzCX30keSYigIzJe/6WSYA8rnEI5lobcxPEzg+GcU06J7jzokuEHbjVJNw==} + engines: {node: '>=14'} + peerDependencies: + '@opentelemetry/api': ^1.3.0 + dependencies: + '@opentelemetry/api': 1.8.0 + '@opentelemetry/instrumentation': 0.52.1(@opentelemetry/api@1.8.0) + '@opentelemetry/semantic-conventions': 1.22.0 + '@opentelemetry/sql-common': 0.40.1(@opentelemetry/api@1.8.0) + '@types/pg': 8.6.1 + '@types/pg-pool': 2.0.4 + transitivePeerDependencies: + - supports-color + dev: false + + /@opentelemetry/instrumentation-undici@0.4.0(@opentelemetry/api@1.8.0): + resolution: {integrity: sha512-UdMQBpz11SqtWlmDnk5SoqF5QDom4VmW8SVDt9Q2xuMWVh8lc0kVROfoo2pl7zU6H6gFR8eudb3eFXIdrFn0ew==} + engines: {node: '>=14'} + peerDependencies: + '@opentelemetry/api': ^1.7.0 + dependencies: + '@opentelemetry/api': 1.8.0 + '@opentelemetry/core': 1.25.1(@opentelemetry/api@1.8.0) + '@opentelemetry/instrumentation': 0.52.1(@opentelemetry/api@1.8.0) + transitivePeerDependencies: + - supports-color + dev: false + + /@opentelemetry/instrumentation@0.52.1(@opentelemetry/api@1.8.0): + resolution: {integrity: sha512-uXJbYU/5/MBHjMp1FqrILLRuiJCs3Ofk0MeRDk8g1S1gD47U8X3JnSwcMO1rtRo1x1a7zKaQHaoYu49p/4eSKw==} + engines: {node: '>=14'} + peerDependencies: + '@opentelemetry/api': ^1.3.0 + dependencies: + '@opentelemetry/api': 1.8.0 + '@opentelemetry/api-logs': 0.52.1 + '@types/shimmer': 1.2.0 + import-in-the-middle: 1.9.0 + require-in-the-middle: 7.3.0 + semver: 7.6.2 + shimmer: 1.2.1 + transitivePeerDependencies: + - supports-color + dev: false + /@opentelemetry/otlp-exporter-base@0.49.1(@opentelemetry/api@1.8.0): resolution: {integrity: sha512-z6sHliPqDgJU45kQatAettY9/eVF58qVPaTuejw9YWfSRqid9pXPYeegDCSdyS47KAUgAtm+nC28K3pfF27HWg==} engines: {node: '>=14'} @@ -5184,6 +5363,17 @@ packages: '@opentelemetry/core': 1.22.0(@opentelemetry/api@1.8.0) dev: false + /@opentelemetry/otlp-exporter-base@0.52.1(@opentelemetry/api@1.8.0): + resolution: {integrity: sha512-z175NXOtX5ihdlshtYBe5RpGeBoTXVCKPPLiQlD6FHvpM4Ch+p2B0yWKYSrBfLH24H9zjJiBdTrtD+hLlfnXEQ==} + engines: {node: '>=14'} + peerDependencies: + '@opentelemetry/api': ^1.0.0 + dependencies: + '@opentelemetry/api': 1.8.0 + '@opentelemetry/core': 1.25.1(@opentelemetry/api@1.8.0) + '@opentelemetry/otlp-transformer': 0.52.1(@opentelemetry/api@1.8.0) + dev: false + /@opentelemetry/otlp-grpc-exporter-base@0.49.1(@opentelemetry/api@1.8.0): resolution: {integrity: sha512-DNDNUWmOqtKTFJAyOyHHKotVox0NQ/09ETX8fUOeEtyNVHoGekAVtBbvIA3AtK+JflP7LC0PTjlLfruPM3Wy6w==} engines: {node: '>=14'} @@ -5197,6 +5387,19 @@ packages: protobufjs: 7.2.6 dev: false + /@opentelemetry/otlp-grpc-exporter-base@0.52.1(@opentelemetry/api@1.8.0): + resolution: {integrity: sha512-zo/YrSDmKMjG+vPeA9aBBrsQM9Q/f2zo6N04WMB3yNldJRsgpRBeLLwvAt/Ba7dpehDLOEFBd1i2JCoaFtpCoQ==} + engines: {node: '>=14'} + peerDependencies: + '@opentelemetry/api': ^1.0.0 + dependencies: + '@grpc/grpc-js': 1.10.9 + '@opentelemetry/api': 1.8.0 + '@opentelemetry/core': 1.25.1(@opentelemetry/api@1.8.0) + '@opentelemetry/otlp-exporter-base': 0.52.1(@opentelemetry/api@1.8.0) + '@opentelemetry/otlp-transformer': 0.52.1(@opentelemetry/api@1.8.0) + dev: false + /@opentelemetry/otlp-transformer@0.49.1(@opentelemetry/api@1.8.0): resolution: {integrity: sha512-Z+koA4wp9L9e3jkFacyXTGphSWTbOKjwwXMpb0CxNb0kjTHGUxhYRN8GnkLFsFo5NbZPjP07hwAqeEG/uCratQ==} engines: {node: '>=14'} @@ -5212,6 +5415,42 @@ packages: '@opentelemetry/sdk-trace-base': 1.22.0(@opentelemetry/api@1.8.0) dev: false + /@opentelemetry/otlp-transformer@0.52.1(@opentelemetry/api@1.8.0): + resolution: {integrity: sha512-I88uCZSZZtVa0XniRqQWKbjAUm73I8tpEy/uJYPPYw5d7BRdVk0RfTBQw8kSUl01oVWEuqxLDa802222MYyWHg==} + engines: {node: '>=14'} + peerDependencies: + '@opentelemetry/api': '>=1.3.0 <1.10.0' + dependencies: + '@opentelemetry/api': 1.8.0 + '@opentelemetry/api-logs': 0.52.1 + '@opentelemetry/core': 1.25.1(@opentelemetry/api@1.8.0) + '@opentelemetry/resources': 1.25.1(@opentelemetry/api@1.8.0) + '@opentelemetry/sdk-logs': 0.52.1(@opentelemetry/api@1.8.0) + '@opentelemetry/sdk-metrics': 1.25.1(@opentelemetry/api@1.8.0) + '@opentelemetry/sdk-trace-base': 1.25.1(@opentelemetry/api@1.8.0) + protobufjs: 7.3.2 + dev: false + + /@opentelemetry/propagator-b3@1.25.1(@opentelemetry/api@1.8.0): + resolution: {integrity: sha512-p6HFscpjrv7//kE+7L+3Vn00VEDUJB0n6ZrjkTYHrJ58QZ8B3ajSJhRbCcY6guQ3PDjTbxWklyvIN2ojVbIb1A==} + engines: {node: '>=14'} + peerDependencies: + '@opentelemetry/api': '>=1.0.0 <1.10.0' + dependencies: + '@opentelemetry/api': 1.8.0 + '@opentelemetry/core': 1.25.1(@opentelemetry/api@1.8.0) + dev: false + + /@opentelemetry/propagator-jaeger@1.25.1(@opentelemetry/api@1.8.0): + resolution: {integrity: sha512-nBprRf0+jlgxks78G/xq72PipVK+4or9Ypntw0gVZYNTCSK8rg5SeaGV19tV920CMqBD/9UIOiFr23Li/Q8tiA==} + engines: {node: '>=14'} + peerDependencies: + '@opentelemetry/api': '>=1.0.0 <1.10.0' + dependencies: + '@opentelemetry/api': 1.8.0 + '@opentelemetry/core': 1.25.1(@opentelemetry/api@1.8.0) + dev: false + /@opentelemetry/resources@1.22.0(@opentelemetry/api@1.8.0): resolution: {integrity: sha512-+vNeIFPH2hfcNL0AJk/ykJXoUCtR1YaDUZM+p3wZNU4Hq98gzq+7b43xbkXjadD9VhWIUQqEwXyY64q6msPj6A==} engines: {node: '>=14'} @@ -5223,6 +5462,17 @@ packages: '@opentelemetry/semantic-conventions': 1.22.0 dev: false + /@opentelemetry/resources@1.25.1(@opentelemetry/api@1.8.0): + resolution: {integrity: sha512-pkZT+iFYIZsVn6+GzM0kSX+u3MSLCY9md+lIJOoKl/P+gJFfxJte/60Usdp8Ce4rOs8GduUpSPNe1ddGyDT1sQ==} + engines: {node: '>=14'} + peerDependencies: + '@opentelemetry/api': '>=1.0.0 <1.10.0' + dependencies: + '@opentelemetry/api': 1.8.0 + '@opentelemetry/core': 1.25.1(@opentelemetry/api@1.8.0) + '@opentelemetry/semantic-conventions': 1.25.1 + dev: false + /@opentelemetry/sdk-logs@0.49.1(@opentelemetry/api-logs@0.49.1)(@opentelemetry/api@1.8.0): resolution: {integrity: sha512-gCzYWsJE0h+3cuh3/cK+9UwlVFyHvj3PReIOCDOmdeXOp90ZjKRoDOJBc3mvk1LL6wyl1RWIivR8Rg9OToyesw==} engines: {node: '>=14'} @@ -5236,6 +5486,18 @@ packages: '@opentelemetry/resources': 1.22.0(@opentelemetry/api@1.8.0) dev: false + /@opentelemetry/sdk-logs@0.52.1(@opentelemetry/api@1.8.0): + resolution: {integrity: sha512-MBYh+WcPPsN8YpRHRmK1Hsca9pVlyyKd4BxOC4SsgHACnl/bPp4Cri9hWhVm5+2tiQ9Zf4qSc1Jshw9tOLGWQA==} + engines: {node: '>=14'} + peerDependencies: + '@opentelemetry/api': '>=1.4.0 <1.10.0' + dependencies: + '@opentelemetry/api': 1.8.0 + '@opentelemetry/api-logs': 0.52.1 + '@opentelemetry/core': 1.25.1(@opentelemetry/api@1.8.0) + '@opentelemetry/resources': 1.25.1(@opentelemetry/api@1.8.0) + dev: false + /@opentelemetry/sdk-metrics@1.22.0(@opentelemetry/api@1.8.0): resolution: {integrity: sha512-k6iIx6H3TZ+BVMr2z8M16ri2OxWaljg5h8ihGJxi/KQWcjign6FEaEzuigXt5bK9wVEhqAcWLCfarSftaNWkkg==} engines: {node: '>=14'} @@ -5248,6 +5510,42 @@ packages: lodash.merge: 4.6.2 dev: false + /@opentelemetry/sdk-metrics@1.25.1(@opentelemetry/api@1.8.0): + resolution: {integrity: sha512-9Mb7q5ioFL4E4dDrc4wC/A3NTHDat44v4I3p2pLPSxRvqUbDIQyMVr9uK+EU69+HWhlET1VaSrRzwdckWqY15Q==} + engines: {node: '>=14'} + peerDependencies: + '@opentelemetry/api': '>=1.3.0 <1.10.0' + dependencies: + '@opentelemetry/api': 1.8.0 + '@opentelemetry/core': 1.25.1(@opentelemetry/api@1.8.0) + '@opentelemetry/resources': 1.25.1(@opentelemetry/api@1.8.0) + lodash.merge: 4.6.2 + dev: false + + /@opentelemetry/sdk-node@0.52.1(@opentelemetry/api@1.8.0): + resolution: {integrity: sha512-uEG+gtEr6eKd8CVWeKMhH2olcCHM9dEK68pe0qE0be32BcCRsvYURhHaD1Srngh1SQcnQzZ4TP324euxqtBOJA==} + engines: {node: '>=14'} + peerDependencies: + '@opentelemetry/api': '>=1.3.0 <1.10.0' + dependencies: + '@opentelemetry/api': 1.8.0 + '@opentelemetry/api-logs': 0.52.1 + '@opentelemetry/core': 1.25.1(@opentelemetry/api@1.8.0) + '@opentelemetry/exporter-trace-otlp-grpc': 0.52.1(@opentelemetry/api@1.8.0) + '@opentelemetry/exporter-trace-otlp-http': 0.52.1(@opentelemetry/api@1.8.0) + '@opentelemetry/exporter-trace-otlp-proto': 0.52.1(@opentelemetry/api@1.8.0) + '@opentelemetry/exporter-zipkin': 1.25.1(@opentelemetry/api@1.8.0) + '@opentelemetry/instrumentation': 0.52.1(@opentelemetry/api@1.8.0) + '@opentelemetry/resources': 1.25.1(@opentelemetry/api@1.8.0) + '@opentelemetry/sdk-logs': 0.52.1(@opentelemetry/api@1.8.0) + '@opentelemetry/sdk-metrics': 1.25.1(@opentelemetry/api@1.8.0) + '@opentelemetry/sdk-trace-base': 1.25.1(@opentelemetry/api@1.8.0) + '@opentelemetry/sdk-trace-node': 1.25.1(@opentelemetry/api@1.8.0) + '@opentelemetry/semantic-conventions': 1.25.1 + transitivePeerDependencies: + - supports-color + dev: false + /@opentelemetry/sdk-trace-base@1.22.0(@opentelemetry/api@1.8.0): resolution: {integrity: sha512-pfTuSIpCKONC6vkTpv6VmACxD+P1woZf4q0K46nSUvXFvOFqjBYKFaAMkKD3M1mlKUUh0Oajwj35qNjMl80m1Q==} engines: {node: '>=14'} @@ -5260,11 +5558,53 @@ packages: '@opentelemetry/semantic-conventions': 1.22.0 dev: false + /@opentelemetry/sdk-trace-base@1.25.1(@opentelemetry/api@1.8.0): + resolution: {integrity: sha512-C8k4hnEbc5FamuZQ92nTOp8X/diCY56XUTnMiv9UTuJitCzaNNHAVsdm5+HLCdI8SLQsLWIrG38tddMxLVoftw==} + engines: {node: '>=14'} + peerDependencies: + '@opentelemetry/api': '>=1.0.0 <1.10.0' + dependencies: + '@opentelemetry/api': 1.8.0 + '@opentelemetry/core': 1.25.1(@opentelemetry/api@1.8.0) + '@opentelemetry/resources': 1.25.1(@opentelemetry/api@1.8.0) + '@opentelemetry/semantic-conventions': 1.25.1 + dev: false + + /@opentelemetry/sdk-trace-node@1.25.1(@opentelemetry/api@1.8.0): + resolution: {integrity: sha512-nMcjFIKxnFqoez4gUmihdBrbpsEnAX/Xj16sGvZm+guceYE0NE00vLhpDVK6f3q8Q4VFI5xG8JjlXKMB/SkTTQ==} + engines: {node: '>=14'} + peerDependencies: + '@opentelemetry/api': '>=1.0.0 <1.10.0' + dependencies: + '@opentelemetry/api': 1.8.0 + '@opentelemetry/context-async-hooks': 1.25.1(@opentelemetry/api@1.8.0) + '@opentelemetry/core': 1.25.1(@opentelemetry/api@1.8.0) + '@opentelemetry/propagator-b3': 1.25.1(@opentelemetry/api@1.8.0) + '@opentelemetry/propagator-jaeger': 1.25.1(@opentelemetry/api@1.8.0) + '@opentelemetry/sdk-trace-base': 1.25.1(@opentelemetry/api@1.8.0) + semver: 7.6.2 + dev: false + /@opentelemetry/semantic-conventions@1.22.0: resolution: {integrity: sha512-CAOgFOKLybd02uj/GhCdEeeBjOS0yeoDeo/CA7ASBSmenpZHAKGB3iDm/rv3BQLcabb/OprDEsSQ1y0P8A7Siw==} engines: {node: '>=14'} dev: false + /@opentelemetry/semantic-conventions@1.25.1: + resolution: {integrity: sha512-ZDjMJJQRlyk8A1KZFCc+bCbsyrn1wTwdNt56F7twdfUfnHUZUq77/WfONCj8p72NZOyP7pNTdUWSTYC3GTbuuQ==} + engines: {node: '>=14'} + dev: false + + /@opentelemetry/sql-common@0.40.1(@opentelemetry/api@1.8.0): + resolution: {integrity: sha512-nSDlnHSqzC3pXn/wZEZVLuAuJ1MYMXPBwtv2qAbCa3847SaHItdE7SzUq/Jtb0KZmh1zfAbNi3AAMjztTT4Ugg==} + engines: {node: '>=14'} + peerDependencies: + '@opentelemetry/api': ^1.1.0 + dependencies: + '@opentelemetry/api': 1.8.0 + '@opentelemetry/core': 1.25.1(@opentelemetry/api@1.8.0) + dev: false + /@ory/client@1.9.0: resolution: {integrity: sha512-O4a1ijgJtMNIA+ZmWUmCodxX13ID72hOaCB0b9FQGQBzuFgF2x/Yq5D43nrMYZaDtvDvja8J1XIXhUkjz1TDOw==} dependencies: @@ -6478,6 +6818,20 @@ packages: dependencies: undici-types: 5.26.5 + /@types/pg-pool@2.0.4: + resolution: {integrity: sha512-qZAvkv1K3QbmHHFYSNRYPkRjOWRLBYrL4B9c+wG0GSVGBw0NtJwPcgx/DSddeDJvRGMHCEQ4VMEVfuJ/0gZ3XQ==} + dependencies: + '@types/pg': 8.6.1 + dev: false + + /@types/pg@8.6.1: + resolution: {integrity: sha512-1Kc4oAGzAl7uqUStZCDvaLFqZrW9qWSjXOmBfdgyBP5La7Us6Mg4GBvRlSoaZMhQF/zSj1C8CtKMBkoiT8eL8w==} + dependencies: + '@types/node': 20.14.11 + pg-protocol: 1.6.0 + pg-types: 2.2.0 + dev: false + /@types/prop-types@15.7.5: resolution: {integrity: sha512-JCB8C6SnDoQf0cNycqd/35A7MjcnK+ZTqE7judS6o7utxUCg6imJg3QK2qzHKszlTjcj2cn+NwMB2i96ubpj7w==} @@ -6539,6 +6893,10 @@ packages: '@types/mime': 3.0.4 '@types/node': 20.14.11 + /@types/shimmer@1.2.0: + resolution: {integrity: sha512-UE7oxhQLLd9gub6JKIAhDq06T0F6FnztwMNRvYgjeQSBeMc1ZG/tA47EwfduvkuQS8apbkM/lpLpWsaCeYsXVg==} + dev: false + /@types/ssh2-streams@0.1.9: resolution: {integrity: sha512-I2J9jKqfmvXLR5GomDiCoHrEJ58hAOmFrekfFqmCFd+A6gaEStvWnPykoWUwld1PNg4G5ag1LwdA+Lz1doRJqg==} dependencies: @@ -6632,7 +6990,7 @@ packages: grapheme-splitter: 1.0.4 ignore: 5.2.4 natural-compare-lite: 1.4.0 - semver: 7.6.0 + semver: 7.6.2 tsutils: 3.21.0(typescript@5.4.3) typescript: 5.4.3 transitivePeerDependencies: @@ -6802,7 +7160,7 @@ packages: debug: 4.3.4(supports-color@9.4.0) globby: 11.1.0 is-glob: 4.0.3 - semver: 7.6.0 + semver: 7.6.2 tsutils: 3.21.0(typescript@5.4.3) typescript: 5.4.3 transitivePeerDependencies: @@ -6820,10 +7178,10 @@ packages: dependencies: '@typescript-eslint/types': 5.62.0 '@typescript-eslint/visitor-keys': 5.62.0 - debug: 4.3.4(supports-color@9.4.0) + debug: 4.3.5 globby: 11.1.0 is-glob: 4.0.3 - semver: 7.6.0 + semver: 7.6.2 tsutils: 3.21.0(typescript@5.4.3) typescript: 5.4.3 transitivePeerDependencies: @@ -6845,7 +7203,7 @@ packages: globby: 11.1.0 is-glob: 4.0.3 minimatch: 9.0.3 - semver: 7.6.0 + semver: 7.6.2 ts-api-utils: 1.0.1(typescript@5.4.3) typescript: 5.4.3 transitivePeerDependencies: @@ -6866,7 +7224,7 @@ packages: '@typescript-eslint/typescript-estree': 5.60.1(typescript@5.4.3) eslint: 8.57.0 eslint-scope: 5.1.1 - semver: 7.6.0 + semver: 7.6.2 transitivePeerDependencies: - supports-color - typescript @@ -6886,7 +7244,7 @@ packages: '@typescript-eslint/typescript-estree': 5.62.0(typescript@5.4.3) eslint: 8.57.0 eslint-scope: 5.1.1 - semver: 7.6.0 + semver: 7.6.2 transitivePeerDependencies: - supports-color - typescript @@ -6905,7 +7263,7 @@ packages: '@typescript-eslint/types': 7.5.0 '@typescript-eslint/typescript-estree': 7.5.0(typescript@5.4.3) eslint: 8.57.0 - semver: 7.6.0 + semver: 7.6.2 transitivePeerDependencies: - supports-color - typescript @@ -7121,6 +7479,14 @@ packages: mime-types: 2.1.35 negotiator: 0.6.3 + /acorn-import-attributes@1.9.5(acorn@8.12.0): + resolution: {integrity: sha512-n02Vykv5uA3eHGM/Z2dQrcD56kL8TyDb2p1+0P83PClMnC/nc+anbQRhIOWnSq4Ke/KvDPrY3C9hDtC/A3eHnQ==} + peerDependencies: + acorn: ^8 + dependencies: + acorn: 8.12.0 + dev: false + /acorn-jsx@5.3.2(acorn@8.10.0): resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==} peerDependencies: @@ -7983,7 +8349,7 @@ packages: /builtins@5.0.1: resolution: {integrity: sha512-qwVpFEHNfhYJIzNRBvd2C1kyo6jz3ZSMPyyuR47OPdiKWlbYnZNyDWuyR175qDnAJLiCo5fBBqPb3RiXgWlkOQ==} dependencies: - semver: 7.6.0 + semver: 7.6.2 dev: true /busboy@1.6.0: @@ -8215,7 +8581,6 @@ packages: /cjs-module-lexer@1.2.2: resolution: {integrity: sha512-cOU9usZw8/dXIXKtwa8pM0OTJQuJkxMN6w30csNRUerHfeQ5R6U3kkU/FtJeIf3M202OHfY2U8ccInBG7/xogA==} - dev: true /class-variance-authority@0.7.0: resolution: {integrity: sha512-jFI8IQw4hczaL4ALINxqLEXQbWcNjoSkloa4IaufXCJr6QawJyw7tuRysRsrE8w2p/4gGaxKIt/hX3qz/IbD1A==} @@ -11504,6 +11869,15 @@ packages: engines: {node: '>=12.2'} dev: true + /import-in-the-middle@1.9.0: + resolution: {integrity: sha512-Ng1SJINJDBzyUEkx9Mj32XD8G0TQCUb5TMoL9V91CTn6F3wYZLygLuhNFrv0cNMBZaeptnL1zecV6XrIdHJ+xQ==} + dependencies: + acorn: 8.12.0 + acorn-import-attributes: 1.9.5(acorn@8.12.0) + cjs-module-lexer: 1.2.2 + module-details-from-path: 1.0.3 + dev: false + /import-local@3.1.0: resolution: {integrity: sha512-ASB07uLtnDs1o6EHjKpX34BKYDSqnFerfTOJL2HvMqF70LnxpjkzDB8J44oT9pu4AMPkQwf8jl6szgvNd2tRIg==} engines: {node: '>=8'} @@ -12071,7 +12445,7 @@ packages: '@babel/parser': 7.23.9 '@istanbuljs/schema': 0.1.3 istanbul-lib-coverage: 3.2.0 - semver: 7.6.0 + semver: 7.6.2 transitivePeerDependencies: - supports-color dev: true @@ -12505,7 +12879,7 @@ packages: jest-util: 29.7.0 natural-compare: 1.4.0 pretty-format: 29.7.0 - semver: 7.6.0 + semver: 7.6.2 transitivePeerDependencies: - supports-color dev: true @@ -14386,6 +14760,10 @@ packages: ufo: 1.1.1 dev: true + /module-details-from-path@1.0.3: + resolution: {integrity: sha512-ySViT69/76t8VhE1xXHK6Ch4NcDd26gx0MzKXLO+F7NOtnqH68d9zF94nT8ZWSxXh8ELOERsnJO/sWt1xZYw5A==} + dev: false + /morgan@1.10.0: resolution: {integrity: sha512-AbegBVI4sh6El+1gNwvD5YIck7nSA36weD7xvIxG4in80j/UoK8AEGaWnnz8v1GxonMCltmlNs5ZKbGvl9b1XQ==} engines: {node: '>= 0.8.0'} @@ -14599,7 +14977,7 @@ packages: dependencies: hosted-git-info: 6.1.1 is-core-module: 2.13.0 - semver: 7.6.0 + semver: 7.6.2 validate-npm-package-license: 3.0.4 dev: true @@ -14626,7 +15004,7 @@ packages: resolution: {integrity: sha512-W29RiK/xtpCGqn6f3ixfRYGk+zRyr+Ew9F2E20BfXxT5/euLdA/Nm7fO7OeTGuAmTs30cpgInyJ0cYe708YTZw==} engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} dependencies: - semver: 7.6.0 + semver: 7.6.2 dev: true /npm-normalize-package-bin@3.0.1: @@ -14640,7 +15018,7 @@ packages: dependencies: hosted-git-info: 6.1.1 proc-log: 3.0.0 - semver: 7.6.0 + semver: 7.6.2 validate-npm-package-name: 5.0.0 dev: true @@ -14651,7 +15029,7 @@ packages: npm-install-checks: 6.3.0 npm-normalize-package-bin: 3.0.1 npm-package-arg: 10.1.0 - semver: 7.6.0 + semver: 7.6.2 dev: true /npm-run-all2@6.1.2: @@ -15740,6 +16118,25 @@ packages: long: 5.2.3 dev: false + /protobufjs@7.3.2: + resolution: {integrity: sha512-RXyHaACeqXeqAKGLDl68rQKbmObRsTIn4TYVUUug1KfS47YWCo5MacGITEryugIgZqORCvJWEk4l449POg5Txg==} + engines: {node: '>=12.0.0'} + requiresBuild: 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': 20.14.11 + long: 5.2.3 + dev: false + /proxy-addr@2.0.7: resolution: {integrity: sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==} engines: {node: '>= 0.10'} @@ -16308,6 +16705,17 @@ packages: resolution: {integrity: sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==} engines: {node: '>=0.10.0'} + /require-in-the-middle@7.3.0: + resolution: {integrity: sha512-nQFEv9gRw6SJAwWD2LrL0NmQvAcO7FBwJbwmr2ttPAacfy0xuiOjE5zt+zM4xDyuyvUaxBi/9gb2SoCyNEVJcw==} + engines: {node: '>=8.6.0'} + dependencies: + debug: 4.3.5 + module-details-from-path: 1.0.3 + resolve: 1.22.8 + transitivePeerDependencies: + - supports-color + dev: false + /require-like@0.1.2: resolution: {integrity: sha512-oyrU88skkMtDdauHDuKVrgR+zuItqr6/c//FXzvmxRGMexSDc6hNvJInGW3LL46n+8b50RykrvwSUIIQH2LQ5A==} dev: true @@ -16625,19 +17033,10 @@ packages: lru-cache: 6.0.0 dev: true - /semver@7.6.0: - resolution: {integrity: sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==} - engines: {node: '>=10'} - hasBin: true - dependencies: - lru-cache: 6.0.0 - dev: true - /semver@7.6.2: resolution: {integrity: sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w==} engines: {node: '>=10'} hasBin: true - dev: false /send@0.18.0: resolution: {integrity: sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==} @@ -16770,6 +17169,10 @@ packages: '@shikijs/core': 1.10.0 dev: false + /shimmer@1.2.1: + resolution: {integrity: sha512-sQTKC1Re/rM6XyFM6fIAGHRPVGvyXfgzIDvzoq608vM+jeyVD0Tu1E6Np0Kc2zAIFWIj963V2800iF/9LPieQw==} + dev: false + /side-channel@1.0.5: resolution: {integrity: sha512-QcgiIWV4WV7qWExbN5llt6frQB/lBven9pqliLXfGPB+K9ZYXxDozp0wLkHS24kWCm+6YXH/f0HhnObZnZOBnQ==} engines: {node: '>= 0.4'}