feat!: curer n'est plus un appel, c'est ce que fait le traitement de l'inbox

This commit is contained in:
Sylvain Duchesne
2026-08-20 11:04:31 +02:00
parent 2ce2113157
commit e2ed970cbd
21 changed files with 956 additions and 273 deletions
+9 -11
View File
@@ -3,7 +3,7 @@
* `@ng-helpers/indexing` writes one, and nothing more.
*
* ── Why an application and not a bag of library calls ──────────────────────
* The 69 unit tests in `test/` run against a fake this repository wrote. They prove the
* The 80 unit tests in `test/` run against a fake this repository wrote. They prove the
* indexing RULES are consistent; they cannot prove that NextGraph does what the fake
* pretends, because the fake is the thing being asked. This page closes that gap by
* putting the real broker underneath: it imports `@ng-eventually/polyfill` for real,
@@ -35,12 +35,7 @@ import {
import { ng as realNg, init as realInit } from "@ng-org/web";
import { indexing, polyfillPort } from "../src/index";
import type {
CurationReport,
IndexEntry,
Indexing,
NextGraphPort,
} from "../src/index";
import type { IndexEntry, Indexing, NextGraphPort } from "../src/index";
import type { BrokenInboxOutcome, IndexingBridge } from "./bridge";
// ── bootstrap: the one polyfill-era call, then the SDK-shaped ones ──────────
@@ -91,7 +86,10 @@ async function boot(): Promise<void> {
state.who = await ensureIdentity();
const session = await sessionReady;
port = polyfillPort({ sessionId: session.session_id });
api = indexing(port);
// One await, and curation is part of it: obtaining the handle processes the inboxes
// of the indexes this identity owns and leaves them watched. This application never
// curates anything, and has nothing to call if it wanted to.
api = await indexing(port);
state.status = "ready";
}
@@ -175,8 +173,8 @@ const bridge: IndexingBridge = {
await ready().refer(index, object);
},
async curate(index: string): Promise<CurationReport> {
return ready().curate(index);
async reconnect(): Promise<void> {
api = await indexing(readyPort());
},
async read(index: string): Promise<IndexEntry[]> {
@@ -199,7 +197,7 @@ const bridge: IndexingBridge = {
// Everything real except the inbox step. The failure is injected at the exact moment
// the question is about: after the document exists and carries its descriptor, before
// anyone can deposit into it.
const broken = indexing({
const broken = await indexing({
...p,
openInbox: async (): Promise<void> => {
throw new Error("[e2e] injected: the inbox could not be opened");