@ghostlytools/cli 1.1.1 → 1.1.3

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/dist/ghostly.mjs CHANGED
@@ -1,6 +1,6 @@
1
1
  #!/usr/bin/env node
2
2
  import { a as fileBytesOf, d as __exportAll, i as fileBytes, l as FILE_BYTES_STEP } from "./assets/fileBytes-DxiJHmTk.js";
3
- import { $ as checkAtprotoProofRecord, $s as randomBytes$1, $t as isPubkyKey, Aa as RTC_CONFIG, Ai as voicePeaksOf, B as sameSshKey, Ci as sanitizeFileName, Cn as resolveLightningDestination, Ct as parseDidSignaturePaste, Di as baseMime, Ea as LIMITS, Ei as VOICE_LIMITS, En as decodeBolt11, Et as strictBase64Url, Fa as extractParamsFromSdp, G as decodeAnyBitcoinAddress, H as verifySshSignature, Hs as openRelayPayload, I as SSHSIG_NAMESPACE, Ia as parseCallSignal, Ir as BUTTONS_CAPABILITY, J as ATPROTO_PROOF_COLLECTION, K as ATPROTO_DECLARED_SCOPE, Kt as walletNetworkOf, L as SshSigError, La as signalHasVideo, Ma as buildSdpFromSignal, Na as callRtcConfig, Ns as setLinkTraceSink, P as groupName, Pa as callSignalHeardAt, Pr as checkPushEndpoint, Q as atprotoProofRkey, Qi as replySnippet, Qr as IdentityCheckUnavailable, Qs as fromBase64Url$1, Qt as PUBKY_PROOF_MAX_BYTES, R as parseSshPublicKey, Sa as GhostlyHttpError, Sn as requestLnurlInvoice, St as parseDidDocument, Ti as PLAYABLE_AUDIO, Tn as engineText, Tt as staticDidDocument, U as verifyBitcoinMessage, V as sshSignCommand, Vt as WALLET_NETWORKS, W as BitcoinAddressError, X as atprotoDidMethod, Xs as sanitizeAvatar, Y as ATPROTO_PROOF_SCOPE, Ys as MAX_AVATAR_LENGTH, Z as atprotoProofRecord, _n as recordsFromTxt, _t as didWebFileNames, an as pubkyProofPath, at as verifyAtprotoRecordProof, bn as txtValue, bt as normalizeDid, cn as DOMAIN_FILE_MAX_BYTES, dn as domainTxtRecord, dt as checkDidSignature, ea as ITEM_STATES, ec as toBase64Url$1, ei as boundVerifiedIdentity, en as isPubkyProofFolder, et as isAtprotoDid, fn as domainWellKnownFile, ft as didGhostlyServiceEntry, gn as normalizeDomain, gr as TYPING_REFRESH_MS, gt as didWebFile, hn as nip05RootKey, hr as TYPING_KINDS, ht as didWebDocumentUrl, ia as checkStatusCard, in as pubkyProofFile, it as AtprotoProofError, ja as answersOffer, jt as resolveDidDht, ka as CALL_SIGNAL_MAX_AGE_MS, ki as parseVoiceMeta, ln as decodeDnsResponse, lt as DidError, mn as isPublicAddress, mt as didSignedMessages, na as STATUS_CARD_LIMITS, nc as utf8Decode, nn as normalizePubkyKey, ns as inviteLink, nt as parseAtprotoDidDocument, on as homeserverWebEndpoint, ot as DID_DOCUMENT_MAX_BYTES$1, pn as encodeDnsQuery, pt as didJwsAlg, q as ATPROTO_FULL_SCOPE, ra as buttonLabelClash, rc as utf8Encode, ri as identityStatement, rn as pubkyProofCapability, rt as shortAtprotoDid, sn as pubkyHomeserverOf, st as DID_FILE_MAX_BYTES, ta as RUN_RESULTS, tn as newPubkyProofFolder, tt as normalizeAtprotoHandle, un as dnsProofName, ut as checkDidJws, vn as recordsFromWellKnown, vr as sanitizeTypingStatus, vt as didWebFileUrl, wi as sanitizeMime, wn as engineError, wt as signingKeys, xi as readImageMeta, xn as wellKnownUrl, xt as parseDid, yn as recordsName, yt as didWebHost, z as parseSshSignature, zs as RELAY_PAYLOAD_MAX_BYTES } from "./assets/src-CJdPTl7Q.js";
3
+ import { $ as checkAtprotoProofRecord, $s as randomBytes$1, $t as isPubkyKey, Aa as RTC_CONFIG, Ai as voicePeaksOf, B as sameSshKey, Ci as sanitizeFileName, Cn as resolveLightningDestination, Ct as parseDidSignaturePaste, Di as baseMime, Ea as LIMITS, Ei as VOICE_LIMITS, En as decodeBolt11, Et as strictBase64Url, Fa as extractParamsFromSdp, G as decodeAnyBitcoinAddress, H as verifySshSignature, Hs as openRelayPayload, I as SSHSIG_NAMESPACE, Ia as parseCallSignal, Ir as BUTTONS_CAPABILITY, J as ATPROTO_PROOF_COLLECTION, K as ATPROTO_DECLARED_SCOPE, Kt as walletNetworkOf, L as SshSigError, La as signalHasVideo, Ma as buildSdpFromSignal, Na as callRtcConfig, Ns as setLinkTraceSink, P as groupName, Pa as callSignalHeardAt, Pr as checkPushEndpoint, Q as atprotoProofRkey, Qi as replySnippet, Qr as IdentityCheckUnavailable, Qs as fromBase64Url$1, Qt as PUBKY_PROOF_MAX_BYTES, R as parseSshPublicKey, Sa as GhostlyHttpError, Sn as requestLnurlInvoice, St as parseDidDocument, Ti as PLAYABLE_AUDIO, Tn as engineText, Tt as staticDidDocument, U as verifyBitcoinMessage, V as sshSignCommand, Vt as WALLET_NETWORKS, W as BitcoinAddressError, X as atprotoDidMethod, Xs as sanitizeAvatar, Y as ATPROTO_PROOF_SCOPE, Ys as MAX_AVATAR_LENGTH, Z as atprotoProofRecord, _n as recordsFromTxt, _t as didWebFileNames, an as pubkyProofPath, at as verifyAtprotoRecordProof, bn as txtValue, bt as normalizeDid, cn as DOMAIN_FILE_MAX_BYTES, dn as domainTxtRecord, dt as checkDidSignature, ea as ITEM_STATES, ec as toBase64Url$1, ei as boundVerifiedIdentity, en as isPubkyProofFolder, et as isAtprotoDid, fn as domainWellKnownFile, ft as didGhostlyServiceEntry, gn as normalizeDomain, gr as TYPING_REFRESH_MS, gt as didWebFile, hn as nip05RootKey, hr as TYPING_KINDS, ht as didWebDocumentUrl, ia as checkStatusCard, in as pubkyProofFile, it as AtprotoProofError, ja as answersOffer, jt as resolveDidDht, ka as CALL_SIGNAL_MAX_AGE_MS, ki as parseVoiceMeta, ln as decodeDnsResponse, lt as DidError, mn as isPublicAddress, mt as didSignedMessages, na as STATUS_CARD_LIMITS, nc as utf8Decode, nn as normalizePubkyKey, ns as inviteLink, nt as parseAtprotoDidDocument, on as homeserverWebEndpoint, ot as DID_DOCUMENT_MAX_BYTES$1, pn as encodeDnsQuery, pt as didJwsAlg, q as ATPROTO_FULL_SCOPE, ra as buttonLabelClash, rc as utf8Encode, ri as identityStatement, rn as pubkyProofCapability, rt as shortAtprotoDid, sn as pubkyHomeserverOf, st as DID_FILE_MAX_BYTES, ta as RUN_RESULTS, tn as newPubkyProofFolder, tt as normalizeAtprotoHandle, un as dnsProofName, ut as checkDidJws, vn as recordsFromWellKnown, vr as sanitizeTypingStatus, vt as didWebFileUrl, wi as sanitizeMime, wn as engineError, wt as signingKeys, xi as readImageMeta, xn as wellKnownUrl, xt as parseDid, yn as recordsName, yt as didWebHost, z as parseSshSignature, zs as RELAY_PAYLOAD_MAX_BYTES } from "./assets/src-C_E99PGx.js";
4
4
  import { d as wrap, i as databaseName, l as store$1, n as STORES, o as fileStore, s as openDb, u as transact } from "./assets/idb-Co2lObpU.js";
