Initial scaffold: @ng-eventually/client — SDK-shaped polyfill over NextGraph

Generic polyfill layer that makes a single NextGraph broker behave like the
not-yet-shipped multi-user NextGraph (emulated capabilities + inbox). Zero app domain.

@ng-eventually/client exposes an SDK-identical surface (ng, useShape, inbox); the
polyfill bootstrap (configure + capability helpers) is isolated under /polyfill, so
the main entry stays a drop-in for @ng-org/web|orm. The real SDK is injected at
configure() (no hard import → build-alias safe + testable).

Scaffold: NextGraph wiring stubbed with TODO; capability helpers implemented and
unit-tested (4 tests, typecheck clean). The global-index curator is deferred — in
NextGraph apps/services are mono-user with no global data.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
Sylvain Duchesne
2026-06-22 16:35:40 +02:00
commit bb2d9c3e59
16 changed files with 448 additions and 0 deletions
+29
View File
@@ -0,0 +1,29 @@
/**
* Inbox — client side (deposit only). The MATERIALIZATION of deposits is the
* curator's job (a separate package, deferred — see repo README), never the client's.
*/
import { getConfig, getCurrentUser } from "./polyfill";
import type { Nuri } from "./types";
/**
* Deposit a reference into a document's inbox (anticipated SDK shape). Target:
* `ng.inbox_post_link(...)`, sealed to the inbox owner; `from` optional → the
* sender is identified if known, anonymous otherwise. Polyfill: append a
* deposit to the emulated inbox document.
*/
export async function post(
targetInbox: Nuri,
payload: unknown,
opts?: { anonymous?: boolean },
): Promise<void> {
const { ng } = getConfig();
const from = opts?.anonymous ? null : getCurrentUser();
// TODO(polyfill): append { from, payload } to the emulated inbox document
// (targetInbox) via ng.sparql_update.
void ng;
void from;
void targetInbox;
void payload;
throw new Error("[ng-eventually] inbox.post: polyfill emulation not yet implemented");
}