@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/README.md +6 -6
- package/SKILL.md +1 -1
- package/dist/assets/{hyperdhtRelay-CVLCuqVr.js → hyperdhtRelay-CHMS7_KO.js} +3 -3
- package/dist/assets/{hyperdhtRelay-CVLCuqVr.js.map → hyperdhtRelay-CHMS7_KO.js.map} +1 -1
- package/dist/assets/{mainline-CKFpwXcB.js → mainline-B0UTU0-4.js} +2 -2
- package/dist/assets/{mainline-CKFpwXcB.js.map → mainline-B0UTU0-4.js.map} +1 -1
- package/dist/assets/{server-vGoe9MET.js → server-9AM0ta6q.js} +84 -72
- package/dist/assets/{server-vGoe9MET.js.map → server-9AM0ta6q.js.map} +1 -1
- package/dist/assets/{src-CJdPTl7Q.js → src-C_E99PGx.js} +42 -42
- package/dist/assets/{src-CJdPTl7Q.js.map → src-C_E99PGx.js.map} +1 -1
- package/dist/ghostly.mjs +32 -32
- package/dist/ghostly.mjs.map +1 -1
- package/examples/call-echo.mjs +1 -1
- package/package.json +1 -1
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-
|
|
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.
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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/
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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-
|
|
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-
|
|
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-
|
|
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
|
|
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 {
|