GraphQl service to provide backend environment for xExchange
- Node.js > @18.x.x is required to be installed docs
- Redis Server is required to be installed docs.
- RabbitMQ Server is required to be installed docs.
- MongoDB Server is required to be installed docs.
You can use docker-compose up
in a separate terminal to use a local docker container for all these dependencies.
After running the sample, you can stop the Docker container with docker-compose down
This is an MultiversX project built on Nest.js framework.
Runs the app in the production mode. Make requests to http://localhost:3005/graphql.
- At the root folder run (make sure you have node v16.x.x)
$ npm install
-
Proper config .env.example based on desired configuration
-
Start the app
# development debug mode
$ npm run start:debug
# development mode
$ npm run start:dev
# production mode
$ npm run start
It depends on the following external systems:
- gateway:
- index:
- to gather information for some statistics
- docs: https://docs.multiversx.com/sdk-and-tools/elastic-search/
- api:
- to get information regarding tokens, metaesdts and user balances
- docs: https://docs.multiversx.com/sdk-and-tools/rest-api/multiversx-api/ It uses on the following internal systems:
- redis: used to cache various data, for performance purposes
- rabbitmq:
- fetching events from blockchain emitted events via notifier
A service instance can be started with the following behavior:
- public API: provides graphQL queries for the consumers
- private API: used to report prometheus metrics & health checks
- rabbitMQ: used to fetch events in real time and create analytics data
- cache warmer: used to proactively fetch data & pushes it to cache, to improve performance & scalability
It depends on the following optional external systems:
- events notifier rabbitmq: queue that pushes logs & events which are handled internally e.g. to store token prices
- AWS Timestream: used to store time based metrics such as prices, volumes, fees
It uses the following optional internal systems:
- mongo database: used to store configs and addresses