nwdb-sdk
v1.1.1
Published
Official JavaScript/TypeScript SDK for NW DB - AI-native Database as a Service
Maintainers
Readme
NW DB SDK
Official JavaScript/TypeScript SDK for NW DB — AI-native Database as a Service.
Install
npm install nwdb-sdkQuick Start — Supabase-style client (recommended)
import { createClient } from 'nwdb-sdk';
const db = createClient('https://api.nwdb.dev', 'nwdb_your_api_key');
// SELECT with chainable filters — returns { data, error }
const { data, error } = await db
.from('leads')
.select('*')
.eq('status', 'hot')
.gte('score', 80)
.order('score', { ascending: false })
.limit(20);
// Single row
const { data: lead } = await db.from('leads').select('*').eq('id', leadId).single();
// INSERT
const { data: created } = await db.from('leads').insert({
name: 'Acme Inc', status: 'hot', score: 90,
});
// UPDATE (id-addressed)
await db.from('leads').update({ status: 'warm' }).eq('id', leadId);
// DELETE (id-addressed)
await db.from('leads').delete().eq('id', leadId);
// Raw SQL escape hatch
const { data: rows } = await db.rpc("SELECT * FROM leads WHERE score > 80");The query builder is thenable — await runs it directly, no .exec() needed.
Every call resolves to { data, error } (Supabase-compatible shape).
Filter operators
eq neq gt gte lt lte like ilike in is or
await db.from('leads').select('*').in('status', ['hot', 'warm']);
await db.from('leads').select('*').is('email', 'not null');
await db.from('leads').select('*').or("score > 90 OR status = 'hot'");Upsert
The onConflict column must be declared unique when the table is created:
import NWDB from 'nwdb-sdk';
const raw = new NWDB({ apiUrl: 'https://api.nwdb.dev', apiKey });
await raw.createTable('leads', [
{ name: 'email', type: 'string', unique: true },
{ name: 'name', type: 'string' },
{ name: 'score', type: 'number' },
]);
await db.from('leads').upsert(
{ email: '[email protected]', name: 'Acme', score: 90 },
{ onConflict: 'email' }
);Complex SQL — JOIN / GROUP BY / CTE / subquery
const { data } = await db.rpc(`
SELECT status, COUNT(*) AS n, AVG(score) AS avg_score
FROM leads GROUP BY status
`);Basic eq/neq/gt/... use the fast /records path; in/is/or and rpc()
run as SQL scoped to your workspace schema. Filter values are sanitised
against injection; cross-tenant / system-table access is rejected server-side.
Legacy explicit-method client
The original NWDB class is still exported and supported:
import NWDB from 'nwdb-sdk';
const db = new NWDB({ apiKey: 'nwdb_...', apiUrl: 'https://api.nwdb.dev' });
await db.createTable('users', [
{ name: 'name', type: 'string', required: true },
{ name: 'email', type: 'string', required: true },
]);
await db.createRecord('users', { name: 'Taro', email: '[email protected]' });
// Vector search
await db.createCollection('docs', 768);
await db.upsertVector('docs', { id: 'doc1', vector: [/* 768 numbers */], content: 'Hello' });
const hits = await db.searchVectors('docs', { query: 'greeting', top_k: 5 });Get an API key
Sign up at nwdb.dev → create a workspace → copy the key from Settings → API Keys. Plans: Hobby ¥3,500 / Pro ¥7,800 / Team ¥19,800 / Scale ¥50,000 (monthly).
License
MIT
