Skip to content
openvibers/openvibe.sdk
Commits
main · README.md
-
Add openvibe-sdk/commerce, the shared Billing client for Tips and VIPOpenVibers · 4 Oct 2026
836c0bc
-
Fix new SDK subpath tests and document Fabric exports (#8)OpenVibers · 4 Oct 2026
9b63449
-
T1 lane A step 4 — OpenVibe.SDK: add the Fabric modules… (#4)OpenVibers · 3 Oct 2026
9300976
-
Add user-owned trust class and bump openvibe-contracts to 0.86.0 (#3)OpenVibers · 3 Oct 2026
10417ad
-
SDK 0.26.0 (plan T1 kits): openvibe-sdk/service is the service kit. gracefulStop() and within() are OpenVibe.Network's and OpenVibe.Community's server/graceful.js (stop steps, server.close with Connection: close on requests in flight, idle connections swept and event streams destroyed, close steps, one stop per process) plus the exit code of a blown deadline, beforeDrain and handles; the deadline timer stays referenced so a stuck step exits with the deadline's code. The error layer: createServiceError, ServiceError, asServiceError, run, wrap, sendError, jsonBody (400 request.invalid_json, 413 request.too_large), privateNoStore and the opt-in jsonErrors. The readiness, metrics, release and problem helpers are re-exported from openvibe-shared and openvibe-contracts, required on first use (the SDK gains no dependency). scripts/esm.js turns a lazy CommonJS getter into an ESM function. Types, ESM entry, docs/service.md, README and CHANGELOG. Tests: service (9 cases, a drain timeout with no requests cuts nothing), pack and browser entries.OpenVibers · 1 Oct 2026
314bb57
-
SDK 0.25.0 (plan T1 kits): openvibe-sdk/sso createSsoClient() is a product site's sign-in with OpenVibe.Network in one call (router with /login state + PKCE S256, /callback server-side exchange, /fedcm, /logout, /me, /refresh; optionalAuth/requireAuth; offline verification through the shared JWKS client; next limited to this site and the Network), replacing the copies in Blog, Coupons, Deals, Host, News and Trade. openvibe-sdk/events createServiceOutbox() is a service's outbox in one call around createPgOutbox (emit joins the change's transaction, emitIn, moderationAction, start/stop/kick/status; the relay is off and says so without the events URL or client secret), replacing the wrapper nine services copied. Types, ESM entries, README and CHANGELOG. 47/47 test files with the test services.OpenVibers · 29 Sept 2026
9b5bbec
-
SDK 0.24.0: openvibe-sdk/auth verifyServiceToken(token, { jwks | publicKey, issuer, audience, contracts }) for services that receive service or app tokens. The SDK picks the key (the kid's, else each; the shared JWKS client or a pinned PEM) and every rule is the service's own pinned openvibe-contracts verifyServiceToken, passed in as contracts, so the SDK carries no copy of the rules to drift. No key is token.unavailable with a fixed reason; the fetch error goes to log. verifyUserToken refuses a typed token (typ or purpose: a realtime ticket, a FedCM assertion) as token.not_user. Types, ESM entry, bundle and docs. npm test 45/45 with the test services.OpenVibers · 29 Sept 2026
dbf74dd
-
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 docs: moving a service from SQLite to PostgreSQL and Valkey (ADR-035), the procedure every migration follows: dependencies; the schema as migrations with a SQLite-to-PostgreSQL type table (epoch-ms integers stay bigint so APIs keep their numbers, 0/1 becomes boolean, JSON text jsonb, CURRENT_TIMESTAMP timestamptz); the code idioms (prepare/get/all/run/transaction to the async layer, OR IGNORE/OR REPLACE to ON CONFLICT, LIKE to ILIKE, OFFSET to keyset, loops to ANY/batched inserts); the pooler's rules; serializable money paths; readiness and boot; per-process state to Valkey (limits, caches, fan-out, once-only jobs to queues or leases); tests on PGlite with query-count, migration and import checks; the rehearsed import and the production switch with its 7-day rollback file; and the evidence each migration records. Published with the package (files: docs/).OpenVibers · 28 Sept 2026
83b9a6f
-
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
-
v0.12.0: openvibe-sdk/limits (roadmap WS-R task 4). createActorLimiter({ limits: { minute, hour, day } }) gives limits(name, ownLimits), Express middleware counting each actor in fixed windows at a capability boundary: the verified principal (svc:live, app:…), else the signed-in person (user:<subject>), else ip:<address>; actor(req) overrides, null skips. Past a limit it answers 429 problem+json rate_limited with Retry-After from the tightest exceeded window, before the route runs. A route's limits replace the defaults window by window; counters are per process and bounded (maxActors); onLimited observes refusals. Node only (browser: null), ESM and types. test/limits.test.js; browser-entries and pack tests list the new subpath. npm test 33/33.OpenVibers · 28 Sept 2026
0a4909d
-
v0.11.0: openvibe-sdk/chat (global chat, rooms and DMs over REST as the token's person; writes never retried) and openvibe-sdk/ai (runs create/get/list/cancel/retry/citations, waitFor, and the direct ai.<op> operations; a create is retried only with an idempotency key) — WS-F task 4OpenVibers · 25 Sept 2026
a4aae65
-
v0.10.0: openvibe-sdk/search (WS-F task 4): OpenVibe.Search's query API — query with owner/type/lang/facet filters and facet counts, iterate across cursor pages, suggest, document by id (null when missing or not visible), actingSubject for services with search.query.delegate; in the browser bundle, ESM and typesOpenVibers · 25 Sept 2026
01851f1
-
v0.9.0: openvibe-sdk/auth createRevocationStore — per-person token cutoffs from network.user.token_valid_after (Contracts 0.39.0): apply(event), isRevoked(claims) with Network's rule iat * 1000 < valid_after, only forward, source network only; SQLite-backed or in memoryOpenVibers · 24 Sept 2026
5d9576f
-
The OpenVibe Frame: openvibe-sdk/chrome is now openvibe-sdk/frame (mountFrame, frameTags, frameConfig) — the navbar, footer and themes every OpenVibe site sits in; 'chrome' was borrowed UI jargon easily mistaken for the browser. Not yet tagged, so no aliasOpenVibers · 24 Sept 2026
9ea504e
-
0.8.0: openvibe-sdk/chrome, the network's shared chrome for any app: mountChrome() loads and mounts the universal navbar (account menu, notifications, site switcher, sign in/out through the app's own sessionUrl/loginUrl/logoutUrl), the shared footer (network and legal links, 'shipped X ago', Updates) and themes from openvibe.network; chromeTags() gives server-rendered pages the same markup with the config escaped; never throws for a network failure; https bases onlyOpenVibers · 24 Sept 2026
4ecf0f4
-
0.7.0: openvibe-sdk/vip, the VIP consumer seam (createVipClient, createVipCache) published once instead of the copies of openvibe-vip/client in Chat, Community and Blog; server-only; fail-closed, one token retry, cache convergence on vip.membership.changed and Billing's entitlement events. Types, ESM entry, README row, CHANGELOG; test/vip.test.jsOpenVibers · 24 Sept 2026
483e93f
-
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
-
Docs: STATUS.json and README match production (2026-09-23)OpenVibers · 23 Sept 2026
cc034f3
-
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
-
README: no Contracts peer dependency since 0.2.2OpenVibers · 23 Sept 2026
207e11f
-
openvibe-sdk 0.1.0: core client, auth, registry, identity, modules, events, realtime, media, community and a mock platformOpenVibers · 23 Sept 2026
c5d6d28
-
Charter: OpenVibe.SDK as defined in the OpenVibe realignment plan (placeholder, no code yet)OpenVibers · 21 Sept 2026
341ec59