5
5
  import { createRequire } from "node:module";
6
6
  import { spawn } from "node:child_process";
@@ -34,7 +34,7 @@ import { IDBFactory, IDBKeyRange as IDBKeyRange$1, IDBTransaction } from "fake-i
34
34
  import { format } from "node:util";
35
35
  var package_default = {
36
36
  name: "@ghostlytools/cli",
37
- version: "1.1.1",
37
+ version: "1.1.3",
38
38
  type: "module",
39
39
  description: "Ghostly for bots and terminals: the app's own engine, headless on Node, behind a daemon and a `ghostly` command with JSON output.",
40
40
  license: "MIT",
@@ -495,7 +495,7 @@ function decodeCbor(bytes) {
495
495
  //#endregion
496
496
  //#region src/engineMethods.ts
497
497
  /**
498
- * The engine's calls the daemon passes through as `engine.<method>` (WISP 11xx § Local control API): exactly the
498
+ * The engine's calls the daemon passes through as `engine.<method>` (WISP 1100 § Local control API): exactly the
499
499
  * app's `EngineApi` (packages/browser/src/shared/rpc.ts; `engineMethods.test.ts` keeps the two equal), plus two
500
500
  * reads every host has. Nothing else on the engine object is reachable.
501
501
  */
@@ -1002,7 +1002,7 @@ function groupReply(reply, myKey) {
1002
1002
  //#endregion
1003
1003
  //#region src/typing.ts
1004
1004
  /**
1005
- * `typing --for` and `group typing --for`: a `start` holds 6 s on the other side (WISP 401 § Typing, WISP 9xx · Group
1005
+ * `typing --for` and `group typing --for`: a `start` holds 6 s on the other side (WISP 401 § Typing, WISP 902 · Group
1006
1006
  * Mesh § Typing), so the daemon says it again until the time is up, a message goes to that chat or group, or a
1007
1007
  * `--stop`. The engine sends a `start` at most once per refresh, counted from when the last one went: asking every half
1008
1008
  * refresh missed the tick at 3 s by a millisecond about half the time, so a start went every 4.5 s, 1.5 s inside the
@@ -1415,7 +1415,7 @@ function decodeWithFfmpeg(path, command = process.env.GHOSTLY_FFMPEG || "ffmpeg"
1415
1415
  //#endregion
1416
1416
  //#region src/files.ts
1417
1417
  /**
1418
- * Files and voice notes in a chat (WISP 11xx, phase 3), as the app's composer sends them (packages/browser
1418
+ * Files and voice notes in a chat (WISP 1100, phase 3), as the app's composer sends them (packages/browser
1419
1419
  * platform/services.ts `sendFile`): the bytes go into the profile's file store first, then the engine offers them.
1420
1420
  * Large files follow files/3: the receiving side's person (here, a command) accepts or declines each offer.
1421
1421
  */
@@ -1727,7 +1727,7 @@ async function waitForEdit(ctx, chat, messageId, ms) {
1727
1727
  }
1728
1728
  }
1729
1729
  /**
1730
- * Waits until an edge took my group message, or its edit number `edit` (WISP 9xx: a group has no receipts, so this is
1730
+ * Waits until an edge took my group message, or its edit number `edit` (WISP 902: a group has no receipts, so this is
1731
1731
  * as far as the author sees): a member's edge in a private group, an edge to one of my hubs in a community.
1732
1732
  */
1733
1733
  async function waitForGroupFrame(ctx, groupId, messageId, edit, ms) {
@@ -1874,7 +1874,7 @@ function answer(target, kind, id, messageId, extra) {
1874
1874
  };
1875
1875
  }
1876
1876
  /**
1877
- * A task's parent is another task of mine in the same chat or group (WISP 4xx · Status Cards § A task): one that is
1877
+ * A task's parent is another task of mine in the same chat or group (WISP 405 · Status Cards § A task): one that is
1878
1878
  * not there is refused here, with its name, rather than sent to stand alone on every board (a reader keeps the field
1879
1879
  * and shows the task ungrouped). Send the parent first.
1880
1880
  */
@@ -2020,7 +2020,7 @@ async function flushCardUpdates(ctx) {
2020
2020
  await Promise.all(waiting.map((pace) => pace.flushed));
2021
2021
  }
2022
2022
  var STATUS_CARD_METHODS = {
2023
- /** WISP 4xx · Status Cards: a task card in a chat or a group; the answer names the task's id and its message. */
2023
+ /** WISP 405 · Status Cards: a task card in a chat or a group; the answer names the task's id and its message. */
2024
2024
  "task.send": (ctx, params) => sendCard(ctx, params, "task"),
2025
2025
  /** A task's update: the fields given, merged over its latest state, paced one per `CARD_UPDATE_GAP_MS`. */
2026
2026
  "task.update": (ctx, params) => updateCard(ctx, params, "task"),
@@ -2216,9 +2216,9 @@ async function pressButton(ctx, params) {
2216
2216
  };
2217
2217
  }
2218
2218
  var BUTTON_METHODS = {
2219
- /** WISP 4xx · Message Buttons: a press on a button of someone else's message, as the app's tap. */
2219
+ /** WISP 406 · Message Buttons: a press on a button of someone else's message, as the app's tap. */
2220
2220
  "button.press": pressButton,
2221
- /** WISP 4xx · Message Buttons: the answer chosen on a question of mine, its buttons closed, or its text changed. */
2221
+ /** WISP 406 · Message Buttons: the answer chosen on a question of mine, its buttons closed, or its text changed. */
2222
2222
  "button.update": updateButtons
2223
2223
  };
2224
2224
  //#endregion
@@ -2522,7 +2522,7 @@ function groupJson(group, showSecret = false) {
2522
2522
  //#endregion
2523
2523
  //#region src/groupAdmin.ts
2524
2524
  /**
2525
- * Group administration and pictures (WISP 11xx, phase 3): what the app's group menu and profile screen do. The
2525
+ * Group administration and pictures (WISP 1100, phase 3): what the app's group menu and profile screen do. The
2526
2526
  * engine enforces who may do what (the admin); these check the arguments and name members.
2527
2527
  */
2528
2528
  /** A member by key, unique key prefix or name; never this profile itself. */
@@ -3966,7 +3966,7 @@ async function keyserverVerifiedEmails(keyserverArmored, fingerprint, options =
3966
3966
  //#region ../browser/src/proofs/providers/openpgp.ts
3967
3967
  /**
3968
3968
  * OpenPGP keys, signed with the person's own gpg — a YubiKey or another OpenPGP card works unchanged,
3969
- * since gpg drives it. The subject is the primary key's fingerprint. See docs/wisps/3xx-openpgp.md.
3969
+ * since gpg drives it. The subject is the primary key's fingerprint. See docs/wisps/305-openpgp.md.
3970
3970
  */
3971
3971
  /** A v4 (40 hex) or v6 (64 hex) fingerprint, as gpg prints it or not: spaces and 0x are dropped. */
3972
3972
  function normalizeFingerprint(input) {
@@ -7369,7 +7369,7 @@ var IDENTITY_METHODS = {
7369
7369
  //#endregion
7370
7370
  //#region src/services.ts
7371
7371
  /**
7372
- * Shared services (WISP 700/701, WISP 11xx phase 3b): a web app on this machine a contact may open over the chat's live
7372
+ * Shared services (WISP 700/701, WISP 1100 phase 3b): a web app on this machine a contact may open over the chat's live
7373
7373
  * link, and a contact's app opened here on a loopback port. As on the Desktop: only loopback is reached, redirects are
7374
7374
  * handed back rather than followed, and a service is shared with each contact by name, never by default.
7375
7375
  */
@@ -8097,7 +8097,7 @@ var keptInLight = (size, voice) => size <= (voice ? LIGHT_VOICE_BYTES : LIGHT_FI
8097
8097
  //#endregion
8098
8098
  //#region src/profiles.ts
8099
8099
  /**
8100
- * Profiles on disk (WISP 11xx § Profiles and files): `<home>/profiles/<name>/`, 0700, one engine store each.
8100
+ * Profiles on disk (WISP 1100 § Profiles and files): `<home>/profiles/<name>/`, 0700, one engine store each.
8101
8101
  * `<home>/current` names the profile commands use when none is given.
8102
8102
  */
8103
8103
  var DEFAULT_PROFILE = "default";
@@ -8225,7 +8225,7 @@ function lockOwner(paths) {
8225
8225
  * A headless profile's backup: the WISP 05 envelope around the profile itself, its store and its files, written and
8226
8226
  * read a piece at a time (envelope version 2), so a profile with large files never has to fit in memory. It restores
8227
8227
  * into a new headless profile; the app's own backups are made from its page's storage and are not this format
8228
- * (WISP 11xx § Parity). A backup an older CLI made (version 1: everything in one sealed JSON document) still restores.
8228
+ * (WISP 1100 § Parity). A backup an older CLI made (version 1: everything in one sealed JSON document) still restores.
8229
8229
  */
8230
8230
  var FORMAT$1 = "ghostly-cli-profile/2";
8231
8231
  var FORMAT_1 = "ghostly-cli-profile/1";
@@ -8584,7 +8584,7 @@ async function writeWhole(paths, payload) {
8584
8584
  }
8585
8585
  //#endregion
8586
8586
  //#region src/calls/api.ts
8587
- /** Voice calls (WISP 11xx § Calls): the API methods. The audio itself goes over each call's own socket. */
8587
+ /** Voice calls (WISP 1100 § Calls): the API methods. The audio itself goes over each call's own socket. */
8588
8588
  var CALL_METHODS = {
8589
8589
  async "call.start"(ctx, params) {
8590
8590
  return ctx.calls.start(str(params, "chat", true), { rate: params.rate });
@@ -10762,7 +10762,7 @@ function createFailure(label, error) {
10762
10762
  //#endregion
10763
10763
  //#region src/wallets.ts
10764
10764
  /**
10765
- * Wallets and payments (WISP 11xx, phase 2): the app's wallet deck and a chat's payment sheet, as methods. Test
10765
+ * Wallets and payments (WISP 1100, phase 2): the app's wallet deck and a chat's payment sheet, as methods. Test
10766
10766
  * networks move nothing real. On Mainnet every spend passes `confirmedReal`, which the engine requires, only when the
10767
10767
  * call says `confirmReal: true` (the CLI's `--confirm-real`): no flag, no spend.
10768
10768
  */
@@ -10792,7 +10792,7 @@ var CHAT_METHODS = [
10792
10792
  ...METHODS$1.filter((m) => m !== "cashu")
10793
10793
  ];
10794
10794
  /**
10795
- * What the app has and a headless Ghostly cannot run yet, and why (WISP 11xx § Wallet SDKs on Node). New offers
10795
+ * What the app has and a headless Ghostly cannot run yet, and why (WISP 1100 § Wallet SDKs on Node). New offers
10796
10796
  * them as unavailable; creating one is refused before the engine is asked.
10797
10797
  */
10798
10798
  var NODE_GAPS = { bark: "Bark's SDK ships a browser build only: its WebAssembly needs a browser window. Use it from the app." };
@@ -11270,7 +11270,7 @@ var TRANSPORT_NAMES = {
11270
11270
  "iroh/1": "iroh/1",
11271
11271
  "hyperdht/1": "hyperdht/1"
11272
11272
  };
11273
- /** Code points before `index` (UTF-16) in `text`: mentions count code points (WISP 9xx § Mentions). */
11273
+ /** Code points before `index` (UTF-16) in `text`: mentions count code points (WISP 902 § Mentions). */
11274
11274
  var codePoints = (text, index) => [...text.slice(0, index)].length;
11275
11275
  /**
11276
11276
  * Mentions for a group message: each ref (a member key, a unique prefix of one, a member's name, or `everyone`) must
@@ -11818,7 +11818,7 @@ var METHODS = {
11818
11818
  };
11819
11819
  },
11820
11820
  /**
11821
- * WISP 9xx § Edits: the whole new text of one of my messages in a group. It shows here at once and goes to the members
11821
+ * WISP 902 § Edits: the whole new text of one of my messages in a group. It shows here at once and goes to the members
11822
11822
  * (a private group's over the edges that are up, the others when theirs open; a community's through the group).
11823
11823
  * `mentions`: members the new text names beyond those the message named. `sent`: no longer waiting for the pace.
11824
11824
  */
@@ -11874,7 +11874,7 @@ var METHODS = {
11874
11874
  };
11875
11875
  },
11876
11876
  /**
11877
- * WISP 9xx · Group Mesh § Typing: `chat.typing` in a private group, said on the edges that are open (`reached`: to
11877
+ * WISP 902 · Group Mesh § Typing: `chat.typing` in a private group, said on the edges that are open (`reached`: to
11878
11878
  * how many members), with the same kinds, status rules, 6 s hold and `for`. A community does not carry typing yet.
11879
11879
  */
11880
11880
  async "group.typing"(ctx, params) {
@@ -12110,7 +12110,7 @@ function ownSocket(path) {
12110
12110
  //#endregion
12111
12111
  //#region src/client.ts
12112
12112
  /**
12113
- * A connection to a profile's daemon over its socket (WISP 11xx § Local control API). `null` from `connectDaemon`
12113
+ * A connection to a profile's daemon over its socket (WISP 1100 § Local control API). `null` from `connectDaemon`
12114
12114
  * means no daemon answers there: a one-shot command runs the profile itself.
12115
12115
  */
12116
12116
  var DaemonClient = class {
@@ -12262,7 +12262,7 @@ var reply = {
12262
12262
  type: "string",
12263
12263
  description: "Reply to this message (its id, from history or an event)"
12264
12264
  };
12265
- /** Buttons under a message (WISP 4xx · Message Buttons): the text is the question. */
12265
+ /** Buttons under a message (WISP 406 · Message Buttons): the text is the question. */
12266
12266
  var buttonOptions = {
12267
12267
  button: {
12268
12268
  type: "list",
@@ -12294,7 +12294,7 @@ function cursor(value) {
12294
12294
  return /^\d{10,}$/.test(text) ? Number(text) : text;
12295
12295
  }
12296
12296
  /**
12297
- * A status card's fields given as JSON (WISP 4xx · Status Cards): inline (`{...}`), `-` for stdin, or a file's path. The
12297
+ * A status card's fields given as JSON (WISP 405 · Status Cards): inline (`{...}`), `-` for stdin, or a file's path. The
12298
12298
  * flags given beside it win over it.
12299
12299
  */
12300
12300
  function cardJson(value) {
@@ -14329,7 +14329,7 @@ var PlaybackQueue = class {
14329
14329
  //#endregion
14330
14330
  //#region src/calls/audioSocket.ts
14331
14331
  /**
14332
- * A call's audio socket (WISP 11xx § Calls): `<profile>/calls/<call>.sock`, 0600, in a folder only the owner may
14332
+ * A call's audio socket (WISP 1100 § Calls): `<profile>/calls/<call>.sock`, 0600, in a folder only the owner may
14333
14333
  * open. When that path is too long for a Unix socket: `/tmp/ghostly-calls-<hash of the profile>/<call>.sock`, in a
14334
14334
  * folder of the owner's, 0700, checked as such before use. A named pipe on Windows.
14335
14335
  */
@@ -15912,7 +15912,7 @@ var EventHub = class {
15912
15912
  for (const [fileId, messageId] of files) this.flushFile(fileId, messageId);
15913
15913
  }
15914
15914
  /**
15915
- * A press on a button of a message of mine (WISP 4xx · Message Buttons), after the reply's own event: the question
15915
+ * A press on a button of a message of mine (WISP 406 · Message Buttons), after the reply's own event: the question
15916
15916
  * (`messageId`), the button, its label, who pressed (`by`: the chat, or a group member's key), `name` (the chat's name
15917
15917
  * here, as `chat list` gives it: its label, else the contact's own name; a group member's roster name) and the reply
15918
15918
  * (`replyId`). `untrusted.name` is the name the person gave themselves, as an agent turn's: theirs to choose, so
@@ -16380,7 +16380,7 @@ async function fedimintSdkOn(platform) {
16380
16380
  //#endregion
16381
16381
  //#region src/runtime/fedimint.ts
16382
16382
  /**
16383
- * The Fedimint client on Node (WISP 11xx § Wallet SDKs on Node): the app's own SDK and WebAssembly, each database in
16383
+ * The Fedimint client on Node (WISP 1100 § Wallet SDKs on Node): the app's own SDK and WebAssembly, each database in
16384
16384
  * a `worker_threads` worker (fedimintWorker.mjs) and a file of the profile's `fedimint/` folder, where the browser has
16385
16385
  * a module worker and the origin-private file system. Only the platform differs: the client and what the engine does
16386
16386
  * with it are the app's.
@@ -16986,7 +16986,7 @@ function irohWasmBytes() {
16986
16986
  return readFileSync(createRequire(import.meta.url).resolve("@ghostly/iroh-web/wasm"));
16987
16987
  }
16988
16988
  /**
16989
- * Starts the app's engine on this profile (WISP 11xx § Runtime): IndexedDB on disk, WebRTC through libdatachannel,
16989
+ * Starts the app's engine on this profile (WISP 1100 § Runtime): IndexedDB on disk, WebRTC through libdatachannel,
16990
16990
  * HyperDHT native in this process, Iroh's wasm build (relay only, as the web app), Pkarr through the relays in the
16991
16991
  * settings and the Mainline DHT directly (read when the relays fail, written always).
16992
16992
  * The caller holds the profile's lock.
@@ -17029,14 +17029,14 @@ async function startRuntime(paths, options = {}) {
17029
17029
  (await import("./assets/ghostly_iroh_web-Dvzh3Y6E.js")).initSync({ module: irohWasmBytes() });
17030
17030
  const [{ registerFileBytes }, { NodeFileBytes }] = await Promise.all([import("./assets/fileBytes-DxiJHmTk.js").then((n) => n.o), import("./assets/fileBytes-BQ84L9Fe.js")]);
17031
17031
  registerFileBytes("native", async () => new NodeFileBytes(paths.files), true);
17032
- const [{ EngineServer }, { createHyperEndpoint }] = await Promise.all([import("./assets/server-vGoe9MET.js").then((n) => n.t), import("./assets/endpoint-CaSbSFDw.js")]);
17032
+ const [{ EngineServer }, { createHyperEndpoint }] = await Promise.all([import("./assets/server-9AM0ta6q.js").then((n) => n.t), import("./assets/endpoint-CaSbSFDw.js")]);
17033
17033
  const network = hyperdhtNetwork();
17034
17034
  const dht = mainlineNetwork();
17035
- const mainline = dht.off ? null : new (await (import("./assets/mainline-CKFpwXcB.js"))).Mainline({
17035
+ const mainline = dht.off ? null : new (await (import("./assets/mainline-B0UTU0-4.js"))).Mainline({
17036
17036
  bootstrap: dht.bootstrap,
17037
17037
  host: dht.host
17038
17038
  });
17039
- const transport = mainline || pinned ? new (await (import("./assets/mainline-CKFpwXcB.js"))).RelaysAndDht(mainline, pinned ? { relays: pinned } : {}, !!pinned) : null;
17039
+ const transport = mainline || pinned ? new (await (import("./assets/mainline-B0UTU0-4.js"))).RelaysAndDht(mainline, pinned ? { relays: pinned } : {}, !!pinned) : null;
17040
17040
  const server = new EngineServer({
17041
17041
  ...transport ? { transport } : {},
17042
17042
  irohWeb: true,
@@ -17368,7 +17368,7 @@ function turn(event, source, where, message) {
17368
17368
  }
17369
17369
  };
17370
17370
  }
17371
- /** Only loopback: events carry message text, and a webhook is a local bridge (WISP 11xx § Security). */
17371
+ /** Only loopback: events carry message text, and a webhook is a local bridge (WISP 1100 § Security). */
17372
17372
  function checkWebhook(url) {
17373
17373
  let parsed;
17374
17374
  try {