From 624f890f3e1e0eb835081008028c2f5a046ea81f Mon Sep 17 00:00:00 2001 From: "Diego Ferreira L.G.Oliveira" Date: Sun, 8 Mar 2026 19:21:00 -0300 Subject: [PATCH 1/5] feat: monitoramento de logs via tempo --- api/docker-compose.yaml | 50 +- api/package.json | 12 +- .../{logs-api => logs}/logs-dashboard.json | 4 +- .../grafana/dashboards/logs/requisicoes.json | 1414 +++++++++++ .../grafana/provisioning/datasources/loki.yml | 5 + .../provisioning/datasources/tempo.yaml | 23 + api/painel-analitico/monitoring/tempo.yaml | 40 + api/pnpm-lock.yaml | 2195 ++++++++++++++++- .../consumers/chamado.consumer.test.ts | 6 +- api/src/app.ts | 63 +- .../infrastructure/database/prisma/client.ts | 4 +- .../http/middlewares/tracing.middleware.ts | 16 + .../infrastructure/messaging/kafka/client.ts | 12 +- .../kafka/consumers/chamado.consumer.ts | 7 +- .../kafka/consumers/notificacao.consumer.ts | 7 +- api/src/server.ts | 3 + api/src/shared/config/logger.ts | 40 +- api/src/shared/config/loki-sender.ts | 34 + api/src/shared/config/loki-transport.mjs | 42 + api/src/shared/config/swagger.ts | 2 +- api/src/shared/config/tracing.ts | 36 + api/tsconfig.json | 1 + 22 files changed, 3849 insertions(+), 167 deletions(-) rename api/painel-analitico/grafana/dashboards/{logs-api => logs}/logs-dashboard.json (99%) create mode 100644 api/painel-analitico/grafana/dashboards/logs/requisicoes.json create mode 100644 api/painel-analitico/grafana/provisioning/datasources/tempo.yaml create mode 100644 api/painel-analitico/monitoring/tempo.yaml create mode 100644 api/src/infrastructure/http/middlewares/tracing.middleware.ts create mode 100644 api/src/shared/config/loki-sender.ts create mode 100644 api/src/shared/config/loki-transport.mjs create mode 100644 api/src/shared/config/tracing.ts diff --git a/api/docker-compose.yaml b/api/docker-compose.yaml index 59f524b..608cbc3 100644 --- a/api/docker-compose.yaml +++ b/api/docker-compose.yaml @@ -446,6 +446,49 @@ services: - "com.helpme.service=monitoring" - "com.helpme.monitoring.type=log-collector" + # ============================================ + # MONITORAMENTO - Tempo (Tracing) + # ============================================ + tempo_helpme: + image: grafana/tempo:2.4.0 + container_name: tempo_helpme + hostname: tempo_helpme + environment: + TZ: America/Sao_Paulo + command: ["-config.file=/etc/tempo.yaml"] + ports: + - "${TEMPO_PORT:-3200}:3200" # HTTP API + - "4317:4317" # OTLP gRPC + - "4318:4318" # OTLP HTTP + volumes: + - ./painel-analitico/monitoring/tempo.yaml:/etc/tempo.yaml:ro + - tempo_data:/tmp/tempo + networks: + - helpme_network + restart: unless-stopped + deploy: + resources: + limits: + cpus: '1' + memory: 1G + reservations: + cpus: '0.25' + memory: 256M + healthcheck: + test: ["CMD-SHELL", "wget --no-verbose --tries=1 --spider http://localhost:3200/ready || exit 1"] + interval: 10s + timeout: 5s + retries: 5 + start_period: 20s + logging: + driver: "json-file" + options: + max-size: "10m" + max-file: "3" + labels: + - "com.helpme.service=monitoring" + - "com.helpme.monitoring.type=tracing" + # ============================================ # MONITORAMENTO - Grafana # ============================================ @@ -476,6 +519,7 @@ services: - influxdb_helpme - postgresql_helpme - loki_helpme + - tempo_helpme deploy: resources: limits: @@ -1027,8 +1071,8 @@ services: KAFKA_BROKER_ID: 2 KAFKA_ZOOKEEPER_CONNECT: 'zookeeper_helpme_teste:2182' KAFKA_LISTENER_SECURITY_PROTOCOL_MAP: PLAINTEXT:PLAINTEXT,PLAINTEXT_HOST:PLAINTEXT + KAFKA_ADVERTISED_LISTENERS: PLAINTEXT://kafka_helpme_teste:9092,PLAINTEXT_HOST://localhost:9094 KAFKA_LISTENERS: PLAINTEXT://0.0.0.0:9092,PLAINTEXT_HOST://0.0.0.0:9093 - KAFKA_ADVERTISED_LISTENERS: PLAINTEXT://kafka_helpme_teste:9092,PLAINTEXT_HOST://localhost:9095 KAFKA_INTER_BROKER_LISTENER_NAME: PLAINTEXT KAFKA_OFFSETS_TOPIC_REPLICATION_FACTOR: 1 KAFKA_AUTO_CREATE_TOPICS_ENABLE: 'true' @@ -1167,6 +1211,10 @@ volumes: driver: local name: prometheus_helpme_data + tempo_data: + driver: local + name: tempo_helpme_data + postgresql_data_teste: driver: local name: postgresql_helpme_data_teste diff --git a/api/package.json b/api/package.json index dc26cf5..12f2a7a 100644 --- a/api/package.json +++ b/api/package.json @@ -1,6 +1,6 @@ { "name": "help-me-api", - "version": "1.2.1", + "version": "1.2.5", "description": "API para help desk", "main": "index.js", "type": "module", @@ -11,7 +11,7 @@ "url": "https://github.com/diego64/help-me.git" }, "scripts": { - "dev": "tsx watch --env-file=.env src/server.ts", + "dev": "tsx watch --env-file=.env --import src/server.ts", "build": "tsup", "start": "node --env-file=.env dist/server.js", "generate": "dotenv -e .env -- prisma generate", @@ -43,6 +43,14 @@ "packageManager": "pnpm@10.28.1", "dependencies": { "@influxdata/influxdb-client": "^1.35.0", + "@opentelemetry/api": "1.9.0", + "@opentelemetry/auto-instrumentations-node": "0.57.0", + "@opentelemetry/core": "^2.6.0", + "@opentelemetry/exporter-trace-otlp-http": "0.57.0", + "@opentelemetry/resources": "1.30.0", + "@opentelemetry/sdk-node": "0.57.0", + "@opentelemetry/sdk-trace-base": "1.30.0", + "@opentelemetry/semantic-conventions": "1.30.0", "@prisma/adapter-pg": "^7.4.1", "@prisma/client": "7.3.0", "compression": "^1.8.1", diff --git a/api/painel-analitico/grafana/dashboards/logs-api/logs-dashboard.json b/api/painel-analitico/grafana/dashboards/logs/logs-dashboard.json similarity index 99% rename from api/painel-analitico/grafana/dashboards/logs-api/logs-dashboard.json rename to api/painel-analitico/grafana/dashboards/logs/logs-dashboard.json index dd3d339..d8e1c77 100644 --- a/api/painel-analitico/grafana/dashboards/logs-api/logs-dashboard.json +++ b/api/painel-analitico/grafana/dashboards/logs/logs-dashboard.json @@ -524,7 +524,7 @@ "refresh": "5s", "schemaVersion": 39, "tags": [ - "logs" + ], "templating": { "list": [ @@ -599,7 +599,7 @@ }, "timepicker": {}, "timezone": "America/Sao_Paulo", - "title": "logs-aplicacao", + "title": "aplicacao", "uid": "logs-v1", "version": 3, "weekStart": "" diff --git a/api/painel-analitico/grafana/dashboards/logs/requisicoes.json b/api/painel-analitico/grafana/dashboards/logs/requisicoes.json new file mode 100644 index 0000000..48ed7ec --- /dev/null +++ b/api/painel-analitico/grafana/dashboards/logs/requisicoes.json @@ -0,0 +1,1414 @@ +{ + "annotations": { + "list": [ + { + "builtIn": 1, + "datasource": { + "type": "grafana", + "uid": "-- Grafana --" + }, + "enable": true, + "hide": true, + "iconColor": "rgba(0, 211, 255, 1)", + "name": "Annotations & Alerts", + "type": "dashboard" + } + ] + }, + "editable": true, + "fiscalYearStartMonth": 0, + "graphTooltip": 1, + "id": 3, + "links": [], + "liveNow": false, + "panels": [ + { + "gridPos": { + "h": 1, + "w": 24, + "x": 0, + "y": 0 + }, + "id": 100, + "title": "⚡ Status Geral", + "type": "row" + }, + { + "datasource": { + "type": "loki", + "uid": "loki" + }, + "fieldConfig": { + "defaults": { + "color": { + "fixedColor": "green", + "mode": "fixed" + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + } + ] + }, + "unit": "short" + }, + "overrides": [] + }, + "gridPos": { + "h": 3, + "w": 3, + "x": 0, + "y": 1 + }, + "id": 1, + "options": { + "colorMode": "background", + "graphMode": "none", + "justifyMode": "center", + "orientation": "auto", + "reduceOptions": { + "calcs": [ + "sum" + ], + "fields": "", + "values": false + }, + "textMode": "auto", + "wideLayout": true + }, + "pluginVersion": "10.2.3", + "targets": [ + { + "datasource": { + "type": "loki", + "uid": "loki" + }, + "expr": "sum(count_over_time({container=\"helpme-api\"} | json | method != \"\" [$__range]))", + "instant": true, + "refId": "A" + } + ], + "title": "Total Requisições", + "type": "stat" + }, + { + "datasource": { + "type": "loki", + "uid": "loki" + }, + "fieldConfig": { + "defaults": { + "color": { + "fixedColor": "blue", + "mode": "fixed" + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "blue", + "value": null + } + ] + }, + "unit": "short" + }, + "overrides": [] + }, + "gridPos": { + "h": 3, + "w": 3, + "x": 3, + "y": 1 + }, + "id": 2, + "options": { + "colorMode": "background", + "graphMode": "none", + "justifyMode": "center", + "orientation": "auto", + "reduceOptions": { + "calcs": [ + "sum" + ], + "fields": "", + "values": false + }, + "textMode": "auto", + "wideLayout": true + }, + "pluginVersion": "10.2.3", + "targets": [ + { + "datasource": { + "type": "loki", + "uid": "loki" + }, + "expr": "sum(count_over_time({container=\"helpme-api\"} | json | method = \"GET\" [$__range]))", + "instant": true, + "refId": "A" + } + ], + "title": "Requisições GET", + "type": "stat" + }, + { + "datasource": { + "type": "loki", + "uid": "loki" + }, + "fieldConfig": { + "defaults": { + "color": { + "fixedColor": "purple", + "mode": "fixed" + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "purple", + "value": null + } + ] + }, + "unit": "short" + }, + "overrides": [] + }, + "gridPos": { + "h": 3, + "w": 3, + "x": 6, + "y": 1 + }, + "id": 3, + "options": { + "colorMode": "background", + "graphMode": "none", + "justifyMode": "center", + "orientation": "auto", + "reduceOptions": { + "calcs": [ + "sum" + ], + "fields": "", + "values": false + }, + "textMode": "auto", + "wideLayout": true + }, + "pluginVersion": "10.2.3", + "targets": [ + { + "datasource": { + "type": "loki", + "uid": "loki" + }, + "expr": "sum(count_over_time({container=\"helpme-api\"} | json | method = \"POST\" [$__range]))", + "instant": true, + "refId": "A" + } + ], + "title": "Requisições POST", + "type": "stat" + }, + { + "datasource": { + "type": "loki", + "uid": "loki" + }, + "fieldConfig": { + "defaults": { + "color": { + "fixedColor": "cyan", + "mode": "fixed" + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "cyan", + "value": null + } + ] + }, + "unit": "short" + }, + "overrides": [] + }, + "gridPos": { + "h": 3, + "w": 3, + "x": 9, + "y": 1 + }, + "id": 4, + "options": { + "colorMode": "background", + "graphMode": "none", + "justifyMode": "center", + "orientation": "auto", + "reduceOptions": { + "calcs": [ + "sum" + ], + "fields": "", + "values": false + }, + "textMode": "auto", + "wideLayout": true + }, + "pluginVersion": "10.2.3", + "targets": [ + { + "datasource": { + "type": "loki", + "uid": "loki" + }, + "expr": "sum(count_over_time({container=\"helpme-api\"} | json | method =~ \"PUT|PATCH\" [$__range]))", + "instant": true, + "refId": "A" + } + ], + "title": "Requisições PUT/PATCH", + "type": "stat" + }, + { + "datasource": { + "type": "loki", + "uid": "loki" + }, + "fieldConfig": { + "defaults": { + "color": { + "fixedColor": "red", + "mode": "fixed" + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "red", + "value": null + } + ] + }, + "unit": "short" + }, + "overrides": [] + }, + "gridPos": { + "h": 3, + "w": 3, + "x": 12, + "y": 1 + }, + "id": 5, + "options": { + "colorMode": "background", + "graphMode": "none", + "justifyMode": "center", + "orientation": "auto", + "reduceOptions": { + "calcs": [ + "sum" + ], + "fields": "", + "values": false + }, + "textMode": "auto", + "wideLayout": true + }, + "pluginVersion": "10.2.3", + "targets": [ + { + "datasource": { + "type": "loki", + "uid": "loki" + }, + "expr": "sum(count_over_time({container=\"helpme-api\"} | json | method = \"DELETE\" [$__range]))", + "instant": true, + "refId": "A" + } + ], + "title": "Requisições DELETE", + "type": "stat" + }, + { + "datasource": { + "type": "loki", + "uid": "loki" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "orange", + "value": 1 + }, + { + "color": "red", + "value": 10 + } + ] + }, + "unit": "short" + }, + "overrides": [] + }, + "gridPos": { + "h": 3, + "w": 3, + "x": 15, + "y": 1 + }, + "id": 6, + "options": { + "colorMode": "background", + "graphMode": "none", + "justifyMode": "center", + "orientation": "auto", + "reduceOptions": { + "calcs": [ + "sum" + ], + "fields": "", + "values": false + }, + "textMode": "auto", + "wideLayout": true + }, + "pluginVersion": "10.2.3", + "targets": [ + { + "datasource": { + "type": "loki", + "uid": "loki" + }, + "expr": "sum(count_over_time({container=\"helpme-api\"} | json | statusCode >= 400 and statusCode < 500 [$__range]))", + "instant": true, + "refId": "A" + } + ], + "title": "Erros 4xx", + "type": "stat" + }, + { + "datasource": { + "type": "loki", + "uid": "loki" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 1 + } + ] + }, + "unit": "short" + }, + "overrides": [] + }, + "gridPos": { + "h": 3, + "w": 3, + "x": 18, + "y": 1 + }, + "id": 7, + "options": { + "colorMode": "background", + "graphMode": "none", + "justifyMode": "center", + "orientation": "auto", + "reduceOptions": { + "calcs": [ + "sum" + ], + "fields": "", + "values": false + }, + "textMode": "auto", + "wideLayout": true + }, + "pluginVersion": "10.2.3", + "targets": [ + { + "datasource": { + "type": "loki", + "uid": "loki" + }, + "expr": "sum(count_over_time({container=\"helpme-api\"} | json | statusCode >= 500 [$__range]))", + "instant": true, + "refId": "A" + } + ], + "title": "Erros 5xx", + "type": "stat" + }, + { + "datasource": { + "type": "loki", + "uid": "loki" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "yellow", + "value": 500 + }, + { + "color": "red", + "value": 2000 + } + ] + }, + "unit": "ms" + }, + "overrides": [] + }, + "gridPos": { + "h": 3, + "w": 3, + "x": 21, + "y": 1 + }, + "id": 8, + "options": { + "colorMode": "background", + "graphMode": "none", + "justifyMode": "center", + "orientation": "auto", + "reduceOptions": { + "calcs": [ + "mean" + ], + "fields": "", + "values": false + }, + "textMode": "auto", + "wideLayout": true + }, + "pluginVersion": "10.2.3", + "targets": [ + { + "datasource": { + "type": "loki", + "uid": "loki" + }, + "expr": "avg_over_time({container=\"helpme-api\"} | json | unwrap duration [$__range])", + "instant": true, + "refId": "A" + } + ], + "title": "Latência Média", + "type": "stat" + }, + { + "datasource": { + "type": "loki", + "uid": "loki" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 15, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "smooth", + "lineWidth": 2, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "reqps" + }, + "overrides": [] + }, + "gridPos": { + "h": 8, + "w": 16, + "x": 0, + "y": 4 + }, + "id": 9, + "options": { + "legend": { + "calcs": [ + "mean", + "max", + "sum" + ], + "displayMode": "table", + "placement": "bottom", + "showLegend": false + }, + "tooltip": { + "mode": "multi", + "sort": "desc" + } + }, + "targets": [ + { + "datasource": { + "type": "loki", + "uid": "loki" + }, + "expr": "sum(rate({container=\"helpme-api\"} | json | method = \"GET\" [1m]))", + "legendFormat": "GET", + "refId": "A" + }, + { + "datasource": { + "type": "loki", + "uid": "loki" + }, + "expr": "sum(rate({container=\"helpme-api\"} | json | method = \"POST\" [1m]))", + "legendFormat": "POST", + "refId": "B" + }, + { + "datasource": { + "type": "loki", + "uid": "loki" + }, + "expr": "sum(rate({container=\"helpme-api\"} | json | method = \"PUT\" [1m]))", + "legendFormat": "PUT", + "refId": "C" + }, + { + "datasource": { + "type": "loki", + "uid": "loki" + }, + "expr": "sum(rate({container=\"helpme-api\"} | json | method = \"PATCH\" [1m]))", + "legendFormat": "PATCH", + "refId": "D" + }, + { + "datasource": { + "type": "loki", + "uid": "loki" + }, + "expr": "sum(rate({container=\"helpme-api\"} | json | method = \"DELETE\" [1m]))", + "legendFormat": "DELETE", + "refId": "E" + } + ], + "title": "Taxa de Requisições por Método", + "type": "timeseries" + }, + { + "datasource": { + "type": "loki", + "uid": "loki" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + } + }, + "mappings": [], + "unit": "short" + }, + "overrides": [ + { + "matcher": { + "id": "byFrameRefID", + "options": "A" + }, + "properties": [ + { + "id": "displayName", + "value": "GET" + } + ] + }, + { + "matcher": { + "id": "byFrameRefID", + "options": "B" + }, + "properties": [ + { + "id": "displayName", + "value": "POST" + } + ] + }, + { + "matcher": { + "id": "byFrameRefID", + "options": "C" + }, + "properties": [ + { + "id": "displayName", + "value": "PUT" + } + ] + }, + { + "matcher": { + "id": "byFrameRefID", + "options": "D" + }, + "properties": [ + { + "id": "displayName", + "value": "PATCH" + } + ] + }, + { + "matcher": { + "id": "byFrameRefID", + "options": "E" + }, + "properties": [ + { + "id": "displayName", + "value": "DELETE" + } + ] + } + ] + }, + "gridPos": { + "h": 8, + "w": 8, + "x": 16, + "y": 4 + }, + "id": 10, + "options": { + "displayLabels": [ + "percent" + ], + "legend": { + "displayMode": "table", + "placement": "right", + "showLegend": true, + "values": [ + "value", + "percent" + ] + }, + "pieType": "donut", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "tooltip": { + "mode": "multi", + "sort": "none" + } + }, + "targets": [ + { + "datasource": { + "type": "loki", + "uid": "loki" + }, + "expr": "sum(count_over_time({container=\"helpme-api\"} | json | method = \"GET\" [$__range]))", + "instant": true, + "legendFormat": "GET", + "refId": "A" + }, + { + "datasource": { + "type": "loki", + "uid": "loki" + }, + "expr": "sum(count_over_time({container=\"helpme-api\"} | json | method = \"POST\" [$__range]))", + "instant": true, + "legendFormat": "POST", + "refId": "B" + }, + { + "datasource": { + "type": "loki", + "uid": "loki" + }, + "expr": "sum(count_over_time({container=\"helpme-api\"} | json | method = \"PUT\" [$__range]))", + "instant": true, + "legendFormat": "PUT", + "refId": "C" + }, + { + "datasource": { + "type": "loki", + "uid": "loki" + }, + "expr": "sum(count_over_time({container=\"helpme-api\"} | json | method = \"PATCH\" [$__range]))", + "instant": true, + "legendFormat": "PATCH", + "refId": "D" + }, + { + "datasource": { + "type": "loki", + "uid": "loki" + }, + "expr": "sum(count_over_time({container=\"helpme-api\"} | json | method = \"DELETE\" [$__range]))", + "instant": true, + "legendFormat": "DELETE", + "refId": "E" + } + ], + "title": "Distribuição por Método", + "type": "piechart" + }, + { + "datasource": { + "type": "loki", + "uid": "loki" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 10, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "smooth", + "lineWidth": 2, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "ms" + }, + "overrides": [] + }, + "gridPos": { + "h": 8, + "w": 12, + "x": 0, + "y": 12 + }, + "id": 11, + "options": { + "legend": { + "calcs": [ + "mean", + "max" + ], + "displayMode": "table", + "placement": "bottom", + "showLegend": false + }, + "tooltip": { + "mode": "multi", + "sort": "none" + } + }, + "targets": [ + { + "datasource": { + "type": "loki", + "uid": "loki" + }, + "expr": "quantile_over_time(0.50, {container=\"helpme-api\"} | json | unwrap duration [5m])", + "legendFormat": "p50", + "refId": "A" + }, + { + "datasource": { + "type": "loki", + "uid": "loki" + }, + "expr": "quantile_over_time(0.95, {container=\"helpme-api\"} | json | unwrap duration [5m])", + "legendFormat": "p95", + "refId": "B" + }, + { + "datasource": { + "type": "loki", + "uid": "loki" + }, + "expr": "quantile_over_time(0.99, {container=\"helpme-api\"} | json | unwrap duration [5m])", + "legendFormat": "p99", + "refId": "C" + } + ], + "title": "Latência P50 / P95 / P99", + "type": "timeseries" + }, + { + "datasource": { + "type": "loki", + "uid": "loki" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "custom": { + "align": "auto", + "cellOptions": { + "type": "auto" + }, + "filterable": true, + "inspect": false + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "yellow", + "value": 500 + }, + { + "color": "red", + "value": 2000 + } + ] + }, + "unit": "ms" + }, + "overrides": [ + { + "matcher": { + "id": "byName", + "options": "url" + }, + "properties": [ + { + "id": "custom.width", + "value": 300 + } + ] + } + ] + }, + "gridPos": { + "h": 8, + "w": 12, + "x": 12, + "y": 12 + }, + "id": 12, + "options": { + "cellHeight": "sm", + "footer": { + "countRows": false, + "fields": "", + "reducer": [ + "sum" + ], + "show": false + }, + "showHeader": true, + "sortBy": [ + { + "desc": true, + "displayName": "Latência Média" + } + ] + }, + "pluginVersion": "10.2.3", + "targets": [ + { + "datasource": { + "type": "loki", + "uid": "loki" + }, + "expr": "avg by (url) (avg_over_time({container=\"helpme-api\"} | json | unwrap duration [$__range]))", + "instant": true, + "legendFormat": "{{url}}", + "refId": "A" + } + ], + "title": "Latência Média por Rota", + "transformations": [ + { + "id": "labelsToFields", + "options": { + "mode": "columns" + } + }, + { + "id": "organize", + "options": { + "renameByName": { + "Value": "Latência Média", + "url": "Rota" + } + } + } + ], + "type": "table" + }, + { + "datasource": { + "type": "loki", + "uid": "loki" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 20, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "smooth", + "lineWidth": 2, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "short" + }, + "overrides": [ + { + "matcher": { + "id": "byName", + "options": "5xx" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "dark-red", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "4xx" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "orange", + "mode": "fixed" + } + } + ] + } + ] + }, + "gridPos": { + "h": 8, + "w": 12, + "x": 0, + "y": 20 + }, + "id": 13, + "options": { + "legend": { + "calcs": [ + "sum", + "max" + ], + "displayMode": "table", + "placement": "bottom", + "showLegend": false + }, + "tooltip": { + "mode": "multi", + "sort": "none" + } + }, + "targets": [ + { + "datasource": { + "type": "loki", + "uid": "loki" + }, + "expr": "sum(rate({container=\"helpme-api\"} | json | statusCode >= 400 and statusCode < 500 [1m]))", + "legendFormat": "4xx", + "refId": "A" + }, + { + "datasource": { + "type": "loki", + "uid": "loki" + }, + "expr": "sum(rate({container=\"helpme-api\"} | json | statusCode >= 500 [1m]))", + "legendFormat": "5xx", + "refId": "B" + } + ], + "title": "Taxa de Erros 4xx vs 5xx", + "type": "timeseries" + }, + { + "datasource": { + "type": "loki", + "uid": "loki" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "custom": { + "align": "auto", + "cellOptions": { + "type": "auto" + }, + "filterable": true, + "inspect": false + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "orange", + "value": 1 + }, + { + "color": "red", + "value": 10 + } + ] + }, + "unit": "short" + }, + "overrides": [ + { + "matcher": { + "id": "byName", + "options": "Rota" + }, + "properties": [ + { + "id": "custom.width", + "value": 300 + } + ] + } + ] + }, + "gridPos": { + "h": 8, + "w": 12, + "x": 12, + "y": 20 + }, + "id": 14, + "options": { + "cellHeight": "sm", + "footer": { + "countRows": false, + "fields": "", + "reducer": [ + "sum" + ], + "show": false + }, + "showHeader": true, + "sortBy": [ + { + "desc": true, + "displayName": "Total Erros" + } + ] + }, + "pluginVersion": "10.2.3", + "targets": [ + { + "datasource": { + "type": "loki", + "uid": "loki" + }, + "expr": "sum by (url) (count_over_time({container=\"helpme-api\"} | json | statusCode >= 400 [$__range]))", + "instant": true, + "legendFormat": "{{url}}", + "refId": "A" + } + ], + "title": "Erros por Rota", + "transformations": [ + { + "id": "labelsToFields", + "options": { + "mode": "columns" + } + }, + { + "id": "organize", + "options": { + "renameByName": { + "Value": "Total Erros", + "url": "Rota" + } + } + } + ], + "type": "table" + }, + { + "datasource": { + "type": "loki", + "uid": "loki" + }, + "gridPos": { + "h": 10, + "w": 24, + "x": 0, + "y": 28 + }, + "id": 15, + "options": { + "dedupStrategy": "none", + "enableLogDetails": true, + "prettifyLogMessage": true, + "showCommonLabels": false, + "showLabels": true, + "showTime": true, + "sortOrder": "Descending", + "wrapLogMessage": false + }, + "targets": [ + { + "datasource": { + "type": "loki", + "uid": "loki" + }, + "expr": "{container=\"helpme-api\"} | json", + "refId": "A" + } + ], + "title": "Logs em Tempo Real", + "type": "logs" + }, + { + "datasource": { + "type": "loki", + "uid": "loki" + }, + "gridPos": { + "h": 8, + "w": 24, + "x": 0, + "y": 38 + }, + "id": 16, + "options": { + "dedupStrategy": "none", + "enableLogDetails": true, + "prettifyLogMessage": true, + "showCommonLabels": false, + "showLabels": true, + "showTime": true, + "sortOrder": "Descending", + "wrapLogMessage": false + }, + "targets": [ + { + "datasource": { + "type": "loki", + "uid": "loki" + }, + "expr": "{container=\"helpme-api\"} | json | statusCode >= 400", + "refId": "A" + } + ], + "title": "Erros Recentes", + "type": "logs" + } + ], + "refresh": "10s", + "schemaVersion": 39, + "tags": [ + + ], + "templating": { + "list": [] + }, + "time": { + "from": "now-1h", + "to": "now" + }, + "timepicker": {}, + "timezone": "America/Sao_Paulo", + "title": "requisicoes", + "uid": "helpme-api-v2", + "version": 1, + "weekStart": "" +} \ No newline at end of file diff --git a/api/painel-analitico/grafana/provisioning/datasources/loki.yml b/api/painel-analitico/grafana/provisioning/datasources/loki.yml index 391e510..06ab838 100644 --- a/api/painel-analitico/grafana/provisioning/datasources/loki.yml +++ b/api/painel-analitico/grafana/provisioning/datasources/loki.yml @@ -3,6 +3,7 @@ apiVersion: 1 datasources: - name: Loki type: loki + uid: loki access: proxy url: http://loki_helpme:3100 isDefault: false @@ -14,4 +15,8 @@ datasources: matcherRegex: "requestId=([\\w-]+)" name: RequestID url: "$${__value.raw}" + - datasourceUid: tempo + matcherRegex: '"traceId":"([a-f0-9]+)"' + name: TraceID + url: "$${__value.raw}" version: 1 \ No newline at end of file diff --git a/api/painel-analitico/grafana/provisioning/datasources/tempo.yaml b/api/painel-analitico/grafana/provisioning/datasources/tempo.yaml new file mode 100644 index 0000000..6a64105 --- /dev/null +++ b/api/painel-analitico/grafana/provisioning/datasources/tempo.yaml @@ -0,0 +1,23 @@ +apiVersion: 1 + +datasources: + - name: Tempo + type: tempo + uid: tempo + url: http://tempo_helpme:3200 + access: proxy + jsonData: + httpMethod: GET + serviceMap: + datasourceUid: prometheus + nodeGraph: + enabled: true + tracesToLogsV2: + datasourceUid: loki + tags: [{ key: 'service.name', value: 'service' }] + filterByTraceID: true + filterBySpanID: false + lokiSearch: + datasourceUid: loki + traceToMetrics: + datasourceUid: prometheus \ No newline at end of file diff --git a/api/painel-analitico/monitoring/tempo.yaml b/api/painel-analitico/monitoring/tempo.yaml new file mode 100644 index 0000000..7cf50de --- /dev/null +++ b/api/painel-analitico/monitoring/tempo.yaml @@ -0,0 +1,40 @@ +server: + http_listen_port: 3200 + +distributor: + receivers: + otlp: + protocols: + http: + grpc: + +ingester: + max_block_duration: 5m + +compactor: + compaction: + block_retention: 1h + +storage: + trace: + backend: local + local: + path: /tmp/tempo/blocks + wal: + path: /tmp/tempo/wal + +metrics_generator: + registry: + external_labels: + source: tempo + cluster: helpme + storage: + path: /tmp/tempo/generator/wal + remote_write: + - url: http://prometheus_helpme:9090/api/v1/write + send_exemplars: true + +overrides: + defaults: + metrics_generator: + processors: [service-graphs, span-metrics] \ No newline at end of file diff --git a/api/pnpm-lock.yaml b/api/pnpm-lock.yaml index aa35957..6e87a21 100644 --- a/api/pnpm-lock.yaml +++ b/api/pnpm-lock.yaml @@ -24,6 +24,30 @@ importers: '@influxdata/influxdb-client': specifier: ^1.35.0 version: 1.35.0 + '@opentelemetry/api': + specifier: 1.9.0 + version: 1.9.0 + '@opentelemetry/auto-instrumentations-node': + specifier: 0.57.0 + version: 0.57.0(@opentelemetry/api@1.9.0) + '@opentelemetry/core': + specifier: ^2.6.0 + version: 2.6.0(@opentelemetry/api@1.9.0) + '@opentelemetry/exporter-trace-otlp-http': + specifier: 0.57.0 + version: 0.57.0(@opentelemetry/api@1.9.0) + '@opentelemetry/resources': + specifier: 1.30.0 + version: 1.30.0(@opentelemetry/api@1.9.0) + '@opentelemetry/sdk-node': + specifier: 0.57.0 + version: 0.57.0(@opentelemetry/api@1.9.0) + '@opentelemetry/sdk-trace-base': + specifier: 1.30.0 + version: 1.30.0(@opentelemetry/api@1.9.0) + '@opentelemetry/semantic-conventions': + specifier: 1.30.0 + version: 1.30.0 '@prisma/adapter-pg': specifier: ^7.4.1 version: 7.4.1 @@ -165,7 +189,7 @@ importers: version: 4.2.0 tsup: specifier: ^8.5.1 - version: 8.5.1(jiti@2.6.1)(postcss@8.5.6)(tsx@4.21.0)(typescript@5.9.3) + version: 8.5.1(jiti@2.6.1)(postcss@8.5.6)(tsx@4.21.0)(typescript@5.9.3)(yaml@2.8.2) tsx: specifier: ^4.21.0 version: 4.21.0 @@ -174,7 +198,7 @@ importers: version: 5.9.3 vitest: specifier: ^4.0.18 - version: 4.0.18(@types/node@25.3.0)(@vitest/ui@4.0.18)(jiti@2.6.1)(tsx@4.21.0) + version: 4.0.18(@opentelemetry/api@1.9.0)(@types/node@25.3.0)(@vitest/ui@4.0.18)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.2) packages: @@ -396,6 +420,15 @@ packages: cpu: [x64] os: [win32] + '@grpc/grpc-js@1.14.3': + resolution: {integrity: sha512-Iq8QQQ/7X3Sac15oB6p0FmUg/klxQvXLeileoqrTRGJYLV+/9tubbr9ipz0GKHjmXVsgFPo/+W+2cA8eNcR+XA==} + engines: {node: '>=12.10.0'} + + '@grpc/proto-loader@0.8.0': + resolution: {integrity: sha512-rc1hOQtjIWGxcxpb9aHAfLpIctjEnsDehj0DAiVfBlmT84uvR0uUtN2hEi/ecvWVjXUGf5qPF4qEgiLOx1YIMQ==} + engines: {node: '>=6'} + hasBin: true + '@hono/node-server@1.19.9': resolution: {integrity: sha512-vHL6w3ecZsky+8P5MD+eFfaGTyCeOHUIFYMGpQGbrBTSmNNoxv0if69rEZ5giu36weC5saFuznL411gRX7bJDw==} engines: {node: '>=18.14.1'} @@ -418,6 +451,9 @@ packages: '@jridgewell/trace-mapping@0.3.31': resolution: {integrity: sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==} + '@js-sdsl/ordered-map@4.4.2': + resolution: {integrity: sha512-iUKgm52T8HOE/makSxjqoWhe95ZJA1/G1sYsGev2JDKUSS14KAgg1LHb+Ba+IPow0xflbnSkOsZcO08C7w1gYw==} + '@jsdevtools/ono@7.1.3': resolution: {integrity: sha512-4JQNk+3mVzK3xh2rqd6RB4J46qUR19azEHBneZyTZM+c456qOrbbM/5xcR8huNCCcbVt7+UmizG6GuUvPvKUYg==} @@ -432,6 +468,624 @@ packages: resolution: {integrity: sha512-jCs9ldd7NwzpgXDIf6P3+NrHh9/sD6CQdxHyjQI+h/6rDNo88ypBxxz45UDuZHz9r3tNz7N/VInSVoVdtXEI4A==} engines: {node: ^14.21.3 || >=16} + '@opentelemetry/api-logs@0.200.0': + resolution: {integrity: sha512-IKJBQxh91qJ+3ssRly5hYEJ8NDHu9oY/B1PXVSCWf7zytmYO9RNLB0Ox9XQ/fJ8m6gY6Q6NtBWlmXfaXt5Uc4Q==} + engines: {node: '>=8.0.0'} + + '@opentelemetry/api-logs@0.57.0': + resolution: {integrity: sha512-l1aJ30CXeauVYaI+btiynHpw341LthkMTv3omi1VJDX14werY2Wmv9n1yudMsq9HuY0m8PvXEVX4d8zxEb+WRg==} + engines: {node: '>=14'} + + '@opentelemetry/api@1.9.0': + resolution: {integrity: sha512-3giAOQvZiH5F9bMlMiv8+GSPMeqg0dbaeo58/0SlA9sxSqZhnUtxzX9/2FzyhS9sWQf5S0GJE0AKBrFqjpeYcg==} + engines: {node: '>=8.0.0'} + + '@opentelemetry/auto-instrumentations-node@0.57.0': + resolution: {integrity: sha512-UgkNOO0jCBPjbsvN4PpHMZthEDoamZpYwFA63ooPgmhbRXhoOvEwmLLIYEaXI9ZEEgyAi5CA1Viw2VTnzECMIg==} + engines: {node: ^18.19.0 || >=20.6.0} + peerDependencies: + '@opentelemetry/api': ^1.4.1 + + '@opentelemetry/context-async-hooks@1.30.0': + resolution: {integrity: sha512-roCetrG/cz0r/gugQm/jFo75UxblVvHaNSRoR0kSSRSzXFAiIBqFCZuH458BHBNRtRe+0yJdIJ21L9t94bw7+g==} + engines: {node: '>=14'} + peerDependencies: + '@opentelemetry/api': '>=1.0.0 <1.10.0' + + '@opentelemetry/context-async-hooks@2.0.0': + resolution: {integrity: sha512-IEkJGzK1A9v3/EHjXh3s2IiFc6L4jfK+lNgKVgUjeUJQRRhnVFMIO3TAvKwonm9O1HebCuoOt98v8bZW7oVQHA==} + engines: {node: ^18.19.0 || >=20.6.0} + peerDependencies: + '@opentelemetry/api': '>=1.0.0 <1.10.0' + + '@opentelemetry/core@1.30.0': + resolution: {integrity: sha512-Q/3u/K73KUjTCnFUP97ZY+pBjQ1kPEgjOfXj/bJl8zW7GbXdkw6cwuyZk6ZTXkVgCBsYRYUzx4fvYK1jxdb9MA==} + engines: {node: '>=14'} + peerDependencies: + '@opentelemetry/api': '>=1.0.0 <1.10.0' + + '@opentelemetry/core@2.0.0': + resolution: {integrity: sha512-SLX36allrcnVaPYG3R78F/UZZsBsvbc7lMCLx37LyH5MJ1KAAZ2E3mW9OAD3zGz0G8q/BtoS5VUrjzDydhD6LQ==} + engines: {node: ^18.19.0 || >=20.6.0} + peerDependencies: + '@opentelemetry/api': '>=1.0.0 <1.10.0' + + '@opentelemetry/core@2.6.0': + resolution: {integrity: sha512-HLM1v2cbZ4TgYN6KEOj+Bbj8rAKriOdkF9Ed3tG25FoprSiQl7kYc+RRT6fUZGOvx0oMi5U67GoFdT+XUn8zEg==} + engines: {node: ^18.19.0 || >=20.6.0} + peerDependencies: + '@opentelemetry/api': '>=1.0.0 <1.10.0' + + '@opentelemetry/exporter-logs-otlp-grpc@0.200.0': + resolution: {integrity: sha512-+3MDfa5YQPGM3WXxW9kqGD85Q7s9wlEMVNhXXG7tYFLnIeaseUt9YtCeFhEDFzfEktacdFpOtXmJuNW8cHbU5A==} + engines: {node: ^18.19.0 || >=20.6.0} + peerDependencies: + '@opentelemetry/api': ^1.3.0 + + '@opentelemetry/exporter-logs-otlp-grpc@0.57.0': + resolution: {integrity: sha512-KRg87nmpQzHV4nYvoYLT52UvoSP0JCRILfrenFElxHak0lcP7ubCs1kpodMs912qsTNOFvINBB6Pxz5AdE6S6A==} + engines: {node: '>=14'} + peerDependencies: + '@opentelemetry/api': ^1.3.0 + + '@opentelemetry/exporter-logs-otlp-http@0.200.0': + resolution: {integrity: sha512-KfWw49htbGGp9s8N4KI8EQ9XuqKJ0VG+yVYVYFiCYSjEV32qpQ5qZ9UZBzOZ6xRb+E16SXOSCT3RkqBVSABZ+g==} + engines: {node: ^18.19.0 || >=20.6.0} + peerDependencies: + '@opentelemetry/api': ^1.3.0 + + '@opentelemetry/exporter-logs-otlp-http@0.57.0': + resolution: {integrity: sha512-F3KfPwDheOWpwjwIZJNg9J6ULSRcw39FtQ+c/fUv5xiKE7hu96udTSUoWRmHRJDQ2x9kZLLOOUMd5U/NyP25jw==} + engines: {node: '>=14'} + peerDependencies: + '@opentelemetry/api': ^1.3.0 + + '@opentelemetry/exporter-logs-otlp-proto@0.200.0': + resolution: {integrity: sha512-GmahpUU/55hxfH4TP77ChOfftADsCq/nuri73I/AVLe2s4NIglvTsaACkFVZAVmnXXyPS00Fk3x27WS3yO07zA==} + engines: {node: ^18.19.0 || >=20.6.0} + peerDependencies: + '@opentelemetry/api': ^1.3.0 + + '@opentelemetry/exporter-logs-otlp-proto@0.57.0': + resolution: {integrity: sha512-ovRmTPJCfXsHATJh5MyCgNbWxpGq1TvIi1sRWDtB25ewQvx+v7JiPNYQSWUgrqpsIwM3fJ0n9bf58gXeDtM2Zg==} + engines: {node: '>=14'} + peerDependencies: + '@opentelemetry/api': ^1.3.0 + + '@opentelemetry/exporter-metrics-otlp-grpc@0.200.0': + resolution: {integrity: sha512-uHawPRvKIrhqH09GloTuYeq2BjyieYHIpiklOvxm9zhrCL2eRsnI/6g9v2BZTVtGp8tEgIa7rCQ6Ltxw6NBgew==} + engines: {node: ^18.19.0 || >=20.6.0} + peerDependencies: + '@opentelemetry/api': ^1.3.0 + + '@opentelemetry/exporter-metrics-otlp-grpc@0.57.0': + resolution: {integrity: sha512-/x7gkqNlvm+4UZ3c9lZw3zbySE3MUVEwobLNA6QBIDldxuvIqGLL5quLE8B9iSAtdBMAXs9lDh4rYS+EBGAdfg==} + engines: {node: '>=14'} + peerDependencies: + '@opentelemetry/api': ^1.3.0 + + '@opentelemetry/exporter-metrics-otlp-http@0.200.0': + resolution: {integrity: sha512-5BiR6i8yHc9+qW7F6LqkuUnIzVNA7lt0qRxIKcKT+gq3eGUPHZ3DY29sfxI3tkvnwMgtnHDMNze5DdxW39HsAw==} + engines: {node: ^18.19.0 || >=20.6.0} + peerDependencies: + '@opentelemetry/api': ^1.3.0 + + '@opentelemetry/exporter-metrics-otlp-http@0.57.0': + resolution: {integrity: sha512-uxCiTVFAQ1kLy8SS0vyNNXRqH69htbtTxk4EEB2H4CvBFt3pA2N22k6SFF5fOdvDwUvM7Mi9mUfW48rS4Y0F8g==} + engines: {node: '>=14'} + peerDependencies: + '@opentelemetry/api': ^1.3.0 + + '@opentelemetry/exporter-metrics-otlp-proto@0.200.0': + resolution: {integrity: sha512-E+uPj0yyvz81U9pvLZp3oHtFrEzNSqKGVkIViTQY1rH3TOobeJPSpLnTVXACnCwkPR5XeTvPnK3pZ2Kni8AFMg==} + engines: {node: ^18.19.0 || >=20.6.0} + peerDependencies: + '@opentelemetry/api': ^1.3.0 + + '@opentelemetry/exporter-metrics-otlp-proto@0.57.0': + resolution: {integrity: sha512-aEYrzZPFxQwefNNwHd69pixKXWphiCwpVD1Y6BQuDM3TuAmGHC+InIi4e+7yRnxJiHuiiUoPOXZV5u5stTSBFw==} + engines: {node: '>=14'} + peerDependencies: + '@opentelemetry/api': ^1.3.0 + + '@opentelemetry/exporter-prometheus@0.200.0': + resolution: {integrity: sha512-ZYdlU9r0USuuYppiDyU2VFRA0kFl855ylnb3N/2aOlXrbA4PMCznen7gmPbetGQu7pz8Jbaf4fwvrDnVdQQXSw==} + engines: {node: ^18.19.0 || >=20.6.0} + peerDependencies: + '@opentelemetry/api': ^1.3.0 + + '@opentelemetry/exporter-prometheus@0.57.0': + resolution: {integrity: sha512-yjAfXoHcR+Ik03+eZMrrS5ErL7RcNkNScZc2o5dLnZyoEj5A0cCaQLHX5RJxldck8gg5Utmm0I5iItPqnve21w==} + engines: {node: '>=14'} + peerDependencies: + '@opentelemetry/api': ^1.3.0 + + '@opentelemetry/exporter-trace-otlp-grpc@0.200.0': + resolution: {integrity: sha512-hmeZrUkFl1YMsgukSuHCFPYeF9df0hHoKeHUthRKFCxiURs+GwF1VuabuHmBMZnjTbsuvNjOB+JSs37Csem/5Q==} + engines: {node: ^18.19.0 || >=20.6.0} + peerDependencies: + '@opentelemetry/api': ^1.3.0 + + '@opentelemetry/exporter-trace-otlp-grpc@0.57.0': + resolution: {integrity: sha512-QqN+d8IFyu7HUkzAROSRZGB/gfFZ0DM06YAP2J4IvObhk8paTgg1wP+nW+hl0jgSDD/p8cOj7xg5dgPI8m1LnQ==} + engines: {node: '>=14'} + peerDependencies: + '@opentelemetry/api': ^1.3.0 + + '@opentelemetry/exporter-trace-otlp-http@0.200.0': + resolution: {integrity: sha512-Goi//m/7ZHeUedxTGVmEzH19NgqJY+Bzr6zXo1Rni1+hwqaksEyJ44gdlEMREu6dzX1DlAaH/qSykSVzdrdafA==} + engines: {node: ^18.19.0 || >=20.6.0} + peerDependencies: + '@opentelemetry/api': ^1.3.0 + + '@opentelemetry/exporter-trace-otlp-http@0.57.0': + resolution: {integrity: sha512-BJl35PSkwoMlGEOrzjCG1ih6zqZoAZJIR4xyqSKC2BqPtwuRjID0vWBaEdP9xrxxJTEIEQw+gEY/0pUgicX0ew==} + engines: {node: '>=14'} + peerDependencies: + '@opentelemetry/api': ^1.3.0 + + '@opentelemetry/exporter-trace-otlp-proto@0.200.0': + resolution: {integrity: sha512-V9TDSD3PjK1OREw2iT9TUTzNYEVWJk4Nhodzhp9eiz4onDMYmPy3LaGbPv81yIR6dUb/hNp/SIhpiCHwFUq2Vg==} + engines: {node: ^18.19.0 || >=20.6.0} + peerDependencies: + '@opentelemetry/api': ^1.3.0 + + '@opentelemetry/exporter-trace-otlp-proto@0.57.0': + resolution: {integrity: sha512-M21nhl6JSAq8FTvs52/ISIvneRPg1uHNYk6q4YNNaEDGxz3GZZ6I6svYPZuQyL0O1c+mLkYNxzJ6p0rdS9/RUA==} + engines: {node: '>=14'} + peerDependencies: + '@opentelemetry/api': ^1.3.0 + + '@opentelemetry/exporter-zipkin@1.30.0': + resolution: {integrity: sha512-HQUBmXYuuHIIoB1YFukNq7QtWQPqwQh5SN28coUXmN8nCOxaqnEBKIAN+7RQU7BX7NDcNSXpL2shctH/roKL3A==} + engines: {node: '>=14'} + peerDependencies: + '@opentelemetry/api': ^1.0.0 + + '@opentelemetry/exporter-zipkin@2.0.0': + resolution: {integrity: sha512-icxaKZ+jZL/NHXX8Aru4HGsrdhK0MLcuRXkX5G5IRmCgoRLw+Br6I/nMVozX2xjGGwV7hw2g+4Slj8K7s4HbVg==} + engines: {node: ^18.19.0 || >=20.6.0} + peerDependencies: + '@opentelemetry/api': ^1.0.0 + + '@opentelemetry/instrumentation-amqplib@0.47.0': + resolution: {integrity: sha512-bQboBxolOVDcD4l5QAwqKYpJVKQ8BW82+8tiD5uheu0hDuYgdmDziSAByc8yKS7xpkJw4AYocVP7JwSpQ1hgjg==} + engines: {node: ^18.19.0 || >=20.6.0} + peerDependencies: + '@opentelemetry/api': ^1.3.0 + + '@opentelemetry/instrumentation-aws-lambda@0.51.1': + resolution: {integrity: sha512-DxUihz1ZcJtkCKFMnsr5IpQtU1TFnz/QhTEkcb95yfVvmdWx97ezbcxE4lGFjvQYMT8q2NsZjor8s8W/jrMU2w==} + engines: {node: ^18.19.0 || >=20.6.0} + peerDependencies: + '@opentelemetry/api': ^1.3.0 + + '@opentelemetry/instrumentation-aws-sdk@0.50.0': + resolution: {integrity: sha512-qhpGjkOJmY5Vmo3TABL+TD1Nd1z3DUd6CyB3fT5xzfaAbrQhAkETqbJSGWjnWnD1/GpCPqAkQ0Okm7NwJnyxqw==} + engines: {node: ^18.19.0 || >=20.6.0} + peerDependencies: + '@opentelemetry/api': ^1.3.0 + + '@opentelemetry/instrumentation-bunyan@0.46.0': + resolution: {integrity: sha512-7ERXBAMIVi1rtFG5odsLTLVy6IJZnLLB74fFlPstV7/ZZG04UZ8YFOYVS14jXArcPohY8HFYLbm56dIFCXYI9w==} + engines: {node: ^18.19.0 || >=20.6.0} + peerDependencies: + '@opentelemetry/api': ^1.3.0 + + '@opentelemetry/instrumentation-cassandra-driver@0.46.0': + resolution: {integrity: sha512-ItT2C32afignjHQosleI/iBjzlHhF+F7tJIK9ty47/CceVNlA9oK39ss9f7o9jmnKvQfhNWffvkXdjc0afwnSQ==} + engines: {node: ^18.19.0 || >=20.6.0} + peerDependencies: + '@opentelemetry/api': ^1.3.0 + + '@opentelemetry/instrumentation-connect@0.44.0': + resolution: {integrity: sha512-eChFPViU/nkHsCYSp2PCnHnxt/ZmI/N5reHcwmjXbKhEj6TRNJcjLpI+OQksP8lLu0CS9DlDosHEhknCsxLdjQ==} + engines: {node: ^18.19.0 || >=20.6.0} + peerDependencies: + '@opentelemetry/api': ^1.3.0 + + '@opentelemetry/instrumentation-cucumber@0.15.0': + resolution: {integrity: sha512-MOHDzttn5TSBqt4j3/XjBhYNH0iLQP7oX2pumIzXP7dJFTcUtaq6PVakKPtIaqBTTabOKqCJhrF240XGwWefPQ==} + engines: {node: ^18.19.0 || >=20.6.0} + peerDependencies: + '@opentelemetry/api': ^1.0.0 + + '@opentelemetry/instrumentation-dataloader@0.17.0': + resolution: {integrity: sha512-JqovxOo7a65+3A/W+eiqUv7DrDsSvsY0NemHJ4uyVrzD4bpDYofVRdnz/ehYcNerlxVIKU+HcybDmiaoj41DPw==} + engines: {node: ^18.19.0 || >=20.6.0} + peerDependencies: + '@opentelemetry/api': ^1.3.0 + + '@opentelemetry/instrumentation-dns@0.44.0': + resolution: {integrity: sha512-+tAFXkFPldOpIba2akqKQ1ukqHET1pZ4pqhrr5x0p+RJ+1a1pPmTt1vCyvSSr634WOY8qMSmzZps++16yxnMbA==} + engines: {node: ^18.19.0 || >=20.6.0} + peerDependencies: + '@opentelemetry/api': ^1.3.0 + + '@opentelemetry/instrumentation-express@0.48.1': + resolution: {integrity: sha512-j8NYOf9DRWtchbWor/zA0poI42TpZG9tViIKA0e1lC+6MshTqSJYtgNv8Fn1sx1Wn/TRyp+5OgSXiE4LDfvpEg==} + engines: {node: ^18.19.0 || >=20.6.0} + peerDependencies: + '@opentelemetry/api': ^1.3.0 + + '@opentelemetry/instrumentation-fastify@0.45.0': + resolution: {integrity: sha512-m94anTFZ6jpvK0G5fXIiq1sB0gCgY2rAL7Cg7svuOh9Roya2RIQz2E5KfCsO1kWCmnHNeTo7wIofoGN7WLPvsA==} + engines: {node: ^18.19.0 || >=20.6.0} + peerDependencies: + '@opentelemetry/api': ^1.3.0 + + '@opentelemetry/instrumentation-fs@0.20.0': + resolution: {integrity: sha512-30l45ovjwHb16ImCGVjKCvw5U7X1zKuYY26ii5S+goV8BZ4a/TCpBf2kQxteQjWD05Gl3fzPMZI5aScfPI6Rjw==} + engines: {node: ^18.19.0 || >=20.6.0} + peerDependencies: + '@opentelemetry/api': ^1.3.0 + + '@opentelemetry/instrumentation-generic-pool@0.44.0': + resolution: {integrity: sha512-bY7locZDqmQLEtY2fIJbSnAbHilxfhflaEQHjevFGkaiXc9UMtOvITOy5JKHhYQISpgrvY2WGXKG7YlVyI7uMg==} + engines: {node: ^18.19.0 || >=20.6.0} + peerDependencies: + '@opentelemetry/api': ^1.3.0 + + '@opentelemetry/instrumentation-graphql@0.48.0': + resolution: {integrity: sha512-w1sbf9F9bQTpIWGnKWhH1A+9N9rKxS4eM+AzczgMWp272ZM9lQv4zLTrH5NRST2ltY3nmZ72wkfFrSR0rECi0g==} + engines: {node: ^18.19.0 || >=20.6.0} + peerDependencies: + '@opentelemetry/api': ^1.3.0 + + '@opentelemetry/instrumentation-grpc@0.200.0': + resolution: {integrity: sha512-iaPHlO1qb1WlGUq0oTx0rJND/BtBeTAtyEfflu2VwKDe8XZeia7UEOfiSQxnGqVSTwW5F0P1S5UzqeDJotreWQ==} + engines: {node: ^18.19.0 || >=20.6.0} + peerDependencies: + '@opentelemetry/api': ^1.3.0 + + '@opentelemetry/instrumentation-hapi@0.46.0': + resolution: {integrity: sha512-573y+ZxywEcq+3+Z3KqcbV45lrVwUKvQiP9OhABVFNX8wHbtM6DPRBmYfqiUkSbIBcOEihm5qH6Gs73Xq0RBEA==} + engines: {node: ^18.19.0 || >=20.6.0} + peerDependencies: + '@opentelemetry/api': ^1.3.0 + + '@opentelemetry/instrumentation-http@0.200.0': + resolution: {integrity: sha512-9tqGbCJikhYU68y3k9mi6yWsMyMeCcwoQuHvIXan5VvvPPQ5WIZaV6Mxu/MCVe4swRNoFs8Th+qyj0TZV5ELvw==} + engines: {node: ^18.19.0 || >=20.6.0} + peerDependencies: + '@opentelemetry/api': ^1.3.0 + + '@opentelemetry/instrumentation-ioredis@0.48.0': + resolution: {integrity: sha512-kQhdrn/CAfJIObqbyyGtagWNxPvglJ9FwnWmsfXKodaGskJv/nyvdC9yIcgwzjbkG1pokVUROrvJ0mizqm29Tg==} + engines: {node: ^18.19.0 || >=20.6.0} + peerDependencies: + '@opentelemetry/api': ^1.3.0 + + '@opentelemetry/instrumentation-kafkajs@0.8.0': + resolution: {integrity: sha512-aMd3RupViVtjS/FGVG7AqMyOtOhB3qqUUYzXfq7xhYMERPSDYeRqHUn8203R7zNqcnWYIJRfWQf5eI6EejxIFA==} + engines: {node: ^18.19.0 || >=20.6.0} + peerDependencies: + '@opentelemetry/api': ^1.3.0 + + '@opentelemetry/instrumentation-knex@0.45.0': + resolution: {integrity: sha512-2kkyTDUzK/3G3jxTc+NqHSdgi1Mjw2irZ98T/cSyNdlbsnDOMSTHjbm0AxJCV4QYQ4cKW7a8W/BBgxDGlu+mXQ==} + engines: {node: ^18.19.0 || >=20.6.0} + peerDependencies: + '@opentelemetry/api': ^1.3.0 + + '@opentelemetry/instrumentation-koa@0.48.0': + resolution: {integrity: sha512-LV63v3pxFpjKC0IJO+y5nsGdcH+9Y8Wnn0fhu673XZ5auxqJk2t4nIHuSmls08oRKaX+5q1e+h70XmP/45NJsw==} + engines: {node: ^18.19.0 || >=20.6.0} + peerDependencies: + '@opentelemetry/api': ^1.3.0 + + '@opentelemetry/instrumentation-lru-memoizer@0.45.0': + resolution: {integrity: sha512-W2MNx7hPtvSIgEFxFrqdBykdfN0UrShCbJxvMU9fwgqbOdxIrcubPt0i1vmy3Ap6QwSi+HmsRNQD2w3ucbLG3A==} + engines: {node: ^18.19.0 || >=20.6.0} + peerDependencies: + '@opentelemetry/api': ^1.3.0 + + '@opentelemetry/instrumentation-memcached@0.44.0': + resolution: {integrity: sha512-1zABdJlF9Tk0yUv2ELpF6Mk2kw81k+bnB3Sw+D/ssRDcGGCnCNbz+fKJE8dwAPkDP+OcTmiKm6ySREbcyRFzCg==} + engines: {node: ^18.19.0 || >=20.6.0} + peerDependencies: + '@opentelemetry/api': ^1.3.0 + + '@opentelemetry/instrumentation-mongodb@0.53.0': + resolution: {integrity: sha512-zS2gQJQuG7RZw5yaNG/TnxsOtv1fFkn3ypuDrVLJtJLZtcOr4GYn31jbIA8od+QW/ChZLVcH364iDs+z/xS9wA==} + engines: {node: ^18.19.0 || >=20.6.0} + peerDependencies: + '@opentelemetry/api': ^1.3.0 + + '@opentelemetry/instrumentation-mongoose@0.47.1': + resolution: {integrity: sha512-0OcL5YpZX9PtF55Oi1RtWUdjElJscR9u6NzAdww81EQc3wFfQWmdREUEBeWaDH5jpiomdFp6zDXms622ofEOjg==} + engines: {node: ^18.19.0 || >=20.6.0} + peerDependencies: + '@opentelemetry/api': ^1.3.0 + + '@opentelemetry/instrumentation-mysql2@0.46.0': + resolution: {integrity: sha512-JsmIA+aTfHqy2tahjnVWChRipYpYrTy+XFAuUPia9CTaspCx8ZrirPUqYnbnaPEtnzYff2a4LX0B2LT1hKlOiA==} + engines: {node: ^18.19.0 || >=20.6.0} + peerDependencies: + '@opentelemetry/api': ^1.3.0 + + '@opentelemetry/instrumentation-mysql@0.46.0': + resolution: {integrity: sha512-Z1NDAv07suIukgL7kxk9cAQX1t/smRMLNOU+q5Aqnhnf/0FIF/N4cX2wg+25IWy0m2PoaPbAVYCKB0aOt5vzAw==} + engines: {node: ^18.19.0 || >=20.6.0} + peerDependencies: + '@opentelemetry/api': ^1.3.0 + + '@opentelemetry/instrumentation-nestjs-core@0.45.0': + resolution: {integrity: sha512-qcFMFYn6fqtpCLJZxO+Oh6yOmko81xGejmGzAdg+Vlj3+WiN849PcBpeZAtYy7QaaqXe3U/8AUw8thcNeszd/A==} + engines: {node: ^18.19.0 || >=20.6.0} + peerDependencies: + '@opentelemetry/api': ^1.3.0 + + '@opentelemetry/instrumentation-net@0.44.0': + resolution: {integrity: sha512-SmAbOKTi0lgdTN9XMXOaf+4jw670MpiK3pw9/to/kRlTvNWwWA4RD34trCcoL7Gf2IYoXuj56Oo4Z5C7N98ukw==} + engines: {node: ^18.19.0 || >=20.6.0} + peerDependencies: + '@opentelemetry/api': ^1.3.0 + + '@opentelemetry/instrumentation-pg@0.52.0': + resolution: {integrity: sha512-OBpqlxTqmFkZGHaHV4Pzd95HkyKVS+vf0N5wVX3BSb8uqsvOrW62I1qt+2jNsZ13dtG5eOzvcsQTMGND76wizA==} + engines: {node: ^18.19.0 || >=20.6.0} + peerDependencies: + '@opentelemetry/api': ^1.3.0 + + '@opentelemetry/instrumentation-pino@0.47.0': + resolution: {integrity: sha512-OFOy/TGtGXMYWrF4xPKhLN1evdqUpbuoKODzeh3GSjFkcooZZf4m/Hpzu12FV+s0wDBf43oAjXbNJWeCJQMrug==} + engines: {node: ^18.19.0 || >=20.6.0} + peerDependencies: + '@opentelemetry/api': ^1.3.0 + + '@opentelemetry/instrumentation-redis-4@0.47.0': + resolution: {integrity: sha512-9LywJGp1fmmLj6g1+Rv91pVE3ATle1C/qIya9ZLwPywXTOdFIARI/gvvvlI7uFABoLojj2dSaI/5JQrq4C1HSg==} + engines: {node: ^18.19.0 || >=20.6.0} + peerDependencies: + '@opentelemetry/api': ^1.3.0 + + '@opentelemetry/instrumentation-redis@0.47.0': + resolution: {integrity: sha512-T2YvuX/LaJEQKgKvIQJlbSMSzxp6oBm+9PMgfn7QcBXzSY9tyeyDF6QjLAKNvxs+BJeQzFmDlahjoEyatzxRWA==} + engines: {node: ^18.19.0 || >=20.6.0} + peerDependencies: + '@opentelemetry/api': ^1.3.0 + + '@opentelemetry/instrumentation-restify@0.46.0': + resolution: {integrity: sha512-du1FjKsTGQH6q8QjG0Bxlg0L79Co/Ey0btKKb2sg7fvg0YX6LKdR2N1fzfne/A9k+WjQ5v28JuUXOk2cEPYU/Q==} + engines: {node: ^18.19.0 || >=20.6.0} + peerDependencies: + '@opentelemetry/api': ^1.3.0 + + '@opentelemetry/instrumentation-router@0.45.0': + resolution: {integrity: sha512-CGEeT73Wy/nLQw+obG/mBCIgMbZQKrGG6hzbEdtQ4G2jqI97w7pLWdM4DvkpWVBNcxMpO13dX1nn2OiyZXND3Q==} + engines: {node: ^18.19.0 || >=20.6.0} + peerDependencies: + '@opentelemetry/api': ^1.3.0 + + '@opentelemetry/instrumentation-socket.io@0.47.0': + resolution: {integrity: sha512-qAc+XCcRmZYjs8KJIPv+MMR2wPPPOppwoarzKRR4G+yvOBs1xMwbbkqNHifKga0XcfFX4KVr7Z5QQ6ZZzWyLtg==} + engines: {node: ^18.19.0 || >=20.6.0} + peerDependencies: + '@opentelemetry/api': ^1.3.0 + + '@opentelemetry/instrumentation-tedious@0.19.0': + resolution: {integrity: sha512-hNC/Bz+g4RvwaKsbA1VD+9x8X2Ml+fN2uba4dniIdQIrAItLdet4xx/7TEoWYtyVJQozphvpnIsUp52Rw4djCA==} + engines: {node: ^18.19.0 || >=20.6.0} + peerDependencies: + '@opentelemetry/api': ^1.3.0 + + '@opentelemetry/instrumentation-undici@0.11.0': + resolution: {integrity: sha512-H6ijJnKVZBB0Lhm6NsaBt0rUz+i52LriLhrpGAE8SazB0jCIVY4MrL2dNib/4w8zA+Fw9zFwERJvKXUIbSD1ew==} + engines: {node: ^18.19.0 || >=20.6.0} + peerDependencies: + '@opentelemetry/api': ^1.7.0 + + '@opentelemetry/instrumentation-winston@0.45.0': + resolution: {integrity: sha512-LZz3/6QvzoneSqD/xnB8wq/g1fy8oe2PwfZ15zS2YA5mnjuSqlqgl+k3sib7wfIYHMP1D3ajfbDB6UOJBALj/w==} + engines: {node: ^18.19.0 || >=20.6.0} + peerDependencies: + '@opentelemetry/api': ^1.3.0 + + '@opentelemetry/instrumentation@0.200.0': + resolution: {integrity: sha512-pmPlzfJd+vvgaZd/reMsC8RWgTXn2WY1OWT5RT42m3aOn5532TozwXNDhg1vzqJ+jnvmkREcdLr27ebJEQt0Jg==} + engines: {node: ^18.19.0 || >=20.6.0} + peerDependencies: + '@opentelemetry/api': ^1.3.0 + + '@opentelemetry/instrumentation@0.57.0': + resolution: {integrity: sha512-qIKp+tSCLqofneUWRc5XHtr9jHIq0N0BJfaJamM9gjEFO8sthV4SDXDGNOSAx16PxkbrQJ5/AxMPAGCXl8W/Hg==} + engines: {node: '>=14'} + peerDependencies: + '@opentelemetry/api': ^1.3.0 + + '@opentelemetry/otlp-exporter-base@0.200.0': + resolution: {integrity: sha512-IxJgA3FD7q4V6gGq4bnmQM5nTIyMDkoGFGrBrrDjB6onEiq1pafma55V+bHvGYLWvcqbBbRfezr1GED88lacEQ==} + engines: {node: ^18.19.0 || >=20.6.0} + peerDependencies: + '@opentelemetry/api': ^1.3.0 + + '@opentelemetry/otlp-exporter-base@0.57.0': + resolution: {integrity: sha512-QQl4Ngm3D6H8SDO0EM642ncTxjRsf/HDq7+IWIA0eaEK/NTsJeQ3iYJiZj3F4jkALnvyeM1kkwd+DHtqxTBx9Q==} + engines: {node: '>=14'} + peerDependencies: + '@opentelemetry/api': ^1.3.0 + + '@opentelemetry/otlp-grpc-exporter-base@0.200.0': + resolution: {integrity: sha512-CK2S+bFgOZ66Bsu5hlDeOX6cvW5FVtVjFFbWuaJP0ELxJKBB6HlbLZQ2phqz/uLj1cWap5xJr/PsR3iGoB7Vqw==} + engines: {node: ^18.19.0 || >=20.6.0} + peerDependencies: + '@opentelemetry/api': ^1.3.0 + + '@opentelemetry/otlp-grpc-exporter-base@0.57.0': + resolution: {integrity: sha512-EKcVd4p7Jm6nir9Phg8dW7JgHhXg7MvtIn52NMx7qfJkY0ybqQozoGAVEZcM2zo28E0I6eSaenBmlko/cLHg9A==} + engines: {node: '>=14'} + peerDependencies: + '@opentelemetry/api': ^1.3.0 + + '@opentelemetry/otlp-transformer@0.200.0': + resolution: {integrity: sha512-+9YDZbYybOnv7sWzebWOeK6gKyt2XE7iarSyBFkwwnP559pEevKOUD8NyDHhRjCSp13ybh9iVXlMfcj/DwF/yw==} + engines: {node: ^18.19.0 || >=20.6.0} + peerDependencies: + '@opentelemetry/api': ^1.3.0 + + '@opentelemetry/otlp-transformer@0.57.0': + resolution: {integrity: sha512-yHX7sdwkdAmSa6Jbi3caSLDWy0PCHS1pKQeKz8AIWSyQqL7IojHKgdk9A+7eRd98Z1n9YTdwWSWLnObvIqhEhQ==} + engines: {node: '>=14'} + peerDependencies: + '@opentelemetry/api': ^1.3.0 + + '@opentelemetry/propagation-utils@0.31.16': + resolution: {integrity: sha512-UPpUe52VoKJFTudOsaOZBtx7QJzSuMGF08B257IQTCEnxi51o05ioBMY/G5ihUbfSsYKDsuSZdTS5s1j3d0bOA==} + engines: {node: ^18.19.0 || >=20.6.0} + peerDependencies: + '@opentelemetry/api': ^1.0.0 + + '@opentelemetry/propagator-b3@1.30.0': + resolution: {integrity: sha512-lcobQQmd+hLdtxJJKu/i51lNXmF1PJJ7Y9B97ciHRVQuMI260vSZG7Uf4Zg0fqR8PB+fT/7rnlDwS0M7QldZQQ==} + engines: {node: '>=14'} + peerDependencies: + '@opentelemetry/api': '>=1.0.0 <1.10.0' + + '@opentelemetry/propagator-b3@2.0.0': + resolution: {integrity: sha512-blx9S2EI49Ycuw6VZq+bkpaIoiJFhsDuvFGhBIoH3vJ5oYjJ2U0s3fAM5jYft99xVIAv6HqoPtlP9gpVA2IZtA==} + engines: {node: ^18.19.0 || >=20.6.0} + peerDependencies: + '@opentelemetry/api': '>=1.0.0 <1.10.0' + + '@opentelemetry/propagator-jaeger@1.30.0': + resolution: {integrity: sha512-0hdP495V6HPRkVpowt54+Swn5NdesMIRof+rlp0mbnuIUOM986uF+eNxnPo9q5MmJegVBRTxgMHXXwvnXRnKRg==} + engines: {node: '>=14'} + peerDependencies: + '@opentelemetry/api': '>=1.0.0 <1.10.0' + + '@opentelemetry/propagator-jaeger@2.0.0': + resolution: {integrity: sha512-Mbm/LSFyAtQKP0AQah4AfGgsD+vsZcyreZoQ5okFBk33hU7AquU4TltgyL9dvaO8/Zkoud8/0gEvwfOZ5d7EPA==} + engines: {node: ^18.19.0 || >=20.6.0} + peerDependencies: + '@opentelemetry/api': '>=1.0.0 <1.10.0' + + '@opentelemetry/redis-common@0.37.0': + resolution: {integrity: sha512-tJwgE6jt32bLs/9J6jhQRKU2EZnsD8qaO13aoFyXwF6s4LhpT7YFHf3Z03MqdILk6BA2BFUhoyh7k9fj9i032A==} + engines: {node: ^18.19.0 || >=20.6.0} + + '@opentelemetry/resource-detector-alibaba-cloud@0.31.11': + resolution: {integrity: sha512-R/asn6dAOWMfkLeEwqHCUz0cNbb9oiHVyd11iwlypeT/p9bR1lCX5juu5g/trOwxo62dbuFcDbBdKCJd3O2Edg==} + engines: {node: ^18.19.0 || >=20.6.0} + peerDependencies: + '@opentelemetry/api': ^1.0.0 + + '@opentelemetry/resource-detector-aws@2.13.0': + resolution: {integrity: sha512-ZPCn7gZhGqUYUoD+RCHIlayoHBMaJaEjfqlgz2EPKoXJ4y7Ru7CUm+Tm3yJVMKF92cN9xUQR0j5KALyF0fg9aw==} + engines: {node: ^18.19.0 || >=20.6.0} + peerDependencies: + '@opentelemetry/api': ^1.0.0 + + '@opentelemetry/resource-detector-azure@0.7.0': + resolution: {integrity: sha512-aR2ALsK+b/+5lLDhK9KTK8rcuKg7+sqa/Cg+QCeasqoy7qby70FRtAbQcZGljJ5BLBcVPYjl1hcTYIUyL3Laww==} + engines: {node: ^18.19.0 || >=20.6.0} + peerDependencies: + '@opentelemetry/api': ^1.0.0 + + '@opentelemetry/resource-detector-container@0.7.11': + resolution: {integrity: sha512-XUxnGuANa/EdxagipWMXKYFC7KURwed9/V0+NtYjFmwWHzV9/J4IYVGTK8cWDpyUvAQf/vE4sMa3rnS025ivXQ==} + engines: {node: ^18.19.0 || >=20.6.0} + peerDependencies: + '@opentelemetry/api': ^1.0.0 + + '@opentelemetry/resource-detector-gcp@0.34.0': + resolution: {integrity: sha512-Mug9Oing1nVQE8pYT33UKuPSEa/wjQTMk3feS9F84h4U7oZIx5Mz3yddj3OHOPgrW/7d1Ve/mG7jmYqBI9tpTg==} + engines: {node: ^18.19.0 || >=20.6.0} + peerDependencies: + '@opentelemetry/api': ^1.0.0 + + '@opentelemetry/resources@1.30.0': + resolution: {integrity: sha512-5mGMjL0Uld/99t7/pcd7CuVtJbkARckLVuiOX84nO8RtLtIz0/J6EOHM2TGvPZ6F4K+XjUq13gMx14w80SVCQg==} + engines: {node: '>=14'} + peerDependencies: + '@opentelemetry/api': '>=1.0.0 <1.10.0' + + '@opentelemetry/resources@2.0.0': + resolution: {integrity: sha512-rnZr6dML2z4IARI4zPGQV4arDikF/9OXZQzrC01dLmn0CZxU5U5OLd/m1T7YkGRj5UitjeoCtg/zorlgMQcdTg==} + engines: {node: ^18.19.0 || >=20.6.0} + peerDependencies: + '@opentelemetry/api': '>=1.3.0 <1.10.0' + + '@opentelemetry/resources@2.6.0': + resolution: {integrity: sha512-D4y/+OGe3JSuYUCBxtH5T9DSAWNcvCb/nQWIga8HNtXTVPQn59j0nTBAgaAXxUVBDl40mG3Tc76b46wPlZaiJQ==} + engines: {node: ^18.19.0 || >=20.6.0} + peerDependencies: + '@opentelemetry/api': '>=1.3.0 <1.10.0' + + '@opentelemetry/sdk-logs@0.200.0': + resolution: {integrity: sha512-VZG870063NLfObmQQNtCVcdXXLzI3vOjjrRENmU37HYiPFa0ZXpXVDsTD02Nh3AT3xYJzQaWKl2X2lQ2l7TWJA==} + engines: {node: ^18.19.0 || >=20.6.0} + peerDependencies: + '@opentelemetry/api': '>=1.4.0 <1.10.0' + + '@opentelemetry/sdk-logs@0.57.0': + resolution: {integrity: sha512-6Kbxdu/QE9LWH7+WSLmYo3DjAq+c55TiCLXiXu6b/2m2muy5SyOG2m0MrGqetyRpfYSSbIqHmJoqNVTN3+2a9g==} + engines: {node: '>=14'} + peerDependencies: + '@opentelemetry/api': '>=1.4.0 <1.10.0' + + '@opentelemetry/sdk-metrics@1.30.0': + resolution: {integrity: sha512-5kcj6APyRMvv6dEIP5plz2qfJAD4OMipBRT11u/pa1a68rHKI2Ln+iXVkAGKgx8o7CXbD7FdPypTUY88ZQgP4Q==} + engines: {node: '>=14'} + peerDependencies: + '@opentelemetry/api': '>=1.3.0 <1.10.0' + + '@opentelemetry/sdk-metrics@2.0.0': + resolution: {integrity: sha512-Bvy8QDjO05umd0+j+gDeWcTaVa1/R2lDj/eOvjzpm8VQj1K1vVZJuyjThpV5/lSHyYW2JaHF2IQ7Z8twJFAhjA==} + engines: {node: ^18.19.0 || >=20.6.0} + peerDependencies: + '@opentelemetry/api': '>=1.9.0 <1.10.0' + + '@opentelemetry/sdk-node@0.200.0': + resolution: {integrity: sha512-S/YSy9GIswnhYoDor1RusNkmRughipvTCOQrlF1dzI70yQaf68qgf5WMnzUxdlCl3/et/pvaO75xfPfuEmCK5A==} + engines: {node: ^18.19.0 || >=20.6.0} + peerDependencies: + '@opentelemetry/api': '>=1.3.0 <1.10.0' + + '@opentelemetry/sdk-node@0.57.0': + resolution: {integrity: sha512-zIeTu4m+zAPgziReQOf4jPq0J+V9Q/q1bQPTeB3Wo194SxY99uGkkCreJpH6ICDmR5e2ipSNkq6CNXyFmkWa9g==} + engines: {node: '>=14'} + peerDependencies: + '@opentelemetry/api': '>=1.3.0 <1.10.0' + + '@opentelemetry/sdk-trace-base@1.30.0': + resolution: {integrity: sha512-RKQDaDIkV7PwizmHw+rE/FgfB2a6MBx+AEVVlAHXRG1YYxLiBpPX2KhmoB99R5vA4b72iJrjle68NDWnbrE9Dg==} + engines: {node: '>=14'} + peerDependencies: + '@opentelemetry/api': '>=1.0.0 <1.10.0' + + '@opentelemetry/sdk-trace-base@2.0.0': + resolution: {integrity: sha512-qQnYdX+ZCkonM7tA5iU4fSRsVxbFGml8jbxOgipRGMFHKaXKHQ30js03rTobYjKjIfnOsZSbHKWF0/0v0OQGfw==} + engines: {node: ^18.19.0 || >=20.6.0} + peerDependencies: + '@opentelemetry/api': '>=1.3.0 <1.10.0' + + '@opentelemetry/sdk-trace-node@1.30.0': + resolution: {integrity: sha512-MeXkXEdBs9xq1JSGTr/3P1lHBSUBaVmo1+UpoQhUpviPMzDXy0MNsdTC7KKI6/YcG74lTX6eqeNjlC1jV4Rstw==} + engines: {node: '>=14'} + peerDependencies: + '@opentelemetry/api': '>=1.0.0 <1.10.0' + + '@opentelemetry/sdk-trace-node@2.0.0': + resolution: {integrity: sha512-omdilCZozUjQwY3uZRBwbaRMJ3p09l4t187Lsdf0dGMye9WKD4NGcpgZRvqhI1dwcH6og+YXQEtoO9Wx3ykilg==} + engines: {node: ^18.19.0 || >=20.6.0} + peerDependencies: + '@opentelemetry/api': '>=1.0.0 <1.10.0' + + '@opentelemetry/semantic-conventions@1.28.0': + resolution: {integrity: sha512-lp4qAiMTD4sNWW4DbKLBkfiMZ4jbAboJIGOQr5DvciMRI494OapieI9qiODpOt0XBr1LjIDy1xAGAnVs5supTA==} + engines: {node: '>=14'} + + '@opentelemetry/semantic-conventions@1.30.0': + resolution: {integrity: sha512-4VlGgo32k2EQ2wcCY3vEU28A0O13aOtHz3Xt2/2U5FAh9EfhD6t6DqL5Z6yAnRCntbTFDU4YfbpyzSlHNWycPw==} + engines: {node: '>=14'} + + '@opentelemetry/sql-common@0.41.2': + resolution: {integrity: sha512-4mhWm3Z8z+i508zQJ7r6Xi7y4mmoJpdvH0fZPFRkWrdp5fq7hhZ2HhYokEOLkfqSMgPR4Z9EyB3DBkbKGOqZiQ==} + engines: {node: ^18.19.0 || >=20.6.0} + peerDependencies: + '@opentelemetry/api': ^1.1.0 + '@paralleldrive/cuid2@2.3.1': resolution: {integrity: sha512-XO7cAxhnTZl0Yggq6jOgjiOHhbgcO4NqFqwSmQpjK3b6TEE6Uj/jfSk6wzYyemh3+I0sHirKSetjQwn5cZktFw==} @@ -502,6 +1156,36 @@ packages: react: ^18.0.0 || ^19.0.0 react-dom: ^18.0.0 || ^19.0.0 + '@protobufjs/aspromise@1.1.2': + resolution: {integrity: sha512-j+gKExEuLmKwvz3OgROXtrJ2UG2x8Ch2YZUxahh+s1F2HZ+wAceUNLkvy6zKCPVRkU++ZWQrdxsUeQXmcg4uoQ==} + + '@protobufjs/base64@1.1.2': + resolution: {integrity: sha512-AZkcAA5vnN/v4PDqKyMR5lx7hZttPDgClv83E//FMNhR2TMcLUhfRUBHCmSl0oi9zMgDDqRUJkSxO3wm85+XLg==} + + '@protobufjs/codegen@2.0.4': + resolution: {integrity: sha512-YyFaikqM5sH0ziFZCN3xDC7zeGaB/d0IUb9CATugHWbd1FRFwWwt4ld4OYMPWu5a3Xe01mGAULCdqhMlPl29Jg==} + + '@protobufjs/eventemitter@1.1.0': + resolution: {integrity: sha512-j9ednRT81vYJ9OfVuXG6ERSTdEL1xVsNgqpkxMsbIabzSo3goCjDIveeGv5d03om39ML71RdmrGNjG5SReBP/Q==} + + '@protobufjs/fetch@1.1.0': + resolution: {integrity: sha512-lljVXpqXebpsijW71PZaCYeIcE5on1w5DlQy5WH6GLbFryLUrBD4932W/E2BSpfRJWseIL4v/KPgBFxDOIdKpQ==} + + '@protobufjs/float@1.0.2': + resolution: {integrity: sha512-Ddb+kVXlXst9d+R9PfTIxh1EdNkgoRe5tOX6t01f1lYWOvJnSPDBlG241QLzcyPdoNTsblLUdujGSE4RzrTZGQ==} + + '@protobufjs/inquire@1.1.0': + resolution: {integrity: sha512-kdSefcPdruJiFMVSbn801t4vFK7KB/5gd2fYvrxhuJYg8ILrmn9SKSX2tZdV6V+ksulWqS7aXjBcRXl3wHoD9Q==} + + '@protobufjs/path@1.1.2': + resolution: {integrity: sha512-6JOcJ5Tm08dOHAbdR3GrvP+yUUfkjG5ePsHYczMFLq3ZmMkAD98cDgcT2iA1lJ9NVwFd4tH/iSSoe44YWkltEA==} + + '@protobufjs/pool@1.1.0': + resolution: {integrity: sha512-0kELaGSIDBKvcgS4zkjz1PeddatrjYcmMWOlAuAPwAeccUrPHdUqo/J6LiymHHEiJT5NrF1UVwxY14f+fy4WQw==} + + '@protobufjs/utf8@1.1.0': + resolution: {integrity: sha512-Vvn3zZrhQZkkBE8LSuW3em98c0FwgO4nxzv6OdSxPKJIEKY2bGbHn+mhGIPerzI4twdxaP8/0+06HBpwf345Lw==} + '@redis/bloom@5.11.0': resolution: {integrity: sha512-KYiVilAhAFN3057afUb/tfYJpsEyTkQB+tQcn5gVVA7DgcNOAj8lLxe4j8ov8BF6I9C1Fe/kwlbuAICcTMX8Lw==} engines: {node: '>= 18'} @@ -669,9 +1353,15 @@ packages: '@standard-schema/spec@1.1.0': resolution: {integrity: sha512-l2aFy5jALhniG5HgqrD6jXLi/rUWrKvqN/qJx6yoJsgKhblVd+iqqU4RCXavm/jPityDo5TCvKMnpjKnOriy0w==} + '@types/aws-lambda@8.10.147': + resolution: {integrity: sha512-nD0Z9fNIZcxYX5Mai2CTmFD7wX7UldCkW2ezCF8D1T5hdiLsnTWDGRpfRYntU6VjTdLQjOvyszru7I1c1oCQew==} + '@types/body-parser@1.19.6': resolution: {integrity: sha512-HLFeCYgz89uk22N5Qg3dvGvsv46B8GLvKKo1zKG4NybA8U2DiEO3w9lqGg29t/tfLRJpJ6iQxnVw4OnB7MoM9g==} + '@types/bunyan@1.8.11': + resolution: {integrity: sha512-758fRH7umIMk5qt5ELmRMff4mLDlN+xyYzC+dkPTdKwbSkJFvz6xwyScrytPU0QIBbRRwbiE8/BIg8bpajerNQ==} + '@types/chai@5.2.3': resolution: {integrity: sha512-Mw558oeA9fFbv65/y4mHtXDs9bPnFMZAL/jxdPFUpOHHIXX91mcgEHbS5Lahr+pwZFR8A7GQleRWeI6cGFC2UA==} @@ -711,6 +1401,9 @@ packages: '@types/jsonwebtoken@9.0.10': resolution: {integrity: sha512-asx5hIG9Qmf/1oStypjanR7iKTv0gXQ1Ov/jfrX6kS/EO0OFni8orbmGCn0672NHR3kXHwpAwR+B368ZGN/2rA==} + '@types/memcached@2.2.10': + resolution: {integrity: sha512-AM9smvZN55Gzs2wRrqeMHVP7KE8KWgCJO/XL5yCly2xF6EKa4YlbpK+cLSAH4NG/Ah64HrlegmGqW8kYws7Vxg==} + '@types/methods@1.1.4': resolution: {integrity: sha512-ymXWVrDiCxTBE3+RIrrP533E70eA+9qu7zdWoHuOmGujkYtzf4HQF96b8nwHLqhuf4ykX61IGRIB38CC6/sImQ==} @@ -720,15 +1413,24 @@ packages: '@types/multer@2.0.0': resolution: {integrity: sha512-C3Z9v9Evij2yST3RSBktxP9STm6OdMc5uR1xF1SGr98uv8dUlAL2hqwrZ3GVB3uyMyiegnscEK6PGtYvNrjTjw==} + '@types/mysql@2.15.26': + resolution: {integrity: sha512-DSLCOXhkvfS5WNNPbfn2KdICAmk8lLc+/PNvnPnF7gOdMZCxopXduqv0OQ13y/yA/zXTSikZZqVgybUxOEg6YQ==} + '@types/node@25.3.0': resolution: {integrity: sha512-4K3bqJpXpqfg2XKGK9bpDTc6xO/xoUP/RBWS7AtRMug6zZFaRekiLzjVtAoZMquxoAbzBvy5nxQ7veS5eYzf8A==} '@types/nodemailer@7.0.11': resolution: {integrity: sha512-E+U4RzR2dKrx+u3N4DlsmLaDC6mMZOM/TPROxA0UAPiTgI0y4CEFBmZE+coGWTjakDriRsXG368lNk1u9Q0a2g==} + '@types/pg-pool@2.0.6': + resolution: {integrity: sha512-TaAUE5rq2VQYxab5Ts7WZhKNmuN78Q6PiFonTDdpbx8a1H0M1vhy3rhiMjl+e2iHmogyMw7jZF4FrE6eJUy5HQ==} + '@types/pg@8.16.0': resolution: {integrity: sha512-RmhMd/wD+CF8Dfo+cVIy3RR5cl8CyfXQ0tGgW6XBL8L4LM/UTEbNXYRbLwU6w+CgrKBNbrQWt4FUtTfaU5jSYQ==} + '@types/pg@8.6.1': + resolution: {integrity: sha512-1Kc4oAGzAl7uqUStZCDvaLFqZrW9qWSjXOmBfdgyBP5La7Us6Mg4GBvRlSoaZMhQF/zSj1C8CtKMBkoiT8eL8w==} + '@types/qs@6.14.0': resolution: {integrity: sha512-eOunJqu0K1923aExK6y8p6fsihYEn/BYuQ4g0CxAAgFc4b/ZLN4CrsRZ55srTdqoiLzU2B2evC+apEIxprEzkQ==} @@ -744,6 +1446,9 @@ packages: '@types/serve-static@2.2.0': resolution: {integrity: sha512-8mam4H1NHLtu7nmtalF7eyBH14QyOASmcxHhSfEoRyr0nP/YdoesEtU+uSRvMe96TW/HPTtkoKqQLl53N7UXMQ==} + '@types/shimmer@1.2.0': + resolution: {integrity: sha512-UE7oxhQLLd9gub6JKIAhDq06T0F6FnztwMNRvYgjeQSBeMc1ZG/tA47EwfduvkuQS8apbkM/lpLpWsaCeYsXVg==} + '@types/superagent@8.1.9': resolution: {integrity: sha512-pTVjI73witn+9ILmoJdajHGW2jkSaOzhiFYF1Rd3EQ94kymLqB9PjD9ISg7WaALC7+dCHT0FGe9T2LktLq/3GQ==} @@ -756,6 +1461,9 @@ packages: '@types/swagger-ui-express@4.1.8': resolution: {integrity: sha512-AhZV8/EIreHFmBV5wAs0gzJUNq9JbbSXgJLQubCC0jtIo6prnI9MIRRxnU4MZX9RB9yXxF1V4R7jtLl/Wcj31g==} + '@types/tedious@4.0.14': + resolution: {integrity: sha512-KHPsfX/FoVbUGbyYvk1q9MMQHLPeRZhRJZdO45Q4YjvFkv4hMNghCWTvy7rdKessBsmtz4euWCWAB6/tVpI1Iw==} + '@types/uuid@11.0.0': resolution: {integrity: sha512-HVyk8nj2m+jcFRNazzqyVKiZezyhDKrGUA3jlEcg/nZ6Ms+qHwocba1Y/AaVaznJTAM9xpdFSh+ptbNrhOGvZA==} deprecated: This is a stub types definition. uuid provides its own type definitions, so you do not need this installed. @@ -820,11 +1528,28 @@ packages: resolution: {integrity: sha512-5cvg6CtKwfgdmVqY1WIiXKc3Q1bkRqGLi+2W/6ao+6Y7gu/RCwRuAhGEzh5B4KlszSuTLgZYuqFqo5bImjNKng==} engines: {node: '>= 0.6'} + acorn-import-attributes@1.9.5: + resolution: {integrity: sha512-n02Vykv5uA3eHGM/Z2dQrcD56kL8TyDb2p1+0P83PClMnC/nc+anbQRhIOWnSq4Ke/KvDPrY3C9hDtC/A3eHnQ==} + peerDependencies: + acorn: ^8 + acorn@8.16.0: resolution: {integrity: sha512-UVJyE9MttOsBQIDKw1skb9nAwQuR5wuGD3+82K6JgJlm/Y+KI92oNsMNGZCYdDsVtRHSak0pcV5Dno5+4jh9sw==} engines: {node: '>=0.4.0'} hasBin: true + agent-base@7.1.4: + resolution: {integrity: sha512-MnA+YT8fwfJPgBx3m60MNqakm30XOkyIoH1y6huTQvC0PwZG7ki8NacLBcrPbNoo8vEZy7Jpuk7+jMO+CUovTQ==} + engines: {node: '>= 14'} + + ansi-regex@5.0.1: + resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} + engines: {node: '>=8'} + + ansi-styles@4.3.0: + resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} + engines: {node: '>=8'} + any-promise@1.3.0: resolution: {integrity: sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==} @@ -870,6 +1595,9 @@ packages: resolution: {integrity: sha512-lGe34o6EHj9y3Kts9R4ZYs/Gr+6N7MCaMlIFA3F1R2O5/m7K06AxfSeO5530PEERE6/WyEg3lsuyw4GHlPZHog==} engines: {node: ^4.5.0 || >= 5.9} + bignumber.js@9.3.1: + resolution: {integrity: sha512-Ko0uX15oIUS7wJ3Rb30Fs6SkVbLmPBAKdlm7q9+ak9bbIeFf0MwuBsQV6z7+X768/cHsfg+WlysDWJcmthjsjQ==} + block-stream2@2.1.0: resolution: {integrity: sha512-suhjmLI57Ewpmq00qaygS8UgEq2ly2PCItenIyhMqVjo4t4pGzqMvfgJuX8iWTeSDdfSSqS6j38fL4ToNL7Pfg==} @@ -956,10 +1684,24 @@ packages: citty@0.2.1: resolution: {integrity: sha512-kEV95lFBhQgtogAPlQfJJ0WGVSokvLr/UEoFPiKKOXF7pl98HfUVUD0ejsuTCld/9xH9vogSywZ5KqHzXrZpqg==} + cjs-module-lexer@1.4.3: + resolution: {integrity: sha512-9z8TZaGM1pfswYeXrUpzPrkx8UnWYdhJclsiYMm6x/w5+nN+8Tf/LnAgfLGQCm59qAOxU8WwHEq2vNwF6i4j+Q==} + + cliui@8.0.1: + resolution: {integrity: sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==} + engines: {node: '>=12'} + cluster-key-slot@1.1.2: resolution: {integrity: sha512-RMr0FhtfXemyinomL4hrWcYJxmX6deFdCxpJzhDttxgO1+bcCnkk+9drydLVDmAMG7NE6aN/fl4F7ucU/90gAA==} engines: {node: '>=0.10.0'} + color-convert@2.0.1: + resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} + engines: {node: '>=7.0.0'} + + color-name@1.1.4: + resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} + colorette@2.0.20: resolution: {integrity: sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==} @@ -1130,6 +1872,9 @@ packages: effect@3.18.4: resolution: {integrity: sha512-b1LXQJLe9D11wfnOKAk3PKxuqYshQ0Heez+y5pnkd3jLj1yx9QhM72zZ9uUrOQyNvrs2GZZd/3maL0ZV18YuDA==} + emoji-regex@8.0.0: + resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} + empathic@2.0.0: resolution: {integrity: sha512-i6UzDscO/XfAcNYD75CfICkmfLedpyPDdozrLMmQc5ORaQcdMoc21OnlEylMIqI7U8eniKrPMxxtj8k0vhmJhA==} engines: {node: '>=14'} @@ -1173,6 +1918,10 @@ packages: engines: {node: '>=18'} hasBin: true + escalade@3.2.0: + resolution: {integrity: sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==} + engines: {node: '>=6'} + escape-html@1.0.3: resolution: {integrity: sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==} @@ -1211,6 +1960,9 @@ packages: exsolve@1.0.8: resolution: {integrity: sha512-LmDxfWXwcTArk8fUEnOfSZpHOJ6zOMUJKOtFLFqJLoKJetuQG874Uc7/Kki7zFLzYybmZhp1M7+98pfMqeX8yA==} + extend@3.0.2: + resolution: {integrity: sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==} + fast-check@3.23.2: resolution: {integrity: sha512-h5+1OzzfCC3Ef7VbtKdcv7zsstUQwUDlYpUTvjeUsJAssPgLn7QzbboPtL5ro04Mq0rPOsMzl7q5hIbRs2wD1A==} engines: {node: '>=8.0.0'} @@ -1267,6 +2019,9 @@ packages: resolution: {integrity: sha512-YikH+7CUTOtP44ZTnUhR7Ic2UASBPOqmaRkRKxRbywPTe5VxF7RRCck4af9wutiZ/QKM5nME9Bie2fFaPz5Gug==} engines: {node: '>=14.0.0'} + forwarded-parse@2.1.2: + resolution: {integrity: sha512-alTFZZQDKMporBH77856pXgzhEzaUVmLCDk+egLgIgHst3Tpndzz8MnKe+GzRJRfvVdn69HhpW7cmXzvtLvJAw==} + forwarded@0.2.0: resolution: {integrity: sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==} engines: {node: '>= 0.6'} @@ -1283,6 +2038,14 @@ packages: function-bind@1.1.2: resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==} + gaxios@6.7.1: + resolution: {integrity: sha512-LDODD4TMYx7XXdpwxAVRAIAuB0bzv0s+ywFonY46k126qzQHT9ygyoa9tncmOiQmmDrik65UYsEkv3lbfqQ3yQ==} + engines: {node: '>=14'} + + gcp-metadata@6.1.1: + resolution: {integrity: sha512-a4tiq7E0/5fTjxPAaH4jpjkSv/uCaU2p5KC6HVGrvl0cDjA8iBZv4vv1gyzlmK0ZUKqwpOyQMKzZQe3lTit77A==} + engines: {node: '>=14'} + generate-function@2.3.1: resolution: {integrity: sha512-eeB5GfMNeevm/GRYq20ShmsaGcmI81kIX2K9XQx5miC8KdHaC6Jm0qQ8ZNeGOi7wYB8OsdxKs+Y2oVuTFuVwKQ==} @@ -1316,6 +2079,10 @@ packages: resolution: {integrity: sha512-Wjlyrolmm8uDpm/ogGyXZXb1Z+Ca2B8NbJwqBVg0axK9GbBeoS7yGV6vjXnYdGm6X53iehEuxxbyiKp8QmN4Vw==} engines: {node: 18 || 20 || >=22} + google-logging-utils@0.0.2: + resolution: {integrity: sha512-NEgUnEcBiP5HrPzufUkBzJOD/Sxsco3rLNo1F1TNf7ieU8ryUzBhqba8r756CjLX7rn3fHl6iLEwPYuqpoKgQQ==} + engines: {node: '>=14'} + gopd@1.2.0: resolution: {integrity: sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==} engines: {node: '>= 0.4'} @@ -1370,10 +2137,17 @@ packages: http-status-codes@2.3.0: resolution: {integrity: sha512-RJ8XvFvpPM/Dmc5SV+dC4y5PCeOhT3x1Hq0NU3rjGeg5a/CqlhZ7uudknPwZFz4aeAXDcbAyaeP7GAo9lvngtA==} + https-proxy-agent@7.0.6: + resolution: {integrity: sha512-vK9P5/iUfdl95AI+JVyUuIcVtd4ofvtrOr3HNtM2yxC9bnMbEdp3x01OhQNnjb8IJYi38VlTE3mBXwcfvywuSw==} + engines: {node: '>= 14'} + iconv-lite@0.7.2: resolution: {integrity: sha512-im9DjEDQ55s9fL4EYzOAv0yMqmMBSZp6G0VvFyTMPKWxiSBHUj9NW/qqLmXUwXrrM7AvqSlTCfvqRb0cM8yYqw==} engines: {node: '>=0.10.0'} + import-in-the-middle@1.15.0: + resolution: {integrity: sha512-bpQy+CrsRmYmoPMAE/0G33iwRqwW4ouqdRg8jgbH3aKuCtOc8lxgmYXg2dMM92CRiGP660EtBcymH/eVUpCSaA==} + inherits@2.0.4: resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} @@ -1397,6 +2171,14 @@ packages: resolution: {integrity: sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==} engines: {node: '>= 0.4'} + is-core-module@2.16.1: + resolution: {integrity: sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==} + engines: {node: '>= 0.4'} + + is-fullwidth-code-point@3.0.0: + resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==} + engines: {node: '>=8'} + is-generator-function@1.1.2: resolution: {integrity: sha512-upqt1SkGkODW9tsGNG5mtXTXtECizwtS2kA161M+gJPc1xdb/Ax629af6YrTwcOeQHbewrPNlE5Dx7kzvXTizA==} engines: {node: '>= 0.4'} @@ -1411,6 +2193,10 @@ packages: resolution: {integrity: sha512-MjYsKHO5O7mCsmRGxWcLWheFqN9DJ/2TmngvjKXihe6efViPqc274+Fx/4fYj/r03+ESvBdTXK0V6tA3rgez1g==} engines: {node: '>= 0.4'} + is-stream@2.0.1: + resolution: {integrity: sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==} + engines: {node: '>=8'} + is-typed-array@1.1.15: resolution: {integrity: sha512-p3EcsicXjit7SaskXHs1hA91QxgTw46Fv6EFKKGS5DRFLD8yKnohjF3hxoju94b/OcMZoQukzpPpBE9uLVKzgQ==} engines: {node: '>= 0.4'} @@ -1445,6 +2231,9 @@ packages: resolution: {integrity: sha512-qQKT4zQxXl8lLwBtHMWwaTcGfFOZviOJet3Oy/xmGk2gZH677CJM9EvtfdSkgWcATZhj/55JZ0rmy3myCT5lsA==} hasBin: true + json-bigint@1.0.0: + resolution: {integrity: sha512-SiPv/8VpZuWbvLSMtTDU8hEfrZWg/mH/nV/b4o0CYbSxu1UIQPLdwKOCIyLQX+VIPO5vrLX3i8qtqFyhdPSUSQ==} + json5@2.2.3: resolution: {integrity: sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==} engines: {node: '>=6'} @@ -1483,6 +2272,9 @@ packages: resolution: {integrity: sha512-IXO6OCs9yg8tMKzfPZ1YmheJbZCiEsnBdcB03l0OcfK9prKnJb96siuHCr5Fl37/yo9DnKU+TLpxzTUspw9shg==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + lodash.camelcase@4.3.0: + resolution: {integrity: sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA==} + lodash.get@4.4.2: resolution: {integrity: sha512-z+Uw/vLuy6gQe8cfaFWD7p0wVv8fJl3mbzXh33RS+0oW2wvUqiRXiQ69gLWSLpgB5/6sU+r6BlQR0MBILadqTQ==} deprecated: This package is deprecated. Use the optional chaining (?.) operator instead. @@ -1608,6 +2400,9 @@ packages: mlly@1.8.0: resolution: {integrity: sha512-l8D9ODSRWLe2KHJSifWGwBqpTZXIXTeo8mlKjY+E2HAakaTeNpqAyBZ8GSqLzHgw4XmHmC8whvpjJNMbFZN7/g==} + module-details-from-path@1.0.4: + resolution: {integrity: sha512-EGWKgxALGMgzvxYF1UyGTy0HXX/2vHLkw6+NvDKW2jypWbHpjQuj4UMcqQWXHERJhVGKikolT06G3bcKe4fi7w==} + mongodb-connection-string-url@7.0.1: resolution: {integrity: sha512-h0AZ9A7IDVwwHyMxmdMXKy+9oNlF0zFoahHiX3vQ8e3KFcSP3VmsmfvtRSuLPxmyv2vjIDxqty8smTgie/SNRQ==} engines: {node: '>=20.19.0'} @@ -1726,6 +2521,15 @@ packages: node-fetch-native@1.6.7: resolution: {integrity: sha512-g9yhqoedzIUm0nTnTqAQvueMPVOuIY16bqgAJJC8XOOubYFNwz6IER9qs0Gq2Xd0+CecCKFjtdDTMA4u4xG06Q==} + node-fetch@2.7.0: + resolution: {integrity: sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==} + engines: {node: 4.x || >=6.0.0} + peerDependencies: + encoding: ^0.1.0 + peerDependenciesMeta: + encoding: + optional: true + nodemailer@7.0.13: resolution: {integrity: sha512-PNDFSJdP+KFgdsG3ZzMXCgquO7I6McjY2vlqILjtJd0hy8wEvtugS9xKRF2NWlPNGxvLCXlTNIae4serI7dinw==} engines: {node: '>=6.0.0'} @@ -1775,6 +2579,9 @@ packages: resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} engines: {node: '>=8'} + path-parse@1.0.7: + resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==} + path-scurry@2.0.2: resolution: {integrity: sha512-3O/iVVsJAPsOnpwWIeD+d6z/7PmqApyQePUtCndjatj/9I5LylHvt5qluFaBT3I5h3r1ejfR056c+FCv+NnNXg==} engines: {node: 18 || 20 || >=22} @@ -1925,6 +2732,10 @@ packages: proper-lockfile@4.1.2: resolution: {integrity: sha512-TjNPblN4BwAWMXU8s9AEz4JmQxnD1NNL7bNOY/AKUzyamc379FWASUhc/K1pL2noVb+XmZKLL68cjzLsiOAMaA==} + protobufjs@7.5.4: + resolution: {integrity: sha512-CvexbZtbov6jW2eXAvLukXjXUW1TzFaivC46BpWc/3BpcCysb5Vffu+B3XHMm8lVEuy2Mm4XGex8hBSg1yapPg==} + engines: {node: '>=12.0.0'} + proxy-addr@2.0.7: resolution: {integrity: sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==} engines: {node: '>= 0.10'} @@ -1996,6 +2807,14 @@ packages: remeda@2.33.4: resolution: {integrity: sha512-ygHswjlc/opg2VrtiYvUOPLjxjtdKvjGz1/plDhkG66hjNjFr1xmfrs2ClNFo/E6TyUFiwYNh53bKV26oBoMGQ==} + require-directory@2.1.1: + resolution: {integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==} + engines: {node: '>=0.10.0'} + + require-in-the-middle@7.5.2: + resolution: {integrity: sha512-gAZ+kLqBdHarXB64XpAe2VCjB7rIRv+mU8tfRWziHRJ5umKsIHN2tLLv6EtMw7WCdP19S0ERVMldNvxYCHnhSQ==} + engines: {node: '>=8.6.0'} + resolve-from@5.0.0: resolution: {integrity: sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==} engines: {node: '>=8'} @@ -2003,6 +2822,11 @@ packages: resolve-pkg-maps@1.0.0: resolution: {integrity: sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==} + resolve@1.22.11: + resolution: {integrity: sha512-RfqAvLnMl313r7c9oclB1HhUEAezcpLjz95wFH4LVuhk9JF/r22qmVP9AMmOU4vMX7Q8pN8jwNg/CSpdFnMjTQ==} + engines: {node: '>= 0.4'} + hasBin: true + retry@0.12.0: resolution: {integrity: sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow==} engines: {node: '>= 4'} @@ -2071,6 +2895,9 @@ packages: resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} engines: {node: '>=8'} + shimmer@1.2.1: + resolution: {integrity: sha512-sQTKC1Re/rM6XyFM6fIAGHRPVGvyXfgzIDvzoq608vM+jeyVD0Tu1E6Np0Kc2zAIFWIj963V2800iF/9LPieQw==} + side-channel-list@1.0.0: resolution: {integrity: sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA==} engines: {node: '>= 0.4'} @@ -2169,9 +2996,17 @@ packages: resolution: {integrity: sha512-QwiXZgpRcKkhTj2Scnn++4PKtWsH0kpzZ62L2R6c/LUVYv7hVnZqcg2+sMuT6R7Jusu1vviK/MFsu6kNJfWlEQ==} engines: {node: '>=4'} + string-width@4.2.3: + resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==} + engines: {node: '>=8'} + string_decoder@1.3.0: resolution: {integrity: sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==} + strip-ansi@6.0.1: + resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} + engines: {node: '>=8'} + strip-bom@3.0.0: resolution: {integrity: sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==} engines: {node: '>=4'} @@ -2200,6 +3035,10 @@ packages: resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==} engines: {node: '>=8'} + supports-preserve-symlinks-flag@1.0.0: + resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} + engines: {node: '>= 0.4'} + swagger-jsdoc@6.2.8: resolution: {integrity: sha512-VPvil1+JRpmJ55CgAtn8DIcpBs0bL5L3q5bVQvF4tAW/k/9JYSj7dCpaYCAv5rufe0vcCbBRQXGvzpkWjvLklQ==} engines: {node: '>=12.0.0'} @@ -2258,6 +3097,9 @@ packages: resolution: {integrity: sha512-sf4i37nQ2LBx4m3wB74y+ubopq6W/dIzXg0FDGjsYnZHVa1Da8FH853wlL2gtUhg+xJXjfk3kUZS3BRoQeoQBQ==} engines: {node: '>=6'} + tr46@0.0.3: + resolution: {integrity: sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==} + tr46@5.1.1: resolution: {integrity: sha512-hdF5ZgjTqgAntKkklYw0R03MG2x/bSzTtkxmIRw/sTNV8YXsCJ1tfLAX23lhxhHJlEf3CRCOCGGWw3vI3GaSPw==} engines: {node: '>=18'} @@ -2342,6 +3184,10 @@ packages: resolution: {integrity: sha512-XQegIaBTVUjSHliKqcnFqYypAd4S+WCYt5NIeRs6w/UAry7z8Y9j5ZwRRL4kzq9U3sD6v+85er9FvkEaBpji2w==} hasBin: true + uuid@9.0.1: + resolution: {integrity: sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==} + hasBin: true + valibot@1.2.0: resolution: {integrity: sha512-mm1rxUsmOxzrwnX5arGS+U4T25RdvpPjPN4yR0u9pUBov9+zGVtO84tif1eY4r6zWxVxu3KzIyknJy3rxfRZZg==} peerDependencies: @@ -2435,6 +3281,9 @@ packages: web-encoding@1.1.5: resolution: {integrity: sha512-HYLeVCdJ0+lBYV2FvNZmv3HJ2Nt0QYXqZojk3d9FJOLkwnuhzM9tmamh8d7HPM8QqjKH8DeHkFTx+CFlWpZZDA==} + webidl-conversions@3.0.1: + resolution: {integrity: sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==} + webidl-conversions@7.0.0: resolution: {integrity: sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g==} engines: {node: '>=12'} @@ -2443,6 +3292,9 @@ packages: resolution: {integrity: sha512-De72GdQZzNTUBBChsXueQUnPKDkg/5A5zp7pFDuQAj5UFoENpiACU0wlCvzpAGnTkj++ihpKwKyYewn/XNUbKw==} engines: {node: '>=18'} + whatwg-url@5.0.0: + resolution: {integrity: sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==} + which-typed-array@1.1.20: resolution: {integrity: sha512-LYfpUkmqwl0h9A2HL09Mms427Q1RZWuOHsukfVcKRq9q95iQxdw0ix1JQrqbcDR9PH1QDwf5Qo8OZb5lksZ8Xg==} engines: {node: '>= 0.4'} @@ -2460,6 +3312,10 @@ packages: wordwrap@1.0.0: resolution: {integrity: sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q==} + wrap-ansi@7.0.0: + resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==} + engines: {node: '>=10'} + wrappy@1.0.2: resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} @@ -2487,10 +3343,27 @@ packages: resolution: {integrity: sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==} engines: {node: '>=0.4'} + y18n@5.0.8: + resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==} + engines: {node: '>=10'} + yaml@2.0.0-1: resolution: {integrity: sha512-W7h5dEhywMKenDJh2iX/LABkbFnBxasD27oyXWDS/feDsxiw0dD5ncXdYXgkvAsXIY2MpW/ZKkr9IU30DBdMNQ==} engines: {node: '>= 6'} + yaml@2.8.2: + resolution: {integrity: sha512-mplynKqc1C2hTVYxd0PU2xQAc22TI1vShAYGksCCfxbn/dFwnHTNi1bvYsBTkhdUNtGIf5xNOg938rrSSYvS9A==} + engines: {node: '>= 14.6'} + hasBin: true + + yargs-parser@21.1.1: + resolution: {integrity: sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==} + engines: {node: '>=12'} + + yargs@17.7.2: + resolution: {integrity: sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==} + engines: {node: '>=12'} + z-schema@5.0.5: resolution: {integrity: sha512-D7eujBWkLa3p2sIpJA0d1pr7es+a7m0vFAnZLlCEKq/Ij2k0MLi9Br2UPxoxdYystm5K1yeBGzub0FlYUEWj2Q==} engines: {node: '>=8.0.0'} @@ -2552,126 +3425,1043 @@ snapshots: '@chevrotain/utils@10.5.0': {} - '@electric-sql/pglite-socket@0.0.20(@electric-sql/pglite@0.3.15)': + '@electric-sql/pglite-socket@0.0.20(@electric-sql/pglite@0.3.15)': + dependencies: + '@electric-sql/pglite': 0.3.15 + + '@electric-sql/pglite-tools@0.2.20(@electric-sql/pglite@0.3.15)': + dependencies: + '@electric-sql/pglite': 0.3.15 + + '@electric-sql/pglite@0.3.15': {} + + '@esbuild/aix-ppc64@0.27.3': + optional: true + + '@esbuild/android-arm64@0.27.3': + optional: true + + '@esbuild/android-arm@0.27.3': + optional: true + + '@esbuild/android-x64@0.27.3': + optional: true + + '@esbuild/darwin-arm64@0.27.3': + optional: true + + '@esbuild/darwin-x64@0.27.3': + optional: true + + '@esbuild/freebsd-arm64@0.27.3': + optional: true + + '@esbuild/freebsd-x64@0.27.3': + optional: true + + '@esbuild/linux-arm64@0.27.3': + optional: true + + '@esbuild/linux-arm@0.27.3': + optional: true + + '@esbuild/linux-ia32@0.27.3': + optional: true + + '@esbuild/linux-loong64@0.27.3': + optional: true + + '@esbuild/linux-mips64el@0.27.3': + optional: true + + '@esbuild/linux-ppc64@0.27.3': + optional: true + + '@esbuild/linux-riscv64@0.27.3': + optional: true + + '@esbuild/linux-s390x@0.27.3': + optional: true + + '@esbuild/linux-x64@0.27.3': + optional: true + + '@esbuild/netbsd-arm64@0.27.3': + optional: true + + '@esbuild/netbsd-x64@0.27.3': + optional: true + + '@esbuild/openbsd-arm64@0.27.3': + optional: true + + '@esbuild/openbsd-x64@0.27.3': + optional: true + + '@esbuild/openharmony-arm64@0.27.3': + optional: true + + '@esbuild/sunos-x64@0.27.3': + optional: true + + '@esbuild/win32-arm64@0.27.3': + optional: true + + '@esbuild/win32-ia32@0.27.3': + optional: true + + '@esbuild/win32-x64@0.27.3': + optional: true + + '@grpc/grpc-js@1.14.3': + dependencies: + '@grpc/proto-loader': 0.8.0 + '@js-sdsl/ordered-map': 4.4.2 + + '@grpc/proto-loader@0.8.0': + dependencies: + lodash.camelcase: 4.3.0 + long: 5.3.2 + protobufjs: 7.5.4 + yargs: 17.7.2 + + '@hono/node-server@1.19.9(hono@4.11.4)': + dependencies: + hono: 4.11.4 + + '@influxdata/influxdb-client@1.35.0': {} + + '@jridgewell/gen-mapping@0.3.13': + dependencies: + '@jridgewell/sourcemap-codec': 1.5.5 + '@jridgewell/trace-mapping': 0.3.31 + + '@jridgewell/resolve-uri@3.1.2': {} + + '@jridgewell/sourcemap-codec@1.5.5': {} + + '@jridgewell/trace-mapping@0.3.31': + dependencies: + '@jridgewell/resolve-uri': 3.1.2 + '@jridgewell/sourcemap-codec': 1.5.5 + + '@js-sdsl/ordered-map@4.4.2': {} + + '@jsdevtools/ono@7.1.3': {} + + '@mongodb-js/saslprep@1.4.6': + dependencies: + sparse-bitfield: 3.0.3 + + '@mrleebo/prisma-ast@0.13.1': + dependencies: + chevrotain: 10.5.0 + lilconfig: 2.1.0 + + '@noble/hashes@1.8.0': {} + + '@opentelemetry/api-logs@0.200.0': + dependencies: + '@opentelemetry/api': 1.9.0 + + '@opentelemetry/api-logs@0.57.0': + dependencies: + '@opentelemetry/api': 1.9.0 + + '@opentelemetry/api@1.9.0': {} + + '@opentelemetry/auto-instrumentations-node@0.57.0(@opentelemetry/api@1.9.0)': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/instrumentation': 0.200.0(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation-amqplib': 0.47.0(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation-aws-lambda': 0.51.1(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation-aws-sdk': 0.50.0(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation-bunyan': 0.46.0(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation-cassandra-driver': 0.46.0(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation-connect': 0.44.0(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation-cucumber': 0.15.0(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation-dataloader': 0.17.0(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation-dns': 0.44.0(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation-express': 0.48.1(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation-fastify': 0.45.0(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation-fs': 0.20.0(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation-generic-pool': 0.44.0(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation-graphql': 0.48.0(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation-grpc': 0.200.0(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation-hapi': 0.46.0(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation-http': 0.200.0(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation-ioredis': 0.48.0(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation-kafkajs': 0.8.0(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation-knex': 0.45.0(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation-koa': 0.48.0(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation-lru-memoizer': 0.45.0(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation-memcached': 0.44.0(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation-mongodb': 0.53.0(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation-mongoose': 0.47.1(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation-mysql': 0.46.0(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation-mysql2': 0.46.0(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation-nestjs-core': 0.45.0(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation-net': 0.44.0(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation-pg': 0.52.0(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation-pino': 0.47.0(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation-redis': 0.47.0(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation-redis-4': 0.47.0(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation-restify': 0.46.0(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation-router': 0.45.0(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation-socket.io': 0.47.0(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation-tedious': 0.19.0(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation-undici': 0.11.0(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation-winston': 0.45.0(@opentelemetry/api@1.9.0) + '@opentelemetry/resource-detector-alibaba-cloud': 0.31.11(@opentelemetry/api@1.9.0) + '@opentelemetry/resource-detector-aws': 2.13.0(@opentelemetry/api@1.9.0) + '@opentelemetry/resource-detector-azure': 0.7.0(@opentelemetry/api@1.9.0) + '@opentelemetry/resource-detector-container': 0.7.11(@opentelemetry/api@1.9.0) + '@opentelemetry/resource-detector-gcp': 0.34.0(@opentelemetry/api@1.9.0) + '@opentelemetry/resources': 2.6.0(@opentelemetry/api@1.9.0) + '@opentelemetry/sdk-node': 0.200.0(@opentelemetry/api@1.9.0) + transitivePeerDependencies: + - encoding + - supports-color + + '@opentelemetry/context-async-hooks@1.30.0(@opentelemetry/api@1.9.0)': + dependencies: + '@opentelemetry/api': 1.9.0 + + '@opentelemetry/context-async-hooks@2.0.0(@opentelemetry/api@1.9.0)': + dependencies: + '@opentelemetry/api': 1.9.0 + + '@opentelemetry/core@1.30.0(@opentelemetry/api@1.9.0)': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/semantic-conventions': 1.28.0 + + '@opentelemetry/core@2.0.0(@opentelemetry/api@1.9.0)': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/semantic-conventions': 1.30.0 + + '@opentelemetry/core@2.6.0(@opentelemetry/api@1.9.0)': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/semantic-conventions': 1.30.0 + + '@opentelemetry/exporter-logs-otlp-grpc@0.200.0(@opentelemetry/api@1.9.0)': + dependencies: + '@grpc/grpc-js': 1.14.3 + '@opentelemetry/api': 1.9.0 + '@opentelemetry/core': 2.0.0(@opentelemetry/api@1.9.0) + '@opentelemetry/otlp-exporter-base': 0.200.0(@opentelemetry/api@1.9.0) + '@opentelemetry/otlp-grpc-exporter-base': 0.200.0(@opentelemetry/api@1.9.0) + '@opentelemetry/otlp-transformer': 0.200.0(@opentelemetry/api@1.9.0) + '@opentelemetry/sdk-logs': 0.200.0(@opentelemetry/api@1.9.0) + + '@opentelemetry/exporter-logs-otlp-grpc@0.57.0(@opentelemetry/api@1.9.0)': + dependencies: + '@grpc/grpc-js': 1.14.3 + '@opentelemetry/api': 1.9.0 + '@opentelemetry/core': 1.30.0(@opentelemetry/api@1.9.0) + '@opentelemetry/otlp-grpc-exporter-base': 0.57.0(@opentelemetry/api@1.9.0) + '@opentelemetry/otlp-transformer': 0.57.0(@opentelemetry/api@1.9.0) + '@opentelemetry/sdk-logs': 0.57.0(@opentelemetry/api@1.9.0) + + '@opentelemetry/exporter-logs-otlp-http@0.200.0(@opentelemetry/api@1.9.0)': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/api-logs': 0.200.0 + '@opentelemetry/core': 2.0.0(@opentelemetry/api@1.9.0) + '@opentelemetry/otlp-exporter-base': 0.200.0(@opentelemetry/api@1.9.0) + '@opentelemetry/otlp-transformer': 0.200.0(@opentelemetry/api@1.9.0) + '@opentelemetry/sdk-logs': 0.200.0(@opentelemetry/api@1.9.0) + + '@opentelemetry/exporter-logs-otlp-http@0.57.0(@opentelemetry/api@1.9.0)': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/api-logs': 0.57.0 + '@opentelemetry/core': 1.30.0(@opentelemetry/api@1.9.0) + '@opentelemetry/otlp-exporter-base': 0.57.0(@opentelemetry/api@1.9.0) + '@opentelemetry/otlp-transformer': 0.57.0(@opentelemetry/api@1.9.0) + '@opentelemetry/sdk-logs': 0.57.0(@opentelemetry/api@1.9.0) + + '@opentelemetry/exporter-logs-otlp-proto@0.200.0(@opentelemetry/api@1.9.0)': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/api-logs': 0.200.0 + '@opentelemetry/core': 2.0.0(@opentelemetry/api@1.9.0) + '@opentelemetry/otlp-exporter-base': 0.200.0(@opentelemetry/api@1.9.0) + '@opentelemetry/otlp-transformer': 0.200.0(@opentelemetry/api@1.9.0) + '@opentelemetry/resources': 2.0.0(@opentelemetry/api@1.9.0) + '@opentelemetry/sdk-logs': 0.200.0(@opentelemetry/api@1.9.0) + '@opentelemetry/sdk-trace-base': 2.0.0(@opentelemetry/api@1.9.0) + + '@opentelemetry/exporter-logs-otlp-proto@0.57.0(@opentelemetry/api@1.9.0)': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/api-logs': 0.57.0 + '@opentelemetry/core': 1.30.0(@opentelemetry/api@1.9.0) + '@opentelemetry/otlp-exporter-base': 0.57.0(@opentelemetry/api@1.9.0) + '@opentelemetry/otlp-transformer': 0.57.0(@opentelemetry/api@1.9.0) + '@opentelemetry/resources': 1.30.0(@opentelemetry/api@1.9.0) + '@opentelemetry/sdk-logs': 0.57.0(@opentelemetry/api@1.9.0) + '@opentelemetry/sdk-trace-base': 1.30.0(@opentelemetry/api@1.9.0) + + '@opentelemetry/exporter-metrics-otlp-grpc@0.200.0(@opentelemetry/api@1.9.0)': + dependencies: + '@grpc/grpc-js': 1.14.3 + '@opentelemetry/api': 1.9.0 + '@opentelemetry/core': 2.0.0(@opentelemetry/api@1.9.0) + '@opentelemetry/exporter-metrics-otlp-http': 0.200.0(@opentelemetry/api@1.9.0) + '@opentelemetry/otlp-exporter-base': 0.200.0(@opentelemetry/api@1.9.0) + '@opentelemetry/otlp-grpc-exporter-base': 0.200.0(@opentelemetry/api@1.9.0) + '@opentelemetry/otlp-transformer': 0.200.0(@opentelemetry/api@1.9.0) + '@opentelemetry/resources': 2.0.0(@opentelemetry/api@1.9.0) + '@opentelemetry/sdk-metrics': 2.0.0(@opentelemetry/api@1.9.0) + + '@opentelemetry/exporter-metrics-otlp-grpc@0.57.0(@opentelemetry/api@1.9.0)': + dependencies: + '@grpc/grpc-js': 1.14.3 + '@opentelemetry/api': 1.9.0 + '@opentelemetry/core': 1.30.0(@opentelemetry/api@1.9.0) + '@opentelemetry/exporter-metrics-otlp-http': 0.57.0(@opentelemetry/api@1.9.0) + '@opentelemetry/otlp-exporter-base': 0.57.0(@opentelemetry/api@1.9.0) + '@opentelemetry/otlp-grpc-exporter-base': 0.57.0(@opentelemetry/api@1.9.0) + '@opentelemetry/otlp-transformer': 0.57.0(@opentelemetry/api@1.9.0) + '@opentelemetry/resources': 1.30.0(@opentelemetry/api@1.9.0) + '@opentelemetry/sdk-metrics': 1.30.0(@opentelemetry/api@1.9.0) + + '@opentelemetry/exporter-metrics-otlp-http@0.200.0(@opentelemetry/api@1.9.0)': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/core': 2.0.0(@opentelemetry/api@1.9.0) + '@opentelemetry/otlp-exporter-base': 0.200.0(@opentelemetry/api@1.9.0) + '@opentelemetry/otlp-transformer': 0.200.0(@opentelemetry/api@1.9.0) + '@opentelemetry/resources': 2.0.0(@opentelemetry/api@1.9.0) + '@opentelemetry/sdk-metrics': 2.0.0(@opentelemetry/api@1.9.0) + + '@opentelemetry/exporter-metrics-otlp-http@0.57.0(@opentelemetry/api@1.9.0)': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/core': 1.30.0(@opentelemetry/api@1.9.0) + '@opentelemetry/otlp-exporter-base': 0.57.0(@opentelemetry/api@1.9.0) + '@opentelemetry/otlp-transformer': 0.57.0(@opentelemetry/api@1.9.0) + '@opentelemetry/resources': 1.30.0(@opentelemetry/api@1.9.0) + '@opentelemetry/sdk-metrics': 1.30.0(@opentelemetry/api@1.9.0) + + '@opentelemetry/exporter-metrics-otlp-proto@0.200.0(@opentelemetry/api@1.9.0)': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/core': 2.0.0(@opentelemetry/api@1.9.0) + '@opentelemetry/exporter-metrics-otlp-http': 0.200.0(@opentelemetry/api@1.9.0) + '@opentelemetry/otlp-exporter-base': 0.200.0(@opentelemetry/api@1.9.0) + '@opentelemetry/otlp-transformer': 0.200.0(@opentelemetry/api@1.9.0) + '@opentelemetry/resources': 2.0.0(@opentelemetry/api@1.9.0) + '@opentelemetry/sdk-metrics': 2.0.0(@opentelemetry/api@1.9.0) + + '@opentelemetry/exporter-metrics-otlp-proto@0.57.0(@opentelemetry/api@1.9.0)': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/core': 1.30.0(@opentelemetry/api@1.9.0) + '@opentelemetry/exporter-metrics-otlp-http': 0.57.0(@opentelemetry/api@1.9.0) + '@opentelemetry/otlp-exporter-base': 0.57.0(@opentelemetry/api@1.9.0) + '@opentelemetry/otlp-transformer': 0.57.0(@opentelemetry/api@1.9.0) + '@opentelemetry/resources': 1.30.0(@opentelemetry/api@1.9.0) + '@opentelemetry/sdk-metrics': 1.30.0(@opentelemetry/api@1.9.0) + + '@opentelemetry/exporter-prometheus@0.200.0(@opentelemetry/api@1.9.0)': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/core': 2.0.0(@opentelemetry/api@1.9.0) + '@opentelemetry/resources': 2.0.0(@opentelemetry/api@1.9.0) + '@opentelemetry/sdk-metrics': 2.0.0(@opentelemetry/api@1.9.0) + + '@opentelemetry/exporter-prometheus@0.57.0(@opentelemetry/api@1.9.0)': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/core': 1.30.0(@opentelemetry/api@1.9.0) + '@opentelemetry/resources': 1.30.0(@opentelemetry/api@1.9.0) + '@opentelemetry/sdk-metrics': 1.30.0(@opentelemetry/api@1.9.0) + + '@opentelemetry/exporter-trace-otlp-grpc@0.200.0(@opentelemetry/api@1.9.0)': + dependencies: + '@grpc/grpc-js': 1.14.3 + '@opentelemetry/api': 1.9.0 + '@opentelemetry/core': 2.0.0(@opentelemetry/api@1.9.0) + '@opentelemetry/otlp-exporter-base': 0.200.0(@opentelemetry/api@1.9.0) + '@opentelemetry/otlp-grpc-exporter-base': 0.200.0(@opentelemetry/api@1.9.0) + '@opentelemetry/otlp-transformer': 0.200.0(@opentelemetry/api@1.9.0) + '@opentelemetry/resources': 2.0.0(@opentelemetry/api@1.9.0) + '@opentelemetry/sdk-trace-base': 2.0.0(@opentelemetry/api@1.9.0) + + '@opentelemetry/exporter-trace-otlp-grpc@0.57.0(@opentelemetry/api@1.9.0)': + dependencies: + '@grpc/grpc-js': 1.14.3 + '@opentelemetry/api': 1.9.0 + '@opentelemetry/core': 1.30.0(@opentelemetry/api@1.9.0) + '@opentelemetry/otlp-grpc-exporter-base': 0.57.0(@opentelemetry/api@1.9.0) + '@opentelemetry/otlp-transformer': 0.57.0(@opentelemetry/api@1.9.0) + '@opentelemetry/resources': 1.30.0(@opentelemetry/api@1.9.0) + '@opentelemetry/sdk-trace-base': 1.30.0(@opentelemetry/api@1.9.0) + + '@opentelemetry/exporter-trace-otlp-http@0.200.0(@opentelemetry/api@1.9.0)': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/core': 2.0.0(@opentelemetry/api@1.9.0) + '@opentelemetry/otlp-exporter-base': 0.200.0(@opentelemetry/api@1.9.0) + '@opentelemetry/otlp-transformer': 0.200.0(@opentelemetry/api@1.9.0) + '@opentelemetry/resources': 2.0.0(@opentelemetry/api@1.9.0) + '@opentelemetry/sdk-trace-base': 2.0.0(@opentelemetry/api@1.9.0) + + '@opentelemetry/exporter-trace-otlp-http@0.57.0(@opentelemetry/api@1.9.0)': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/core': 1.30.0(@opentelemetry/api@1.9.0) + '@opentelemetry/otlp-exporter-base': 0.57.0(@opentelemetry/api@1.9.0) + '@opentelemetry/otlp-transformer': 0.57.0(@opentelemetry/api@1.9.0) + '@opentelemetry/resources': 1.30.0(@opentelemetry/api@1.9.0) + '@opentelemetry/sdk-trace-base': 1.30.0(@opentelemetry/api@1.9.0) + + '@opentelemetry/exporter-trace-otlp-proto@0.200.0(@opentelemetry/api@1.9.0)': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/core': 2.0.0(@opentelemetry/api@1.9.0) + '@opentelemetry/otlp-exporter-base': 0.200.0(@opentelemetry/api@1.9.0) + '@opentelemetry/otlp-transformer': 0.200.0(@opentelemetry/api@1.9.0) + '@opentelemetry/resources': 2.0.0(@opentelemetry/api@1.9.0) + '@opentelemetry/sdk-trace-base': 2.0.0(@opentelemetry/api@1.9.0) + + '@opentelemetry/exporter-trace-otlp-proto@0.57.0(@opentelemetry/api@1.9.0)': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/core': 1.30.0(@opentelemetry/api@1.9.0) + '@opentelemetry/otlp-exporter-base': 0.57.0(@opentelemetry/api@1.9.0) + '@opentelemetry/otlp-transformer': 0.57.0(@opentelemetry/api@1.9.0) + '@opentelemetry/resources': 1.30.0(@opentelemetry/api@1.9.0) + '@opentelemetry/sdk-trace-base': 1.30.0(@opentelemetry/api@1.9.0) + + '@opentelemetry/exporter-zipkin@1.30.0(@opentelemetry/api@1.9.0)': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/core': 1.30.0(@opentelemetry/api@1.9.0) + '@opentelemetry/resources': 1.30.0(@opentelemetry/api@1.9.0) + '@opentelemetry/sdk-trace-base': 1.30.0(@opentelemetry/api@1.9.0) + '@opentelemetry/semantic-conventions': 1.28.0 + + '@opentelemetry/exporter-zipkin@2.0.0(@opentelemetry/api@1.9.0)': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/core': 2.0.0(@opentelemetry/api@1.9.0) + '@opentelemetry/resources': 2.0.0(@opentelemetry/api@1.9.0) + '@opentelemetry/sdk-trace-base': 2.0.0(@opentelemetry/api@1.9.0) + '@opentelemetry/semantic-conventions': 1.30.0 + + '@opentelemetry/instrumentation-amqplib@0.47.0(@opentelemetry/api@1.9.0)': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/core': 2.6.0(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation': 0.200.0(@opentelemetry/api@1.9.0) + '@opentelemetry/semantic-conventions': 1.30.0 + transitivePeerDependencies: + - supports-color + + '@opentelemetry/instrumentation-aws-lambda@0.51.1(@opentelemetry/api@1.9.0)': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/instrumentation': 0.200.0(@opentelemetry/api@1.9.0) + '@opentelemetry/semantic-conventions': 1.30.0 + '@types/aws-lambda': 8.10.147 + transitivePeerDependencies: + - supports-color + + '@opentelemetry/instrumentation-aws-sdk@0.50.0(@opentelemetry/api@1.9.0)': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/core': 2.6.0(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation': 0.200.0(@opentelemetry/api@1.9.0) + '@opentelemetry/propagation-utils': 0.31.16(@opentelemetry/api@1.9.0) + '@opentelemetry/semantic-conventions': 1.30.0 + transitivePeerDependencies: + - supports-color + + '@opentelemetry/instrumentation-bunyan@0.46.0(@opentelemetry/api@1.9.0)': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/api-logs': 0.200.0 + '@opentelemetry/instrumentation': 0.200.0(@opentelemetry/api@1.9.0) + '@types/bunyan': 1.8.11 + transitivePeerDependencies: + - supports-color + + '@opentelemetry/instrumentation-cassandra-driver@0.46.0(@opentelemetry/api@1.9.0)': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/instrumentation': 0.200.0(@opentelemetry/api@1.9.0) + '@opentelemetry/semantic-conventions': 1.30.0 + transitivePeerDependencies: + - supports-color + + '@opentelemetry/instrumentation-connect@0.44.0(@opentelemetry/api@1.9.0)': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/core': 2.6.0(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation': 0.200.0(@opentelemetry/api@1.9.0) + '@opentelemetry/semantic-conventions': 1.30.0 + '@types/connect': 3.4.38 + transitivePeerDependencies: + - supports-color + + '@opentelemetry/instrumentation-cucumber@0.15.0(@opentelemetry/api@1.9.0)': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/instrumentation': 0.200.0(@opentelemetry/api@1.9.0) + '@opentelemetry/semantic-conventions': 1.30.0 + transitivePeerDependencies: + - supports-color + + '@opentelemetry/instrumentation-dataloader@0.17.0(@opentelemetry/api@1.9.0)': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/instrumentation': 0.200.0(@opentelemetry/api@1.9.0) + transitivePeerDependencies: + - supports-color + + '@opentelemetry/instrumentation-dns@0.44.0(@opentelemetry/api@1.9.0)': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/instrumentation': 0.200.0(@opentelemetry/api@1.9.0) + transitivePeerDependencies: + - supports-color + + '@opentelemetry/instrumentation-express@0.48.1(@opentelemetry/api@1.9.0)': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/core': 2.6.0(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation': 0.200.0(@opentelemetry/api@1.9.0) + '@opentelemetry/semantic-conventions': 1.30.0 + transitivePeerDependencies: + - supports-color + + '@opentelemetry/instrumentation-fastify@0.45.0(@opentelemetry/api@1.9.0)': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/core': 2.6.0(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation': 0.200.0(@opentelemetry/api@1.9.0) + '@opentelemetry/semantic-conventions': 1.30.0 + transitivePeerDependencies: + - supports-color + + '@opentelemetry/instrumentation-fs@0.20.0(@opentelemetry/api@1.9.0)': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/core': 2.6.0(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation': 0.200.0(@opentelemetry/api@1.9.0) + transitivePeerDependencies: + - supports-color + + '@opentelemetry/instrumentation-generic-pool@0.44.0(@opentelemetry/api@1.9.0)': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/instrumentation': 0.200.0(@opentelemetry/api@1.9.0) + transitivePeerDependencies: + - supports-color + + '@opentelemetry/instrumentation-graphql@0.48.0(@opentelemetry/api@1.9.0)': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/instrumentation': 0.200.0(@opentelemetry/api@1.9.0) + transitivePeerDependencies: + - supports-color + + '@opentelemetry/instrumentation-grpc@0.200.0(@opentelemetry/api@1.9.0)': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/instrumentation': 0.200.0(@opentelemetry/api@1.9.0) + '@opentelemetry/semantic-conventions': 1.30.0 + transitivePeerDependencies: + - supports-color + + '@opentelemetry/instrumentation-hapi@0.46.0(@opentelemetry/api@1.9.0)': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/core': 2.6.0(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation': 0.200.0(@opentelemetry/api@1.9.0) + '@opentelemetry/semantic-conventions': 1.30.0 + transitivePeerDependencies: + - supports-color + + '@opentelemetry/instrumentation-http@0.200.0(@opentelemetry/api@1.9.0)': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/core': 2.0.0(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation': 0.200.0(@opentelemetry/api@1.9.0) + '@opentelemetry/semantic-conventions': 1.30.0 + forwarded-parse: 2.1.2 + transitivePeerDependencies: + - supports-color + + '@opentelemetry/instrumentation-ioredis@0.48.0(@opentelemetry/api@1.9.0)': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/instrumentation': 0.200.0(@opentelemetry/api@1.9.0) + '@opentelemetry/redis-common': 0.37.0 + '@opentelemetry/semantic-conventions': 1.30.0 + transitivePeerDependencies: + - supports-color + + '@opentelemetry/instrumentation-kafkajs@0.8.0(@opentelemetry/api@1.9.0)': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/instrumentation': 0.200.0(@opentelemetry/api@1.9.0) + '@opentelemetry/semantic-conventions': 1.30.0 + transitivePeerDependencies: + - supports-color + + '@opentelemetry/instrumentation-knex@0.45.0(@opentelemetry/api@1.9.0)': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/instrumentation': 0.200.0(@opentelemetry/api@1.9.0) + '@opentelemetry/semantic-conventions': 1.30.0 + transitivePeerDependencies: + - supports-color + + '@opentelemetry/instrumentation-koa@0.48.0(@opentelemetry/api@1.9.0)': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/core': 2.6.0(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation': 0.200.0(@opentelemetry/api@1.9.0) + '@opentelemetry/semantic-conventions': 1.30.0 + transitivePeerDependencies: + - supports-color + + '@opentelemetry/instrumentation-lru-memoizer@0.45.0(@opentelemetry/api@1.9.0)': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/instrumentation': 0.200.0(@opentelemetry/api@1.9.0) + transitivePeerDependencies: + - supports-color + + '@opentelemetry/instrumentation-memcached@0.44.0(@opentelemetry/api@1.9.0)': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/instrumentation': 0.200.0(@opentelemetry/api@1.9.0) + '@opentelemetry/semantic-conventions': 1.30.0 + '@types/memcached': 2.2.10 + transitivePeerDependencies: + - supports-color + + '@opentelemetry/instrumentation-mongodb@0.53.0(@opentelemetry/api@1.9.0)': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/instrumentation': 0.200.0(@opentelemetry/api@1.9.0) + '@opentelemetry/semantic-conventions': 1.30.0 + transitivePeerDependencies: + - supports-color + + '@opentelemetry/instrumentation-mongoose@0.47.1(@opentelemetry/api@1.9.0)': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/core': 2.6.0(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation': 0.200.0(@opentelemetry/api@1.9.0) + '@opentelemetry/semantic-conventions': 1.30.0 + transitivePeerDependencies: + - supports-color + + '@opentelemetry/instrumentation-mysql2@0.46.0(@opentelemetry/api@1.9.0)': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/instrumentation': 0.200.0(@opentelemetry/api@1.9.0) + '@opentelemetry/semantic-conventions': 1.30.0 + '@opentelemetry/sql-common': 0.41.2(@opentelemetry/api@1.9.0) + transitivePeerDependencies: + - supports-color + + '@opentelemetry/instrumentation-mysql@0.46.0(@opentelemetry/api@1.9.0)': dependencies: - '@electric-sql/pglite': 0.3.15 + '@opentelemetry/api': 1.9.0 + '@opentelemetry/instrumentation': 0.200.0(@opentelemetry/api@1.9.0) + '@opentelemetry/semantic-conventions': 1.30.0 + '@types/mysql': 2.15.26 + transitivePeerDependencies: + - supports-color - '@electric-sql/pglite-tools@0.2.20(@electric-sql/pglite@0.3.15)': + '@opentelemetry/instrumentation-nestjs-core@0.45.0(@opentelemetry/api@1.9.0)': dependencies: - '@electric-sql/pglite': 0.3.15 + '@opentelemetry/api': 1.9.0 + '@opentelemetry/instrumentation': 0.200.0(@opentelemetry/api@1.9.0) + '@opentelemetry/semantic-conventions': 1.30.0 + transitivePeerDependencies: + - supports-color - '@electric-sql/pglite@0.3.15': {} + '@opentelemetry/instrumentation-net@0.44.0(@opentelemetry/api@1.9.0)': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/instrumentation': 0.200.0(@opentelemetry/api@1.9.0) + '@opentelemetry/semantic-conventions': 1.30.0 + transitivePeerDependencies: + - supports-color - '@esbuild/aix-ppc64@0.27.3': - optional: true + '@opentelemetry/instrumentation-pg@0.52.0(@opentelemetry/api@1.9.0)': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/core': 2.6.0(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation': 0.200.0(@opentelemetry/api@1.9.0) + '@opentelemetry/semantic-conventions': 1.30.0 + '@opentelemetry/sql-common': 0.41.2(@opentelemetry/api@1.9.0) + '@types/pg': 8.6.1 + '@types/pg-pool': 2.0.6 + transitivePeerDependencies: + - supports-color - '@esbuild/android-arm64@0.27.3': - optional: true + '@opentelemetry/instrumentation-pino@0.47.0(@opentelemetry/api@1.9.0)': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/api-logs': 0.200.0 + '@opentelemetry/core': 2.6.0(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation': 0.200.0(@opentelemetry/api@1.9.0) + transitivePeerDependencies: + - supports-color - '@esbuild/android-arm@0.27.3': - optional: true + '@opentelemetry/instrumentation-redis-4@0.47.0(@opentelemetry/api@1.9.0)': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/instrumentation': 0.200.0(@opentelemetry/api@1.9.0) + '@opentelemetry/redis-common': 0.37.0 + '@opentelemetry/semantic-conventions': 1.30.0 + transitivePeerDependencies: + - supports-color - '@esbuild/android-x64@0.27.3': - optional: true + '@opentelemetry/instrumentation-redis@0.47.0(@opentelemetry/api@1.9.0)': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/instrumentation': 0.200.0(@opentelemetry/api@1.9.0) + '@opentelemetry/redis-common': 0.37.0 + '@opentelemetry/semantic-conventions': 1.30.0 + transitivePeerDependencies: + - supports-color - '@esbuild/darwin-arm64@0.27.3': - optional: true + '@opentelemetry/instrumentation-restify@0.46.0(@opentelemetry/api@1.9.0)': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/core': 2.6.0(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation': 0.200.0(@opentelemetry/api@1.9.0) + '@opentelemetry/semantic-conventions': 1.30.0 + transitivePeerDependencies: + - supports-color - '@esbuild/darwin-x64@0.27.3': - optional: true + '@opentelemetry/instrumentation-router@0.45.0(@opentelemetry/api@1.9.0)': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/instrumentation': 0.200.0(@opentelemetry/api@1.9.0) + '@opentelemetry/semantic-conventions': 1.30.0 + transitivePeerDependencies: + - supports-color - '@esbuild/freebsd-arm64@0.27.3': - optional: true + '@opentelemetry/instrumentation-socket.io@0.47.0(@opentelemetry/api@1.9.0)': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/instrumentation': 0.200.0(@opentelemetry/api@1.9.0) + '@opentelemetry/semantic-conventions': 1.30.0 + transitivePeerDependencies: + - supports-color - '@esbuild/freebsd-x64@0.27.3': - optional: true + '@opentelemetry/instrumentation-tedious@0.19.0(@opentelemetry/api@1.9.0)': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/instrumentation': 0.200.0(@opentelemetry/api@1.9.0) + '@opentelemetry/semantic-conventions': 1.30.0 + '@types/tedious': 4.0.14 + transitivePeerDependencies: + - supports-color - '@esbuild/linux-arm64@0.27.3': - optional: true + '@opentelemetry/instrumentation-undici@0.11.0(@opentelemetry/api@1.9.0)': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/core': 2.6.0(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation': 0.200.0(@opentelemetry/api@1.9.0) + transitivePeerDependencies: + - supports-color - '@esbuild/linux-arm@0.27.3': - optional: true + '@opentelemetry/instrumentation-winston@0.45.0(@opentelemetry/api@1.9.0)': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/api-logs': 0.200.0 + '@opentelemetry/instrumentation': 0.200.0(@opentelemetry/api@1.9.0) + transitivePeerDependencies: + - supports-color - '@esbuild/linux-ia32@0.27.3': - optional: true + '@opentelemetry/instrumentation@0.200.0(@opentelemetry/api@1.9.0)': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/api-logs': 0.200.0 + '@types/shimmer': 1.2.0 + import-in-the-middle: 1.15.0 + require-in-the-middle: 7.5.2 + shimmer: 1.2.1 + transitivePeerDependencies: + - supports-color - '@esbuild/linux-loong64@0.27.3': - optional: true + '@opentelemetry/instrumentation@0.57.0(@opentelemetry/api@1.9.0)': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/api-logs': 0.57.0 + '@types/shimmer': 1.2.0 + import-in-the-middle: 1.15.0 + require-in-the-middle: 7.5.2 + semver: 7.7.4 + shimmer: 1.2.1 + transitivePeerDependencies: + - supports-color - '@esbuild/linux-mips64el@0.27.3': - optional: true + '@opentelemetry/otlp-exporter-base@0.200.0(@opentelemetry/api@1.9.0)': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/core': 2.0.0(@opentelemetry/api@1.9.0) + '@opentelemetry/otlp-transformer': 0.200.0(@opentelemetry/api@1.9.0) - '@esbuild/linux-ppc64@0.27.3': - optional: true + '@opentelemetry/otlp-exporter-base@0.57.0(@opentelemetry/api@1.9.0)': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/core': 1.30.0(@opentelemetry/api@1.9.0) + '@opentelemetry/otlp-transformer': 0.57.0(@opentelemetry/api@1.9.0) - '@esbuild/linux-riscv64@0.27.3': - optional: true + '@opentelemetry/otlp-grpc-exporter-base@0.200.0(@opentelemetry/api@1.9.0)': + dependencies: + '@grpc/grpc-js': 1.14.3 + '@opentelemetry/api': 1.9.0 + '@opentelemetry/core': 2.0.0(@opentelemetry/api@1.9.0) + '@opentelemetry/otlp-exporter-base': 0.200.0(@opentelemetry/api@1.9.0) + '@opentelemetry/otlp-transformer': 0.200.0(@opentelemetry/api@1.9.0) - '@esbuild/linux-s390x@0.27.3': - optional: true + '@opentelemetry/otlp-grpc-exporter-base@0.57.0(@opentelemetry/api@1.9.0)': + dependencies: + '@grpc/grpc-js': 1.14.3 + '@opentelemetry/api': 1.9.0 + '@opentelemetry/core': 1.30.0(@opentelemetry/api@1.9.0) + '@opentelemetry/otlp-exporter-base': 0.57.0(@opentelemetry/api@1.9.0) + '@opentelemetry/otlp-transformer': 0.57.0(@opentelemetry/api@1.9.0) - '@esbuild/linux-x64@0.27.3': - optional: true + '@opentelemetry/otlp-transformer@0.200.0(@opentelemetry/api@1.9.0)': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/api-logs': 0.200.0 + '@opentelemetry/core': 2.0.0(@opentelemetry/api@1.9.0) + '@opentelemetry/resources': 2.0.0(@opentelemetry/api@1.9.0) + '@opentelemetry/sdk-logs': 0.200.0(@opentelemetry/api@1.9.0) + '@opentelemetry/sdk-metrics': 2.0.0(@opentelemetry/api@1.9.0) + '@opentelemetry/sdk-trace-base': 2.0.0(@opentelemetry/api@1.9.0) + protobufjs: 7.5.4 - '@esbuild/netbsd-arm64@0.27.3': - optional: true + '@opentelemetry/otlp-transformer@0.57.0(@opentelemetry/api@1.9.0)': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/api-logs': 0.57.0 + '@opentelemetry/core': 1.30.0(@opentelemetry/api@1.9.0) + '@opentelemetry/resources': 1.30.0(@opentelemetry/api@1.9.0) + '@opentelemetry/sdk-logs': 0.57.0(@opentelemetry/api@1.9.0) + '@opentelemetry/sdk-metrics': 1.30.0(@opentelemetry/api@1.9.0) + '@opentelemetry/sdk-trace-base': 1.30.0(@opentelemetry/api@1.9.0) + protobufjs: 7.5.4 - '@esbuild/netbsd-x64@0.27.3': - optional: true + '@opentelemetry/propagation-utils@0.31.16(@opentelemetry/api@1.9.0)': + dependencies: + '@opentelemetry/api': 1.9.0 - '@esbuild/openbsd-arm64@0.27.3': - optional: true + '@opentelemetry/propagator-b3@1.30.0(@opentelemetry/api@1.9.0)': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/core': 1.30.0(@opentelemetry/api@1.9.0) - '@esbuild/openbsd-x64@0.27.3': - optional: true + '@opentelemetry/propagator-b3@2.0.0(@opentelemetry/api@1.9.0)': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/core': 2.0.0(@opentelemetry/api@1.9.0) - '@esbuild/openharmony-arm64@0.27.3': - optional: true + '@opentelemetry/propagator-jaeger@1.30.0(@opentelemetry/api@1.9.0)': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/core': 1.30.0(@opentelemetry/api@1.9.0) - '@esbuild/sunos-x64@0.27.3': - optional: true + '@opentelemetry/propagator-jaeger@2.0.0(@opentelemetry/api@1.9.0)': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/core': 2.0.0(@opentelemetry/api@1.9.0) - '@esbuild/win32-arm64@0.27.3': - optional: true + '@opentelemetry/redis-common@0.37.0': {} - '@esbuild/win32-ia32@0.27.3': - optional: true + '@opentelemetry/resource-detector-alibaba-cloud@0.31.11(@opentelemetry/api@1.9.0)': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/core': 2.6.0(@opentelemetry/api@1.9.0) + '@opentelemetry/resources': 2.6.0(@opentelemetry/api@1.9.0) - '@esbuild/win32-x64@0.27.3': - optional: true + '@opentelemetry/resource-detector-aws@2.13.0(@opentelemetry/api@1.9.0)': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/core': 2.6.0(@opentelemetry/api@1.9.0) + '@opentelemetry/resources': 2.6.0(@opentelemetry/api@1.9.0) + '@opentelemetry/semantic-conventions': 1.30.0 - '@hono/node-server@1.19.9(hono@4.11.4)': + '@opentelemetry/resource-detector-azure@0.7.0(@opentelemetry/api@1.9.0)': dependencies: - hono: 4.11.4 + '@opentelemetry/api': 1.9.0 + '@opentelemetry/core': 2.6.0(@opentelemetry/api@1.9.0) + '@opentelemetry/resources': 2.6.0(@opentelemetry/api@1.9.0) + '@opentelemetry/semantic-conventions': 1.30.0 - '@influxdata/influxdb-client@1.35.0': {} + '@opentelemetry/resource-detector-container@0.7.11(@opentelemetry/api@1.9.0)': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/core': 2.6.0(@opentelemetry/api@1.9.0) + '@opentelemetry/resources': 2.6.0(@opentelemetry/api@1.9.0) - '@jridgewell/gen-mapping@0.3.13': + '@opentelemetry/resource-detector-gcp@0.34.0(@opentelemetry/api@1.9.0)': dependencies: - '@jridgewell/sourcemap-codec': 1.5.5 - '@jridgewell/trace-mapping': 0.3.31 + '@opentelemetry/api': 1.9.0 + '@opentelemetry/core': 2.6.0(@opentelemetry/api@1.9.0) + '@opentelemetry/resources': 2.6.0(@opentelemetry/api@1.9.0) + '@opentelemetry/semantic-conventions': 1.30.0 + gcp-metadata: 6.1.1 + transitivePeerDependencies: + - encoding + - supports-color - '@jridgewell/resolve-uri@3.1.2': {} + '@opentelemetry/resources@1.30.0(@opentelemetry/api@1.9.0)': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/core': 1.30.0(@opentelemetry/api@1.9.0) + '@opentelemetry/semantic-conventions': 1.28.0 + + '@opentelemetry/resources@2.0.0(@opentelemetry/api@1.9.0)': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/core': 2.0.0(@opentelemetry/api@1.9.0) + '@opentelemetry/semantic-conventions': 1.30.0 + + '@opentelemetry/resources@2.6.0(@opentelemetry/api@1.9.0)': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/core': 2.6.0(@opentelemetry/api@1.9.0) + '@opentelemetry/semantic-conventions': 1.30.0 + + '@opentelemetry/sdk-logs@0.200.0(@opentelemetry/api@1.9.0)': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/api-logs': 0.200.0 + '@opentelemetry/core': 2.0.0(@opentelemetry/api@1.9.0) + '@opentelemetry/resources': 2.0.0(@opentelemetry/api@1.9.0) + + '@opentelemetry/sdk-logs@0.57.0(@opentelemetry/api@1.9.0)': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/api-logs': 0.57.0 + '@opentelemetry/core': 1.30.0(@opentelemetry/api@1.9.0) + '@opentelemetry/resources': 1.30.0(@opentelemetry/api@1.9.0) + + '@opentelemetry/sdk-metrics@1.30.0(@opentelemetry/api@1.9.0)': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/core': 1.30.0(@opentelemetry/api@1.9.0) + '@opentelemetry/resources': 1.30.0(@opentelemetry/api@1.9.0) + + '@opentelemetry/sdk-metrics@2.0.0(@opentelemetry/api@1.9.0)': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/core': 2.0.0(@opentelemetry/api@1.9.0) + '@opentelemetry/resources': 2.0.0(@opentelemetry/api@1.9.0) + + '@opentelemetry/sdk-node@0.200.0(@opentelemetry/api@1.9.0)': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/api-logs': 0.200.0 + '@opentelemetry/core': 2.0.0(@opentelemetry/api@1.9.0) + '@opentelemetry/exporter-logs-otlp-grpc': 0.200.0(@opentelemetry/api@1.9.0) + '@opentelemetry/exporter-logs-otlp-http': 0.200.0(@opentelemetry/api@1.9.0) + '@opentelemetry/exporter-logs-otlp-proto': 0.200.0(@opentelemetry/api@1.9.0) + '@opentelemetry/exporter-metrics-otlp-grpc': 0.200.0(@opentelemetry/api@1.9.0) + '@opentelemetry/exporter-metrics-otlp-http': 0.200.0(@opentelemetry/api@1.9.0) + '@opentelemetry/exporter-metrics-otlp-proto': 0.200.0(@opentelemetry/api@1.9.0) + '@opentelemetry/exporter-prometheus': 0.200.0(@opentelemetry/api@1.9.0) + '@opentelemetry/exporter-trace-otlp-grpc': 0.200.0(@opentelemetry/api@1.9.0) + '@opentelemetry/exporter-trace-otlp-http': 0.200.0(@opentelemetry/api@1.9.0) + '@opentelemetry/exporter-trace-otlp-proto': 0.200.0(@opentelemetry/api@1.9.0) + '@opentelemetry/exporter-zipkin': 2.0.0(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation': 0.200.0(@opentelemetry/api@1.9.0) + '@opentelemetry/propagator-b3': 2.0.0(@opentelemetry/api@1.9.0) + '@opentelemetry/propagator-jaeger': 2.0.0(@opentelemetry/api@1.9.0) + '@opentelemetry/resources': 2.0.0(@opentelemetry/api@1.9.0) + '@opentelemetry/sdk-logs': 0.200.0(@opentelemetry/api@1.9.0) + '@opentelemetry/sdk-metrics': 2.0.0(@opentelemetry/api@1.9.0) + '@opentelemetry/sdk-trace-base': 2.0.0(@opentelemetry/api@1.9.0) + '@opentelemetry/sdk-trace-node': 2.0.0(@opentelemetry/api@1.9.0) + '@opentelemetry/semantic-conventions': 1.30.0 + transitivePeerDependencies: + - supports-color - '@jridgewell/sourcemap-codec@1.5.5': {} + '@opentelemetry/sdk-node@0.57.0(@opentelemetry/api@1.9.0)': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/api-logs': 0.57.0 + '@opentelemetry/core': 1.30.0(@opentelemetry/api@1.9.0) + '@opentelemetry/exporter-logs-otlp-grpc': 0.57.0(@opentelemetry/api@1.9.0) + '@opentelemetry/exporter-logs-otlp-http': 0.57.0(@opentelemetry/api@1.9.0) + '@opentelemetry/exporter-logs-otlp-proto': 0.57.0(@opentelemetry/api@1.9.0) + '@opentelemetry/exporter-metrics-otlp-grpc': 0.57.0(@opentelemetry/api@1.9.0) + '@opentelemetry/exporter-metrics-otlp-http': 0.57.0(@opentelemetry/api@1.9.0) + '@opentelemetry/exporter-metrics-otlp-proto': 0.57.0(@opentelemetry/api@1.9.0) + '@opentelemetry/exporter-prometheus': 0.57.0(@opentelemetry/api@1.9.0) + '@opentelemetry/exporter-trace-otlp-grpc': 0.57.0(@opentelemetry/api@1.9.0) + '@opentelemetry/exporter-trace-otlp-http': 0.57.0(@opentelemetry/api@1.9.0) + '@opentelemetry/exporter-trace-otlp-proto': 0.57.0(@opentelemetry/api@1.9.0) + '@opentelemetry/exporter-zipkin': 1.30.0(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation': 0.57.0(@opentelemetry/api@1.9.0) + '@opentelemetry/resources': 1.30.0(@opentelemetry/api@1.9.0) + '@opentelemetry/sdk-logs': 0.57.0(@opentelemetry/api@1.9.0) + '@opentelemetry/sdk-metrics': 1.30.0(@opentelemetry/api@1.9.0) + '@opentelemetry/sdk-trace-base': 1.30.0(@opentelemetry/api@1.9.0) + '@opentelemetry/sdk-trace-node': 1.30.0(@opentelemetry/api@1.9.0) + '@opentelemetry/semantic-conventions': 1.28.0 + transitivePeerDependencies: + - supports-color - '@jridgewell/trace-mapping@0.3.31': + '@opentelemetry/sdk-trace-base@1.30.0(@opentelemetry/api@1.9.0)': dependencies: - '@jridgewell/resolve-uri': 3.1.2 - '@jridgewell/sourcemap-codec': 1.5.5 + '@opentelemetry/api': 1.9.0 + '@opentelemetry/core': 1.30.0(@opentelemetry/api@1.9.0) + '@opentelemetry/resources': 1.30.0(@opentelemetry/api@1.9.0) + '@opentelemetry/semantic-conventions': 1.28.0 - '@jsdevtools/ono@7.1.3': {} + '@opentelemetry/sdk-trace-base@2.0.0(@opentelemetry/api@1.9.0)': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/core': 2.0.0(@opentelemetry/api@1.9.0) + '@opentelemetry/resources': 2.0.0(@opentelemetry/api@1.9.0) + '@opentelemetry/semantic-conventions': 1.30.0 - '@mongodb-js/saslprep@1.4.6': + '@opentelemetry/sdk-trace-node@1.30.0(@opentelemetry/api@1.9.0)': dependencies: - sparse-bitfield: 3.0.3 + '@opentelemetry/api': 1.9.0 + '@opentelemetry/context-async-hooks': 1.30.0(@opentelemetry/api@1.9.0) + '@opentelemetry/core': 1.30.0(@opentelemetry/api@1.9.0) + '@opentelemetry/propagator-b3': 1.30.0(@opentelemetry/api@1.9.0) + '@opentelemetry/propagator-jaeger': 1.30.0(@opentelemetry/api@1.9.0) + '@opentelemetry/sdk-trace-base': 1.30.0(@opentelemetry/api@1.9.0) + semver: 7.7.4 - '@mrleebo/prisma-ast@0.13.1': + '@opentelemetry/sdk-trace-node@2.0.0(@opentelemetry/api@1.9.0)': dependencies: - chevrotain: 10.5.0 - lilconfig: 2.1.0 + '@opentelemetry/api': 1.9.0 + '@opentelemetry/context-async-hooks': 2.0.0(@opentelemetry/api@1.9.0) + '@opentelemetry/core': 2.0.0(@opentelemetry/api@1.9.0) + '@opentelemetry/sdk-trace-base': 2.0.0(@opentelemetry/api@1.9.0) - '@noble/hashes@1.8.0': {} + '@opentelemetry/semantic-conventions@1.28.0': {} + + '@opentelemetry/semantic-conventions@1.30.0': {} + + '@opentelemetry/sql-common@0.41.2(@opentelemetry/api@1.9.0)': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/core': 2.6.0(@opentelemetry/api@1.9.0) '@paralleldrive/cuid2@2.3.1': dependencies: @@ -2770,6 +4560,29 @@ snapshots: react: 19.2.3 react-dom: 19.2.3(react@19.2.3) + '@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': + dependencies: + '@protobufjs/aspromise': 1.1.2 + '@protobufjs/inquire': 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': {} + '@redis/bloom@5.11.0(@redis/client@5.11.0)': dependencies: '@redis/client': 5.11.0 @@ -2871,11 +4684,17 @@ snapshots: '@standard-schema/spec@1.1.0': {} + '@types/aws-lambda@8.10.147': {} + '@types/body-parser@1.19.6': dependencies: '@types/connect': 3.4.38 '@types/node': 25.3.0 + '@types/bunyan@1.8.11': + dependencies: + '@types/node': 25.3.0 + '@types/chai@5.2.3': dependencies: '@types/deep-eql': 4.0.2 @@ -2926,6 +4745,10 @@ snapshots: '@types/ms': 2.1.0 '@types/node': 25.3.0 + '@types/memcached@2.2.10': + dependencies: + '@types/node': 25.3.0 + '@types/methods@1.1.4': {} '@types/ms@2.1.0': {} @@ -2934,6 +4757,10 @@ snapshots: dependencies: '@types/express': 5.0.6 + '@types/mysql@2.15.26': + dependencies: + '@types/node': 25.3.0 + '@types/node@25.3.0': dependencies: undici-types: 7.18.2 @@ -2942,12 +4769,22 @@ snapshots: dependencies: '@types/node': 25.3.0 + '@types/pg-pool@2.0.6': + dependencies: + '@types/pg': 8.16.0 + '@types/pg@8.16.0': dependencies: '@types/node': 25.3.0 pg-protocol: 1.11.0 pg-types: 2.2.0 + '@types/pg@8.6.1': + dependencies: + '@types/node': 25.3.0 + pg-protocol: 1.11.0 + pg-types: 2.2.0 + '@types/qs@6.14.0': {} '@types/range-parser@1.2.7': {} @@ -2965,6 +4802,8 @@ snapshots: '@types/http-errors': 2.0.5 '@types/node': 25.3.0 + '@types/shimmer@1.2.0': {} + '@types/superagent@8.1.9': dependencies: '@types/cookiejar': 2.1.5 @@ -2984,6 +4823,10 @@ snapshots: '@types/express': 5.0.6 '@types/serve-static': 2.2.0 + '@types/tedious@4.0.14': + dependencies: + '@types/node': 25.3.0 + '@types/uuid@11.0.0': dependencies: uuid: 13.0.0 @@ -3006,7 +4849,7 @@ snapshots: obug: 2.1.1 std-env: 3.10.0 tinyrainbow: 3.0.3 - vitest: 4.0.18(@types/node@25.3.0)(@vitest/ui@4.0.18)(jiti@2.6.1)(tsx@4.21.0) + vitest: 4.0.18(@opentelemetry/api@1.9.0)(@types/node@25.3.0)(@vitest/ui@4.0.18)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.2) '@vitest/expect@4.0.18': dependencies: @@ -3017,13 +4860,13 @@ snapshots: chai: 6.2.2 tinyrainbow: 3.0.3 - '@vitest/mocker@4.0.18(vite@7.3.1(@types/node@25.3.0)(jiti@2.6.1)(tsx@4.21.0))': + '@vitest/mocker@4.0.18(vite@7.3.1(@types/node@25.3.0)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.2))': dependencies: '@vitest/spy': 4.0.18 estree-walker: 3.0.3 magic-string: 0.30.21 optionalDependencies: - vite: 7.3.1(@types/node@25.3.0)(jiti@2.6.1)(tsx@4.21.0) + vite: 7.3.1(@types/node@25.3.0)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.2) '@vitest/pretty-format@4.0.18': dependencies: @@ -3051,7 +4894,7 @@ snapshots: sirv: 3.0.2 tinyglobby: 0.2.15 tinyrainbow: 3.0.3 - vitest: 4.0.18(@types/node@25.3.0)(@vitest/ui@4.0.18)(jiti@2.6.1)(tsx@4.21.0) + vitest: 4.0.18(@opentelemetry/api@1.9.0)(@types/node@25.3.0)(@vitest/ui@4.0.18)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.2) '@vitest/utils@4.0.18': dependencies: @@ -3071,8 +4914,20 @@ snapshots: mime-types: 3.0.2 negotiator: 1.0.0 + acorn-import-attributes@1.9.5(acorn@8.16.0): + dependencies: + acorn: 8.16.0 + acorn@8.16.0: {} + agent-base@7.1.4: {} + + ansi-regex@5.0.1: {} + + ansi-styles@4.3.0: + dependencies: + color-convert: 2.0.1 + any-promise@1.3.0: {} append-field@1.0.0: {} @@ -3105,6 +4960,8 @@ snapshots: base64id@2.0.0: {} + bignumber.js@9.3.1: {} + block-stream2@2.1.0: dependencies: readable-stream: 3.6.2 @@ -3207,8 +5064,22 @@ snapshots: citty@0.2.1: {} + cjs-module-lexer@1.4.3: {} + + cliui@8.0.1: + dependencies: + string-width: 4.2.3 + strip-ansi: 6.0.1 + wrap-ansi: 7.0.0 + cluster-key-slot@1.1.2: {} + color-convert@2.0.1: + dependencies: + color-name: 1.1.4 + + color-name@1.1.4: {} + colorette@2.0.20: {} combined-stream@1.0.8: @@ -3354,6 +5225,8 @@ snapshots: '@standard-schema/spec': 1.1.0 fast-check: 3.23.2 + emoji-regex@8.0.0: {} + empathic@2.0.0: {} encodeurl@2.0.0: {} @@ -3426,6 +5299,8 @@ snapshots: '@esbuild/win32-ia32': 0.27.3 '@esbuild/win32-x64': 0.27.3 + escalade@3.2.0: {} + escape-html@1.0.3: {} estree-walker@3.0.3: @@ -3493,6 +5368,8 @@ snapshots: exsolve@1.0.8: {} + extend@3.0.2: {} + fast-check@3.23.2: dependencies: pure-rand: 6.1.0 @@ -3555,6 +5432,8 @@ snapshots: dezalgo: 1.0.4 once: 1.4.0 + forwarded-parse@2.1.2: {} + forwarded@0.2.0: {} fresh@2.0.0: {} @@ -3564,6 +5443,26 @@ snapshots: function-bind@1.1.2: {} + gaxios@6.7.1: + dependencies: + extend: 3.0.2 + https-proxy-agent: 7.0.6 + is-stream: 2.0.1 + node-fetch: 2.7.0 + uuid: 9.0.1 + transitivePeerDependencies: + - encoding + - supports-color + + gcp-metadata@6.1.1: + dependencies: + gaxios: 6.7.1 + google-logging-utils: 0.0.2 + json-bigint: 1.0.0 + transitivePeerDependencies: + - encoding + - supports-color + generate-function@2.3.1: dependencies: is-property: 1.0.2 @@ -3611,6 +5510,8 @@ snapshots: minipass: 7.1.3 path-scurry: 2.0.2 + google-logging-utils@0.0.2: {} + gopd@1.2.0: {} graceful-fs@4.2.11: {} @@ -3660,10 +5561,24 @@ snapshots: http-status-codes@2.3.0: {} + https-proxy-agent@7.0.6: + dependencies: + agent-base: 7.1.4 + debug: 4.4.3 + transitivePeerDependencies: + - supports-color + iconv-lite@0.7.2: dependencies: safer-buffer: 2.1.2 + import-in-the-middle@1.15.0: + dependencies: + acorn: 8.16.0 + acorn-import-attributes: 1.9.5(acorn@8.16.0) + cjs-module-lexer: 1.4.3 + module-details-from-path: 1.0.4 + inherits@2.0.4: {} ip-address@10.0.1: {} @@ -3679,6 +5594,12 @@ snapshots: is-callable@1.2.7: {} + is-core-module@2.16.1: + dependencies: + hasown: 2.0.2 + + is-fullwidth-code-point@3.0.0: {} + is-generator-function@1.1.2: dependencies: call-bound: 1.0.4 @@ -3698,6 +5619,8 @@ snapshots: has-tostringtag: 1.0.2 hasown: 2.0.2 + is-stream@2.0.1: {} + is-typed-array@1.1.15: dependencies: which-typed-array: 1.1.20 @@ -3727,6 +5650,10 @@ snapshots: dependencies: argparse: 2.0.1 + json-bigint@1.0.0: + dependencies: + bignumber.js: 9.3.1 + json5@2.2.3: {} jsonwebtoken@9.0.3: @@ -3765,6 +5692,8 @@ snapshots: load-tsconfig@0.2.5: {} + lodash.camelcase@4.3.0: {} + lodash.get@4.4.2: {} lodash.includes@4.3.0: {} @@ -3876,6 +5805,8 @@ snapshots: pkg-types: 1.3.1 ufo: 1.6.3 + module-details-from-path@1.0.4: {} + mongodb-connection-string-url@7.0.1: dependencies: '@types/whatwg-url': 13.0.0 @@ -3964,6 +5895,10 @@ snapshots: node-fetch-native@1.6.7: {} + node-fetch@2.7.0: + dependencies: + whatwg-url: 5.0.0 + nodemailer@7.0.13: {} nypm@0.6.5: @@ -3998,6 +5933,8 @@ snapshots: path-key@3.1.1: {} + path-parse@1.0.7: {} + path-scurry@2.0.2: dependencies: lru-cache: 11.2.6 @@ -4107,13 +6044,14 @@ snapshots: possible-typed-array-names@1.1.0: {} - postcss-load-config@6.0.1(jiti@2.6.1)(postcss@8.5.6)(tsx@4.21.0): + postcss-load-config@6.0.1(jiti@2.6.1)(postcss@8.5.6)(tsx@4.21.0)(yaml@2.8.2): dependencies: lilconfig: 3.1.3 optionalDependencies: jiti: 2.6.1 postcss: 8.5.6 tsx: 4.21.0 + yaml: 2.8.2 postcss@8.5.6: dependencies: @@ -4159,6 +6097,21 @@ snapshots: retry: 0.12.0 signal-exit: 3.0.7 + protobufjs@7.5.4: + dependencies: + '@protobufjs/aspromise': 1.1.2 + '@protobufjs/base64': 1.1.2 + '@protobufjs/codegen': 2.0.4 + '@protobufjs/eventemitter': 1.1.0 + '@protobufjs/fetch': 1.1.0 + '@protobufjs/float': 1.0.2 + '@protobufjs/inquire': 1.1.0 + '@protobufjs/path': 1.1.2 + '@protobufjs/pool': 1.1.0 + '@protobufjs/utf8': 1.1.0 + '@types/node': 25.3.0 + long: 5.3.2 + proxy-addr@2.0.7: dependencies: forwarded: 0.2.0 @@ -4233,10 +6186,26 @@ snapshots: remeda@2.33.4: {} + require-directory@2.1.1: {} + + require-in-the-middle@7.5.2: + dependencies: + debug: 4.4.3 + module-details-from-path: 1.0.4 + resolve: 1.22.11 + transitivePeerDependencies: + - supports-color + resolve-from@5.0.0: {} resolve-pkg-maps@1.0.0: {} + resolve@1.22.11: + dependencies: + is-core-module: 2.16.1 + path-parse: 1.0.7 + supports-preserve-symlinks-flag: 1.0.0 + retry@0.12.0: {} rollup@4.59.0: @@ -4344,6 +6313,8 @@ snapshots: shebang-regex@3.0.0: {} + shimmer@1.2.1: {} + side-channel-list@1.0.0: dependencies: es-errors: 1.3.0 @@ -4452,10 +6423,20 @@ snapshots: strict-uri-encode@2.0.0: {} + string-width@4.2.3: + dependencies: + emoji-regex: 8.0.0 + is-fullwidth-code-point: 3.0.0 + strip-ansi: 6.0.1 + string_decoder@1.3.0: dependencies: safe-buffer: 5.2.1 + strip-ansi@6.0.1: + dependencies: + ansi-regex: 5.0.1 + strip-bom@3.0.0: {} strip-json-comments@5.0.3: {} @@ -4498,6 +6479,8 @@ snapshots: dependencies: has-flag: 4.0.0 + supports-preserve-symlinks-flag@1.0.0: {} + swagger-jsdoc@6.2.8(openapi-types@12.1.3): dependencies: commander: 6.2.0 @@ -4557,6 +6540,8 @@ snapshots: totalist@3.0.1: {} + tr46@0.0.3: {} + tr46@5.1.1: dependencies: punycode: 2.3.1 @@ -4571,7 +6556,7 @@ snapshots: minimist: 1.2.8 strip-bom: 3.0.0 - tsup@8.5.1(jiti@2.6.1)(postcss@8.5.6)(tsx@4.21.0)(typescript@5.9.3): + tsup@8.5.1(jiti@2.6.1)(postcss@8.5.6)(tsx@4.21.0)(typescript@5.9.3)(yaml@2.8.2): dependencies: bundle-require: 5.1.0(esbuild@0.27.3) cac: 6.7.14 @@ -4582,7 +6567,7 @@ snapshots: fix-dts-default-cjs-exports: 1.0.1 joycon: 3.1.1 picocolors: 1.1.1 - postcss-load-config: 6.0.1(jiti@2.6.1)(postcss@8.5.6)(tsx@4.21.0) + postcss-load-config: 6.0.1(jiti@2.6.1)(postcss@8.5.6)(tsx@4.21.0)(yaml@2.8.2) resolve-from: 5.0.0 rollup: 4.59.0 source-map: 0.7.6 @@ -4646,6 +6631,8 @@ snapshots: uuid@13.0.0: {} + uuid@9.0.1: {} + valibot@1.2.0(typescript@5.9.3): optionalDependencies: typescript: 5.9.3 @@ -4654,7 +6641,7 @@ snapshots: vary@1.1.2: {} - vite@7.3.1(@types/node@25.3.0)(jiti@2.6.1)(tsx@4.21.0): + vite@7.3.1(@types/node@25.3.0)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.2): dependencies: esbuild: 0.27.3 fdir: 6.5.0(picomatch@4.0.3) @@ -4667,11 +6654,12 @@ snapshots: fsevents: 2.3.3 jiti: 2.6.1 tsx: 4.21.0 + yaml: 2.8.2 - vitest@4.0.18(@types/node@25.3.0)(@vitest/ui@4.0.18)(jiti@2.6.1)(tsx@4.21.0): + vitest@4.0.18(@opentelemetry/api@1.9.0)(@types/node@25.3.0)(@vitest/ui@4.0.18)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.2): dependencies: '@vitest/expect': 4.0.18 - '@vitest/mocker': 4.0.18(vite@7.3.1(@types/node@25.3.0)(jiti@2.6.1)(tsx@4.21.0)) + '@vitest/mocker': 4.0.18(vite@7.3.1(@types/node@25.3.0)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.2)) '@vitest/pretty-format': 4.0.18 '@vitest/runner': 4.0.18 '@vitest/snapshot': 4.0.18 @@ -4688,9 +6676,10 @@ snapshots: tinyexec: 1.0.2 tinyglobby: 0.2.15 tinyrainbow: 3.0.3 - vite: 7.3.1(@types/node@25.3.0)(jiti@2.6.1)(tsx@4.21.0) + vite: 7.3.1(@types/node@25.3.0)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.2) why-is-node-running: 2.3.0 optionalDependencies: + '@opentelemetry/api': 1.9.0 '@types/node': 25.3.0 '@vitest/ui': 4.0.18(vitest@4.0.18) transitivePeerDependencies: @@ -4712,6 +6701,8 @@ snapshots: optionalDependencies: '@zxing/text-encoding': 0.9.0 + webidl-conversions@3.0.1: {} + webidl-conversions@7.0.0: {} whatwg-url@14.2.0: @@ -4719,6 +6710,11 @@ snapshots: tr46: 5.1.1 webidl-conversions: 7.0.0 + whatwg-url@5.0.0: + dependencies: + tr46: 0.0.3 + webidl-conversions: 3.0.1 + which-typed-array@1.1.20: dependencies: available-typed-arrays: 1.0.7 @@ -4740,6 +6736,12 @@ snapshots: wordwrap@1.0.0: {} + wrap-ansi@7.0.0: + dependencies: + ansi-styles: 4.3.0 + string-width: 4.2.3 + strip-ansi: 6.0.1 + wrappy@1.0.2: {} ws@8.18.3: {} @@ -4753,8 +6755,25 @@ snapshots: xtend@4.0.2: {} + y18n@5.0.8: {} + yaml@2.0.0-1: {} + yaml@2.8.2: + optional: true + + yargs-parser@21.1.1: {} + + yargs@17.7.2: + dependencies: + cliui: 8.0.1 + escalade: 3.2.0 + get-caller-file: 2.0.5 + require-directory: 2.1.1 + string-width: 4.2.3 + y18n: 5.0.8 + yargs-parser: 21.1.1 + z-schema@5.0.5: dependencies: lodash.get: 4.4.2 diff --git a/api/src/__tests__/unit/infrastructure/messaging/consumers/chamado.consumer.test.ts b/api/src/__tests__/unit/infrastructure/messaging/consumers/chamado.consumer.test.ts index 0f2a16a..40cf4d3 100644 --- a/api/src/__tests__/unit/infrastructure/messaging/consumers/chamado.consumer.test.ts +++ b/api/src/__tests__/unit/infrastructure/messaging/consumers/chamado.consumer.test.ts @@ -187,7 +187,6 @@ describe('renderTemplate', () => { describe('Erros inesperados', () => { it('deve embrulhar erro genérico do readFileSync em TemplateError com originalError', () => { const erroIo = new Error('EACCES: permission denied'); - // Substitui diretamente sem depender do estado acumulado fsMock.readFileSync = vi.fn().mockImplementation(() => { throw erroIo; }) as any; try { @@ -424,7 +423,10 @@ describe('startChamadoConsumer', () => { it('deve conectar, subscrever e iniciar o consumer', async () => { await startChamadoConsumer(); - expect(kafkaMock.consumer).toHaveBeenCalledWith({ groupId: 'chamado-group' }); + // FIX: objectContaining para não quebrar com opções extras de tuning + expect(kafkaMock.consumer).toHaveBeenCalledWith( + expect.objectContaining({ groupId: 'chamado-group' }) + ); expect(kafkaConsumerMock.connect).toHaveBeenCalledOnce(); expect(kafkaConsumerMock.subscribe).toHaveBeenCalledWith({ topic: 'chamado-status', diff --git a/api/src/app.ts b/api/src/app.ts index c03cb69..048bf72 100644 --- a/api/src/app.ts +++ b/api/src/app.ts @@ -8,10 +8,11 @@ import { swaggerSpec } from './shared/config/swagger'; import { redisClient } from './infrastructure/database/redis/client'; import { errorLoggerMiddleware } from './infrastructure/http/middlewares/error-logger.middleware'; import { requestLoggerMiddleware } from './infrastructure/http/middlewares/request-logger.middleware'; +import { tracingMiddleware } from '@infrastructure/http/middlewares/tracing.middleware'; import routes from './presentation/http/routes'; import { initSocketIO } from './infrastructure/websocket/socket'; -import { startNotificacaoConsumer, stopNotificacaoConsumer } from './infrastructure/messaging/kafka/consumers/notificacao.consumer'; -import { startSLAJob } from './infrastructure/jobs/sla.job'; +import { startNotificacaoConsumer } from '@infrastructure/messaging/kafka/consumers/notificacao.consumer'; +import { startSLAJob } from '@infrastructure/jobs/sla.job'; const JWT_SECRET = process.env.JWT_SECRET; if (!JWT_SECRET) { @@ -42,38 +43,29 @@ app.use(session({ secure: process.env.NODE_ENV === 'production', httpOnly: true, maxAge: 8 * 60 * 60 * 1000, - sameSite: 'lax' - } + sameSite: 'lax', + }, })); -app.get('/', (req: Request, res: Response) => { - res.json({ - message: 'Help-Me API', - version: '1.2.1', - docs: '/api-docs', - health: '/health' - }); +app.get('/', (_req: Request, res: Response) => { + res.json({ message: 'Help-Me API', version: '1.2.5', docs: '/api-docs', health: '/health' }); }); -app.get('/health', (req: Request, res: Response) => { +app.get('/health', (_req: Request, res: Response) => { res.status(200).json({ status: 'ok', timestamp: new Date().toISOString(), uptime: process.uptime(), service: 'helpme-api', - environment: process.env.NODE_ENV || 'development' + environment: process.env.NODE_ENV || 'development', }); }); -app.use( - '/api-docs', - swaggerUi.serve, - swaggerUi.setup(swaggerSpec, { - swaggerOptions: { - defaultModelsExpandDepth: -1, - }, - }), -); +app.use('/api-docs', swaggerUi.serve, swaggerUi.setup(swaggerSpec, { + swaggerOptions: { defaultModelsExpandDepth: -1 }, +})); + +app.use(tracingMiddleware); app.use('/api', routes); @@ -90,45 +82,24 @@ app.use((req: Request, res: Response) => { app.use(errorLoggerMiddleware); -app.use((err: any, req: Request, res: Response, next: NextFunction) => { +app.use((err: any, req: Request, res: Response, _next: NextFunction) => { const statusCode = err.status || err.statusCode || 500; res.status(statusCode).json({ success: false, + requestId: req.id, error: { message: err.message || 'Erro interno do servidor', ...(process.env.NODE_ENV === 'development' && { stack: err.stack }), }, - requestId: req.id, }); }); export const httpServer = http.createServer(app); initSocketIO(httpServer); -let slaJob: NodeJS.Timeout | null = null; - export async function startServices(): Promise { await startNotificacaoConsumer(); - slaJob = startSLAJob(); + startSLAJob(); } -async function shutdown(signal: string): Promise { - app.locals.logger?.info(`[SHUTDOWN] Sinal recebido: ${signal}`); - - if (slaJob) clearInterval(slaJob); - - await stopNotificacaoConsumer(); - - httpServer.close(() => { - app.locals.logger?.info('[SHUTDOWN] Servidor encerrado'); - process.exit(0); - }); - - // Força saída após 10s caso algo trave - setTimeout(() => process.exit(1), 10_000).unref(); -} - -process.on('SIGTERM', () => shutdown('SIGTERM')); -process.on('SIGINT', () => shutdown('SIGINT')); - export default app; \ No newline at end of file diff --git a/api/src/infrastructure/database/prisma/client.ts b/api/src/infrastructure/database/prisma/client.ts index 10fea3b..e685a07 100644 --- a/api/src/infrastructure/database/prisma/client.ts +++ b/api/src/infrastructure/database/prisma/client.ts @@ -14,7 +14,9 @@ const pool = new Pool({ connectionString, max: parseInt(process.env.DB_MAX_CONNECTIONS || '10', 10), idleTimeoutMillis: 30000, - connectionTimeoutMillis: 2000, + connectionTimeoutMillis: 10000, // 2s → 10s + keepAlive: true, // evita que o TCP caia silenciosamente + keepAliveInitialDelayMillis: 10000, }); const adapter = new PrismaPg(pool); diff --git a/api/src/infrastructure/http/middlewares/tracing.middleware.ts b/api/src/infrastructure/http/middlewares/tracing.middleware.ts new file mode 100644 index 0000000..f853aca --- /dev/null +++ b/api/src/infrastructure/http/middlewares/tracing.middleware.ts @@ -0,0 +1,16 @@ +import { trace, context } from '@opentelemetry/api'; +import { Request, Response, NextFunction } from 'express'; + +export function tracingMiddleware(req: Request, res: Response, next: NextFunction) { + const span = trace.getActiveSpan(); + const spanContext = span?.spanContext(); + + if (spanContext) { + req.log = req.log.child({ + traceId: spanContext.traceId, + spanId: spanContext.spanId, + }); + } + + next(); +} \ No newline at end of file diff --git a/api/src/infrastructure/messaging/kafka/client.ts b/api/src/infrastructure/messaging/kafka/client.ts index ccb1846..a71fb83 100644 --- a/api/src/infrastructure/messaging/kafka/client.ts +++ b/api/src/infrastructure/messaging/kafka/client.ts @@ -2,7 +2,9 @@ import { Kafka, Producer, logLevel, LogEntry } from 'kafkajs'; import { logger } from '@shared/config/logger'; const ignoreMessages = [ - 'The group is rebalancing, so a rejoin is needed' + 'The group is rebalancing, so a rejoin is needed', + 'Connection timeout', + 'Failed to connect to seed broker', ]; export const customLogCreator = () => (entry: LogEntry) => { @@ -50,16 +52,16 @@ function getKafkaInstance(): Kafka { }; kafkaInstance = new Kafka({ - clientId: kafkaConfig.clientId, + clientId: 'helpdesk-api', brokers: kafkaConfig.brokers, logLevel: logLevel.ERROR, logCreator: customLogCreator, retry: { initialRetryTime: 300, - retries: 3 + retries: 3, }, - connectionTimeout: 3000, - requestTimeout: 25000 + connectionTimeout: 10000, + requestTimeout: 90000, // precisa ser > rebalanceTimeoutMs (60000) }); return kafkaInstance; diff --git a/api/src/infrastructure/messaging/kafka/consumers/chamado.consumer.ts b/api/src/infrastructure/messaging/kafka/consumers/chamado.consumer.ts index b1b906b..b125eb4 100644 --- a/api/src/infrastructure/messaging/kafka/consumers/chamado.consumer.ts +++ b/api/src/infrastructure/messaging/kafka/consumers/chamado.consumer.ts @@ -324,7 +324,12 @@ export async function startChamadoConsumer(): Promise { // Criar consumer apenas se não existir if (!consumerInstance) { - consumerInstance = kafka.consumer({ groupId: 'chamado-group' }); + consumerInstance = kafka.consumer({ + groupId: 'chamado-group', + sessionTimeout: 60000, // padrão é 30000 — dobrar + heartbeatInterval: 5000, // padrão é 3000 + maxWaitTimeInMs: 5000, // tempo máximo de espera por mensagens no Fetch + }); logger.debug('Consumer instance criada'); } diff --git a/api/src/infrastructure/messaging/kafka/consumers/notificacao.consumer.ts b/api/src/infrastructure/messaging/kafka/consumers/notificacao.consumer.ts index dbba70a..ddf53df 100644 --- a/api/src/infrastructure/messaging/kafka/consumers/notificacao.consumer.ts +++ b/api/src/infrastructure/messaging/kafka/consumers/notificacao.consumer.ts @@ -199,7 +199,12 @@ export async function startNotificacaoConsumer(): Promise { } try { - consumerInstance = kafka.consumer({ groupId: 'helpme-notificacoes-group' }); + consumerInstance = kafka.consumer({ + groupId: 'helpme-notificacoes-group', + sessionTimeout: 60000, + heartbeatInterval: 5000, + maxWaitTimeInMs: 5000, + }); await consumerInstance.connect(); logger.info('Consumer de notificações conectado'); diff --git a/api/src/server.ts b/api/src/server.ts index d5d9a74..68b1ade 100644 --- a/api/src/server.ts +++ b/api/src/server.ts @@ -1,3 +1,6 @@ +import 'dotenv/config'; + +import './shared/config/tracing'; import mongoose from 'mongoose'; import { logger } from './shared/config/logger'; import { prisma } from './infrastructure/database/prisma/client'; diff --git a/api/src/shared/config/logger.ts b/api/src/shared/config/logger.ts index 9828d6c..2e64b33 100644 --- a/api/src/shared/config/logger.ts +++ b/api/src/shared/config/logger.ts @@ -1,4 +1,6 @@ import pino from 'pino'; +import { trace } from '@opentelemetry/api'; +import { sendToLoki } from './loki-sender'; const isDevelopment = process.env.NODE_ENV !== 'production'; @@ -17,18 +19,26 @@ const transport = isDevelopment export const logger = pino( { level: process.env.LOG_LEVEL || 'info', - + formatters: { - level: (label) => { - return { level: label }; - }, - bindings: (bindings) => { - return { - pid: bindings.pid, - hostname: bindings.hostname, - service: 'helpme-api', - environment: process.env.NODE_ENV || 'development', - }; + level: (label) => ({ level: label }), + bindings: (bindings) => ({ + pid: bindings.pid, + hostname: bindings.hostname, + service: 'helpme-api', + environment: process.env.NODE_ENV || 'development', + }), + log: (object) => { + const span = trace.getActiveSpan(); + const enriched = span ? { + ...object, + ...span.spanContext(), + } : object; + + // Enviar para Loki no mesmo processo + sendToLoki(enriched as Record); + + return enriched; }, }, @@ -44,9 +54,7 @@ export const logger = pino( remoteAddress: req.remoteAddress || req.ip, remotePort: req.remotePort, }), - res: (res) => ({ - statusCode: res.statusCode, - }), + res: (res) => ({ statusCode: res.statusCode }), err: pino.stdSerializers.err, error: pino.stdSerializers.err, }, @@ -54,8 +62,6 @@ export const logger = pino( transport ); -export const testLogger = pino({ - level: 'silent', -}); +export const testLogger = pino({ level: 'silent' }); export default logger; \ No newline at end of file diff --git a/api/src/shared/config/loki-sender.ts b/api/src/shared/config/loki-sender.ts new file mode 100644 index 0000000..83b90ae --- /dev/null +++ b/api/src/shared/config/loki-sender.ts @@ -0,0 +1,34 @@ +const LOKI_URL = process.env.LOKI_URL ?? 'http://localhost:3100'; +const buffer: [string, string][] = []; +let timer: NodeJS.Timeout | null = null; + +const flush = async () => { + if (buffer.length === 0) return; + const values = buffer.splice(0, buffer.length); + try { + await fetch(`${LOKI_URL}/loki/api/v1/push`, { + method: 'POST', + headers: { 'Content-Type': 'application/json' }, + body: JSON.stringify({ + streams: [{ + stream: { job: 'helpme-api', container: 'helpme-api' }, + values, + }], + }), + }); + } catch { + // silencioso para não quebrar a aplicação + } +}; + +export const sendToLoki = (obj: Record) => { + const ts = obj.time + ? String(new Date(obj.time as string).getTime() * 1_000_000) + : String(Date.now() * 1_000_000); + buffer.push([ts, JSON.stringify(obj)]); + + if (!timer) { + timer = setInterval(flush, 5000); + timer.unref(); + } +}; \ No newline at end of file diff --git a/api/src/shared/config/loki-transport.mjs b/api/src/shared/config/loki-transport.mjs new file mode 100644 index 0000000..1a99d1e --- /dev/null +++ b/api/src/shared/config/loki-transport.mjs @@ -0,0 +1,42 @@ +import pkg from 'pino-abstract-transport'; +const { build } = pkg; +import { fetch } from 'undici'; + +export default async function lokiTransport(opts) { + const host = opts.host ?? 'http://localhost:3100'; + const labels = opts.labels ?? {}; + const interval = (opts.interval ?? 5) * 1000; + const buffer = []; + + const flush = async () => { + if (buffer.length === 0) return; + const values = buffer.splice(0, buffer.length); + try { + await fetch(`${host}/loki/api/v1/push`, { + method: 'POST', + headers: { 'Content-Type': 'application/json' }, + body: JSON.stringify({ + streams: [{ stream: labels, values }], + }), + }); + } catch (err) { + console.error('[LOKI] Erro ao enviar logs:', err.message); + } + }; + + const timer = setInterval(flush, interval); + + return build(async function (source) { + for await (const obj of source) { + const ts = obj.time + ? String(new Date(obj.time).getTime() * 1_000_000) + : String(Date.now() * 1_000_000); + buffer.push([ts, JSON.stringify(obj)]); + } + }, { + async close() { + clearInterval(timer); + await flush(); + }, + }); +} \ No newline at end of file diff --git a/api/src/shared/config/swagger.ts b/api/src/shared/config/swagger.ts index 9e20dbc..795c4a8 100644 --- a/api/src/shared/config/swagger.ts +++ b/api/src/shared/config/swagger.ts @@ -5,7 +5,7 @@ const options = { openapi: '3.0.0', info: { title: 'Help-me API', - version: '1.2.1', + version: '5', description: 'API de Helpdesk', }, servers: [ diff --git a/api/src/shared/config/tracing.ts b/api/src/shared/config/tracing.ts new file mode 100644 index 0000000..452efec --- /dev/null +++ b/api/src/shared/config/tracing.ts @@ -0,0 +1,36 @@ +import { NodeSDK } from '@opentelemetry/sdk-node'; +import { OTLPTraceExporter } from '@opentelemetry/exporter-trace-otlp-http'; +import { SimpleSpanProcessor } from '@opentelemetry/sdk-trace-base'; +import { Resource } from '@opentelemetry/resources'; +import { ATTR_SERVICE_NAME, ATTR_SERVICE_VERSION } from '@opentelemetry/semantic-conventions'; +import { getNodeAutoInstrumentations } from '@opentelemetry/auto-instrumentations-node'; + +console.log('[OTEL] Inicializando...'); + +const exporter = new OTLPTraceExporter({ + url: process.env.OTEL_EXPORTER_OTLP_ENDPOINT ?? 'http://localhost:4318/v1/traces', +}); + +const sdk = new NodeSDK({ + resource: new Resource({ + [ATTR_SERVICE_NAME]: process.env.OTEL_SERVICE_NAME ?? 'help-me-api', + [ATTR_SERVICE_VERSION]: process.env.npm_package_version ?? '1.0.0', + }), + spanProcessors: [new SimpleSpanProcessor(exporter)], + instrumentations: [ + getNodeAutoInstrumentations({ + '@opentelemetry/instrumentation-http': { enabled: true }, + '@opentelemetry/instrumentation-express': { enabled: true }, + '@opentelemetry/instrumentation-pg': { enabled: true }, + '@opentelemetry/instrumentation-mongodb': { enabled: true }, + '@opentelemetry/instrumentation-redis': { enabled: true }, + '@opentelemetry/instrumentation-kafkajs': { enabled: true }, + '@opentelemetry/instrumentation-fs': { enabled: false }, + }), + ], +}); + +sdk.start(); +console.log('[OTEL] Tracing iniciado.'); + +process.on('SIGTERM', () => sdk.shutdown().finally(() => process.exit(0))); \ No newline at end of file diff --git a/api/tsconfig.json b/api/tsconfig.json index 1c59227..bc6c24f 100644 --- a/api/tsconfig.json +++ b/api/tsconfig.json @@ -11,6 +11,7 @@ }, "target": "ES2023", "module": "ESNext", + //"module": "CommonJS", "moduleResolution": "Node", "esModuleInterop": true, "strict": true, From 22ff5cdb4939cf2800d03080fe998e3a521e95a9 Mon Sep 17 00:00:00 2001 From: "Diego Ferreira L.G.Oliveira" Date: Sun, 8 Mar 2026 19:48:03 -0300 Subject: [PATCH 2/5] hotfix: correcao de warns --- api/Dockerfile | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/api/Dockerfile b/api/Dockerfile index 64b8787..58e184b 100644 --- a/api/Dockerfile +++ b/api/Dockerfile @@ -66,12 +66,14 @@ LABEL org.opencontainers.image.created="${BUILD_DATE}" LABEL org.opencontainers.image.revision="${GIT_COMMIT}" LABEL org.opencontainers.image.vendor="Help-Me Team" -# Instalar dependências do sistema +# hadolint ignore=DL3018 +# DL3018: Pinar versões de pacotes Alpine quebra builds quando o repositório +# atualiza por patches de segurança. A imagem base node:20-alpine já é +# atualizada regularmente com correções de segurança. RUN apk add --no-cache \ dumb-init \ openssl \ - curl \ - && rm -rf /var/cache/apk/* + curl # Habilitar pnpm via corepack no stage de produção RUN corepack enable && corepack prepare pnpm@latest --activate @@ -122,4 +124,4 @@ HEALTHCHECK --interval=30s --timeout=10s --start-period=40s --retries=3 \ ENTRYPOINT ["dumb-init", "--"] # Comando para iniciar a aplicação -CMD ["node", "dist/server.cjs"] +CMD ["node", "dist/server.cjs"] \ No newline at end of file From feea97c329164ac0e7359ec1dfb1a31f75c476fe Mon Sep 17 00:00:00 2001 From: "Diego Ferreira L.G.Oliveira" Date: Sun, 8 Mar 2026 20:15:27 -0300 Subject: [PATCH 3/5] hotfix: correcao no arquivo de ci --- .github/workflows/homologacao.yml | 64 ++++++++++++------------------- 1 file changed, 24 insertions(+), 40 deletions(-) diff --git a/.github/workflows/homologacao.yml b/.github/workflows/homologacao.yml index ec2c65b..f9e2f54 100644 --- a/.github/workflows/homologacao.yml +++ b/.github/workflows/homologacao.yml @@ -404,7 +404,6 @@ jobs: SMTP_PASS_TESTE=3263bb9ce3c328 SMTP_FROM_TESTE=test@helpme.com - # Aliases lidos diretamente pelo código SMTP_HOST=sandbox.smtp.mailtrap.io SMTP_PORT=2525 SMTP_USER=e0f224ffc3cf93 @@ -668,24 +667,24 @@ jobs: | Gate | Status | Detalhes | |------|--------|----------| - | **Build** | ? Passed | TypeScript compilation successful | - | **Unit Tests** | ? Passed | All unit tests passed | - | **E2E Tests** | ? Passed | Integration tests validated | - | **Security Scan** | ? Passed | Trivy vulnerability scan completed | - | **Lint** | ? Passed | Hadolint Docker analysis | + | **Build** | ✅ Passed | TypeScript compilation successful | + | **Unit Tests** | ✅ Passed | All unit tests passed | + | **E2E Tests** | ✅ Passed | Integration tests validated | + | **Security Scan** | ✅ Passed | Trivy vulnerability scan completed | + | **Lint** | ✅ Passed | Hadolint Docker analysis | --- ## Test Results ### Testes Unitários - - [X] Executados com sucesso - - [X] Coverage disponível nos artifacts + - ✅ Executados com sucesso + - ✅ Coverage disponível nos artifacts ### Testes E2E - - [X] Todos os cenários validados - - [X] Infraestrutura Docker provisionada automaticamente - - [X] Testes gerenciam seus próprios dados (sem overhead de seed) + - ✅ Todos os cenários validados + - ✅ Infraestrutura Docker provisionada automaticamente + - ✅ Testes gerenciam seus próprios dados (sem overhead de seed) --- @@ -752,11 +751,11 @@ jobs: BRANCH_TYPE="${{ inputs.branch-type }}" case "$BRANCH_TYPE" in - develop) BRANCH_ICON="??" ;; - feature) BRANCH_ICON="??" ;; - release) BRANCH_ICON="??" ;; - hotfix) BRANCH_ICON="??" ;; - *) BRANCH_ICON="?" ;; + develop) BRANCH_ICON=" " ;; + feature) BRANCH_ICON=" " ;; + release) BRANCH_ICON=" " ;; + hotfix) BRANCH_ICON=" " ;; + *) BRANCH_ICON=" " ;; esac PREVIOUS_TAG=$(git describe --tags --abbrev=0 HEAD^ 2>/dev/null || echo "") @@ -857,11 +856,11 @@ jobs: ## Quality Metrics - - [X] **Build**: Passed - - [X] **Unit Tests**: All tests passed - - [X] **E2E Tests**: Integration validated - - [X] **Security Scan**: No critical vulnerabilities - - [X] **Docker Build**: Multi-stage optimized + - ✅ **Build**: Passed + - ✅ **Unit Tests**: All tests passed + - ✅ **E2E Tests**: Integration validated + - ✅ **Security Scan**: No critical vulnerabilities + - ✅ **Docker Build**: Multi-stage optimized --- @@ -921,15 +920,6 @@ jobs: --- -
- - **Made with by the Help-Me Team** - - [![Docker Pulls](https://img.shields.io/docker/pulls/${{ secrets.DOCKERHUB_USERNAME }}/helpme-api?style=flat-square)](https://hub.docker.com/r/${{ secrets.DOCKERHUB_USERNAME }}/helpme-api) - [![GitHub Stars](https://img.shields.io/github/stars/${{ github.repository }}?style=flat-square)](https://github.com/${{ github.repository }}/stargazers) - [![License](https://img.shields.io/github/license/${{ github.repository }}?style=flat-square)](https://github.com/${{ github.repository }}/blob/main/LICENSE) - -
NOTES_END sed -i "s/VERSION_PLACEHOLDER/$VERSION/g" notes.md @@ -938,8 +928,10 @@ jobs: sed -i "s/BRANCH_ICON_PLACEHOLDER/$BRANCH_ICON/g" notes.md echo "Notes geradas!" - - - name: Create GitHub + + # FIX: steps unificados em um só — evita race condition entre Create e Upload Assets + # FIX: generate_notes removido — não é um input válido para softprops/action-gh-release@v2 + - name: Create GitHub Release uses: softprops/action-gh-release@v2 with: tag_name: v${{ needs.build.outputs.version }} @@ -947,15 +939,7 @@ jobs: body_path: notes.md draft: false prerelease: false - generate_notes: false make_latest: true - env: - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - - - name: Upload Assets - uses: softprops/action-gh-release@v2 - with: - tag_name: v${{ needs.build.outputs.version }} files: | ./api/docker-compose.yaml ./api/package.json From 29efb97110e88f20fd89df901aecbc30594a1358 Mon Sep 17 00:00:00 2001 From: "Diego Ferreira L.G.Oliveira" Date: Sun, 8 Mar 2026 20:42:24 -0300 Subject: [PATCH 4/5] hotfix: correcao no arquivo de ci --- .github/workflows/homologacao.yml | 364 ++++++++++-------------------- 1 file changed, 123 insertions(+), 241 deletions(-) diff --git a/.github/workflows/homologacao.yml b/.github/workflows/homologacao.yml index f9e2f54..f432775 100644 --- a/.github/workflows/homologacao.yml +++ b/.github/workflows/homologacao.yml @@ -34,9 +34,9 @@ on: - major default: none +# FIX: removido security-events: write — não há mais upload SARIF permissions: contents: write - security-events: write jobs: ambiente-para-homologacao: @@ -46,13 +46,13 @@ jobs: versao: [20, 22] plataforma: ["ubuntu"] runs-on: ${{ matrix.plataforma }}-latest - + steps: - name: Instalação do Node.js uses: actions/setup-node@v4 with: node-version: ${{ matrix.versao }} - + - name: Exibição da versão e da plataforma run: | node --version @@ -65,21 +65,21 @@ jobs: environment: homologacao outputs: version: ${{ steps.version.outputs.version }} - + steps: - name: Checkout do código uses: actions/checkout@v4 with: fetch-depth: 0 - + - name: Setup Node.js uses: actions/setup-node@v4 with: node-version: '22' - + - name: Ativar pnpm run: corepack enable - + - name: Cache de dependências uses: actions/cache@v4 with: @@ -89,16 +89,16 @@ jobs: key: ${{ runner.os }}-pnpm-${{ hashFiles('**/pnpm-lock.yaml') }} restore-keys: | ${{ runner.os }}-pnpm- - + - name: Limpar instalação anterior working-directory: ./api run: | rm -rf node_modules .turbo dist - + - name: Instalar dependências working-directory: ./api run: pnpm install --frozen-lockfile - + - name: Determinar versão id: version working-directory: ./api @@ -106,12 +106,12 @@ jobs: bump_version() { local version=$1 local bump_type=$2 - + IFS='.' read -ra VERSION_PARTS <<< "$version" MAJOR="${VERSION_PARTS[0]}" MINOR="${VERSION_PARTS[1]}" PATCH="${VERSION_PARTS[2]}" - + case $bump_type in major) MAJOR=$((MAJOR + 1)) @@ -126,13 +126,13 @@ jobs: PATCH=$((PATCH + 1)) ;; esac - + echo "$MAJOR.$MINOR.$PATCH" } - + PACKAGE_VERSION=$(node -p "require('./package.json').version") echo "Versão do package.json: $PACKAGE_VERSION" - + if [ -n "${{ inputs.version-override }}" ]; then VERSION="${{ inputs.version-override }}" echo "Usando versão manual: $VERSION" @@ -143,17 +143,17 @@ jobs: VERSION="$PACKAGE_VERSION" echo "Usando versão do package.json: $VERSION" fi - + if ! [[ "$VERSION" =~ ^[0-9]+\.[0-9]+\.[0-9]+$ ]]; then echo "Versão inválida: $VERSION" echo "Formato esperado: X.Y.Z (ex: 1.0.0, 2.3.4)" exit 1 fi - + echo "Versão final: $VERSION" echo "version=$VERSION" >> $GITHUB_OUTPUT echo "VERSION=$VERSION" >> $GITHUB_ENV - + - name: Atualizar package.json if: ${{ inputs.version-override != '' || inputs.bump-type != 'none' }} working-directory: ./api @@ -164,13 +164,13 @@ jobs: git config user.email "actions@github.com" git add package.json git commit -m "chore: bump version to ${{ steps.version.outputs.version }} [skip ci]" || echo "Nenhuma alteração" - + - name: Gerar Prisma Client (sem banco) working-directory: ./api env: DATABASE_URL: postgresql://user:pass@localhost:5432/db?schema=public run: pnpm run generate - + - name: Verificar TypeScript continue-on-error: true working-directory: ./api @@ -179,18 +179,18 @@ jobs: pnpm tsc --version echo "Executando type check:" pnpm tsc --noEmit --pretty - + - name: Build do projeto working-directory: ./api run: pnpm build - + - name: Verificar build gerado working-directory: ./api run: | echo "Conteúdo do diretório dist:" ls -lah dist/ test -f dist/server.js && echo "[SUCESSO] server.js encontrado" || (echo "[ERROR] server.js NÃO encontrado" && exit 1) - + - name: Upload do build uses: actions/upload-artifact@v4 with: @@ -205,19 +205,19 @@ jobs: needs: [build] runs-on: ubuntu-latest environment: homologacao - + steps: - name: Checkout do código uses: actions/checkout@v4 - + - name: Setup Node.js uses: actions/setup-node@v4 with: node-version: '22' - + - name: Ativar pnpm run: corepack enable - + - name: Cache de dependências uses: actions/cache@v4 with: @@ -227,21 +227,21 @@ jobs: key: ${{ runner.os }}-pnpm-${{ hashFiles('**/pnpm-lock.yaml') }} restore-keys: | ${{ runner.os }}-pnpm- - + - name: Instalar dependências working-directory: ./api run: pnpm install --frozen-lockfile - + - name: Gerar Prisma Client (sem banco) working-directory: ./api env: DATABASE_URL: postgresql://user:pass@localhost:5432/db?schema=public run: pnpm run generate - + - name: Executar testes unitários working-directory: ./api run: pnpm run test:unit - + - name: Upload de coverage if: always() uses: actions/upload-artifact@v4 @@ -257,19 +257,19 @@ jobs: runs-on: ubuntu-latest environment: homologacao timeout-minutes: 30 - + steps: - name: Checkout do código uses: actions/checkout@v4 - + - name: Setup Node.js uses: actions/setup-node@v4 with: node-version: '22' - + - name: Ativar pnpm run: corepack enable - + - name: Cache de dependências uses: actions/cache@v4 with: @@ -279,7 +279,7 @@ jobs: key: ${{ runner.os }}-pnpm-${{ hashFiles('**/pnpm-lock.yaml') }} restore-keys: | ${{ runner.os }}-pnpm- - + - name: Instalar dependências working-directory: ./api run: pnpm install --frozen-lockfile @@ -336,10 +336,7 @@ jobs: working-directory: ./api run: | cat > .env.test << 'EOF' - # ==================== AMBIENTE DE TESTE ==================== NODE_ENV=test - - # ==================== BANCO DE DADOS (PRINCIPAL) ==================== DB_USER=teste DB_PASSWORD=senha_teste DB_NAME=helpme_database_teste @@ -350,22 +347,16 @@ jobs: DB_EFFECTIVE_CACHE_SIZE=512MB POSTGRESQL_WORK_MEM=8MB DATABASE_URL=postgresql://teste:senha_teste@localhost:5433/helpme_database_teste?schema=public&connection_limit=10&pool_timeout=60&connect_timeout=30&statement_timeout=60000 - - # ==================== BANCO DE DADOS (HISTÓRICO) ==================== MONGO_INITDB_ROOT_USERNAME_TESTE=teste MONGO_INITDB_ROOT_PASSWORD_TESTE=senha MONGO_INITDB_DATABASE_TESTE=helpme_mongo_teste MONGO_HOST_TESTE=localhost MONGO_PORT_TESTE=27018 MONGO_INITDB_URI_TESTE=mongodb://teste:senha@localhost:27018/helpme_mongo_teste?authSource=admin - - # ==================== JWT ==================== JWT_SECRET=chavesecretadeteste123 JWT_REFRESH_SECRET=refreshsegredodeteste456 JWT_EXPIRATION=8h JWT_REFRESH_EXPIRATION=7d - - # ==================== REDIS ==================== REDIS_PASSWORD_TESTE= REDIS_HOST_TESTE=localhost REDIS_PORT_TESTE=6380 @@ -374,19 +365,13 @@ jobs: REDIS_HOST=localhost REDIS_PORT=6380 REDIS_PASSWORD= - - # ==================== KAFKA ==================== KAFKA_HOST_TESTE=localhost KAFKA_PORT_TESTE=9095 KAFKA_BROKER_URL_TESTE=localhost:9095 KAFKAJS_NO_PARTITIONER_WARNING_TESTE=1 - - # ==================== ZOOKEEPER ==================== ZOOKEEPER_HOST_TESTE=localhost ZOOKEEPER_CLIENT_PORT_TESTE=2182 ZOOKEEPER_TICK_TIME_TESTE=2000 - - # ==================== INFLUXDB ==================== INFLUX_USERNAME_TESTE=teste INFLUX_PASSWORD_TESTE=senha_teste INFLUX_ORG_TESTE=org_teste @@ -396,40 +381,29 @@ jobs: INFLUX_HOST_TESTE=localhost INFLUX_PORT_TESTE=8087 INFLUX_URL_TESTE=http://localhost:8087 - - # ==================== EMAIL SMTP ==================== SMTP_HOST_TESTE=sandbox.smtp.mailtrap.io SMTP_PORT_TESTE=2525 SMTP_USER_TESTE=e0f224ffc3cf93 SMTP_PASS_TESTE=3263bb9ce3c328 SMTP_FROM_TESTE=test@helpme.com - SMTP_HOST=sandbox.smtp.mailtrap.io SMTP_PORT=2525 SMTP_USER=e0f224ffc3cf93 SMTP_PASS=3263bb9ce3c328 SMTP_FROM=test@helpme.com - - # ==================== URL BASE ==================== API_BASE_URL_TESTE=http://localhost:3333 API_HOST_TESTE=0.0.0.0 API_PORT_TESTE=3333 - - # ==================== DADOS PARA TESTES ==================== ADMIN_EMAIL_TESTE=admin@helpme.com ADMIN_PASSWORD_TESTE=Admin123! USER_EMAIL_TESTE=user@helpme.com USER_PASSWORD_TESTE=User123! TECNICO_EMAIL_TESTE=tecnico@helpme.com TECNICO_PASSWORD_TESTE=Tecnico123! - - # ==================== CONFIGURAÇÕES DE TESTE ==================== TEST_TIMEOUT=30000 TEST_CONCURRENCY=1 SKIP_SEED=false SKIP_MIGRATIONS=false - - # ==================== LOGGING ==================== LOG_LEVEL=debug LOG_DIR=./logs LOG_FILE=test.log @@ -459,7 +433,7 @@ jobs: path: ./api/coverage/ retention-days: 7 continue-on-error: true - + - name: Logs dos serviços (em caso de falha) working-directory: ./api if: failure() @@ -486,13 +460,13 @@ jobs: outputs: version: ${{ needs.build.outputs.version }} tags: ${{ steps.meta.outputs.tags }} - + steps: - name: Checkout do código uses: actions/checkout@v4 with: fetch-depth: 0 - + - name: Extrair metadados Docker id: meta uses: docker/metadata-action@v5 @@ -506,22 +480,22 @@ jobs: type=raw,value=build-${{ github.run_number }} flavor: | latest=auto - + - name: Análise do Dockerfile com Hadolint uses: hadolint/hadolint-action@v3.1.0 with: dockerfile: ./api/Dockerfile continue-on-error: true - + - name: Login no Docker Hub uses: docker/login-action@v3 with: username: ${{ secrets.DOCKERHUB_USERNAME }} password: ${{ secrets.DOCKERHUB_TOKEN }} - + - name: Setup Docker Buildx uses: docker/setup-buildx-action@v3 - + - name: Build e Push da imagem uses: docker/build-push-action@v6 with: @@ -536,25 +510,26 @@ jobs: VERSION=${{ needs.build.outputs.version }} BUILD_DATE=${{ fromJSON(steps.meta.outputs.json).labels['org.opencontainers.image.created'] }} GIT_COMMIT=${{ github.sha }} - + - name: Scan de vulnerabilidades com Trivy uses: aquasecurity/trivy-action@0.32.0 with: scan-type: 'image' image-ref: ${{ secrets.DOCKERHUB_USERNAME }}/helpme-api:${{ needs.build.outputs.version }} - format: sarif - output: trivy-results.sarif - severity: "UNKNOWN,LOW,MEDIUM,HIGH,CRITICAL" + format: json + output: trivy-results.json + severity: "HIGH,CRITICAL" continue-on-error: true - + - name: Upload resultados do Trivy - uses: github/codeql-action/upload-sarif@v3 + uses: actions/upload-artifact@v4 if: always() with: - category: trivy-docker-scan - sarif_file: trivy-results.sarif + name: trivy-results + path: trivy-results.json + retention-days: 30 continue-on-error: true - + - name: Determinar badge e label do tipo de branch id: branch-meta run: | @@ -585,10 +560,7 @@ jobs: - name: Resumo run: | BRANCH_TYPE="${{ inputs.branch-type }}" - BRANCH_ICON="${{ steps.branch-meta.outputs.branch_icon }}" BRANCH_DESC="${{ steps.branch-meta.outputs.branch_desc }}" - BADGE_COLOR="${{ steps.branch-meta.outputs.badge_color }}" - BADGE_LABEL="${{ steps.branch-meta.outputs.badge_label }}" cat >> $GITHUB_STEP_SUMMARY << END_SUMMARY # Versão ${{ needs.build.outputs.version }} @@ -630,39 +602,6 @@ jobs: --- - ## Docker Images - - ### Imagens Publicadas - - ```bash - # Versão específica (recomendado para produção) - docker pull ${{ secrets.DOCKERHUB_USERNAME }}/helpme-api:${{ needs.build.outputs.version }} - - # Latest (desenvolvimento) - docker pull ${{ secrets.DOCKERHUB_USERNAME }}/helpme-api:latest - - # Homologação - docker pull ${{ secrets.DOCKERHUB_USERNAME }}/helpme-api:homolog - - # SHA específico - docker pull ${{ secrets.DOCKERHUB_USERNAME }}/helpme-api:sha-${GITHUB_SHA:0:7} - - # Build number - docker pull ${{ secrets.DOCKERHUB_USERNAME }}/helpme-api:build-${{ github.run_number }} - ``` - - ### Tags Disponíveis - - | Tag | Uso Recomendado | Estabilidade | - |-----|----------------|--------------| - | `${{ needs.build.outputs.version }}` | Produção | Stable | - | `latest` | Desenvolvimento | Rolling | - | `homolog` | Homologação | Testing | - | `sha-${GITHUB_SHA:0:7}` | Debug | Immutable | - | `build-${{ github.run_number }}` | Rastreamento | Immutable | - - --- - ## Quality Gates | Gate | Status | Detalhes | @@ -684,52 +623,13 @@ jobs: ### Testes E2E - ✅ Todos os cenários validados - ✅ Infraestrutura Docker provisionada automaticamente - - ✅ Testes gerenciam seus próprios dados (sem overhead de seed) --- ## Security & Compliance - - Trivy vulnerability scan: **Completed** - - SARIF report uploaded to GitHub Security + - Trivy vulnerability scan: **Completed** (results in artifacts) - Docker image signed and verified - - No critical vulnerabilities detected - - --- - - ## Deployment - - ### Docker Compose - - ```yaml - version: '3.8' - services: - api: - image: ${{ secrets.DOCKERHUB_USERNAME }}/helpme-api:${{ needs.build.outputs.version }} - ports: - - "3000:3000" - environment: - NODE_ENV: production - DATABASE_URL: postgresql://... - MONGO_INITDB_URI: mongodb://... - REDIS_URL: redis://... - ``` - - ### Kubernetes - - ```bash - kubectl set image deployment/helpme-api \ - api=${{ secrets.DOCKERHUB_USERNAME }}/helpme-api:${{ needs.build.outputs.version }} - ``` - - --- - - ## Resources - - - [Documentação da API](https://github.com/${{ github.repository }}) - - [Docker Hub](https://hub.docker.com/r/${{ secrets.DOCKERHUB_USERNAME }}/helpme-api) - - [Swagger/OpenAPI](http://localhost:3000/api-docs) - - [Grafana Dashboards](https://github.com/${{ github.repository }}/tree/main/api/painel-analitico/grafana/dashboards) --- @@ -738,18 +638,25 @@ jobs: 1. **Produção**: Deploy da imagem `${{ needs.build.outputs.version }}` no ambiente de produção 2. **Monitoramento**: Verificar métricas no Grafana após deploy 3. **Rollback**: Manter imagem anterior disponível para rollback rápido - 4. **Documentação**: Atualizar changelog com as mudanças desta versão - - --- END_SUMMARY - + + # FIX: tag criada explicitamente antes da release para evitar falha quando + # a tag ainda não existe no remote no momento da criação da release + - name: Criar tag Git + run: | + git config user.name "GitHub Actions" + git config user.email "actions@github.com" + git tag -fa "v${{ needs.build.outputs.version }}" \ + -m "Release v${{ needs.build.outputs.version }}" || true + git push origin "v${{ needs.build.outputs.version }}" --force || true + - name: Gerar Notes id: notes run: | VERSION="${{ needs.build.outputs.version }}" BRANCH_TYPE="${{ inputs.branch-type }}" - + case "$BRANCH_TYPE" in develop) BRANCH_ICON=" " ;; feature) BRANCH_ICON=" " ;; @@ -759,17 +666,18 @@ jobs: esac PREVIOUS_TAG=$(git describe --tags --abbrev=0 HEAD^ 2>/dev/null || echo "") - + if [ -n "$PREVIOUS_TAG" ]; then COMMITS=$(git log ${PREVIOUS_TAG}..HEAD --pretty=format:"- %s ([%h](https://github.com/${{ github.repository }}/commit/%H))" --no-merges) else COMMITS=$(git log --pretty=format:"- %s ([%h](https://github.com/${{ github.repository }}/commit/%H))" --no-merges -n 20) fi - cat > notes.md << 'NOTES_END' - ## Help-Me API vVERSION_PLACEHOLDER + # FIX: heredoc sem indentação para evitar espaços no início das linhas do markdown + cat > notes.md << NOTES_END + ## Help-Me API v${VERSION} - Today, we are excited to share the **vVERSION_PLACEHOLDER** stable release + Today, we are excited to share the **v${VERSION}** stable release. **Star this repo** for notifications about new releases, bug fixes & features! @@ -779,8 +687,8 @@ jobs: | Campo | Valor | |-------|-------| - | **Tipo de Branch** | BRANCH_ICON_PLACEHOLDER `BRANCH_TYPE_PLACEHOLDER` | - | **Branch Origem** | `${{ github.ref_name }}` | + | **Tipo de Branch** | ${BRANCH_ICON} \`${BRANCH_TYPE}\` | + | **Branch Origem** | \`${{ github.ref_name }}\` | --- @@ -788,25 +696,24 @@ jobs: ### Docker (Recommended) - ```bash - docker pull ${{ secrets.DOCKERHUB_USERNAME }}/helpme-api:VERSION_PLACEHOLDER + \`\`\`bash + docker pull ${{ secrets.DOCKERHUB_USERNAME }}/helpme-api:${VERSION} - docker run -d -p 3000:3000 \ - -e DATABASE_URL="postgresql://user:pass@localhost:5432/helpme" \ - -e MONGO_INITDB_URI="mongodb://user:pass@localhost:27017/helpme-mongo" \ - -e REDIS_URL="redis://localhost:6379" \ - -e JWT_SECRET="your-secret-here" \ - -e JWT_REFRESH_SECRET="your-refresh-secret-here" \ - ${{ secrets.DOCKERHUB_USERNAME }}/helpme-api:VERSION_PLACEHOLDER - ``` + docker run -d -p 3000:3000 \\ + -e DATABASE_URL="postgresql://user:pass@localhost:5432/helpme" \\ + -e MONGO_INITDB_URI="mongodb://user:pass@localhost:27017/helpme-mongo" \\ + -e REDIS_URL="redis://localhost:6379" \\ + -e JWT_SECRET="your-secret-here" \\ + -e JWT_REFRESH_SECRET="your-refresh-secret-here" \\ + ${{ secrets.DOCKERHUB_USERNAME }}/helpme-api:${VERSION} + \`\`\` ### Docker Compose - ```yaml - version: '3.8' + \`\`\`yaml services: api: - image: ${{ secrets.DOCKERHUB_USERNAME }}/helpme-api:VERSION_PLACEHOLDER + image: ${{ secrets.DOCKERHUB_USERNAME }}/helpme-api:${VERSION} ports: - "3000:3000" environment: @@ -817,26 +724,13 @@ jobs: KAFKA_BROKER_URL: kafka:9093 JWT_SECRET: your-secret-here JWT_REFRESH_SECRET: your-refresh-secret-here - ``` - - ### Kubernetes - - ```bash - kubectl set image deployment/helpme-api \ - api=${{ secrets.DOCKERHUB_USERNAME }}/helpme-api:VERSION_PLACEHOLDER - ``` + \`\`\` --- ## What's New - NOTES_END - - echo "" >> notes.md - echo "$COMMITS" >> notes.md - echo "" >> notes.md - - cat >> notes.md << 'NOTES_END' + ${COMMITS} --- @@ -844,13 +738,13 @@ jobs: | Attribute | Value | |-----------|-------| - | **Version** | `VERSION_PLACEHOLDER` | + | **Version** | \`${VERSION}\` | | **Build** | #${{ github.run_number }} | - | **Commit** | [`COMMIT_PLACEHOLDER`](${{ github.server_url }}/${{ github.repository }}/commit/${{ github.sha }}) | + | **Commit** | [\`${GITHUB_SHA:0:7}\`](${{ github.server_url }}/${{ github.repository }}/commit/${{ github.sha }}) | | **Node.js** | 22.x | | **TypeScript** | 5.9.x | | **Prisma** | 7.x | - | **Docker Base** | node:22-alpine | + | **Docker Base** | node:20-alpine | --- @@ -866,25 +760,18 @@ jobs: ## Docker Images - ### Available Tags - | Tag | Purpose | Stability | |-----|---------|-----------| - | `VERSION_PLACEHOLDER` | Production | Stable | - | `latest` | Development | Rolling | - | `homolog` | Staging | Testing | - | `sha-COMMIT_PLACEHOLDER` | Debug | Immutable | - - ```bash - # Production (recommended) - docker pull ${{ secrets.DOCKERHUB_USERNAME }}/helpme-api:VERSION_PLACEHOLDER + | \`${VERSION}\` | Production | Stable | + | \`latest\` | Development | Rolling | + | \`homolog\` | Staging | Testing | + | \`sha-${GITHUB_SHA:0:7}\` | Debug | Immutable | - # Latest + \`\`\`bash + docker pull ${{ secrets.DOCKERHUB_USERNAME }}/helpme-api:${VERSION} docker pull ${{ secrets.DOCKERHUB_USERNAME }}/helpme-api:latest - - # Specific commit - docker pull ${{ secrets.DOCKERHUB_USERNAME }}/helpme-api:sha-COMMIT_PLACEHOLDER - ``` + docker pull ${{ secrets.DOCKERHUB_USERNAME }}/helpme-api:sha-${GITHUB_SHA:0:7} + \`\`\` --- @@ -894,7 +781,6 @@ jobs: - [Swagger/OpenAPI](http://localhost:3000/api-docs) - [Docker Hub](https://hub.docker.com/r/${{ secrets.DOCKERHUB_USERNAME }}/helpme-api) - [Grafana Dashboards](https://github.com/${{ github.repository }}/tree/main/api/painel-analitico/grafana/dashboards) - - [Kubernetes Manifests](https://github.com/${{ github.repository }}/tree/main/api/k8s) --- @@ -910,38 +796,34 @@ jobs: NOTES_END - if [ -n "$PREVIOUS_TAG" ]; then - echo "**[$PREVIOUS_TAG...v$VERSION](${{ github.server_url }}/${{ github.repository }}/compare/$PREVIOUS_TAG...v$VERSION)**" >> notes.md - else - echo "**[Initial Release](https://github.com/${{ github.repository }}/commits/v$VERSION)**" >> notes.md - fi + if [ -n "$PREVIOUS_TAG" ]; then + echo "**[$PREVIOUS_TAG...v$VERSION](${{ github.server_url }}/${{ github.repository }}/compare/$PREVIOUS_TAG...v$VERSION)**" >> notes.md + else + echo "**[Initial Release](https://github.com/${{ github.repository }}/commits/v$VERSION)**" >> notes.md + fi - cat >> notes.md << 'NOTES_END' + cat >> notes.md << 'NOTES_END' --- NOTES_END - sed -i "s/VERSION_PLACEHOLDER/$VERSION/g" notes.md - sed -i "s/COMMIT_PLACEHOLDER/${GITHUB_SHA:0:7}/g" notes.md - sed -i "s/BRANCH_TYPE_PLACEHOLDER/$BRANCH_TYPE/g" notes.md - sed -i "s/BRANCH_ICON_PLACEHOLDER/$BRANCH_ICON/g" notes.md - - echo "Notes geradas!" - - # FIX: steps unificados em um só — evita race condition entre Create e Upload Assets - # FIX: generate_notes removido — não é um input válido para softprops/action-gh-release@v2 - - name: Create GitHub Release - uses: softprops/action-gh-release@v2 - with: - tag_name: v${{ needs.build.outputs.version }} - name: v${{ needs.build.outputs.version }} - body_path: notes.md - draft: false - prerelease: false - make_latest: true - files: | - ./api/docker-compose.yaml - ./api/package.json - env: - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} \ No newline at end of file + echo "Notes geradas com sucesso!" + + # FIX: steps de release unificados — evita race condition + # FIX: fail_on_unmatched_files: false — tolerante a re-runs na mesma tag + - name: Create GitHub Release + uses: softprops/action-gh-release@v2 + with: + tag_name: v${{ needs.build.outputs.version }} + name: v${{ needs.build.outputs.version }} + body_path: notes.md + draft: false + prerelease: false + make_latest: true + fail_on_unmatched_files: false + files: | + ./api/docker-compose.yaml + ./api/package.json + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} \ No newline at end of file From 2faf0a2dd2a3c8ced16f2866a4b6f53cb0d1e9b5 Mon Sep 17 00:00:00 2001 From: "Diego Ferreira L.G.Oliveira" Date: Sun, 8 Mar 2026 21:04:59 -0300 Subject: [PATCH 5/5] hotfix: correcao no arquivo de ci --- .github/workflows/homologacao.yml | 303 ++++++++++++++---------------- 1 file changed, 136 insertions(+), 167 deletions(-) diff --git a/.github/workflows/homologacao.yml b/.github/workflows/homologacao.yml index f432775..7cf369d 100644 --- a/.github/workflows/homologacao.yml +++ b/.github/workflows/homologacao.yml @@ -653,177 +653,146 @@ jobs: - name: Gerar Notes id: notes + env: + VERSION: ${{ needs.build.outputs.version }} + BRANCH_TYPE: ${{ inputs.branch-type }} + REPO: ${{ github.repository }} + RUN_NUMBER: ${{ github.run_number }} + SHA: ${{ github.sha }} + SERVER_URL: ${{ github.server_url }} + REF_NAME: ${{ github.ref_name }} + DOCKERHUB_USERNAME: ${{ secrets.DOCKERHUB_USERNAME }} run: | - VERSION="${{ needs.build.outputs.version }}" - BRANCH_TYPE="${{ inputs.branch-type }}" - - case "$BRANCH_TYPE" in - develop) BRANCH_ICON=" " ;; - feature) BRANCH_ICON=" " ;; - release) BRANCH_ICON=" " ;; - hotfix) BRANCH_ICON=" " ;; - *) BRANCH_ICON=" " ;; - esac - PREVIOUS_TAG=$(git describe --tags --abbrev=0 HEAD^ 2>/dev/null || echo "") if [ -n "$PREVIOUS_TAG" ]; then - COMMITS=$(git log ${PREVIOUS_TAG}..HEAD --pretty=format:"- %s ([%h](https://github.com/${{ github.repository }}/commit/%H))" --no-merges) + COMMITS=$(git log ${PREVIOUS_TAG}..HEAD \ + --pretty=format:"- %s ([%h](${SERVER_URL}/${REPO}/commit/%H))" \ + --no-merges) else - COMMITS=$(git log --pretty=format:"- %s ([%h](https://github.com/${{ github.repository }}/commit/%H))" --no-merges -n 20) + COMMITS=$(git log \ + --pretty=format:"- %s ([%h](${SERVER_URL}/${REPO}/commit/%H))" \ + --no-merges -n 20) fi - # FIX: heredoc sem indentação para evitar espaços no início das linhas do markdown - cat > notes.md << NOTES_END - ## Help-Me API v${VERSION} - - Today, we are excited to share the **v${VERSION}** stable release. - - **Star this repo** for notifications about new releases, bug fixes & features! - - --- - - ## Branch Information - - | Campo | Valor | - |-------|-------| - | **Tipo de Branch** | ${BRANCH_ICON} \`${BRANCH_TYPE}\` | - | **Branch Origem** | \`${{ github.ref_name }}\` | - - --- - - ## Installation - - ### Docker (Recommended) - - \`\`\`bash - docker pull ${{ secrets.DOCKERHUB_USERNAME }}/helpme-api:${VERSION} - - docker run -d -p 3000:3000 \\ - -e DATABASE_URL="postgresql://user:pass@localhost:5432/helpme" \\ - -e MONGO_INITDB_URI="mongodb://user:pass@localhost:27017/helpme-mongo" \\ - -e REDIS_URL="redis://localhost:6379" \\ - -e JWT_SECRET="your-secret-here" \\ - -e JWT_REFRESH_SECRET="your-refresh-secret-here" \\ - ${{ secrets.DOCKERHUB_USERNAME }}/helpme-api:${VERSION} - \`\`\` - - ### Docker Compose - - \`\`\`yaml - services: - api: - image: ${{ secrets.DOCKERHUB_USERNAME }}/helpme-api:${VERSION} - ports: - - "3000:3000" - environment: - NODE_ENV: production - DATABASE_URL: postgresql://user:pass@postgres:5432/helpme - MONGO_INITDB_URI: mongodb://user:pass@mongodb:27017/helpme-mongo - REDIS_URL: redis://redis:6379 - KAFKA_BROKER_URL: kafka:9093 - JWT_SECRET: your-secret-here - JWT_REFRESH_SECRET: your-refresh-secret-here - \`\`\` - - --- - - ## What's New - - ${COMMITS} - - --- - - ## Technical Details - - | Attribute | Value | - |-----------|-------| - | **Version** | \`${VERSION}\` | - | **Build** | #${{ github.run_number }} | - | **Commit** | [\`${GITHUB_SHA:0:7}\`](${{ github.server_url }}/${{ github.repository }}/commit/${{ github.sha }}) | - | **Node.js** | 22.x | - | **TypeScript** | 5.9.x | - | **Prisma** | 7.x | - | **Docker Base** | node:20-alpine | - - --- - - ## Quality Metrics - - - ✅ **Build**: Passed - - ✅ **Unit Tests**: All tests passed - - ✅ **E2E Tests**: Integration validated - - ✅ **Security Scan**: No critical vulnerabilities - - ✅ **Docker Build**: Multi-stage optimized - - --- - - ## Docker Images - - | Tag | Purpose | Stability | - |-----|---------|-----------| - | \`${VERSION}\` | Production | Stable | - | \`latest\` | Development | Rolling | - | \`homolog\` | Staging | Testing | - | \`sha-${GITHUB_SHA:0:7}\` | Debug | Immutable | - - \`\`\`bash - docker pull ${{ secrets.DOCKERHUB_USERNAME }}/helpme-api:${VERSION} - docker pull ${{ secrets.DOCKERHUB_USERNAME }}/helpme-api:latest - docker pull ${{ secrets.DOCKERHUB_USERNAME }}/helpme-api:sha-${GITHUB_SHA:0:7} - \`\`\` - - --- - - ## Documentation - - - [API Documentation](https://github.com/${{ github.repository }}) - - [Swagger/OpenAPI](http://localhost:3000/api-docs) - - [Docker Hub](https://hub.docker.com/r/${{ secrets.DOCKERHUB_USERNAME }}/helpme-api) - - [Grafana Dashboards](https://github.com/${{ github.repository }}/tree/main/api/painel-analitico/grafana/dashboards) - - --- - - ## Support - - - [Report a Bug](https://github.com/${{ github.repository }}/issues/new?labels=bug) - - [Request a Feature](https://github.com/${{ github.repository }}/issues/new?labels=enhancement) - - [Discussions](https://github.com/${{ github.repository }}/discussions) - - --- - - ## Full Changelog - - NOTES_END - - if [ -n "$PREVIOUS_TAG" ]; then - echo "**[$PREVIOUS_TAG...v$VERSION](${{ github.server_url }}/${{ github.repository }}/compare/$PREVIOUS_TAG...v$VERSION)**" >> notes.md - else - echo "**[Initial Release](https://github.com/${{ github.repository }}/commits/v$VERSION)**" >> notes.md - fi - - cat >> notes.md << 'NOTES_END' - - --- - - NOTES_END - - echo "Notes geradas com sucesso!" - - # FIX: steps de release unificados — evita race condition - # FIX: fail_on_unmatched_files: false — tolerante a re-runs na mesma tag - - name: Create GitHub Release - uses: softprops/action-gh-release@v2 - with: - tag_name: v${{ needs.build.outputs.version }} - name: v${{ needs.build.outputs.version }} - body_path: notes.md - draft: false - prerelease: false - make_latest: true - fail_on_unmatched_files: false - files: | - ./api/docker-compose.yaml - ./api/package.json - env: - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} \ No newline at end of file + SHORT_SHA="${SHA:0:7}" + + { + echo "## Help-Me API v${VERSION}" + echo "" + echo "Today, we are excited to share the **v${VERSION}** stable release." + echo "" + echo "**Star this repo** for notifications about new releases, bug fixes & features!" + echo "" + echo "---" + echo "" + echo "## Branch Information" + echo "" + echo "| Campo | Valor |" + echo "|-------|-------|" + echo "| **Tipo de Branch** | \`${BRANCH_TYPE}\` |" + echo "| **Branch Origem** | \`${REF_NAME}\` |" + echo "" + echo "---" + echo "" + echo "## Installation" + echo "" + echo "### Docker (Recommended)" + echo "" + echo '```bash' + echo "docker pull ${DOCKERHUB_USERNAME}/helpme-api:${VERSION}" + echo "" + echo "docker run -d -p 3000:3000 \\" + echo " -e DATABASE_URL=\"postgresql://user:pass@localhost:5432/helpme\" \\" + echo " -e MONGO_INITDB_URI=\"mongodb://user:pass@localhost:27017/helpme-mongo\" \\" + echo " -e REDIS_URL=\"redis://localhost:6379\" \\" + echo " -e JWT_SECRET=\"your-secret-here\" \\" + echo " -e JWT_REFRESH_SECRET=\"your-refresh-secret-here\" \\" + echo " ${DOCKERHUB_USERNAME}/helpme-api:${VERSION}" + echo '```' + echo "" + echo "### Docker Compose" + echo "" + echo '```yaml' + echo "services:" + echo " api:" + echo " image: ${DOCKERHUB_USERNAME}/helpme-api:${VERSION}" + echo " ports:" + echo " - \"3000:3000\"" + echo " environment:" + echo " NODE_ENV: production" + echo " DATABASE_URL: postgresql://user:pass@postgres:5432/helpme" + echo " MONGO_INITDB_URI: mongodb://user:pass@mongodb:27017/helpme-mongo" + echo " REDIS_URL: redis://redis:6379" + echo " KAFKA_BROKER_URL: kafka:9093" + echo " JWT_SECRET: your-secret-here" + echo " JWT_REFRESH_SECRET: your-refresh-secret-here" + echo '```' + echo "" + echo "---" + echo "" + echo "## What's New" + echo "" + echo "$COMMITS" + echo "" + echo "---" + echo "" + echo "## Technical Details" + echo "" + echo "| Attribute | Value |" + echo "|-----------|-------|" + echo "| **Version** | \`${VERSION}\` |" + echo "| **Build** | #${RUN_NUMBER} |" + echo "| **Commit** | [\`${SHORT_SHA}\`](${SERVER_URL}/${REPO}/commit/${SHA}) |" + echo "| **Node.js** | 22.x |" + echo "| **TypeScript** | 5.9.x |" + echo "| **Prisma** | 7.x |" + echo "| **Docker Base** | node:20-alpine |" + echo "" + echo "---" + echo "" + echo "## Quality Metrics" + echo "" + echo "- [x] Build: Passed" + echo "- [x] Unit Tests: All tests passed" + echo "- [x] E2E Tests: Integration validated" + echo "- [x] Security Scan: No critical vulnerabilities" + echo "- [x] Docker Build: Multi-stage optimized" + echo "" + echo "---" + echo "" + echo "## Docker Images" + echo "" + echo "| Tag | Purpose | Stability |" + echo "|-----|---------|-----------|" + echo "| \`${VERSION}\` | Production | Stable |" + echo "| \`latest\` | Development | Rolling |" + echo "| \`homolog\` | Staging | Testing |" + echo "| \`sha-${SHORT_SHA}\` | Debug | Immutable |" + echo "" + echo '```bash' + echo "docker pull ${DOCKERHUB_USERNAME}/helpme-api:${VERSION}" + echo "docker pull ${DOCKERHUB_USERNAME}/helpme-api:latest" + echo "docker pull ${DOCKERHUB_USERNAME}/helpme-api:sha-${SHORT_SHA}" + echo '```' + echo "" + echo "---" + echo "" + echo "## Support" + echo "" + echo "- [Report a Bug](${SERVER_URL}/${REPO}/issues/new?labels=bug)" + echo "- [Request a Feature](${SERVER_URL}/${REPO}/issues/new?labels=enhancement)" + echo "- [Discussions](${SERVER_URL}/${REPO}/discussions)" + echo "" + echo "---" + echo "" + echo "## Full Changelog" + echo "" + if [ -n "$PREVIOUS_TAG" ]; then + echo "**[${PREVIOUS_TAG}...v${VERSION}](${SERVER_URL}/${REPO}/compare/${PREVIOUS_TAG}...v${VERSION})**" + else + echo "**[Initial Release](${SERVER_URL}/${REPO}/commits/v${VERSION})**" + fi + } > notes.md + + echo "Notes geradas com sucesso!" \ No newline at end of file