Skip to content

@zod-vault/server

Self-hostable backend with Hono and SQLite.

import { createServer } from "@zod-vault/server";
const server = createServer({
jwtSecret: process.env.JWT_SECRET,
dbPath: "./data/vault.db",
});
server.listen(3000);
VariableRequiredDefaultDescription
JWT_SECRETYes-Secret for JWT signing
JWT_ISSUERNozod-vaultJWT issuer claim
JWT_ACCESS_EXPIRYNo15mAccess token expiry
JWT_REFRESH_EXPIRYNo7dRefresh token expiry
DB_PATHNo./data/vault.dbSQLite path
PORTNo3000HTTP port

Register a new user.

Terminal window
curl -X POST https://vault.example.com/auth/email/register \
-H "Content-Type: application/json" \
-d '{"email": "user@example.com", "password": "secret"}'

Response:

{
"accessToken": "eyJ...",
"refreshToken": "eyJ...",
"user": { "id": "...", "email": "user@example.com" }
}

Login with email/password.

Terminal window
curl -X POST https://vault.example.com/auth/email/login \
-H "Content-Type: application/json" \
-d '{"email": "user@example.com", "password": "secret"}'

Get current user.

Terminal window
curl https://vault.example.com/auth/me \
-H "Authorization: Bearer <token>"

Refresh access token.

Terminal window
curl -X POST https://vault.example.com/auth/refresh \
-H "Content-Type: application/json" \
-d '{"refreshToken": "eyJ..."}'

Logout (invalidate refresh token).

Terminal window
curl -X POST https://vault.example.com/auth/logout \
-H "Authorization: Bearer <token>"

List user’s vaults.

Terminal window
curl https://vault.example.com/vault \
-H "Authorization: Bearer <token>"

Response:

{
"vaults": [
{
"uid": "abc123",
"name": "my-store",
"data": "encrypted...",
"salt": "base64...",
"version": 1,
"updatedAt": 1234567890
}
]
}

Create a vault.

Terminal window
curl -X POST https://vault.example.com/vault \
-H "Authorization: Bearer <token>" \
-H "Content-Type: application/json" \
-d '{"name": "my-store", "data": "encrypted...", "salt": "base64..."}'

Get a specific vault.

Terminal window
curl https://vault.example.com/vault/abc123 \
-H "Authorization: Bearer <token>"

Update a vault.

Terminal window
curl -X PUT https://vault.example.com/vault/abc123 \
-H "Authorization: Bearer <token>" \
-H "Content-Type: application/json" \
-d '{"data": "new-encrypted...", "salt": "new-salt..."}'

Delete a vault.

Terminal window
curl -X DELETE https://vault.example.com/vault/abc123 \
-H "Authorization: Bearer <token>"
Terminal window
curl https://vault.example.com/health

Response:

{"status": "ok", "timestamp": 1234567890}
CREATE TABLE users (
id TEXT PRIMARY KEY,
email TEXT UNIQUE NOT NULL,
password_hash TEXT,
created_at INTEGER NOT NULL,
updated_at INTEGER NOT NULL
);
CREATE TABLE vaults (
uid TEXT PRIMARY KEY,
user_id TEXT NOT NULL REFERENCES users(id),
name TEXT NOT NULL,
data TEXT NOT NULL,
salt TEXT NOT NULL,
version INTEGER DEFAULT 1,
created_at INTEGER NOT NULL,
updated_at INTEGER NOT NULL,
UNIQUE(user_id, name)
);
CREATE TABLE refresh_tokens (
jti TEXT PRIMARY KEY,
user_id TEXT NOT NULL REFERENCES users(id),
expires_at INTEGER NOT NULL,
created_at INTEGER NOT NULL
);