The Safe Client Gateway serves as a bridge for the Safe{Wallet} clients (Android, iOS, Web).
It provides UI-oriented mappings and data structures for easier integration with several Safe{Core} services. In essence, it works as a bridge between the frontend and backend, ensuring smooth, efficient data exchange.
- Node.js v24.11.0 'Krypton' LTS (Node.js Release Schedule) – https://nodejs.org/en/
- Docker Compose – https://docs.docker.com/compose/
Optional: If you have NVM installed, you can run nvm use in the root folder of the project to use the recommended
Node version set for this project.
We use Yarn as the package manager for this project. Yarn is bundled with the project so to use it run:
corepack enable && yarn install
The project requires some ABIs that are generated after install. In order to manually generate them, run:
yarn generate-abis
We recommend using what is available in the .env.sample file:
cp .env.sample .env
Then edit your .env file with your configuration values.
Please review the required API keys in the .env file and ensure you have created the necessary keys for the services you plan to use.
- Start Redis instance. By default, it will start on port
6379oflocalhost.
docker compose up -d redis
If you run the service locally against a local Safe{Wallet} instance,
- set
TX_SERVICE_API_KEYto a valid key to avoid hitting the Transaction Service rate limit - set
CGW_ENV=development - set
ALLOW_CORS=true
To generate a key, go to:
- Start the Safe Client Gateway
# development yarn run start # watch mode yarn run start:dev # production mode yarn run start:prod
The unit test suite contains tests that require a database connection.
This project provides a db-test container which also validates the support for SSL connections.
To start the container, make sure that the key for the self-signed certificate
has the right permissions.
# disallow any access to world or group
chmod 0600 db_config/test/server.keyWith the right permissions set on the server.key file we can now start the db-test container:
# start the db-test container docker compose up -d db-test # unit tests yarn run test # e2e tests docker-compose up -d redis rabbitmq && yarn run test:e2e # test coverage yarn run test:cov
We use ESLint as a linter and Prettier as a code formatter.
You can run yarn run lint to execute ESLint and yarn run format to execute Prettier.
These checks can be automatically executed using Git hooks. If you wish to install the provided git hooks:
yarn install yarn husky install
Database migrations are configured to execute automatically. To disable them, set the following environment variables:
RUN_MIGRATIONS=false
DB_MIGRATIONS_EXECUTE=false
For migrations to be generated automatically, the entity file must follow this structure and naming convention:
src/**/entities/*.entity.db.ts
The file should be located in the src folder, inside an entities directory. The filename should follow the format {FILE_NAME}.entity.db.ts, where {FILE_NAME} is replaced with your desired name.