@muhkoo/connect 0.15.0-alpha.11 → 0.15.0-alpha.12

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 CHANGED
@@ -4,7 +4,7 @@ Client SDK for the Muhkoo Accelerator. The headline surface is a single
4
4
  **`Client`** that hangs everything off its namespaces —
5
5
  `client.auth` / `client.kv` / `client.db` / `client.storage` / `client.vfs` /
6
6
  `client.vcs` / `client.message` / `client.space` / `client.agents` /
7
- `client.functions` / `client.accessTokens` / `client.offline` — backed by
7
+ `client.functions` / `client.accessTokens` / `client.vectors` / `client.offline` — backed by
8
8
  end-to-end-encrypted messaging (fan-out group channels with history, plus Double
9
9
  Ratchet + ECDH P-384 for direct messages), ZK identity + personal/shared spaces,
10
10
  server-side Programmable Agents, developer-authored serverless functions, and an
@@ -25,7 +25,8 @@ See [`CHANGELOG.md`](./CHANGELOG.md) for what's new.
25
25
  (pub/sub + E2E direct messages), `space` (fan-out group channels with
26
26
  history), `agents` (server-side Programmable Agents), `functions`
27
27
  (developer-authored serverless functions), `accessTokens` (scoped machine
28
- credentials), and `offline` (CRDT sync). This is the supported surface;
28
+ credentials), `vectors` (vector search over the app's collections), and
29
+ `offline` (CRDT sync). This is the supported surface;
29
30
  everything below is a building block it composes.
30
31
 
31
32
  - **App-describing decorators** — `@MuhkooAgent` / `@MuhkooSpace` / `@MuhkooDB` /
@@ -444,6 +445,48 @@ cause. The limits, messages and every behaviour change are listed under
444
445
  *Filesystem and version control* in [`API_REFERENCE.md`](./API_REFERENCE.md);
445
446
  [`CHANGELOG.md`](./CHANGELOG.md) says why each one changed.
446
447
 
448
+ ### Vector search (`client.vectors`)
449
+
450
+ Collections hold entries you search by meaning. In text mode Muhkoo makes the
451
+ vectors from your text; in vectors mode you send your own. The store is
452
+ **server-readable**: Muhkoo can read entries, text and data, so don't put
453
+ anything there you need kept from the server. The app owner creates collections
454
+ (`client.vectors.createCollection(appId, name, definition)` then
455
+ `waitForCollection`, which waits up to 10 minutes) or in the portal.
456
+
457
+ ```ts
458
+ const docs = client.vectors.collection("docs");
459
+
460
+ // Writes are accepted at once and become searchable shortly after,
461
+ // usually within a minute or two.
462
+ const { mutationId } = await docs.upsert([
463
+ { id: "a", text: "How to reset a password", data: { category: "help" } },
464
+ ]);
465
+ await docs.waitFor(mutationId); // polls status; waits up to 5 minutes
466
+
467
+ const matches = await docs.query({ text: "forgot my password", topK: 5, filter: { category: "help" } });
468
+
469
+ // To wait on a ready notice instead of polling, the Space must be registered
470
+ // as a notice Space for the environment. The app owner does this once:
471
+ const space = await client.space.joinChannel("docs-updates");
472
+ await client.vectors.setNotices(appId, "docs", "live", { spaces: [space.id], defaultSpace: space.id });
473
+
474
+ // Name it with `notify` (or rely on the defaultSpace) and listen on it.
475
+ await docs.upsertAndWait([{ id: "b", text: "Changing your email" }], {
476
+ space,
477
+ notify: { space: space.id },
478
+ });
479
+ ```
480
+
481
+ The server sends the ready notice only to a registered notice Space: the one named
482
+ in `notify.space`, or the environment's `defaultSpace`. Naming a Space that isn't
483
+ registered fails the upsert with a 400 `notice_space_not_registered`. Any other
484
+ Space you pass as `space` never receives the notice, so the wait still completes,
485
+ by polling, usually within a minute or two.
486
+
487
+ A wait that runs out throws `VectorWaitTimeoutError` (with the `mutationId`); the
488
+ write itself still went through, and `docs.status(mutationId)` tells you later.
489
+
447
490
  > The sections below document the lower-level building blocks the client is
448
491
  > composed from (`BroadcastChannel`, `EncryptedSession`, `PersonalSpaceClient`,
449
492
  > the Groth16 verifier, …). Reach for them directly only when you need control
@@ -7692,7 +7692,7 @@ function manifestStat(m) {
7692
7692
  * expect (and isn't serving a stale cached bundle). Keep this in sync with
7693
7693
  * `package.json` `version`.
7694
7694
  */
7695
- const VERSION = "0.15.0-alpha.11";
7695
+ const VERSION = "0.15.0-alpha.12";
7696
7696
 
7697
7697
  /**
7698
7698
  * `HttpClient` — the one place the unified {@link Client} talks to the
@@ -7851,6 +7851,9 @@ class HttpClient {
7851
7851
  post(path, body) {
7852
7852
  return this.request("POST", path, body);
7853
7853
  }
7854
+ put(path, body) {
7855
+ return this.request("PUT", path, body);
7856
+ }
7854
7857
  patch(path, body) {
7855
7858
  return this.request("PATCH", path, body);
7856
7859
  }
@@ -16904,6 +16907,343 @@ class AppNamespace {
16904
16907
  }
16905
16908
  }
16906
16909
 
16910
+ /**
16911
+ * `client.vectors` — vector search over the app's collections. A developer
16912
+ * defines a collection (text or vectors mode, filterable fields, access) in the
16913
+ * Muhkoo portal or CLI; this namespace reads and writes its entries:
16914
+ *
16915
+ * const docs = client.vectors.collection('docs');
16916
+ * const { mutationId } = await docs.upsert([
16917
+ * { id: 'doc-1', text: 'How to reset your password…', data: { category: 'faq' } },
16918
+ * ]);
16919
+ * const state = await docs.status(mutationId); // 'pending' | 'done' | 'unknown'
16920
+ * const matches = await docs.query({ text: 'forgot password', topK: 5, filter: { category: 'faq' } });
16921
+ * const [entry] = await docs.get(['doc-1']);
16922
+ * await docs.delete(['doc-1']);
16923
+ *
16924
+ * Writes are asynchronous: upsert and delete return a `mutationId` at once, and
16925
+ * entries usually become searchable within one to two minutes. `get` returns
16926
+ * only entries whose writes have finished, never ones still pending.
16927
+ *
16928
+ * Entries are server-readable: Muhkoo stores the text, vectors and data you send
16929
+ * so it can embed and search them. Don't put anything in a collection that the
16930
+ * platform must not see.
16931
+ *
16932
+ * Authorization is the app key ({@link HttpClient} stamps it on every request);
16933
+ * the app and environment come from the key. Server errors (`{ error, code }`)
16934
+ * reach callers as {@link HttpError}; the SDK does no validation of its own.
16935
+ */
16936
+ const READY_SENDER = "__muhkoo__";
16937
+ const READY_SUBJECT = "muhkoo.vectors.ready";
16938
+ const DEFAULT_WAIT_TIMEOUT_MS = 300_000;
16939
+ const POLL_FIRST_MS = 250;
16940
+ const POLL_MAX_MS = 4_000;
16941
+ const POLL_CONNECTED_MS = 5_000;
16942
+ /**
16943
+ * A wait for a write ran out of time. The write itself was accepted; check
16944
+ * {@link VectorCollection.status} later with `mutationId`.
16945
+ */
16946
+ class VectorWaitTimeoutError extends Error {
16947
+ mutationId;
16948
+ constructor(mutationId, timeoutMs) {
16949
+ super(`Timed out after ${timeoutMs} ms waiting for mutation ${mutationId}`);
16950
+ this.name = "VectorWaitTimeoutError";
16951
+ this.mutationId = mutationId;
16952
+ }
16953
+ }
16954
+ function isReadyEvent(data) {
16955
+ if (!data || typeof data !== "object")
16956
+ return false;
16957
+ const d = data;
16958
+ return (typeof d.collection === "string" &&
16959
+ typeof d.mutationId === "string" &&
16960
+ Array.isArray(d.ids) &&
16961
+ d.ids.every((id) => typeof id === "string"));
16962
+ }
16963
+ /** A handle on one collection. Cheap to make; holds no state beyond its name. */
16964
+ class VectorCollection {
16965
+ http;
16966
+ name;
16967
+ base;
16968
+ constructor(http, name) {
16969
+ this.http = http;
16970
+ this.name = name;
16971
+ this.base = `/api/vectors/${encodeURIComponent(name)}`;
16972
+ }
16973
+ /** Add or replace entries. Returns once accepted; see {@link status}. */
16974
+ upsert(entries, opts) {
16975
+ const body = { entries };
16976
+ if (opts?.notify !== undefined)
16977
+ body.notify = opts.notify;
16978
+ return this.http.post(`${this.base}/upsert`, body);
16979
+ }
16980
+ /** Nearest entries to a text or a vector. */
16981
+ async query(input) {
16982
+ const res = await this.http.post(`${this.base}/query`, input);
16983
+ return res.matches;
16984
+ }
16985
+ /** Entries by id. Writes still pending are not returned. */
16986
+ async get(ids, opts) {
16987
+ const body = { ids };
16988
+ if (opts?.includeVector !== undefined)
16989
+ body.includeVector = opts.includeVector;
16990
+ const res = await this.http.post(`${this.base}/get`, body);
16991
+ return res.entries;
16992
+ }
16993
+ /** Remove entries by id. Asynchronous, like {@link upsert}. */
16994
+ delete(ids) {
16995
+ return this.http.post(`${this.base}/delete`, { ids });
16996
+ }
16997
+ /** The state of a write: `pending`, `done`, or `unknown` (never seen or expired). */
16998
+ async status(mutationId) {
16999
+ const res = await this.http.get(`${this.base}/status?mutation=${encodeURIComponent(mutationId)}`);
17000
+ return res.state;
17001
+ }
17002
+ /**
17003
+ * Listen on an open Space for this collection's ready notices. Only notices
17004
+ * the platform sent (sender `__muhkoo__`) reach `handler`; a member who
17005
+ * publishes the same subject is ignored. Needs an unlocked session, since a
17006
+ * Space without its keys emits no ephemeral events. Returns the unsubscribe.
17007
+ */
17008
+ onReady(space, handler) {
17009
+ return space.onEphemeral((e) => {
17010
+ if (e.from !== READY_SENDER || e.subject !== READY_SUBJECT)
17011
+ return;
17012
+ if (!isReadyEvent(e.data) || e.data.collection !== this.name)
17013
+ return;
17014
+ handler({ collection: e.data.collection, ids: e.data.ids, mutationId: e.data.mutationId });
17015
+ });
17016
+ }
17017
+ /**
17018
+ * Resolve once a write is searchable: on its ready notice (with `space`) or
17019
+ * when {@link status} answers `done`. Status is polled underneath either way,
17020
+ * because notices are best effort.
17021
+ *
17022
+ * The notice only arrives if `space` is a registered notice Space for the
17023
+ * environment (see {@link VectorsNamespace.setNotices}) and the write named
17024
+ * it in `notify.space` or it is the environment's `defaultSpace`. Any other
17025
+ * Space never receives the notice, and the wait falls back to polling,
17026
+ * usually finishing within a minute or two.
17027
+ *
17028
+ * Rejects with an `Error` ("Unknown mutation <id>") if status answers
17029
+ * `unknown`, and with {@link VectorWaitTimeoutError} after `timeoutMs`
17030
+ * (default 300,000 ms).
17031
+ */
17032
+ waitFor(mutationId, opts) {
17033
+ const space = opts?.space;
17034
+ const subscribe = space
17035
+ ? (onHit) => this.onReady(space, (e) => { if (e.mutationId === mutationId)
17036
+ onHit(); })
17037
+ : undefined;
17038
+ return this.wait(mutationId, opts, subscribe);
17039
+ }
17040
+ /**
17041
+ * {@link upsert}, then {@link waitFor} its mutation. With `space`, listens
17042
+ * before sending, so a notice that beats the HTTP response still counts.
17043
+ * The notice reaches `space` only if it is a registered notice Space named
17044
+ * in `notify.space` or set as the environment's `defaultSpace`; naming an
17045
+ * unregistered Space fails the upsert with a 400
17046
+ * `notice_space_not_registered`. Otherwise the wait completes by polling.
17047
+ * An upsert error is rethrown at once.
17048
+ */
17049
+ async upsertAndWait(entries, opts) {
17050
+ const space = opts?.space;
17051
+ if (!space) {
17052
+ const result = await this.upsert(entries, opts);
17053
+ await this.wait(result.mutationId, opts, undefined);
17054
+ return result;
17055
+ }
17056
+ const seen = new Set();
17057
+ let target = null;
17058
+ let hit = null;
17059
+ const unsubscribe = this.onReady(space, (e) => {
17060
+ if (target === null)
17061
+ seen.add(e.mutationId);
17062
+ else if (e.mutationId === target)
17063
+ hit?.();
17064
+ });
17065
+ try {
17066
+ const result = await this.upsert(entries, opts);
17067
+ target = result.mutationId;
17068
+ const already = seen.has(result.mutationId);
17069
+ seen.clear();
17070
+ const subscribe = (onHit) => {
17071
+ hit = onHit;
17072
+ return () => { hit = null; };
17073
+ };
17074
+ if (!already)
17075
+ await this.wait(result.mutationId, opts, subscribe);
17076
+ return result;
17077
+ }
17078
+ finally {
17079
+ unsubscribe();
17080
+ }
17081
+ }
17082
+ wait(mutationId, opts, subscribe) {
17083
+ const timeoutMs = opts?.timeoutMs ?? DEFAULT_WAIT_TIMEOUT_MS;
17084
+ const space = opts?.space;
17085
+ return new Promise((resolve, reject) => {
17086
+ let finished = false;
17087
+ let pollTimer;
17088
+ let backoff = POLL_FIRST_MS;
17089
+ const subscription = {};
17090
+ const finish = (err) => {
17091
+ if (finished)
17092
+ return;
17093
+ finished = true;
17094
+ clearTimeout(deadline);
17095
+ if (pollTimer !== undefined)
17096
+ clearTimeout(pollTimer);
17097
+ subscription.off?.();
17098
+ if (err)
17099
+ reject(err);
17100
+ else
17101
+ resolve();
17102
+ };
17103
+ const schedule = () => {
17104
+ if (finished)
17105
+ return;
17106
+ let delay;
17107
+ if (space?.isConnected()) {
17108
+ delay = POLL_CONNECTED_MS;
17109
+ }
17110
+ else {
17111
+ delay = backoff;
17112
+ backoff = Math.min(backoff * 2, POLL_MAX_MS);
17113
+ }
17114
+ pollTimer = setTimeout(poll, delay);
17115
+ };
17116
+ const poll = async () => {
17117
+ pollTimer = undefined;
17118
+ let state = null;
17119
+ try {
17120
+ state = await this.status(mutationId);
17121
+ }
17122
+ catch {
17123
+ state = null; // retried at the same cadence
17124
+ }
17125
+ if (finished)
17126
+ return;
17127
+ if (state === "done")
17128
+ finish();
17129
+ else if (state === "unknown")
17130
+ finish(new Error(`Unknown mutation ${mutationId}`));
17131
+ else
17132
+ schedule();
17133
+ };
17134
+ const deadline = setTimeout(() => finish(new VectorWaitTimeoutError(mutationId, timeoutMs)), timeoutMs);
17135
+ subscription.off = subscribe?.(() => finish());
17136
+ if (finished) {
17137
+ subscription.off?.();
17138
+ return;
17139
+ }
17140
+ schedule();
17141
+ });
17142
+ }
17143
+ }
17144
+ /** A collection's creation failed; `info.envs.*.error` says why. */
17145
+ class VectorCollectionFailedError extends Error {
17146
+ info;
17147
+ constructor(info) {
17148
+ const reason = info.envs?.live?.error ?? info.envs?.test?.error;
17149
+ super(`Collection ${info.name} failed${reason ? `: ${reason}` : ""}`);
17150
+ this.name = "VectorCollectionFailedError";
17151
+ this.info = info;
17152
+ }
17153
+ }
17154
+ const COLLECTION_POLL_MS = 2_000;
17155
+ const DEFAULT_COLLECTION_TIMEOUT_MS = 600_000;
17156
+ class VectorsNamespace {
17157
+ deps;
17158
+ constructor(deps) {
17159
+ this.deps = deps;
17160
+ }
17161
+ /** A handle on the named collection, made fresh on each call. */
17162
+ collection(name) {
17163
+ return new VectorCollection(this.deps.http, name);
17164
+ }
17165
+ // Owner management. Authorized by the developer session (owner only, like
17166
+ // the database tables API), not the app key.
17167
+ /** The app's collections, sorted by name. */
17168
+ async listCollections(appId) {
17169
+ const res = await this.deps.http.get(this.ownerPath(appId));
17170
+ return res.collections;
17171
+ }
17172
+ /** One collection. A missing or badly named one is 404 `collection_not_found`. */
17173
+ getCollection(appId, name) {
17174
+ return this.deps.http.get(this.ownerPath(appId, name));
17175
+ }
17176
+ /**
17177
+ * Create a collection. Asynchronous: it answers with status `creating`; use
17178
+ * {@link waitForCollection} to wait for `ready`. Repeating it with the same
17179
+ * definition returns the existing collection; a different definition is
17180
+ * 409 `collection_exists`. Definitions never change: drop and recreate.
17181
+ */
17182
+ createCollection(appId, name, definition) {
17183
+ return this.deps.http.put(this.ownerPath(appId, name), definition);
17184
+ }
17185
+ /**
17186
+ * Drop a collection and its entries in both environments. Asynchronous; the
17187
+ * collection shows status `dropping` until it is gone. Safe to repeat: a 503
17188
+ * `vectors_unavailable` means the drop couldn't start, and calling again is
17189
+ * the remedy.
17190
+ */
17191
+ async dropCollection(appId, name) {
17192
+ await this.deps.http.del(this.ownerPath(appId, name));
17193
+ }
17194
+ /** Set which Spaces receive ready notices for one environment. */
17195
+ setNotices(appId, name, env, notices) {
17196
+ return this.deps.http.patch(`${this.ownerPath(appId, name)}/notices?env=${encodeURIComponent(env)}`, notices);
17197
+ }
17198
+ /**
17199
+ * Poll {@link getCollection} every 2 s until status is `ready`. Rejects with
17200
+ * {@link VectorCollectionFailedError} on `failed`, and with
17201
+ * `Error("Timed out waiting for collection <name>")` after `timeoutMs`
17202
+ * (default 600,000 ms: creation waits for filter fields to settle).
17203
+ */
17204
+ waitForCollection(appId, name, opts) {
17205
+ const timeoutMs = opts?.timeoutMs ?? DEFAULT_COLLECTION_TIMEOUT_MS;
17206
+ return new Promise((resolve, reject) => {
17207
+ let finished = false;
17208
+ let pollTimer;
17209
+ const done = (fn) => {
17210
+ if (finished)
17211
+ return;
17212
+ finished = true;
17213
+ clearTimeout(deadline);
17214
+ if (pollTimer !== undefined)
17215
+ clearTimeout(pollTimer);
17216
+ fn();
17217
+ };
17218
+ const poll = async () => {
17219
+ pollTimer = undefined;
17220
+ let info;
17221
+ try {
17222
+ info = await this.getCollection(appId, name);
17223
+ }
17224
+ catch (err) {
17225
+ done(() => reject(err));
17226
+ return;
17227
+ }
17228
+ if (finished)
17229
+ return;
17230
+ if (info.status === "ready")
17231
+ done(() => resolve(info));
17232
+ else if (info.status === "failed")
17233
+ done(() => reject(new VectorCollectionFailedError(info)));
17234
+ else
17235
+ pollTimer = setTimeout(poll, COLLECTION_POLL_MS);
17236
+ };
17237
+ const deadline = setTimeout(() => done(() => reject(new Error(`Timed out waiting for collection ${name}`))), timeoutMs);
17238
+ void poll();
17239
+ });
17240
+ }
17241
+ ownerPath(appId, name) {
17242
+ const base = `/api/apps/${encodeURIComponent(appId)}/vectors/collections`;
17243
+ return name === undefined ? base : `${base}/${encodeURIComponent(name)}`;
17244
+ }
17245
+ }
17246
+
16907
17247
  /**
16908
17248
  * POST /api/auth/identity (SpecA §4.1 as amended by CS-7). An unknown name
16909
17249
  * answers a deterministic decoy, so a lookup never says whether an account
@@ -24799,6 +25139,8 @@ class Client {
24799
25139
  accessTokens;
24800
25140
  /** This app — `client.app.access()`: may the signed-in user add data here? */
24801
25141
  app;
25142
+ /** Vector search — `client.vectors.collection("docs").query({ text })`, plus owner management of collections. */
25143
+ vectors;
24802
25144
  /** Offline cache + sync — `client.offline.status`, `client.offline.snapshot`, etc. */
24803
25145
  offline;
24804
25146
  session;
@@ -25071,6 +25413,7 @@ class Client {
25071
25413
  this.agents = new AgentsNamespace({ http: this.http });
25072
25414
  this.functions = new FunctionsNamespace({ http: this.http, fnHostSuffix: options.functionsHostSuffix });
25073
25415
  this.accessTokens = new AccessTokensNamespace({ http: this.http });
25416
+ this.vectors = new VectorsNamespace({ http: this.http });
25074
25417
  // Each "allowed" sends what the offline queue kept after a refusal for
25075
25418
  // payment, without waiting for the next reconnect.
25076
25419
  this.app = new AppNamespace({ http: this.http, onAllowed: () => this.offline.resume() });
@@ -25494,5 +25837,5 @@ var bundledLoader = /*#__PURE__*/Object.freeze({
25494
25837
  default: loadRsWasm
25495
25838
  });
25496
25839
 
25497
- export { ACCESS_TOKEN_SCOPES, AES_GCM_IV_BYTES$1 as AES_GCM_IV_BYTES, AES_GCM_KEY_BYTES, AES_GCM_TAG_BYTES$1 as AES_GCM_TAG_BYTES, AccessTokensNamespace, AdmissionDeniedError, AgentsNamespace, AppNamespace, AuthClient, AuthHttpError, AuthNamespace, AuthPublicInput, Authenticator, BlockEngine, BroadcastChannel, BroadcastChannelEvents, ChannelExistsError, ChannelNotFoundError, ChunkCipher, CircuitIntegrityError, Client, ConnectivityManager, DEFAULT_AUTH_BASE_URL, DEFAULT_BASE_URL, DEFAULT_BRANCH, DEFAULT_FN_HOST_SUFFIX, DEVICE_IDENTITY_STORAGE_KEY, DEVICE_KEY_DB_NAME, DbCache, DbNamespace, DbTable, DevicePairingError, DeviceRevokedError, DeviceStoreUnavailableError, DoubleRatchet, DoubleRatchetCipher, DoubleRatchetManager, EncryptedSession, EventCore, EventCoreEvents, Field, Field as FieldElement, FileStorage, FunctionsNamespace, GoogleNotLinkedError, GuestLoginConflictError, HLC, HashKnowledge, HostedAuth, HttpClient, HttpError, IdentityLockedError, IdentityUnavailableError, IndexedDbStore, InvalidRecoveryCodeError, KEEPER_MEMBER_ID$1 as KEEPER_MEMBER_ID, KeyStore, KeyringClient, KeyringHttpError, KvCache, KvNamespace, LocalEngineHost, LocalStorageSessionStore, Logger, MAX_SHARE_SUCCESSOR_HOPS, MemorySessionStore, Message, Message as MessageDefault, MessageNamespace, MuhkooAgent, MuhkooDB, MuhkooFunction, MuhkooSpace, NOT_MEMBER_CLOSE_CODE, NOT_MEMBER_RECHECK_MS, NoopStore, OfflineLockedError, OfflineManager, OutboundQueue, P2P_SUBJECT, PAIRING_CODE_ALPHABET, PAIRING_CODE_LENGTH, PBKDF2_DEFAULT_ITERATIONS, PINNED_CIRCUIT_DIGESTS, PREIMAGE_POK_VERIFICATION_KEY, Packet, PasskeyOriginError, PaymentRequiredError, PeerExchange, PeerNetwork, PersonalSpaceClient, Poseidon, PreimagePoK, ROOT_ID, Ready, ReauthRequiredError, ReedSolomonCodec, Repo, Retry, Space as Room, RotationInProgressError, RotationIncompleteError, RotationMismatchError, SHARE_DIR_TYPE, SHARE_GUEST_DEVICE_LABEL, SHARE_PASSWORD_ITERATIONS, SerializeMessage, SessionState, ShardCache, ShardClient, Share, ShareClosedError, ShareFullError, ShareMemberLimitError, SharePasswordError, SharePasswordRateError, ShareSpaceNotEmptyError, ShareSpaceNotReadyError, SharedSpaceClient, SharesClient, SharesNamespace, SnapshotNamespace, Space, SpaceCache, SpaceKeyring, SpaceNamespace, SpacePacketCipher, SpaceSignaler, SpaceTrustError, StorageNamespace, SyncEngine, VERSION, VFS_ROOT_INFO, VaultProtocolMismatchError, VaultUnavailableError, VcsError, VcsNamespace, VfsConflictError, VfsCorruptRecordError, VfsLimitError, VfsLockedError, VfsNamespace, VfsNotFoundError, WSTransport, WebRtcTransport, WorkerEngineHost, ZERO_HLC, ZkAuth, _accountId, _formatBytes, _messageId, _objectId, _packetId, _socketId, _userId, appLogger$1 as appLogger, assertType, base58Decode, base58Encode, buildCommitment, canonicalUserCode, clearDeviceIdentity, compareHlc, compilePrograms, concatBytes$1 as concatBytes, configureDeviceStore, createPasskeyWithPrf, decodeFromHex, decorators, decryptAesGcm, defaultCircuitUrls, defaultRpId, defaultSessionStore, defaultSharesStore, deleteBeatsWrite, deleteRegister, deriveAesKeyFromPassphrase, deriveBitsHkdf, deriveIdentity, deriveIdentityFromSeed, deriveMasterSeedFromPassword, deserialize, deviceFingerprint, deviceIdentityIsEphemeral, deviceIdentityKey, dirKey, ejectAgentPrompt, ejectAgentTools, emptyMap, emptyRegister, encodeToHex, encryptAesGcm, evaluatePasskeyPrf, exportPublicKeyBase64, exportPublicKeyHex, formatUserCode, fromBase64$2 as fromBase64, fromBase64Url, fromHex, generateAuthProof, generateChecksum, generateDevicePairingKeypair, generateId, generatePkce, getIPAddress, getId, getMuhkooAppDescriptor, getSubtle, guestRecoveryCode, guestRecoveryOf, hasDeviceIdentity, headKey, historyKey, initBn128Wasm, initRsWasm, initializeCircuits, isNewer, isNumber, isOfflineCapable, isP2pCapable, isProvisional, isSameOriginPath, loadDeviceIdentity, log, manifestToStat, materializeRow, memorySharesStore, merge3, merge3Text, mergeKey, mergeMap, mergeMessage, mergeRegister, messageKey, newPasswordVerifier, objectKey, pack, padHandle, pairingVerificationCode, parseGuestRecoveryCode, passkeyPrfCapable, passkeySupported, passkeyUsableFromOrigin, passwordProof, persistDeviceIdentity, poseidonHash, protocol, provisionalHandle, quickVerify, randomBytes, randomState, refKey, refsIndexKey, rpIdUsableForOrigin, sealSeed, sealSeedToDevice, serialize, shardHash, shareErrorFrom, signMessage, stableStringify, toBase64$2 as toBase64, toBase64Url, toField, toHex, tombstoneRow, unpack, unsealSeed, unsealSeedFromDevice, unwrapWithPassphrase, utf8Decode, utf8Encode, verify, verifyChecksum, verifyGroth16, verifyHashKnowledge, verifyPreimagePoK, wrapWithPassphrase, writeBeatsTombstone, writeColumns, writeRegister };
25840
+ export { ACCESS_TOKEN_SCOPES, AES_GCM_IV_BYTES$1 as AES_GCM_IV_BYTES, AES_GCM_KEY_BYTES, AES_GCM_TAG_BYTES$1 as AES_GCM_TAG_BYTES, AccessTokensNamespace, AdmissionDeniedError, AgentsNamespace, AppNamespace, AuthClient, AuthHttpError, AuthNamespace, AuthPublicInput, Authenticator, BlockEngine, BroadcastChannel, BroadcastChannelEvents, ChannelExistsError, ChannelNotFoundError, ChunkCipher, CircuitIntegrityError, Client, ConnectivityManager, DEFAULT_AUTH_BASE_URL, DEFAULT_BASE_URL, DEFAULT_BRANCH, DEFAULT_FN_HOST_SUFFIX, DEVICE_IDENTITY_STORAGE_KEY, DEVICE_KEY_DB_NAME, DbCache, DbNamespace, DbTable, DevicePairingError, DeviceRevokedError, DeviceStoreUnavailableError, DoubleRatchet, DoubleRatchetCipher, DoubleRatchetManager, EncryptedSession, EventCore, EventCoreEvents, Field, Field as FieldElement, FileStorage, FunctionsNamespace, GoogleNotLinkedError, GuestLoginConflictError, HLC, HashKnowledge, HostedAuth, HttpClient, HttpError, IdentityLockedError, IdentityUnavailableError, IndexedDbStore, InvalidRecoveryCodeError, KEEPER_MEMBER_ID$1 as KEEPER_MEMBER_ID, KeyStore, KeyringClient, KeyringHttpError, KvCache, KvNamespace, LocalEngineHost, LocalStorageSessionStore, Logger, MAX_SHARE_SUCCESSOR_HOPS, MemorySessionStore, Message, Message as MessageDefault, MessageNamespace, MuhkooAgent, MuhkooDB, MuhkooFunction, MuhkooSpace, NOT_MEMBER_CLOSE_CODE, NOT_MEMBER_RECHECK_MS, NoopStore, OfflineLockedError, OfflineManager, OutboundQueue, P2P_SUBJECT, PAIRING_CODE_ALPHABET, PAIRING_CODE_LENGTH, PBKDF2_DEFAULT_ITERATIONS, PINNED_CIRCUIT_DIGESTS, PREIMAGE_POK_VERIFICATION_KEY, Packet, PasskeyOriginError, PaymentRequiredError, PeerExchange, PeerNetwork, PersonalSpaceClient, Poseidon, PreimagePoK, ROOT_ID, Ready, ReauthRequiredError, ReedSolomonCodec, Repo, Retry, Space as Room, RotationInProgressError, RotationIncompleteError, RotationMismatchError, SHARE_DIR_TYPE, SHARE_GUEST_DEVICE_LABEL, SHARE_PASSWORD_ITERATIONS, SerializeMessage, SessionState, ShardCache, ShardClient, Share, ShareClosedError, ShareFullError, ShareMemberLimitError, SharePasswordError, SharePasswordRateError, ShareSpaceNotEmptyError, ShareSpaceNotReadyError, SharedSpaceClient, SharesClient, SharesNamespace, SnapshotNamespace, Space, SpaceCache, SpaceKeyring, SpaceNamespace, SpacePacketCipher, SpaceSignaler, SpaceTrustError, StorageNamespace, SyncEngine, VERSION, VFS_ROOT_INFO, VaultProtocolMismatchError, VaultUnavailableError, VcsError, VcsNamespace, VectorCollection, VectorCollectionFailedError, VectorWaitTimeoutError, VectorsNamespace, VfsConflictError, VfsCorruptRecordError, VfsLimitError, VfsLockedError, VfsNamespace, VfsNotFoundError, WSTransport, WebRtcTransport, WorkerEngineHost, ZERO_HLC, ZkAuth, _accountId, _formatBytes, _messageId, _objectId, _packetId, _socketId, _userId, appLogger$1 as appLogger, assertType, base58Decode, base58Encode, buildCommitment, canonicalUserCode, clearDeviceIdentity, compareHlc, compilePrograms, concatBytes$1 as concatBytes, configureDeviceStore, createPasskeyWithPrf, decodeFromHex, decorators, decryptAesGcm, defaultCircuitUrls, defaultRpId, defaultSessionStore, defaultSharesStore, deleteBeatsWrite, deleteRegister, deriveAesKeyFromPassphrase, deriveBitsHkdf, deriveIdentity, deriveIdentityFromSeed, deriveMasterSeedFromPassword, deserialize, deviceFingerprint, deviceIdentityIsEphemeral, deviceIdentityKey, dirKey, ejectAgentPrompt, ejectAgentTools, emptyMap, emptyRegister, encodeToHex, encryptAesGcm, evaluatePasskeyPrf, exportPublicKeyBase64, exportPublicKeyHex, formatUserCode, fromBase64$2 as fromBase64, fromBase64Url, fromHex, generateAuthProof, generateChecksum, generateDevicePairingKeypair, generateId, generatePkce, getIPAddress, getId, getMuhkooAppDescriptor, getSubtle, guestRecoveryCode, guestRecoveryOf, hasDeviceIdentity, headKey, historyKey, initBn128Wasm, initRsWasm, initializeCircuits, isNewer, isNumber, isOfflineCapable, isP2pCapable, isProvisional, isSameOriginPath, loadDeviceIdentity, log, manifestToStat, materializeRow, memorySharesStore, merge3, merge3Text, mergeKey, mergeMap, mergeMessage, mergeRegister, messageKey, newPasswordVerifier, objectKey, pack, padHandle, pairingVerificationCode, parseGuestRecoveryCode, passkeyPrfCapable, passkeySupported, passkeyUsableFromOrigin, passwordProof, persistDeviceIdentity, poseidonHash, protocol, provisionalHandle, quickVerify, randomBytes, randomState, refKey, refsIndexKey, rpIdUsableForOrigin, sealSeed, sealSeedToDevice, serialize, shardHash, shareErrorFrom, signMessage, stableStringify, toBase64$2 as toBase64, toBase64Url, toField, toHex, tombstoneRow, unpack, unsealSeed, unsealSeedFromDevice, unwrapWithPassphrase, utf8Decode, utf8Encode, verify, verifyChecksum, verifyGroth16, verifyHashKnowledge, verifyPreimagePoK, wrapWithPassphrase, writeBeatsTombstone, writeColumns, writeRegister };
25498
25841
  //# sourceMappingURL=index.js.map