@muhkoo/connect 0.3.0-alpha.0 → 0.4.0-alpha.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.
@@ -2790,6 +2790,9 @@ class HttpClient {
2790
2790
  post(path, body) {
2791
2791
  return this.request("POST", path, body);
2792
2792
  }
2793
+ patch(path, body) {
2794
+ return this.request("PATCH", path, body);
2795
+ }
2793
2796
  del(path, body) {
2794
2797
  return this.request("DELETE", path, body);
2795
2798
  }
@@ -3272,6 +3275,7 @@ class WSTransport extends EventCore {
3272
3275
  return `${this.id}:${event}`;
3273
3276
  }
3274
3277
  url;
3278
+ urlProvider;
3275
3279
  socket = null;
3276
3280
  _isConnected = false;
3277
3281
  _isConnecting = false;
@@ -3297,6 +3301,7 @@ class WSTransport extends EventCore {
3297
3301
  throw new Error("WSTransport: `url` is required");
3298
3302
  }
3299
3303
  this.url = opts.url;
3304
+ this.urlProvider = opts.urlProvider;
3300
3305
  this.id = opts.id ?? `ws${++__wsInstanceSeq}`;
3301
3306
  this.autoReconnect = opts.autoReconnect ?? true;
3302
3307
  this.reconnectDelay = opts.reconnectDelay ?? 3000;
@@ -3313,6 +3318,18 @@ class WSTransport extends EventCore {
3313
3318
  throw new Error("WSTransport: already connected or connecting");
3314
3319
  }
3315
3320
  this._isConnecting = true;
3321
+ // On a RECONNECT, refresh the URL (the baked-in single-use ticket is spent).
3322
+ // The first connect uses `url` as-is. If the provider throws (e.g. can't
3323
+ // mint a ticket), surface it and let scheduleReconnect retry.
3324
+ if (this.urlProvider && this.reconnectAttempts > 0) {
3325
+ try {
3326
+ this.url = await this.urlProvider();
3327
+ }
3328
+ catch (err) {
3329
+ this._isConnecting = false;
3330
+ throw err;
3331
+ }
3332
+ }
3316
3333
  return new Promise((resolve, reject) => {
3317
3334
  try {
3318
3335
  const socket = new WebSocket(this.url);
@@ -3485,7 +3502,12 @@ class WSTransport extends EventCore {
3485
3502
  await this.connect();
3486
3503
  }
3487
3504
  catch {
3488
- // scheduleReconnect will fire again from onclose
3505
+ // A failed reconnect never opened the socket, so its `onclose` won't
3506
+ // re-schedule (that path is guarded by `wasConnected`). Re-schedule here
3507
+ // so we keep retrying (with a fresh ticket each time) until we succeed
3508
+ // or hit the attempt cap.
3509
+ if (this.autoReconnect)
3510
+ this.scheduleReconnect();
3489
3511
  }
3490
3512
  }, this.reconnectDelay);
3491
3513
  }
@@ -4266,6 +4288,8 @@ class FileStorage {
4266
4288
  const fileId = input.fileId ?? generateId();
4267
4289
  const createdAt = Date.now();
4268
4290
  const chunks = [];
4291
+ const totalChunks = Math.max(1, Math.ceil(data.length / this.chunkSize));
4292
+ input.onProgress?.(0, totalChunks);
4269
4293
  // Slicing + encrypting + encoding + uploading is done per-chunk so
4270
4294
  // the peak memory footprint stays at ~chunkSize even for huge files.
4271
4295
  // Within a chunk, the shard uploads are parallelized up to
@@ -4275,6 +4299,7 @@ class FileStorage {
4275
4299
  const end = Math.min(start + this.chunkSize, data.length);
4276
4300
  const plaintext = data.subarray(start, end);
4277
4301
  chunks.push(await this.writeChunk(plaintext, chunkIndex));
4302
+ input.onProgress?.(chunks.length, totalChunks);
4278
4303
  // Stop after one iteration if the file is empty — we still emit a
4279
4304
  // single zero-length chunk so the manifest has a stable shape.
4280
4305
  if (data.length === 0)
@@ -5390,12 +5415,27 @@ class Space {
5390
5415
  /** Open the space websocket (resolves the ticket + identity lazily). */
5391
5416
  async connect() {
5392
5417
  if (!this.channel) {
5393
- const ticket = await this.deps.fetchTicket();
5394
- const url = `${this.deps.wsBaseUrl}/api/spaces/${encodeURIComponent(this.name)}/websocket` +
5395
- (ticket ? `?ticket=${encodeURIComponent(ticket)}` : "");
5418
+ // The WS upgrade ticket is single-use + short-TTL, so a reconnect
5419
+ // must mint a FRESH one — otherwise the socket drops (idle timeout,
5420
+ // network blip) and never comes back. `buildUrl` is handed to the
5421
+ // transport as a `urlProvider` it calls before each reconnect.
5422
+ const buildUrl = async () => {
5423
+ const ticket = await this.deps.fetchTicket();
5424
+ return (`${this.deps.wsBaseUrl}/api/spaces/${encodeURIComponent(this.name)}/websocket` +
5425
+ (ticket ? `?ticket=${encodeURIComponent(ticket)}` : ""));
5426
+ };
5427
+ const url = await buildUrl();
5396
5428
  this.channel = this.deps.createChannel
5397
5429
  ? this.deps.createChannel(url, this.deps.myId())
5398
- : new BroadcastChannel({ url, myId: this.deps.myId(), autoAnnounce: false });
5430
+ : new BroadcastChannel({
5431
+ url,
5432
+ myId: this.deps.myId(),
5433
+ autoAnnounce: false,
5434
+ urlProvider: buildUrl,
5435
+ // Keep recovering across network flaps (each attempt mints a
5436
+ // fresh ticket); teardown calls disconnect() which stops it.
5437
+ maxReconnectAttempts: 0,
5438
+ });
5399
5439
  for (const [event, handler] of this.pending)
5400
5440
  this.channel.on(event, handler);
5401
5441
  this.pending.length = 0;
@@ -5599,8 +5639,8 @@ class Space {
5599
5639
  return this.requireKeyring().rotate(roster);
5600
5640
  }
5601
5641
  // -- room-scoped files (no websocket needed) -------------------------------
5602
- async putFile(file, metadata) {
5603
- return this.fileStorage().writeFileToShards({ data: file, metadata });
5642
+ async putFile(file, metadata, opts = {}) {
5643
+ return this.fileStorage().writeFileToShards({ data: file, metadata, onProgress: opts.onProgress });
5604
5644
  }
5605
5645
  async getFile(manifest) {
5606
5646
  return this.fileStorage().readFileFromShards(manifest);
@@ -5757,6 +5797,12 @@ class Space {
5757
5797
  * nothing to verify against → reject.
5758
5798
  */
5759
5799
  async verifySender(packet) {
5800
+ // Trust our OWN messages — we sent them, so there's nothing to prove
5801
+ // against the roster. This also keeps a returning member (who loaded a
5802
+ // cached key and never re-published a join-request) from dropping the
5803
+ // echo of their own messages when their `ecdsaPub` isn't in the roster.
5804
+ if (packet.source === this.deps.myId())
5805
+ return true;
5760
5806
  const keyring = this.deps.keyring;
5761
5807
  const sig = packet.headers?.sig;
5762
5808
  if (!keyring || typeof sig !== "string")
@@ -6253,6 +6299,34 @@ class KeyringClient {
6253
6299
  async invite(username) {
6254
6300
  await this.post("/keyring/invite", { username });
6255
6301
  }
6302
+ // -- Shareable invite links ----------------------------------------------
6303
+ // A capability token tied to this space. Redeeming it allowlists the holder
6304
+ // so the keeper admits them — the link IS the invitation. Mint/list/revoke
6305
+ // require the caller to be the creator or an existing member.
6306
+ async createInviteLink(opts = {}) {
6307
+ return this.post("/keyring/link", opts);
6308
+ }
6309
+ async listInviteLinks() {
6310
+ const body = await this.get("/keyring/links");
6311
+ return body.links ?? [];
6312
+ }
6313
+ /** Set a member's role ("viewer" | "editor"). Owner-only on the server. */
6314
+ async setMemberRole(username, role) {
6315
+ await this.post("/keyring/role", { username, role });
6316
+ }
6317
+ /** Roster with roles (owner/members only). */
6318
+ async members() {
6319
+ const body = await this.get("/keyring/members");
6320
+ return body.members ?? [];
6321
+ }
6322
+ async revokeInviteLink(token) {
6323
+ await this.post("/keyring/link-revoke", { token });
6324
+ }
6325
+ /** Redeem a link: the server allowlists this member and asks the keeper to
6326
+ * wrap the group key for their identity. Caller must be authenticated. */
6327
+ async redeemInvite(req) {
6328
+ await this.post("/keyring/redeem", req);
6329
+ }
6256
6330
  async fetchMetadata() {
6257
6331
  try {
6258
6332
  return await this.get("/metadata");
@@ -6390,6 +6464,56 @@ class SpaceNamespace {
6390
6464
  return this.joinSpace(spaceId, opts);
6391
6465
  }
6392
6466
  // -------------------------------------------------------------------------
6467
+ // Invite links — shareable, keeper-gated invitations to a space. The token
6468
+ // is a capability: anyone signed in who redeems it is admitted by the
6469
+ // keeper. Mint/list/revoke require the caller to be the space's creator or
6470
+ // an existing member.
6471
+ // -------------------------------------------------------------------------
6472
+ /** Mint a shareable invite link for a space. `opts.expiresInSec` / `maxUses`
6473
+ * bound it (0/undefined = unlimited); `opts.role` ("viewer"|"editor") is the
6474
+ * access granted to redeemers (default viewer). Returns the link. */
6475
+ async createInviteLink(spaceId, opts = {}) {
6476
+ return this.keyringFor(spaceId).createInviteLink(opts);
6477
+ }
6478
+ /** Set a member's role on a space ("viewer" | "editor"). Owner-only. */
6479
+ async setMemberRole(spaceId, username, role) {
6480
+ await this.keyringFor(spaceId).setMemberRole(username, role);
6481
+ }
6482
+ /** Roster with roles (owner/members only). */
6483
+ async members(spaceId) {
6484
+ return this.keyringFor(spaceId).members();
6485
+ }
6486
+ /** List a space's active invite links (creator/members only). */
6487
+ async listInviteLinks(spaceId) {
6488
+ return this.keyringFor(spaceId).listInviteLinks();
6489
+ }
6490
+ /** Revoke an invite link by token. */
6491
+ async revokeInviteLink(spaceId, token) {
6492
+ await this.keyringFor(spaceId).revokeInviteLink(token);
6493
+ }
6494
+ /**
6495
+ * Join a space using an invite link: redeem the token (the keeper admits
6496
+ * this member), then connect and resolve once the group key arrives.
6497
+ * Returns the open {@link Space}.
6498
+ */
6499
+ async joinByInvite(spaceId, token, opts = {}) {
6500
+ const memberId = this.myId();
6501
+ const { ecdhPub, ecdsaPub } = await this.ensureIdentity(memberId);
6502
+ await this.keyringFor(spaceId).redeemInvite({ token, identityEcdhPub: ecdhPub, identityEcdsaPub: ecdsaPub });
6503
+ return this.joinSpace(spaceId, opts);
6504
+ }
6505
+ /** The current member roster of a space (member id → identity public keys). */
6506
+ async roster(spaceId) {
6507
+ return this.keyringFor(spaceId).fetchRoster();
6508
+ }
6509
+ keyringFor(spaceId) {
6510
+ return new KeyringClient({
6511
+ spaceId,
6512
+ httpBaseUrl: this.deps.http.baseUrl,
6513
+ fetch: this.deps.http.fetch,
6514
+ });
6515
+ }
6516
+ // -------------------------------------------------------------------------
6393
6517
  // Internals
6394
6518
  // -------------------------------------------------------------------------
6395
6519
  async build(spaceId, historyPolicy) {
@@ -6456,6 +6580,133 @@ class SpaceNamespace {
6456
6580
  }
6457
6581
  }
6458
6582
 
6583
+ /**
6584
+ * `client.agents` — manage an app's **Programmable Agents** (server-side
6585
+ * "virtual users" backed by Workers AI).
6586
+ *
6587
+ * const { config } = await client.agents.create(appId, {
6588
+ * handle: '@assistant', displayName: 'Assistant',
6589
+ * systemPrompt: 'You are a helpful teammate in this Space.',
6590
+ * triggers: [{ type: 'mention' }],
6591
+ * });
6592
+ * await client.agents.enable(appId, config.agentId, spaceId); // per-Space opt-in
6593
+ *
6594
+ * These are MANAGEMENT calls — the agent itself runs on the accelerator. Only an
6595
+ * app's owner or an editor of its shared Space may create/update/enable an agent
6596
+ * (viewers can read). Authorization rides the user session token; non-owner
6597
+ * editors pass their management Space via `opts.space`.
6598
+ *
6599
+ * v1 is "prompts + persona": a system prompt, a model, named prompt `skills`,
6600
+ * and `triggers` that decide when the agent speaks. No tools, no code.
6601
+ */
6602
+ class AgentsNamespace {
6603
+ deps;
6604
+ constructor(deps) {
6605
+ this.deps = deps;
6606
+ }
6607
+ /** List the app's agents. */
6608
+ async list(appId, opts = {}) {
6609
+ const res = await this.deps.http.get(this.path(appId, "", opts));
6610
+ return res.agents ?? [];
6611
+ }
6612
+ /** Read one agent (config + identity keys). */
6613
+ async get(appId, agentId, opts = {}) {
6614
+ return this.deps.http.get(this.path(appId, `/${encodeURIComponent(agentId)}`, opts));
6615
+ }
6616
+ /** Create an agent (owner/editor only). */
6617
+ async create(appId, input, opts = {}) {
6618
+ return this.deps.http.post(this.path(appId, "", {}), { ...input, space: opts.space });
6619
+ }
6620
+ /** Update an agent's editor-settable fields (owner/editor only). */
6621
+ async update(appId, agentId, patch, opts = {}) {
6622
+ return this.deps.http.patch(this.path(appId, `/${encodeURIComponent(agentId)}`, {}), { ...patch, space: opts.space });
6623
+ }
6624
+ /** Delete an agent (owner/editor only). */
6625
+ async delete(appId, agentId, opts = {}) {
6626
+ return this.deps.http.del(this.path(appId, `/${encodeURIComponent(agentId)}`, {}), { space: opts.space });
6627
+ }
6628
+ /** Enable the agent on a Space (per-Space opt-in). */
6629
+ async enable(appId, agentId, spaceId, opts = {}) {
6630
+ return this.deps.http.post(this.path(appId, `/${encodeURIComponent(agentId)}/enable`, {}), { targetSpaceId: spaceId, space: opts.space });
6631
+ }
6632
+ /** Disable the agent on a Space. */
6633
+ async disable(appId, agentId, spaceId, opts = {}) {
6634
+ return this.deps.http.post(this.path(appId, `/${encodeURIComponent(agentId)}/disable`, {}), { targetSpaceId: spaceId, space: opts.space });
6635
+ }
6636
+ path(appId, suffix, opts) {
6637
+ const q = opts.space ? `?space=${encodeURIComponent(opts.space)}` : "";
6638
+ return `/api/apps/${encodeURIComponent(appId)}/agents${suffix}${q}`;
6639
+ }
6640
+ }
6641
+
6642
+ /**
6643
+ * `client.functions` — manage an app's **serverless functions** (developer-
6644
+ * authored code that runs on the accelerator).
6645
+ *
6646
+ * const { config } = await client.functions.deploy(appId, {
6647
+ * name: 'hello', displayName: 'Hello',
6648
+ * code: `export default { fetch: () => new Response('hi') }`,
6649
+ * triggers: { http: { enabled: true } },
6650
+ * });
6651
+ * // HTTP-reachable at hello--<slug>.fns.muhkoo.dev
6652
+ * await client.functions.enable(appId, config.functionId, spaceId); // Space-bound
6653
+ *
6654
+ * These are MANAGEMENT calls — the function itself runs on the accelerator
6655
+ * (uploaded just-in-time, decrypted only at invocation). Only an app's owner or
6656
+ * an editor of its shared Space may deploy/update/enable (viewers read).
6657
+ * Authorization rides the user session token; non-owner editors pass their
6658
+ * management Space via `opts.space`.
6659
+ *
6660
+ * v1 is "compute-only": a function is an untrusted single-module ES worker
6661
+ * (`export default { fetch }`) with NO platform bindings — it reaches the
6662
+ * platform as an external client (the end-user session is passed through). Two
6663
+ * triggers: `http` (its own subdomain) and `space` (invoked on Space messages,
6664
+ * like a Programmable Agent).
6665
+ */
6666
+ class FunctionsNamespace {
6667
+ deps;
6668
+ constructor(deps) {
6669
+ this.deps = deps;
6670
+ }
6671
+ /** List the app's functions. */
6672
+ async list(appId, opts = {}) {
6673
+ const res = await this.deps.http.get(this.path(appId, "", opts));
6674
+ return res.functions ?? [];
6675
+ }
6676
+ /** Read one function's config. */
6677
+ async get(appId, functionId, opts = {}) {
6678
+ return this.deps.http.get(this.path(appId, `/${encodeURIComponent(functionId)}`, opts));
6679
+ }
6680
+ /** Read a function's decrypted source (owner/editor; for the editor UI). */
6681
+ async code(appId, functionId, opts = {}) {
6682
+ return this.deps.http.get(this.path(appId, `/${encodeURIComponent(functionId)}/code`, opts));
6683
+ }
6684
+ /** Deploy (create) a function (owner/editor only). */
6685
+ async deploy(appId, input, opts = {}) {
6686
+ return this.deps.http.post(this.path(appId, "", {}), { ...input, space: opts.space });
6687
+ }
6688
+ /** Update a function's editor-settable fields and/or redeploy its `code`. */
6689
+ async update(appId, functionId, patch, opts = {}) {
6690
+ return this.deps.http.patch(this.path(appId, `/${encodeURIComponent(functionId)}`, {}), { ...patch, space: opts.space });
6691
+ }
6692
+ /** Delete a function (owner/editor only). */
6693
+ async delete(appId, functionId, opts = {}) {
6694
+ return this.deps.http.del(this.path(appId, `/${encodeURIComponent(functionId)}`, {}), { space: opts.space });
6695
+ }
6696
+ /** Enable the function on a Space (per-Space opt-in for the `space` trigger). */
6697
+ async enable(appId, functionId, spaceId, opts = {}) {
6698
+ return this.deps.http.post(this.path(appId, `/${encodeURIComponent(functionId)}/enable`, {}), { targetSpaceId: spaceId, space: opts.space });
6699
+ }
6700
+ /** Disable the function on a Space. */
6701
+ async disable(appId, functionId, spaceId, opts = {}) {
6702
+ return this.deps.http.post(this.path(appId, `/${encodeURIComponent(functionId)}/disable`, {}), { targetSpaceId: spaceId, space: opts.space });
6703
+ }
6704
+ path(appId, suffix, opts) {
6705
+ const q = opts.space ? `?space=${encodeURIComponent(opts.space)}` : "";
6706
+ return `/api/apps/${encodeURIComponent(appId)}/functions${suffix}${q}`;
6707
+ }
6708
+ }
6709
+
6459
6710
  /**
6460
6711
  * `Client` — the single entry point to the Muhkoo SDK.
6461
6712
  *
@@ -6500,6 +6751,10 @@ class Client {
6500
6751
  message;
6501
6752
  /** Fan-out group spaces — `client.space.createSpace(...)`, etc. */
6502
6753
  space;
6754
+ /** Programmable Agents — `client.agents.create(appId, …)`, etc. */
6755
+ agents;
6756
+ /** Serverless functions — `client.functions.deploy(appId, …)`, etc. */
6757
+ functions;
6503
6758
  session;
6504
6759
  http;
6505
6760
  /** Subscribers notified when a session expires and can't be recovered. */
@@ -6542,6 +6797,8 @@ class Client {
6542
6797
  wsBaseUrl,
6543
6798
  cache: spaceKeyCache,
6544
6799
  });
6800
+ this.agents = new AgentsNamespace({ http: this.http });
6801
+ this.functions = new FunctionsNamespace({ http: this.http });
6545
6802
  }
6546
6803
  /** The currently signed-in user, or `null`. */
6547
6804
  get user() {
@@ -7131,5 +7388,5 @@ var bundledLoader = /*#__PURE__*/Object.freeze({
7131
7388
  default: loadRsWasm
7132
7389
  });
7133
7390
 
7134
- export { AES_GCM_IV_BYTES, AES_GCM_KEY_BYTES, AES_GCM_TAG_BYTES, AuthClient, AuthNamespace, AuthPublicInput, Authenticator, BroadcastChannel, BroadcastChannelEvents, ChannelExistsError, ChannelNotFoundError, ChunkCipher, Client, DEFAULT_BASE_URL, DoubleRatchet, DoubleRatchetCipher, DoubleRatchetManager, EncryptedSession, EventCore, EventCoreEvents, Field, Field as FieldElement, FileStorage, HashKnowledge, HttpClient, HttpError, KEEPER_MEMBER_ID, KeyStore, KeyringClient, KvNamespace, LocalStorageSessionStore, Logger, MemorySessionStore, Message, Message as MessageDefault, MessageNamespace, PBKDF2_DEFAULT_ITERATIONS, PREIMAGE_POK_VERIFICATION_KEY, Packet, PersonalSpaceClient, Poseidon, PreimagePoK, Ready, ReedSolomonCodec, Retry, Space as Room, SerializeMessage, SessionState, ShardClient, SharedSpaceClient, Space, SpaceKeyring, SpaceNamespace, SpacePacketCipher, StorageNamespace, WSTransport, ZkAuth, _accountId, _formatBytes, _messageId, _objectId, _packetId, _socketId, _userId, appLogger$1 as appLogger, assertType, base58Decode, base58Encode, buildCommitment, compilePrograms, concatBytes, decodeFromHex, decorators, decryptAesGcm, defaultCircuitUrls, defaultSessionStore, deriveAesKeyFromPassphrase, deriveBitsHkdf, deriveIdentity, deserialize, encodeToHex, encryptAesGcm, exportPublicKeyBase64, exportPublicKeyHex, fromBase64, fromBase64Url, fromHex, generateAuthProof, generateChecksum, generateId, getIPAddress, getId, getSubtle, initBn128Wasm, initRsWasm, initializeCircuits, isNumber, log, manifestToStat, poseidonHash, quickVerify, randomBytes, serialize, shardHash, signMessage, toBase64, toBase64Url, toField, toHex, unwrapWithPassphrase, utf8Decode, utf8Encode, verify, verifyChecksum, verifyGroth16, verifyHashKnowledge, verifyPreimagePoK, wrapWithPassphrase };
7391
+ export { AES_GCM_IV_BYTES, AES_GCM_KEY_BYTES, AES_GCM_TAG_BYTES, AgentsNamespace, AuthClient, AuthNamespace, AuthPublicInput, Authenticator, BroadcastChannel, BroadcastChannelEvents, ChannelExistsError, ChannelNotFoundError, ChunkCipher, Client, DEFAULT_BASE_URL, DoubleRatchet, DoubleRatchetCipher, DoubleRatchetManager, EncryptedSession, EventCore, EventCoreEvents, Field, Field as FieldElement, FileStorage, FunctionsNamespace, HashKnowledge, HttpClient, HttpError, KEEPER_MEMBER_ID, KeyStore, KeyringClient, KvNamespace, LocalStorageSessionStore, Logger, MemorySessionStore, Message, Message as MessageDefault, MessageNamespace, PBKDF2_DEFAULT_ITERATIONS, PREIMAGE_POK_VERIFICATION_KEY, Packet, PersonalSpaceClient, Poseidon, PreimagePoK, Ready, ReedSolomonCodec, Retry, Space as Room, SerializeMessage, SessionState, ShardClient, SharedSpaceClient, Space, SpaceKeyring, SpaceNamespace, SpacePacketCipher, StorageNamespace, WSTransport, ZkAuth, _accountId, _formatBytes, _messageId, _objectId, _packetId, _socketId, _userId, appLogger$1 as appLogger, assertType, base58Decode, base58Encode, buildCommitment, compilePrograms, concatBytes, decodeFromHex, decorators, decryptAesGcm, defaultCircuitUrls, defaultSessionStore, deriveAesKeyFromPassphrase, deriveBitsHkdf, deriveIdentity, deserialize, encodeToHex, encryptAesGcm, exportPublicKeyBase64, exportPublicKeyHex, fromBase64, fromBase64Url, fromHex, generateAuthProof, generateChecksum, generateId, getIPAddress, getId, getSubtle, initBn128Wasm, initRsWasm, initializeCircuits, isNumber, log, manifestToStat, poseidonHash, quickVerify, randomBytes, serialize, shardHash, signMessage, toBase64, toBase64Url, toField, toHex, unwrapWithPassphrase, utf8Decode, utf8Encode, verify, verifyChecksum, verifyGroth16, verifyHashKnowledge, verifyPreimagePoK, wrapWithPassphrase };
7135
7392
  //# sourceMappingURL=index.js.map