Skip to content

Collection of typescript based services, mainly for the use of CoW Swap.

Notifications You must be signed in to change notification settings

cowprotocol/bff

Repository files navigation

BFF (Backend For Frontend)

Backend for frontend is a series of backend services and libraries that enhance user experience for the frontend.

Getting Started

Install dependencies:

yarn

Create the .env file:

# If you are not using docker
cp .env.example .env

# If you are using docker (handy to launch a service directly using NX)
cp .env.example .env.docker

Start docker:

yarn compose:up

Develop

Notification Producer

Make sure your .env file is defined, if not create one using .env.example as a template.

# Start RabbitMQ
docker-compose up -d queue

# Start DB
docker-compose up -d db

# Start the notification producer
yarn producer

The application will start the notification producer for the networks, but you can run it for a specific network or networks by setting the NOTIFICATIONS_PRODUCER_CHAINS environment variable.

# Run producer only on networks 1 and 100
NOTIFICATIONS_PRODUCER_CHAINS=1,100

Create a new service or library

To add a new app or library, you can run the following command;

# New API
yarn new:fastify

# New Library
yarn new:lib

# New Node app
yarn new:node

For APIs and apps, it will create a Dockerfile. Please, remember to update:

  • The docker-compose.yml file to include the new service.
  • The github actions to include the new service (.github/workflows/ci.yml)

For more info, see:

Test

# Run all tests
yarn test

# Run test for repositories (in watch mode)
nx run repositories:test --watch

# Run test on specific file (in watch mode)
nx run repositories:test --watch --testFile=libs/repositories/src/UsdRepository/UsdRepositoryRedis.spec.ts

Build

Docker

Build docker containers and publish to a local registry:

yarn docker-build:affected

Generate Types

There's some API types that are generated automatically from their swagger definitions. To generate them, run:

yarn gen:types

FAQ

Typeorm DriverPackageNotInstalledError

{"type":"DriverPackageNotInstalledError","message":"Postgres package has not been found installed. Try to install it: npm install pg --save","stack":"DriverPackageNotInstalledError: Postgres package has not been found installed. Try to install it: npm install pg

If you have faced the error above - check this fix and its description: #101

Development notes

Notifications

To run locally the notifications, you will need to run:

  • RabbitMQ locally: docker-compose up -d queue
  • DB locally: docker-compose up -d db
  • Telegram consumer: yarn telegram
  • Notification producer: yarn producer

You need to make sure you have the relevant environment variables set.

Quick PUSH notifications Test

There's a unit test used as a convenient way to do a quick test of the PUSH notifications.

If you have a subscription to any of the channels (i.e. Telegram), you can use the following command to send a test notification:

# Replace the POST_TO_QUEUE_ACCOUNT with your account address
POST_TO_QUEUE_ACCOUNT=0x79063d9173C09887d536924E2F6eADbaBAc099f5 nx test notification-producer --testFile=src/sendPush.test.ts --skip-nx-cache

Database Migrations

The database access, and therefore the migrations is handled in libs/repositories.

Create a new migration

To create a new migration, run:

# Create a new migration with "your-migration-name" as name
yarn typeorm migration:create src/migrations/your-migration-name

# Alternatively, you could define the entities in `libs/repositories/src/database` and then run:
yarn migration:generate

This will create a new migration file in the libs/repositories/src/migrations directory. For example 1745364046891-initial-migration.ts.

Inside this file, you will need to edit the migration logic, where:

  • up is the logic to execute the migration
  • down is the logic to revert the migration

Run migrations

Once you have added the migration logic, you can run the migration with:

yarn migration:run

Revert migrations

To revert the last migration, run:

yarn migration:revert

About

Collection of typescript based services, mainly for the use of CoW Swap.

Resources

Stars

Watchers

Forks

Packages

 
 
 

Languages