⚠ This page is served via a proxy. Original site: https://github.com
This service does not collect credentials or authentication data.
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

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

203 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

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
# Run the migrations
yarn migration:run

# [Optional] Start Redis
docker-compose up -d redis

# 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

Balances SSE Test

To test the balances SSE endpoint, you can start the API server:

yarn start

This will start a local server at http://localhost:3001/tests/balances

Alternatively you can use curl:

curl -X GET "http://localhost:3001/1/accounts/0x87A04752E516548B0d5d4DF97384C0b22B649179/balances/sse?tokens=0x4d5f47fa6a74757f35c14fd3a6ef8e3c9bc514e8%2C0x6b175474e89094c44da98b954eedeac495271d0f%2C0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48" -H "accept: text/event-stream" 

About

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

Resources

Stars

Watchers

Forks

Packages

 
 
 

Contributors 13

Languages