diff --git a/.dockerignore b/.dockerignore new file mode 100644 index 0000000..d855865 --- /dev/null +++ b/.dockerignore @@ -0,0 +1,10 @@ +# Ignore all .env files in any directory or subdirectory +**/.env + +# Ignore node_modules and dist directories in any directory or subdirectory +**/node_modules +**/dist + +**/.git +**/.turbo +**/*.md \ No newline at end of file diff --git a/.env.example b/.env.example index a07966b..573ce5f 100644 --- a/.env.example +++ b/.env.example @@ -3,25 +3,23 @@ ###################################################### DATALAYER_POSTGRES_PASSWORD=testing DATALAYER_PG_USER=postgres -DATALAYER_PG_DATABASE=datalayer-postgres +DATALAYER_PG_DATABASE=datalayer-postgres-db DATALAYER_POSTGRES_EXPOSED_PORT=5434 ###################################################### ############### DATALAYER HASURA API ################# ###################################################### -#for reference on Hasura configuration, see: https://hasura.io/docs/2.0/deployment/graphql-engine-flags/reference/ DATALAYER_HASURA_EXPOSED_PORT=8082 -DATALAYER_HASURA_ENABLE_CONSOLE=true -DATALAYER_HASURA_ADMIN_SECRET=my-admin-secret -DATALAYER_HASURA_UNAUTHORIZED_ROLE=public +DATALAYER_HASURA_ENABLE_CONSOLE="true" +DATALAYER_HASURA_ADMIN_SECRET="my-admin-secret" +DATALAYER_HASURA_UNAUTHORIZED_ROLE="public" DATALAYER_HASURA_CORS_DOMAIN=* -DATALAYER_HASURA_ENABLE_TELEMETRY=false -# HASURA_GRAPHQL_METADATA_DATABASE_EXTENSIONS_SCHEMA: "chain_data_schema_1" +DATALAYER_HASURA_ENABLE_TELEMETRY="false" ## enable debugging mode. It is recommended to disable this in production -DATALAYER_HASURA_DEV_MODE=true -DATALAYER_HASURA_ADMIN_INTERNAL_ERRORS=true +DATALAYER_HASURA_DEV_MODE="true" +DATALAYER_HASURA_ADMIN_INTERNAL_ERRORS="true" ## uncomment next line to run console offline (i.e load console assets from server instead of CDN) -# HASURA_GRAPHQL_CONSOLE_ASSETS_DIR: /srv/console-assets +# DATALAYER_HASURA_CONSOLE_ASSETS_DIR="/srv/console-assets" ############################################################ ############### ENVIO POSTGRES & INDEXER ################### @@ -38,20 +36,41 @@ ENVIO_POSTGRES_EXPOSED_PORT=5433 ############################################ ############### INDEXER #################### ############################################ -ENVIO_PG_HOST=envio-postgres +ENVIO_PG_HOST=indexer-postgres-db ENVIO_PG_PORT=5432 -HASURA_GRAPHQL_ENDPOINT=http://graphql-engine:8080/v1/metadata +HASURA_GRAPHQL_ENDPOINT=http://indexer-graphql-api:8080/v1/metadata TUI_OFF=true ############################################ ############### HASURA ##################### ############################################ HASURA_EXPOSED_PORT=8080 -HASURA_GRAPHQL_DATABASE_URL=postgres://postgres:testing@envio-postgres:5432/envio-dev +HASURA_GRAPHQL_DATABASE_URL=postgres://postgres:testing@indexer-postgres-db:5432/envio-dev HASURA_GRAPHQL_ENABLE_CONSOLE=true HASURA_GRAPHQL_ENABLED_LOG_TYPES=startup, http-log, webhook-log, websocket-log, query-log HASURA_GRAPHQL_NO_OF_RETRIES=10 HASURA_GRAPHQL_ADMIN_SECRET=testing HASURA_GRAPHQL_STRINGIFY_NUMERIC_TYPES="true" PORT=8080 -HASURA_GRAPHQL_UNAUTHORIZED_ROLE=public \ No newline at end of file +HASURA_GRAPHQL_UNAUTHORIZED_ROLE=public + +############################################ +############### PROCESSING ################# +############################################ + +RPC_URLS=["https://optimism.llamarpc.com","https://rpc.ankr.com/optimism","https://optimism.gateway.tenderly.co","https://optimism.blockpi.network/v1/rpc/public","https://mainnet.optimism.io","https://opt-mainnet.g.alchemy.com/v2/demo"] +CHAIN_ID=10 + +FETCH_LIMIT=1000 +FETCH_DELAY_MS=3000 + +DATABASE_URL=postgresql://postgres:testing@datalayer-postgres-db:5432/datalayer-postgres-db +DATABASE_SCHEMA=chain_data_schema_1 + +INDEXER_GRAPHQL_URL=http://indexer-graphql-api:8080/v1/graphql +INDEXER_ADMIN_SECRET=testing + +IPFS_GATEWAYS_URL=["https://ipfs.io","https://gateway.pinata.cloud","https://dweb.link", "https://ipfs.eth.aragon.network"] + +COINGECKO_API_KEY={{YOUR_KEY}} +COINGECKO_API_TYPE=demo \ No newline at end of file diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..0936602 --- /dev/null +++ b/Dockerfile @@ -0,0 +1,17 @@ +# Based on example: +FROM node:20-slim AS base +ENV PNPM_HOME="/pnpm" +ENV PATH="$PNPM_HOME:$PATH" +RUN corepack enable + +FROM base AS build +COPY . /usr/src/app +WORKDIR /usr/src/app +RUN --mount=type=cache,id=pnpm,target=/pnpm/store pnpm install --frozen-lockfile +RUN pnpm run -r build +RUN pnpm deploy --filter=./apps/processing --prod /prod/processing + +FROM base AS processing +COPY --from=build /prod/processing /prod/processing +WORKDIR /prod/processing +CMD [ "pnpm", "start" ] diff --git a/README.md b/README.md index 60c3adc..9e90a49 100644 --- a/README.md +++ b/README.md @@ -10,7 +10,7 @@ This repository is a monorepo that contains 1 package and 2 applications: - @ts-turborepo-boilerplate/sample-app: A demo application demonstrating the use of sample-lib. - @grants-stack-indexer/indexer: An [`envio`](https://docs.envio.dev/) indexer, that collects all the relevant events from Allo contracts. -## 🚀 Local Deployment (Dockerized) +## 🚀 Local Deployment (Development) ### Prerequisites @@ -19,15 +19,39 @@ Ensure you have the following installed on your machine: - [Docker](https://www.docker.com/get-started) - [Docker Compose](https://docs.docker.com/compose/install/) -### Run +### Setup -To deploy locally with Docker, run the following command: +1. Copy the Example Environment File and edit the `.env` file + +``` +cp .env.example .env +``` + +2. Build and start the services in detached mode: ``` docker-compose up -d --build ``` -Once the deployment is complete, you can access Hasura by navigating to: +3. Copy the Example Environment File on `apps/migration-scripts` and edit the `.env` file + +``` +cp apps/migration-scripts/.env.example apps/migration-scripts/.env +``` + +4. After starting Docker Compose, run the following command to apply the database migrations: + +``` +pnpm script:db:migrate +``` + +5. Navigate to the processing service directory and start it with: + +``` +cd apps/processing && pnpm dev +``` + +Once the setup is completed you can access Hasura by navigating to: ``` http://localhost:8080/ diff --git a/apps/indexer/package.json b/apps/indexer/package.json index 6e5276d..bf053b3 100644 --- a/apps/indexer/package.json +++ b/apps/indexer/package.json @@ -13,7 +13,7 @@ }, "dependencies": { "chai": "4.3.10", - "envio": "2.7.2", + "envio": "2.7.3", "ethers": "6.8.0", "yaml": "2.5.1" }, diff --git a/apps/indexer/pnpm-lock.yaml b/apps/indexer/pnpm-lock.yaml index c436a8f..29157c5 100644 --- a/apps/indexer/pnpm-lock.yaml +++ b/apps/indexer/pnpm-lock.yaml @@ -11,8 +11,8 @@ importers: specifier: 4.3.10 version: 4.3.10 envio: - specifier: 2.7.2 - version: 2.7.2 + specifier: 2.7.3 + version: 2.7.3 ethers: specifier: 6.8.0 version: 6.8.0 @@ -895,42 +895,42 @@ packages: integrity: sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==, } - envio-darwin-arm64@2.7.2: + envio-darwin-arm64@2.7.3: resolution: { - integrity: sha512-/p7pEZSXvdoK/tu9mb0rma9IYvLFY7UqiTUC1sYPNzPjYSv13gatW6O95ZnAiSbb8Q7f5Yyx4nPuSXaA/9BPBw==, + integrity: sha512-jFtqTbGRXlYBvwQJ2iEZwsumGy+19y7e4+OjPM5ZqqoJ1sHNQ70/G1AqnvZYFKD8RuTUN+5ArU5gYc0Tgqu8Ow==, } cpu: [arm64] os: [darwin] - envio-darwin-x64@2.7.2: + envio-darwin-x64@2.7.3: resolution: { - integrity: sha512-wwToFye0fb9SSpKXZr5VzTZTcErpQbLF9ozxe8q0LLBu04JxjdzdVdLSfU/KwNOgB0NA5YPorRs/a7v9ApGDVQ==, + integrity: sha512-yT7krrqRENpNYvCtyFMlPRGDsUSO0nvrTX0fl28f8xJyD/HAF0nKnU8f6FBiyWCzLzPh8Uby1qK3l+hUVhcktQ==, } cpu: [x64] os: [darwin] - envio-linux-arm64@2.7.2: + envio-linux-arm64@2.7.3: resolution: { - integrity: sha512-7OaH0G3TDd/oP6/tPWaYmtucPxs5NbE4DAZ8DjKpKMIaOFA3GX1PN6cGnfGMpKqmpL9icFWzLn7epk2y5sUzaQ==, + integrity: sha512-QCJlypEOw3cc93UVkRvYuF9Z3x/n57usb0P85Mz0ADiykxBBd7QWyEFKgmMzQZlLZfgQ0NLHwcPh+92/bGoL/A==, } cpu: [arm64] os: [linux] - envio-linux-x64@2.7.2: + envio-linux-x64@2.7.3: resolution: { - integrity: sha512-wbEudlkoYbUzhmozbBpkyQp9GE/326Ys39+u2eY2ehaUZjScOeFqLYa8rTo1nFXk2D4/ES8VHG+5J65cSq7duQ==, + integrity: sha512-IRpfHZhlx7dTmtROhuVJONO7otPlwaUmFdb2HEycwgb4hN1+6Xadn5lPuLYmqJFSWgd2lyxn5EdAJWw8KV4qtA==, } cpu: [x64] os: [linux] - envio@2.7.2: + envio@2.7.3: resolution: { - integrity: sha512-xscpx31nP0mZKPhqPslg5GSbdE3bI29Ueu8Auq9MQi7Q8hHQFjbLwICxpOhMoUCmJeY3iMSYnIKlL1aGpvo3ow==, + integrity: sha512-j/G4Gg+g0xUUf0RgH3PKo0REXwh2blB/t7kYEPFZy9EX3/lOw8fG076ZN7rJ82FzzOjVsQH6RSeW6OFGGWgnLw==, } hasBin: true @@ -1603,10 +1603,10 @@ packages: } engines: { node: ">=0.10.0" } - npm@10.9.0: + npm@10.8.3: resolution: { - integrity: sha512-ZanDioFylI9helNhl2LNd+ErmVD+H5I53ry41ixlLyCBgkuYb+58CvbAp99hW+zr5L9W4X7CchSoeqKdngOLSw==, + integrity: sha512-0IQlyAYvVtQ7uOhDFYZCGK8kkut2nh8cpAdA9E6FvRSJaTgtZRZgNjlC5ZCct//L73ygrpY93CxXpRJDtNqPVg==, } engines: { node: ^18.17.0 || >=20.5.0 } hasBin: true @@ -2604,7 +2604,7 @@ snapshots: "@envio-dev/hypersync-client@0.6.2": dependencies: - npm: 10.9.0 + npm: 10.8.3 yarn: 1.22.22 optionalDependencies: "@envio-dev/hypersync-client-darwin-arm64": 0.6.2 @@ -2949,26 +2949,27 @@ snapshots: dependencies: once: 1.4.0 - envio-darwin-arm64@2.7.2: + envio-darwin-arm64@2.7.3: optional: true - envio-darwin-x64@2.7.2: + envio-darwin-x64@2.7.3: optional: true - envio-linux-arm64@2.7.2: + envio-linux-arm64@2.7.3: optional: true - envio-linux-x64@2.7.2: + envio-linux-x64@2.7.3: optional: true - envio@2.7.2: + envio@2.7.3: dependencies: rescript: 11.1.3 + rescript-schema: 8.2.0(rescript@11.1.3) optionalDependencies: - envio-darwin-arm64: 2.7.2 - envio-darwin-x64: 2.7.2 - envio-linux-arm64: 2.7.2 - envio-linux-x64: 2.7.2 + envio-darwin-arm64: 2.7.3 + envio-darwin-x64: 2.7.3 + envio-linux-arm64: 2.7.3 + envio-linux-x64: 2.7.3 es-define-property@1.0.0: dependencies: @@ -3373,7 +3374,7 @@ snapshots: normalize-path@3.0.0: {} - npm@10.9.0: {} + npm@10.8.3: {} object-assign@4.1.1: {} diff --git a/apps/processing/.env.example b/apps/processing/.env.example index 362d2e1..f5e89c9 100644 --- a/apps/processing/.env.example +++ b/apps/processing/.env.example @@ -1,17 +1,17 @@ -# configuration for Optimism RPC_URLS=["https://optimism.llamarpc.com","https://rpc.ankr.com/optimism","https://optimism.gateway.tenderly.co","https://optimism.blockpi.network/v1/rpc/public","https://mainnet.optimism.io","https://opt-mainnet.g.alchemy.com/v2/demo"] CHAIN_ID=10 +LOG_LEVEL=debug -FETCH_LIMIT=500 -FETCH_DELAY_MS=3000 +FETCH_LIMIT=10000 +FETCH_DELAY_MS=30000 -DATABASE_URL= -DATABASE_SCHEMA=chainDataSchema +DATABASE_URL=postgresql://postgres:testing@localhost:5434/datalayer-postgres-db +DATABASE_SCHEMA=chain_data_schema_1 -INDEXER_GRAPHQL_URL= -INDEXER_ADMIN_SECRET= +INDEXER_GRAPHQL_URL=http://localhost:8080/v1/graphql +INDEXER_ADMIN_SECRET=testing IPFS_GATEWAYS_URL=["https://ipfs.io","https://gateway.pinata.cloud","https://dweb.link", "https://ipfs.eth.aragon.network"] -COINGECKO_API_KEY= -COINGECKO_API_TYPE= #demo or pro \ No newline at end of file +COINGECKO_API_KEY={{YOUR_KEY}} +COINGECKO_API_TYPE=demo \ No newline at end of file diff --git a/apps/scripts/.env.example b/apps/scripts/.env.example new file mode 100644 index 0000000..5c4038a --- /dev/null +++ b/apps/scripts/.env.example @@ -0,0 +1,2 @@ +DATABASE_URL=postgres://postgres:testing@localhost:5434/datalayer-postgres-db +DATABASE_SCHEMA=chain_data_schema_1 \ No newline at end of file diff --git a/docker-compose.yaml b/docker-compose.yaml index 3f928ef..6cc2754 100644 --- a/docker-compose.yaml +++ b/docker-compose.yaml @@ -4,8 +4,9 @@ services: restart: always ports: - "${DATALAYER_POSTGRES_EXPOSED_PORT:-5432}:5432" - volumes: - - db_data:/var/lib/datalayer-postgresql/data + # TODO: remove the comment when processing service persists latest event processed + # volumes: + # - db_data:/var/lib/datalayer-postgres/data env_file: - .env environment: @@ -21,7 +22,7 @@ services: retries: 5 datalayer-graphql-api: - image: hasura/graphql-engine:v2.44.0 + image: hasura/graphql-engine:v2.23.0 ports: - "${DATALAYER_HASURA_EXPOSED_PORT:-8082}:8080" restart: always @@ -29,22 +30,19 @@ services: - .env environment: HASURA_GRAPHQL_DATABASE_URL: postgres://${DATALAYER_PG_USER}:${DATALAYER_POSTGRES_PASSWORD}@datalayer-postgres-db:5432/${DATALAYER_PG_DATABASE} - HASURA_GRAPHQL_METADATA_DATABASE_URL: postgres://${DATALAYER_PG_USER}:${DATALAYER_POSTGRES_PASSWORD}@datalayer-postgres-db:5432/${DATALAYER_PG_DATABASE} HASURA_GRAPHQL_ENABLE_CONSOLE: ${DATALAYER_HASURA_ENABLE_CONSOLE:-true} HASURA_GRAPHQL_ADMIN_SECRET: ${DATALAYER_HASURA_ADMIN_SECRET:-secret} HASURA_GRAPHQL_UNAUTHORIZED_ROLE: ${DATALAYER_HASURA_UNAUTHORIZED_ROLE:-public} HASURA_GRAPHQL_CORS_DOMAIN: ${DATALAYER_HASURA_CORS_DOMAIN:-*} HASURA_GRAPHQL_ENABLE_TELEMETRY: ${DATALAYER_HASURA_ENABLE_TELEMETRY:-false} - HASURA_GRAPHQL_EXPERIMENTAL_FEATURES: bigquery_string_numeric_input - HASURA_GRAPHQL_BIGQUERY_STRING_NUMERIC_INPUT: true - # HASURA_GRAPHQL_METADATA_DATABASE_EXTENSIONS_SCHEMA: ${DATALAYER_HASURA_METADATA_DATABASE_EXTENSIONS_SCHEMA:-chain_data_schema_1} + HASURA_GRAPHQL_EXPERIMENTAL_FEATURES: "bigquery_string_numeric_input" + HASURA_GRAPHQL_BIGQUERY_STRING_NUMERIC_INPUT: "true" ## enable debugging mode. It is recommended to disable this in production HASURA_GRAPHQL_DEV_MODE: ${DATALAYER_HASURA_DEV_MODE:-true} HASURA_GRAPHQL_ENABLED_LOG_TYPES: "startup, http-log, webhook-log, websocket-log, query-log" - HASURA_GRAPHQL_ENABLED_APIS: "graphql,metrics" HASURA_GRAPHQL_ADMIN_INTERNAL_ERRORS: ${DATALAYER_HASURA_ADMIN_INTERNAL_ERRORS:-true} ## uncomment next line to run console offline (i.e load console assets from server instead of CDN) - # HASURA_GRAPHQL_CONSOLE_ASSETS_DIR: /srv/console-assets + HASURA_GRAPHQL_CONSOLE_ASSETS_DIR: null depends_on: datalayer-postgres-db: condition: service_healthy @@ -56,20 +54,24 @@ services: start_period: 5s networks: - datalayer - indexer-postgres-db: image: postgres:16 restart: always ports: - "${ENVIO_POSTGRES_EXPOSED_PORT:-5433}:5432" volumes: - - db_data:/var/lib/envio-postgresql/data + - db_data:/var/lib/indexer-postgres/data env_file: - .env environment: POSTGRES_DB: ${ENVIO_PG_DATABASE} POSTGRES_USER: ${ENVIO_PG_USER} POSTGRES_PASSWORD: ${ENVIO_POSTGRES_PASSWORD} + healthcheck: + test: ["CMD-SHELL", "pg_isready -U ${ENVIO_PG_USER}"] + interval: 5s + timeout: 5s + retries: 5 networks: - indexer indexer-graphql-api: @@ -94,10 +96,12 @@ services: build: context: ./apps/indexer dockerfile: Dockerfile - depends_on: - - "indexer-postgres-db" - - "indexer-graphql-api" restart: always + depends_on: + indexer-postgres-db: + condition: service_healthy + indexer-graphql-api: + condition: service_healthy env_file: - .env networks: diff --git a/packages/data-flow/src/orchestrator.ts b/packages/data-flow/src/orchestrator.ts index ad94c1d..c361044 100644 --- a/packages/data-flow/src/orchestrator.ts +++ b/packages/data-flow/src/orchestrator.ts @@ -100,6 +100,7 @@ export class Orchestrator { await delay(this.fetchDelayInMs); continue; } + await this.eventsRegistry.saveLastProcessedEvent(event); event = await this.enhanceStrategyId(event); if (event.contractName === "Strategy" && "strategyId" in event) { @@ -126,7 +127,6 @@ export class Orchestrator { )}`, ); } - await this.eventsRegistry.saveLastProcessedEvent(event); } catch (error: unknown) { // TODO: improve error handling, retries and notify if ( diff --git a/packages/data-flow/test/unit/orchestrator.spec.ts b/packages/data-flow/test/unit/orchestrator.spec.ts index 42e1ce3..87d4baa 100644 --- a/packages/data-flow/test/unit/orchestrator.spec.ts +++ b/packages/data-flow/test/unit/orchestrator.spec.ts @@ -502,7 +502,7 @@ describe("Orchestrator", { sequential: true }, () => { expect(eventsProcessorSpy).toHaveBeenCalledTimes(2); expect(orchestrator["dataLoader"].applyChanges).toHaveBeenCalledTimes(1); - expect(mockEventsRegistry.saveLastProcessedEvent).toHaveBeenCalledTimes(1); + expect(mockEventsRegistry.saveLastProcessedEvent).toHaveBeenCalledTimes(2); expect(consoleSpy).toHaveBeenCalledTimes(1); expect(consoleSpy).toHaveBeenCalledWith( expect.stringContaining(`Error processing event: ${stringify(errorEvent)}`), diff --git a/packages/indexer-client/src/providers/envioIndexerClient.ts b/packages/indexer-client/src/providers/envioIndexerClient.ts index e1b8c00..68366a7 100644 --- a/packages/indexer-client/src/providers/envioIndexerClient.ts +++ b/packages/indexer-client/src/providers/envioIndexerClient.ts @@ -32,6 +32,7 @@ export class EnvioIndexerClient implements IIndexerClient { $limit: Int! ) { raw_events( + order_by: [{ block_number: asc }, { log_index: asc }] where: { chain_id: { _eq: $chainId } _or: [ @@ -69,7 +70,7 @@ export class EnvioIndexerClient implements IIndexerClient { if (error instanceof InvalidIndexerResponse) { throw error; } - throw new IndexerClientError(JSON.stringify(error)); + throw new IndexerClientError(JSON.stringify(error, Object.getOwnPropertyNames(error))); } } } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index aeed1e1..1f7bfa2 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -65,8 +65,8 @@ importers: specifier: 4.3.10 version: 4.3.10 envio: - specifier: 2.7.2 - version: 2.7.2 + specifier: 2.7.3 + version: 2.7.3 ethers: specifier: 6.8.0 version: 6.8.0 @@ -2299,42 +2299,42 @@ packages: } engines: { node: ">=6" } - envio-darwin-arm64@2.7.2: + envio-darwin-arm64@2.7.3: resolution: { - integrity: sha512-/p7pEZSXvdoK/tu9mb0rma9IYvLFY7UqiTUC1sYPNzPjYSv13gatW6O95ZnAiSbb8Q7f5Yyx4nPuSXaA/9BPBw==, + integrity: sha512-jFtqTbGRXlYBvwQJ2iEZwsumGy+19y7e4+OjPM5ZqqoJ1sHNQ70/G1AqnvZYFKD8RuTUN+5ArU5gYc0Tgqu8Ow==, } cpu: [arm64] os: [darwin] - envio-darwin-x64@2.7.2: + envio-darwin-x64@2.7.3: resolution: { - integrity: sha512-wwToFye0fb9SSpKXZr5VzTZTcErpQbLF9ozxe8q0LLBu04JxjdzdVdLSfU/KwNOgB0NA5YPorRs/a7v9ApGDVQ==, + integrity: sha512-yT7krrqRENpNYvCtyFMlPRGDsUSO0nvrTX0fl28f8xJyD/HAF0nKnU8f6FBiyWCzLzPh8Uby1qK3l+hUVhcktQ==, } cpu: [x64] os: [darwin] - envio-linux-arm64@2.7.2: + envio-linux-arm64@2.7.3: resolution: { - integrity: sha512-7OaH0G3TDd/oP6/tPWaYmtucPxs5NbE4DAZ8DjKpKMIaOFA3GX1PN6cGnfGMpKqmpL9icFWzLn7epk2y5sUzaQ==, + integrity: sha512-QCJlypEOw3cc93UVkRvYuF9Z3x/n57usb0P85Mz0ADiykxBBd7QWyEFKgmMzQZlLZfgQ0NLHwcPh+92/bGoL/A==, } cpu: [arm64] os: [linux] - envio-linux-x64@2.7.2: + envio-linux-x64@2.7.3: resolution: { - integrity: sha512-wbEudlkoYbUzhmozbBpkyQp9GE/326Ys39+u2eY2ehaUZjScOeFqLYa8rTo1nFXk2D4/ES8VHG+5J65cSq7duQ==, + integrity: sha512-IRpfHZhlx7dTmtROhuVJONO7otPlwaUmFdb2HEycwgb4hN1+6Xadn5lPuLYmqJFSWgd2lyxn5EdAJWw8KV4qtA==, } cpu: [x64] os: [linux] - envio@2.7.2: + envio@2.7.3: resolution: { - integrity: sha512-xscpx31nP0mZKPhqPslg5GSbdE3bI29Ueu8Auq9MQi7Q8hHQFjbLwICxpOhMoUCmJeY3iMSYnIKlL1aGpvo3ow==, + integrity: sha512-j/G4Gg+g0xUUf0RgH3PKo0REXwh2blB/t7kYEPFZy9EX3/lOw8fG076ZN7rJ82FzzOjVsQH6RSeW6OFGGWgnLw==, } hasBin: true @@ -3946,6 +3946,14 @@ packages: } engines: { node: ">=0.10.0" } + rescript-schema@8.2.0: + resolution: + { + integrity: sha512-pfRNB9kvafUYe+RgvsExiazJioi/iV8gmjK3xOw/jeSgPIIDoVhflnmpoz+vuiwlulYkNT/7u2+2EsCrph7QKA==, + } + peerDependencies: + rescript: 11.x + rescript@11.1.3: resolution: { @@ -6035,26 +6043,27 @@ snapshots: env-paths@2.2.1: {} - envio-darwin-arm64@2.7.2: + envio-darwin-arm64@2.7.3: optional: true - envio-darwin-x64@2.7.2: + envio-darwin-x64@2.7.3: optional: true - envio-linux-arm64@2.7.2: + envio-linux-arm64@2.7.3: optional: true - envio-linux-x64@2.7.2: + envio-linux-x64@2.7.3: optional: true - envio@2.7.2: + envio@2.7.3: dependencies: rescript: 11.1.3 + rescript-schema: 8.2.0(rescript@11.1.3) optionalDependencies: - envio-darwin-arm64: 2.7.2 - envio-darwin-x64: 2.7.2 - envio-linux-arm64: 2.7.2 - envio-linux-x64: 2.7.2 + envio-darwin-arm64: 2.7.3 + envio-darwin-x64: 2.7.3 + envio-linux-arm64: 2.7.3 + envio-linux-x64: 2.7.3 environment@1.1.0: {} @@ -6961,6 +6970,10 @@ snapshots: require-from-string@2.0.2: {} + rescript-schema@8.2.0(rescript@11.1.3): + dependencies: + rescript: 11.1.3 + rescript@11.1.3: {} resolve-from@4.0.0: {}