Skip to content
openvibers/openvibe.sdk
Commits
main · STATUS.json
-
createTestDb's pg lease no longer keeps a test process alive; release 0.31.1 (#15)OpenVibers · 5 Oct 2026
5c53d69
-
Put the HTTP telemetry middleware and signals in the service kit (#14)OpenVibers · 5 Oct 2026
79df4a8
-
Publish a Bot client (openvibe-sdk/bot) (#13)OpenVibers · 5 Oct 2026
c955d8c
-
Load test databases from a migrated PGlite snapshot in createTestDb (#12)OpenVibers · 5 Oct 2026
279bd46
-
Add openvibe-sdk/commerce, the shared Billing client for Tips and VIPOpenVibers · 4 Oct 2026
836c0bc
-
v0.23.1: the release version is whole (SDK_VERSION, lockfile and browser bundle said 0.22.0 in 0.23.0); a malformed JWKS entry is skipped instead of failing the whole key set; a kid-less legacy JWKS never refetches for a kid; log declared on the verify options. Found by an independent DeepSeek review of v0.23.0. npm test 44/44 on Node 22 with the test services, run after the version bump.OpenVibers · 29 Sept 2026
b673d43
-
v0.23.0: a JWKS client behind token verification: the last good keys through outages, backoff, rotation honoured at once, unknown-kid floods throttled, status for readiness (plan T0/T1). npm test 44/44 on Node 22 with the test services.OpenVibers · 29 Sept 2026
063799e
-
v0.22.0: openvibe-sdk/placement (the adaptive fabric's planner: constraints before cost, marginal cost after free allowances with forecast and reserve, owned-capacity spill-over, hysteresis, rendezvous hashing, power of two choices, Ed25519-signed route plans with a last-good holder) and openvibe-sdk/govern (weighted cost units, tiered windowed quotas, reserve/commit/release settled by any process, idempotent charges, concurrency leases, on Valkey or in memory).OpenVibers · 28 Sept 2026
36fb8c0
-
v0.21.3: createTestDb returns url and directUrl for a spawned service process; sqlfix's envelope rewrite is idempotent.OpenVibers · 28 Sept 2026
59b99c5
-
v0.21.2: an outbox flush() during a relay pass gets the next pass; test containers keep PostgreSQL within its connections.OpenVibers · 28 Sept 2026
8ca57de
-
v0.21.1: the PostgreSQL outbox publishes in write order; migration tools and lessons from the Media pass.OpenVibers · 28 Sept 2026
faa3550
-
v0.21.0: createPgRevocationStore (token cutoffs on PostgreSQL), Valkey without the INFO ready check, and migration tools for SQLite text timestamps.OpenVibers · 28 Sept 2026
b86b523
-
v0.20.4: bytea comes back as a Buffer from both adapters (PGlite returned a Uint8Array, so Buffer.isBuffer and toString('hex') differed between tests and production; found with openvibe-shared's config store on PostgreSQL). npm test 41/41 with the containers.OpenVibers · 28 Sept 2026
e0ccc14
-
v0.20.3: importSqlite reads the connection's current schema instead of public only, so rehearsals can import into a createTestDb schema on the containers (production is unchanged, its search path is public). Documents that an embedded PGlite can break on very large rows (OpenVibe.AI's runs; the same import verifies on PostgreSQL). tools/asyncify: functions imported by destructuring from a converted file are async when they are there (AI's seed was left unawaited). npm test 41/41 with the containers.OpenVibers · 28 Sept 2026
06ca366
-
v0.20.2: importSqlite refuses a source table with no target table instead of skipping it silently (a table a module created at runtime and the migration forgot would have been dropped by a switch; found converting AI). SQLite's own tables and FTS5 virtual tables with their shadows are still skipped; anything else not imported on purpose goes in the new skipSource option (runSqliteMigration too). An audit of the eleven switched services found nothing lost. tools/asyncify: the codemod follows aliases of async module methods, reports computed calls on module APIs, orders nested insertions explicitly (no more garbled Promise.all wraps); the schema converter handles WHEN on immutability triggers, quoted reserved column names (window, user) and NOCASE on expressions; sqlfix quotes reserved names in SQL strings, rewrites JSON.parse of jsonb envelopes and assert.throws over statements, and lists the order sqlfix → asyncify. npm test 41/41 with the containers.OpenVibers · 28 Sept 2026
9a251b4
-
v0.20.1: openvibe-sdk/db runs one query at a time per transaction connection, so Promise.all over db calls inside a transaction no longer queues queries on a busy node-postgres client (deprecated; pg@9 refuses it); outside a transaction calls still run concurrently on the pool. Also fixes 0.20.0's release: core.SDK_VERSION said 0.19.0 and the browser bundle was stale (CI was red). tools/asyncify: the codemod awaits a helper's calls of an async function it was passed (waitFor(fn), conflictGuard(fn), route wrappers) and leaves a promise started early and awaited later alone; gen-migration --ensure captures modules' ensureSchema() SQL and --no-outbox/--no-inbox; the schema converter turns a bare INTEGER PRIMARY KEY into an identity by default and drops WITHOUT ROWID; sqlfix rewrites db.transaction(fn)() and db.inTransaction. npm test 41/41 with the containers.OpenVibers · 28 Sept 2026
e155d19
-
v0.20.0: db.afterCommit(fn) runs fn once the running transaction commits, never after a rollback; a savepoint that rolls back drops the hooks added inside it. Hooks run in order, outside the transaction, with the connection back in the pool; one that throws is logged and the rest still run. Outside a transaction fn runs on the next turn. It replaces the setImmediate-after-a-synchronous-transaction pattern of better-sqlite3 services (News' comment-thread visibility first). db.stats().open counts transactions in progress. tools/asyncify gains sqlite-schema-to-pg.js and g1pass.py, and asyncify.js treats { name: asyncFn } as an async method. docs/migrating-to-postgresql.md §7 has News' lessons (rowid tiebreaks, GREATEST, qualified ON CONFLICT targets, afterCommit, the PG inbox). npm test 41/41; db-ambient also through PgBouncer.OpenVibers · 28 Sept 2026
9a653ce
-
0.19.0: runSqliteMigration in openvibe-sdk/db, a service's scripts/migrate-to-postgres.js in one call. It migrates as the owner (or into PGlite with --pglite for a rehearsal) and imports into emptied tables. It makes text PostgreSQL refuses storable: a NUL is dropped and an unpaired surrogate becomes U+FFFD, in text and inside JSON, and every column where that happened is reported. It verifies counts and checksums, prints the report (--json for all of it), and answers 0 only when everything verified. Generalised from Tips' script; Wiki's is a few lines around it. test/sqlite-cli.test.js; 41/41 test files with the containers.OpenVibers · 28 Sept 2026
0a4b221
-
0.18.1. db.prepare: a statement with one parameter takes a single array argument as its value (WHERE id = ANY(?)); only statements with several parameters read one array as the list of values. Found converting OpenVibe.Wiki. openvibe-sdk/testing gains createTestDb({ migrations, store, service }): a migrated PGlite database, or on the containers roles and a schema of its own, shaped as the host's add-service.sh makes them. Setup and teardown take an advisory lock, so parallel runs never race on the catalog ("tuple concurrently updated", found in Wiki's tests). Also createTestValkey. Services drop their copied helpers. 40/40 test files with the containers.OpenVibers · 28 Sept 2026
1b59c3b
-
0.18.0: moving a service off better-sqlite3 becomes mostly mechanical. Ambient transactions (on by default): inside db.tx(fn), plain db calls, db.prepare statements and library stores handed db join the running transaction through AsyncLocalStorage; a db.tx inside is a savepoint; a promise the transaction did not await runs on the pool afterwards; db.detached(fn) leaves on purpose; db.inTransaction() tells. db.prepare(text) gives async better-sqlite3-shaped statements (get, all, run with changes, rows and lastInsertRowid from RETURNING, pluck) with ? and @name/:name parameters compiled to $n, leaving strings, identifiers, dollar quotes, comments and :: casts alone. importSqlite verification treats JSON null and SQL NULL as equal (found in the Tips migration). The migration guide gains the short path and the Tips lessons. test/db-ambient.test.js passes on PGlite and through PgBouncer; 39/39 test files.OpenVibers · 28 Sept 2026
4762731
-
0.17.0: openvibe-sdk/geo, the nearest OpenVibe node (roadmap WS-X1 task 5, ADR-034 §12). It works in the browser and on the server. nodes({ role, region }) reads Network's public node registry (GET /api/v1/nodes, network.node-list-result@1) without a token. measure(nodes) times each beacon several times and keeps the best sample, because the first also pays for DNS and TLS; results come fastest first. nearest() returns the fastest measured node that is up or degraded; when nothing can be measured it falls back to preferRegion and then to the first healthy node, and says measured: false. Game-server lists, ping tools and ingest pick use it. geo is in the root export and the browser bundle, and openre is in the root export.OpenVibers · 28 Sept 2026
922eba6
-
0.16.0: openvibe-sdk/openre, the client for OpenRe.Stream, the platform's streaming engine. It covers streams (byExternalRef, create, get, update, delete, keys, rotateKey, destinations, addDestination), destinations (update, delete, test, start, stop, logs), sessions (list, get, playback cached 10 s, end, outputs), outputLogs, workers and manageUrl. Every call uses a service token for openvibe.openre, and { subject } acts for a person (X-OV-Subject). A missing stream or session is null; refusals are OpenVibeError. It is server-only (browser: null) and exported for CJS, ESM and types. Products stop carrying their own copy, starting with OpenVibe.Live.OpenVibers · 28 Sept 2026
fbc8893
-
SDK 0.15.0: the event outbox and inbox on PostgreSQL (ADR-004 on ADR-035), in openvibe-sdk/events. createPgOutbox(db, { events }) takes an openvibe-sdk/db handle. enqueue(t, envelope) requires the transaction handle, so the event exists if and only if the change commits. The relay claims due rows with a lease (FOR UPDATE SKIP LOCKED), so any number of processes and hosts relay one table without sending an event twice, and a dead relay's rows return after the lease. Backoff, per-row permanent refusals, the kept seq, pending, rejected and prune are as before. createPgInbox(db).once(consumer, eventId, async (t) => …) runs a handler once in one transaction with its receipt; a failed handler leaves none. outboxSchema() and inboxSchema() give the DDL for service migrations. The SQLite versions stay for services not yet moved. The db slow-query log is off by default on PGlite (its first query includes the WASM start). test/pg-outbox.test.js runs on PGlite and through PgBouncer, where three relays sharing one table send 60 events with none twice. npm test 36/36 with the containers.OpenVibers · 28 Sept 2026
dc4e1be
-
SDK 0.14.0: the async data layer and the Valkey modules (ADR-035 and its amendment; roadmap WS-X2). openvibe-sdk/db: createDb({ url | pglite, service }) with query, many, maybe, one, value and exec on a safe sql tagged template (every value a bind parameter, nesting fragments, sql.ident/set/insert/join/json); tx(fn, { isolation, retries }) retrying 40001 and 40P01, with nested savepoints; ready() reporting the store that answered; query-time histogram, pool gauges and a slow-query log without values. node-postgres through PgBouncer in production and PGlite (real PostgreSQL in-process) in tests return identical rows: int8 as Number (refused past 2^53), timestamps as ISO strings, dates as YYYY-MM-DD, numeric as exact text, json parsed. db.migrate runs numbered expand/migrate/contract SQL files once, with checksums (edits refused), order kept, an advisory lock, contract migrations held until their expand is 7 days old, and -- no-transaction. importSqlite moves a service's SQLite file into its schema: parents first, conversion by target type, identities kept and sequences advanced, lost columns refused unless dropped, streamed verification of counts and checksums. openvibe-sdk/valkey (auto-pipelined, prefix-confined), cache (cross-process single-flight, tags), queue (at-least-once on streams: retries with backoff, dead letters, delays, dedupe, reclaim of hung workers' jobs), pubsub, and createValkeyLimitStore for limits shared by every process (in-process counting if Valkey fails); each has an in-process twin. Drivers are optional peers loaded on use. scripts/test-services.sh starts PostgreSQL 18 + PgBouncer (transaction, SCRAM) + Valkey 9 containers; CI runs the suite against them. npm test: 35/35 with the containers (the same db cases pass on PGlite and through PgBouncer; 8 concurrent serializable increments all land), 33/35 with 2 skipped without them.OpenVibers · 28 Sept 2026
1a93eeb
-
README and STATUS.json are current (roadmap WS-U task 3): the README gains Purpose, Capabilities (none held; clients call with the app's token, so the app needs the grant), Acceptance (what the test files prove), Security (SECURITY.md, no secrets in browser files, retries, webhook v2, the Frame's origins), Deploy (a tag that services and apps pin), Does not own and Depends on sections. Stale facts corrected: the status line and install line name v0.12.0 (was v0.6.0 untagged and v0.5.0), the old per-service pin list and CI history are gone, the copied contract types come from Contracts v0.49.0, and Chat is wrapped over REST since v0.11.0. STATUS.json names version 0.12.0, gains deployed false, contracts and features, and is updated 2026-09-28.OpenVibers · 28 Sept 2026
5abe851
-
0.6.0: openvibe-sdk/tools (the Tools registry and run API) and jobs retry/references; README Tools section, CHANGELOGOpenVibers · 23 Sept 2026
a22927b
-
0.5.0: Media object API v2 client (createObjectsClient in openvibe-sdk/media)OpenVibers · 23 Sept 2026
7d3eff3
-
0.4.0: replay protection for Events webhook deliveries (signature v2)OpenVibers · 23 Sept 2026
5351262
-
0.3.1: developer-app events and Media sandbox tenants in the mock as production has themOpenVibers · 23 Sept 2026
04f0dee
-
0.3.0: developer apps and the gaps OpenVibe.Examples foundOpenVibers · 23 Sept 2026
e788c67
More commits