@ghostlytools/cli 1.3.3 → 1.3.5
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 +1 -1
- package/SKILL.md +2 -1
- package/dist/assets/{api-Bg7bh_6E.js → api-CgPyYfjH.js} +2 -2
- package/dist/assets/{api-B1fADtqd.js → api-Do7NjRg2.js} +44 -9
- package/dist/assets/api-Do7NjRg2.js.map +1 -0
- package/dist/assets/{apiKit-BsUZPHLn.js → apiKit-eh5qBKIl.js} +2 -2
- package/dist/assets/{apiKit-BsUZPHLn.js.map → apiKit-eh5qBKIl.js.map} +1 -1
- package/dist/assets/{apps-DepomCiX.js → apps-B83dRFga.js} +1 -1
- package/dist/assets/{apps-BaUNt-5c.js → apps-Cl9MtELY.js} +2 -2
- package/dist/assets/{apps-BaUNt-5c.js.map → apps-Cl9MtELY.js.map} +1 -1
- package/dist/assets/{arkade-CNnMaoEQ.js → arkade-B5Xn40bC.js} +2 -2
- package/dist/assets/{arkade-CNnMaoEQ.js.map → arkade-B5Xn40bC.js.map} +1 -1
- package/dist/assets/{backup-Bbz3lyC5.js → backup-BjZcDFjL.js} +4 -4
- package/dist/assets/{backup-Bbz3lyC5.js.map → backup-BjZcDFjL.js.map} +1 -1
- package/dist/assets/{backup-B5Q1W-Ey.js → backup-CDOh2tuw.js} +1 -1
- package/dist/assets/buttons-CFabREDv.js +2 -0
- package/dist/assets/{buttons-DS1iURp8.js → buttons-CUKHafux.js} +3 -3
- package/dist/assets/{buttons-DS1iURp8.js.map → buttons-CUKHafux.js.map} +1 -1
- package/dist/assets/{envelope-fNC941z4.js → envelope-wspXCjle.js} +2 -2
- package/dist/assets/{envelope-fNC941z4.js.map → envelope-wspXCjle.js.map} +1 -1
- package/dist/assets/{groupFiles-6qnLCnOm.js → groupFiles-Cfrjo3YS.js} +31 -4
- package/dist/assets/{groupFiles-6qnLCnOm.js.map → groupFiles-Cfrjo3YS.js.map} +1 -1
- package/dist/assets/{host-Dj3C1fn3.js → host-BdS-7nRW.js} +8 -8
- package/dist/assets/{host-Dj3C1fn3.js.map → host-BdS-7nRW.js.map} +1 -1
- package/dist/assets/{hyperdhtRelay-CrgYQN-g.js → hyperdhtRelay-H97Vz73W.js} +2 -2
- package/dist/assets/{hyperdhtRelay-CrgYQN-g.js.map → hyperdhtRelay-H97Vz73W.js.map} +1 -1
- package/dist/assets/{irohWeb-DSyLp5Re.js → irohWeb-jErC-V0J.js} +2 -2
- package/dist/assets/{irohWeb-DSyLp5Re.js.map → irohWeb-jErC-V0J.js.map} +1 -1
- package/dist/assets/{main-BDd11Yd1.js → main-C14lA5aK.js} +24 -18
- package/dist/assets/main-C14lA5aK.js.map +1 -0
- package/dist/assets/{mainline-CLTo0nGa.js → mainline-CYI1tZT7.js} +2 -2
- package/dist/assets/{mainline-CLTo0nGa.js.map → mainline-CYI1tZT7.js.map} +1 -1
- package/dist/assets/{networkReason-DwcadZz5.js → networkReason-CiHrd-kG.js} +2 -2
- package/dist/assets/{networkReason-DwcadZz5.js.map → networkReason-CiHrd-kG.js.map} +1 -1
- package/dist/assets/{nwc-BNFyyECH.js → nwc-0JYm8Vys.js} +3 -3
- package/dist/assets/{nwc-BNFyyECH.js.map → nwc-0JYm8Vys.js.map} +1 -1
- package/dist/assets/{nwcProvider-BbjJOfLD.js → nwcProvider-2coJAsqr.js} +2 -2
- package/dist/assets/{nwcProvider-BbjJOfLD.js.map → nwcProvider-2coJAsqr.js.map} +1 -1
- package/dist/assets/{registry-CoLHpxkb.js → registry-BptCF3tL.js} +3 -3
- package/dist/assets/{registry-CoLHpxkb.js.map → registry-BptCF3tL.js.map} +1 -1
- package/dist/assets/{registry-DoTb6uEr.js → registry-sML83UvL.js} +1 -1
- package/dist/assets/{resolve-BIDJ-UUl.js → resolve-2hGrvTen.js} +2 -2
- package/dist/assets/{resolve-BIDJ-UUl.js.map → resolve-2hGrvTen.js.map} +1 -1
- package/dist/assets/{server-Bx3RGkBC.js → server-BbPiCghe.js} +106 -35
- package/dist/assets/server-BbPiCghe.js.map +1 -0
- package/dist/assets/{src-D7gcJElT.js → src-BLzG4Sfv.js} +14 -2
- package/dist/assets/src-BLzG4Sfv.js.map +1 -0
- package/dist/assets/{turnRefs-PN644M9o.js → turnRefs-ClWSgjb0.js} +2 -2
- package/dist/assets/{turnRefs-PN644M9o.js.map → turnRefs-ClWSgjb0.js.map} +1 -1
- package/dist/assets/{usdt-B2TLRlYa.js → usdt-zwyn_AQK.js} +3 -3
- package/dist/assets/{usdt-B2TLRlYa.js.map → usdt-zwyn_AQK.js.map} +1 -1
- package/dist/ghostly.mjs +1 -1
- package/package.json +1 -1
- package/dist/assets/api-B1fADtqd.js.map +0 -1
- package/dist/assets/buttons-CUd7j0ZA.js +0 -2
- package/dist/assets/main-BDd11Yd1.js.map +0 -1
- package/dist/assets/server-Bx3RGkBC.js.map +0 -1
- package/dist/assets/src-D7gcJElT.js.map +0 -1
|
@@ -1,16 +1,16 @@
|
|
|
1
1
|
import { n as traceJoin } from "./joinTrace-CjRDFy85.js";
|
|
2
|
-
import { $c as currentRelays, $i as revokesIdentity, $n as GROUP_FILE_LIMITS, $r as WAKE_CALL_INTERVAL_MS, $t as didDhtFromPublicKey, A as CommunitySession, Aa as forwardedAgain, Ac as devicePingFrame, Ao as rosterAdmin, Ar as newerHead, As as handoffOfferFrame, B as knockRecords, Ba as readReaction, Bc as TURN_MAX, Bi as capsDescriptors, Bn as findEndpoint, Bo as GhostlyHttpError, Br as transferStalled, Bs as readHandoffHave, C as sha256Paced, Ca as parseImageMeta, Cc as DEVICES_CAPABILITY, Ci as readManifest, Cl as randomBytes, Cn as isBitcoinAddress, Cr as beaconRecords, Cs as handoffContext, D as openGroupTyping, Da as RateWindow, Dc as deviceEchoNonce, Dl as utf8Encode, Do as MEMBER_KEY, Dr as lobbyRecords, Ds as handoffEphemeral, E as groupTypingEpoch, Ea as EDIT_RATE_WINDOW_MS, Ec as deviceEchoFrame, El as utf8Decode, Er as lobbyKeys, Es as handoffDigest, Et as normalizeAtprotoHandle, Fa as ReactionWindow, Fc as TURN_RAISE_READ_TIMEOUT_MS, Fr as readLobby, Fs as handoffVersions, G as groupWakeFrame, Ga as replySnippet, Gc as signTurnRelease, Gn as INVITE_TAKEN, Go as decodeControl, Gr as typingActivity, Gs as sealHandoffPiece, H as readKnocks, Ha as wireReaction, Hc as nextTurnPosition, Hn as parseCashuRequestPayload, Ho as parseLocalTarget, Hs as readHandoffPake, I as decodeGroupEntryLink, Ia as nextReactionNumber, Ic as TURN_SETTLE_MS, In as decodeBolt11, Io as DHT_POLL_INTERVALS, Ir as shouldBeHub, Is as newHandoffId, J as GROUP_LIMITS, Jc as turnName, Ji as emptyIdentityLedger, Jn as pairedMessageFits, Jo as RTC_CONFIG, Jr as mayPin, Js as readSetUpdate, K as groupWakes, Ka as BUTTON_ID, Kc as turnInstance, Ki as IdentityExchange, Kn as LIVENESS_PING_MS, Ko as encodeControl, L as encodeGroupEntryLink, La as queueReaction, Lc as classifyTurnRead, Ln as ENDPOINT, Lr as ChatFiles, Ls as readHandoffAck, M as communityHasFrame, Ma as COMMUNITY_REACTION_FRAME, Mc as seedSigner, Mo as verifyCommitSignature, Mr as rankHubs, Ms as handoffReleaseFrame, N as decodeCommunityLink, Na as GROUP_REACTION_FRAME, Nc as webCryptoSigner, No as edgeParams, Nr as readBeacon, Ns as handoffRetryAfter, O as sealGroupTyping, Oa as dhtEditId, Oc as deviceKeyZ32, Oo as commitHash, Or as mergeBeacon, Os as handoffHelloFrame, P as encodeCommunityLink, Pa as REACTION_LIMITS, Po as DirectPathWatch, Pr as readBeaconHead, Ps as handoffStreamKey, Q as frameBytes, Qc as RelayTransport, Qi as receivedIdentityStatus, Qn as parseEngineError, Qr as readPin, Qs as verifySetUpdate, Qt as didDhtDocument, R as entryParams, Ra as reactionEmoji, Rc as turnPutSummary, Ri as CapsExchange, Rn as cashuRequestPayload, Ro as RELAY_POLL_INTERVALS, Rr as FILE_LIMITS, Rs as readHandoffCancel, S as readAppBundleAsync, Sa as parseVideoMeta, Si as newMailbox, Sn as sparkInvoiceDetails, So as canonicalJson, Sr as beaconKeys, Ss as handoffCancelFrame, T as GroupTypingBoard, Ta as EDIT_BUFFER_MS, Tc as HANDOFF_CAPABILITY, Tl as toZ32, Tn as isPubkyKey, To as GROUP_MEMBER_CAP, Tr as freshHubs, Ts as handoffDataFrame, Tt as isAtprotoDid, Ua as pairedReplyAuthor, Uc as readTurnPacket, Un as parseFedimintRequestPayload, Uo as webLocalFetch, Ur as TypingSender, Us as readHandoffTurnFrame, V as mergeKnocks, Va as validReactionNumber, Vc as firstDeviceSetSecret, Vi as dialDescriptors, Vn as isFederationId, Vo as formatLocalTarget, Vs as readHandoffHello, W as GroupWakeLimiter, Wa as readReply, Wc as signTurnPacket, Wi as IDENTITY_REVOCATION_LABEL, Wn as GhostLink, Wo as LIMITS, Ws as readHandoffVerified, X as GROUP_READ_NOTE, Xc as turnVerifierMark, Xi as identityStatement, Xn as engineError, Xr as pinIsNewer, Xs as setUpdateFrame, Yc as turnStatedVerifier, Yi as identityRevocationValue, Yn as pairedMessageFrame, Yr as nextPinNumber, Ys as setAckFrame, Z as GroupSession, Za as STATUS_CARD_LIMITS, Zc as DEFAULT_RELAYS, Zi as newIdentityBinding, Zn as engineText, Zr as pinNumberHolds, Zs as signTombstone, _c as createChatInvite, _i as HOLD_DATED_BACK_MS, _n as validatePaymentTarget, _o as isAppRef, _r as MESH_HUBS, _s as filePartName, a as planAppUpdate, aa as automaticTransport, ac as enrollDigits, ai as wakeRequest, al as withRequestOptions, an as EVM_TEST_CHAINS, ao as arrivalKey, as as serviceIdFromName, at as groupName, b as pacer, ba as parseVoiceMeta, bi as HoldRefusedError, bl as bytesEqual, bn as SPARK_PROVIDER, br as pickMeshHubs, bs as handoffAttemptSucceeded, cc as enrollHelloFrame, cl as createRelayPayload, cn as SEPOLIA_TEST_USDT, co as receivedTimestamp, cs as HANDOFF_DONE, d as APP_BUNDLE_LIMITS, da as DHT_FILE_CAPABILITY, dc as readEnrollHello, di as APPS_CAPABILITY, dn as USDT_PUBLIC_RPC, do as APP_STATEMENT_LIMITS, ds as HANDOFF_OFFER, ea as lastSharedWithMe, ei as WakeLimiter, el as normalizeRelayUrl, en as encodeDidDhtDeactivated, es as parseCallSignal, f as APP_BUNDLE_MAGIC, fa as dhtFileId, fc as verifyEnrollProof, fi as BUTTONS_CAPABILITY, fl as createIdentity, fn as WALLET_NETWORKS, fo as appFingerprint, fs as HANDOFF_PAKE, g as appViewOf, gc as OwnInviteError, gi as HOLD_CAPABILITY, gl as verify, gn as formatPaymentAmount, go as isAppKey, gr as readGroupSignal, gs as HANDOFF_VERIFIED, h as appDigest, ha as sanitizeMime, hc as readDeviceInvite, hi as UPGRADE_CAPABILITY, hl as publicKeyFromZ32, hn as assertWholeSats, ho as isAppHash, hr as groupSignalFrame, hs as HANDOFF_TIMINGS, i as checkAppBeforeRun, ia as TRANSPORTS, ic as enrollCancelReason, ii as relayRequest, il as isDiscoveryBudgetError, in as ETHEREUM_USDT, io as statusCardText, ir as groupFileFallback, is as LEGACY_SERVICES, it as mentionsMember, j as GROUP_READ_NOTE_COMMUNITY, ja as readForwarded, jc as newDeviceSetSecret, jo as rosterHas, jr as pickHubs, js as handoffPakeFrame, k as COMMUNITY_LIMITS, ka as parseLinkPreview, kc as deviceLinkPairing, ko as parseGroupCommit, kr as mergeLobby, ks as handoffManifestFrames, l as readAppStoreSteps, la as DHT_MESSAGE_TTL, lc as enrollProofFrame, li as chatAppId, lo as shownTime, ls as HANDOFF_HAVE, ma as sanitizeFileName, mc as deviceInviteJoinerParams, mi as STATUS_CARD_CAPABILITY, ml as identityFromSeedB64, mn as assertTokenUnits, ms as HANDOFF_REQUEST, n as appStoreDecision, na as emptyProofLedger, ni as newWakeToken, nl as traceLink, no as checkStatusCard, ns as emptyLinkRecords, nt as carryMentions, o as APP_STORE_LIMITS, oc as enrollDoneFrame, oi as checkPushEndpoint, ol as PacketTooLargeError, on as ONCHAIN_PROVIDER, oo as claimedTime, or as readGroupFileMeta, os as HANDOFF_ACK, p as APP_ICON_PATH, pa as formatFileSize, pc as createDeviceInvite, pi as EDIT_CAPABILITY, pl as identityFromSeed, pn as arkAddressPrefix, po as appRef, ps as HANDOFF_PIECE_BYTES, q as parseGroupWakeFrame, qc as turnKeys, qn as PAIRED_FRAME_TOO_LARGE, qr as PIN_LIMITS, r as appUpdateDecision, ra as validExternalKey, rc as enrollCancelFrame, ri as parseWakeFrame, rl as budgetRetryMs, rn as signDidDhtPacket, ro as sameButtonText, rs as HTTP_SERVICE_PROTO, rt as parseCommunityEdit, sc as enrollGrantFrame, si as vapidKeysMatch, sn as PaymentPreflightError, so as heardTime, ss as HANDOFF_CANCEL, t as appRevocationFor, ta as PeerProofs, ti as deviceWakeRequest, tn as encodeDidDhtPacket, tt as GROUP_EDIT_TEXT_BYTES, ua as peekDhtMailbox, uc as readEnrollGrant, ui as isAppVersion, un as TEST_USDT_FAUCET_AMOUNT, ur as CarriedTransport, us as HANDOFF_HELLO, vc as decodeInviteCode, vi as HOLD_LIMITS, vl as sanitizeAvatar, vn as walletNetworkOf, vo as readAppRevocation, vr as mayBeHub, vs as handoffAttemptAllowed, wc as ENROLL_CAPABILITY, wl as toBase64Url, wo as readCanonicalJson, wr as doorHubs, ws as handoffContextProof, xc as inviteOwnership, xi as isHoldUrl, xl as fromBase64Url, xn as sparkAddressKind, xr as COMMUNITY_TOPOLOGY, xs as handoffBusyFrame, y as isAppUrl, ya as fileMessageText, yc as encodeInviteCode, yi as HoldKeys, yl as sanitizeDisplayText, yn as SPARK_NETWORKS, yr as meshHubs, ys as handoffAttemptFailed, z as knockIdentity, za as reactionIsNewer, zc as TURN_LAST_SEQUENCE, zi as DHT_TEXT_CAPABILITY, zn as fedimintRequestPayload, zo as presenceSeenAt, zr as transferEnded, zs as readHandoffDone } from "./src-
|
|
2
|
+
import { $c as currentRelays, $i as revokesIdentity, $n as GROUP_FILE_LIMITS, $r as WAKE_CALL_INTERVAL_MS, $t as didDhtFromPublicKey, A as CommunitySession, Aa as forwardedAgain, Ac as devicePingFrame, Ao as rosterAdmin, Ar as newerHead, As as handoffOfferFrame, B as knockRecords, Ba as readReaction, Bc as TURN_MAX, Bi as capsDescriptors, Bn as findEndpoint, Bo as GhostlyHttpError, Br as transferStalled, Bs as readHandoffHave, C as sha256Paced, Ca as parseImageMeta, Cc as DEVICES_CAPABILITY, Ci as readManifest, Cl as randomBytes, Cn as isBitcoinAddress, Cr as beaconRecords, Cs as handoffContext, D as openGroupTyping, Da as RateWindow, Dc as deviceEchoNonce, Dl as utf8Encode, Do as MEMBER_KEY, Dr as lobbyRecords, Ds as handoffEphemeral, E as groupTypingEpoch, Ea as EDIT_RATE_WINDOW_MS, Ec as deviceEchoFrame, El as utf8Decode, Er as lobbyKeys, Es as handoffDigest, Et as normalizeAtprotoHandle, Fa as ReactionWindow, Fc as TURN_RAISE_READ_TIMEOUT_MS, Fr as readLobby, Fs as handoffVersions, G as groupWakeFrame, Ga as replySnippet, Gc as signTurnRelease, Gn as INVITE_TAKEN, Go as decodeControl, Gr as typingActivity, Gs as sealHandoffPiece, H as readKnocks, Ha as wireReaction, Hc as nextTurnPosition, Hn as parseCashuRequestPayload, Ho as parseLocalTarget, Hs as readHandoffPake, I as decodeGroupEntryLink, Ia as nextReactionNumber, Ic as TURN_SETTLE_MS, In as decodeBolt11, Io as DHT_POLL_INTERVALS, Ir as shouldBeHub, Is as newHandoffId, J as GROUP_LIMITS, Jc as turnName, Ji as emptyIdentityLedger, Jn as pairedMessageFits, Jo as RTC_CONFIG, Jr as mayPin, Js as readSetUpdate, K as groupWakes, Ka as BUTTON_ID, Kc as turnInstance, Ki as IdentityExchange, Kn as LIVENESS_PING_MS, Ko as encodeControl, L as encodeGroupEntryLink, La as queueReaction, Lc as classifyTurnRead, Ln as ENDPOINT, Lr as ChatFiles, Ls as readHandoffAck, M as communityHasFrame, Ma as COMMUNITY_REACTION_FRAME, Mc as seedSigner, Mo as verifyCommitSignature, Mr as rankHubs, Ms as handoffReleaseFrame, N as decodeCommunityLink, Na as GROUP_REACTION_FRAME, Nc as webCryptoSigner, No as edgeParams, Nr as readBeacon, Ns as handoffRetryAfter, O as sealGroupTyping, Oa as dhtEditId, Oc as deviceKeyZ32, Oo as commitHash, Or as mergeBeacon, Os as handoffHelloFrame, P as encodeCommunityLink, Pa as REACTION_LIMITS, Po as DirectPathWatch, Pr as readBeaconHead, Ps as handoffStreamKey, Q as frameBytes, Qc as RelayTransport, Qi as receivedIdentityStatus, Qn as parseEngineError, Qr as readPin, Qs as verifySetUpdate, Qt as didDhtDocument, R as entryParams, Ra as reactionEmoji, Rc as turnPutSummary, Ri as CapsExchange, Rn as cashuRequestPayload, Ro as RELAY_POLL_INTERVALS, Rr as FILE_LIMITS, Rs as readHandoffCancel, S as readAppBundleAsync, Sa as parseVideoMeta, Si as newMailbox, Sn as sparkInvoiceDetails, So as canonicalJson, Sr as beaconKeys, Ss as handoffCancelFrame, T as GroupTypingBoard, Ta as EDIT_BUFFER_MS, Tc as HANDOFF_CAPABILITY, Tl as toZ32, Tn as isPubkyKey, To as GROUP_MEMBER_CAP, Tr as freshHubs, Ts as handoffDataFrame, Tt as isAtprotoDid, Ua as pairedReplyAuthor, Uc as readTurnPacket, Un as parseFedimintRequestPayload, Uo as webLocalFetch, Ur as TypingSender, Us as readHandoffTurnFrame, V as mergeKnocks, Va as validReactionNumber, Vc as firstDeviceSetSecret, Vi as dialDescriptors, Vn as isFederationId, Vo as formatLocalTarget, Vs as readHandoffHello, W as GroupWakeLimiter, Wa as readReply, Wc as signTurnPacket, Wi as IDENTITY_REVOCATION_LABEL, Wn as GhostLink, Wo as LIMITS, Ws as readHandoffVerified, X as GROUP_READ_NOTE, Xc as turnVerifierMark, Xi as identityStatement, Xn as engineError, Xr as pinIsNewer, Xs as setUpdateFrame, Yc as turnStatedVerifier, Yi as identityRevocationValue, Yn as pairedMessageFrame, Yr as nextPinNumber, Ys as setAckFrame, Z as GroupSession, Za as STATUS_CARD_LIMITS, Zc as DEFAULT_RELAYS, Zi as newIdentityBinding, Zn as engineText, Zr as pinNumberHolds, Zs as signTombstone, _c as createChatInvite, _i as HOLD_DATED_BACK_MS, _n as validatePaymentTarget, _o as isAppRef, _r as MESH_HUBS, _s as filePartName, a as planAppUpdate, aa as automaticTransport, ac as enrollDigits, ai as wakeRequest, al as withRequestOptions, an as EVM_TEST_CHAINS, ao as arrivalKey, as as serviceIdFromName, at as groupName, b as pacer, ba as parseVoiceMeta, bi as HoldRefusedError, bl as bytesEqual, bn as SPARK_PROVIDER, br as pickMeshHubs, bs as handoffAttemptSucceeded, cc as enrollHelloFrame, cl as createRelayPayload, cn as SEPOLIA_TEST_USDT, co as receivedTimestamp, cs as HANDOFF_DONE, d as APP_BUNDLE_LIMITS, da as DHT_FILE_CAPABILITY, dc as readEnrollHello, di as APPS_CAPABILITY, dn as USDT_PUBLIC_RPC, do as APP_STATEMENT_LIMITS, ds as HANDOFF_OFFER, ea as lastSharedWithMe, ei as WakeLimiter, el as normalizeRelayUrl, en as encodeDidDhtDeactivated, es as parseCallSignal, f as APP_BUNDLE_MAGIC, fa as dhtFileId, fc as verifyEnrollProof, fi as BUTTONS_CAPABILITY, fl as createIdentity, fn as WALLET_NETWORKS, fo as appFingerprint, fs as HANDOFF_PAKE, g as appViewOf, gc as OwnInviteError, gi as HOLD_CAPABILITY, gl as verify, gn as formatPaymentAmount, go as isAppKey, gr as readGroupSignal, gs as HANDOFF_VERIFIED, h as appDigest, ha as sanitizeMime, hc as readDeviceInvite, hi as UPGRADE_CAPABILITY, hl as publicKeyFromZ32, hn as assertWholeSats, ho as isAppHash, hr as groupSignalFrame, hs as HANDOFF_TIMINGS, i as checkAppBeforeRun, ia as TRANSPORTS, ic as enrollCancelReason, ii as relayRequest, il as isDiscoveryBudgetError, in as ETHEREUM_USDT, io as statusCardText, ir as groupFileFallback, is as LEGACY_SERVICES, it as mentionsMember, j as GROUP_READ_NOTE_COMMUNITY, ja as readForwarded, jc as newDeviceSetSecret, jo as rosterHas, jr as pickHubs, js as handoffPakeFrame, k as COMMUNITY_LIMITS, ka as parseLinkPreview, kc as deviceLinkPairing, ko as parseGroupCommit, kr as mergeLobby, ks as handoffManifestFrames, l as readAppStoreSteps, la as DHT_MESSAGE_TTL, lc as enrollProofFrame, li as chatAppId, lo as shownTime, ls as HANDOFF_HAVE, ma as sanitizeFileName, mc as deviceInviteJoinerParams, mi as STATUS_CARD_CAPABILITY, ml as identityFromSeedB64, mn as assertTokenUnits, ms as HANDOFF_REQUEST, n as appStoreDecision, na as emptyProofLedger, ni as newWakeToken, nl as traceLink, no as checkStatusCard, ns as emptyLinkRecords, nt as carryMentions, o as APP_STORE_LIMITS, oc as enrollDoneFrame, oi as checkPushEndpoint, ol as PacketTooLargeError, on as ONCHAIN_PROVIDER, oo as claimedTime, or as readGroupFileMeta, os as HANDOFF_ACK, p as APP_ICON_PATH, pa as formatFileSize, pc as createDeviceInvite, pi as EDIT_CAPABILITY, pl as identityFromSeed, pn as arkAddressPrefix, po as appRef, ps as HANDOFF_PIECE_BYTES, q as parseGroupWakeFrame, qc as turnKeys, qn as PAIRED_FRAME_TOO_LARGE, qr as PIN_LIMITS, r as appUpdateDecision, ra as validExternalKey, rc as enrollCancelFrame, ri as parseWakeFrame, rl as budgetRetryMs, rn as signDidDhtPacket, ro as sameButtonText, rs as HTTP_SERVICE_PROTO, rt as parseCommunityEdit, sc as enrollGrantFrame, si as vapidKeysMatch, sn as PaymentPreflightError, so as heardTime, ss as HANDOFF_CANCEL, t as appRevocationFor, ta as PeerProofs, ti as deviceWakeRequest, tn as encodeDidDhtPacket, tt as GROUP_EDIT_TEXT_BYTES, ua as peekDhtMailbox, uc as readEnrollGrant, ui as isAppVersion, un as TEST_USDT_FAUCET_AMOUNT, ur as CarriedTransport, us as HANDOFF_HELLO, vc as decodeInviteCode, vi as HOLD_LIMITS, vl as sanitizeAvatar, vn as walletNetworkOf, vo as readAppRevocation, vr as mayBeHub, vs as handoffAttemptAllowed, wc as ENROLL_CAPABILITY, wl as toBase64Url, wo as readCanonicalJson, wr as doorHubs, ws as handoffContextProof, xc as inviteOwnership, xi as isHoldUrl, xl as fromBase64Url, xn as sparkAddressKind, xr as COMMUNITY_TOPOLOGY, xs as handoffBusyFrame, y as isAppUrl, ya as fileMessageText, yc as encodeInviteCode, yi as HoldKeys, yl as sanitizeDisplayText, yn as SPARK_NETWORKS, yr as meshHubs, ys as handoffAttemptFailed, z as knockIdentity, za as reactionIsNewer, zc as TURN_LAST_SEQUENCE, zi as DHT_TEXT_CAPABILITY, zn as fedimintRequestPayload, zo as presenceSeenAt, zr as transferEnded, zs as readHandoffDone } from "./src-BLzG4Sfv.js";
|
|
3
3
|
import { i as SourceUnreachableError, n as PROVIDER_PLATFORMS, o as isNothingSpentError, r as SourceConfigError, t as NothingSpentError, u as redact } from "./types-C4_KafL_.js";
|
|
4
4
|
import { t as bitcoindRpc } from "./bitcoindProvider-DGw3xBSa.js";
|
|
5
|
-
import { t as nwc } from "./nwcProvider-
|
|
5
|
+
import { t as nwc } from "./nwcProvider-2coJAsqr.js";
|
|
6
6
|
import { a as clearProfileStores, c as fileStore, d as profileOpenFailure, f as store, i as STORES$1, l as newestWalletTx, m as wrap, n as APP_STORAGE_SCOPE_INDEX, o as databaseName, p as transact, r as CARD_INDEX, s as deleteDatabase, t as APP_STORAGE_CHAT_INDEX, u as openDb } from "./idb-B5L8wuOm.js";
|
|
7
|
-
import { a as sealSeed, i as newDeviceKey, o as unsealSeed, r as intentRepository } from "./networkReason-
|
|
8
|
-
import { $ as setSingleWriterGate, A as LightningCards, B as breezDatabaseInUse, C as FileAppender, D as streamStored, E as storedSize, F as ProviderSources, G as ModeChanged, H as dropBreezDatabase, I as sourceKey, J as networkLabel, K as ModeGate, L as CASHU_MINT_SOURCE, M as isRecoveryPhrase, N as normalizePhrase, P as lightningPaying, Q as setAwayWallets, R as cashuMint, S as WALLET_TYPES, T as removeStored, U as iceServerProblem, V as breezDatabasesFor, W as iceServerSetting, X as refuseAway, Y as awayFrom, Z as requireTurn, _ as crossNetwork, a as storedGroupFiles, b as walletInstances, c as receivedPairedReply, d as paymentAlias, f as paymentWireId, g as createTiming, h as createFailure, i as groupOfFile, j as cardsKey, k as CASHU_CARD, l as replyRef, m as assertConfirmedReal, n as groupFileId, o as groupReply, p as WALLET_NAMES, q as WrongNetworkError, r as groupFileText, s as pairedWireReply, t as GroupFileDesk, u as replyTo, v as paymentNetwork, w as readStored$1, y as paymentNetworksOf, z as breezDatabase } from "./groupFiles-
|
|
9
|
-
import { i as fedimintDatabase, n as createIrohWebEndpoint, o as loadFedimintSdk, r as irohRelayProblem, t as DEFAULT_IROH_RELAYS } from "./irohWeb-
|
|
7
|
+
import { a as sealSeed, i as newDeviceKey, o as unsealSeed, r as intentRepository } from "./networkReason-CiHrd-kG.js";
|
|
8
|
+
import { $ as setSingleWriterGate, A as LightningCards, B as breezDatabaseInUse, C as FileAppender, D as streamStored, E as storedSize, F as ProviderSources, G as ModeChanged, H as dropBreezDatabase, I as sourceKey, J as networkLabel, K as ModeGate, L as CASHU_MINT_SOURCE, M as isRecoveryPhrase, N as normalizePhrase, P as lightningPaying, Q as setAwayWallets, R as cashuMint, S as WALLET_TYPES, T as removeStored, U as iceServerProblem, V as breezDatabasesFor, W as iceServerSetting, X as refuseAway, Y as awayFrom, Z as requireTurn, _ as crossNetwork, a as storedGroupFiles, b as walletInstances, c as receivedPairedReply, d as paymentAlias, f as paymentWireId, g as createTiming, h as createFailure, i as groupOfFile, j as cardsKey, k as CASHU_CARD, l as replyRef, m as assertConfirmedReal, n as groupFileId, o as groupReply, p as WALLET_NAMES, q as WrongNetworkError, r as groupFileText, s as pairedWireReply, t as GroupFileDesk, u as replyTo, v as paymentNetwork, w as readStored$1, y as paymentNetworksOf, z as breezDatabase } from "./groupFiles-Cfrjo3YS.js";
|
|
9
|
+
import { i as fedimintDatabase, n as createIrohWebEndpoint, o as loadFedimintSdk, r as irohRelayProblem, t as DEFAULT_IROH_RELAYS } from "./irohWeb-jErC-V0J.js";
|
|
10
10
|
import { c as isTestMint, d as paysItsOwnInvoices, l as isWorthlessMint, n as DEFAULT_MINTS, o as fakesLightning, r as TEST_MINT, t as BITCOIN_INVOICE_ON_TESTNET, u as mintNetwork } from "./mints-BrlY773j.js";
|
|
11
|
-
import { _ as reserveAdapterIds, b as testBuild, f as setOwnDidSource, g as registeredOnchainProviders, h as registeredLightningProviders, l as chosenResolver, n as resolveAtprotoDid, p as onAdaptersChanged, t as assertPublicServer, v as boundedIdentityFetch, y as verifyIdentity } from "./resolve-
|
|
11
|
+
import { _ as reserveAdapterIds, b as testBuild, f as setOwnDidSource, g as registeredOnchainProviders, h as registeredLightningProviders, l as chosenResolver, n as resolveAtprotoDid, p as onAdaptersChanged, t as assertPublicServer, v as boundedIdentityFetch, y as verifyIdentity } from "./resolve-2hGrvTen.js";
|
|
12
12
|
import { c as fileSpace, f as FILE_BYTES_STEP, o as fileBytes, r as blobDigest, s as fileBytesOf, u as removeFileBytes } from "./fileBytes-Di7VZtmU.js";
|
|
13
|
-
import { n as MAX_BACKUP_BYTES, t as BACKUP_MEDIA_TYPE } from "./envelope-
|
|
13
|
+
import { n as MAX_BACKUP_BYTES, t as BACKUP_MEDIA_TYPE } from "./envelope-wspXCjle.js";
|
|
14
14
|
import { t as hyperdhtRelayProblem } from "./hyperdhtRelay-BT_wRxab.js";
|
|
15
15
|
import { sha256 } from "@noble/hashes/sha2.js";
|
|
16
16
|
import { hkdf } from "@noble/hashes/hkdf.js";
|
|
@@ -199,7 +199,7 @@ function viewNews(before, after) {
|
|
|
199
199
|
//#endregion
|
|
200
200
|
//#region ../browser/src/engine/paymentAdapters/usdtWallet.ts
|
|
201
201
|
/** The Ethereum libraries, a large part of the app: loaded once a USDT wallet is made, opened or restored, not with the engine. */
|
|
202
|
-
var loadUsdt = () => import("./usdt-
|
|
202
|
+
var loadUsdt = () => import("./usdt-zwyn_AQK.js");
|
|
203
203
|
/** Every new profile starts with this wallet: an address to receive on, nothing to set up. */
|
|
204
204
|
var DEFAULT_USDT = {
|
|
205
205
|
network: "ethereum",
|
|
@@ -648,7 +648,7 @@ async function restoreArkDatabase(walletId, snapshot) {
|
|
|
648
648
|
//#endregion
|
|
649
649
|
//#region ../browser/src/engine/paymentAdapters/arkWallet.ts
|
|
650
650
|
/** The Ark SDK, a large part of the app: loaded once an Ark wallet is made, opened or restored, not with the engine. */
|
|
651
|
-
var loadArkade = () => import("./arkade-
|
|
651
|
+
var loadArkade = () => import("./arkade-B5Xn40bC.js");
|
|
652
652
|
/** How long a Testnet wallet about to make way for another waits for its server to say what it holds. */
|
|
653
653
|
var RETIRE_READ_MS = 1e4;
|
|
654
654
|
/** Every new profile starts with this wallet: nothing to set up before receiving. */
|
|
@@ -6703,7 +6703,7 @@ var registry;
|
|
|
6703
6703
|
var loading$1;
|
|
6704
6704
|
var listeners = /* @__PURE__ */ new Set();
|
|
6705
6705
|
function loadIdentityProviders() {
|
|
6706
|
-
return loading$1 ??= import("./registry-
|
|
6706
|
+
return loading$1 ??= import("./registry-sML83UvL.js").then((m) => {
|
|
6707
6707
|
registry = m;
|
|
6708
6708
|
for (const listener of listeners) listener();
|
|
6709
6709
|
return m;
|
|
@@ -7723,6 +7723,11 @@ function checkedEvent(raw, maxContentLength = 16384, now = Date.now()) {
|
|
|
7723
7723
|
tags: copy.tags.map((t) => [...t])
|
|
7724
7724
|
};
|
|
7725
7725
|
}
|
|
7726
|
+
/** Whether `raw` is `event` (one already checked) in every field, the tags included. */
|
|
7727
|
+
function sameEvent(event, raw) {
|
|
7728
|
+
const tags = raw.tags;
|
|
7729
|
+
return raw.id === event.id && raw.pubkey === event.pubkey && raw.sig === event.sig && raw.kind === event.kind && raw.created_at === event.created_at && raw.content === event.content && Array.isArray(tags) && tags.length === event.tags.length && event.tags.every((tag, i) => Array.isArray(tags[i]) && tags[i].length === tag.length && tag.every((x, j) => tags[i][j] === x));
|
|
7730
|
+
}
|
|
7726
7731
|
var subscriptionId = () => "ghostly-" + Array.from(crypto.getRandomValues(/* @__PURE__ */ new Uint8Array(8)), (b) => b.toString(16).padStart(2, "0")).join("");
|
|
7727
7732
|
/** Newest first, ties broken by the lexicographically smaller id (NIP-01's rule for replaceable events). */
|
|
7728
7733
|
var byNewest = (a, b) => b.created_at - a.created_at || a.id.localeCompare(b.id);
|
|
@@ -7795,10 +7800,17 @@ async function readRelays(relays, filter, options = {}) {
|
|
|
7795
7800
|
return;
|
|
7796
7801
|
}
|
|
7797
7802
|
if (frame[0] !== "EVENT") return;
|
|
7798
|
-
const
|
|
7799
|
-
if (!
|
|
7803
|
+
const raw = frame[2];
|
|
7804
|
+
if (!raw || typeof raw !== "object" || !filter.kinds.includes(raw.kind) || filter.authors && !filter.authors.includes(raw.pubkey)) return;
|
|
7805
|
+
const known = typeof raw.id === "string" ? seen.get(raw.id) : void 0;
|
|
7806
|
+
if (known) {
|
|
7807
|
+
if (!sameEvent(known, raw)) return;
|
|
7808
|
+
} else {
|
|
7809
|
+
const event = checkedEvent(raw, maxContentLength);
|
|
7810
|
+
if (!event) return;
|
|
7811
|
+
seen.set(event.id, event);
|
|
7812
|
+
}
|
|
7800
7813
|
replied = true;
|
|
7801
|
-
if (!seen.has(event.id)) seen.set(event.id, event);
|
|
7802
7814
|
if (++count >= maxEvents) finish(true);
|
|
7803
7815
|
};
|
|
7804
7816
|
})));
|
|
@@ -9986,21 +9998,26 @@ var AppFetchError = class extends Error {
|
|
|
9986
9998
|
}
|
|
9987
9999
|
};
|
|
9988
10000
|
function boundedAppFetch(options = {}) {
|
|
9989
|
-
return async (url, { maxBytes, peek = false }) => {
|
|
10001
|
+
return async (url, { maxBytes, peek = false, revalidate = false, signal: stopped }) => {
|
|
9990
10002
|
if (!isAppFetchUrl(url)) throw new AppFetchError("host", "Apps are read only from raw.githubusercontent.com, or from cdn.jsdelivr.net at a commit, over HTTPS");
|
|
9991
10003
|
if (options.online && !options.online()) throw new AppFetchError("offline", "Offline");
|
|
10004
|
+
if (stopped?.aborted) throw new AppFetchError("network", "The read was stopped");
|
|
9992
10005
|
const fetcher = options.fetcher ?? globalThis.fetch.bind(globalThis);
|
|
9993
10006
|
const controller = new AbortController();
|
|
9994
10007
|
const cut = () => {
|
|
9995
10008
|
controller.abort(new DOMException("The read took too long", "TimeoutError"));
|
|
9996
10009
|
};
|
|
10010
|
+
const stop = () => {
|
|
10011
|
+
controller.abort(new DOMException("The read was stopped", "AbortError"));
|
|
10012
|
+
};
|
|
10013
|
+
stopped?.addEventListener("abort", stop);
|
|
9997
10014
|
const total = setTimeout(cut, options.totalMs ?? APP_FETCH_LIMITS.totalMs);
|
|
9998
10015
|
let idle = setTimeout(cut, options.timeoutMs ?? APP_FETCH_LIMITS.timeoutMs);
|
|
9999
10016
|
const heard = () => {
|
|
10000
10017
|
clearTimeout(idle);
|
|
10001
10018
|
idle = setTimeout(cut, options.idleMs ?? APP_FETCH_LIMITS.idleMs);
|
|
10002
10019
|
};
|
|
10003
|
-
const failure = (error) => controller.signal.aborted ? new AppFetchError("slow", "That took too long on this connection") : new AppFetchError("network", error instanceof Error ? error.message : String(error));
|
|
10020
|
+
const failure = (error) => stopped?.aborted ? new AppFetchError("network", "The read was stopped") : controller.signal.aborted ? new AppFetchError("slow", "That took too long on this connection") : new AppFetchError("network", error instanceof Error ? error.message : String(error));
|
|
10004
10021
|
const { signal } = controller;
|
|
10005
10022
|
let response;
|
|
10006
10023
|
try {
|
|
@@ -10008,13 +10025,14 @@ function boundedAppFetch(options = {}) {
|
|
|
10008
10025
|
signal,
|
|
10009
10026
|
credentials: "omit",
|
|
10010
10027
|
referrerPolicy: "no-referrer",
|
|
10011
|
-
cache: "no-store",
|
|
10028
|
+
cache: revalidate && !peek ? "no-cache" : "no-store",
|
|
10012
10029
|
redirect: "error",
|
|
10013
10030
|
...peek && { headers: { range: `bytes=0-${maxBytes - 1}` } }
|
|
10014
10031
|
});
|
|
10015
10032
|
} catch (error) {
|
|
10016
10033
|
clearTimeout(total);
|
|
10017
10034
|
clearTimeout(idle);
|
|
10035
|
+
stopped?.removeEventListener("abort", stop);
|
|
10018
10036
|
throw failure(error);
|
|
10019
10037
|
}
|
|
10020
10038
|
heard();
|
|
@@ -10032,10 +10050,10 @@ function boundedAppFetch(options = {}) {
|
|
|
10032
10050
|
}
|
|
10033
10051
|
const reader = response.body?.getReader();
|
|
10034
10052
|
if (reader) {
|
|
10035
|
-
const
|
|
10053
|
+
const letGo = () => {
|
|
10036
10054
|
reader.cancel().catch(() => {});
|
|
10037
10055
|
};
|
|
10038
|
-
signal.addEventListener("abort",
|
|
10056
|
+
signal.addEventListener("abort", letGo);
|
|
10039
10057
|
try {
|
|
10040
10058
|
for (;;) {
|
|
10041
10059
|
const { done, value } = await reader.read();
|
|
@@ -10055,13 +10073,14 @@ function boundedAppFetch(options = {}) {
|
|
|
10055
10073
|
if (error instanceof AppFetchError) throw error;
|
|
10056
10074
|
throw failure(error);
|
|
10057
10075
|
} finally {
|
|
10058
|
-
signal.removeEventListener("abort",
|
|
10076
|
+
signal.removeEventListener("abort", letGo);
|
|
10059
10077
|
await reader.cancel().catch(() => {});
|
|
10060
10078
|
}
|
|
10061
10079
|
}
|
|
10062
10080
|
} finally {
|
|
10063
10081
|
clearTimeout(total);
|
|
10064
10082
|
clearTimeout(idle);
|
|
10083
|
+
stopped?.removeEventListener("abort", stop);
|
|
10065
10084
|
}
|
|
10066
10085
|
const bytes = new Uint8Array(length);
|
|
10067
10086
|
let at = 0;
|
|
@@ -10388,6 +10407,8 @@ var Apps = class {
|
|
|
10388
10407
|
runUsed = /* @__PURE__ */ new Map();
|
|
10389
10408
|
/** Reads of a bundle under way, by digest: icons drawn at once share one read. */
|
|
10390
10409
|
verifying = /* @__PURE__ */ new Map();
|
|
10410
|
+
/** Reads of a bundle's URL under way: an install screen opened again waits on the read the closed one began, not on a second. */
|
|
10411
|
+
bundleReads = /* @__PURE__ */ new Map();
|
|
10391
10412
|
/**
|
|
10392
10413
|
* The `icon.png` of each checked bundle, by digest (at most 256 KiB and 1024 × 1024 pixels, or null for none): every icon shown on the Apps
|
|
10393
10414
|
* page, in a chat's cards and in the composer's Apps is read without the whole bundle again.
|
|
@@ -10403,6 +10424,10 @@ var Apps = class {
|
|
|
10403
10424
|
timer = null;
|
|
10404
10425
|
/** Drops what `staged` holds past `STAGED.ms`, set while it holds anything: a closed install screen sends no call. */
|
|
10405
10426
|
sweep = null;
|
|
10427
|
+
/** The store `previewStore` last read and checked, for Add to take within `STAGED.ms` without reading it again. */
|
|
10428
|
+
previewed = null;
|
|
10429
|
+
/** Drops `previewed` past `STAGED.ms`: an index is up to 4 MiB, and a closed Add screen sends no call. */
|
|
10430
|
+
previewedSweep = null;
|
|
10406
10431
|
checking = null;
|
|
10407
10432
|
/** Runs the person started with Run anyway (`<ref> <digest>`), for this engine's life: a removal does not cut them off. */
|
|
10408
10433
|
anyway = /* @__PURE__ */ new Set();
|
|
@@ -10459,6 +10484,7 @@ var Apps = class {
|
|
|
10459
10484
|
if (this.sweep) clearTimeout(this.sweep);
|
|
10460
10485
|
this.sweep = null;
|
|
10461
10486
|
this.staged.clear();
|
|
10487
|
+
this.keepPreviewed(null);
|
|
10462
10488
|
this.held.clear();
|
|
10463
10489
|
this.heldStores = null;
|
|
10464
10490
|
this.views = null;
|
|
@@ -10812,14 +10838,22 @@ var Apps = class {
|
|
|
10812
10838
|
this.runUsed.delete(digest);
|
|
10813
10839
|
}
|
|
10814
10840
|
}
|
|
10815
|
-
|
|
10816
|
-
const
|
|
10817
|
-
|
|
10818
|
-
|
|
10819
|
-
|
|
10820
|
-
|
|
10821
|
-
|
|
10822
|
-
|
|
10841
|
+
fetchBundle(url) {
|
|
10842
|
+
const running = this.bundleReads.get(url);
|
|
10843
|
+
if (running) return running;
|
|
10844
|
+
const read = (async () => {
|
|
10845
|
+
const bytes = await this.host.fetch(url, { maxBytes: APP_BUNDLE_LIMITS.bundleBytes });
|
|
10846
|
+
const read = await readAppBundleAsync(bytes);
|
|
10847
|
+
if (!read.ok) fail(read.reason, `This is not an app Ghostly can install${read.detail ? ` (${read.detail})` : ""}`);
|
|
10848
|
+
return {
|
|
10849
|
+
bundle: read.bundle,
|
|
10850
|
+
bytes
|
|
10851
|
+
};
|
|
10852
|
+
})().finally(() => {
|
|
10853
|
+
this.bundleReads.delete(url);
|
|
10854
|
+
});
|
|
10855
|
+
this.bundleReads.set(url, read);
|
|
10856
|
+
return read;
|
|
10823
10857
|
}
|
|
10824
10858
|
/**
|
|
10825
10859
|
* Reads the index at `url`. With the index held for this store, bytes equal to it (by digest) are the held index: its
|
|
@@ -10829,7 +10863,16 @@ var Apps = class {
|
|
|
10829
10863
|
* this store or another, a preview included, is not checked again.
|
|
10830
10864
|
*/
|
|
10831
10865
|
async readStoreAt(url, heldKey, held) {
|
|
10832
|
-
const
|
|
10866
|
+
const stop = new AbortController();
|
|
10867
|
+
const read = (at, maxBytes) => this.host.fetch(at, {
|
|
10868
|
+
maxBytes,
|
|
10869
|
+
revalidate: true,
|
|
10870
|
+
signal: stop.signal
|
|
10871
|
+
}).catch((error) => {
|
|
10872
|
+
stop.abort();
|
|
10873
|
+
throw error;
|
|
10874
|
+
});
|
|
10875
|
+
const [indexBytes, sigBytes] = await Promise.all([read(url, APP_FETCH_LIMITS.storeIndexBytes), read(besideUrl(url, "ghostly-store.sig"), APP_FETCH_LIMITS.sigBytes)]);
|
|
10833
10876
|
if (held?.index && held.digest !== void 0 && toBase64Url(await sha256Paced(indexBytes)) === held.digest) return {
|
|
10834
10877
|
ok: true,
|
|
10835
10878
|
store: {
|
|
@@ -10856,7 +10899,10 @@ var Apps = class {
|
|
|
10856
10899
|
if (read.has(url)) continue;
|
|
10857
10900
|
read.add(url);
|
|
10858
10901
|
try {
|
|
10859
|
-
const file = await this.readRevocationsFile(await this.host.fetch(url, {
|
|
10902
|
+
const file = await this.readRevocationsFile(await this.host.fetch(url, {
|
|
10903
|
+
maxBytes: APP_FETCH_LIMITS.revocationsBytes,
|
|
10904
|
+
revalidate: true
|
|
10905
|
+
}));
|
|
10860
10906
|
if (file) (out ??= []).push(...file.filter((r) => r.statement.app === ref));
|
|
10861
10907
|
} catch {}
|
|
10862
10908
|
}
|
|
@@ -10930,12 +10976,24 @@ var Apps = class {
|
|
|
10930
10976
|
storeUrl(url) {
|
|
10931
10977
|
return typeof url === "string" && appPasteUrl(url, "ghostly-store.json") || notReadable(url, "Stores are read only from raw.githubusercontent.com, or from cdn.jsdelivr.net at a commit, over HTTPS");
|
|
10932
10978
|
}
|
|
10933
|
-
|
|
10979
|
+
keepPreviewed(previewed) {
|
|
10980
|
+
if (this.previewedSweep) clearTimeout(this.previewedSweep);
|
|
10981
|
+
this.previewedSweep = previewed ? setTimeout(() => this.keepPreviewed(null), STAGED.ms) : null;
|
|
10982
|
+
this.previewed = previewed;
|
|
10983
|
+
}
|
|
10984
|
+
/** Reads a store at a URL for the person to see before adding it. Nothing is stored: the checked index waits in memory for `addStore`. */
|
|
10934
10985
|
async previewStore({ url }) {
|
|
10935
10986
|
const at = this.storeUrl(url);
|
|
10987
|
+
this.keepPreviewed(null);
|
|
10936
10988
|
const read = await this.readStoreAt(at);
|
|
10937
10989
|
if (!read.ok) fail(read.reason, "This is not a store Ghostly can read");
|
|
10938
|
-
const { index } = read.store;
|
|
10990
|
+
const { index, digest } = read.store;
|
|
10991
|
+
this.keepPreviewed({
|
|
10992
|
+
url: at,
|
|
10993
|
+
index,
|
|
10994
|
+
digest,
|
|
10995
|
+
at: this.now()
|
|
10996
|
+
});
|
|
10939
10997
|
return {
|
|
10940
10998
|
url: at,
|
|
10941
10999
|
key: index.key,
|
|
@@ -10951,12 +11009,22 @@ var Apps = class {
|
|
|
10951
11009
|
}
|
|
10952
11010
|
/**
|
|
10953
11011
|
* Adds a store the person chose: read at its URL and pinned to its key (`key`, when given, is the key the person saw,
|
|
10954
|
-
* and another one is refused). A store already added under that key takes the URL and the newer index.
|
|
11012
|
+
* and another one is refused). A store already added under that key takes the URL and the newer index. The index the
|
|
11013
|
+
* preview just read at that URL, under that key, is taken as it is (only its expiry again), not downloaded again.
|
|
10955
11014
|
*/
|
|
10956
11015
|
async addStore({ url, key }) {
|
|
10957
11016
|
if (key !== void 0 && !isAppKey(key)) fail("store-key", "Not a store key");
|
|
10958
11017
|
const at = this.storeUrl(url);
|
|
10959
|
-
const
|
|
11018
|
+
const kept = this.previewed;
|
|
11019
|
+
this.keepPreviewed(null);
|
|
11020
|
+
const read = kept && kept.url === at && (key === void 0 || key === kept.index.key) && this.now() - kept.at <= STAGED.ms ? {
|
|
11021
|
+
ok: true,
|
|
11022
|
+
store: {
|
|
11023
|
+
index: kept.index,
|
|
11024
|
+
digest: kept.digest,
|
|
11025
|
+
expired: kept.index.expires < this.nowS()
|
|
11026
|
+
}
|
|
11027
|
+
} : await this.readStoreAt(at, key);
|
|
10960
11028
|
if (!read.ok) fail(read.reason, "This is not a store Ghostly can read");
|
|
10961
11029
|
const { index, digest } = read.store;
|
|
10962
11030
|
const held = await this.storeRecord(index.key);
|
|
@@ -16258,6 +16326,7 @@ var DeviceLinks = class {
|
|
|
16258
16326
|
packetTransports: true,
|
|
16259
16327
|
transport: this.options.transport,
|
|
16260
16328
|
pollIntervals: this.options.pollIntervals,
|
|
16329
|
+
madeAt: 0,
|
|
16261
16330
|
autoConnect: true,
|
|
16262
16331
|
createPeerConnection: () => {
|
|
16263
16332
|
if (!this.createPeerConnection) throw new ReferenceError("RTCPeerConnection is not defined");
|
|
@@ -42260,6 +42329,7 @@ var GhostlyNode = class GhostlyNode {
|
|
|
42260
42329
|
transport: live.carried ?? this.groupTransport,
|
|
42261
42330
|
nick: !entry && this.quietEdge(stored) ? void 0 : this.sharedNick,
|
|
42262
42331
|
pollIntervals: entry || this.groups.isCommunityGroup(group) ? this.pollIntervals : meshEdgeIntervals(this.pollIntervals, () => this.groups.meshSize(group)),
|
|
42332
|
+
madeAt: stored.createdAt,
|
|
42263
42333
|
autoConnect: true,
|
|
42264
42334
|
...entry ? {
|
|
42265
42335
|
oneShot: true,
|
|
@@ -42829,6 +42899,7 @@ var GhostlyNode = class GhostlyNode {
|
|
|
42829
42899
|
return held.digest;
|
|
42830
42900
|
},
|
|
42831
42901
|
onFileIncoming: (file) => this.receiveFile(linkId, file),
|
|
42902
|
+
onFileRoom: async () => (await fileBytes()).room(),
|
|
42832
42903
|
onFileProgress: (id, transferred, direction) => this.fileProgress(this.localFileId(linkId, id, direction), transferred),
|
|
42833
42904
|
onFileComplete: (id, direction) => this.fileSettled(this.localFileId(linkId, id, direction, { failed: false }), void 0, linkId),
|
|
42834
42905
|
onFilesFrame: (frame) => this.fileDesk.handle(linkId, frame),
|
|
@@ -42967,7 +43038,7 @@ var GhostlyNode = class GhostlyNode {
|
|
|
42967
43038
|
get nativeFactories() {
|
|
42968
43039
|
const relay = this.relaysHyperdht ? this.hyperdhtRelay : "";
|
|
42969
43040
|
return {
|
|
42970
|
-
...relay ? { "hyperdht/1": async (seedB64) => (await import("./hyperdhtRelay-
|
|
43041
|
+
...relay ? { "hyperdht/1": async (seedB64) => (await import("./hyperdhtRelay-H97Vz73W.js")).createRelayedHyperEndpoint(seedB64, relay) } : {},
|
|
42971
43042
|
...this.options.nativeTransports,
|
|
42972
43043
|
...this.ownIrohRelays ? { "iroh/1": (seedB64) => this.options.nativeTransports["iroh/1"](seedB64, this.settings.irohRelays?.length ? { relays: [...this.settings.irohRelays] } : {}) } : {},
|
|
42973
43044
|
...this.options.irohWeb ? { "iroh/1": (seedB64) => createIrohWebEndpoint(seedB64, { relays: this.irohRelays }) } : {}
|
|
@@ -43816,4 +43887,4 @@ function signalKind(signal) {
|
|
|
43816
43887
|
//#endregion
|
|
43817
43888
|
export { EngineServer };
|
|
43818
43889
|
|
|
43819
|
-
//# sourceMappingURL=server-
|
|
43890
|
+
//# sourceMappingURL=server-BbPiCghe.js.map
|