Membership on-boarding service for Joystream network.
Clone the repo, then run:
$ npm install
to install dependencies.
Add your config variables to env.example
and rename it to .env
and then run:
$ npm run build
$ npm run start
Will build and start the server.
Send a JSON in the request body with an optional Bearer Authentication (if request wants to bypass captcha verification):
{
"account": "5HGjWAeFDfFCWPsjFQdVV2Msvz2XtMktvgocEZcCj68kUMaw",
"handle": "myhandle",
"avatar": "https://example.com/avatar.png"
}
On success expect a JSON response:
{
"memberId": 21,
"block": 1337,
"blockHash": "0xb3f394043b4a0dde625a630486f6e64388f124aa9ba4f7f23d54d4fc5a94ea82"
}
On error expect a JSON response:
{
"error": "ErrorType"
}
Send a GET request to the /status endpoint to get an overview of the readiness of the service.
- If the joystream-node used by the service is fully synced
- If the balance of the inviting/gifting account has sufficient balance for atleast one member.
The faucet service is configurable through various environment variables (either in the shell environment or in an .env
file)
Variable | Default if not specified | Description | Required |
---|---|---|---|
INVITER_KEY | //Alice | The Substrate URI (SURI) representation of the private key corresponding to the account that will gift new membership. The should have sufficient funds at all times or registration will fail. | yes |
PORT | 3002 | The web service will bind to localhost:PORT |
no |
PROVIDER | Websocket Url to a joystream-node eg. ws://localhost:9944/ It is recommended to use fully qualified url to your host if the joystream-node is not a docker service in the same docker-compose network. |
yes | |
BALANCE_CREDIT | 0 | The amount of funds to credit gifted member in base units | no |
BALANCE_LOCKED | 0 | The portion of the credited funds that are locked in base units | no |
SENDGRID_API_KEY | The API key for SendGrid account used to send alert emails | no | |
ALERT_FROM_EMAIL | email address the alert emails will be be sent from | yes if SENDGRID_API_KEY is configured | |
ALERT_TO_EMAIL | comma separated list of destination email addresses to send alerts to | yes if SENDGRID_API_KEY is configured | |
ENABLE_API_THROTTLING | false | If API rate limit will be applied | no |
GLOBAL_API_LIMIT_INTERVAL_HOURS | 1 | Interval in hours for which limit is applied | no |
GLOBAL_API_LIMIT_MAX_IN_INTERVAL | 10 | The max number of registration allowed in the interval defined | no |
PER_IP_API_LIMIT_INTERVAL_HOURS | 48 | The interval in hours for which limit is applied to a specific IP address | no |
PER_IP_API_LIMIT_MAX_IN_INTERVAL | 1 | The max number of registration allowed from IP address in the defined interval | no |
HCAPTCHA_SECRET | The hCaptcha secret to use for the deployed service | no but recommended |
docker build . --tag joystream/faucet
copy the env.example
to .env
and configure the variables.
To see what the final configuration will look like:
docker compose convert
If you are satisfied, star the service with:
docker compose up -d
The webserice will be listening on localhost on the port you configured in your .env file. To make the service available publicly you will need to setup a reverse proxy with an ssl certificate. Nginx and caddy are good options. Example usage of caddy with docker/docker-compose stack