Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/fairdatasociety/bigbang-api
https://github.com/fairdatasociety/bigbang-api
Last synced: 7 days ago
JSON representation
- Host: GitHub
- URL: https://github.com/fairdatasociety/bigbang-api
- Owner: fairDataSociety
- License: apache-2.0
- Created: 2023-06-03T13:15:01.000Z (over 1 year ago)
- Default Branch: master
- Last Pushed: 2023-12-14T08:34:22.000Z (11 months ago)
- Last Synced: 2023-12-14T09:39:01.355Z (11 months ago)
- Language: TypeScript
- Size: 207 KB
- Stars: 0
- Watchers: 4
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# Big Bang API
API for storing information about inviters, invites created by them, new accounts created with the help of these invites. With the help of the final database, we can determine the leaders by the number of invitations and the number of invites turned into FDS accounts.
## API Endpoints
Example of sending POST request with `fetch`.
```js
const data = {
inviter_address: '0x4ea09ea012ed94fdc2d87f39f007218ab9fed75c',
invite_address: '0xdd7b8ee07152d7b14ad35ba8eca5ee5490437869',
inviter_signature: '0x6770d398d5e87d0b96f46fb51770fb92b00da9999bd5acf7bf8acfa34598fce04f9b55d2a850d3efe8ec975ffc4e730004f3175ffdb904b7270ff371542f642a1c',
invite_signature: '0xf8919d14add60615f8a5929533a7591625b191f652732d475b49bb3ffde47f9a22374e696018e64e2eed024f220c1688dccbc14c9066edd8d1f4c5669674408e1b'
}fetch('http://localhost:3333/v1/invite/create', {
method: 'POST',
headers: {
'Content-Type': 'application/json',
},
body: JSON.stringify(data),
})
```### 1. POST `/v1/invite/create`
This API is used to create a record about the inviter and his invite. Using this method, information about the inviter who created the first invitation is inserted into the database.
#### Request Body
```json
{
"inviter_address": "",
"invite_address": "",
"invite_signature": "",
"inviter_signature": ""
}
```#### Response
The API will return a JSON object indicating the result of the operation.
Example response:
```json
{
"status": "ok"
}
```---
### 2. POST `/v1/invite/link`
This API is used to link an invite to newly created account using this invite.
#### Request Body
```json
{
"invite_address": "",
"account_address": "",
"invite_signature": "",
"account_signature": ""
}
```#### Response
The API will return a JSON object indicating the result of the operation.
Example response:
```json
{
"status": "ok"
}
```---
### 3. GET `/v1/invite/inviter/:address`
This API is used to get the count of invites and created accounts for a particular inviter.
#### URL Parameters
`address`: Ethereum address of the inviter
#### Response
The API will return a JSON object with the count of invites and created accounts for the inviter.
Example response:
```json
{
"status": "ok",
"data": {
"invites": 10,
"accounts": 5
}
}
```---
### 4. GET `/v1/invite/info`
This API is used to get general information about the system including the total number of invites, accounts, and inviters.
#### Response
The API will return a JSON object with the information about the system.
Example response:
```json
{
"status": "ok",
"data": {
"invites": 100,
"accounts": 50,
"inviters": 30
}
}
```---
### 5. POST `/v1/invite/inviter/:address`
This API is used to get information about the invites related to the inviter at a particular Ethereum address.
#### Parameters
The request to this API should include the Ethereum address of the inviter in the URL as a path parameter and a JSON object in the body, containing an array of invites to be checked.
- **address**: The Ethereum address of the inviter (Path Parameter)
- **invites**: An array of Ethereum addresses representing the invites (JSON Body)The array of invites must have a length between 1 and 50, both inclusive.
Example request:
```json
{
"invites": ["0x...", "0x...", ...]
}
```#### Response
The API will return a JSON object with the status of each invite provided in the request. The response object will have the following properties:
- **isUsed**: A boolean indicating whether the invite has been used or not.
- **isAccountCreated**: A boolean indicating whether an account has been created for the invite or not.Example response:
```json
{
"status": "ok",
"data": {
"invites": {
"0x...": {
"isUsed": false,
"isAccountCreated": true
},
"0x...": {
"isUsed": true,
"isAccountCreated": false
},
...
}
}
}
```#### Errors
The API may return an error if the "address" or "invites" provided are not valid Ethereum addresses or if the length of "invites" is not within the valid range.
Example error response:
```json
{
"status": "error",
"message": "\"invites\" length is not valid. Expected from 1 to 50 invites"
}
```## Installation
1 - Install dependencies (Node.js >=16):
`npm ci`
2 - Install MySQL.
3 - Create `bigbang` db:
`mysql -u root -p < ./migrations/db.sql`4 - Start interactive mode for MySQL user creation:
`mysql -u root`
and run commands:
`CREATE USER 'bigbanguser'@'localhost' IDENTIFIED BY 'STRONG_PASSWORD_HERE';`
`GRANT ALL PRIVILEGES ON bigbang.* TO 'bigbanguser'@'localhost';`
`FLUSH PRIVILEGES;`
5 - Put these credentials to `.env` file.
6 - Run migrations:
`npx knex migrate:latest --env production`
7 - Start server using pm2:
`npm run start`