@klum-db/lobby 0.3.0-pre.1 → 0.4.0-pre.1
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 +7 -4
- package/dist/bin/klum.d.cts +1 -2
- package/dist/bin/klum.d.ts +1 -2
- package/dist/index.cjs +662 -186
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +325 -9
- package/dist/index.d.ts +325 -9
- package/dist/index.js +588 -113
- package/dist/index.js.map +1 -1
- package/dist/{vault-group-D0EC-D5c.d.cts → vault-group-DJtzjwZK.d.cts} +23 -3
- package/dist/{vault-group-D0EC-D5c.d.ts → vault-group-DJtzjwZK.d.ts} +23 -3
- package/package.json +16 -11
package/dist/index.d.ts
CHANGED
|
@@ -1,13 +1,13 @@
|
|
|
1
|
-
import { Vault, SealingKeyProvider, Noydb } from '@noy-db/hub/cargo';
|
|
1
|
+
import { ExtractionPreview, Vault, SealingKeyProvider, Noydb } from '@noy-db/hub/cargo';
|
|
2
2
|
export { CrossShardJoinError, CustodyApi, DataResidencyError, DeedMarker, GrantCustodianOptions, LiberateOptions, LiberateResult, ReservedVaultNameError, ShardProvisioningError, UnknownShardError, VaultTemplateNotFoundError, createDeedOwner, isDeedVault, liberateVault, loadDeedMarker } from '@noy-db/hub/cargo';
|
|
3
|
-
import { a as
|
|
4
|
-
export {
|
|
3
|
+
import { a as VaultRegistryRow, C as CrossVaultDerivationContext, I as InsightAutoPushConfig, V as VaultGroup, S as SkippedVault, b as VaultTemplate, c as StateManagementVault, M as MergeCompartmentOptions, d as MergeReport, e as SurfaceDirection, f as SurfaceConflictPolicy, g as SurfaceRow, h as VaultGroupOptions } from './vault-group-DJtzjwZK.js';
|
|
4
|
+
export { i as CapturedBlueprint, j as CrossVaultAggregation, k as CrossVaultDerivationSpec, l as CrossVaultGroupedAggregation, G as CrossVaultGroupedRow, m as CrossVaultLiveAggregation, n as CrossVaultLiveQuery, D as DecryptedMergeOptions, o as DeploymentEvent, F as FanoutQueryOptions, p as FanoutResult, q as FederatedRetrieveHit, r as FederatedRetrieveOptions, s as FederatedRetrieveResult, t as FederationMeta, u as FieldAuthorityInputs, v as FieldAuthorityPolicy, w as FieldAuthorityPolicyMissingError, x as FieldAuthorityRule, y as FieldLevelDeferredError, z as GroupMeta, L as LiveQueryOptions, A as MergeConflict, B as MergeStrategy, E as MigrationStatusRow, P as PortalInviteAuditRef, H as PortalState, R as RefreshInsightsResult, J as SchemaManifestRow, K as SchemaRolloutResult, N as ShardedCollection, O as ShardedGroupedQuery, Q as ShardedQuery, T as ShardingConfig, U as SurfaceStatus, W as mergeCompartment, X as mergeDecryptedRecords, Y as resolveFieldAuthority, Z as resolveRecordByFieldAuthority } from './vault-group-DJtzjwZK.js';
|
|
5
5
|
import { AsXlsxSheetOptions } from '@noy-db/as-xlsx';
|
|
6
6
|
export { MultiVaultDenormColumn, MultiVaultXlsxEntry, MultiVaultXlsxOptions } from '@noy-db/as-xlsx';
|
|
7
|
-
import {
|
|
7
|
+
import { Role, Vault as Vault$1, Collection } from '@noy-db/hub';
|
|
8
|
+
import { ShareLink } from '@noy-db/hub/share-link';
|
|
8
9
|
import { InspectableContainer } from '@noy-db/in-devtools';
|
|
9
|
-
import { WritePodOptions } from '@noy-db/hub/pod';
|
|
10
|
-
import { PublicEnvelope } from '@noy-db/hub';
|
|
10
|
+
import { Cover, WritePodOptions } from '@noy-db/hub/pod';
|
|
11
11
|
|
|
12
12
|
/**
|
|
13
13
|
* @klum-db/lobby interchange — cross-vault FK-closure extraction.
|
|
@@ -127,6 +127,278 @@ declare function describeCrossVaultExtraction(openVault: (name: string) => Promi
|
|
|
127
127
|
maxDepth?: number;
|
|
128
128
|
}): Promise<CrossVaultPreview>;
|
|
129
129
|
|
|
130
|
+
/**
|
|
131
|
+
* Vendor-side deep-link addressing (#43). The share-link GRAMMAR is the
|
|
132
|
+
* hub's (`@noy-db/hub/share-link`, #806) — one canonical link shape for
|
|
133
|
+
* the LIFF permalink, the installed PWA, and the vendor console. The
|
|
134
|
+
* Lobby contributes the FLEET half: mapping the link's vault handle to
|
|
135
|
+
* the firm's registry row (resolve), and a client's registry row to its
|
|
136
|
+
* portal handle (build).
|
|
137
|
+
*
|
|
138
|
+
* Fail closed: unknown/foreign handles or clients throw a typed
|
|
139
|
+
* {@link ShareLinkResolutionError} whose message never enumerates the
|
|
140
|
+
* fleet (no vault ids, no partition keys beyond the caller's own input).
|
|
141
|
+
*/
|
|
142
|
+
|
|
143
|
+
/** Machine-readable {@link ShareLinkResolutionError} discriminant. */
|
|
144
|
+
type ShareLinkResolutionErrorCode = 'UNKNOWN_VAULT_HANDLE' | 'UNKNOWN_CLIENT' | 'NO_PORTAL_HANDLE';
|
|
145
|
+
/**
|
|
146
|
+
* Typed failure for fleet-side share-link resolution. Standalone
|
|
147
|
+
* (`extends Error`) mirroring the hub's `ShareLinkParseError` style.
|
|
148
|
+
* Fail closed: map to an app-level 404; never fall back to a default
|
|
149
|
+
* vault, and never leak fleet contents through the message.
|
|
150
|
+
*/
|
|
151
|
+
declare class ShareLinkResolutionError extends Error {
|
|
152
|
+
readonly code: ShareLinkResolutionErrorCode;
|
|
153
|
+
readonly name = "ShareLinkResolutionError";
|
|
154
|
+
constructor(code: ShareLinkResolutionErrorCode, message: string);
|
|
155
|
+
}
|
|
156
|
+
/** What {@link resolveShareLinkAgainstRegistry} returns. */
|
|
157
|
+
interface ResolvedShareLink {
|
|
158
|
+
/** The parsed link (hub grammar), as-received or parsed from the raw string. */
|
|
159
|
+
readonly link: ShareLink;
|
|
160
|
+
/** The fleet registry row the link's vault handle resolved to. */
|
|
161
|
+
readonly row: VaultRegistryRow;
|
|
162
|
+
/**
|
|
163
|
+
* Console-route descriptor: everything the firm app needs to mint its
|
|
164
|
+
* OWN console URL for the addressed record. Descriptor, not redirect —
|
|
165
|
+
* the Lobby returns data, the app owns its routes.
|
|
166
|
+
*/
|
|
167
|
+
readonly consoleRoute: {
|
|
168
|
+
readonly vaultId: string;
|
|
169
|
+
readonly collection: string;
|
|
170
|
+
readonly recordId: string;
|
|
171
|
+
readonly period?: string;
|
|
172
|
+
readonly version?: number;
|
|
173
|
+
};
|
|
174
|
+
}
|
|
175
|
+
/** Input to {@link buildShareLinkForClient}: fleet coordinates + link context. */
|
|
176
|
+
interface BuildShareLinkForClientOptions {
|
|
177
|
+
/** The client's partition key in the fleet registry. */
|
|
178
|
+
readonly client: string;
|
|
179
|
+
/** Which VaultGroup the client belongs to (registry is shared across groups). */
|
|
180
|
+
readonly group: string;
|
|
181
|
+
readonly collection: string;
|
|
182
|
+
readonly record: string;
|
|
183
|
+
readonly period?: string;
|
|
184
|
+
readonly version?: number;
|
|
185
|
+
/** Single-use grant token — emitted only as the `#g=` fragment (hub rule). */
|
|
186
|
+
readonly grantToken?: string;
|
|
187
|
+
/** Origin prefix prepended verbatim by the hub builder (e.g. a LIFF permalink base). */
|
|
188
|
+
readonly base?: string;
|
|
189
|
+
}
|
|
190
|
+
|
|
191
|
+
/**
|
|
192
|
+
* Fleet-level portal provisioning (#42). One audited lobby operation
|
|
193
|
+
* that prepares a per-client portal vault: ensure the client shard
|
|
194
|
+
* exists in the fleet, assign the portal vault handle (the ULID that
|
|
195
|
+
* `share-link` links address, #43), apply firm custodian/admin grants,
|
|
196
|
+
* and issue the client's single-use, expiring magic-link invite — the
|
|
197
|
+
* seed for LINE-federated enrollment.
|
|
198
|
+
*
|
|
199
|
+
* Composes published primitives only: this repo's VaultGroup shard
|
|
200
|
+
* machinery, `@noy-db/hub` team grants (the session needs
|
|
201
|
+
* `teamStrategy: withTeam()`), and `@noy-db/on-magic-link`
|
|
202
|
+
* `issueInvite` / `issuePeerRecovery` / `revokeInvite`.
|
|
203
|
+
*
|
|
204
|
+
* Rebind (second-device enrollment, milestone security decision: new
|
|
205
|
+
* devices ONLY via firm re-invite) is `mode: 'rebind'` — a
|
|
206
|
+
* peer-recovery of the EXISTING principal, same keyring identity, no
|
|
207
|
+
* new principal by construction.
|
|
208
|
+
*
|
|
209
|
+
* The registry audit trail stores only safe fields (tokenId, userId,
|
|
210
|
+
* kind, timestamps) — NEVER the encoded invite, which carries the
|
|
211
|
+
* single-use temp passphrase.
|
|
212
|
+
*
|
|
213
|
+
* OIDC device-entry revocation (`revokeOidcDevice`) is deliberately
|
|
214
|
+
* NOT wrapped here: it requires the OIDC provider config and a live
|
|
215
|
+
* id-token — an auth context only the firm app holds.
|
|
216
|
+
*/
|
|
217
|
+
|
|
218
|
+
/** A firm-side slot to ensure on the client vault (custodian/admin). */
|
|
219
|
+
interface PortalFirmGrant {
|
|
220
|
+
readonly userId: string;
|
|
221
|
+
readonly displayName: string;
|
|
222
|
+
readonly role: Role;
|
|
223
|
+
readonly passphrase: string;
|
|
224
|
+
}
|
|
225
|
+
/** Options for {@link provisionPortal}. */
|
|
226
|
+
interface ProvisionPortalOptions {
|
|
227
|
+
/** The client's partition key in the fleet. */
|
|
228
|
+
readonly client: string;
|
|
229
|
+
/**
|
|
230
|
+
* `'invite'` (default) mints a NEW principal's enrollment invite;
|
|
231
|
+
* `'rebind'` re-invites the EXISTING principal (second device / lost
|
|
232
|
+
* access) — same keyring identity, no new principal.
|
|
233
|
+
*/
|
|
234
|
+
readonly mode?: 'invite' | 'rebind';
|
|
235
|
+
/** The client principal the invite enrolls (or re-enrolls). */
|
|
236
|
+
readonly invite: {
|
|
237
|
+
readonly userId: string;
|
|
238
|
+
readonly displayName: string;
|
|
239
|
+
/** Defaults to `'client'`. */
|
|
240
|
+
readonly role?: Role;
|
|
241
|
+
readonly ttlMs?: number;
|
|
242
|
+
/** Override the generated temp phrase (deterministic tests only). */
|
|
243
|
+
readonly tempPhrase?: string;
|
|
244
|
+
};
|
|
245
|
+
/** Firm custodian/admin slots to ensure on the client vault. */
|
|
246
|
+
readonly firmGrants?: readonly PortalFirmGrant[];
|
|
247
|
+
}
|
|
248
|
+
/** What {@link provisionPortal} returns. */
|
|
249
|
+
interface ProvisionPortalResult {
|
|
250
|
+
readonly vaultId: string;
|
|
251
|
+
/** The portal vault handle — the ULID share links address (#43). */
|
|
252
|
+
readonly handle: string;
|
|
253
|
+
/** The minted invite. `encoded` embeds after `#` in the app's invite URL. */
|
|
254
|
+
readonly invite: {
|
|
255
|
+
readonly encoded: string;
|
|
256
|
+
readonly tokenId: string;
|
|
257
|
+
readonly userId: string;
|
|
258
|
+
readonly expiresAt: string;
|
|
259
|
+
};
|
|
260
|
+
/** The updated fleet registry row (handle + portal audit trail). */
|
|
261
|
+
readonly row: VaultRegistryRow;
|
|
262
|
+
}
|
|
263
|
+
/** Options for {@link revokePortalInvite}. */
|
|
264
|
+
interface RevokePortalInviteOptions {
|
|
265
|
+
readonly client: string;
|
|
266
|
+
readonly tokenId: string;
|
|
267
|
+
}
|
|
268
|
+
|
|
269
|
+
/** Explicit ZK surface: the only fields a model may emit. */
|
|
270
|
+
interface ReadModelPosture {
|
|
271
|
+
readonly surface: readonly string[];
|
|
272
|
+
}
|
|
273
|
+
/** Rollup model: per-shard reduce → one summary row per shard. */
|
|
274
|
+
interface RollupModelSpec<R = Record<string, unknown>, S extends Record<string, unknown> = Record<string, unknown>> {
|
|
275
|
+
/** Output collection name in the read-model vault. */
|
|
276
|
+
readonly name: string;
|
|
277
|
+
readonly kind: 'rollup';
|
|
278
|
+
/** Collection read from each shard (plain or MV-output — the engine is agnostic). */
|
|
279
|
+
readonly source: string;
|
|
280
|
+
/** Per-shard reducer. Must be pure — no clock, no randomness. */
|
|
281
|
+
readonly derive: (records: R[], ctx: CrossVaultDerivationContext) => S;
|
|
282
|
+
readonly posture: ReadModelPosture;
|
|
283
|
+
}
|
|
284
|
+
/**
|
|
285
|
+
* Mirror model (S2, #56): per-record replication of each shard's
|
|
286
|
+
* `source` collection (plain or #810-MV-output — the engine is
|
|
287
|
+
* agnostic) into one group-wide collection. Row id =
|
|
288
|
+
* `${shard}:${idOf(row)}` — identity is in-band, the same idiom as
|
|
289
|
+
* `sharding.keyOf`.
|
|
290
|
+
*/
|
|
291
|
+
interface MirrorModelSpec<R = Record<string, unknown>> {
|
|
292
|
+
/** Output collection name in the read-model vault. */
|
|
293
|
+
readonly name: string;
|
|
294
|
+
readonly kind: 'mirror';
|
|
295
|
+
/** Collection read from each shard (plain or MV-output — the engine is agnostic). */
|
|
296
|
+
readonly source: string;
|
|
297
|
+
/** Extract the source record's id (must be pure; parallel to `sharding.keyOf`). */
|
|
298
|
+
readonly idOf: (row: R) => string;
|
|
299
|
+
readonly posture: ReadModelPosture;
|
|
300
|
+
}
|
|
301
|
+
/** `never` makes caller-typed `derive`/`idOf` params assignable (contravariance). */
|
|
302
|
+
type ReadModelSpec = RollupModelSpec<never> | MirrorModelSpec<never>;
|
|
303
|
+
/** Options for `Lobby.openReadModel`. */
|
|
304
|
+
interface OpenReadModelOptions {
|
|
305
|
+
/** The read-model vault. Must not be the group or one of its shards. */
|
|
306
|
+
readonly vault: string;
|
|
307
|
+
readonly models: readonly ReadModelSpec[];
|
|
308
|
+
/**
|
|
309
|
+
* Freshness (spec § 3). `autoPush` wires the #13 controller: a write
|
|
310
|
+
* on any model's `source` re-derives THAT shard's contribution only
|
|
311
|
+
* (never a full fan-out), coalesced per microtask — or on a
|
|
312
|
+
* reset-debounce timer via `{ debounceMs }`; `{ minVersion }` gates
|
|
313
|
+
* behind-version shards. Default off: explicit `refresh()` only.
|
|
314
|
+
*/
|
|
315
|
+
readonly freshness?: {
|
|
316
|
+
readonly autoPush?: boolean | InsightAutoPushConfig;
|
|
317
|
+
};
|
|
318
|
+
/**
|
|
319
|
+
* Audience subset (spec § 5): only registry rows passing this
|
|
320
|
+
* predicate feed the read-model (e.g. an advisor's clients). Rows of
|
|
321
|
+
* a shard that falls OUT of scope retract on the next refresh — a
|
|
322
|
+
* narrowed audience never keeps out-of-scope data. Must be pure.
|
|
323
|
+
* Absent = the whole group.
|
|
324
|
+
*/
|
|
325
|
+
readonly shards?: (row: VaultRegistryRow) => boolean;
|
|
326
|
+
}
|
|
327
|
+
/** The result of {@link ReadModel.refresh}. */
|
|
328
|
+
interface ReadModelRefreshResult {
|
|
329
|
+
readonly written: number;
|
|
330
|
+
/** Rows removed by reconciliation: deleted sources + departed shards. */
|
|
331
|
+
readonly retracted: number;
|
|
332
|
+
readonly skippedVaults: SkippedVault[];
|
|
333
|
+
}
|
|
334
|
+
/** Fail-closed posture breach: a model emitted a field outside its declared surface. */
|
|
335
|
+
declare class PostureViolationError extends Error {
|
|
336
|
+
readonly model: string;
|
|
337
|
+
readonly fields: readonly string[];
|
|
338
|
+
readonly shard: string;
|
|
339
|
+
readonly name = "PostureViolationError";
|
|
340
|
+
constructor(model: string, fields: readonly string[], shard: string);
|
|
341
|
+
}
|
|
342
|
+
/**
|
|
343
|
+
* A maintained federated read-model. Read side is deliberately boring:
|
|
344
|
+
* {@link collection} returns ordinary collections in the read-model
|
|
345
|
+
* vault — one query, never N shard opens.
|
|
346
|
+
*/
|
|
347
|
+
declare class ReadModel<T> {
|
|
348
|
+
private readonly group;
|
|
349
|
+
private readonly vaultName;
|
|
350
|
+
private readonly vault;
|
|
351
|
+
private readonly models;
|
|
352
|
+
private readonly shards?;
|
|
353
|
+
/** @internal — auto-push controller; armed by {@link _armAutoPush}. */
|
|
354
|
+
private autoPush;
|
|
355
|
+
/** @internal */
|
|
356
|
+
constructor(group: VaultGroup<T>, vaultName: string, vault: Vault$1, models: readonly ReadModelSpec[], shards?: ((row: VaultRegistryRow) => boolean) | undefined);
|
|
357
|
+
/**
|
|
358
|
+
* @internal — wire the #13 controller (spec § 3). Trigger is the
|
|
359
|
+
* Noydb-level change stream filtered to this group's shard vaults
|
|
360
|
+
* (`<group>--<pk>`); the read-model vault can never match that prefix
|
|
361
|
+
* (guarded at open), so its own writes can't loop back. Recompute is
|
|
362
|
+
* a per-shard `refresh({ only })` — rollup re-reduces and mirror
|
|
363
|
+
* reconciles just that shard; other shards' rows are untouched
|
|
364
|
+
* (registered shards are preserved by the reconcile asymmetry).
|
|
365
|
+
*/
|
|
366
|
+
_armAutoPush(cfg: InsightAutoPushConfig): void;
|
|
367
|
+
/**
|
|
368
|
+
* Await any pending auto-push flush. Resolves immediately when
|
|
369
|
+
* `freshness.autoPush` is off or nothing is pending.
|
|
370
|
+
*/
|
|
371
|
+
whenSettled(): Promise<void>;
|
|
372
|
+
/** An output collection of the read-model vault (keyed by model `name`). */
|
|
373
|
+
collection<S extends Record<string, unknown> = Record<string, unknown>>(model: string): Collection<S>;
|
|
374
|
+
/**
|
|
375
|
+
* Explicit refresh: for each model, read every eligible shard's
|
|
376
|
+
* `source`, posture-check, and write — rollup: one summary row per
|
|
377
|
+
* shard (id = partitionKey); mirror: one row per source record
|
|
378
|
+
* (id = `${shard}:${idOf(row)}`). Every row is stamped with `_shard`
|
|
379
|
+
* + `_sourceVersion` (mirror rows additionally `_sourceId`).
|
|
380
|
+
*
|
|
381
|
+
* Reconciliation (spec § 4): rows whose source record is gone, and
|
|
382
|
+
* all rows of a shard that LEFT the group, are deleted (`retracted`).
|
|
383
|
+
* Rows of a merely-unreachable shard are PRESERVED — offline is not
|
|
384
|
+
* departure; those shards land in `skippedVaults` instead.
|
|
385
|
+
*/
|
|
386
|
+
refresh(options?: {
|
|
387
|
+
minVersion?: number;
|
|
388
|
+
concurrency?: number;
|
|
389
|
+
only?: readonly string[];
|
|
390
|
+
failFast?: boolean;
|
|
391
|
+
}): Promise<ReadModelRefreshResult>;
|
|
392
|
+
/**
|
|
393
|
+
* Delete stale rows: id not in `expected` AND the row's shard is
|
|
394
|
+
* healthy this refresh (source record deleted), no longer in the
|
|
395
|
+
* group registry (shard departed), or outside the audience predicate
|
|
396
|
+
* (scope narrowed — out-of-scope data never lingers, spec § 5).
|
|
397
|
+
* Unreachable-but-registered in-scope shards are preserved.
|
|
398
|
+
*/
|
|
399
|
+
private reconcile;
|
|
400
|
+
}
|
|
401
|
+
|
|
130
402
|
/**
|
|
131
403
|
* @klum-db/lobby dock — the foreign-format contract (unit-driver family).
|
|
132
404
|
*
|
|
@@ -313,8 +585,8 @@ interface CompartmentManifest {
|
|
|
313
585
|
readonly name: string;
|
|
314
586
|
readonly count: number;
|
|
315
587
|
}[];
|
|
316
|
-
/** Inner bundle's owner-curated public envelope
|
|
317
|
-
readonly publicEnvelope?:
|
|
588
|
+
/** Inner bundle's owner-curated cover (né public envelope — manifest key is this repo's wire). Opt-in. */
|
|
589
|
+
readonly publicEnvelope?: Cover;
|
|
318
590
|
/** Byte length of the inner v1 bundle (drives framing). */
|
|
319
591
|
readonly innerBytes: number;
|
|
320
592
|
/** SHA-256 (lowercase hex) of the inner v1 bundle bytes — pre-decrypt integrity. */
|
|
@@ -670,6 +942,50 @@ declare class Lobby {
|
|
|
670
942
|
* the full tier (keyring, CEK, provenance, custody).
|
|
671
943
|
*/
|
|
672
944
|
graduate(docked: DockedUnit, opts: GraduateOptions): Promise<GraduationReport>;
|
|
945
|
+
/**
|
|
946
|
+
* Resolve a portal share link (raw URL/path or a parsed `ShareLink`)
|
|
947
|
+
* against the fleet registry: `vaultHandle → registry row` plus a
|
|
948
|
+
* console-route descriptor the firm app turns into its own URL.
|
|
949
|
+
* Unknown/foreign handles fail closed with `ShareLinkResolutionError`.
|
|
950
|
+
* Delegates to `resolveShareLinkAgainstRegistry` in `portal/share-link.ts`.
|
|
951
|
+
*/
|
|
952
|
+
resolveShareLink(link: string | URL | ShareLink, opts: {
|
|
953
|
+
readonly registry: Collection<VaultRegistryRow>;
|
|
954
|
+
}): Promise<ResolvedShareLink>;
|
|
955
|
+
/**
|
|
956
|
+
* Mint a portal share link for a fleet client (`client` partition key +
|
|
957
|
+
* `group`), delegating the link grammar to `@noy-db/hub/share-link`.
|
|
958
|
+
* Fails closed when the client is unknown or has no portal handle.
|
|
959
|
+
* Delegates to `buildShareLinkForClient` in `portal/share-link.ts`.
|
|
960
|
+
*/
|
|
961
|
+
buildShareLink(parts: BuildShareLinkForClientOptions, opts: {
|
|
962
|
+
readonly registry: Collection<VaultRegistryRow>;
|
|
963
|
+
}): Promise<string>;
|
|
964
|
+
/**
|
|
965
|
+
* Provision (or re-invite, `mode: 'rebind'`) a client portal vault in
|
|
966
|
+
* one audited operation: ensure the shard, assign the portal handle
|
|
967
|
+
* (#43's link target), apply firm grants, issue the magic-link invite,
|
|
968
|
+
* stamp the audit trail on the fleet registry row.
|
|
969
|
+
* Needs `@noy-db/on-magic-link` (optional peer) and a session created
|
|
970
|
+
* with `teamStrategy: withTeam()`.
|
|
971
|
+
* Delegates to `provisionPortal` in `portal/provision.ts`.
|
|
972
|
+
*/
|
|
973
|
+
provisionPortal<T>(group: VaultGroup<T>, opts: ProvisionPortalOptions): Promise<ProvisionPortalResult>;
|
|
974
|
+
/**
|
|
975
|
+
* Revoke an outstanding portal invite and stamp `revokedAt` on the
|
|
976
|
+
* fleet audit trail. Idempotent; fails closed on an unknown tokenId.
|
|
977
|
+
* Delegates to `revokePortalInvite` in `portal/provision.ts`.
|
|
978
|
+
*/
|
|
979
|
+
revokePortalInvite<T>(group: VaultGroup<T>, opts: RevokePortalInviteOptions): Promise<VaultRegistryRow>;
|
|
980
|
+
/**
|
|
981
|
+
* Open a maintained federated read-model over `group` (#44 S1): rollup
|
|
982
|
+
* models reduce each shard's `source` into one summary row per shard in
|
|
983
|
+
* the read-model vault — deterministic ids, `_shard`/`_sourceVersion`
|
|
984
|
+
* provenance, fail-closed `posture.surface` allowlist, explicit
|
|
985
|
+
* `refresh()`. Spec: docs/federated-read-model.md.
|
|
986
|
+
* Delegates to `openReadModel` in `federation/read-model.ts`.
|
|
987
|
+
*/
|
|
988
|
+
openReadModel<T>(group: VaultGroup<T>, opts: OpenReadModelOptions): Promise<ReadModel<T>>;
|
|
673
989
|
/**
|
|
674
990
|
* Export a scoped partition from `vaultName` bounded to the given surface.
|
|
675
991
|
* Delegates to `exportSurface` in `interchange/surface.ts`.
|
|
@@ -705,4 +1021,4 @@ declare class Lobby {
|
|
|
705
1021
|
}
|
|
706
1022
|
declare function createLobby(noydb: Noydb): Lobby;
|
|
707
1023
|
|
|
708
|
-
export { type CompartmentManifest, type CompartmentMeta, type CrossVaultClosurePlan, CrossVaultDanglingRefError, type CrossVaultPreview, type CrossVaultRef, type CrossVaultSeed, DockedUnit, type ExportMultiVaultXlsxOptions, type ExtractCrossVaultOptions, type ExtractCrossVaultResult, type GraduateOptions, type GraduationReport, type GroupMeterReport, type GroupShardMetrics, InMemoryUnitDriver, Lobby, MergeCompartmentOptions, MergeReport, type MigrateThenMergeOptions, type MigrateThenMergeReport, type MigrationStep, MigrationTransformRequiredError, MinVersionError, type MultiBundleManifest, type MultiVaultCompartmentInput, NOYDB_MULTI_BUNDLE_MAGIC, NOYDB_MULTI_BUNDLE_PREFIX_BYTES, NOYDB_MULTI_BUNDLE_VERSION, SkippedVault, StateManagementVault, SurfaceCadenceScheduler, SurfaceConflictPolicy, type SurfaceDefinition, SurfaceDirection, SurfaceNotFoundError, SurfaceRow, SurfaceStateError, type UnitDriver, UnitGraduationError, VaultGroup, VaultGroupOptions, VaultTemplate, agreeSurface, applySurface, createLobby, decodeMultiBundle, describeCrossVaultExtraction, encodeMultiBundle, exportSurface, extractCrossVaultPartition, groupInspector, isSurfaceDue, listDueSurfaces, markSynced, meterGroup, migrateThenMerge, proposeSurface, readMultiVaultBundleCompartment, readNoydbBundleManifest, walkCrossVaultClosure, writeMultiVaultBundle };
|
|
1024
|
+
export { type BuildShareLinkForClientOptions, type CompartmentManifest, type CompartmentMeta, type CrossVaultClosurePlan, CrossVaultDanglingRefError, CrossVaultDerivationContext, type CrossVaultPreview, type CrossVaultRef, type CrossVaultSeed, DockedUnit, type ExportMultiVaultXlsxOptions, type ExtractCrossVaultOptions, type ExtractCrossVaultResult, type GraduateOptions, type GraduationReport, type GroupMeterReport, type GroupShardMetrics, InMemoryUnitDriver, InsightAutoPushConfig, Lobby, MergeCompartmentOptions, MergeReport, type MigrateThenMergeOptions, type MigrateThenMergeReport, type MigrationStep, MigrationTransformRequiredError, MinVersionError, type MirrorModelSpec, type MultiBundleManifest, type MultiVaultCompartmentInput, NOYDB_MULTI_BUNDLE_MAGIC, NOYDB_MULTI_BUNDLE_PREFIX_BYTES, NOYDB_MULTI_BUNDLE_VERSION, type OpenReadModelOptions, type PortalFirmGrant, PostureViolationError, type ProvisionPortalOptions, type ProvisionPortalResult, ReadModel, type ReadModelPosture, type ReadModelRefreshResult, type ReadModelSpec, type ResolvedShareLink, type RevokePortalInviteOptions, type RollupModelSpec, ShareLinkResolutionError, type ShareLinkResolutionErrorCode, SkippedVault, StateManagementVault, SurfaceCadenceScheduler, SurfaceConflictPolicy, type SurfaceDefinition, SurfaceDirection, SurfaceNotFoundError, SurfaceRow, SurfaceStateError, type UnitDriver, UnitGraduationError, VaultGroup, VaultGroupOptions, VaultRegistryRow, VaultTemplate, agreeSurface, applySurface, createLobby, decodeMultiBundle, describeCrossVaultExtraction, encodeMultiBundle, exportSurface, extractCrossVaultPartition, groupInspector, isSurfaceDue, listDueSurfaces, markSynced, meterGroup, migrateThenMerge, proposeSurface, readMultiVaultBundleCompartment, readNoydbBundleManifest, walkCrossVaultClosure, writeMultiVaultBundle };
|