A minimal template for a hardware based licensing and authentication system, written in TypeScript using Express & MongoDB (Mongoose).
-
npm install
-
Rename the "database.sample.ts" file to "database.ts"
-
Provide your MongoURI within this file.
Command | Effect |
---|---|
dev:start |
Launches the api in development mode, with hot reloading enabled. |
dev:webpack |
Compiles a development build of the project |
prod:webpack |
Compiles a production build of the project |
The following below is a minimal API specification to provide a quick overview of the template functionality.
The verify route provides an API route for sending a license key and machineId. This route will check if the key is currently bound to a machine. If it is bound to a machine it will verify it is the current machine being requested. If the key is not bound, it will then be bound the requesting machine.
Example Payload
POST
{
"key":"123456",
"machineId":"000000"
}
The request route provides a convenient API route for removing the association of a machineId to a license key.
Example Payload
POST
{
"key":"123456"
}
The request route provides a convenient API route for adding the association of a discordId to a license key.
Example Payload
POST
{
"key":"123456",
"discordId": "714498109777903626",
"discordUsername": "uzi#2322"
}
The request route provides a convenient API route for removing the association of a discordId to a license key.
Example Payload
POST
{
"key":"123456",
"discordId": "714498109777903626",
}
The heartbeat route provides a simple api route for verifying a machineId is still registered to a key within this database. This helps prevent key abuse by authenticating, then resetting and allowing someone else to reuse a key.
The machineID is passed as a URL parameter.
Example Request
GET /auth/heartbeat/000000
To keep the project minimal and simplified the API provides a preset number of responses corresponding to the result of the data result.
{
"message": "Success",
"username": "uzi#2322"
}
{
"message":"Key reset"
}
{
"message": "Invalid key"
}
{
"message":"Bad request"
}
{
"message":"The key is already bound."
}
{
"message":"The key is already unbound."
}
{
"message":"Link your Discord on the dashboard first."
}