Installation
Prerequisites
- Node.js 22+ (download)
- PostgreSQL — any provider: Neon (free tier), Supabase, local Docker, etc.
- Payment gateway credentials — Midtrans Sandbox or Xendit Dashboard
Install packages
# Single package — includes core, both gateways, and Drizzle storagenpm install @murai-wallet/murai drizzle-orm postgres# Or with pnpmpnpm add @murai-wallet/murai drizzle-orm postgresIf you only need specific packages:
# Core only (bring your own storage and gateway)npm install @murai-wallet/core
# Individual adaptersnpm install @murai-wallet/gateway-midtransnpm install @murai-wallet/gateway-xenditnpm install @murai-wallet/gateway-stripenpm install @murai-wallet/storage-drizzleCreate the database tables
Run this SQL against your PostgreSQL database:
CREATE TABLE wallets ( user_id TEXT PRIMARY KEY, balance BIGINT NOT NULL DEFAULT 0);
CREATE TABLE transactions ( id UUID PRIMARY KEY, user_id TEXT NOT NULL, amount BIGINT NOT NULL, idempotency_key TEXT NOT NULL UNIQUE, created_at TIMESTAMPTZ NOT NULL, expires_at TIMESTAMPTZ, remaining BIGINT, expired_at TIMESTAMPTZ, metadata TEXT);
CREATE TABLE checkouts ( id TEXT PRIMARY KEY, user_id TEXT NOT NULL, amount BIGINT NOT NULL, redirect_url TEXT NOT NULL, status TEXT NOT NULL, created_at TIMESTAMPTZ NOT NULL, updated_at TIMESTAMPTZ NOT NULL);Environment variables
Add these to your .env:
DATABASE_URL=postgres://user:pass@host/dbname
# Midtrans (if using)MIDTRANS_SERVER_KEY=SB-Mid-server-...MIDTRANS_CLIENT_KEY=SB-Mid-client-...
# Xendit (if using)XENDIT_SECRET_KEY=xnd_development_...XENDIT_CALLBACK_TOKEN=your-callback-token
# Stripe (if using)STRIPE_SECRET_KEY=sk_test_...STRIPE_WEBHOOK_SECRET=whsec_...Next steps
Continue to the Quick Start to wire up your first wallet.