sqlite-hub-client 0.2.0 → 0.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -1,23 +1,23 @@
1
- # sqlite-db-client
1
+ # sqlite-hub-client
2
2
 
3
- High-level TypeScript/JavaScript client for [sqlite-db-hub](https://github.com/0xdps/sqlite-db-hub).
3
+ High-level TypeScript/JavaScript client for [sqlite-hub](https://github.com/0xdps/sqlite-hub).
4
4
  Comes with a full set of APIs for schema management, reads, writes — all using an **adapter** abstraction so the same code works over HTTP today and can talk to SQLite directly later.
5
5
 
6
6
  ## Install
7
7
 
8
8
  ```bash
9
- npm install sqlite-db-client
9
+ npm install sqlite-hub-client
10
10
  ```
11
11
 
12
12
  ## Quick start
13
13
 
14
14
  ```ts
15
- import { connect } from "sqlite-db-client";
15
+ import { connect } from "sqlite-hub-client";
16
16
 
17
17
  const db = connect({
18
- url: process.env.SQLITE_DB_HUB_URL, // e.g. https://my-app.up.railway.app
19
- token: process.env.SQLITE_DB_HUB_TOKEN, // ADMIN_TOKEN set on the service
20
- db: "my-service", // database name
18
+ url: process.env.SQLITE_HUB_URL, // e.g. https://my-app.up.railway.app
19
+ token: process.env.SQLITE_HUB_SERVICE_SECRET, // service_secret from admin Settings
20
+ db: "my-service",
21
21
  });
22
22
 
23
23
  // Create table
@@ -90,14 +90,12 @@ const result = await db.exec("PRAGMA table_info(users)");
90
90
 
91
91
  ### `connect(options)` — create a database client
92
92
 
93
- | Option | Type | Required | Description |
94
- | --------- | -------- | -------- | ----------------------------------------------------- |
95
- | `url` | `string` | ✅ | Base URL of your sqlite-db-hub deployment |
96
- | `token` | `string` | ✅ | `ADMIN_TOKEN` configured on the sqlite-db-hub service |
97
- | `db` | `string` | ✅ | Name of the database to operate on |
98
- | `timeout` | `number` | ❌ | Request timeout in ms (default: `10000`) |
99
-
100
- Returns a `Database` instance.
93
+ | Option | Type | Required | Description |
94
+ | --------- | -------- | -------- | ----------------------------------------------------------------------------------------------- |
95
+ | `url` | `string` | ✅ | Base URL of your sqlite-hub deployment |
96
+ | `token` | `string` | ✅ | Per-DB `service_secret` generate one in the admin dashboard under Settings → Service secret |
97
+ | `db` | `string` | ✅ | Name of the database to operate on |
98
+ | `timeout` | `number` | ❌ | Request timeout in ms (default: `10000`) |
101
99
 
102
100
  ---
103
101
 
@@ -251,12 +249,12 @@ await db.exec("CREATE INDEX IF NOT EXISTS idx_title ON posts (title)");
251
249
  ## Architecture
252
250
 
253
251
  ```
254
- sqlite-db-client
252
+ sqlite-hub-client
255
253
  ├── index.ts ← connect() factory + all public exports
256
254
  ├── database.ts ← Database class — all high-level APIs
257
255
  └── adapters/
258
256
  ├── types.ts ← IAdapter interface (exec only)
259
- ├── http.ts ← HttpAdapter (sqlite-db-hub over HTTP)
257
+ ├── http.ts ← HttpAdapter (sqlite-hub over HTTP)
260
258
  └── index.ts ← re-exports
261
259
  ```
262
260
 
@@ -264,8 +262,8 @@ Adding a direct SQLite adapter in the future is a one-liner:
264
262
 
265
263
  ```ts
266
264
  // future
267
- import { Database } from "sqlite-db-client";
268
- import { DirectAdapter } from "sqlite-db-client/adapters/direct"; // coming soon
265
+ import { Database } from "sqlite-hub-client";
266
+ import { DirectAdapter } from "sqlite-hub-client/adapters/direct"; // coming soon
269
267
 
270
268
  const db = new Database(new DirectAdapter({ path: "./local.db" }));
271
269
  // same API — createTable, find, insert, update, delete…
@@ -273,140 +271,3 @@ const db = new Database(new DirectAdapter({ path: "./local.db" }));
273
271
 
274
272
  ## License
275
273
 
276
- MIT
277
-
278
- ## Install
279
-
280
- ```bash
281
- npm install sqlite-db-hub-client
282
- ```
283
-
284
- Or directly from GitHub (before the npm package is published):
285
-
286
- ```bash
287
- npm install github:0xdps/sqlite-db-hub-client
288
- ```
289
-
290
- ## Quick start
291
-
292
- ```ts
293
- import { createClient } from "sqlite-db-hub-client";
294
-
295
- const db = createClient({
296
- url: process.env.SQLITE_DB_HUB_URL, // e.g. https://my-app.up.railway.app
297
- token: process.env.SQLITE_DB_HUB_TOKEN, // ADMIN_TOKEN set on the service
298
- db: "my-service", // name of the database to use
299
- });
300
-
301
- // Create a table
302
- await db.run(`
303
- CREATE TABLE IF NOT EXISTS users (
304
- id INTEGER PRIMARY KEY AUTOINCREMENT,
305
- email TEXT NOT NULL UNIQUE,
306
- name TEXT
307
- )
308
- `);
309
-
310
- // Insert a row
311
- await db.run("INSERT INTO users (email, name) VALUES (?, ?)", [
312
- "alice@example.com",
313
- "Alice",
314
- ]);
315
-
316
- // Query rows (typed)
317
- const users = await db.query<{ id: number; email: string; name: string }>(
318
- "SELECT * FROM users"
319
- );
320
-
321
- // Query a single row (or null)
322
- const user = await db.queryOne<{ id: number; email: string }>(
323
- "SELECT * FROM users WHERE email = ?",
324
- ["alice@example.com"]
325
- );
326
- ```
327
-
328
- ## API
329
-
330
- ### `createClient(options)` / `new FileDbClient(options)`
331
-
332
- | Option | Type | Required | Description |
333
- | --------- | -------- | -------- | ----------------------------------------------------- |
334
- | `url` | `string` | ✅ | Base URL of your sqlite-db-hub deployment |
335
- | `token` | `string` | ✅ | `ADMIN_TOKEN` configured on the sqlite-db-hub service |
336
- | `db` | `string` | ✅ | Name of the database to operate on |
337
- | `timeout` | `number` | ❌ | Request timeout in ms (default: `10000`) |
338
-
339
- ---
340
-
341
- ### `db.exec(sql, bindings?)`
342
-
343
- Run any SQL statement. Returns a `QueryResult` for SELECT, or an `ExecResult` for writes.
344
-
345
- ```ts
346
- const result = await db.exec("SELECT count(*) as n FROM users");
347
- // { headers: [...], rows: [{ n: 1 }], rowsRead: 1 }
348
- ```
349
-
350
- ---
351
-
352
- ### `db.query<T>(sql, bindings?)`
353
-
354
- Run a SELECT and return typed rows.
355
-
356
- ```ts
357
- const rows = await db.query<{ id: number; name: string }>(
358
- "SELECT id, name FROM users WHERE id > ?",
359
- [5]
360
- );
361
- ```
362
-
363
- ---
364
-
365
- ### `db.queryOne<T>(sql, bindings?)`
366
-
367
- Run a SELECT and return the first row, or `null` if no results.
368
-
369
- ```ts
370
- const row = await db.queryOne<{ name: string }>(
371
- "SELECT name FROM users WHERE id = ?",
372
- [1]
373
- );
374
- ```
375
-
376
- ---
377
-
378
- ### `db.run(sql, bindings?)`
379
-
380
- Run a write statement (INSERT, UPDATE, DELETE, CREATE, ALTER, DROP). Returns `{ rowsAffected, lastInsertRowid }`.
381
-
382
- ```ts
383
- const { rowsAffected, lastInsertRowid } = await db.run(
384
- "INSERT INTO jobs (payload) VALUES (?)",
385
- [JSON.stringify({ task: "send-email" })]
386
- );
387
- ```
388
-
389
- ## Types
390
-
391
- ```ts
392
- interface QueryResult<T> {
393
- headers: ColumnHeader[];
394
- rows: T[];
395
- rowsRead: number;
396
- }
397
-
398
- interface ExecResult {
399
- rowsAffected: number;
400
- lastInsertRowid: number | null;
401
- }
402
-
403
- interface ColumnHeader {
404
- name: string;
405
- displayName: string;
406
- originalType: string | null;
407
- }
408
- ```
409
-
410
- ## License
411
-
412
- MIT
@@ -1,8 +1,12 @@
1
1
  import type { IAdapter, RawResult } from "./types.js";
2
2
  export interface HttpAdapterOptions {
3
- /** Base URL of the sqlite-db-hub deployment, e.g. https://my-app.up.railway.app */
3
+ /** Base URL of the sqlite-hub deployment, e.g. https://my-app.up.railway.app */
4
4
  url: string;
5
- /** ADMIN_TOKEN configured on the sqlite-db-hub service */
5
+ /**
6
+ * Per-DB `service_secret` for this database.
7
+ * Generate one in the sqlite-hub admin dashboard under Settings → Service secret.
8
+ * Sent as `Authorization: Bearer <token>` on every request.
9
+ */
6
10
  token: string;
7
11
  /** Name of the database to operate on */
8
12
  db: string;
@@ -10,7 +14,7 @@ export interface HttpAdapterOptions {
10
14
  timeout?: number;
11
15
  }
12
16
  /**
13
- * Adapter that executes SQL via the sqlite-db-hub HTTP API
17
+ * Adapter that executes SQL via the sqlite-hub HTTP API
14
18
  * (POST /api/db/:name/exec).
15
19
  */
16
20
  export declare class HttpAdapter implements IAdapter {
@@ -6,7 +6,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
6
6
  exports.HttpAdapter = void 0;
7
7
  const fetch_1 = __importDefault(require("@pingpong-js/fetch"));
8
8
  /**
9
- * Adapter that executes SQL via the sqlite-db-hub HTTP API
9
+ * Adapter that executes SQL via the sqlite-hub HTTP API
10
10
  * (POST /api/db/:name/exec).
11
11
  */
12
12
  class HttpAdapter {
@@ -30,7 +30,7 @@ class HttpAdapter {
30
30
  if (res.isError()) {
31
31
  const body = res.data;
32
32
  throw new Error(body?.error ??
33
- `sqlite-db-hub: HTTP ${res.status} for db "${this.options.db}"`);
33
+ `sqlite-hub: HTTP ${res.status} for db "${this.options.db}"`);
34
34
  }
35
35
  return res.data;
36
36
  }
@@ -1,4 +1,4 @@
1
- import type { IAdapter, ExecResult, RawResult } from "./adapters/types.js";
1
+ import type { ExecResult, IAdapter, RawResult } from "./adapters/types.js";
2
2
  export type WhereClause = Record<string, unknown>;
3
3
  export type OrderDirection = "ASC" | "DESC";
4
4
  export interface FindOptions {
package/dist/database.js CHANGED
@@ -217,14 +217,14 @@ class Database {
217
217
  async _read(sql, bindings) {
218
218
  const result = await this.adapter.exec(sql, bindings);
219
219
  if (!isQueryResult(result)) {
220
- throw new Error(`sqlite-db-hub: expected SELECT, got write result for: ${sql}`);
220
+ throw new Error(`sqlite-hub: expected SELECT, got write result for: ${sql}`);
221
221
  }
222
222
  return result.rows;
223
223
  }
224
224
  async _write(sql, bindings) {
225
225
  const result = await this.adapter.exec(sql, bindings);
226
226
  if (!isExecResult(result)) {
227
- throw new Error(`sqlite-db-hub: expected write result, got SELECT for: ${sql}`);
227
+ throw new Error(`sqlite-hub: expected write result, got SELECT for: ${sql}`);
228
228
  }
229
229
  return result;
230
230
  }
package/dist/index.d.ts CHANGED
@@ -1,17 +1,17 @@
1
1
  export { Database } from "./database.js";
2
- export type { WhereClause, FindOptions, ColumnDef, CreateTableOptions, CreateIndexOptions, OrderDirection, } from "./database.js";
2
+ export type { ColumnDef, CreateIndexOptions, CreateTableOptions, FindOptions, OrderDirection, WhereClause } from "./database.js";
3
3
  export { HttpAdapter } from "./adapters/http.js";
4
4
  export type { HttpAdapterOptions } from "./adapters/http.js";
5
- export type { IAdapter, ColumnHeader, QueryResult, ExecResult, RawResult, } from "./adapters/types.js";
6
- import { Database } from "./database.js";
5
+ export type { ColumnHeader, ExecResult, IAdapter, QueryResult, RawResult } from "./adapters/types.js";
7
6
  import { type HttpAdapterOptions } from "./adapters/http.js";
7
+ import { Database } from "./database.js";
8
8
  /**
9
- * Create a Database connected to a sqlite-db-hub service over HTTP.
9
+ * Create a Database connected to a sqlite-hub service over HTTP.
10
10
  *
11
11
  * @example
12
12
  * const db = connect({
13
- * url: process.env.SQLITE_DB_HUB_URL,
14
- * token: process.env.SQLITE_DB_HUB_TOKEN,
13
+ * url: process.env.SQLITE_HUB_URL,
14
+ * token: process.env.SQLITE_HUB_SERVICE_SECRET, // service_secret from admin Settings
15
15
  * db: "my-service",
16
16
  * });
17
17
  */
package/dist/index.js CHANGED
@@ -7,15 +7,15 @@ Object.defineProperty(exports, "Database", { enumerable: true, get: function ()
7
7
  var http_js_1 = require("./adapters/http.js");
8
8
  Object.defineProperty(exports, "HttpAdapter", { enumerable: true, get: function () { return http_js_1.HttpAdapter; } });
9
9
  // ── Convenience factory ──────────────────────────────────────────────────────
10
- const database_js_2 = require("./database.js");
11
10
  const http_js_2 = require("./adapters/http.js");
11
+ const database_js_2 = require("./database.js");
12
12
  /**
13
- * Create a Database connected to a sqlite-db-hub service over HTTP.
13
+ * Create a Database connected to a sqlite-hub service over HTTP.
14
14
  *
15
15
  * @example
16
16
  * const db = connect({
17
- * url: process.env.SQLITE_DB_HUB_URL,
18
- * token: process.env.SQLITE_DB_HUB_TOKEN,
17
+ * url: process.env.SQLITE_HUB_URL,
18
+ * token: process.env.SQLITE_HUB_SERVICE_SECRET, // service_secret from admin Settings
19
19
  * db: "my-service",
20
20
  * });
21
21
  */
package/package.json CHANGED
@@ -1,14 +1,14 @@
1
1
  {
2
2
  "name": "sqlite-hub-client",
3
- "version": "0.2.0",
4
- "description": "High-level SQLite client for sqlite-db-hub — HTTP adapter included, direct SQLite coming soon",
3
+ "version": "0.4.0",
4
+ "description": "High-level SQLite client for sqlite-hub — HTTP adapter included, direct SQLite coming soon",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",
7
7
  "files": ["dist", "README.md"],
8
8
  "scripts": {
9
9
  "build": "tsc"
10
10
  },
11
- "keywords": ["sqlite", "sqlite-db-hub", "railway", "orm", "database"],
11
+ "keywords": ["sqlite", "sqlite-hub", "railway", "orm", "database"],
12
12
  "license": "MIT",
13
13
  "dependencies": {
14
14
  "@pingpong-js/fetch": "^1.0.2"