A SQLite REST and Realtime server
This is the preferred method as the dependency better-sqlite3 is making of lot of assumptions about the system it will be installed and running on which in most cases will lead to errors when installing soul.
Using the following Dockerfile:
You can proceed to building the application.
npm install -g soul-cli
Soul is command line tool, after installing it,
Run soul -d sqlite.db -p 8000
and itโll start a REST API on http://localhost:8000 and a Websocket server on ws://localhost:8000.
Usage: soul [options]
Options:
--version Show version number [boolean]
-d, --database SQLite database file or :memory: [string] [required]
-p, --port Port to listen on [number]
-r, --rate-limit-enabled Enable rate limiting [boolean]
-c, --cors CORS whitelist origins [string]
--env, --envpath Path to load .env file [string]
-a, --auth Enable authentication and authorization [boolean]
--iuu, --initialuserusername Initial user username [string]
--iup, --initialuserpassword Initial user password [string]
--ts, --tokensecret Token Secret [string]
--atet, --accesstokenexpirationtime Access Token Expiration Time (Default: 5H) [string]
--rtet, --refreshtokenexpirationtime Refresh Token Expiration Time (Default: 1D) [string]
-S, --studio Start Soul Studio in parallel
--help Show help
Then to test Soul is working run the following command
curl http://localhost:8000/api/tables
It should return a list of the tables inside sqlite.db
database.
To run Soul in auth mode, allowing login and signup features with authorization capabilities in your database tables, follow these steps:
Run the Soul command with the necessary parameters:
soul -d foobar.db -a --ts=<your_jwt_secret_value> --atet=4H --rtet=3D --iuu=john --iup=<your_password>
Note: When configuring your JWT Secret, it is recommended to use a long string value for enhanced security. It is advisable to use a secret that is at least 10 characters in length.
In this example:
-a
flag instructs Soul to run in auth mode.--ts
flag allows you to pass a JWT secret value for the access and refresh tokens
generation and verification. Replace --atet
flag sets the JWT expiration time for the access token. In this case, it is set to four hours (4H), meaning the token will expire after 4 hours.--rtet
flag sets the JWT expiration time for the refresh token. In this case, it is set to three days (3D), meaning the token will expire after 3 days.--iuu
flag is used to pass a username for the initial user--iup
flag is used to pass a password for the initial userHere are some example values for the atet
and rtet
flags
NOTE: It is crucial to securely store a copy of the --ts
(Token Secret
) value used in Soul. Once you pass this values, make sure to keep a backup because you will need it every time you restart Soul. Losing this secret values can result in a situation where all of your users are blocked from accessing Soul.
To modify a superuser information in a database, you can utilize the updatesuperuser
command. This command allows you to change a superuserโs password
or upgrade/downgrade a normal user to a superuser
. Below is an example of how to use it:
soul -d foobar.db updatesuperuser --id=1 password=<new_password_for_the_user> // Update the password for the superuser with ID 1
soul -d foobar.db updatesuperuser --id=1 --is_superuser=true // Upgrade the user with ID 1 to a superuser
soul -d foobar.db updatesuperuser --id=1 --is_superuser=false // Revoke the superuser role from the superuser with ID 1
There might be cases where you want to pass a custom path for your .env
file. For this, you can use the --env
flag when running the soul
command, providing the absolute file path of your .env
file.
soul -d foobar.db --env=/absolute/path/of/your/.env/file
NOTE:
API documentation is available while the project is running at http://localhost:8000/api/docs
Thereโs also a list of all endpoints examples at docs/api-examples.md
For websocket examples, check docs/ws-examples.md
For detailed information on how authentication works in Soul, please refer to the docs/auth.md
Soul is able to be extended (e.g. Adding custom APIs) via extensions, you can find a list of extensions at docs/extensions-examples.md
A collection of projects that revolve around the Soul ecosystem.
Soul Studio provides a GUI to work with your database.
Right now Soul Studio is in early stages of development and not useful to work with.
RCO-Soul The purpose of this project is to demonstrate how to run a React admin client using Soul as a REST API service.
dber Database design tool based on entity relation diagram
git clone https://github.com/thevahidal/soul # Clone project
cp .env.sample .env # Duplicate sample environment variables
nano .env # Update the environment variables
npm install # Install dependencies
npm run dev # Start the dev server
AUTH
variable to true in your .env
file.INITIAL_USER_USERNAME
environment variable. The username should be a valid, meaningful username.INITIAL_USER_PASSWORD
environment variable. The password should be at least 8 characters long and contain a combination of lowercase letters, uppercase letters, numbers, and special characters, for example: โStr0ng$Pw!โ.TOKEN_SECRET
environment variable. npm run test
Make sure to replace the placeholders with the appropriate values for your environment.
You can host static content using Soul by utilizing its extensions feature. This allows you to expose your static application through Soul, enabling users to access your content without hosting multiple applications. please check this document
Join the discussion in our Discord server and help making Soul together.
Contributions are always welcome!
See CONTRIBUTING.md
for ways to get started and please adhere to CODE OF CONDUCT
.
Thanks goes to these wonderful people (emoji key):
Vahid Al ๐ป ๐ |
Abenezer Melkamu ๐ป |
Ian Mayo ๐ป ๐ |
Hanz ๐ป |
Koen De Groote ๐ป |
Muhammad Taha Khan ๐ป |
Romain Lebesle ๐ป |
This project follows the all-contributors specification.