1 line
No EOL
609 KiB
Text
1 line
No EOL
609 KiB
Text
{"version":3,"mappings":"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AA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAA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AAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AAAAA;AA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","names":["basePath","setBasePath","path","getBasePath","subpath","scripts","configScript","script","fallbackScript","s","__defProp","__defProps","__getOwnPropDesc","__getOwnPropDescs","__getOwnPropSymbols","__hasOwnProp","__propIsEnum","__defNormalProp","obj","key","value","__spreadValues","a","b","prop","__spreadProps","__decorateClass","decorators","target","kind","result","decorator","__accessCheck","member","msg","__privateGet","getter","__privateAdd","__privateSet","setter","t","e","o","n$4","r","n","i","S","c","h","l","p","d","u","f","y","v","_","m","g","$","x","T","E","A","C","P","V","N","H","I","L","k","M","R","z","j","B","r$2","number","bytes","lengths","hash","exists","instance","checkFinished","output","out","min","crypto","u8a","createView","arr","rotr","word","shift","isLE","utf8ToBytes","str","toBytes","data","concatBytes","arrays","sum","pad","Hash$1","wrapConstructor","hashCons","hashC","tmp","randomBytes","bytesLength","setBigUint64","view","byteOffset","_32n","_u32_max","wh","wl","Hash","blockLen","outputLen","padOffset","buffer","len","pos","take","dataView","oview","outLen","state","res","to","length","finished","destroyed","Chi","Maj","SHA256_K","IV","SHA256_W","SHA2","D","F","G","offset","W15","W2","s0","s1","sigma1","T1","T2","sha256","SHA256","_0n","_1n","_2n","hexes","bytesToHex","hex","numberToHexUnpadded","num","hexToNumber","hexToBytes","array","hexByte","byte","bytesToNumberBE","bytesToNumberLE","numberToBytesBE","numberToBytesLE","numberToVarBytesBE","ensureBytes","title","expectedLength","equalBytes","b1","b2","bitLen","bitGet","bitSet","bitMask","u8n","u8fr","createHmacDrbg","hashLen","qByteLen","hmacFn","reset","reseed","seed","gen","sl","pred","validatorFns","val","object","validateObject","validators","optValidators","checkField","fieldName","type","isOptional","checkVal","_3n","_4n","_5n","_8n","mod","pow","power","modulo","pow2","invert","q","tonelliShanks","legendreC","Q","Z","p1div4","Fp","root","Q1div2","t2","ge","FpSqrt","c1","n2","nv","FIELD_FIELDS","validateField","field","initial","opts","map","FpPow","FpInvertBatch","nums","lastMultiplied","acc","inverted","nLength","nBitLength","_nBitLength","nByteLength","Field","ORDER","redef","BITS","BYTES","sqrtP","lhs","rhs","lst","getFieldBytesLength","fieldOrder","bitLength","getMinHashLength","mapHashToField","fieldLen","minLen","reduced","wNAF","bits","constTimeNegate","condition","item","neg","W","windows","windowSize","elm","points","base","window","precomputes","mask","maxNumber","shiftBy","wbits","offset1","offset2","cond1","cond2","precomputesMap","transform","comp","validateBasic","curve","validatePointOpts","ut.validateObject","endo","b2n","h2b","ut","DER","sBytes","rBytesLeft","sig","slice","shl","rhl","rl","weierstrassPoints","CURVE","_c","point","_isCompressed","ut.concatBytes","fromBytes","tail","weierstrassEquation","x2","x3","isWithinCurveOrder","assertGE","normPrivateKeyToScalar","wrapPrivateKey","ut.bytesToHex","ut.bytesToNumberBE","mod.mod","pointPrecomputes","assertPrjPoint","other","Point","px","py","pz","is0","toInv","privateKey","left","right","X1","Y1","Z1","X2","Y2","Z2","U1","U2","b3","X3","Y3","Z3","t0","t1","t3","t4","t5","wnaf","k1neg","k1","k2neg","k2","k1p","k2p","scalar","fake","f1p","f2p","mul","iz","ax","ay","zz","cofactor","isTorsionFree","clearCofactor","isCompressed","_bits","validateOpts","weierstrass","curveDef","CURVE_ORDER","compressedLen","uncompressedLen","isValidFieldElement","modN","invN","mod.invert","cat","head","y2","isYOdd","numToNByteStr","ut.numberToBytesBE","isBiggerThanHalfOrder","HALF","normalizeS","slcNum","from","Signature","recovery","msgHash","rec","bits2int_modN","radj","prefix","ir","u1","u2","ut.hexToBytes","utils","mod.getMinHashLength","mod.mapHashToField","getPublicKey","isProbPub","getSharedSecret","privateA","publicB","bits2int","delta","ORDER_MASK","ut.bitMask","int2octets","prepSig","defaultSigOpts","lowS","prehash","ent","h1int","seedArgs","k2sig","kBytes","ik","normS","defaultVerOpts","sign","privKey","ut.createHmacDrbg","verify","signature","publicKey","sg","_sig","derError","error","is","_key","assertHash","buf","assertExists","assertBytes","oHash","iHash","hmac","message","HMAC","getHash","msgs","createCurve","defHash","create","secp256k1P","secp256k1N","divNearest","sqrtMod","_6n","_11n","_22n","_23n","_44n","_88n","b6","b9","b11","b22","b44","b88","b176","b220","b223","secp256k1","a1","a2","POW_2_128","c2","fe","TAGGED_HASH_PREFIXES","taggedHash","tag","messages","tagP","tagH","pointToBytes","numTo32b","modP","GmulAdd","schnorrGetExtPubKey","priv","d_","lift_x","xx","challenge","args","schnorrGetPublicKey","schnorrSign","auxRand","rand","k_","rx","schnorrVerify","pub","schnorr","bool","assert","SHA224","assertNumber","chain","wrap","encode","decode","alphabet","digits","input","letter","index","join","separator","padding","chr","end","normalize","fn","convertRadix","carry","done","digit","digitBase","gcd","radix2carry","convertRadix2","radix","radix2","revPadding","unsafeWrapper","base16","base32","base64","base64url","genBase58","abc","base58","XMR_BLOCK_LEN","base58xmr","block","BECH_ALPHABET","POLYMOD_GENERATORS","bech32Polymod","pre","chk","bechChecksum","words","encodingConst","genBech32","encoding","ENCODING_CONST","_words","fromWords","toWords","fromWordsUnsafe","limit","actualLength","lowered","sepIndex","decodeUnsafe","decodeToBytes","bech32","utf8","CODERS","isBytes","u32","checkOpts","defaults","diff","wrapCipher","params","BLOCK_SIZE","POLY","mul2","sbox","box","invSbox","rotr32_8","rotl32_8","genTtable","T0","T3","T01","T23","sbox2","idx","tableEncoding","tableDecoding","xPowers","expandKeyLE","abytes","k32","Nk","subByte","applySbox","xk","expandKeyDecLE","encKey","w","apply0123","s2","s3","encrypt","rounds","decrypt","getDst","dst","validateBlockDecrypt","validateBlockEncrypt","plaintext","pcks5","remaining","validatePCKS","lastByte","padPCKS","tmp32","paddingByte","cbc","iv","_out","n32","ciphertext","ps0","ps1","ps2","ps3","o0","o1","o2","o3","_utf8ToBytes","sigma16","sigma32","sigma16_32","sigma32_32","rotl","isAligned32","BLOCK_LEN","BLOCK_LEN32","MAX_COUNTER","U32_EMPTY","runCipher","core","sigma","nonce","counter","b32","isAligned","d32","o32","pos32","posj","createCipher","allowShortKeys","extendNonceFn","counterLength","counterRight","anumber","abool","toClean","nonceNcLen","nc","chachaCore","cnt","y00","y01","y02","y03","y04","y05","y06","y07","y08","y09","y10","y11","y12","y13","y14","y15","x00","x01","x02","x03","x04","x05","x06","x07","x08","x09","x10","x11","x12","x13","x14","x15","oi","chacha20","extract","ikm","salt","HKDF_COUNTER","EMPTY_BUFFER","expand","prk","info","blocks","okm","HMACTmp","__export","all","name","verifiedSymbol","isRecord","validateEvent","event","i2","utils_exports","Queue","QueueNode","binarySearch","insertEventIntoAscendingList","insertEventIntoDescendingList","normalizeURL","utf8Decoder","utf8Encoder","url","sortedArray","found","compare","start","mid","cmp","newNode","target2","JS","secretKey","getEventHash","valid","serializeEvent","evt","eventHash","generateSecretKey","finalizeEvent","verifyEvent","kinds_exports","Application","BadgeAward","BadgeDefinition","BlockedRelaysList","BookmarkList","Bookmarksets","Calendar","CalendarEventRSVP","ChannelCreation","ChannelHideMessage","ChannelMessage","ChannelMetadata","ChannelMuteUser","ClassifiedListing","ClientAuth","CommunitiesList","CommunityDefinition","CommunityPostApproval","Contacts","CreateOrUpdateProduct","CreateOrUpdateStall","Curationsets","Date2","DirectMessageRelaysList","DraftClassifiedListing","DraftLong","Emojisets","EncryptedDirectMessage","EventDeletion","FileMetadata","FileServerPreference","Followsets","GenericRepost","Genericlists","GiftWrap","HTTPAuth","Handlerinformation","Handlerrecommendation","Highlights","InterestsList","Interestsets","JobFeedback","JobRequest","JobResult","Label","LightningPubRPC","LiveChatMessage","LiveEvent","LongFormArticle","Metadata","Mutelist","NWCWalletInfo","NWCWalletRequest","NWCWalletResponse","NostrConnect","OpenTimestamps","Pinlist","PrivateDirectMessage","ProblemTracker","ProfileBadges","PublicChatsList","Reaction","RecommendRelay","RelayList","Relaysets","Report","Reporting","Repost","Seal","SearchRelaysList","ShortTextNote","Time","UserEmojiList","UserStatuses","Zap","ZapGoal","ZapRequest","classifyKind","isEphemeralKind","isKind","isParameterizedReplaceableKind","isRegularKind","isReplaceableKind","kindAsArray","matchFilter","filter","tagName","values","matchFilters","filters","fakejson_exports","getHex64","getInt","getSubscriptionId","matchEventId","matchEventKind","matchEventPubkey","json","sliced","pstart","pend","id","pubkey","nip42_exports","makeAuthEvent","relayURL","yieldThread","resolve","ch","handler","AbstractRelay","relay","reason","sub","ep","cr","reject","err","ev","subid","so","alreadyHave","payload","ok","signAuthEvent","ret","subscription","Subscription","_WebSocket","Relay","_WebSocket2","nip19_exports","BECH32_REGEX","Bech32MaxSize","NostrTypeGuard","encodeBytes","naddrEncode","neventEncode","noteEncode","nprofileEncode","npubEncode","nsecEncode","integerToUint8Array","uint8Array","nip19","tlv","parseTLV","bytesToHex2","rest","encodeBech32","profile","encodeTLV","kindArray","addr","entries","vs","entry","nip04_exports","text","privkey","bytesToHex3","normalizedKey","getNormalizedX","ctb64","ivb64","nip05_exports","NIP05_REGEX","isNip05","isValid","queryProfile","searchDomain","useFetchImplementation","_fetch","fetchImplementation","domain","query","fullname","match","nip05","nip10_exports","parse","eTags","eTagIndex","eTag","eTagEventId","eTagRelayUrl","eTagMarker","eventPointer","isFirstETag","isLastETag","nip11_exports","fetchRelayInformation","useFetchImplementation2","_fetch2","nip13_exports","fastEventHash","getPow","minePow","count","nibble","unsigned","difficulty","now2","bytesToHex4","sha2562","nip18_exports","finishRepostEvent","getRepostedEvent","getRepostedEventPointer","reposted","relayUrl","lastETag","lastPTag","skipVerification","pointer","repostedEvent","nip21_exports","NOSTR_URI_REGEX","parse2","test","uri","nip25_exports","finishReactionEvent","getReactedEventPointer","reacted","inheritedTags","nip27_exports","matchAll","regex","replaceAll","content","matches","replacer","nip28_exports","channelCreateEvent","channelHideMessageEvent","channelMessageEvent","channelMetadataEvent","channelMuteUserEvent","tags","nip30_exports","EMOJI_SHORTCODE_REGEX","matchAll2","regex2","replaceAll2","shortcode","nip39_exports","useFetchImplementation3","validateGithub","_fetch3","username","proof","nip44_exports","decrypt2","encrypt2","getConversationKey","v2","minPlaintextSize","maxPlaintextSize","privkeyA","pubkeyB","sharedX","secp256k12","hkdf_extract","sha2563","getMessageKeys","conversationKey","keys","hkdf_expand","calcPaddedLen","nextPower","chunk","writeU16BE","unpadded","unpaddedLen","suffix","concatBytes2","unpad","padded","hmacAad","aad","combined","decodePayload","plen","base642","dlen","vers","randomBytes2","chacha_key","chacha_nonce","hmac_key","mac","calculatedMac","nip47_exports","makeNwcRequestEvent","parseConnectionString","connectionString","pathname","searchParams","secret","invoice","encryptedContent","eventTemplate","nip57_exports","getZapEndpoint","makeZapReceipt","makeZapRequest","useFetchImplementation4","validateZapRequest","_fetch4","metadata","lnurl","lud06","lud16","bech322","body","amount","relays","comment","zr","zapRequestString","zapRequest","preimage","bolt11","paidAt","tagsFromZapRequest","zap","nip59_exports","createRumor","createSeal","createWrap","unwrapEvent","unwrapManyEvents","wrapEvent","wrapManyEvents","TWO_DAYS","now","randomNow","nip44ConversationKey","nip44Encrypt","nip44Decrypt","rumor","recipientPublicKey","seal","randomKey","senderPrivateKey","recipientsPublicKeys","senderPublicKey","wrappeds","recipientPrivateKey","unwrappedSeal","wrappedEvents","unwrappedEvents","nip98_exports","getToken","hashPayload","unpackEventFromToken","validateEvent2","validateEventKind","validateEventMethodTag","validateEventPayloadTag","validateEventTimestamp","validateEventUrlTag","validateToken","_authorizationScheme","loginUrl","httpMethod","includeAuthorizationScheme","signedEvent","base643","token","method","eventB64","urlTag","methodTag","sha2564","bytesToHex5","payloadTag","payloadHash","card_styles_default","css","HasSlotController","host","slotNames","slot","node","el","slotName","component_styles_default","_hasRecordedInitialProperties","ShoelaceElement","LitElement","component","options","elementConstructor","currentlyRegisteredConstructor","newVersion","existingVersion","oldValue","newValue","changedProperties","property","i$1","SlCard","html","classMap","spinner_styles_default","connectedElements","translations","fallback","documentDirection","documentLanguage","isClient","documentElementObserver","update","registerTranslation","translation","code","LocalizeController$1","lang","_a","_b","locale","language","region","primary","secondary","term","dateToFormat","numberToFormat","unit","slide","en_default","LocalizeController","DefaultLocalizationController","SlSpinner","formCollections","reportValidityOverloads","checkValidityOverloads","userInteractedControls","interactions","FormControlController","disabled","isButton","reportValidity","control","emittedEvents","elements","element","formId","form","formCollection","hasInteracted","submitter","button","attr","required","originalInvalidEvent","slInvalidEvent","validValidityState","button_styles_default","library","library_default_default","icons","systemLibrary","library_system_default","registry","watchedIcons","watchIcon","icon","unwatchIcon","getIconLibrary","lib","icon_styles_default","watch","propertyName","resolvedOptions","proto","decoratedFnName","watchedProperties","changedProps","CACHEABLE_ERROR","RETRYABLE_ERROR","parser","iconCache","SlIcon","fileData","div","svg","svgEl","fromLibrary","iconResolver","isTemplateResult","shadowSVG","SlButton","isLink","literal","ifDefined","styles","NoteWall","migsRelay","note","urlMatch","textContent","youtubeRegex","youtubeMatch","youtubeVideoId","thumbnailUrl","imgRegex","imgMatch","customElement","KEY","setDebug","log","action","createLogger","RouteEvent","context","Router","config","route","plugins","plugin","lazy","__vitePreload","baseURL","router","resolveRouterPath","noteWall","unresolvedPath","resolvedPath","AppHome","detail","profileData","AppHeader","storedPubkey","userPubkey","AppIndex"],"ignoreList":[0,1,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,66,67,68],"sources":["../../node_modules/@shoelace-style/shoelace/dist/chunks/chunk.3Y6SB6QS.js","../../node_modules/@shoelace-style/shoelace/dist/chunks/chunk.B3BW2AY6.js","../../index.html?html-proxy&index=0.js","../../node_modules/@lit/reactive-element/css-tag.js","../../node_modules/@lit/reactive-element/reactive-element.js","../../node_modules/lit-html/lit-html.js","../../node_modules/lit-element/lit-element.js","../../node_modules/@lit/reactive-element/decorators/custom-element.js","../../node_modules/@lit/reactive-element/decorators/property.js","../../node_modules/@lit/reactive-element/decorators/state.js","../../node_modules/@lit/reactive-element/decorators/base.js","../../node_modules/@lit/reactive-element/decorators/query.js","../../node_modules/@noble/curves/node_modules/@noble/hashes/esm/_assert.js","../../node_modules/@noble/curves/node_modules/@noble/hashes/esm/crypto.js","../../node_modules/@noble/curves/node_modules/@noble/hashes/esm/utils.js","../../node_modules/@noble/curves/node_modules/@noble/hashes/esm/_sha2.js","../../node_modules/@noble/curves/node_modules/@noble/hashes/esm/sha256.js","../../node_modules/@noble/curves/esm/abstract/utils.js","../../node_modules/@noble/curves/esm/abstract/modular.js","../../node_modules/@noble/curves/esm/abstract/curve.js","../../node_modules/@noble/curves/esm/abstract/weierstrass.js","../../node_modules/@noble/curves/node_modules/@noble/hashes/esm/hmac.js","../../node_modules/@noble/curves/esm/_shortw_utils.js","../../node_modules/@noble/curves/esm/secp256k1.js","../../node_modules/@noble/hashes/esm/crypto.js","../../node_modules/@noble/hashes/esm/utils.js","../../node_modules/@noble/hashes/esm/_assert.js","../../node_modules/@noble/hashes/esm/_sha2.js","../../node_modules/@noble/hashes/esm/sha256.js","../../node_modules/@scure/base/lib/esm/index.js","../../node_modules/@noble/ciphers/esm/_assert.js","../../node_modules/@noble/ciphers/esm/utils.js","../../node_modules/@noble/ciphers/esm/aes.js","../../node_modules/@noble/ciphers/esm/_arx.js","../../node_modules/@noble/ciphers/esm/chacha.js","../../node_modules/@noble/hashes/esm/hmac.js","../../node_modules/@noble/hashes/esm/hkdf.js","../../node_modules/nostr-tools/lib/esm/index.js","../../node_modules/@shoelace-style/shoelace/dist/chunks/chunk.A5D6FTFY.js","../../node_modules/@shoelace-style/shoelace/dist/chunks/chunk.NYIIDP5N.js","../../node_modules/@shoelace-style/shoelace/dist/chunks/chunk.TUVJKY7S.js","../../node_modules/@shoelace-style/shoelace/dist/chunks/chunk.UYAO2JRR.js","../../node_modules/lit-html/directive.js","../../node_modules/lit-html/directives/class-map.js","../../node_modules/@shoelace-style/shoelace/dist/chunks/chunk.LJF3QW2H.js","../../node_modules/@shoelace-style/shoelace/dist/chunks/chunk.7CVSDULN.js","../../node_modules/@shoelace-style/shoelace/dist/chunks/chunk.7DUCI5S4.js","../../node_modules/@shoelace-style/localize/dist/index.js","../../node_modules/@shoelace-style/shoelace/dist/chunks/chunk.MAS2SHYD.js","../../node_modules/@shoelace-style/shoelace/dist/chunks/chunk.WLV3FVBR.js","../../node_modules/@shoelace-style/shoelace/dist/chunks/chunk.TLKDQ5JG.js","../../node_modules/@shoelace-style/shoelace/dist/chunks/chunk.2RCF7SLU.js","../../node_modules/@shoelace-style/shoelace/dist/chunks/chunk.MAQXLKQ7.js","../../node_modules/@shoelace-style/shoelace/dist/chunks/chunk.P7ZG6EMR.js","../../node_modules/@shoelace-style/shoelace/dist/chunks/chunk.3TFKS637.js","../../node_modules/@shoelace-style/shoelace/dist/chunks/chunk.ZL53POKZ.js","../../node_modules/@shoelace-style/shoelace/dist/chunks/chunk.QLXRCYS4.js","../../node_modules/@shoelace-style/shoelace/dist/chunks/chunk.CCJUT23E.js","../../node_modules/lit-html/directive-helpers.js","../../node_modules/@shoelace-style/shoelace/dist/chunks/chunk.E6QAPUBK.js","../../node_modules/lit-html/static.js","../../node_modules/lit-html/directives/if-defined.js","../../node_modules/@shoelace-style/shoelace/dist/chunks/chunk.N2SNE3QN.js","../../node_modules/@shoelace-style/shoelace/dist/chunks/chunk.Q6JS2LBD.js","../../src/styles/shared-styles.ts","../../src/pages/note-wall.ts","../../node_modules/@thepassle/app-tools/utils/log.js","../../node_modules/@thepassle/app-tools/router/index.js","../../node_modules/@thepassle/app-tools/router/plugins/lazy.js","../../src/router.ts","../../src/pages/app-home.ts","../../src/components/header.ts","../../src/app-index.ts"],"sourcesContent":["// src/utilities/base-path.ts\nvar basePath = \"\";\nfunction setBasePath(path) {\n basePath = path;\n}\nfunction getBasePath(subpath = \"\") {\n if (!basePath) {\n const scripts = [...document.getElementsByTagName(\"script\")];\n const configScript = scripts.find((script) => script.hasAttribute(\"data-shoelace\"));\n if (configScript) {\n setBasePath(configScript.getAttribute(\"data-shoelace\"));\n } else {\n const fallbackScript = scripts.find((s) => {\n return /shoelace(\\.min)?\\.js($|\\?)/.test(s.src) || /shoelace-autoloader(\\.min)?\\.js($|\\?)/.test(s.src);\n });\n let path = \"\";\n if (fallbackScript) {\n path = fallbackScript.getAttribute(\"src\");\n }\n setBasePath(path.split(\"/\").slice(0, -1).join(\"/\"));\n }\n }\n return basePath.replace(/\\/$/, \"\") + (subpath ? `/${subpath.replace(/^\\//, \"\")}` : ``);\n}\n\nexport {\n setBasePath,\n getBasePath\n};\n","var __defProp = Object.defineProperty;\nvar __defProps = Object.defineProperties;\nvar __getOwnPropDesc = Object.getOwnPropertyDescriptor;\nvar __getOwnPropDescs = Object.getOwnPropertyDescriptors;\nvar __getOwnPropSymbols = Object.getOwnPropertySymbols;\nvar __hasOwnProp = Object.prototype.hasOwnProperty;\nvar __propIsEnum = Object.prototype.propertyIsEnumerable;\nvar __knownSymbol = (name, symbol) => {\n return (symbol = Symbol[name]) ? symbol : Symbol.for(\"Symbol.\" + name);\n};\nvar __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;\nvar __spreadValues = (a, b) => {\n for (var prop in b || (b = {}))\n if (__hasOwnProp.call(b, prop))\n __defNormalProp(a, prop, b[prop]);\n if (__getOwnPropSymbols)\n for (var prop of __getOwnPropSymbols(b)) {\n if (__propIsEnum.call(b, prop))\n __defNormalProp(a, prop, b[prop]);\n }\n return a;\n};\nvar __spreadProps = (a, b) => __defProps(a, __getOwnPropDescs(b));\nvar __decorateClass = (decorators, target, key, kind) => {\n var result = kind > 1 ? void 0 : kind ? __getOwnPropDesc(target, key) : target;\n for (var i = decorators.length - 1, decorator; i >= 0; i--)\n if (decorator = decorators[i])\n result = (kind ? decorator(target, key, result) : decorator(result)) || result;\n if (kind && result)\n __defProp(target, key, result);\n return result;\n};\nvar __accessCheck = (obj, member, msg) => {\n if (!member.has(obj))\n throw TypeError(\"Cannot \" + msg);\n};\nvar __privateGet = (obj, member, getter) => {\n __accessCheck(obj, member, \"read from private field\");\n return getter ? getter.call(obj) : member.get(obj);\n};\nvar __privateAdd = (obj, member, value) => {\n if (member.has(obj))\n throw TypeError(\"Cannot add the same private member more than once\");\n member instanceof WeakSet ? member.add(obj) : member.set(obj, value);\n};\nvar __privateSet = (obj, member, value, setter) => {\n __accessCheck(obj, member, \"write to private field\");\n setter ? setter.call(obj, value) : member.set(obj, value);\n return value;\n};\nvar __await = function(promise, isYieldStar) {\n this[0] = promise;\n this[1] = isYieldStar;\n};\nvar __yieldStar = (value) => {\n var obj = value[__knownSymbol(\"asyncIterator\")];\n var isAwait = false;\n var method;\n var it = {};\n if (obj == null) {\n obj = value[__knownSymbol(\"iterator\")]();\n method = (k) => it[k] = (x) => obj[k](x);\n } else {\n obj = obj.call(value);\n method = (k) => it[k] = (v) => {\n if (isAwait) {\n isAwait = false;\n if (k === \"throw\")\n throw v;\n return v;\n }\n isAwait = true;\n return {\n done: false,\n value: new __await(new Promise((resolve) => {\n var x = obj[k](v);\n if (!(x instanceof Object))\n throw TypeError(\"Object expected\");\n resolve(x);\n }), 1)\n };\n };\n }\n return it[__knownSymbol(\"iterator\")] = () => it, method(\"next\"), \"throw\" in obj ? method(\"throw\") : it.throw = (x) => {\n throw x;\n }, \"return\" in obj && method(\"return\"), it;\n};\n\nexport {\n __spreadValues,\n __spreadProps,\n __decorateClass,\n __privateGet,\n __privateAdd,\n __privateSet,\n __yieldStar\n};\n","\n import { setBasePath } from '@shoelace-style/shoelace/dist/utilities/base-path.js';\n setBasePath('https://cdn.jsdelivr.net/npm/@shoelace-style/shoelace@2.16.0/cdn/');\n ","/**\n * @license\n * Copyright 2019 Google LLC\n * SPDX-License-Identifier: BSD-3-Clause\n */\nconst t=globalThis,e=t.ShadowRoot&&(void 0===t.ShadyCSS||t.ShadyCSS.nativeShadow)&&\"adoptedStyleSheets\"in Document.prototype&&\"replace\"in CSSStyleSheet.prototype,s=Symbol(),o=new WeakMap;class n{constructor(t,e,o){if(this._$cssResult$=!0,o!==s)throw Error(\"CSSResult is not constructable. Use `unsafeCSS` or `css` instead.\");this.cssText=t,this.t=e}get styleSheet(){let t=this.o;const s=this.t;if(e&&void 0===t){const e=void 0!==s&&1===s.length;e&&(t=o.get(s)),void 0===t&&((this.o=t=new CSSStyleSheet).replaceSync(this.cssText),e&&o.set(s,t))}return t}toString(){return this.cssText}}const r=t=>new n(\"string\"==typeof t?t:t+\"\",void 0,s),i=(t,...e)=>{const o=1===t.length?t[0]:e.reduce(((e,s,o)=>e+(t=>{if(!0===t._$cssResult$)return t.cssText;if(\"number\"==typeof t)return t;throw Error(\"Value passed to 'css' function must be a 'css' function result: \"+t+\". Use 'unsafeCSS' to pass non-literal values, but take care to ensure page security.\")})(s)+t[o+1]),t[0]);return new n(o,t,s)},S=(s,o)=>{if(e)s.adoptedStyleSheets=o.map((t=>t instanceof CSSStyleSheet?t:t.styleSheet));else for(const e of o){const o=document.createElement(\"style\"),n=t.litNonce;void 0!==n&&o.setAttribute(\"nonce\",n),o.textContent=e.cssText,s.appendChild(o)}},c=e?t=>t:t=>t instanceof CSSStyleSheet?(t=>{let e=\"\";for(const s of t.cssRules)e+=s.cssText;return r(e)})(t):t;export{n as CSSResult,S as adoptStyles,i as css,c as getCompatibleStyle,e as supportsAdoptingStyleSheets,r as unsafeCSS};\n//# sourceMappingURL=css-tag.js.map\n","import{getCompatibleStyle as t,adoptStyles as s}from\"./css-tag.js\";export{CSSResult,adoptStyles,css,getCompatibleStyle,supportsAdoptingStyleSheets,unsafeCSS}from\"./css-tag.js\";\n/**\n * @license\n * Copyright 2017 Google LLC\n * SPDX-License-Identifier: BSD-3-Clause\n */const{is:i,defineProperty:e,getOwnPropertyDescriptor:r,getOwnPropertyNames:h,getOwnPropertySymbols:o,getPrototypeOf:n}=Object,a=globalThis,c=a.trustedTypes,l=c?c.emptyScript:\"\",p=a.reactiveElementPolyfillSupport,d=(t,s)=>t,u={toAttribute(t,s){switch(s){case Boolean:t=t?l:null;break;case Object:case Array:t=null==t?t:JSON.stringify(t)}return t},fromAttribute(t,s){let i=t;switch(s){case Boolean:i=null!==t;break;case Number:i=null===t?null:Number(t);break;case Object:case Array:try{i=JSON.parse(t)}catch(t){i=null}}return i}},f=(t,s)=>!i(t,s),y={attribute:!0,type:String,converter:u,reflect:!1,hasChanged:f};Symbol.metadata??=Symbol(\"metadata\"),a.litPropertyMetadata??=new WeakMap;class b extends HTMLElement{static addInitializer(t){this._$Ei(),(this.l??=[]).push(t)}static get observedAttributes(){return this.finalize(),this._$Eh&&[...this._$Eh.keys()]}static createProperty(t,s=y){if(s.state&&(s.attribute=!1),this._$Ei(),this.elementProperties.set(t,s),!s.noAccessor){const i=Symbol(),r=this.getPropertyDescriptor(t,i,s);void 0!==r&&e(this.prototype,t,r)}}static getPropertyDescriptor(t,s,i){const{get:e,set:h}=r(this.prototype,t)??{get(){return this[s]},set(t){this[s]=t}};return{get(){return e?.call(this)},set(s){const r=e?.call(this);h.call(this,s),this.requestUpdate(t,r,i)},configurable:!0,enumerable:!0}}static getPropertyOptions(t){return this.elementProperties.get(t)??y}static _$Ei(){if(this.hasOwnProperty(d(\"elementProperties\")))return;const t=n(this);t.finalize(),void 0!==t.l&&(this.l=[...t.l]),this.elementProperties=new Map(t.elementProperties)}static finalize(){if(this.hasOwnProperty(d(\"finalized\")))return;if(this.finalized=!0,this._$Ei(),this.hasOwnProperty(d(\"properties\"))){const t=this.properties,s=[...h(t),...o(t)];for(const i of s)this.createProperty(i,t[i])}const t=this[Symbol.metadata];if(null!==t){const s=litPropertyMetadata.get(t);if(void 0!==s)for(const[t,i]of s)this.elementProperties.set(t,i)}this._$Eh=new Map;for(const[t,s]of this.elementProperties){const i=this._$Eu(t,s);void 0!==i&&this._$Eh.set(i,t)}this.elementStyles=this.finalizeStyles(this.styles)}static finalizeStyles(s){const i=[];if(Array.isArray(s)){const e=new Set(s.flat(1/0).reverse());for(const s of e)i.unshift(t(s))}else void 0!==s&&i.push(t(s));return i}static _$Eu(t,s){const i=s.attribute;return!1===i?void 0:\"string\"==typeof i?i:\"string\"==typeof t?t.toLowerCase():void 0}constructor(){super(),this._$Ep=void 0,this.isUpdatePending=!1,this.hasUpdated=!1,this._$Em=null,this._$Ev()}_$Ev(){this._$ES=new Promise((t=>this.enableUpdating=t)),this._$AL=new Map,this._$E_(),this.requestUpdate(),this.constructor.l?.forEach((t=>t(this)))}addController(t){(this._$EO??=new Set).add(t),void 0!==this.renderRoot&&this.isConnected&&t.hostConnected?.()}removeController(t){this._$EO?.delete(t)}_$E_(){const t=new Map,s=this.constructor.elementProperties;for(const i of s.keys())this.hasOwnProperty(i)&&(t.set(i,this[i]),delete this[i]);t.size>0&&(this._$Ep=t)}createRenderRoot(){const t=this.shadowRoot??this.attachShadow(this.constructor.shadowRootOptions);return s(t,this.constructor.elementStyles),t}connectedCallback(){this.renderRoot??=this.createRenderRoot(),this.enableUpdating(!0),this._$EO?.forEach((t=>t.hostConnected?.()))}enableUpdating(t){}disconnectedCallback(){this._$EO?.forEach((t=>t.hostDisconnected?.()))}attributeChangedCallback(t,s,i){this._$AK(t,i)}_$EC(t,s){const i=this.constructor.elementProperties.get(t),e=this.constructor._$Eu(t,i);if(void 0!==e&&!0===i.reflect){const r=(void 0!==i.converter?.toAttribute?i.converter:u).toAttribute(s,i.type);this._$Em=t,null==r?this.removeAttribute(e):this.setAttribute(e,r),this._$Em=null}}_$AK(t,s){const i=this.constructor,e=i._$Eh.get(t);if(void 0!==e&&this._$Em!==e){const t=i.getPropertyOptions(e),r=\"function\"==typeof t.converter?{fromAttribute:t.converter}:void 0!==t.converter?.fromAttribute?t.converter:u;this._$Em=e,this[e]=r.fromAttribute(s,t.type),this._$Em=null}}requestUpdate(t,s,i){if(void 0!==t){if(i??=this.constructor.getPropertyOptions(t),!(i.hasChanged??f)(this[t],s))return;this.P(t,s,i)}!1===this.isUpdatePending&&(this._$ES=this._$ET())}P(t,s,i){this._$AL.has(t)||this._$AL.set(t,s),!0===i.reflect&&this._$Em!==t&&(this._$Ej??=new Set).add(t)}async _$ET(){this.isUpdatePending=!0;try{await this._$ES}catch(t){Promise.reject(t)}const t=this.scheduleUpdate();return null!=t&&await t,!this.isUpdatePending}scheduleUpdate(){return this.performUpdate()}performUpdate(){if(!this.isUpdatePending)return;if(!this.hasUpdated){if(this.renderRoot??=this.createRenderRoot(),this._$Ep){for(const[t,s]of this._$Ep)this[t]=s;this._$Ep=void 0}const t=this.constructor.elementProperties;if(t.size>0)for(const[s,i]of t)!0!==i.wrapped||this._$AL.has(s)||void 0===this[s]||this.P(s,this[s],i)}let t=!1;const s=this._$AL;try{t=this.shouldUpdate(s),t?(this.willUpdate(s),this._$EO?.forEach((t=>t.hostUpdate?.())),this.update(s)):this._$EU()}catch(s){throw t=!1,this._$EU(),s}t&&this._$AE(s)}willUpdate(t){}_$AE(t){this._$EO?.forEach((t=>t.hostUpdated?.())),this.hasUpdated||(this.hasUpdated=!0,this.firstUpdated(t)),this.updated(t)}_$EU(){this._$AL=new Map,this.isUpdatePending=!1}get updateComplete(){return this.getUpdateComplete()}getUpdateComplete(){return this._$ES}shouldUpdate(t){return!0}update(t){this._$Ej&&=this._$Ej.forEach((t=>this._$EC(t,this[t]))),this._$EU()}updated(t){}firstUpdated(t){}}b.elementStyles=[],b.shadowRootOptions={mode:\"open\"},b[d(\"elementProperties\")]=new Map,b[d(\"finalized\")]=new Map,p?.({ReactiveElement:b}),(a.reactiveElementVersions??=[]).push(\"2.0.4\");export{b as ReactiveElement,u as defaultConverter,f as notEqual};\n//# sourceMappingURL=reactive-element.js.map\n","/**\n * @license\n * Copyright 2017 Google LLC\n * SPDX-License-Identifier: BSD-3-Clause\n */\nconst t=globalThis,i=t.trustedTypes,s=i?i.createPolicy(\"lit-html\",{createHTML:t=>t}):void 0,e=\"$lit$\",h=`lit$${Math.random().toFixed(9).slice(2)}$`,o=\"?\"+h,n=`<${o}>`,r=document,l=()=>r.createComment(\"\"),c=t=>null===t||\"object\"!=typeof t&&\"function\"!=typeof t,a=Array.isArray,u=t=>a(t)||\"function\"==typeof t?.[Symbol.iterator],d=\"[ \\t\\n\\f\\r]\",f=/<(?:(!--|\\/[^a-zA-Z])|(\\/?[a-zA-Z][^>\\s]*)|(\\/?$))/g,v=/-->/g,_=/>/g,m=RegExp(`>|${d}(?:([^\\\\s\"'>=/]+)(${d}*=${d}*(?:[^ \\t\\n\\f\\r\"'\\`<>=]|(\"|')|))|$)`,\"g\"),p=/'/g,g=/\"/g,$=/^(?:script|style|textarea|title)$/i,y=t=>(i,...s)=>({_$litType$:t,strings:i,values:s}),x=y(1),b=y(2),w=y(3),T=Symbol.for(\"lit-noChange\"),E=Symbol.for(\"lit-nothing\"),A=new WeakMap,C=r.createTreeWalker(r,129);function P(t,i){if(!a(t)||!t.hasOwnProperty(\"raw\"))throw Error(\"invalid template strings array\");return void 0!==s?s.createHTML(i):i}const V=(t,i)=>{const s=t.length-1,o=[];let r,l=2===i?\"<svg>\":3===i?\"<math>\":\"\",c=f;for(let i=0;i<s;i++){const s=t[i];let a,u,d=-1,y=0;for(;y<s.length&&(c.lastIndex=y,u=c.exec(s),null!==u);)y=c.lastIndex,c===f?\"!--\"===u[1]?c=v:void 0!==u[1]?c=_:void 0!==u[2]?($.test(u[2])&&(r=RegExp(\"</\"+u[2],\"g\")),c=m):void 0!==u[3]&&(c=m):c===m?\">\"===u[0]?(c=r??f,d=-1):void 0===u[1]?d=-2:(d=c.lastIndex-u[2].length,a=u[1],c=void 0===u[3]?m:'\"'===u[3]?g:p):c===g||c===p?c=m:c===v||c===_?c=f:(c=m,r=void 0);const x=c===m&&t[i+1].startsWith(\"/>\")?\" \":\"\";l+=c===f?s+n:d>=0?(o.push(a),s.slice(0,d)+e+s.slice(d)+h+x):s+h+(-2===d?i:x)}return[P(t,l+(t[s]||\"<?>\")+(2===i?\"</svg>\":3===i?\"</math>\":\"\")),o]};class N{constructor({strings:t,_$litType$:s},n){let r;this.parts=[];let c=0,a=0;const u=t.length-1,d=this.parts,[f,v]=V(t,s);if(this.el=N.createElement(f,n),C.currentNode=this.el.content,2===s||3===s){const t=this.el.content.firstChild;t.replaceWith(...t.childNodes)}for(;null!==(r=C.nextNode())&&d.length<u;){if(1===r.nodeType){if(r.hasAttributes())for(const t of r.getAttributeNames())if(t.endsWith(e)){const i=v[a++],s=r.getAttribute(t).split(h),e=/([.?@])?(.*)/.exec(i);d.push({type:1,index:c,name:e[2],strings:s,ctor:\".\"===e[1]?H:\"?\"===e[1]?I:\"@\"===e[1]?L:k}),r.removeAttribute(t)}else t.startsWith(h)&&(d.push({type:6,index:c}),r.removeAttribute(t));if($.test(r.tagName)){const t=r.textContent.split(h),s=t.length-1;if(s>0){r.textContent=i?i.emptyScript:\"\";for(let i=0;i<s;i++)r.append(t[i],l()),C.nextNode(),d.push({type:2,index:++c});r.append(t[s],l())}}}else if(8===r.nodeType)if(r.data===o)d.push({type:2,index:c});else{let t=-1;for(;-1!==(t=r.data.indexOf(h,t+1));)d.push({type:7,index:c}),t+=h.length-1}c++}}static createElement(t,i){const s=r.createElement(\"template\");return s.innerHTML=t,s}}function S(t,i,s=t,e){if(i===T)return i;let h=void 0!==e?s._$Co?.[e]:s._$Cl;const o=c(i)?void 0:i._$litDirective$;return h?.constructor!==o&&(h?._$AO?.(!1),void 0===o?h=void 0:(h=new o(t),h._$AT(t,s,e)),void 0!==e?(s._$Co??=[])[e]=h:s._$Cl=h),void 0!==h&&(i=S(t,h._$AS(t,i.values),h,e)),i}class M{constructor(t,i){this._$AV=[],this._$AN=void 0,this._$AD=t,this._$AM=i}get parentNode(){return this._$AM.parentNode}get _$AU(){return this._$AM._$AU}u(t){const{el:{content:i},parts:s}=this._$AD,e=(t?.creationScope??r).importNode(i,!0);C.currentNode=e;let h=C.nextNode(),o=0,n=0,l=s[0];for(;void 0!==l;){if(o===l.index){let i;2===l.type?i=new R(h,h.nextSibling,this,t):1===l.type?i=new l.ctor(h,l.name,l.strings,this,t):6===l.type&&(i=new z(h,this,t)),this._$AV.push(i),l=s[++n]}o!==l?.index&&(h=C.nextNode(),o++)}return C.currentNode=r,e}p(t){let i=0;for(const s of this._$AV)void 0!==s&&(void 0!==s.strings?(s._$AI(t,s,i),i+=s.strings.length-2):s._$AI(t[i])),i++}}class R{get _$AU(){return this._$AM?._$AU??this._$Cv}constructor(t,i,s,e){this.type=2,this._$AH=E,this._$AN=void 0,this._$AA=t,this._$AB=i,this._$AM=s,this.options=e,this._$Cv=e?.isConnected??!0}get parentNode(){let t=this._$AA.parentNode;const i=this._$AM;return void 0!==i&&11===t?.nodeType&&(t=i.parentNode),t}get startNode(){return this._$AA}get endNode(){return this._$AB}_$AI(t,i=this){t=S(this,t,i),c(t)?t===E||null==t||\"\"===t?(this._$AH!==E&&this._$AR(),this._$AH=E):t!==this._$AH&&t!==T&&this._(t):void 0!==t._$litType$?this.$(t):void 0!==t.nodeType?this.T(t):u(t)?this.k(t):this._(t)}O(t){return this._$AA.parentNode.insertBefore(t,this._$AB)}T(t){this._$AH!==t&&(this._$AR(),this._$AH=this.O(t))}_(t){this._$AH!==E&&c(this._$AH)?this._$AA.nextSibling.data=t:this.T(r.createTextNode(t)),this._$AH=t}$(t){const{values:i,_$litType$:s}=t,e=\"number\"==typeof s?this._$AC(t):(void 0===s.el&&(s.el=N.createElement(P(s.h,s.h[0]),this.options)),s);if(this._$AH?._$AD===e)this._$AH.p(i);else{const t=new M(e,this),s=t.u(this.options);t.p(i),this.T(s),this._$AH=t}}_$AC(t){let i=A.get(t.strings);return void 0===i&&A.set(t.strings,i=new N(t)),i}k(t){a(this._$AH)||(this._$AH=[],this._$AR());const i=this._$AH;let s,e=0;for(const h of t)e===i.length?i.push(s=new R(this.O(l()),this.O(l()),this,this.options)):s=i[e],s._$AI(h),e++;e<i.length&&(this._$AR(s&&s._$AB.nextSibling,e),i.length=e)}_$AR(t=this._$AA.nextSibling,i){for(this._$AP?.(!1,!0,i);t&&t!==this._$AB;){const i=t.nextSibling;t.remove(),t=i}}setConnected(t){void 0===this._$AM&&(this._$Cv=t,this._$AP?.(t))}}class k{get tagName(){return this.element.tagName}get _$AU(){return this._$AM._$AU}constructor(t,i,s,e,h){this.type=1,this._$AH=E,this._$AN=void 0,this.element=t,this.name=i,this._$AM=e,this.options=h,s.length>2||\"\"!==s[0]||\"\"!==s[1]?(this._$AH=Array(s.length-1).fill(new String),this.strings=s):this._$AH=E}_$AI(t,i=this,s,e){const h=this.strings;let o=!1;if(void 0===h)t=S(this,t,i,0),o=!c(t)||t!==this._$AH&&t!==T,o&&(this._$AH=t);else{const e=t;let n,r;for(t=h[0],n=0;n<h.length-1;n++)r=S(this,e[s+n],i,n),r===T&&(r=this._$AH[n]),o||=!c(r)||r!==this._$AH[n],r===E?t=E:t!==E&&(t+=(r??\"\")+h[n+1]),this._$AH[n]=r}o&&!e&&this.j(t)}j(t){t===E?this.element.removeAttribute(this.name):this.element.setAttribute(this.name,t??\"\")}}class H extends k{constructor(){super(...arguments),this.type=3}j(t){this.element[this.name]=t===E?void 0:t}}class I extends k{constructor(){super(...arguments),this.type=4}j(t){this.element.toggleAttribute(this.name,!!t&&t!==E)}}class L extends k{constructor(t,i,s,e,h){super(t,i,s,e,h),this.type=5}_$AI(t,i=this){if((t=S(this,t,i,0)??E)===T)return;const s=this._$AH,e=t===E&&s!==E||t.capture!==s.capture||t.once!==s.once||t.passive!==s.passive,h=t!==E&&(s===E||e);e&&this.element.removeEventListener(this.name,this,s),h&&this.element.addEventListener(this.name,this,t),this._$AH=t}handleEvent(t){\"function\"==typeof this._$AH?this._$AH.call(this.options?.host??this.element,t):this._$AH.handleEvent(t)}}class z{constructor(t,i,s){this.element=t,this.type=6,this._$AN=void 0,this._$AM=i,this.options=s}get _$AU(){return this._$AM._$AU}_$AI(t){S(this,t)}}const Z={M:e,P:h,A:o,C:1,L:V,R:M,D:u,V:S,I:R,H:k,N:I,U:L,B:H,F:z},j=t.litHtmlPolyfillSupport;j?.(N,R),(t.litHtmlVersions??=[]).push(\"3.2.1\");const B=(t,i,s)=>{const e=s?.renderBefore??i;let h=e._$litPart$;if(void 0===h){const t=s?.renderBefore??null;e._$litPart$=h=new R(i.insertBefore(l(),t),t,void 0,s??{})}return h._$AI(t),h};export{Z as _$LH,x as html,w as mathml,T as noChange,E as nothing,B as render,b as svg};\n//# sourceMappingURL=lit-html.js.map\n","import{ReactiveElement as t}from\"@lit/reactive-element\";export*from\"@lit/reactive-element\";import{render as e,noChange as s}from\"lit-html\";export*from\"lit-html\";\n/**\n * @license\n * Copyright 2017 Google LLC\n * SPDX-License-Identifier: BSD-3-Clause\n */class r extends t{constructor(){super(...arguments),this.renderOptions={host:this},this._$Do=void 0}createRenderRoot(){const t=super.createRenderRoot();return this.renderOptions.renderBefore??=t.firstChild,t}update(t){const s=this.render();this.hasUpdated||(this.renderOptions.isConnected=this.isConnected),super.update(t),this._$Do=e(s,this.renderRoot,this.renderOptions)}connectedCallback(){super.connectedCallback(),this._$Do?.setConnected(!0)}disconnectedCallback(){super.disconnectedCallback(),this._$Do?.setConnected(!1)}render(){return s}}r._$litElement$=!0,r[\"finalized\"]=!0,globalThis.litElementHydrateSupport?.({LitElement:r});const i=globalThis.litElementPolyfillSupport;i?.({LitElement:r});const o={_$AK:(t,e,s)=>{t._$AK(e,s)},_$AL:t=>t._$AL};(globalThis.litElementVersions??=[]).push(\"4.1.1\");export{r as LitElement,o as _$LE};\n//# sourceMappingURL=lit-element.js.map\n","/**\n * @license\n * Copyright 2017 Google LLC\n * SPDX-License-Identifier: BSD-3-Clause\n */\nconst t=t=>(e,o)=>{void 0!==o?o.addInitializer((()=>{customElements.define(t,e)})):customElements.define(t,e)};export{t as customElement};\n//# sourceMappingURL=custom-element.js.map\n","import{defaultConverter as t,notEqual as e}from\"../reactive-element.js\";\n/**\n * @license\n * Copyright 2017 Google LLC\n * SPDX-License-Identifier: BSD-3-Clause\n */const o={attribute:!0,type:String,converter:t,reflect:!1,hasChanged:e},r=(t=o,e,r)=>{const{kind:n,metadata:i}=r;let s=globalThis.litPropertyMetadata.get(i);if(void 0===s&&globalThis.litPropertyMetadata.set(i,s=new Map),s.set(r.name,t),\"accessor\"===n){const{name:o}=r;return{set(r){const n=e.get.call(this);e.set.call(this,r),this.requestUpdate(o,n,t)},init(e){return void 0!==e&&this.P(o,void 0,t),e}}}if(\"setter\"===n){const{name:o}=r;return function(r){const n=this[o];e.call(this,r),this.requestUpdate(o,n,t)}}throw Error(\"Unsupported decorator location: \"+n)};function n(t){return(e,o)=>\"object\"==typeof o?r(t,e,o):((t,e,o)=>{const r=e.hasOwnProperty(o);return e.constructor.createProperty(o,r?{...t,wrapped:!0}:t),r?Object.getOwnPropertyDescriptor(e,o):void 0})(t,e,o)}export{n as property,r as standardProperty};\n//# sourceMappingURL=property.js.map\n","import{property as t}from\"./property.js\";\n/**\n * @license\n * Copyright 2017 Google LLC\n * SPDX-License-Identifier: BSD-3-Clause\n */function r(r){return t({...r,state:!0,attribute:!1})}export{r as state};\n//# sourceMappingURL=state.js.map\n","/**\n * @license\n * Copyright 2017 Google LLC\n * SPDX-License-Identifier: BSD-3-Clause\n */\nconst e=(e,t,c)=>(c.configurable=!0,c.enumerable=!0,Reflect.decorate&&\"object\"!=typeof t&&Object.defineProperty(e,t,c),c);export{e as desc};\n//# sourceMappingURL=base.js.map\n","import{desc as t}from\"./base.js\";\n/**\n * @license\n * Copyright 2017 Google LLC\n * SPDX-License-Identifier: BSD-3-Clause\n */function e(e,r){return(n,s,i)=>{const o=t=>t.renderRoot?.querySelector(e)??null;if(r){const{get:e,set:r}=\"object\"==typeof s?n:i??(()=>{const t=Symbol();return{get(){return this[t]},set(e){this[t]=e}}})();return t(n,s,{get(){let t=e.call(this);return void 0===t&&(t=o(this),(null!==t||this.hasUpdated)&&r.call(this,t)),t}})}return t(n,s,{get(){return o(this)}})}}export{e as query};\n//# sourceMappingURL=query.js.map\n","function number(n) {\n if (!Number.isSafeInteger(n) || n < 0)\n throw new Error(`Wrong positive integer: ${n}`);\n}\nfunction bool(b) {\n if (typeof b !== 'boolean')\n throw new Error(`Expected boolean, not ${b}`);\n}\nfunction bytes(b, ...lengths) {\n if (!(b instanceof Uint8Array))\n throw new Error('Expected Uint8Array');\n if (lengths.length > 0 && !lengths.includes(b.length))\n throw new Error(`Expected Uint8Array of length ${lengths}, not of length=${b.length}`);\n}\nfunction hash(hash) {\n if (typeof hash !== 'function' || typeof hash.create !== 'function')\n throw new Error('Hash should be wrapped by utils.wrapConstructor');\n number(hash.outputLen);\n number(hash.blockLen);\n}\nfunction exists(instance, checkFinished = true) {\n if (instance.destroyed)\n throw new Error('Hash instance has been destroyed');\n if (checkFinished && instance.finished)\n throw new Error('Hash#digest() has already been called');\n}\nfunction output(out, instance) {\n bytes(out);\n const min = instance.outputLen;\n if (out.length < min) {\n throw new Error(`digestInto() expects output buffer of length at least ${min}`);\n }\n}\nexport { number, bool, bytes, hash, exists, output };\nconst assert = { number, bool, bytes, hash, exists, output };\nexport default assert;\n//# sourceMappingURL=_assert.js.map","export const crypto = typeof globalThis === 'object' && 'crypto' in globalThis ? globalThis.crypto : undefined;\n//# sourceMappingURL=crypto.js.map","/*! noble-hashes - MIT License (c) 2022 Paul Miller (paulmillr.com) */\n// We use WebCrypto aka globalThis.crypto, which exists in browsers and node.js 16+.\n// node.js versions earlier than v19 don't declare it in global scope.\n// For node.js, package.json#exports field mapping rewrites import\n// from `crypto` to `cryptoNode`, which imports native module.\n// Makes the utils un-importable in browsers without a bundler.\n// Once node.js 18 is deprecated, we can just drop the import.\nimport { crypto } from '@noble/hashes/crypto';\nconst u8a = (a) => a instanceof Uint8Array;\n// Cast array to different type\nexport const u8 = (arr) => new Uint8Array(arr.buffer, arr.byteOffset, arr.byteLength);\nexport const u32 = (arr) => new Uint32Array(arr.buffer, arr.byteOffset, Math.floor(arr.byteLength / 4));\n// Cast array to view\nexport const createView = (arr) => new DataView(arr.buffer, arr.byteOffset, arr.byteLength);\n// The rotate right (circular right shift) operation for uint32\nexport const rotr = (word, shift) => (word << (32 - shift)) | (word >>> shift);\n// big-endian hardware is rare. Just in case someone still decides to run hashes:\n// early-throw an error because we don't support BE yet.\nexport const isLE = new Uint8Array(new Uint32Array([0x11223344]).buffer)[0] === 0x44;\nif (!isLE)\n throw new Error('Non little-endian hardware is not supported');\nconst hexes = /* @__PURE__ */ Array.from({ length: 256 }, (_, i) => i.toString(16).padStart(2, '0'));\n/**\n * @example bytesToHex(Uint8Array.from([0xca, 0xfe, 0x01, 0x23])) // 'cafe0123'\n */\nexport function bytesToHex(bytes) {\n if (!u8a(bytes))\n throw new Error('Uint8Array expected');\n // pre-caching improves the speed 6x\n let hex = '';\n for (let i = 0; i < bytes.length; i++) {\n hex += hexes[bytes[i]];\n }\n return hex;\n}\n/**\n * @example hexToBytes('cafe0123') // Uint8Array.from([0xca, 0xfe, 0x01, 0x23])\n */\nexport function hexToBytes(hex) {\n if (typeof hex !== 'string')\n throw new Error('hex string expected, got ' + typeof hex);\n const len = hex.length;\n if (len % 2)\n throw new Error('padded hex string expected, got unpadded hex of length ' + len);\n const array = new Uint8Array(len / 2);\n for (let i = 0; i < array.length; i++) {\n const j = i * 2;\n const hexByte = hex.slice(j, j + 2);\n const byte = Number.parseInt(hexByte, 16);\n if (Number.isNaN(byte) || byte < 0)\n throw new Error('Invalid byte sequence');\n array[i] = byte;\n }\n return array;\n}\n// There is no setImmediate in browser and setTimeout is slow.\n// call of async fn will return Promise, which will be fullfiled only on\n// next scheduler queue processing step and this is exactly what we need.\nexport const nextTick = async () => { };\n// Returns control to thread each 'tick' ms to avoid blocking\nexport async function asyncLoop(iters, tick, cb) {\n let ts = Date.now();\n for (let i = 0; i < iters; i++) {\n cb(i);\n // Date.now() is not monotonic, so in case if clock goes backwards we return return control too\n const diff = Date.now() - ts;\n if (diff >= 0 && diff < tick)\n continue;\n await nextTick();\n ts += diff;\n }\n}\n/**\n * @example utf8ToBytes('abc') // new Uint8Array([97, 98, 99])\n */\nexport function utf8ToBytes(str) {\n if (typeof str !== 'string')\n throw new Error(`utf8ToBytes expected string, got ${typeof str}`);\n return new Uint8Array(new TextEncoder().encode(str)); // https://bugzil.la/1681809\n}\n/**\n * Normalizes (non-hex) string or Uint8Array to Uint8Array.\n * Warning: when Uint8Array is passed, it would NOT get copied.\n * Keep in mind for future mutable operations.\n */\nexport function toBytes(data) {\n if (typeof data === 'string')\n data = utf8ToBytes(data);\n if (!u8a(data))\n throw new Error(`expected Uint8Array, got ${typeof data}`);\n return data;\n}\n/**\n * Copies several Uint8Arrays into one.\n */\nexport function concatBytes(...arrays) {\n const r = new Uint8Array(arrays.reduce((sum, a) => sum + a.length, 0));\n let pad = 0; // walk through each item, ensure they have proper type\n arrays.forEach((a) => {\n if (!u8a(a))\n throw new Error('Uint8Array expected');\n r.set(a, pad);\n pad += a.length;\n });\n return r;\n}\n// For runtime check if class implements interface\nexport class Hash {\n // Safe version that clones internal state\n clone() {\n return this._cloneInto();\n }\n}\nconst toStr = {}.toString;\nexport function checkOpts(defaults, opts) {\n if (opts !== undefined && toStr.call(opts) !== '[object Object]')\n throw new Error('Options should be object or undefined');\n const merged = Object.assign(defaults, opts);\n return merged;\n}\nexport function wrapConstructor(hashCons) {\n const hashC = (msg) => hashCons().update(toBytes(msg)).digest();\n const tmp = hashCons();\n hashC.outputLen = tmp.outputLen;\n hashC.blockLen = tmp.blockLen;\n hashC.create = () => hashCons();\n return hashC;\n}\nexport function wrapConstructorWithOpts(hashCons) {\n const hashC = (msg, opts) => hashCons(opts).update(toBytes(msg)).digest();\n const tmp = hashCons({});\n hashC.outputLen = tmp.outputLen;\n hashC.blockLen = tmp.blockLen;\n hashC.create = (opts) => hashCons(opts);\n return hashC;\n}\nexport function wrapXOFConstructorWithOpts(hashCons) {\n const hashC = (msg, opts) => hashCons(opts).update(toBytes(msg)).digest();\n const tmp = hashCons({});\n hashC.outputLen = tmp.outputLen;\n hashC.blockLen = tmp.blockLen;\n hashC.create = (opts) => hashCons(opts);\n return hashC;\n}\n/**\n * Secure PRNG. Uses `crypto.getRandomValues`, which defers to OS.\n */\nexport function randomBytes(bytesLength = 32) {\n if (crypto && typeof crypto.getRandomValues === 'function') {\n return crypto.getRandomValues(new Uint8Array(bytesLength));\n }\n throw new Error('crypto.getRandomValues must be defined');\n}\n//# sourceMappingURL=utils.js.map","import { exists, output } from './_assert.js';\nimport { Hash, createView, toBytes } from './utils.js';\n// Polyfill for Safari 14\nfunction setBigUint64(view, byteOffset, value, isLE) {\n if (typeof view.setBigUint64 === 'function')\n return view.setBigUint64(byteOffset, value, isLE);\n const _32n = BigInt(32);\n const _u32_max = BigInt(0xffffffff);\n const wh = Number((value >> _32n) & _u32_max);\n const wl = Number(value & _u32_max);\n const h = isLE ? 4 : 0;\n const l = isLE ? 0 : 4;\n view.setUint32(byteOffset + h, wh, isLE);\n view.setUint32(byteOffset + l, wl, isLE);\n}\n// Base SHA2 class (RFC 6234)\nexport class SHA2 extends Hash {\n constructor(blockLen, outputLen, padOffset, isLE) {\n super();\n this.blockLen = blockLen;\n this.outputLen = outputLen;\n this.padOffset = padOffset;\n this.isLE = isLE;\n this.finished = false;\n this.length = 0;\n this.pos = 0;\n this.destroyed = false;\n this.buffer = new Uint8Array(blockLen);\n this.view = createView(this.buffer);\n }\n update(data) {\n exists(this);\n const { view, buffer, blockLen } = this;\n data = toBytes(data);\n const len = data.length;\n for (let pos = 0; pos < len;) {\n const take = Math.min(blockLen - this.pos, len - pos);\n // Fast path: we have at least one block in input, cast it to view and process\n if (take === blockLen) {\n const dataView = createView(data);\n for (; blockLen <= len - pos; pos += blockLen)\n this.process(dataView, pos);\n continue;\n }\n buffer.set(data.subarray(pos, pos + take), this.pos);\n this.pos += take;\n pos += take;\n if (this.pos === blockLen) {\n this.process(view, 0);\n this.pos = 0;\n }\n }\n this.length += data.length;\n this.roundClean();\n return this;\n }\n digestInto(out) {\n exists(this);\n output(out, this);\n this.finished = true;\n // Padding\n // We can avoid allocation of buffer for padding completely if it\n // was previously not allocated here. But it won't change performance.\n const { buffer, view, blockLen, isLE } = this;\n let { pos } = this;\n // append the bit '1' to the message\n buffer[pos++] = 0b10000000;\n this.buffer.subarray(pos).fill(0);\n // we have less than padOffset left in buffer, so we cannot put length in current block, need process it and pad again\n if (this.padOffset > blockLen - pos) {\n this.process(view, 0);\n pos = 0;\n }\n // Pad until full block byte with zeros\n for (let i = pos; i < blockLen; i++)\n buffer[i] = 0;\n // Note: sha512 requires length to be 128bit integer, but length in JS will overflow before that\n // You need to write around 2 exabytes (u64_max / 8 / (1024**6)) for this to happen.\n // So we just write lowest 64 bits of that value.\n setBigUint64(view, blockLen - 8, BigInt(this.length * 8), isLE);\n this.process(view, 0);\n const oview = createView(out);\n const len = this.outputLen;\n // NOTE: we do division by 4 later, which should be fused in single op with modulo by JIT\n if (len % 4)\n throw new Error('_sha2: outputLen should be aligned to 32bit');\n const outLen = len / 4;\n const state = this.get();\n if (outLen > state.length)\n throw new Error('_sha2: outputLen bigger than state');\n for (let i = 0; i < outLen; i++)\n oview.setUint32(4 * i, state[i], isLE);\n }\n digest() {\n const { buffer, outputLen } = this;\n this.digestInto(buffer);\n const res = buffer.slice(0, outputLen);\n this.destroy();\n return res;\n }\n _cloneInto(to) {\n to || (to = new this.constructor());\n to.set(...this.get());\n const { blockLen, buffer, length, finished, destroyed, pos } = this;\n to.length = length;\n to.pos = pos;\n to.finished = finished;\n to.destroyed = destroyed;\n if (length % blockLen)\n to.buffer.set(buffer);\n return to;\n }\n}\n//# sourceMappingURL=_sha2.js.map","import { SHA2 } from './_sha2.js';\nimport { rotr, wrapConstructor } from './utils.js';\n// SHA2-256 need to try 2^128 hashes to execute birthday attack.\n// BTC network is doing 2^67 hashes/sec as per early 2023.\n// Choice: a ? b : c\nconst Chi = (a, b, c) => (a & b) ^ (~a & c);\n// Majority function, true if any two inpust is true\nconst Maj = (a, b, c) => (a & b) ^ (a & c) ^ (b & c);\n// Round constants:\n// first 32 bits of the fractional parts of the cube roots of the first 64 primes 2..311)\n// prettier-ignore\nconst SHA256_K = /* @__PURE__ */ new Uint32Array([\n 0x428a2f98, 0x71374491, 0xb5c0fbcf, 0xe9b5dba5, 0x3956c25b, 0x59f111f1, 0x923f82a4, 0xab1c5ed5,\n 0xd807aa98, 0x12835b01, 0x243185be, 0x550c7dc3, 0x72be5d74, 0x80deb1fe, 0x9bdc06a7, 0xc19bf174,\n 0xe49b69c1, 0xefbe4786, 0x0fc19dc6, 0x240ca1cc, 0x2de92c6f, 0x4a7484aa, 0x5cb0a9dc, 0x76f988da,\n 0x983e5152, 0xa831c66d, 0xb00327c8, 0xbf597fc7, 0xc6e00bf3, 0xd5a79147, 0x06ca6351, 0x14292967,\n 0x27b70a85, 0x2e1b2138, 0x4d2c6dfc, 0x53380d13, 0x650a7354, 0x766a0abb, 0x81c2c92e, 0x92722c85,\n 0xa2bfe8a1, 0xa81a664b, 0xc24b8b70, 0xc76c51a3, 0xd192e819, 0xd6990624, 0xf40e3585, 0x106aa070,\n 0x19a4c116, 0x1e376c08, 0x2748774c, 0x34b0bcb5, 0x391c0cb3, 0x4ed8aa4a, 0x5b9cca4f, 0x682e6ff3,\n 0x748f82ee, 0x78a5636f, 0x84c87814, 0x8cc70208, 0x90befffa, 0xa4506ceb, 0xbef9a3f7, 0xc67178f2\n]);\n// Initial state (first 32 bits of the fractional parts of the square roots of the first 8 primes 2..19):\n// prettier-ignore\nconst IV = /* @__PURE__ */ new Uint32Array([\n 0x6a09e667, 0xbb67ae85, 0x3c6ef372, 0xa54ff53a, 0x510e527f, 0x9b05688c, 0x1f83d9ab, 0x5be0cd19\n]);\n// Temporary buffer, not used to store anything between runs\n// Named this way because it matches specification.\nconst SHA256_W = /* @__PURE__ */ new Uint32Array(64);\nclass SHA256 extends SHA2 {\n constructor() {\n super(64, 32, 8, false);\n // We cannot use array here since array allows indexing by variable\n // which means optimizer/compiler cannot use registers.\n this.A = IV[0] | 0;\n this.B = IV[1] | 0;\n this.C = IV[2] | 0;\n this.D = IV[3] | 0;\n this.E = IV[4] | 0;\n this.F = IV[5] | 0;\n this.G = IV[6] | 0;\n this.H = IV[7] | 0;\n }\n get() {\n const { A, B, C, D, E, F, G, H } = this;\n return [A, B, C, D, E, F, G, H];\n }\n // prettier-ignore\n set(A, B, C, D, E, F, G, H) {\n this.A = A | 0;\n this.B = B | 0;\n this.C = C | 0;\n this.D = D | 0;\n this.E = E | 0;\n this.F = F | 0;\n this.G = G | 0;\n this.H = H | 0;\n }\n process(view, offset) {\n // Extend the first 16 words into the remaining 48 words w[16..63] of the message schedule array\n for (let i = 0; i < 16; i++, offset += 4)\n SHA256_W[i] = view.getUint32(offset, false);\n for (let i = 16; i < 64; i++) {\n const W15 = SHA256_W[i - 15];\n const W2 = SHA256_W[i - 2];\n const s0 = rotr(W15, 7) ^ rotr(W15, 18) ^ (W15 >>> 3);\n const s1 = rotr(W2, 17) ^ rotr(W2, 19) ^ (W2 >>> 10);\n SHA256_W[i] = (s1 + SHA256_W[i - 7] + s0 + SHA256_W[i - 16]) | 0;\n }\n // Compression function main loop, 64 rounds\n let { A, B, C, D, E, F, G, H } = this;\n for (let i = 0; i < 64; i++) {\n const sigma1 = rotr(E, 6) ^ rotr(E, 11) ^ rotr(E, 25);\n const T1 = (H + sigma1 + Chi(E, F, G) + SHA256_K[i] + SHA256_W[i]) | 0;\n const sigma0 = rotr(A, 2) ^ rotr(A, 13) ^ rotr(A, 22);\n const T2 = (sigma0 + Maj(A, B, C)) | 0;\n H = G;\n G = F;\n F = E;\n E = (D + T1) | 0;\n D = C;\n C = B;\n B = A;\n A = (T1 + T2) | 0;\n }\n // Add the compressed chunk to the current hash value\n A = (A + this.A) | 0;\n B = (B + this.B) | 0;\n C = (C + this.C) | 0;\n D = (D + this.D) | 0;\n E = (E + this.E) | 0;\n F = (F + this.F) | 0;\n G = (G + this.G) | 0;\n H = (H + this.H) | 0;\n this.set(A, B, C, D, E, F, G, H);\n }\n roundClean() {\n SHA256_W.fill(0);\n }\n destroy() {\n this.set(0, 0, 0, 0, 0, 0, 0, 0);\n this.buffer.fill(0);\n }\n}\n// Constants from https://nvlpubs.nist.gov/nistpubs/FIPS/NIST.FIPS.180-4.pdf\nclass SHA224 extends SHA256 {\n constructor() {\n super();\n this.A = 0xc1059ed8 | 0;\n this.B = 0x367cd507 | 0;\n this.C = 0x3070dd17 | 0;\n this.D = 0xf70e5939 | 0;\n this.E = 0xffc00b31 | 0;\n this.F = 0x68581511 | 0;\n this.G = 0x64f98fa7 | 0;\n this.H = 0xbefa4fa4 | 0;\n this.outputLen = 28;\n }\n}\n/**\n * SHA2-256 hash function\n * @param message - data that would be hashed\n */\nexport const sha256 = /* @__PURE__ */ wrapConstructor(() => new SHA256());\nexport const sha224 = /* @__PURE__ */ wrapConstructor(() => new SHA224());\n//# sourceMappingURL=sha256.js.map","/*! noble-curves - MIT License (c) 2022 Paul Miller (paulmillr.com) */\n// 100 lines of code in the file are duplicated from noble-hashes (utils).\n// This is OK: `abstract` directory does not use noble-hashes.\n// User may opt-in into using different hashing library. This way, noble-hashes\n// won't be included into their bundle.\nconst _0n = BigInt(0);\nconst _1n = BigInt(1);\nconst _2n = BigInt(2);\nconst u8a = (a) => a instanceof Uint8Array;\nconst hexes = /* @__PURE__ */ Array.from({ length: 256 }, (_, i) => i.toString(16).padStart(2, '0'));\n/**\n * @example bytesToHex(Uint8Array.from([0xca, 0xfe, 0x01, 0x23])) // 'cafe0123'\n */\nexport function bytesToHex(bytes) {\n if (!u8a(bytes))\n throw new Error('Uint8Array expected');\n // pre-caching improves the speed 6x\n let hex = '';\n for (let i = 0; i < bytes.length; i++) {\n hex += hexes[bytes[i]];\n }\n return hex;\n}\nexport function numberToHexUnpadded(num) {\n const hex = num.toString(16);\n return hex.length & 1 ? `0${hex}` : hex;\n}\nexport function hexToNumber(hex) {\n if (typeof hex !== 'string')\n throw new Error('hex string expected, got ' + typeof hex);\n // Big Endian\n return BigInt(hex === '' ? '0' : `0x${hex}`);\n}\n/**\n * @example hexToBytes('cafe0123') // Uint8Array.from([0xca, 0xfe, 0x01, 0x23])\n */\nexport function hexToBytes(hex) {\n if (typeof hex !== 'string')\n throw new Error('hex string expected, got ' + typeof hex);\n const len = hex.length;\n if (len % 2)\n throw new Error('padded hex string expected, got unpadded hex of length ' + len);\n const array = new Uint8Array(len / 2);\n for (let i = 0; i < array.length; i++) {\n const j = i * 2;\n const hexByte = hex.slice(j, j + 2);\n const byte = Number.parseInt(hexByte, 16);\n if (Number.isNaN(byte) || byte < 0)\n throw new Error('Invalid byte sequence');\n array[i] = byte;\n }\n return array;\n}\n// BE: Big Endian, LE: Little Endian\nexport function bytesToNumberBE(bytes) {\n return hexToNumber(bytesToHex(bytes));\n}\nexport function bytesToNumberLE(bytes) {\n if (!u8a(bytes))\n throw new Error('Uint8Array expected');\n return hexToNumber(bytesToHex(Uint8Array.from(bytes).reverse()));\n}\nexport function numberToBytesBE(n, len) {\n return hexToBytes(n.toString(16).padStart(len * 2, '0'));\n}\nexport function numberToBytesLE(n, len) {\n return numberToBytesBE(n, len).reverse();\n}\n// Unpadded, rarely used\nexport function numberToVarBytesBE(n) {\n return hexToBytes(numberToHexUnpadded(n));\n}\n/**\n * Takes hex string or Uint8Array, converts to Uint8Array.\n * Validates output length.\n * Will throw error for other types.\n * @param title descriptive title for an error e.g. 'private key'\n * @param hex hex string or Uint8Array\n * @param expectedLength optional, will compare to result array's length\n * @returns\n */\nexport function ensureBytes(title, hex, expectedLength) {\n let res;\n if (typeof hex === 'string') {\n try {\n res = hexToBytes(hex);\n }\n catch (e) {\n throw new Error(`${title} must be valid hex string, got \"${hex}\". Cause: ${e}`);\n }\n }\n else if (u8a(hex)) {\n // Uint8Array.from() instead of hash.slice() because node.js Buffer\n // is instance of Uint8Array, and its slice() creates **mutable** copy\n res = Uint8Array.from(hex);\n }\n else {\n throw new Error(`${title} must be hex string or Uint8Array`);\n }\n const len = res.length;\n if (typeof expectedLength === 'number' && len !== expectedLength)\n throw new Error(`${title} expected ${expectedLength} bytes, got ${len}`);\n return res;\n}\n/**\n * Copies several Uint8Arrays into one.\n */\nexport function concatBytes(...arrays) {\n const r = new Uint8Array(arrays.reduce((sum, a) => sum + a.length, 0));\n let pad = 0; // walk through each item, ensure they have proper type\n arrays.forEach((a) => {\n if (!u8a(a))\n throw new Error('Uint8Array expected');\n r.set(a, pad);\n pad += a.length;\n });\n return r;\n}\nexport function equalBytes(b1, b2) {\n // We don't care about timing attacks here\n if (b1.length !== b2.length)\n return false;\n for (let i = 0; i < b1.length; i++)\n if (b1[i] !== b2[i])\n return false;\n return true;\n}\n/**\n * @example utf8ToBytes('abc') // new Uint8Array([97, 98, 99])\n */\nexport function utf8ToBytes(str) {\n if (typeof str !== 'string')\n throw new Error(`utf8ToBytes expected string, got ${typeof str}`);\n return new Uint8Array(new TextEncoder().encode(str)); // https://bugzil.la/1681809\n}\n// Bit operations\n/**\n * Calculates amount of bits in a bigint.\n * Same as `n.toString(2).length`\n */\nexport function bitLen(n) {\n let len;\n for (len = 0; n > _0n; n >>= _1n, len += 1)\n ;\n return len;\n}\n/**\n * Gets single bit at position.\n * NOTE: first bit position is 0 (same as arrays)\n * Same as `!!+Array.from(n.toString(2)).reverse()[pos]`\n */\nexport function bitGet(n, pos) {\n return (n >> BigInt(pos)) & _1n;\n}\n/**\n * Sets single bit at position.\n */\nexport const bitSet = (n, pos, value) => {\n return n | ((value ? _1n : _0n) << BigInt(pos));\n};\n/**\n * Calculate mask for N bits. Not using ** operator with bigints because of old engines.\n * Same as BigInt(`0b${Array(i).fill('1').join('')}`)\n */\nexport const bitMask = (n) => (_2n << BigInt(n - 1)) - _1n;\n// DRBG\nconst u8n = (data) => new Uint8Array(data); // creates Uint8Array\nconst u8fr = (arr) => Uint8Array.from(arr); // another shortcut\n/**\n * Minimal HMAC-DRBG from NIST 800-90 for RFC6979 sigs.\n * @returns function that will call DRBG until 2nd arg returns something meaningful\n * @example\n * const drbg = createHmacDRBG<Key>(32, 32, hmac);\n * drbg(seed, bytesToKey); // bytesToKey must return Key or undefined\n */\nexport function createHmacDrbg(hashLen, qByteLen, hmacFn) {\n if (typeof hashLen !== 'number' || hashLen < 2)\n throw new Error('hashLen must be a number');\n if (typeof qByteLen !== 'number' || qByteLen < 2)\n throw new Error('qByteLen must be a number');\n if (typeof hmacFn !== 'function')\n throw new Error('hmacFn must be a function');\n // Step B, Step C: set hashLen to 8*ceil(hlen/8)\n let v = u8n(hashLen); // Minimal non-full-spec HMAC-DRBG from NIST 800-90 for RFC6979 sigs.\n let k = u8n(hashLen); // Steps B and C of RFC6979 3.2: set hashLen, in our case always same\n let i = 0; // Iterations counter, will throw when over 1000\n const reset = () => {\n v.fill(1);\n k.fill(0);\n i = 0;\n };\n const h = (...b) => hmacFn(k, v, ...b); // hmac(k)(v, ...values)\n const reseed = (seed = u8n()) => {\n // HMAC-DRBG reseed() function. Steps D-G\n k = h(u8fr([0x00]), seed); // k = hmac(k || v || 0x00 || seed)\n v = h(); // v = hmac(k || v)\n if (seed.length === 0)\n return;\n k = h(u8fr([0x01]), seed); // k = hmac(k || v || 0x01 || seed)\n v = h(); // v = hmac(k || v)\n };\n const gen = () => {\n // HMAC-DRBG generate() function\n if (i++ >= 1000)\n throw new Error('drbg: tried 1000 values');\n let len = 0;\n const out = [];\n while (len < qByteLen) {\n v = h();\n const sl = v.slice();\n out.push(sl);\n len += v.length;\n }\n return concatBytes(...out);\n };\n const genUntil = (seed, pred) => {\n reset();\n reseed(seed); // Steps D-G\n let res = undefined; // Step H: grind until k is in [1..n-1]\n while (!(res = pred(gen())))\n reseed();\n reset();\n return res;\n };\n return genUntil;\n}\n// Validating curves and fields\nconst validatorFns = {\n bigint: (val) => typeof val === 'bigint',\n function: (val) => typeof val === 'function',\n boolean: (val) => typeof val === 'boolean',\n string: (val) => typeof val === 'string',\n stringOrUint8Array: (val) => typeof val === 'string' || val instanceof Uint8Array,\n isSafeInteger: (val) => Number.isSafeInteger(val),\n array: (val) => Array.isArray(val),\n field: (val, object) => object.Fp.isValid(val),\n hash: (val) => typeof val === 'function' && Number.isSafeInteger(val.outputLen),\n};\n// type Record<K extends string | number | symbol, T> = { [P in K]: T; }\nexport function validateObject(object, validators, optValidators = {}) {\n const checkField = (fieldName, type, isOptional) => {\n const checkVal = validatorFns[type];\n if (typeof checkVal !== 'function')\n throw new Error(`Invalid validator \"${type}\", expected function`);\n const val = object[fieldName];\n if (isOptional && val === undefined)\n return;\n if (!checkVal(val, object)) {\n throw new Error(`Invalid param ${String(fieldName)}=${val} (${typeof val}), expected ${type}`);\n }\n };\n for (const [fieldName, type] of Object.entries(validators))\n checkField(fieldName, type, false);\n for (const [fieldName, type] of Object.entries(optValidators))\n checkField(fieldName, type, true);\n return object;\n}\n// validate type tests\n// const o: { a: number; b: number; c: number } = { a: 1, b: 5, c: 6 };\n// const z0 = validateObject(o, { a: 'isSafeInteger' }, { c: 'bigint' }); // Ok!\n// // Should fail type-check\n// const z1 = validateObject(o, { a: 'tmp' }, { c: 'zz' });\n// const z2 = validateObject(o, { a: 'isSafeInteger' }, { c: 'zz' });\n// const z3 = validateObject(o, { test: 'boolean', z: 'bug' });\n// const z4 = validateObject(o, { a: 'boolean', z: 'bug' });\n//# sourceMappingURL=utils.js.map","/*! noble-curves - MIT License (c) 2022 Paul Miller (paulmillr.com) */\n// Utilities for modular arithmetics and finite fields\nimport { bitMask, numberToBytesBE, numberToBytesLE, bytesToNumberBE, bytesToNumberLE, ensureBytes, validateObject, } from './utils.js';\n// prettier-ignore\nconst _0n = BigInt(0), _1n = BigInt(1), _2n = BigInt(2), _3n = BigInt(3);\n// prettier-ignore\nconst _4n = BigInt(4), _5n = BigInt(5), _8n = BigInt(8);\n// prettier-ignore\nconst _9n = BigInt(9), _16n = BigInt(16);\n// Calculates a modulo b\nexport function mod(a, b) {\n const result = a % b;\n return result >= _0n ? result : b + result;\n}\n/**\n * Efficiently raise num to power and do modular division.\n * Unsafe in some contexts: uses ladder, so can expose bigint bits.\n * @example\n * pow(2n, 6n, 11n) // 64n % 11n == 9n\n */\n// TODO: use field version && remove\nexport function pow(num, power, modulo) {\n if (modulo <= _0n || power < _0n)\n throw new Error('Expected power/modulo > 0');\n if (modulo === _1n)\n return _0n;\n let res = _1n;\n while (power > _0n) {\n if (power & _1n)\n res = (res * num) % modulo;\n num = (num * num) % modulo;\n power >>= _1n;\n }\n return res;\n}\n// Does x ^ (2 ^ power) mod p. pow2(30, 4) == 30 ^ (2 ^ 4)\nexport function pow2(x, power, modulo) {\n let res = x;\n while (power-- > _0n) {\n res *= res;\n res %= modulo;\n }\n return res;\n}\n// Inverses number over modulo\nexport function invert(number, modulo) {\n if (number === _0n || modulo <= _0n) {\n throw new Error(`invert: expected positive integers, got n=${number} mod=${modulo}`);\n }\n // Euclidean GCD https://brilliant.org/wiki/extended-euclidean-algorithm/\n // Fermat's little theorem \"CT-like\" version inv(n) = n^(m-2) mod m is 30x slower.\n let a = mod(number, modulo);\n let b = modulo;\n // prettier-ignore\n let x = _0n, y = _1n, u = _1n, v = _0n;\n while (a !== _0n) {\n // JIT applies optimization if those two lines follow each other\n const q = b / a;\n const r = b % a;\n const m = x - u * q;\n const n = y - v * q;\n // prettier-ignore\n b = a, a = r, x = u, y = v, u = m, v = n;\n }\n const gcd = b;\n if (gcd !== _1n)\n throw new Error('invert: does not exist');\n return mod(x, modulo);\n}\n/**\n * Tonelli-Shanks square root search algorithm.\n * 1. https://eprint.iacr.org/2012/685.pdf (page 12)\n * 2. Square Roots from 1; 24, 51, 10 to Dan Shanks\n * Will start an infinite loop if field order P is not prime.\n * @param P field order\n * @returns function that takes field Fp (created from P) and number n\n */\nexport function tonelliShanks(P) {\n // Legendre constant: used to calculate Legendre symbol (a | p),\n // which denotes the value of a^((p-1)/2) (mod p).\n // (a | p) ≡ 1 if a is a square (mod p)\n // (a | p) ≡ -1 if a is not a square (mod p)\n // (a | p) ≡ 0 if a ≡ 0 (mod p)\n const legendreC = (P - _1n) / _2n;\n let Q, S, Z;\n // Step 1: By factoring out powers of 2 from p - 1,\n // find q and s such that p - 1 = q*(2^s) with q odd\n for (Q = P - _1n, S = 0; Q % _2n === _0n; Q /= _2n, S++)\n ;\n // Step 2: Select a non-square z such that (z | p) ≡ -1 and set c ≡ zq\n for (Z = _2n; Z < P && pow(Z, legendreC, P) !== P - _1n; Z++)\n ;\n // Fast-path\n if (S === 1) {\n const p1div4 = (P + _1n) / _4n;\n return function tonelliFast(Fp, n) {\n const root = Fp.pow(n, p1div4);\n if (!Fp.eql(Fp.sqr(root), n))\n throw new Error('Cannot find square root');\n return root;\n };\n }\n // Slow-path\n const Q1div2 = (Q + _1n) / _2n;\n return function tonelliSlow(Fp, n) {\n // Step 0: Check that n is indeed a square: (n | p) should not be ≡ -1\n if (Fp.pow(n, legendreC) === Fp.neg(Fp.ONE))\n throw new Error('Cannot find square root');\n let r = S;\n // TODO: will fail at Fp2/etc\n let g = Fp.pow(Fp.mul(Fp.ONE, Z), Q); // will update both x and b\n let x = Fp.pow(n, Q1div2); // first guess at the square root\n let b = Fp.pow(n, Q); // first guess at the fudge factor\n while (!Fp.eql(b, Fp.ONE)) {\n if (Fp.eql(b, Fp.ZERO))\n return Fp.ZERO; // https://en.wikipedia.org/wiki/Tonelli%E2%80%93Shanks_algorithm (4. If t = 0, return r = 0)\n // Find m such b^(2^m)==1\n let m = 1;\n for (let t2 = Fp.sqr(b); m < r; m++) {\n if (Fp.eql(t2, Fp.ONE))\n break;\n t2 = Fp.sqr(t2); // t2 *= t2\n }\n // NOTE: r-m-1 can be bigger than 32, need to convert to bigint before shift, otherwise there will be overflow\n const ge = Fp.pow(g, _1n << BigInt(r - m - 1)); // ge = 2^(r-m-1)\n g = Fp.sqr(ge); // g = ge * ge\n x = Fp.mul(x, ge); // x *= ge\n b = Fp.mul(b, g); // b *= g\n r = m;\n }\n return x;\n };\n}\nexport function FpSqrt(P) {\n // NOTE: different algorithms can give different roots, it is up to user to decide which one they want.\n // For example there is FpSqrtOdd/FpSqrtEven to choice root based on oddness (used for hash-to-curve).\n // P ≡ 3 (mod 4)\n // √n = n^((P+1)/4)\n if (P % _4n === _3n) {\n // Not all roots possible!\n // const ORDER =\n // 0x1a0111ea397fe69a4b1ba7b6434bacd764774b84f38512bf6730d2a0f6b0f6241eabfffeb153ffffb9feffffffffaaabn;\n // const NUM = 72057594037927816n;\n const p1div4 = (P + _1n) / _4n;\n return function sqrt3mod4(Fp, n) {\n const root = Fp.pow(n, p1div4);\n // Throw if root**2 != n\n if (!Fp.eql(Fp.sqr(root), n))\n throw new Error('Cannot find square root');\n return root;\n };\n }\n // Atkin algorithm for q ≡ 5 (mod 8), https://eprint.iacr.org/2012/685.pdf (page 10)\n if (P % _8n === _5n) {\n const c1 = (P - _5n) / _8n;\n return function sqrt5mod8(Fp, n) {\n const n2 = Fp.mul(n, _2n);\n const v = Fp.pow(n2, c1);\n const nv = Fp.mul(n, v);\n const i = Fp.mul(Fp.mul(nv, _2n), v);\n const root = Fp.mul(nv, Fp.sub(i, Fp.ONE));\n if (!Fp.eql(Fp.sqr(root), n))\n throw new Error('Cannot find square root');\n return root;\n };\n }\n // P ≡ 9 (mod 16)\n if (P % _16n === _9n) {\n // NOTE: tonelli is too slow for bls-Fp2 calculations even on start\n // Means we cannot use sqrt for constants at all!\n //\n // const c1 = Fp.sqrt(Fp.negate(Fp.ONE)); // 1. c1 = sqrt(-1) in F, i.e., (c1^2) == -1 in F\n // const c2 = Fp.sqrt(c1); // 2. c2 = sqrt(c1) in F, i.e., (c2^2) == c1 in F\n // const c3 = Fp.sqrt(Fp.negate(c1)); // 3. c3 = sqrt(-c1) in F, i.e., (c3^2) == -c1 in F\n // const c4 = (P + _7n) / _16n; // 4. c4 = (q + 7) / 16 # Integer arithmetic\n // sqrt = (x) => {\n // let tv1 = Fp.pow(x, c4); // 1. tv1 = x^c4\n // let tv2 = Fp.mul(c1, tv1); // 2. tv2 = c1 * tv1\n // const tv3 = Fp.mul(c2, tv1); // 3. tv3 = c2 * tv1\n // let tv4 = Fp.mul(c3, tv1); // 4. tv4 = c3 * tv1\n // const e1 = Fp.equals(Fp.square(tv2), x); // 5. e1 = (tv2^2) == x\n // const e2 = Fp.equals(Fp.square(tv3), x); // 6. e2 = (tv3^2) == x\n // tv1 = Fp.cmov(tv1, tv2, e1); // 7. tv1 = CMOV(tv1, tv2, e1) # Select tv2 if (tv2^2) == x\n // tv2 = Fp.cmov(tv4, tv3, e2); // 8. tv2 = CMOV(tv4, tv3, e2) # Select tv3 if (tv3^2) == x\n // const e3 = Fp.equals(Fp.square(tv2), x); // 9. e3 = (tv2^2) == x\n // return Fp.cmov(tv1, tv2, e3); // 10. z = CMOV(tv1, tv2, e3) # Select the sqrt from tv1 and tv2\n // }\n }\n // Other cases: Tonelli-Shanks algorithm\n return tonelliShanks(P);\n}\n// Little-endian check for first LE bit (last BE bit);\nexport const isNegativeLE = (num, modulo) => (mod(num, modulo) & _1n) === _1n;\n// prettier-ignore\nconst FIELD_FIELDS = [\n 'create', 'isValid', 'is0', 'neg', 'inv', 'sqrt', 'sqr',\n 'eql', 'add', 'sub', 'mul', 'pow', 'div',\n 'addN', 'subN', 'mulN', 'sqrN'\n];\nexport function validateField(field) {\n const initial = {\n ORDER: 'bigint',\n MASK: 'bigint',\n BYTES: 'isSafeInteger',\n BITS: 'isSafeInteger',\n };\n const opts = FIELD_FIELDS.reduce((map, val) => {\n map[val] = 'function';\n return map;\n }, initial);\n return validateObject(field, opts);\n}\n// Generic field functions\n/**\n * Same as `pow` but for Fp: non-constant-time.\n * Unsafe in some contexts: uses ladder, so can expose bigint bits.\n */\nexport function FpPow(f, num, power) {\n // Should have same speed as pow for bigints\n // TODO: benchmark!\n if (power < _0n)\n throw new Error('Expected power > 0');\n if (power === _0n)\n return f.ONE;\n if (power === _1n)\n return num;\n let p = f.ONE;\n let d = num;\n while (power > _0n) {\n if (power & _1n)\n p = f.mul(p, d);\n d = f.sqr(d);\n power >>= _1n;\n }\n return p;\n}\n/**\n * Efficiently invert an array of Field elements.\n * `inv(0)` will return `undefined` here: make sure to throw an error.\n */\nexport function FpInvertBatch(f, nums) {\n const tmp = new Array(nums.length);\n // Walk from first to last, multiply them by each other MOD p\n const lastMultiplied = nums.reduce((acc, num, i) => {\n if (f.is0(num))\n return acc;\n tmp[i] = acc;\n return f.mul(acc, num);\n }, f.ONE);\n // Invert last element\n const inverted = f.inv(lastMultiplied);\n // Walk from last to first, multiply them by inverted each other MOD p\n nums.reduceRight((acc, num, i) => {\n if (f.is0(num))\n return acc;\n tmp[i] = f.mul(acc, tmp[i]);\n return f.mul(acc, num);\n }, inverted);\n return tmp;\n}\nexport function FpDiv(f, lhs, rhs) {\n return f.mul(lhs, typeof rhs === 'bigint' ? invert(rhs, f.ORDER) : f.inv(rhs));\n}\n// This function returns True whenever the value x is a square in the field F.\nexport function FpIsSquare(f) {\n const legendreConst = (f.ORDER - _1n) / _2n; // Integer arithmetic\n return (x) => {\n const p = f.pow(x, legendreConst);\n return f.eql(p, f.ZERO) || f.eql(p, f.ONE);\n };\n}\n// CURVE.n lengths\nexport function nLength(n, nBitLength) {\n // Bit size, byte size of CURVE.n\n const _nBitLength = nBitLength !== undefined ? nBitLength : n.toString(2).length;\n const nByteLength = Math.ceil(_nBitLength / 8);\n return { nBitLength: _nBitLength, nByteLength };\n}\n/**\n * Initializes a finite field over prime. **Non-primes are not supported.**\n * Do not init in loop: slow. Very fragile: always run a benchmark on a change.\n * Major performance optimizations:\n * * a) denormalized operations like mulN instead of mul\n * * b) same object shape: never add or remove keys\n * * c) Object.freeze\n * @param ORDER prime positive bigint\n * @param bitLen how many bits the field consumes\n * @param isLE (def: false) if encoding / decoding should be in little-endian\n * @param redef optional faster redefinitions of sqrt and other methods\n */\nexport function Field(ORDER, bitLen, isLE = false, redef = {}) {\n if (ORDER <= _0n)\n throw new Error(`Expected Field ORDER > 0, got ${ORDER}`);\n const { nBitLength: BITS, nByteLength: BYTES } = nLength(ORDER, bitLen);\n if (BYTES > 2048)\n throw new Error('Field lengths over 2048 bytes are not supported');\n const sqrtP = FpSqrt(ORDER);\n const f = Object.freeze({\n ORDER,\n BITS,\n BYTES,\n MASK: bitMask(BITS),\n ZERO: _0n,\n ONE: _1n,\n create: (num) => mod(num, ORDER),\n isValid: (num) => {\n if (typeof num !== 'bigint')\n throw new Error(`Invalid field element: expected bigint, got ${typeof num}`);\n return _0n <= num && num < ORDER; // 0 is valid element, but it's not invertible\n },\n is0: (num) => num === _0n,\n isOdd: (num) => (num & _1n) === _1n,\n neg: (num) => mod(-num, ORDER),\n eql: (lhs, rhs) => lhs === rhs,\n sqr: (num) => mod(num * num, ORDER),\n add: (lhs, rhs) => mod(lhs + rhs, ORDER),\n sub: (lhs, rhs) => mod(lhs - rhs, ORDER),\n mul: (lhs, rhs) => mod(lhs * rhs, ORDER),\n pow: (num, power) => FpPow(f, num, power),\n div: (lhs, rhs) => mod(lhs * invert(rhs, ORDER), ORDER),\n // Same as above, but doesn't normalize\n sqrN: (num) => num * num,\n addN: (lhs, rhs) => lhs + rhs,\n subN: (lhs, rhs) => lhs - rhs,\n mulN: (lhs, rhs) => lhs * rhs,\n inv: (num) => invert(num, ORDER),\n sqrt: redef.sqrt || ((n) => sqrtP(f, n)),\n invertBatch: (lst) => FpInvertBatch(f, lst),\n // TODO: do we really need constant cmov?\n // We don't have const-time bigints anyway, so probably will be not very useful\n cmov: (a, b, c) => (c ? b : a),\n toBytes: (num) => (isLE ? numberToBytesLE(num, BYTES) : numberToBytesBE(num, BYTES)),\n fromBytes: (bytes) => {\n if (bytes.length !== BYTES)\n throw new Error(`Fp.fromBytes: expected ${BYTES}, got ${bytes.length}`);\n return isLE ? bytesToNumberLE(bytes) : bytesToNumberBE(bytes);\n },\n });\n return Object.freeze(f);\n}\nexport function FpSqrtOdd(Fp, elm) {\n if (!Fp.isOdd)\n throw new Error(`Field doesn't have isOdd`);\n const root = Fp.sqrt(elm);\n return Fp.isOdd(root) ? root : Fp.neg(root);\n}\nexport function FpSqrtEven(Fp, elm) {\n if (!Fp.isOdd)\n throw new Error(`Field doesn't have isOdd`);\n const root = Fp.sqrt(elm);\n return Fp.isOdd(root) ? Fp.neg(root) : root;\n}\n/**\n * \"Constant-time\" private key generation utility.\n * Same as mapKeyToField, but accepts less bytes (40 instead of 48 for 32-byte field).\n * Which makes it slightly more biased, less secure.\n * @deprecated use mapKeyToField instead\n */\nexport function hashToPrivateScalar(hash, groupOrder, isLE = false) {\n hash = ensureBytes('privateHash', hash);\n const hashLen = hash.length;\n const minLen = nLength(groupOrder).nByteLength + 8;\n if (minLen < 24 || hashLen < minLen || hashLen > 1024)\n throw new Error(`hashToPrivateScalar: expected ${minLen}-1024 bytes of input, got ${hashLen}`);\n const num = isLE ? bytesToNumberLE(hash) : bytesToNumberBE(hash);\n return mod(num, groupOrder - _1n) + _1n;\n}\n/**\n * Returns total number of bytes consumed by the field element.\n * For example, 32 bytes for usual 256-bit weierstrass curve.\n * @param fieldOrder number of field elements, usually CURVE.n\n * @returns byte length of field\n */\nexport function getFieldBytesLength(fieldOrder) {\n if (typeof fieldOrder !== 'bigint')\n throw new Error('field order must be bigint');\n const bitLength = fieldOrder.toString(2).length;\n return Math.ceil(bitLength / 8);\n}\n/**\n * Returns minimal amount of bytes that can be safely reduced\n * by field order.\n * Should be 2^-128 for 128-bit curve such as P256.\n * @param fieldOrder number of field elements, usually CURVE.n\n * @returns byte length of target hash\n */\nexport function getMinHashLength(fieldOrder) {\n const length = getFieldBytesLength(fieldOrder);\n return length + Math.ceil(length / 2);\n}\n/**\n * \"Constant-time\" private key generation utility.\n * Can take (n + n/2) or more bytes of uniform input e.g. from CSPRNG or KDF\n * and convert them into private scalar, with the modulo bias being negligible.\n * Needs at least 48 bytes of input for 32-byte private key.\n * https://research.kudelskisecurity.com/2020/07/28/the-definitive-guide-to-modulo-bias-and-how-to-avoid-it/\n * FIPS 186-5, A.2 https://csrc.nist.gov/publications/detail/fips/186/5/final\n * RFC 9380, https://www.rfc-editor.org/rfc/rfc9380#section-5\n * @param hash hash output from SHA3 or a similar function\n * @param groupOrder size of subgroup - (e.g. secp256k1.CURVE.n)\n * @param isLE interpret hash bytes as LE num\n * @returns valid private scalar\n */\nexport function mapHashToField(key, fieldOrder, isLE = false) {\n const len = key.length;\n const fieldLen = getFieldBytesLength(fieldOrder);\n const minLen = getMinHashLength(fieldOrder);\n // No small numbers: need to understand bias story. No huge numbers: easier to detect JS timings.\n if (len < 16 || len < minLen || len > 1024)\n throw new Error(`expected ${minLen}-1024 bytes of input, got ${len}`);\n const num = isLE ? bytesToNumberBE(key) : bytesToNumberLE(key);\n // `mod(x, 11)` can sometimes produce 0. `mod(x, 10) + 1` is the same, but no 0\n const reduced = mod(num, fieldOrder - _1n) + _1n;\n return isLE ? numberToBytesLE(reduced, fieldLen) : numberToBytesBE(reduced, fieldLen);\n}\n//# sourceMappingURL=modular.js.map","/*! noble-curves - MIT License (c) 2022 Paul Miller (paulmillr.com) */\n// Abelian group utilities\nimport { validateField, nLength } from './modular.js';\nimport { validateObject } from './utils.js';\nconst _0n = BigInt(0);\nconst _1n = BigInt(1);\n// Elliptic curve multiplication of Point by scalar. Fragile.\n// Scalars should always be less than curve order: this should be checked inside of a curve itself.\n// Creates precomputation tables for fast multiplication:\n// - private scalar is split by fixed size windows of W bits\n// - every window point is collected from window's table & added to accumulator\n// - since windows are different, same point inside tables won't be accessed more than once per calc\n// - each multiplication is 'Math.ceil(CURVE_ORDER / 𝑊) + 1' point additions (fixed for any scalar)\n// - +1 window is neccessary for wNAF\n// - wNAF reduces table size: 2x less memory + 2x faster generation, but 10% slower multiplication\n// TODO: Research returning 2d JS array of windows, instead of a single window. This would allow\n// windows to be in different memory locations\nexport function wNAF(c, bits) {\n const constTimeNegate = (condition, item) => {\n const neg = item.negate();\n return condition ? neg : item;\n };\n const opts = (W) => {\n const windows = Math.ceil(bits / W) + 1; // +1, because\n const windowSize = 2 ** (W - 1); // -1 because we skip zero\n return { windows, windowSize };\n };\n return {\n constTimeNegate,\n // non-const time multiplication ladder\n unsafeLadder(elm, n) {\n let p = c.ZERO;\n let d = elm;\n while (n > _0n) {\n if (n & _1n)\n p = p.add(d);\n d = d.double();\n n >>= _1n;\n }\n return p;\n },\n /**\n * Creates a wNAF precomputation window. Used for caching.\n * Default window size is set by `utils.precompute()` and is equal to 8.\n * Number of precomputed points depends on the curve size:\n * 2^(𝑊−1) * (Math.ceil(𝑛 / 𝑊) + 1), where:\n * - 𝑊 is the window size\n * - 𝑛 is the bitlength of the curve order.\n * For a 256-bit curve and window size 8, the number of precomputed points is 128 * 33 = 4224.\n * @returns precomputed point tables flattened to a single array\n */\n precomputeWindow(elm, W) {\n const { windows, windowSize } = opts(W);\n const points = [];\n let p = elm;\n let base = p;\n for (let window = 0; window < windows; window++) {\n base = p;\n points.push(base);\n // =1, because we skip zero\n for (let i = 1; i < windowSize; i++) {\n base = base.add(p);\n points.push(base);\n }\n p = base.double();\n }\n return points;\n },\n /**\n * Implements ec multiplication using precomputed tables and w-ary non-adjacent form.\n * @param W window size\n * @param precomputes precomputed tables\n * @param n scalar (we don't check here, but should be less than curve order)\n * @returns real and fake (for const-time) points\n */\n wNAF(W, precomputes, n) {\n // TODO: maybe check that scalar is less than group order? wNAF behavious is undefined otherwise\n // But need to carefully remove other checks before wNAF. ORDER == bits here\n const { windows, windowSize } = opts(W);\n let p = c.ZERO;\n let f = c.BASE;\n const mask = BigInt(2 ** W - 1); // Create mask with W ones: 0b1111 for W=4 etc.\n const maxNumber = 2 ** W;\n const shiftBy = BigInt(W);\n for (let window = 0; window < windows; window++) {\n const offset = window * windowSize;\n // Extract W bits.\n let wbits = Number(n & mask);\n // Shift number by W bits.\n n >>= shiftBy;\n // If the bits are bigger than max size, we'll split those.\n // +224 => 256 - 32\n if (wbits > windowSize) {\n wbits -= maxNumber;\n n += _1n;\n }\n // This code was first written with assumption that 'f' and 'p' will never be infinity point:\n // since each addition is multiplied by 2 ** W, it cannot cancel each other. However,\n // there is negate now: it is possible that negated element from low value\n // would be the same as high element, which will create carry into next window.\n // It's not obvious how this can fail, but still worth investigating later.\n // Check if we're onto Zero point.\n // Add random point inside current window to f.\n const offset1 = offset;\n const offset2 = offset + Math.abs(wbits) - 1; // -1 because we skip zero\n const cond1 = window % 2 !== 0;\n const cond2 = wbits < 0;\n if (wbits === 0) {\n // The most important part for const-time getPublicKey\n f = f.add(constTimeNegate(cond1, precomputes[offset1]));\n }\n else {\n p = p.add(constTimeNegate(cond2, precomputes[offset2]));\n }\n }\n // JIT-compiler should not eliminate f here, since it will later be used in normalizeZ()\n // Even if the variable is still unused, there are some checks which will\n // throw an exception, so compiler needs to prove they won't happen, which is hard.\n // At this point there is a way to F be infinity-point even if p is not,\n // which makes it less const-time: around 1 bigint multiply.\n return { p, f };\n },\n wNAFCached(P, precomputesMap, n, transform) {\n // @ts-ignore\n const W = P._WINDOW_SIZE || 1;\n // Calculate precomputes on a first run, reuse them after\n let comp = precomputesMap.get(P);\n if (!comp) {\n comp = this.precomputeWindow(P, W);\n if (W !== 1) {\n precomputesMap.set(P, transform(comp));\n }\n }\n return this.wNAF(W, comp, n);\n },\n };\n}\nexport function validateBasic(curve) {\n validateField(curve.Fp);\n validateObject(curve, {\n n: 'bigint',\n h: 'bigint',\n Gx: 'field',\n Gy: 'field',\n }, {\n nBitLength: 'isSafeInteger',\n nByteLength: 'isSafeInteger',\n });\n // Set defaults\n return Object.freeze({\n ...nLength(curve.n, curve.nBitLength),\n ...curve,\n ...{ p: curve.Fp.ORDER },\n });\n}\n//# sourceMappingURL=curve.js.map","/*! noble-curves - MIT License (c) 2022 Paul Miller (paulmillr.com) */\n// Short Weierstrass curve. The formula is: y² = x³ + ax + b\nimport * as mod from './modular.js';\nimport * as ut from './utils.js';\nimport { ensureBytes } from './utils.js';\nimport { wNAF, validateBasic } from './curve.js';\nfunction validatePointOpts(curve) {\n const opts = validateBasic(curve);\n ut.validateObject(opts, {\n a: 'field',\n b: 'field',\n }, {\n allowedPrivateKeyLengths: 'array',\n wrapPrivateKey: 'boolean',\n isTorsionFree: 'function',\n clearCofactor: 'function',\n allowInfinityPoint: 'boolean',\n fromBytes: 'function',\n toBytes: 'function',\n });\n const { endo, Fp, a } = opts;\n if (endo) {\n if (!Fp.eql(a, Fp.ZERO)) {\n throw new Error('Endomorphism can only be defined for Koblitz curves that have a=0');\n }\n if (typeof endo !== 'object' ||\n typeof endo.beta !== 'bigint' ||\n typeof endo.splitScalar !== 'function') {\n throw new Error('Expected endomorphism with beta: bigint and splitScalar: function');\n }\n }\n return Object.freeze({ ...opts });\n}\n// ASN.1 DER encoding utilities\nconst { bytesToNumberBE: b2n, hexToBytes: h2b } = ut;\nexport const DER = {\n // asn.1 DER encoding utils\n Err: class DERErr extends Error {\n constructor(m = '') {\n super(m);\n }\n },\n _parseInt(data) {\n const { Err: E } = DER;\n if (data.length < 2 || data[0] !== 0x02)\n throw new E('Invalid signature integer tag');\n const len = data[1];\n const res = data.subarray(2, len + 2);\n if (!len || res.length !== len)\n throw new E('Invalid signature integer: wrong length');\n // https://crypto.stackexchange.com/a/57734 Leftmost bit of first byte is 'negative' flag,\n // since we always use positive integers here. It must always be empty:\n // - add zero byte if exists\n // - if next byte doesn't have a flag, leading zero is not allowed (minimal encoding)\n if (res[0] & 0b10000000)\n throw new E('Invalid signature integer: negative');\n if (res[0] === 0x00 && !(res[1] & 0b10000000))\n throw new E('Invalid signature integer: unnecessary leading zero');\n return { d: b2n(res), l: data.subarray(len + 2) }; // d is data, l is left\n },\n toSig(hex) {\n // parse DER signature\n const { Err: E } = DER;\n const data = typeof hex === 'string' ? h2b(hex) : hex;\n if (!(data instanceof Uint8Array))\n throw new Error('ui8a expected');\n let l = data.length;\n if (l < 2 || data[0] != 0x30)\n throw new E('Invalid signature tag');\n if (data[1] !== l - 2)\n throw new E('Invalid signature: incorrect length');\n const { d: r, l: sBytes } = DER._parseInt(data.subarray(2));\n const { d: s, l: rBytesLeft } = DER._parseInt(sBytes);\n if (rBytesLeft.length)\n throw new E('Invalid signature: left bytes after parsing');\n return { r, s };\n },\n hexFromSig(sig) {\n // Add leading zero if first byte has negative bit enabled. More details in '_parseInt'\n const slice = (s) => (Number.parseInt(s[0], 16) & 0b1000 ? '00' + s : s);\n const h = (num) => {\n const hex = num.toString(16);\n return hex.length & 1 ? `0${hex}` : hex;\n };\n const s = slice(h(sig.s));\n const r = slice(h(sig.r));\n const shl = s.length / 2;\n const rhl = r.length / 2;\n const sl = h(shl);\n const rl = h(rhl);\n return `30${h(rhl + shl + 4)}02${rl}${r}02${sl}${s}`;\n },\n};\n// Be friendly to bad ECMAScript parsers by not using bigint literals\n// prettier-ignore\nconst _0n = BigInt(0), _1n = BigInt(1), _2n = BigInt(2), _3n = BigInt(3), _4n = BigInt(4);\nexport function weierstrassPoints(opts) {\n const CURVE = validatePointOpts(opts);\n const { Fp } = CURVE; // All curves has same field / group length as for now, but they can differ\n const toBytes = CURVE.toBytes ||\n ((_c, point, _isCompressed) => {\n const a = point.toAffine();\n return ut.concatBytes(Uint8Array.from([0x04]), Fp.toBytes(a.x), Fp.toBytes(a.y));\n });\n const fromBytes = CURVE.fromBytes ||\n ((bytes) => {\n // const head = bytes[0];\n const tail = bytes.subarray(1);\n // if (head !== 0x04) throw new Error('Only non-compressed encoding is supported');\n const x = Fp.fromBytes(tail.subarray(0, Fp.BYTES));\n const y = Fp.fromBytes(tail.subarray(Fp.BYTES, 2 * Fp.BYTES));\n return { x, y };\n });\n /**\n * y² = x³ + ax + b: Short weierstrass curve formula\n * @returns y²\n */\n function weierstrassEquation(x) {\n const { a, b } = CURVE;\n const x2 = Fp.sqr(x); // x * x\n const x3 = Fp.mul(x2, x); // x2 * x\n return Fp.add(Fp.add(x3, Fp.mul(x, a)), b); // x3 + a * x + b\n }\n // Validate whether the passed curve params are valid.\n // We check if curve equation works for generator point.\n // `assertValidity()` won't work: `isTorsionFree()` is not available at this point in bls12-381.\n // ProjectivePoint class has not been initialized yet.\n if (!Fp.eql(Fp.sqr(CURVE.Gy), weierstrassEquation(CURVE.Gx)))\n throw new Error('bad generator point: equation left != right');\n // Valid group elements reside in range 1..n-1\n function isWithinCurveOrder(num) {\n return typeof num === 'bigint' && _0n < num && num < CURVE.n;\n }\n function assertGE(num) {\n if (!isWithinCurveOrder(num))\n throw new Error('Expected valid bigint: 0 < bigint < curve.n');\n }\n // Validates if priv key is valid and converts it to bigint.\n // Supports options allowedPrivateKeyLengths and wrapPrivateKey.\n function normPrivateKeyToScalar(key) {\n const { allowedPrivateKeyLengths: lengths, nByteLength, wrapPrivateKey, n } = CURVE;\n if (lengths && typeof key !== 'bigint') {\n if (key instanceof Uint8Array)\n key = ut.bytesToHex(key);\n // Normalize to hex string, pad. E.g. P521 would norm 130-132 char hex to 132-char bytes\n if (typeof key !== 'string' || !lengths.includes(key.length))\n throw new Error('Invalid key');\n key = key.padStart(nByteLength * 2, '0');\n }\n let num;\n try {\n num =\n typeof key === 'bigint'\n ? key\n : ut.bytesToNumberBE(ensureBytes('private key', key, nByteLength));\n }\n catch (error) {\n throw new Error(`private key must be ${nByteLength} bytes, hex or bigint, not ${typeof key}`);\n }\n if (wrapPrivateKey)\n num = mod.mod(num, n); // disabled by default, enabled for BLS\n assertGE(num); // num in range [1..N-1]\n return num;\n }\n const pointPrecomputes = new Map();\n function assertPrjPoint(other) {\n if (!(other instanceof Point))\n throw new Error('ProjectivePoint expected');\n }\n /**\n * Projective Point works in 3d / projective (homogeneous) coordinates: (x, y, z) ∋ (x=x/z, y=y/z)\n * Default Point works in 2d / affine coordinates: (x, y)\n * We're doing calculations in projective, because its operations don't require costly inversion.\n */\n class Point {\n constructor(px, py, pz) {\n this.px = px;\n this.py = py;\n this.pz = pz;\n if (px == null || !Fp.isValid(px))\n throw new Error('x required');\n if (py == null || !Fp.isValid(py))\n throw new Error('y required');\n if (pz == null || !Fp.isValid(pz))\n throw new Error('z required');\n }\n // Does not validate if the point is on-curve.\n // Use fromHex instead, or call assertValidity() later.\n static fromAffine(p) {\n const { x, y } = p || {};\n if (!p || !Fp.isValid(x) || !Fp.isValid(y))\n throw new Error('invalid affine point');\n if (p instanceof Point)\n throw new Error('projective point not allowed');\n const is0 = (i) => Fp.eql(i, Fp.ZERO);\n // fromAffine(x:0, y:0) would produce (x:0, y:0, z:1), but we need (x:0, y:1, z:0)\n if (is0(x) && is0(y))\n return Point.ZERO;\n return new Point(x, y, Fp.ONE);\n }\n get x() {\n return this.toAffine().x;\n }\n get y() {\n return this.toAffine().y;\n }\n /**\n * Takes a bunch of Projective Points but executes only one\n * inversion on all of them. Inversion is very slow operation,\n * so this improves performance massively.\n * Optimization: converts a list of projective points to a list of identical points with Z=1.\n */\n static normalizeZ(points) {\n const toInv = Fp.invertBatch(points.map((p) => p.pz));\n return points.map((p, i) => p.toAffine(toInv[i])).map(Point.fromAffine);\n }\n /**\n * Converts hash string or Uint8Array to Point.\n * @param hex short/long ECDSA hex\n */\n static fromHex(hex) {\n const P = Point.fromAffine(fromBytes(ensureBytes('pointHex', hex)));\n P.assertValidity();\n return P;\n }\n // Multiplies generator point by privateKey.\n static fromPrivateKey(privateKey) {\n return Point.BASE.multiply(normPrivateKeyToScalar(privateKey));\n }\n // \"Private method\", don't use it directly\n _setWindowSize(windowSize) {\n this._WINDOW_SIZE = windowSize;\n pointPrecomputes.delete(this);\n }\n // A point on curve is valid if it conforms to equation.\n assertValidity() {\n if (this.is0()) {\n // (0, 1, 0) aka ZERO is invalid in most contexts.\n // In BLS, ZERO can be serialized, so we allow it.\n // (0, 0, 0) is wrong representation of ZERO and is always invalid.\n if (CURVE.allowInfinityPoint && !Fp.is0(this.py))\n return;\n throw new Error('bad point: ZERO');\n }\n // Some 3rd-party test vectors require different wording between here & `fromCompressedHex`\n const { x, y } = this.toAffine();\n // Check if x, y are valid field elements\n if (!Fp.isValid(x) || !Fp.isValid(y))\n throw new Error('bad point: x or y not FE');\n const left = Fp.sqr(y); // y²\n const right = weierstrassEquation(x); // x³ + ax + b\n if (!Fp.eql(left, right))\n throw new Error('bad point: equation left != right');\n if (!this.isTorsionFree())\n throw new Error('bad point: not in prime-order subgroup');\n }\n hasEvenY() {\n const { y } = this.toAffine();\n if (Fp.isOdd)\n return !Fp.isOdd(y);\n throw new Error(\"Field doesn't support isOdd\");\n }\n /**\n * Compare one point to another.\n */\n equals(other) {\n assertPrjPoint(other);\n const { px: X1, py: Y1, pz: Z1 } = this;\n const { px: X2, py: Y2, pz: Z2 } = other;\n const U1 = Fp.eql(Fp.mul(X1, Z2), Fp.mul(X2, Z1));\n const U2 = Fp.eql(Fp.mul(Y1, Z2), Fp.mul(Y2, Z1));\n return U1 && U2;\n }\n /**\n * Flips point to one corresponding to (x, -y) in Affine coordinates.\n */\n negate() {\n return new Point(this.px, Fp.neg(this.py), this.pz);\n }\n // Renes-Costello-Batina exception-free doubling formula.\n // There is 30% faster Jacobian formula, but it is not complete.\n // https://eprint.iacr.org/2015/1060, algorithm 3\n // Cost: 8M + 3S + 3*a + 2*b3 + 15add.\n double() {\n const { a, b } = CURVE;\n const b3 = Fp.mul(b, _3n);\n const { px: X1, py: Y1, pz: Z1 } = this;\n let X3 = Fp.ZERO, Y3 = Fp.ZERO, Z3 = Fp.ZERO; // prettier-ignore\n let t0 = Fp.mul(X1, X1); // step 1\n let t1 = Fp.mul(Y1, Y1);\n let t2 = Fp.mul(Z1, Z1);\n let t3 = Fp.mul(X1, Y1);\n t3 = Fp.add(t3, t3); // step 5\n Z3 = Fp.mul(X1, Z1);\n Z3 = Fp.add(Z3, Z3);\n X3 = Fp.mul(a, Z3);\n Y3 = Fp.mul(b3, t2);\n Y3 = Fp.add(X3, Y3); // step 10\n X3 = Fp.sub(t1, Y3);\n Y3 = Fp.add(t1, Y3);\n Y3 = Fp.mul(X3, Y3);\n X3 = Fp.mul(t3, X3);\n Z3 = Fp.mul(b3, Z3); // step 15\n t2 = Fp.mul(a, t2);\n t3 = Fp.sub(t0, t2);\n t3 = Fp.mul(a, t3);\n t3 = Fp.add(t3, Z3);\n Z3 = Fp.add(t0, t0); // step 20\n t0 = Fp.add(Z3, t0);\n t0 = Fp.add(t0, t2);\n t0 = Fp.mul(t0, t3);\n Y3 = Fp.add(Y3, t0);\n t2 = Fp.mul(Y1, Z1); // step 25\n t2 = Fp.add(t2, t2);\n t0 = Fp.mul(t2, t3);\n X3 = Fp.sub(X3, t0);\n Z3 = Fp.mul(t2, t1);\n Z3 = Fp.add(Z3, Z3); // step 30\n Z3 = Fp.add(Z3, Z3);\n return new Point(X3, Y3, Z3);\n }\n // Renes-Costello-Batina exception-free addition formula.\n // There is 30% faster Jacobian formula, but it is not complete.\n // https://eprint.iacr.org/2015/1060, algorithm 1\n // Cost: 12M + 0S + 3*a + 3*b3 + 23add.\n add(other) {\n assertPrjPoint(other);\n const { px: X1, py: Y1, pz: Z1 } = this;\n const { px: X2, py: Y2, pz: Z2 } = other;\n let X3 = Fp.ZERO, Y3 = Fp.ZERO, Z3 = Fp.ZERO; // prettier-ignore\n const a = CURVE.a;\n const b3 = Fp.mul(CURVE.b, _3n);\n let t0 = Fp.mul(X1, X2); // step 1\n let t1 = Fp.mul(Y1, Y2);\n let t2 = Fp.mul(Z1, Z2);\n let t3 = Fp.add(X1, Y1);\n let t4 = Fp.add(X2, Y2); // step 5\n t3 = Fp.mul(t3, t4);\n t4 = Fp.add(t0, t1);\n t3 = Fp.sub(t3, t4);\n t4 = Fp.add(X1, Z1);\n let t5 = Fp.add(X2, Z2); // step 10\n t4 = Fp.mul(t4, t5);\n t5 = Fp.add(t0, t2);\n t4 = Fp.sub(t4, t5);\n t5 = Fp.add(Y1, Z1);\n X3 = Fp.add(Y2, Z2); // step 15\n t5 = Fp.mul(t5, X3);\n X3 = Fp.add(t1, t2);\n t5 = Fp.sub(t5, X3);\n Z3 = Fp.mul(a, t4);\n X3 = Fp.mul(b3, t2); // step 20\n Z3 = Fp.add(X3, Z3);\n X3 = Fp.sub(t1, Z3);\n Z3 = Fp.add(t1, Z3);\n Y3 = Fp.mul(X3, Z3);\n t1 = Fp.add(t0, t0); // step 25\n t1 = Fp.add(t1, t0);\n t2 = Fp.mul(a, t2);\n t4 = Fp.mul(b3, t4);\n t1 = Fp.add(t1, t2);\n t2 = Fp.sub(t0, t2); // step 30\n t2 = Fp.mul(a, t2);\n t4 = Fp.add(t4, t2);\n t0 = Fp.mul(t1, t4);\n Y3 = Fp.add(Y3, t0);\n t0 = Fp.mul(t5, t4); // step 35\n X3 = Fp.mul(t3, X3);\n X3 = Fp.sub(X3, t0);\n t0 = Fp.mul(t3, t1);\n Z3 = Fp.mul(t5, Z3);\n Z3 = Fp.add(Z3, t0); // step 40\n return new Point(X3, Y3, Z3);\n }\n subtract(other) {\n return this.add(other.negate());\n }\n is0() {\n return this.equals(Point.ZERO);\n }\n wNAF(n) {\n return wnaf.wNAFCached(this, pointPrecomputes, n, (comp) => {\n const toInv = Fp.invertBatch(comp.map((p) => p.pz));\n return comp.map((p, i) => p.toAffine(toInv[i])).map(Point.fromAffine);\n });\n }\n /**\n * Non-constant-time multiplication. Uses double-and-add algorithm.\n * It's faster, but should only be used when you don't care about\n * an exposed private key e.g. sig verification, which works over *public* keys.\n */\n multiplyUnsafe(n) {\n const I = Point.ZERO;\n if (n === _0n)\n return I;\n assertGE(n); // Will throw on 0\n if (n === _1n)\n return this;\n const { endo } = CURVE;\n if (!endo)\n return wnaf.unsafeLadder(this, n);\n // Apply endomorphism\n let { k1neg, k1, k2neg, k2 } = endo.splitScalar(n);\n let k1p = I;\n let k2p = I;\n let d = this;\n while (k1 > _0n || k2 > _0n) {\n if (k1 & _1n)\n k1p = k1p.add(d);\n if (k2 & _1n)\n k2p = k2p.add(d);\n d = d.double();\n k1 >>= _1n;\n k2 >>= _1n;\n }\n if (k1neg)\n k1p = k1p.negate();\n if (k2neg)\n k2p = k2p.negate();\n k2p = new Point(Fp.mul(k2p.px, endo.beta), k2p.py, k2p.pz);\n return k1p.add(k2p);\n }\n /**\n * Constant time multiplication.\n * Uses wNAF method. Windowed method may be 10% faster,\n * but takes 2x longer to generate and consumes 2x memory.\n * Uses precomputes when available.\n * Uses endomorphism for Koblitz curves.\n * @param scalar by which the point would be multiplied\n * @returns New point\n */\n multiply(scalar) {\n assertGE(scalar);\n let n = scalar;\n let point, fake; // Fake point is used to const-time mult\n const { endo } = CURVE;\n if (endo) {\n const { k1neg, k1, k2neg, k2 } = endo.splitScalar(n);\n let { p: k1p, f: f1p } = this.wNAF(k1);\n let { p: k2p, f: f2p } = this.wNAF(k2);\n k1p = wnaf.constTimeNegate(k1neg, k1p);\n k2p = wnaf.constTimeNegate(k2neg, k2p);\n k2p = new Point(Fp.mul(k2p.px, endo.beta), k2p.py, k2p.pz);\n point = k1p.add(k2p);\n fake = f1p.add(f2p);\n }\n else {\n const { p, f } = this.wNAF(n);\n point = p;\n fake = f;\n }\n // Normalize `z` for both points, but return only real one\n return Point.normalizeZ([point, fake])[0];\n }\n /**\n * Efficiently calculate `aP + bQ`. Unsafe, can expose private key, if used incorrectly.\n * Not using Strauss-Shamir trick: precomputation tables are faster.\n * The trick could be useful if both P and Q are not G (not in our case).\n * @returns non-zero affine point\n */\n multiplyAndAddUnsafe(Q, a, b) {\n const G = Point.BASE; // No Strauss-Shamir trick: we have 10% faster G precomputes\n const mul = (P, a // Select faster multiply() method\n ) => (a === _0n || a === _1n || !P.equals(G) ? P.multiplyUnsafe(a) : P.multiply(a));\n const sum = mul(this, a).add(mul(Q, b));\n return sum.is0() ? undefined : sum;\n }\n // Converts Projective point to affine (x, y) coordinates.\n // Can accept precomputed Z^-1 - for example, from invertBatch.\n // (x, y, z) ∋ (x=x/z, y=y/z)\n toAffine(iz) {\n const { px: x, py: y, pz: z } = this;\n const is0 = this.is0();\n // If invZ was 0, we return zero point. However we still want to execute\n // all operations, so we replace invZ with a random number, 1.\n if (iz == null)\n iz = is0 ? Fp.ONE : Fp.inv(z);\n const ax = Fp.mul(x, iz);\n const ay = Fp.mul(y, iz);\n const zz = Fp.mul(z, iz);\n if (is0)\n return { x: Fp.ZERO, y: Fp.ZERO };\n if (!Fp.eql(zz, Fp.ONE))\n throw new Error('invZ was invalid');\n return { x: ax, y: ay };\n }\n isTorsionFree() {\n const { h: cofactor, isTorsionFree } = CURVE;\n if (cofactor === _1n)\n return true; // No subgroups, always torsion-free\n if (isTorsionFree)\n return isTorsionFree(Point, this);\n throw new Error('isTorsionFree() has not been declared for the elliptic curve');\n }\n clearCofactor() {\n const { h: cofactor, clearCofactor } = CURVE;\n if (cofactor === _1n)\n return this; // Fast-path\n if (clearCofactor)\n return clearCofactor(Point, this);\n return this.multiplyUnsafe(CURVE.h);\n }\n toRawBytes(isCompressed = true) {\n this.assertValidity();\n return toBytes(Point, this, isCompressed);\n }\n toHex(isCompressed = true) {\n return ut.bytesToHex(this.toRawBytes(isCompressed));\n }\n }\n Point.BASE = new Point(CURVE.Gx, CURVE.Gy, Fp.ONE);\n Point.ZERO = new Point(Fp.ZERO, Fp.ONE, Fp.ZERO);\n const _bits = CURVE.nBitLength;\n const wnaf = wNAF(Point, CURVE.endo ? Math.ceil(_bits / 2) : _bits);\n // Validate if generator point is on curve\n return {\n CURVE,\n ProjectivePoint: Point,\n normPrivateKeyToScalar,\n weierstrassEquation,\n isWithinCurveOrder,\n };\n}\nfunction validateOpts(curve) {\n const opts = validateBasic(curve);\n ut.validateObject(opts, {\n hash: 'hash',\n hmac: 'function',\n randomBytes: 'function',\n }, {\n bits2int: 'function',\n bits2int_modN: 'function',\n lowS: 'boolean',\n });\n return Object.freeze({ lowS: true, ...opts });\n}\nexport function weierstrass(curveDef) {\n const CURVE = validateOpts(curveDef);\n const { Fp, n: CURVE_ORDER } = CURVE;\n const compressedLen = Fp.BYTES + 1; // e.g. 33 for 32\n const uncompressedLen = 2 * Fp.BYTES + 1; // e.g. 65 for 32\n function isValidFieldElement(num) {\n return _0n < num && num < Fp.ORDER; // 0 is banned since it's not invertible FE\n }\n function modN(a) {\n return mod.mod(a, CURVE_ORDER);\n }\n function invN(a) {\n return mod.invert(a, CURVE_ORDER);\n }\n const { ProjectivePoint: Point, normPrivateKeyToScalar, weierstrassEquation, isWithinCurveOrder, } = weierstrassPoints({\n ...CURVE,\n toBytes(_c, point, isCompressed) {\n const a = point.toAffine();\n const x = Fp.toBytes(a.x);\n const cat = ut.concatBytes;\n if (isCompressed) {\n return cat(Uint8Array.from([point.hasEvenY() ? 0x02 : 0x03]), x);\n }\n else {\n return cat(Uint8Array.from([0x04]), x, Fp.toBytes(a.y));\n }\n },\n fromBytes(bytes) {\n const len = bytes.length;\n const head = bytes[0];\n const tail = bytes.subarray(1);\n // this.assertValidity() is done inside of fromHex\n if (len === compressedLen && (head === 0x02 || head === 0x03)) {\n const x = ut.bytesToNumberBE(tail);\n if (!isValidFieldElement(x))\n throw new Error('Point is not on curve');\n const y2 = weierstrassEquation(x); // y² = x³ + ax + b\n let y = Fp.sqrt(y2); // y = y² ^ (p+1)/4\n const isYOdd = (y & _1n) === _1n;\n // ECDSA\n const isHeadOdd = (head & 1) === 1;\n if (isHeadOdd !== isYOdd)\n y = Fp.neg(y);\n return { x, y };\n }\n else if (len === uncompressedLen && head === 0x04) {\n const x = Fp.fromBytes(tail.subarray(0, Fp.BYTES));\n const y = Fp.fromBytes(tail.subarray(Fp.BYTES, 2 * Fp.BYTES));\n return { x, y };\n }\n else {\n throw new Error(`Point of length ${len} was invalid. Expected ${compressedLen} compressed bytes or ${uncompressedLen} uncompressed bytes`);\n }\n },\n });\n const numToNByteStr = (num) => ut.bytesToHex(ut.numberToBytesBE(num, CURVE.nByteLength));\n function isBiggerThanHalfOrder(number) {\n const HALF = CURVE_ORDER >> _1n;\n return number > HALF;\n }\n function normalizeS(s) {\n return isBiggerThanHalfOrder(s) ? modN(-s) : s;\n }\n // slice bytes num\n const slcNum = (b, from, to) => ut.bytesToNumberBE(b.slice(from, to));\n /**\n * ECDSA signature with its (r, s) properties. Supports DER & compact representations.\n */\n class Signature {\n constructor(r, s, recovery) {\n this.r = r;\n this.s = s;\n this.recovery = recovery;\n this.assertValidity();\n }\n // pair (bytes of r, bytes of s)\n static fromCompact(hex) {\n const l = CURVE.nByteLength;\n hex = ensureBytes('compactSignature', hex, l * 2);\n return new Signature(slcNum(hex, 0, l), slcNum(hex, l, 2 * l));\n }\n // DER encoded ECDSA signature\n // https://bitcoin.stackexchange.com/questions/57644/what-are-the-parts-of-a-bitcoin-transaction-input-script\n static fromDER(hex) {\n const { r, s } = DER.toSig(ensureBytes('DER', hex));\n return new Signature(r, s);\n }\n assertValidity() {\n // can use assertGE here\n if (!isWithinCurveOrder(this.r))\n throw new Error('r must be 0 < r < CURVE.n');\n if (!isWithinCurveOrder(this.s))\n throw new Error('s must be 0 < s < CURVE.n');\n }\n addRecoveryBit(recovery) {\n return new Signature(this.r, this.s, recovery);\n }\n recoverPublicKey(msgHash) {\n const { r, s, recovery: rec } = this;\n const h = bits2int_modN(ensureBytes('msgHash', msgHash)); // Truncate hash\n if (rec == null || ![0, 1, 2, 3].includes(rec))\n throw new Error('recovery id invalid');\n const radj = rec === 2 || rec === 3 ? r + CURVE.n : r;\n if (radj >= Fp.ORDER)\n throw new Error('recovery id 2 or 3 invalid');\n const prefix = (rec & 1) === 0 ? '02' : '03';\n const R = Point.fromHex(prefix + numToNByteStr(radj));\n const ir = invN(radj); // r^-1\n const u1 = modN(-h * ir); // -hr^-1\n const u2 = modN(s * ir); // sr^-1\n const Q = Point.BASE.multiplyAndAddUnsafe(R, u1, u2); // (sr^-1)R-(hr^-1)G = -(hr^-1)G + (sr^-1)\n if (!Q)\n throw new Error('point at infinify'); // unsafe is fine: no priv data leaked\n Q.assertValidity();\n return Q;\n }\n // Signatures should be low-s, to prevent malleability.\n hasHighS() {\n return isBiggerThanHalfOrder(this.s);\n }\n normalizeS() {\n return this.hasHighS() ? new Signature(this.r, modN(-this.s), this.recovery) : this;\n }\n // DER-encoded\n toDERRawBytes() {\n return ut.hexToBytes(this.toDERHex());\n }\n toDERHex() {\n return DER.hexFromSig({ r: this.r, s: this.s });\n }\n // padded bytes of r, then padded bytes of s\n toCompactRawBytes() {\n return ut.hexToBytes(this.toCompactHex());\n }\n toCompactHex() {\n return numToNByteStr(this.r) + numToNByteStr(this.s);\n }\n }\n const utils = {\n isValidPrivateKey(privateKey) {\n try {\n normPrivateKeyToScalar(privateKey);\n return true;\n }\n catch (error) {\n return false;\n }\n },\n normPrivateKeyToScalar: normPrivateKeyToScalar,\n /**\n * Produces cryptographically secure private key from random of size\n * (groupLen + ceil(groupLen / 2)) with modulo bias being negligible.\n */\n randomPrivateKey: () => {\n const length = mod.getMinHashLength(CURVE.n);\n return mod.mapHashToField(CURVE.randomBytes(length), CURVE.n);\n },\n /**\n * Creates precompute table for an arbitrary EC point. Makes point \"cached\".\n * Allows to massively speed-up `point.multiply(scalar)`.\n * @returns cached point\n * @example\n * const fast = utils.precompute(8, ProjectivePoint.fromHex(someonesPubKey));\n * fast.multiply(privKey); // much faster ECDH now\n */\n precompute(windowSize = 8, point = Point.BASE) {\n point._setWindowSize(windowSize);\n point.multiply(BigInt(3)); // 3 is arbitrary, just need any number here\n return point;\n },\n };\n /**\n * Computes public key for a private key. Checks for validity of the private key.\n * @param privateKey private key\n * @param isCompressed whether to return compact (default), or full key\n * @returns Public key, full when isCompressed=false; short when isCompressed=true\n */\n function getPublicKey(privateKey, isCompressed = true) {\n return Point.fromPrivateKey(privateKey).toRawBytes(isCompressed);\n }\n /**\n * Quick and dirty check for item being public key. Does not validate hex, or being on-curve.\n */\n function isProbPub(item) {\n const arr = item instanceof Uint8Array;\n const str = typeof item === 'string';\n const len = (arr || str) && item.length;\n if (arr)\n return len === compressedLen || len === uncompressedLen;\n if (str)\n return len === 2 * compressedLen || len === 2 * uncompressedLen;\n if (item instanceof Point)\n return true;\n return false;\n }\n /**\n * ECDH (Elliptic Curve Diffie Hellman).\n * Computes shared public key from private key and public key.\n * Checks: 1) private key validity 2) shared key is on-curve.\n * Does NOT hash the result.\n * @param privateA private key\n * @param publicB different public key\n * @param isCompressed whether to return compact (default), or full key\n * @returns shared public key\n */\n function getSharedSecret(privateA, publicB, isCompressed = true) {\n if (isProbPub(privateA))\n throw new Error('first arg must be private key');\n if (!isProbPub(publicB))\n throw new Error('second arg must be public key');\n const b = Point.fromHex(publicB); // check for being on-curve\n return b.multiply(normPrivateKeyToScalar(privateA)).toRawBytes(isCompressed);\n }\n // RFC6979: ensure ECDSA msg is X bytes and < N. RFC suggests optional truncating via bits2octets.\n // FIPS 186-4 4.6 suggests the leftmost min(nBitLen, outLen) bits, which matches bits2int.\n // bits2int can produce res>N, we can do mod(res, N) since the bitLen is the same.\n // int2octets can't be used; pads small msgs with 0: unacceptatble for trunc as per RFC vectors\n const bits2int = CURVE.bits2int ||\n function (bytes) {\n // For curves with nBitLength % 8 !== 0: bits2octets(bits2octets(m)) !== bits2octets(m)\n // for some cases, since bytes.length * 8 is not actual bitLength.\n const num = ut.bytesToNumberBE(bytes); // check for == u8 done here\n const delta = bytes.length * 8 - CURVE.nBitLength; // truncate to nBitLength leftmost bits\n return delta > 0 ? num >> BigInt(delta) : num;\n };\n const bits2int_modN = CURVE.bits2int_modN ||\n function (bytes) {\n return modN(bits2int(bytes)); // can't use bytesToNumberBE here\n };\n // NOTE: pads output with zero as per spec\n const ORDER_MASK = ut.bitMask(CURVE.nBitLength);\n /**\n * Converts to bytes. Checks if num in `[0..ORDER_MASK-1]` e.g.: `[0..2^256-1]`.\n */\n function int2octets(num) {\n if (typeof num !== 'bigint')\n throw new Error('bigint expected');\n if (!(_0n <= num && num < ORDER_MASK))\n throw new Error(`bigint expected < 2^${CURVE.nBitLength}`);\n // works with order, can have different size than numToField!\n return ut.numberToBytesBE(num, CURVE.nByteLength);\n }\n // Steps A, D of RFC6979 3.2\n // Creates RFC6979 seed; converts msg/privKey to numbers.\n // Used only in sign, not in verify.\n // NOTE: we cannot assume here that msgHash has same amount of bytes as curve order, this will be wrong at least for P521.\n // Also it can be bigger for P224 + SHA256\n function prepSig(msgHash, privateKey, opts = defaultSigOpts) {\n if (['recovered', 'canonical'].some((k) => k in opts))\n throw new Error('sign() legacy options not supported');\n const { hash, randomBytes } = CURVE;\n let { lowS, prehash, extraEntropy: ent } = opts; // generates low-s sigs by default\n if (lowS == null)\n lowS = true; // RFC6979 3.2: we skip step A, because we already provide hash\n msgHash = ensureBytes('msgHash', msgHash);\n if (prehash)\n msgHash = ensureBytes('prehashed msgHash', hash(msgHash));\n // We can't later call bits2octets, since nested bits2int is broken for curves\n // with nBitLength % 8 !== 0. Because of that, we unwrap it here as int2octets call.\n // const bits2octets = (bits) => int2octets(bits2int_modN(bits))\n const h1int = bits2int_modN(msgHash);\n const d = normPrivateKeyToScalar(privateKey); // validate private key, convert to bigint\n const seedArgs = [int2octets(d), int2octets(h1int)];\n // extraEntropy. RFC6979 3.6: additional k' (optional).\n if (ent != null) {\n // K = HMAC_K(V || 0x00 || int2octets(x) || bits2octets(h1) || k')\n const e = ent === true ? randomBytes(Fp.BYTES) : ent; // generate random bytes OR pass as-is\n seedArgs.push(ensureBytes('extraEntropy', e)); // check for being bytes\n }\n const seed = ut.concatBytes(...seedArgs); // Step D of RFC6979 3.2\n const m = h1int; // NOTE: no need to call bits2int second time here, it is inside truncateHash!\n // Converts signature params into point w r/s, checks result for validity.\n function k2sig(kBytes) {\n // RFC 6979 Section 3.2, step 3: k = bits2int(T)\n const k = bits2int(kBytes); // Cannot use fields methods, since it is group element\n if (!isWithinCurveOrder(k))\n return; // Important: all mod() calls here must be done over N\n const ik = invN(k); // k^-1 mod n\n const q = Point.BASE.multiply(k).toAffine(); // q = Gk\n const r = modN(q.x); // r = q.x mod n\n if (r === _0n)\n return;\n // Can use scalar blinding b^-1(bm + bdr) where b ∈ [1,q−1] according to\n // https://tches.iacr.org/index.php/TCHES/article/view/7337/6509. We've decided against it:\n // a) dependency on CSPRNG b) 15% slowdown c) doesn't really help since bigints are not CT\n const s = modN(ik * modN(m + r * d)); // Not using blinding here\n if (s === _0n)\n return;\n let recovery = (q.x === r ? 0 : 2) | Number(q.y & _1n); // recovery bit (2 or 3, when q.x > n)\n let normS = s;\n if (lowS && isBiggerThanHalfOrder(s)) {\n normS = normalizeS(s); // if lowS was passed, ensure s is always\n recovery ^= 1; // // in the bottom half of N\n }\n return new Signature(r, normS, recovery); // use normS, not s\n }\n return { seed, k2sig };\n }\n const defaultSigOpts = { lowS: CURVE.lowS, prehash: false };\n const defaultVerOpts = { lowS: CURVE.lowS, prehash: false };\n /**\n * Signs message hash with a private key.\n * ```\n * sign(m, d, k) where\n * (x, y) = G × k\n * r = x mod n\n * s = (m + dr)/k mod n\n * ```\n * @param msgHash NOT message. msg needs to be hashed to `msgHash`, or use `prehash`.\n * @param privKey private key\n * @param opts lowS for non-malleable sigs. extraEntropy for mixing randomness into k. prehash will hash first arg.\n * @returns signature with recovery param\n */\n function sign(msgHash, privKey, opts = defaultSigOpts) {\n const { seed, k2sig } = prepSig(msgHash, privKey, opts); // Steps A, D of RFC6979 3.2.\n const C = CURVE;\n const drbg = ut.createHmacDrbg(C.hash.outputLen, C.nByteLength, C.hmac);\n return drbg(seed, k2sig); // Steps B, C, D, E, F, G\n }\n // Enable precomputes. Slows down first publicKey computation by 20ms.\n Point.BASE._setWindowSize(8);\n // utils.precompute(8, ProjectivePoint.BASE)\n /**\n * Verifies a signature against message hash and public key.\n * Rejects lowS signatures by default: to override,\n * specify option `{lowS: false}`. Implements section 4.1.4 from https://www.secg.org/sec1-v2.pdf:\n *\n * ```\n * verify(r, s, h, P) where\n * U1 = hs^-1 mod n\n * U2 = rs^-1 mod n\n * R = U1⋅G - U2⋅P\n * mod(R.x, n) == r\n * ```\n */\n function verify(signature, msgHash, publicKey, opts = defaultVerOpts) {\n const sg = signature;\n msgHash = ensureBytes('msgHash', msgHash);\n publicKey = ensureBytes('publicKey', publicKey);\n if ('strict' in opts)\n throw new Error('options.strict was renamed to lowS');\n const { lowS, prehash } = opts;\n let _sig = undefined;\n let P;\n try {\n if (typeof sg === 'string' || sg instanceof Uint8Array) {\n // Signature can be represented in 2 ways: compact (2*nByteLength) & DER (variable-length).\n // Since DER can also be 2*nByteLength bytes, we check for it first.\n try {\n _sig = Signature.fromDER(sg);\n }\n catch (derError) {\n if (!(derError instanceof DER.Err))\n throw derError;\n _sig = Signature.fromCompact(sg);\n }\n }\n else if (typeof sg === 'object' && typeof sg.r === 'bigint' && typeof sg.s === 'bigint') {\n const { r, s } = sg;\n _sig = new Signature(r, s);\n }\n else {\n throw new Error('PARSE');\n }\n P = Point.fromHex(publicKey);\n }\n catch (error) {\n if (error.message === 'PARSE')\n throw new Error(`signature must be Signature instance, Uint8Array or hex string`);\n return false;\n }\n if (lowS && _sig.hasHighS())\n return false;\n if (prehash)\n msgHash = CURVE.hash(msgHash);\n const { r, s } = _sig;\n const h = bits2int_modN(msgHash); // Cannot use fields methods, since it is group element\n const is = invN(s); // s^-1\n const u1 = modN(h * is); // u1 = hs^-1 mod n\n const u2 = modN(r * is); // u2 = rs^-1 mod n\n const R = Point.BASE.multiplyAndAddUnsafe(P, u1, u2)?.toAffine(); // R = u1⋅G + u2⋅P\n if (!R)\n return false;\n const v = modN(R.x);\n return v === r;\n }\n return {\n CURVE,\n getPublicKey,\n getSharedSecret,\n sign,\n verify,\n ProjectivePoint: Point,\n Signature,\n utils,\n };\n}\n/**\n * Implementation of the Shallue and van de Woestijne method for any weierstrass curve.\n * TODO: check if there is a way to merge this with uvRatio in Edwards; move to modular.\n * b = True and y = sqrt(u / v) if (u / v) is square in F, and\n * b = False and y = sqrt(Z * (u / v)) otherwise.\n * @param Fp\n * @param Z\n * @returns\n */\nexport function SWUFpSqrtRatio(Fp, Z) {\n // Generic implementation\n const q = Fp.ORDER;\n let l = _0n;\n for (let o = q - _1n; o % _2n === _0n; o /= _2n)\n l += _1n;\n const c1 = l; // 1. c1, the largest integer such that 2^c1 divides q - 1.\n // We need 2n ** c1 and 2n ** (c1-1). We can't use **; but we can use <<.\n // 2n ** c1 == 2n << (c1-1)\n const _2n_pow_c1_1 = _2n << (c1 - _1n - _1n);\n const _2n_pow_c1 = _2n_pow_c1_1 * _2n;\n const c2 = (q - _1n) / _2n_pow_c1; // 2. c2 = (q - 1) / (2^c1) # Integer arithmetic\n const c3 = (c2 - _1n) / _2n; // 3. c3 = (c2 - 1) / 2 # Integer arithmetic\n const c4 = _2n_pow_c1 - _1n; // 4. c4 = 2^c1 - 1 # Integer arithmetic\n const c5 = _2n_pow_c1_1; // 5. c5 = 2^(c1 - 1) # Integer arithmetic\n const c6 = Fp.pow(Z, c2); // 6. c6 = Z^c2\n const c7 = Fp.pow(Z, (c2 + _1n) / _2n); // 7. c7 = Z^((c2 + 1) / 2)\n let sqrtRatio = (u, v) => {\n let tv1 = c6; // 1. tv1 = c6\n let tv2 = Fp.pow(v, c4); // 2. tv2 = v^c4\n let tv3 = Fp.sqr(tv2); // 3. tv3 = tv2^2\n tv3 = Fp.mul(tv3, v); // 4. tv3 = tv3 * v\n let tv5 = Fp.mul(u, tv3); // 5. tv5 = u * tv3\n tv5 = Fp.pow(tv5, c3); // 6. tv5 = tv5^c3\n tv5 = Fp.mul(tv5, tv2); // 7. tv5 = tv5 * tv2\n tv2 = Fp.mul(tv5, v); // 8. tv2 = tv5 * v\n tv3 = Fp.mul(tv5, u); // 9. tv3 = tv5 * u\n let tv4 = Fp.mul(tv3, tv2); // 10. tv4 = tv3 * tv2\n tv5 = Fp.pow(tv4, c5); // 11. tv5 = tv4^c5\n let isQR = Fp.eql(tv5, Fp.ONE); // 12. isQR = tv5 == 1\n tv2 = Fp.mul(tv3, c7); // 13. tv2 = tv3 * c7\n tv5 = Fp.mul(tv4, tv1); // 14. tv5 = tv4 * tv1\n tv3 = Fp.cmov(tv2, tv3, isQR); // 15. tv3 = CMOV(tv2, tv3, isQR)\n tv4 = Fp.cmov(tv5, tv4, isQR); // 16. tv4 = CMOV(tv5, tv4, isQR)\n // 17. for i in (c1, c1 - 1, ..., 2):\n for (let i = c1; i > _1n; i--) {\n let tv5 = i - _2n; // 18. tv5 = i - 2\n tv5 = _2n << (tv5 - _1n); // 19. tv5 = 2^tv5\n let tvv5 = Fp.pow(tv4, tv5); // 20. tv5 = tv4^tv5\n const e1 = Fp.eql(tvv5, Fp.ONE); // 21. e1 = tv5 == 1\n tv2 = Fp.mul(tv3, tv1); // 22. tv2 = tv3 * tv1\n tv1 = Fp.mul(tv1, tv1); // 23. tv1 = tv1 * tv1\n tvv5 = Fp.mul(tv4, tv1); // 24. tv5 = tv4 * tv1\n tv3 = Fp.cmov(tv2, tv3, e1); // 25. tv3 = CMOV(tv2, tv3, e1)\n tv4 = Fp.cmov(tvv5, tv4, e1); // 26. tv4 = CMOV(tv5, tv4, e1)\n }\n return { isValid: isQR, value: tv3 };\n };\n if (Fp.ORDER % _4n === _3n) {\n // sqrt_ratio_3mod4(u, v)\n const c1 = (Fp.ORDER - _3n) / _4n; // 1. c1 = (q - 3) / 4 # Integer arithmetic\n const c2 = Fp.sqrt(Fp.neg(Z)); // 2. c2 = sqrt(-Z)\n sqrtRatio = (u, v) => {\n let tv1 = Fp.sqr(v); // 1. tv1 = v^2\n const tv2 = Fp.mul(u, v); // 2. tv2 = u * v\n tv1 = Fp.mul(tv1, tv2); // 3. tv1 = tv1 * tv2\n let y1 = Fp.pow(tv1, c1); // 4. y1 = tv1^c1\n y1 = Fp.mul(y1, tv2); // 5. y1 = y1 * tv2\n const y2 = Fp.mul(y1, c2); // 6. y2 = y1 * c2\n const tv3 = Fp.mul(Fp.sqr(y1), v); // 7. tv3 = y1^2; 8. tv3 = tv3 * v\n const isQR = Fp.eql(tv3, u); // 9. isQR = tv3 == u\n let y = Fp.cmov(y2, y1, isQR); // 10. y = CMOV(y2, y1, isQR)\n return { isValid: isQR, value: y }; // 11. return (isQR, y) isQR ? y : y*c2\n };\n }\n // No curves uses that\n // if (Fp.ORDER % _8n === _5n) // sqrt_ratio_5mod8\n return sqrtRatio;\n}\n/**\n * Simplified Shallue-van de Woestijne-Ulas Method\n * https://www.rfc-editor.org/rfc/rfc9380#section-6.6.2\n */\nexport function mapToCurveSimpleSWU(Fp, opts) {\n mod.validateField(Fp);\n if (!Fp.isValid(opts.A) || !Fp.isValid(opts.B) || !Fp.isValid(opts.Z))\n throw new Error('mapToCurveSimpleSWU: invalid opts');\n const sqrtRatio = SWUFpSqrtRatio(Fp, opts.Z);\n if (!Fp.isOdd)\n throw new Error('Fp.isOdd is not implemented!');\n // Input: u, an element of F.\n // Output: (x, y), a point on E.\n return (u) => {\n // prettier-ignore\n let tv1, tv2, tv3, tv4, tv5, tv6, x, y;\n tv1 = Fp.sqr(u); // 1. tv1 = u^2\n tv1 = Fp.mul(tv1, opts.Z); // 2. tv1 = Z * tv1\n tv2 = Fp.sqr(tv1); // 3. tv2 = tv1^2\n tv2 = Fp.add(tv2, tv1); // 4. tv2 = tv2 + tv1\n tv3 = Fp.add(tv2, Fp.ONE); // 5. tv3 = tv2 + 1\n tv3 = Fp.mul(tv3, opts.B); // 6. tv3 = B * tv3\n tv4 = Fp.cmov(opts.Z, Fp.neg(tv2), !Fp.eql(tv2, Fp.ZERO)); // 7. tv4 = CMOV(Z, -tv2, tv2 != 0)\n tv4 = Fp.mul(tv4, opts.A); // 8. tv4 = A * tv4\n tv2 = Fp.sqr(tv3); // 9. tv2 = tv3^2\n tv6 = Fp.sqr(tv4); // 10. tv6 = tv4^2\n tv5 = Fp.mul(tv6, opts.A); // 11. tv5 = A * tv6\n tv2 = Fp.add(tv2, tv5); // 12. tv2 = tv2 + tv5\n tv2 = Fp.mul(tv2, tv3); // 13. tv2 = tv2 * tv3\n tv6 = Fp.mul(tv6, tv4); // 14. tv6 = tv6 * tv4\n tv5 = Fp.mul(tv6, opts.B); // 15. tv5 = B * tv6\n tv2 = Fp.add(tv2, tv5); // 16. tv2 = tv2 + tv5\n x = Fp.mul(tv1, tv3); // 17. x = tv1 * tv3\n const { isValid, value } = sqrtRatio(tv2, tv6); // 18. (is_gx1_square, y1) = sqrt_ratio(tv2, tv6)\n y = Fp.mul(tv1, u); // 19. y = tv1 * u -> Z * u^3 * y1\n y = Fp.mul(y, value); // 20. y = y * y1\n x = Fp.cmov(x, tv3, isValid); // 21. x = CMOV(x, tv3, is_gx1_square)\n y = Fp.cmov(y, value, isValid); // 22. y = CMOV(y, y1, is_gx1_square)\n const e1 = Fp.isOdd(u) === Fp.isOdd(y); // 23. e1 = sgn0(u) == sgn0(y)\n y = Fp.cmov(Fp.neg(y), y, e1); // 24. y = CMOV(-y, y, e1)\n x = Fp.div(x, tv4); // 25. x = x / tv4\n return { x, y };\n };\n}\n//# sourceMappingURL=weierstrass.js.map","import { hash as assertHash, bytes as assertBytes, exists as assertExists } from './_assert.js';\nimport { Hash, toBytes } from './utils.js';\n// HMAC (RFC 2104)\nexport class HMAC extends Hash {\n constructor(hash, _key) {\n super();\n this.finished = false;\n this.destroyed = false;\n assertHash(hash);\n const key = toBytes(_key);\n this.iHash = hash.create();\n if (typeof this.iHash.update !== 'function')\n throw new Error('Expected instance of class which extends utils.Hash');\n this.blockLen = this.iHash.blockLen;\n this.outputLen = this.iHash.outputLen;\n const blockLen = this.blockLen;\n const pad = new Uint8Array(blockLen);\n // blockLen can be bigger than outputLen\n pad.set(key.length > blockLen ? hash.create().update(key).digest() : key);\n for (let i = 0; i < pad.length; i++)\n pad[i] ^= 0x36;\n this.iHash.update(pad);\n // By doing update (processing of first block) of outer hash here we can re-use it between multiple calls via clone\n this.oHash = hash.create();\n // Undo internal XOR && apply outer XOR\n for (let i = 0; i < pad.length; i++)\n pad[i] ^= 0x36 ^ 0x5c;\n this.oHash.update(pad);\n pad.fill(0);\n }\n update(buf) {\n assertExists(this);\n this.iHash.update(buf);\n return this;\n }\n digestInto(out) {\n assertExists(this);\n assertBytes(out, this.outputLen);\n this.finished = true;\n this.iHash.digestInto(out);\n this.oHash.update(out);\n this.oHash.digestInto(out);\n this.destroy();\n }\n digest() {\n const out = new Uint8Array(this.oHash.outputLen);\n this.digestInto(out);\n return out;\n }\n _cloneInto(to) {\n // Create new instance without calling constructor since key already in state and we don't know it.\n to || (to = Object.create(Object.getPrototypeOf(this), {}));\n const { oHash, iHash, finished, destroyed, blockLen, outputLen } = this;\n to = to;\n to.finished = finished;\n to.destroyed = destroyed;\n to.blockLen = blockLen;\n to.outputLen = outputLen;\n to.oHash = oHash._cloneInto(to.oHash);\n to.iHash = iHash._cloneInto(to.iHash);\n return to;\n }\n destroy() {\n this.destroyed = true;\n this.oHash.destroy();\n this.iHash.destroy();\n }\n}\n/**\n * HMAC: RFC2104 message authentication code.\n * @param hash - function that would be used e.g. sha256\n * @param key - message key\n * @param message - message data\n */\nexport const hmac = (hash, key, message) => new HMAC(hash, key).update(message).digest();\nhmac.create = (hash, key) => new HMAC(hash, key);\n//# sourceMappingURL=hmac.js.map","/*! noble-curves - MIT License (c) 2022 Paul Miller (paulmillr.com) */\nimport { hmac } from '@noble/hashes/hmac';\nimport { concatBytes, randomBytes } from '@noble/hashes/utils';\nimport { weierstrass } from './abstract/weierstrass.js';\n// connects noble-curves to noble-hashes\nexport function getHash(hash) {\n return {\n hash,\n hmac: (key, ...msgs) => hmac(hash, key, concatBytes(...msgs)),\n randomBytes,\n };\n}\nexport function createCurve(curveDef, defHash) {\n const create = (hash) => weierstrass({ ...curveDef, ...getHash(hash) });\n return Object.freeze({ ...create(defHash), create });\n}\n//# sourceMappingURL=_shortw_utils.js.map","/*! noble-curves - MIT License (c) 2022 Paul Miller (paulmillr.com) */\nimport { sha256 } from '@noble/hashes/sha256';\nimport { randomBytes } from '@noble/hashes/utils';\nimport { Field, mod, pow2 } from './abstract/modular.js';\nimport { mapToCurveSimpleSWU } from './abstract/weierstrass.js';\nimport { bytesToNumberBE, concatBytes, ensureBytes, numberToBytesBE } from './abstract/utils.js';\nimport { createHasher, isogenyMap } from './abstract/hash-to-curve.js';\nimport { createCurve } from './_shortw_utils.js';\nconst secp256k1P = BigInt('0xfffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc2f');\nconst secp256k1N = BigInt('0xfffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd0364141');\nconst _1n = BigInt(1);\nconst _2n = BigInt(2);\nconst divNearest = (a, b) => (a + b / _2n) / b;\n/**\n * √n = n^((p+1)/4) for fields p = 3 mod 4. We unwrap the loop and multiply bit-by-bit.\n * (P+1n/4n).toString(2) would produce bits [223x 1, 0, 22x 1, 4x 0, 11, 00]\n */\nfunction sqrtMod(y) {\n const P = secp256k1P;\n // prettier-ignore\n const _3n = BigInt(3), _6n = BigInt(6), _11n = BigInt(11), _22n = BigInt(22);\n // prettier-ignore\n const _23n = BigInt(23), _44n = BigInt(44), _88n = BigInt(88);\n const b2 = (y * y * y) % P; // x^3, 11\n const b3 = (b2 * b2 * y) % P; // x^7\n const b6 = (pow2(b3, _3n, P) * b3) % P;\n const b9 = (pow2(b6, _3n, P) * b3) % P;\n const b11 = (pow2(b9, _2n, P) * b2) % P;\n const b22 = (pow2(b11, _11n, P) * b11) % P;\n const b44 = (pow2(b22, _22n, P) * b22) % P;\n const b88 = (pow2(b44, _44n, P) * b44) % P;\n const b176 = (pow2(b88, _88n, P) * b88) % P;\n const b220 = (pow2(b176, _44n, P) * b44) % P;\n const b223 = (pow2(b220, _3n, P) * b3) % P;\n const t1 = (pow2(b223, _23n, P) * b22) % P;\n const t2 = (pow2(t1, _6n, P) * b2) % P;\n const root = pow2(t2, _2n, P);\n if (!Fp.eql(Fp.sqr(root), y))\n throw new Error('Cannot find square root');\n return root;\n}\nconst Fp = Field(secp256k1P, undefined, undefined, { sqrt: sqrtMod });\nexport const secp256k1 = createCurve({\n a: BigInt(0),\n b: BigInt(7),\n Fp,\n n: secp256k1N,\n // Base point (x, y) aka generator point\n Gx: BigInt('55066263022277343669578718895168534326250603453777594175500187360389116729240'),\n Gy: BigInt('32670510020758816978083085130507043184471273380659243275938904335757337482424'),\n h: BigInt(1),\n lowS: true,\n /**\n * secp256k1 belongs to Koblitz curves: it has efficiently computable endomorphism.\n * Endomorphism uses 2x less RAM, speeds up precomputation by 2x and ECDH / key recovery by 20%.\n * For precomputed wNAF it trades off 1/2 init time & 1/3 ram for 20% perf hit.\n * Explanation: https://gist.github.com/paulmillr/eb670806793e84df628a7c434a873066\n */\n endo: {\n beta: BigInt('0x7ae96a2b657c07106e64479eac3434e99cf0497512f58995c1396c28719501ee'),\n splitScalar: (k) => {\n const n = secp256k1N;\n const a1 = BigInt('0x3086d221a7d46bcde86c90e49284eb15');\n const b1 = -_1n * BigInt('0xe4437ed6010e88286f547fa90abfe4c3');\n const a2 = BigInt('0x114ca50f7a8e2f3f657c1108d9d44cfd8');\n const b2 = a1;\n const POW_2_128 = BigInt('0x100000000000000000000000000000000'); // (2n**128n).toString(16)\n const c1 = divNearest(b2 * k, n);\n const c2 = divNearest(-b1 * k, n);\n let k1 = mod(k - c1 * a1 - c2 * a2, n);\n let k2 = mod(-c1 * b1 - c2 * b2, n);\n const k1neg = k1 > POW_2_128;\n const k2neg = k2 > POW_2_128;\n if (k1neg)\n k1 = n - k1;\n if (k2neg)\n k2 = n - k2;\n if (k1 > POW_2_128 || k2 > POW_2_128) {\n throw new Error('splitScalar: Endomorphism failed, k=' + k);\n }\n return { k1neg, k1, k2neg, k2 };\n },\n },\n}, sha256);\n// Schnorr signatures are superior to ECDSA from above. Below is Schnorr-specific BIP0340 code.\n// https://github.com/bitcoin/bips/blob/master/bip-0340.mediawiki\nconst _0n = BigInt(0);\nconst fe = (x) => typeof x === 'bigint' && _0n < x && x < secp256k1P;\nconst ge = (x) => typeof x === 'bigint' && _0n < x && x < secp256k1N;\n/** An object mapping tags to their tagged hash prefix of [SHA256(tag) | SHA256(tag)] */\nconst TAGGED_HASH_PREFIXES = {};\nfunction taggedHash(tag, ...messages) {\n let tagP = TAGGED_HASH_PREFIXES[tag];\n if (tagP === undefined) {\n const tagH = sha256(Uint8Array.from(tag, (c) => c.charCodeAt(0)));\n tagP = concatBytes(tagH, tagH);\n TAGGED_HASH_PREFIXES[tag] = tagP;\n }\n return sha256(concatBytes(tagP, ...messages));\n}\n// ECDSA compact points are 33-byte. Schnorr is 32: we strip first byte 0x02 or 0x03\nconst pointToBytes = (point) => point.toRawBytes(true).slice(1);\nconst numTo32b = (n) => numberToBytesBE(n, 32);\nconst modP = (x) => mod(x, secp256k1P);\nconst modN = (x) => mod(x, secp256k1N);\nconst Point = secp256k1.ProjectivePoint;\nconst GmulAdd = (Q, a, b) => Point.BASE.multiplyAndAddUnsafe(Q, a, b);\n// Calculate point, scalar and bytes\nfunction schnorrGetExtPubKey(priv) {\n let d_ = secp256k1.utils.normPrivateKeyToScalar(priv); // same method executed in fromPrivateKey\n let p = Point.fromPrivateKey(d_); // P = d'⋅G; 0 < d' < n check is done inside\n const scalar = p.hasEvenY() ? d_ : modN(-d_);\n return { scalar: scalar, bytes: pointToBytes(p) };\n}\n/**\n * lift_x from BIP340. Convert 32-byte x coordinate to elliptic curve point.\n * @returns valid point checked for being on-curve\n */\nfunction lift_x(x) {\n if (!fe(x))\n throw new Error('bad x: need 0 < x < p'); // Fail if x ≥ p.\n const xx = modP(x * x);\n const c = modP(xx * x + BigInt(7)); // Let c = x³ + 7 mod p.\n let y = sqrtMod(c); // Let y = c^(p+1)/4 mod p.\n if (y % _2n !== _0n)\n y = modP(-y); // Return the unique point P such that x(P) = x and\n const p = new Point(x, y, _1n); // y(P) = y if y mod 2 = 0 or y(P) = p-y otherwise.\n p.assertValidity();\n return p;\n}\n/**\n * Create tagged hash, convert it to bigint, reduce modulo-n.\n */\nfunction challenge(...args) {\n return modN(bytesToNumberBE(taggedHash('BIP0340/challenge', ...args)));\n}\n/**\n * Schnorr public key is just `x` coordinate of Point as per BIP340.\n */\nfunction schnorrGetPublicKey(privateKey) {\n return schnorrGetExtPubKey(privateKey).bytes; // d'=int(sk). Fail if d'=0 or d'≥n. Ret bytes(d'⋅G)\n}\n/**\n * Creates Schnorr signature as per BIP340. Verifies itself before returning anything.\n * auxRand is optional and is not the sole source of k generation: bad CSPRNG won't be dangerous.\n */\nfunction schnorrSign(message, privateKey, auxRand = randomBytes(32)) {\n const m = ensureBytes('message', message);\n const { bytes: px, scalar: d } = schnorrGetExtPubKey(privateKey); // checks for isWithinCurveOrder\n const a = ensureBytes('auxRand', auxRand, 32); // Auxiliary random data a: a 32-byte array\n const t = numTo32b(d ^ bytesToNumberBE(taggedHash('BIP0340/aux', a))); // Let t be the byte-wise xor of bytes(d) and hash/aux(a)\n const rand = taggedHash('BIP0340/nonce', t, px, m); // Let rand = hash/nonce(t || bytes(P) || m)\n const k_ = modN(bytesToNumberBE(rand)); // Let k' = int(rand) mod n\n if (k_ === _0n)\n throw new Error('sign failed: k is zero'); // Fail if k' = 0.\n const { bytes: rx, scalar: k } = schnorrGetExtPubKey(k_); // Let R = k'⋅G.\n const e = challenge(rx, px, m); // Let e = int(hash/challenge(bytes(R) || bytes(P) || m)) mod n.\n const sig = new Uint8Array(64); // Let sig = bytes(R) || bytes((k + ed) mod n).\n sig.set(rx, 0);\n sig.set(numTo32b(modN(k + e * d)), 32);\n // If Verify(bytes(P), m, sig) (see below) returns failure, abort\n if (!schnorrVerify(sig, m, px))\n throw new Error('sign: Invalid signature produced');\n return sig;\n}\n/**\n * Verifies Schnorr signature.\n * Will swallow errors & return false except for initial type validation of arguments.\n */\nfunction schnorrVerify(signature, message, publicKey) {\n const sig = ensureBytes('signature', signature, 64);\n const m = ensureBytes('message', message);\n const pub = ensureBytes('publicKey', publicKey, 32);\n try {\n const P = lift_x(bytesToNumberBE(pub)); // P = lift_x(int(pk)); fail if that fails\n const r = bytesToNumberBE(sig.subarray(0, 32)); // Let r = int(sig[0:32]); fail if r ≥ p.\n if (!fe(r))\n return false;\n const s = bytesToNumberBE(sig.subarray(32, 64)); // Let s = int(sig[32:64]); fail if s ≥ n.\n if (!ge(s))\n return false;\n const e = challenge(numTo32b(r), pointToBytes(P), m); // int(challenge(bytes(r)||bytes(P)||m))%n\n const R = GmulAdd(P, s, modN(-e)); // R = s⋅G - e⋅P\n if (!R || !R.hasEvenY() || R.toAffine().x !== r)\n return false; // -eP == (n-e)P\n return true; // Fail if is_infinite(R) / not has_even_y(R) / x(R) ≠ r.\n }\n catch (error) {\n return false;\n }\n}\nexport const schnorr = /* @__PURE__ */ (() => ({\n getPublicKey: schnorrGetPublicKey,\n sign: schnorrSign,\n verify: schnorrVerify,\n utils: {\n randomPrivateKey: secp256k1.utils.randomPrivateKey,\n lift_x,\n pointToBytes,\n numberToBytesBE,\n bytesToNumberBE,\n taggedHash,\n mod,\n },\n}))();\nconst isoMap = /* @__PURE__ */ (() => isogenyMap(Fp, [\n // xNum\n [\n '0x8e38e38e38e38e38e38e38e38e38e38e38e38e38e38e38e38e38e38daaaaa8c7',\n '0x7d3d4c80bc321d5b9f315cea7fd44c5d595d2fc0bf63b92dfff1044f17c6581',\n '0x534c328d23f234e6e2a413deca25caece4506144037c40314ecbd0b53d9dd262',\n '0x8e38e38e38e38e38e38e38e38e38e38e38e38e38e38e38e38e38e38daaaaa88c',\n ],\n // xDen\n [\n '0xd35771193d94918a9ca34ccbb7b640dd86cd409542f8487d9fe6b745781eb49b',\n '0xedadc6f64383dc1df7c4b2d51b54225406d36b641f5e41bbc52a56612a8c6d14',\n '0x0000000000000000000000000000000000000000000000000000000000000001', // LAST 1\n ],\n // yNum\n [\n '0x4bda12f684bda12f684bda12f684bda12f684bda12f684bda12f684b8e38e23c',\n '0xc75e0c32d5cb7c0fa9d0a54b12a0a6d5647ab046d686da6fdffc90fc201d71a3',\n '0x29a6194691f91a73715209ef6512e576722830a201be2018a765e85a9ecee931',\n '0x2f684bda12f684bda12f684bda12f684bda12f684bda12f684bda12f38e38d84',\n ],\n // yDen\n [\n '0xfffffffffffffffffffffffffffffffffffffffffffffffffffffffefffff93b',\n '0x7a06534bb8bdb49fd5e9e6632722c2989467c1bfc8e8d978dfb425d2685c2573',\n '0x6484aa716545ca2cf3a70c3fa8fe337e0a3d21162f0d6299a7bf8192bfd2a76f',\n '0x0000000000000000000000000000000000000000000000000000000000000001', // LAST 1\n ],\n].map((i) => i.map((j) => BigInt(j)))))();\nconst mapSWU = /* @__PURE__ */ (() => mapToCurveSimpleSWU(Fp, {\n A: BigInt('0x3f8731abdd661adca08a5558f0f5d272e953d363cb6f0e5d405447c01a444533'),\n B: BigInt('1771'),\n Z: Fp.create(BigInt('-11')),\n}))();\nconst htf = /* @__PURE__ */ (() => createHasher(secp256k1.ProjectivePoint, (scalars) => {\n const { x, y } = mapSWU(Fp.create(scalars[0]));\n return isoMap(x, y);\n}, {\n DST: 'secp256k1_XMD:SHA-256_SSWU_RO_',\n encodeDST: 'secp256k1_XMD:SHA-256_SSWU_NU_',\n p: Fp.ORDER,\n m: 1,\n k: 128,\n expand: 'xmd',\n hash: sha256,\n}))();\nexport const hashToCurve = /* @__PURE__ */ (() => htf.hashToCurve)();\nexport const encodeToCurve = /* @__PURE__ */ (() => htf.encodeToCurve)();\n//# sourceMappingURL=secp256k1.js.map","export const crypto = typeof globalThis === 'object' && 'crypto' in globalThis ? globalThis.crypto : undefined;\n//# sourceMappingURL=crypto.js.map","/*! noble-hashes - MIT License (c) 2022 Paul Miller (paulmillr.com) */\n// We use WebCrypto aka globalThis.crypto, which exists in browsers and node.js 16+.\n// node.js versions earlier than v19 don't declare it in global scope.\n// For node.js, package.json#exports field mapping rewrites import\n// from `crypto` to `cryptoNode`, which imports native module.\n// Makes the utils un-importable in browsers without a bundler.\n// Once node.js 18 is deprecated, we can just drop the import.\nimport { crypto } from '@noble/hashes/crypto';\nconst u8a = (a) => a instanceof Uint8Array;\n// Cast array to different type\nexport const u8 = (arr) => new Uint8Array(arr.buffer, arr.byteOffset, arr.byteLength);\nexport const u32 = (arr) => new Uint32Array(arr.buffer, arr.byteOffset, Math.floor(arr.byteLength / 4));\n// Cast array to view\nexport const createView = (arr) => new DataView(arr.buffer, arr.byteOffset, arr.byteLength);\n// The rotate right (circular right shift) operation for uint32\nexport const rotr = (word, shift) => (word << (32 - shift)) | (word >>> shift);\n// big-endian hardware is rare. Just in case someone still decides to run hashes:\n// early-throw an error because we don't support BE yet.\nexport const isLE = new Uint8Array(new Uint32Array([0x11223344]).buffer)[0] === 0x44;\nif (!isLE)\n throw new Error('Non little-endian hardware is not supported');\nconst hexes = Array.from({ length: 256 }, (v, i) => i.toString(16).padStart(2, '0'));\n/**\n * @example bytesToHex(Uint8Array.from([0xca, 0xfe, 0x01, 0x23])) // 'cafe0123'\n */\nexport function bytesToHex(bytes) {\n if (!u8a(bytes))\n throw new Error('Uint8Array expected');\n // pre-caching improves the speed 6x\n let hex = '';\n for (let i = 0; i < bytes.length; i++) {\n hex += hexes[bytes[i]];\n }\n return hex;\n}\n/**\n * @example hexToBytes('cafe0123') // Uint8Array.from([0xca, 0xfe, 0x01, 0x23])\n */\nexport function hexToBytes(hex) {\n if (typeof hex !== 'string')\n throw new Error('hex string expected, got ' + typeof hex);\n const len = hex.length;\n if (len % 2)\n throw new Error('padded hex string expected, got unpadded hex of length ' + len);\n const array = new Uint8Array(len / 2);\n for (let i = 0; i < array.length; i++) {\n const j = i * 2;\n const hexByte = hex.slice(j, j + 2);\n const byte = Number.parseInt(hexByte, 16);\n if (Number.isNaN(byte) || byte < 0)\n throw new Error('Invalid byte sequence');\n array[i] = byte;\n }\n return array;\n}\n// There is no setImmediate in browser and setTimeout is slow.\n// call of async fn will return Promise, which will be fullfiled only on\n// next scheduler queue processing step and this is exactly what we need.\nexport const nextTick = async () => { };\n// Returns control to thread each 'tick' ms to avoid blocking\nexport async function asyncLoop(iters, tick, cb) {\n let ts = Date.now();\n for (let i = 0; i < iters; i++) {\n cb(i);\n // Date.now() is not monotonic, so in case if clock goes backwards we return return control too\n const diff = Date.now() - ts;\n if (diff >= 0 && diff < tick)\n continue;\n await nextTick();\n ts += diff;\n }\n}\n/**\n * @example utf8ToBytes('abc') // new Uint8Array([97, 98, 99])\n */\nexport function utf8ToBytes(str) {\n if (typeof str !== 'string')\n throw new Error(`utf8ToBytes expected string, got ${typeof str}`);\n return new Uint8Array(new TextEncoder().encode(str)); // https://bugzil.la/1681809\n}\n/**\n * Normalizes (non-hex) string or Uint8Array to Uint8Array.\n * Warning: when Uint8Array is passed, it would NOT get copied.\n * Keep in mind for future mutable operations.\n */\nexport function toBytes(data) {\n if (typeof data === 'string')\n data = utf8ToBytes(data);\n if (!u8a(data))\n throw new Error(`expected Uint8Array, got ${typeof data}`);\n return data;\n}\n/**\n * Copies several Uint8Arrays into one.\n */\nexport function concatBytes(...arrays) {\n const r = new Uint8Array(arrays.reduce((sum, a) => sum + a.length, 0));\n let pad = 0; // walk through each item, ensure they have proper type\n arrays.forEach((a) => {\n if (!u8a(a))\n throw new Error('Uint8Array expected');\n r.set(a, pad);\n pad += a.length;\n });\n return r;\n}\n// For runtime check if class implements interface\nexport class Hash {\n // Safe version that clones internal state\n clone() {\n return this._cloneInto();\n }\n}\n// Check if object doens't have custom constructor (like Uint8Array/Array)\nconst isPlainObject = (obj) => Object.prototype.toString.call(obj) === '[object Object]' && obj.constructor === Object;\nexport function checkOpts(defaults, opts) {\n if (opts !== undefined && (typeof opts !== 'object' || !isPlainObject(opts)))\n throw new Error('Options should be object or undefined');\n const merged = Object.assign(defaults, opts);\n return merged;\n}\nexport function wrapConstructor(hashCons) {\n const hashC = (msg) => hashCons().update(toBytes(msg)).digest();\n const tmp = hashCons();\n hashC.outputLen = tmp.outputLen;\n hashC.blockLen = tmp.blockLen;\n hashC.create = () => hashCons();\n return hashC;\n}\nexport function wrapConstructorWithOpts(hashCons) {\n const hashC = (msg, opts) => hashCons(opts).update(toBytes(msg)).digest();\n const tmp = hashCons({});\n hashC.outputLen = tmp.outputLen;\n hashC.blockLen = tmp.blockLen;\n hashC.create = (opts) => hashCons(opts);\n return hashC;\n}\nexport function wrapXOFConstructorWithOpts(hashCons) {\n const hashC = (msg, opts) => hashCons(opts).update(toBytes(msg)).digest();\n const tmp = hashCons({});\n hashC.outputLen = tmp.outputLen;\n hashC.blockLen = tmp.blockLen;\n hashC.create = (opts) => hashCons(opts);\n return hashC;\n}\n/**\n * Secure PRNG. Uses `crypto.getRandomValues`, which defers to OS.\n */\nexport function randomBytes(bytesLength = 32) {\n if (crypto && typeof crypto.getRandomValues === 'function') {\n return crypto.getRandomValues(new Uint8Array(bytesLength));\n }\n throw new Error('crypto.getRandomValues must be defined');\n}\n//# sourceMappingURL=utils.js.map","export function number(n) {\n if (!Number.isSafeInteger(n) || n < 0)\n throw new Error(`Wrong positive integer: ${n}`);\n}\nexport function bool(b) {\n if (typeof b !== 'boolean')\n throw new Error(`Expected boolean, not ${b}`);\n}\nexport function bytes(b, ...lengths) {\n if (!(b instanceof Uint8Array))\n throw new Error('Expected Uint8Array');\n if (lengths.length > 0 && !lengths.includes(b.length))\n throw new Error(`Expected Uint8Array of length ${lengths}, not of length=${b.length}`);\n}\nexport function hash(hash) {\n if (typeof hash !== 'function' || typeof hash.create !== 'function')\n throw new Error('Hash should be wrapped by utils.wrapConstructor');\n number(hash.outputLen);\n number(hash.blockLen);\n}\nexport function exists(instance, checkFinished = true) {\n if (instance.destroyed)\n throw new Error('Hash instance has been destroyed');\n if (checkFinished && instance.finished)\n throw new Error('Hash#digest() has already been called');\n}\nexport function output(out, instance) {\n bytes(out);\n const min = instance.outputLen;\n if (out.length < min) {\n throw new Error(`digestInto() expects output buffer of length at least ${min}`);\n }\n}\nconst assert = {\n number,\n bool,\n bytes,\n hash,\n exists,\n output,\n};\nexport default assert;\n//# sourceMappingURL=_assert.js.map","import assert from './_assert.js';\nimport { Hash, createView, toBytes } from './utils.js';\n// Polyfill for Safari 14\nfunction setBigUint64(view, byteOffset, value, isLE) {\n if (typeof view.setBigUint64 === 'function')\n return view.setBigUint64(byteOffset, value, isLE);\n const _32n = BigInt(32);\n const _u32_max = BigInt(0xffffffff);\n const wh = Number((value >> _32n) & _u32_max);\n const wl = Number(value & _u32_max);\n const h = isLE ? 4 : 0;\n const l = isLE ? 0 : 4;\n view.setUint32(byteOffset + h, wh, isLE);\n view.setUint32(byteOffset + l, wl, isLE);\n}\n// Base SHA2 class (RFC 6234)\nexport class SHA2 extends Hash {\n constructor(blockLen, outputLen, padOffset, isLE) {\n super();\n this.blockLen = blockLen;\n this.outputLen = outputLen;\n this.padOffset = padOffset;\n this.isLE = isLE;\n this.finished = false;\n this.length = 0;\n this.pos = 0;\n this.destroyed = false;\n this.buffer = new Uint8Array(blockLen);\n this.view = createView(this.buffer);\n }\n update(data) {\n assert.exists(this);\n const { view, buffer, blockLen } = this;\n data = toBytes(data);\n const len = data.length;\n for (let pos = 0; pos < len;) {\n const take = Math.min(blockLen - this.pos, len - pos);\n // Fast path: we have at least one block in input, cast it to view and process\n if (take === blockLen) {\n const dataView = createView(data);\n for (; blockLen <= len - pos; pos += blockLen)\n this.process(dataView, pos);\n continue;\n }\n buffer.set(data.subarray(pos, pos + take), this.pos);\n this.pos += take;\n pos += take;\n if (this.pos === blockLen) {\n this.process(view, 0);\n this.pos = 0;\n }\n }\n this.length += data.length;\n this.roundClean();\n return this;\n }\n digestInto(out) {\n assert.exists(this);\n assert.output(out, this);\n this.finished = true;\n // Padding\n // We can avoid allocation of buffer for padding completely if it\n // was previously not allocated here. But it won't change performance.\n const { buffer, view, blockLen, isLE } = this;\n let { pos } = this;\n // append the bit '1' to the message\n buffer[pos++] = 0b10000000;\n this.buffer.subarray(pos).fill(0);\n // we have less than padOffset left in buffer, so we cannot put length in current block, need process it and pad again\n if (this.padOffset > blockLen - pos) {\n this.process(view, 0);\n pos = 0;\n }\n // Pad until full block byte with zeros\n for (let i = pos; i < blockLen; i++)\n buffer[i] = 0;\n // Note: sha512 requires length to be 128bit integer, but length in JS will overflow before that\n // You need to write around 2 exabytes (u64_max / 8 / (1024**6)) for this to happen.\n // So we just write lowest 64 bits of that value.\n setBigUint64(view, blockLen - 8, BigInt(this.length * 8), isLE);\n this.process(view, 0);\n const oview = createView(out);\n const len = this.outputLen;\n // NOTE: we do division by 4 later, which should be fused in single op with modulo by JIT\n if (len % 4)\n throw new Error('_sha2: outputLen should be aligned to 32bit');\n const outLen = len / 4;\n const state = this.get();\n if (outLen > state.length)\n throw new Error('_sha2: outputLen bigger than state');\n for (let i = 0; i < outLen; i++)\n oview.setUint32(4 * i, state[i], isLE);\n }\n digest() {\n const { buffer, outputLen } = this;\n this.digestInto(buffer);\n const res = buffer.slice(0, outputLen);\n this.destroy();\n return res;\n }\n _cloneInto(to) {\n to || (to = new this.constructor());\n to.set(...this.get());\n const { blockLen, buffer, length, finished, destroyed, pos } = this;\n to.length = length;\n to.pos = pos;\n to.finished = finished;\n to.destroyed = destroyed;\n if (length % blockLen)\n to.buffer.set(buffer);\n return to;\n }\n}\n//# sourceMappingURL=_sha2.js.map","import { SHA2 } from './_sha2.js';\nimport { rotr, wrapConstructor } from './utils.js';\n// Choice: a ? b : c\nconst Chi = (a, b, c) => (a & b) ^ (~a & c);\n// Majority function, true if any two inpust is true\nconst Maj = (a, b, c) => (a & b) ^ (a & c) ^ (b & c);\n// Round constants:\n// first 32 bits of the fractional parts of the cube roots of the first 64 primes 2..311)\n// prettier-ignore\nconst SHA256_K = new Uint32Array([\n 0x428a2f98, 0x71374491, 0xb5c0fbcf, 0xe9b5dba5, 0x3956c25b, 0x59f111f1, 0x923f82a4, 0xab1c5ed5,\n 0xd807aa98, 0x12835b01, 0x243185be, 0x550c7dc3, 0x72be5d74, 0x80deb1fe, 0x9bdc06a7, 0xc19bf174,\n 0xe49b69c1, 0xefbe4786, 0x0fc19dc6, 0x240ca1cc, 0x2de92c6f, 0x4a7484aa, 0x5cb0a9dc, 0x76f988da,\n 0x983e5152, 0xa831c66d, 0xb00327c8, 0xbf597fc7, 0xc6e00bf3, 0xd5a79147, 0x06ca6351, 0x14292967,\n 0x27b70a85, 0x2e1b2138, 0x4d2c6dfc, 0x53380d13, 0x650a7354, 0x766a0abb, 0x81c2c92e, 0x92722c85,\n 0xa2bfe8a1, 0xa81a664b, 0xc24b8b70, 0xc76c51a3, 0xd192e819, 0xd6990624, 0xf40e3585, 0x106aa070,\n 0x19a4c116, 0x1e376c08, 0x2748774c, 0x34b0bcb5, 0x391c0cb3, 0x4ed8aa4a, 0x5b9cca4f, 0x682e6ff3,\n 0x748f82ee, 0x78a5636f, 0x84c87814, 0x8cc70208, 0x90befffa, 0xa4506ceb, 0xbef9a3f7, 0xc67178f2\n]);\n// Initial state (first 32 bits of the fractional parts of the square roots of the first 8 primes 2..19):\n// prettier-ignore\nconst IV = new Uint32Array([\n 0x6a09e667, 0xbb67ae85, 0x3c6ef372, 0xa54ff53a, 0x510e527f, 0x9b05688c, 0x1f83d9ab, 0x5be0cd19\n]);\n// Temporary buffer, not used to store anything between runs\n// Named this way because it matches specification.\nconst SHA256_W = new Uint32Array(64);\nclass SHA256 extends SHA2 {\n constructor() {\n super(64, 32, 8, false);\n // We cannot use array here since array allows indexing by variable\n // which means optimizer/compiler cannot use registers.\n this.A = IV[0] | 0;\n this.B = IV[1] | 0;\n this.C = IV[2] | 0;\n this.D = IV[3] | 0;\n this.E = IV[4] | 0;\n this.F = IV[5] | 0;\n this.G = IV[6] | 0;\n this.H = IV[7] | 0;\n }\n get() {\n const { A, B, C, D, E, F, G, H } = this;\n return [A, B, C, D, E, F, G, H];\n }\n // prettier-ignore\n set(A, B, C, D, E, F, G, H) {\n this.A = A | 0;\n this.B = B | 0;\n this.C = C | 0;\n this.D = D | 0;\n this.E = E | 0;\n this.F = F | 0;\n this.G = G | 0;\n this.H = H | 0;\n }\n process(view, offset) {\n // Extend the first 16 words into the remaining 48 words w[16..63] of the message schedule array\n for (let i = 0; i < 16; i++, offset += 4)\n SHA256_W[i] = view.getUint32(offset, false);\n for (let i = 16; i < 64; i++) {\n const W15 = SHA256_W[i - 15];\n const W2 = SHA256_W[i - 2];\n const s0 = rotr(W15, 7) ^ rotr(W15, 18) ^ (W15 >>> 3);\n const s1 = rotr(W2, 17) ^ rotr(W2, 19) ^ (W2 >>> 10);\n SHA256_W[i] = (s1 + SHA256_W[i - 7] + s0 + SHA256_W[i - 16]) | 0;\n }\n // Compression function main loop, 64 rounds\n let { A, B, C, D, E, F, G, H } = this;\n for (let i = 0; i < 64; i++) {\n const sigma1 = rotr(E, 6) ^ rotr(E, 11) ^ rotr(E, 25);\n const T1 = (H + sigma1 + Chi(E, F, G) + SHA256_K[i] + SHA256_W[i]) | 0;\n const sigma0 = rotr(A, 2) ^ rotr(A, 13) ^ rotr(A, 22);\n const T2 = (sigma0 + Maj(A, B, C)) | 0;\n H = G;\n G = F;\n F = E;\n E = (D + T1) | 0;\n D = C;\n C = B;\n B = A;\n A = (T1 + T2) | 0;\n }\n // Add the compressed chunk to the current hash value\n A = (A + this.A) | 0;\n B = (B + this.B) | 0;\n C = (C + this.C) | 0;\n D = (D + this.D) | 0;\n E = (E + this.E) | 0;\n F = (F + this.F) | 0;\n G = (G + this.G) | 0;\n H = (H + this.H) | 0;\n this.set(A, B, C, D, E, F, G, H);\n }\n roundClean() {\n SHA256_W.fill(0);\n }\n destroy() {\n this.set(0, 0, 0, 0, 0, 0, 0, 0);\n this.buffer.fill(0);\n }\n}\n// Constants from https://nvlpubs.nist.gov/nistpubs/FIPS/NIST.FIPS.180-4.pdf\nclass SHA224 extends SHA256 {\n constructor() {\n super();\n this.A = 0xc1059ed8 | 0;\n this.B = 0x367cd507 | 0;\n this.C = 0x3070dd17 | 0;\n this.D = 0xf70e5939 | 0;\n this.E = 0xffc00b31 | 0;\n this.F = 0x68581511 | 0;\n this.G = 0x64f98fa7 | 0;\n this.H = 0xbefa4fa4 | 0;\n this.outputLen = 28;\n }\n}\n/**\n * SHA2-256 hash function\n * @param message - data that would be hashed\n */\nexport const sha256 = wrapConstructor(() => new SHA256());\nexport const sha224 = wrapConstructor(() => new SHA224());\n//# sourceMappingURL=sha256.js.map","/*! scure-base - MIT License (c) 2022 Paul Miller (paulmillr.com) */\nexport function assertNumber(n) {\n if (!Number.isSafeInteger(n))\n throw new Error(`Wrong integer: ${n}`);\n}\nfunction chain(...args) {\n const wrap = (a, b) => (c) => a(b(c));\n const encode = Array.from(args)\n .reverse()\n .reduce((acc, i) => (acc ? wrap(acc, i.encode) : i.encode), undefined);\n const decode = args.reduce((acc, i) => (acc ? wrap(acc, i.decode) : i.decode), undefined);\n return { encode, decode };\n}\nfunction alphabet(alphabet) {\n return {\n encode: (digits) => {\n if (!Array.isArray(digits) || (digits.length && typeof digits[0] !== 'number'))\n throw new Error('alphabet.encode input should be an array of numbers');\n return digits.map((i) => {\n assertNumber(i);\n if (i < 0 || i >= alphabet.length)\n throw new Error(`Digit index outside alphabet: ${i} (alphabet: ${alphabet.length})`);\n return alphabet[i];\n });\n },\n decode: (input) => {\n if (!Array.isArray(input) || (input.length && typeof input[0] !== 'string'))\n throw new Error('alphabet.decode input should be array of strings');\n return input.map((letter) => {\n if (typeof letter !== 'string')\n throw new Error(`alphabet.decode: not string element=${letter}`);\n const index = alphabet.indexOf(letter);\n if (index === -1)\n throw new Error(`Unknown letter: \"${letter}\". Allowed: ${alphabet}`);\n return index;\n });\n },\n };\n}\nfunction join(separator = '') {\n if (typeof separator !== 'string')\n throw new Error('join separator should be string');\n return {\n encode: (from) => {\n if (!Array.isArray(from) || (from.length && typeof from[0] !== 'string'))\n throw new Error('join.encode input should be array of strings');\n for (let i of from)\n if (typeof i !== 'string')\n throw new Error(`join.encode: non-string input=${i}`);\n return from.join(separator);\n },\n decode: (to) => {\n if (typeof to !== 'string')\n throw new Error('join.decode input should be string');\n return to.split(separator);\n },\n };\n}\nfunction padding(bits, chr = '=') {\n assertNumber(bits);\n if (typeof chr !== 'string')\n throw new Error('padding chr should be string');\n return {\n encode(data) {\n if (!Array.isArray(data) || (data.length && typeof data[0] !== 'string'))\n throw new Error('padding.encode input should be array of strings');\n for (let i of data)\n if (typeof i !== 'string')\n throw new Error(`padding.encode: non-string input=${i}`);\n while ((data.length * bits) % 8)\n data.push(chr);\n return data;\n },\n decode(input) {\n if (!Array.isArray(input) || (input.length && typeof input[0] !== 'string'))\n throw new Error('padding.encode input should be array of strings');\n for (let i of input)\n if (typeof i !== 'string')\n throw new Error(`padding.decode: non-string input=${i}`);\n let end = input.length;\n if ((end * bits) % 8)\n throw new Error('Invalid padding: string should have whole number of bytes');\n for (; end > 0 && input[end - 1] === chr; end--) {\n if (!(((end - 1) * bits) % 8))\n throw new Error('Invalid padding: string has too much padding');\n }\n return input.slice(0, end);\n },\n };\n}\nfunction normalize(fn) {\n if (typeof fn !== 'function')\n throw new Error('normalize fn should be function');\n return { encode: (from) => from, decode: (to) => fn(to) };\n}\nfunction convertRadix(data, from, to) {\n if (from < 2)\n throw new Error(`convertRadix: wrong from=${from}, base cannot be less than 2`);\n if (to < 2)\n throw new Error(`convertRadix: wrong to=${to}, base cannot be less than 2`);\n if (!Array.isArray(data))\n throw new Error('convertRadix: data should be array');\n if (!data.length)\n return [];\n let pos = 0;\n const res = [];\n const digits = Array.from(data);\n digits.forEach((d) => {\n assertNumber(d);\n if (d < 0 || d >= from)\n throw new Error(`Wrong integer: ${d}`);\n });\n while (true) {\n let carry = 0;\n let done = true;\n for (let i = pos; i < digits.length; i++) {\n const digit = digits[i];\n const digitBase = from * carry + digit;\n if (!Number.isSafeInteger(digitBase) ||\n (from * carry) / from !== carry ||\n digitBase - digit !== from * carry) {\n throw new Error('convertRadix: carry overflow');\n }\n carry = digitBase % to;\n digits[i] = Math.floor(digitBase / to);\n if (!Number.isSafeInteger(digits[i]) || digits[i] * to + carry !== digitBase)\n throw new Error('convertRadix: carry overflow');\n if (!done)\n continue;\n else if (!digits[i])\n pos = i;\n else\n done = false;\n }\n res.push(carry);\n if (done)\n break;\n }\n for (let i = 0; i < data.length - 1 && data[i] === 0; i++)\n res.push(0);\n return res.reverse();\n}\nconst gcd = (a, b) => (!b ? a : gcd(b, a % b));\nconst radix2carry = (from, to) => from + (to - gcd(from, to));\nfunction convertRadix2(data, from, to, padding) {\n if (!Array.isArray(data))\n throw new Error('convertRadix2: data should be array');\n if (from <= 0 || from > 32)\n throw new Error(`convertRadix2: wrong from=${from}`);\n if (to <= 0 || to > 32)\n throw new Error(`convertRadix2: wrong to=${to}`);\n if (radix2carry(from, to) > 32) {\n throw new Error(`convertRadix2: carry overflow from=${from} to=${to} carryBits=${radix2carry(from, to)}`);\n }\n let carry = 0;\n let pos = 0;\n const mask = 2 ** to - 1;\n const res = [];\n for (const n of data) {\n assertNumber(n);\n if (n >= 2 ** from)\n throw new Error(`convertRadix2: invalid data word=${n} from=${from}`);\n carry = (carry << from) | n;\n if (pos + from > 32)\n throw new Error(`convertRadix2: carry overflow pos=${pos} from=${from}`);\n pos += from;\n for (; pos >= to; pos -= to)\n res.push(((carry >> (pos - to)) & mask) >>> 0);\n carry &= 2 ** pos - 1;\n }\n carry = (carry << (to - pos)) & mask;\n if (!padding && pos >= from)\n throw new Error('Excess padding');\n if (!padding && carry)\n throw new Error(`Non-zero padding: ${carry}`);\n if (padding && pos > 0)\n res.push(carry >>> 0);\n return res;\n}\nfunction radix(num) {\n assertNumber(num);\n return {\n encode: (bytes) => {\n if (!(bytes instanceof Uint8Array))\n throw new Error('radix.encode input should be Uint8Array');\n return convertRadix(Array.from(bytes), 2 ** 8, num);\n },\n decode: (digits) => {\n if (!Array.isArray(digits) || (digits.length && typeof digits[0] !== 'number'))\n throw new Error('radix.decode input should be array of strings');\n return Uint8Array.from(convertRadix(digits, num, 2 ** 8));\n },\n };\n}\nfunction radix2(bits, revPadding = false) {\n assertNumber(bits);\n if (bits <= 0 || bits > 32)\n throw new Error('radix2: bits should be in (0..32]');\n if (radix2carry(8, bits) > 32 || radix2carry(bits, 8) > 32)\n throw new Error('radix2: carry overflow');\n return {\n encode: (bytes) => {\n if (!(bytes instanceof Uint8Array))\n throw new Error('radix2.encode input should be Uint8Array');\n return convertRadix2(Array.from(bytes), 8, bits, !revPadding);\n },\n decode: (digits) => {\n if (!Array.isArray(digits) || (digits.length && typeof digits[0] !== 'number'))\n throw new Error('radix2.decode input should be array of strings');\n return Uint8Array.from(convertRadix2(digits, bits, 8, revPadding));\n },\n };\n}\nfunction unsafeWrapper(fn) {\n if (typeof fn !== 'function')\n throw new Error('unsafeWrapper fn should be function');\n return function (...args) {\n try {\n return fn.apply(null, args);\n }\n catch (e) { }\n };\n}\nfunction checksum(len, fn) {\n assertNumber(len);\n if (typeof fn !== 'function')\n throw new Error('checksum fn should be function');\n return {\n encode(data) {\n if (!(data instanceof Uint8Array))\n throw new Error('checksum.encode: input should be Uint8Array');\n const checksum = fn(data).slice(0, len);\n const res = new Uint8Array(data.length + len);\n res.set(data);\n res.set(checksum, data.length);\n return res;\n },\n decode(data) {\n if (!(data instanceof Uint8Array))\n throw new Error('checksum.decode: input should be Uint8Array');\n const payload = data.slice(0, -len);\n const newChecksum = fn(payload).slice(0, len);\n const oldChecksum = data.slice(-len);\n for (let i = 0; i < len; i++)\n if (newChecksum[i] !== oldChecksum[i])\n throw new Error('Invalid checksum');\n return payload;\n },\n };\n}\nexport const utils = { alphabet, chain, checksum, radix, radix2, join, padding };\nexport const base16 = chain(radix2(4), alphabet('0123456789ABCDEF'), join(''));\nexport const base32 = chain(radix2(5), alphabet('ABCDEFGHIJKLMNOPQRSTUVWXYZ234567'), padding(5), join(''));\nexport const base32hex = chain(radix2(5), alphabet('0123456789ABCDEFGHIJKLMNOPQRSTUV'), padding(5), join(''));\nexport const base32crockford = chain(radix2(5), alphabet('0123456789ABCDEFGHJKMNPQRSTVWXYZ'), join(''), normalize((s) => s.toUpperCase().replace(/O/g, '0').replace(/[IL]/g, '1')));\nexport const base64 = chain(radix2(6), alphabet('ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'), padding(6), join(''));\nexport const base64url = chain(radix2(6), alphabet('ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_'), padding(6), join(''));\nconst genBase58 = (abc) => chain(radix(58), alphabet(abc), join(''));\nexport const base58 = genBase58('123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz');\nexport const base58flickr = genBase58('123456789abcdefghijkmnopqrstuvwxyzABCDEFGHJKLMNPQRSTUVWXYZ');\nexport const base58xrp = genBase58('rpshnaf39wBUDNEGHJKLM4PQRST7VWXYZ2bcdeCg65jkm8oFqi1tuvAxyz');\nconst XMR_BLOCK_LEN = [0, 2, 3, 5, 6, 7, 9, 10, 11];\nexport const base58xmr = {\n encode(data) {\n let res = '';\n for (let i = 0; i < data.length; i += 8) {\n const block = data.subarray(i, i + 8);\n res += base58.encode(block).padStart(XMR_BLOCK_LEN[block.length], '1');\n }\n return res;\n },\n decode(str) {\n let res = [];\n for (let i = 0; i < str.length; i += 11) {\n const slice = str.slice(i, i + 11);\n const blockLen = XMR_BLOCK_LEN.indexOf(slice.length);\n const block = base58.decode(slice);\n for (let j = 0; j < block.length - blockLen; j++) {\n if (block[j] !== 0)\n throw new Error('base58xmr: wrong padding');\n }\n res = res.concat(Array.from(block.slice(block.length - blockLen)));\n }\n return Uint8Array.from(res);\n },\n};\nexport const base58check = (sha256) => chain(checksum(4, (data) => sha256(sha256(data))), base58);\nconst BECH_ALPHABET = chain(alphabet('qpzry9x8gf2tvdw0s3jn54khce6mua7l'), join(''));\nconst POLYMOD_GENERATORS = [0x3b6a57b2, 0x26508e6d, 0x1ea119fa, 0x3d4233dd, 0x2a1462b3];\nfunction bech32Polymod(pre) {\n const b = pre >> 25;\n let chk = (pre & 0x1ffffff) << 5;\n for (let i = 0; i < POLYMOD_GENERATORS.length; i++) {\n if (((b >> i) & 1) === 1)\n chk ^= POLYMOD_GENERATORS[i];\n }\n return chk;\n}\nfunction bechChecksum(prefix, words, encodingConst = 1) {\n const len = prefix.length;\n let chk = 1;\n for (let i = 0; i < len; i++) {\n const c = prefix.charCodeAt(i);\n if (c < 33 || c > 126)\n throw new Error(`Invalid prefix (${prefix})`);\n chk = bech32Polymod(chk) ^ (c >> 5);\n }\n chk = bech32Polymod(chk);\n for (let i = 0; i < len; i++)\n chk = bech32Polymod(chk) ^ (prefix.charCodeAt(i) & 0x1f);\n for (let v of words)\n chk = bech32Polymod(chk) ^ v;\n for (let i = 0; i < 6; i++)\n chk = bech32Polymod(chk);\n chk ^= encodingConst;\n return BECH_ALPHABET.encode(convertRadix2([chk % 2 ** 30], 30, 5, false));\n}\nfunction genBech32(encoding) {\n const ENCODING_CONST = encoding === 'bech32' ? 1 : 0x2bc830a3;\n const _words = radix2(5);\n const fromWords = _words.decode;\n const toWords = _words.encode;\n const fromWordsUnsafe = unsafeWrapper(fromWords);\n function encode(prefix, words, limit = 90) {\n if (typeof prefix !== 'string')\n throw new Error(`bech32.encode prefix should be string, not ${typeof prefix}`);\n if (!Array.isArray(words) || (words.length && typeof words[0] !== 'number'))\n throw new Error(`bech32.encode words should be array of numbers, not ${typeof words}`);\n const actualLength = prefix.length + 7 + words.length;\n if (limit !== false && actualLength > limit)\n throw new TypeError(`Length ${actualLength} exceeds limit ${limit}`);\n prefix = prefix.toLowerCase();\n return `${prefix}1${BECH_ALPHABET.encode(words)}${bechChecksum(prefix, words, ENCODING_CONST)}`;\n }\n function decode(str, limit = 90) {\n if (typeof str !== 'string')\n throw new Error(`bech32.decode input should be string, not ${typeof str}`);\n if (str.length < 8 || (limit !== false && str.length > limit))\n throw new TypeError(`Wrong string length: ${str.length} (${str}). Expected (8..${limit})`);\n const lowered = str.toLowerCase();\n if (str !== lowered && str !== str.toUpperCase())\n throw new Error(`String must be lowercase or uppercase`);\n str = lowered;\n const sepIndex = str.lastIndexOf('1');\n if (sepIndex === 0 || sepIndex === -1)\n throw new Error(`Letter \"1\" must be present between prefix and data only`);\n const prefix = str.slice(0, sepIndex);\n const _words = str.slice(sepIndex + 1);\n if (_words.length < 6)\n throw new Error('Data must be at least 6 characters long');\n const words = BECH_ALPHABET.decode(_words).slice(0, -6);\n const sum = bechChecksum(prefix, words, ENCODING_CONST);\n if (!_words.endsWith(sum))\n throw new Error(`Invalid checksum in ${str}: expected \"${sum}\"`);\n return { prefix, words };\n }\n const decodeUnsafe = unsafeWrapper(decode);\n function decodeToBytes(str) {\n const { prefix, words } = decode(str, false);\n return { prefix, words, bytes: fromWords(words) };\n }\n return { encode, decode, decodeToBytes, decodeUnsafe, fromWords, fromWordsUnsafe, toWords };\n}\nexport const bech32 = genBech32('bech32');\nexport const bech32m = genBech32('bech32m');\nexport const utf8 = {\n encode: (data) => new TextDecoder().decode(data),\n decode: (str) => new TextEncoder().encode(str),\n};\nexport const hex = chain(radix2(4), alphabet('0123456789abcdef'), join(''), normalize((s) => {\n if (typeof s !== 'string' || s.length % 2)\n throw new TypeError(`hex.decode: expected string, got ${typeof s} with length ${s.length}`);\n return s.toLowerCase();\n}));\nconst CODERS = {\n utf8, hex, base16, base32, base64, base64url, base58, base58xmr\n};\nconst coderTypeError = `Invalid encoding type. Available types: ${Object.keys(CODERS).join(', ')}`;\nexport const bytesToString = (type, bytes) => {\n if (typeof type !== 'string' || !CODERS.hasOwnProperty(type))\n throw new TypeError(coderTypeError);\n if (!(bytes instanceof Uint8Array))\n throw new TypeError('bytesToString() expects Uint8Array');\n return CODERS[type].encode(bytes);\n};\nexport const str = bytesToString;\nexport const stringToBytes = (type, str) => {\n if (!CODERS.hasOwnProperty(type))\n throw new TypeError(coderTypeError);\n if (typeof str !== 'string')\n throw new TypeError('stringToBytes() expects string');\n return CODERS[type].decode(str);\n};\nexport const bytes = stringToBytes;\n","function number(n) {\n if (!Number.isSafeInteger(n) || n < 0)\n throw new Error(`positive integer expected, not ${n}`);\n}\nfunction bool(b) {\n if (typeof b !== 'boolean')\n throw new Error(`boolean expected, not ${b}`);\n}\nexport function isBytes(a) {\n return (a instanceof Uint8Array ||\n (a != null && typeof a === 'object' && a.constructor.name === 'Uint8Array'));\n}\nfunction bytes(b, ...lengths) {\n if (!isBytes(b))\n throw new Error('Uint8Array expected');\n if (lengths.length > 0 && !lengths.includes(b.length))\n throw new Error(`Uint8Array expected of length ${lengths}, not of length=${b.length}`);\n}\nfunction hash(hash) {\n if (typeof hash !== 'function' || typeof hash.create !== 'function')\n throw new Error('hash must be wrapped by utils.wrapConstructor');\n number(hash.outputLen);\n number(hash.blockLen);\n}\nfunction exists(instance, checkFinished = true) {\n if (instance.destroyed)\n throw new Error('Hash instance has been destroyed');\n if (checkFinished && instance.finished)\n throw new Error('Hash#digest() has already been called');\n}\nfunction output(out, instance) {\n bytes(out);\n const min = instance.outputLen;\n if (out.length < min) {\n throw new Error(`digestInto() expects output buffer of length at least ${min}`);\n }\n}\nexport { number, bool, bytes, hash, exists, output };\nconst assert = { number, bool, bytes, hash, exists, output };\nexport default assert;\n//# sourceMappingURL=_assert.js.map","/*! noble-ciphers - MIT License (c) 2023 Paul Miller (paulmillr.com) */\nimport { bytes as abytes, isBytes } from './_assert.js';\n// Cast array to different type\nexport const u8 = (arr) => new Uint8Array(arr.buffer, arr.byteOffset, arr.byteLength);\nexport const u16 = (arr) => new Uint16Array(arr.buffer, arr.byteOffset, Math.floor(arr.byteLength / 2));\nexport const u32 = (arr) => new Uint32Array(arr.buffer, arr.byteOffset, Math.floor(arr.byteLength / 4));\n// Cast array to view\nexport const createView = (arr) => new DataView(arr.buffer, arr.byteOffset, arr.byteLength);\n// big-endian hardware is rare. Just in case someone still decides to run ciphers:\n// early-throw an error because we don't support BE yet.\nexport const isLE = new Uint8Array(new Uint32Array([0x11223344]).buffer)[0] === 0x44;\nif (!isLE)\n throw new Error('Non little-endian hardware is not supported');\n// Array where index 0xf0 (240) is mapped to string 'f0'\nconst hexes = /* @__PURE__ */ Array.from({ length: 256 }, (_, i) => i.toString(16).padStart(2, '0'));\n/**\n * @example bytesToHex(Uint8Array.from([0xca, 0xfe, 0x01, 0x23])) // 'cafe0123'\n */\nexport function bytesToHex(bytes) {\n abytes(bytes);\n // pre-caching improves the speed 6x\n let hex = '';\n for (let i = 0; i < bytes.length; i++) {\n hex += hexes[bytes[i]];\n }\n return hex;\n}\n// We use optimized technique to convert hex string to byte array\nconst asciis = { _0: 48, _9: 57, _A: 65, _F: 70, _a: 97, _f: 102 };\nfunction asciiToBase16(char) {\n if (char >= asciis._0 && char <= asciis._9)\n return char - asciis._0;\n if (char >= asciis._A && char <= asciis._F)\n return char - (asciis._A - 10);\n if (char >= asciis._a && char <= asciis._f)\n return char - (asciis._a - 10);\n return;\n}\n/**\n * @example hexToBytes('cafe0123') // Uint8Array.from([0xca, 0xfe, 0x01, 0x23])\n */\nexport function hexToBytes(hex) {\n if (typeof hex !== 'string')\n throw new Error('hex string expected, got ' + typeof hex);\n const hl = hex.length;\n const al = hl / 2;\n if (hl % 2)\n throw new Error('padded hex string expected, got unpadded hex of length ' + hl);\n const array = new Uint8Array(al);\n for (let ai = 0, hi = 0; ai < al; ai++, hi += 2) {\n const n1 = asciiToBase16(hex.charCodeAt(hi));\n const n2 = asciiToBase16(hex.charCodeAt(hi + 1));\n if (n1 === undefined || n2 === undefined) {\n const char = hex[hi] + hex[hi + 1];\n throw new Error('hex string expected, got non-hex character \"' + char + '\" at index ' + hi);\n }\n array[ai] = n1 * 16 + n2;\n }\n return array;\n}\nexport function hexToNumber(hex) {\n if (typeof hex !== 'string')\n throw new Error('hex string expected, got ' + typeof hex);\n // Big Endian\n return BigInt(hex === '' ? '0' : `0x${hex}`);\n}\n// BE: Big Endian, LE: Little Endian\nexport function bytesToNumberBE(bytes) {\n return hexToNumber(bytesToHex(bytes));\n}\nexport function numberToBytesBE(n, len) {\n return hexToBytes(n.toString(16).padStart(len * 2, '0'));\n}\n// There is no setImmediate in browser and setTimeout is slow.\n// call of async fn will return Promise, which will be fullfiled only on\n// next scheduler queue processing step and this is exactly what we need.\nexport const nextTick = async () => { };\n// Returns control to thread each 'tick' ms to avoid blocking\nexport async function asyncLoop(iters, tick, cb) {\n let ts = Date.now();\n for (let i = 0; i < iters; i++) {\n cb(i);\n // Date.now() is not monotonic, so in case if clock goes backwards we return return control too\n const diff = Date.now() - ts;\n if (diff >= 0 && diff < tick)\n continue;\n await nextTick();\n ts += diff;\n }\n}\n/**\n * @example utf8ToBytes('abc') // new Uint8Array([97, 98, 99])\n */\nexport function utf8ToBytes(str) {\n if (typeof str !== 'string')\n throw new Error(`string expected, got ${typeof str}`);\n return new Uint8Array(new TextEncoder().encode(str)); // https://bugzil.la/1681809\n}\n/**\n * @example bytesToUtf8(new Uint8Array([97, 98, 99])) // 'abc'\n */\nexport function bytesToUtf8(bytes) {\n return new TextDecoder().decode(bytes);\n}\n/**\n * Normalizes (non-hex) string or Uint8Array to Uint8Array.\n * Warning: when Uint8Array is passed, it would NOT get copied.\n * Keep in mind for future mutable operations.\n */\nexport function toBytes(data) {\n if (typeof data === 'string')\n data = utf8ToBytes(data);\n else if (isBytes(data))\n data = data.slice();\n else\n throw new Error(`Uint8Array expected, got ${typeof data}`);\n return data;\n}\n/**\n * Copies several Uint8Arrays into one.\n */\nexport function concatBytes(...arrays) {\n let sum = 0;\n for (let i = 0; i < arrays.length; i++) {\n const a = arrays[i];\n abytes(a);\n sum += a.length;\n }\n const res = new Uint8Array(sum);\n for (let i = 0, pad = 0; i < arrays.length; i++) {\n const a = arrays[i];\n res.set(a, pad);\n pad += a.length;\n }\n return res;\n}\nexport function checkOpts(defaults, opts) {\n if (opts == null || typeof opts !== 'object')\n throw new Error('options must be defined');\n const merged = Object.assign(defaults, opts);\n return merged;\n}\n// Compares 2 u8a-s in kinda constant time\nexport function equalBytes(a, b) {\n if (a.length !== b.length)\n return false;\n let diff = 0;\n for (let i = 0; i < a.length; i++)\n diff |= a[i] ^ b[i];\n return diff === 0;\n}\n// For runtime check if class implements interface\nexport class Hash {\n}\n/**\n * @__NO_SIDE_EFFECTS__\n */\nexport const wrapCipher = (params, c) => {\n Object.assign(c, params);\n return c;\n};\n// Polyfill for Safari 14\nexport function setBigUint64(view, byteOffset, value, isLE) {\n if (typeof view.setBigUint64 === 'function')\n return view.setBigUint64(byteOffset, value, isLE);\n const _32n = BigInt(32);\n const _u32_max = BigInt(0xffffffff);\n const wh = Number((value >> _32n) & _u32_max);\n const wl = Number(value & _u32_max);\n const h = isLE ? 4 : 0;\n const l = isLE ? 0 : 4;\n view.setUint32(byteOffset + h, wh, isLE);\n view.setUint32(byteOffset + l, wl, isLE);\n}\nexport function u64Lengths(ciphertext, AAD) {\n const num = new Uint8Array(16);\n const view = createView(num);\n setBigUint64(view, 0, BigInt(AAD ? AAD.length : 0), true);\n setBigUint64(view, 8, BigInt(ciphertext.length), true);\n return num;\n}\n//# sourceMappingURL=utils.js.map","// prettier-ignore\nimport { wrapCipher, createView, setBigUint64, equalBytes, u32, u8, } from './utils.js';\nimport { ghash, polyval } from './_polyval.js';\nimport { bytes as abytes } from './_assert.js';\n/*\nAES (Advanced Encryption Standard) aka Rijndael block cipher.\n\nData is split into 128-bit blocks. Encrypted in 10/12/14 rounds (128/192/256 bits). In every round:\n1. **S-box**, table substitution\n2. **Shift rows**, cyclic shift left of all rows of data array\n3. **Mix columns**, multiplying every column by fixed polynomial\n4. **Add round key**, round_key xor i-th column of array\n\nResources:\n- FIPS-197 https://csrc.nist.gov/files/pubs/fips/197/final/docs/fips-197.pdf\n- Original proposal: https://csrc.nist.gov/csrc/media/projects/cryptographic-standards-and-guidelines/documents/aes-development/rijndael-ammended.pdf\n*/\nconst BLOCK_SIZE = 16;\nconst BLOCK_SIZE32 = 4;\nconst EMPTY_BLOCK = new Uint8Array(BLOCK_SIZE);\nconst POLY = 0x11b; // 1 + x + x**3 + x**4 + x**8\n// TODO: remove multiplication, binary ops only\nfunction mul2(n) {\n return (n << 1) ^ (POLY & -(n >> 7));\n}\nfunction mul(a, b) {\n let res = 0;\n for (; b > 0; b >>= 1) {\n // Montgomery ladder\n res ^= a & -(b & 1); // if (b&1) res ^=a (but const-time).\n a = mul2(a); // a = 2*a\n }\n return res;\n}\n// AES S-box is generated using finite field inversion,\n// an affine transform, and xor of a constant 0x63.\nconst sbox = /* @__PURE__ */ (() => {\n let t = new Uint8Array(256);\n for (let i = 0, x = 1; i < 256; i++, x ^= mul2(x))\n t[i] = x;\n const box = new Uint8Array(256);\n box[0] = 0x63; // first elm\n for (let i = 0; i < 255; i++) {\n let x = t[255 - i];\n x |= x << 8;\n box[t[i]] = (x ^ (x >> 4) ^ (x >> 5) ^ (x >> 6) ^ (x >> 7) ^ 0x63) & 0xff;\n }\n return box;\n})();\n// Inverted S-box\nconst invSbox = /* @__PURE__ */ sbox.map((_, j) => sbox.indexOf(j));\n// Rotate u32 by 8\nconst rotr32_8 = (n) => (n << 24) | (n >>> 8);\nconst rotl32_8 = (n) => (n << 8) | (n >>> 24);\n// T-table is optimization suggested in 5.2 of original proposal (missed from FIPS-197). Changes:\n// - LE instead of BE\n// - bigger tables: T0 and T1 are merged into T01 table and T2 & T3 into T23;\n// so index is u16, instead of u8. This speeds up things, unexpectedly\nfunction genTtable(sbox, fn) {\n if (sbox.length !== 256)\n throw new Error('Wrong sbox length');\n const T0 = new Uint32Array(256).map((_, j) => fn(sbox[j]));\n const T1 = T0.map(rotl32_8);\n const T2 = T1.map(rotl32_8);\n const T3 = T2.map(rotl32_8);\n const T01 = new Uint32Array(256 * 256);\n const T23 = new Uint32Array(256 * 256);\n const sbox2 = new Uint16Array(256 * 256);\n for (let i = 0; i < 256; i++) {\n for (let j = 0; j < 256; j++) {\n const idx = i * 256 + j;\n T01[idx] = T0[i] ^ T1[j];\n T23[idx] = T2[i] ^ T3[j];\n sbox2[idx] = (sbox[i] << 8) | sbox[j];\n }\n }\n return { sbox, sbox2, T0, T1, T2, T3, T01, T23 };\n}\nconst tableEncoding = /* @__PURE__ */ genTtable(sbox, (s) => (mul(s, 3) << 24) | (s << 16) | (s << 8) | mul(s, 2));\nconst tableDecoding = /* @__PURE__ */ genTtable(invSbox, (s) => (mul(s, 11) << 24) | (mul(s, 13) << 16) | (mul(s, 9) << 8) | mul(s, 14));\nconst xPowers = /* @__PURE__ */ (() => {\n const p = new Uint8Array(16);\n for (let i = 0, x = 1; i < 16; i++, x = mul2(x))\n p[i] = x;\n return p;\n})();\nexport function expandKeyLE(key) {\n abytes(key);\n const len = key.length;\n if (![16, 24, 32].includes(len))\n throw new Error(`aes: wrong key size: should be 16, 24 or 32, got: ${len}`);\n const { sbox2 } = tableEncoding;\n const k32 = u32(key);\n const Nk = k32.length;\n const subByte = (n) => applySbox(sbox2, n, n, n, n);\n const xk = new Uint32Array(len + 28); // expanded key\n xk.set(k32);\n // 4.3.1 Key expansion\n for (let i = Nk; i < xk.length; i++) {\n let t = xk[i - 1];\n if (i % Nk === 0)\n t = subByte(rotr32_8(t)) ^ xPowers[i / Nk - 1];\n else if (Nk > 6 && i % Nk === 4)\n t = subByte(t);\n xk[i] = xk[i - Nk] ^ t;\n }\n return xk;\n}\nexport function expandKeyDecLE(key) {\n const encKey = expandKeyLE(key);\n const xk = encKey.slice();\n const Nk = encKey.length;\n const { sbox2 } = tableEncoding;\n const { T0, T1, T2, T3 } = tableDecoding;\n // Inverse key by chunks of 4 (rounds)\n for (let i = 0; i < Nk; i += 4) {\n for (let j = 0; j < 4; j++)\n xk[i + j] = encKey[Nk - i - 4 + j];\n }\n encKey.fill(0);\n // apply InvMixColumn except first & last round\n for (let i = 4; i < Nk - 4; i++) {\n const x = xk[i];\n const w = applySbox(sbox2, x, x, x, x);\n xk[i] = T0[w & 0xff] ^ T1[(w >>> 8) & 0xff] ^ T2[(w >>> 16) & 0xff] ^ T3[w >>> 24];\n }\n return xk;\n}\n// Apply tables\nfunction apply0123(T01, T23, s0, s1, s2, s3) {\n return (T01[((s0 << 8) & 0xff00) | ((s1 >>> 8) & 0xff)] ^\n T23[((s2 >>> 8) & 0xff00) | ((s3 >>> 24) & 0xff)]);\n}\nfunction applySbox(sbox2, s0, s1, s2, s3) {\n return (sbox2[(s0 & 0xff) | (s1 & 0xff00)] |\n (sbox2[((s2 >>> 16) & 0xff) | ((s3 >>> 16) & 0xff00)] << 16));\n}\nfunction encrypt(xk, s0, s1, s2, s3) {\n const { sbox2, T01, T23 } = tableEncoding;\n let k = 0;\n (s0 ^= xk[k++]), (s1 ^= xk[k++]), (s2 ^= xk[k++]), (s3 ^= xk[k++]);\n const rounds = xk.length / 4 - 2;\n for (let i = 0; i < rounds; i++) {\n const t0 = xk[k++] ^ apply0123(T01, T23, s0, s1, s2, s3);\n const t1 = xk[k++] ^ apply0123(T01, T23, s1, s2, s3, s0);\n const t2 = xk[k++] ^ apply0123(T01, T23, s2, s3, s0, s1);\n const t3 = xk[k++] ^ apply0123(T01, T23, s3, s0, s1, s2);\n (s0 = t0), (s1 = t1), (s2 = t2), (s3 = t3);\n }\n // last round (without mixcolumns, so using SBOX2 table)\n const t0 = xk[k++] ^ applySbox(sbox2, s0, s1, s2, s3);\n const t1 = xk[k++] ^ applySbox(sbox2, s1, s2, s3, s0);\n const t2 = xk[k++] ^ applySbox(sbox2, s2, s3, s0, s1);\n const t3 = xk[k++] ^ applySbox(sbox2, s3, s0, s1, s2);\n return { s0: t0, s1: t1, s2: t2, s3: t3 };\n}\nfunction decrypt(xk, s0, s1, s2, s3) {\n const { sbox2, T01, T23 } = tableDecoding;\n let k = 0;\n (s0 ^= xk[k++]), (s1 ^= xk[k++]), (s2 ^= xk[k++]), (s3 ^= xk[k++]);\n const rounds = xk.length / 4 - 2;\n for (let i = 0; i < rounds; i++) {\n const t0 = xk[k++] ^ apply0123(T01, T23, s0, s3, s2, s1);\n const t1 = xk[k++] ^ apply0123(T01, T23, s1, s0, s3, s2);\n const t2 = xk[k++] ^ apply0123(T01, T23, s2, s1, s0, s3);\n const t3 = xk[k++] ^ apply0123(T01, T23, s3, s2, s1, s0);\n (s0 = t0), (s1 = t1), (s2 = t2), (s3 = t3);\n }\n // Last round\n const t0 = xk[k++] ^ applySbox(sbox2, s0, s3, s2, s1);\n const t1 = xk[k++] ^ applySbox(sbox2, s1, s0, s3, s2);\n const t2 = xk[k++] ^ applySbox(sbox2, s2, s1, s0, s3);\n const t3 = xk[k++] ^ applySbox(sbox2, s3, s2, s1, s0);\n return { s0: t0, s1: t1, s2: t2, s3: t3 };\n}\nfunction getDst(len, dst) {\n if (!dst)\n return new Uint8Array(len);\n abytes(dst);\n if (dst.length < len)\n throw new Error(`aes: wrong destination length, expected at least ${len}, got: ${dst.length}`);\n return dst;\n}\n// TODO: investigate merging with ctr32\nfunction ctrCounter(xk, nonce, src, dst) {\n abytes(nonce, BLOCK_SIZE);\n abytes(src);\n const srcLen = src.length;\n dst = getDst(srcLen, dst);\n const ctr = nonce;\n const c32 = u32(ctr);\n // Fill block (empty, ctr=0)\n let { s0, s1, s2, s3 } = encrypt(xk, c32[0], c32[1], c32[2], c32[3]);\n const src32 = u32(src);\n const dst32 = u32(dst);\n // process blocks\n for (let i = 0; i + 4 <= src32.length; i += 4) {\n dst32[i + 0] = src32[i + 0] ^ s0;\n dst32[i + 1] = src32[i + 1] ^ s1;\n dst32[i + 2] = src32[i + 2] ^ s2;\n dst32[i + 3] = src32[i + 3] ^ s3;\n // Full 128 bit counter with wrap around\n let carry = 1;\n for (let i = ctr.length - 1; i >= 0; i--) {\n carry = (carry + (ctr[i] & 0xff)) | 0;\n ctr[i] = carry & 0xff;\n carry >>>= 8;\n }\n ({ s0, s1, s2, s3 } = encrypt(xk, c32[0], c32[1], c32[2], c32[3]));\n }\n // leftovers (less than block)\n // It's possible to handle > u32 fast, but is it worth it?\n const start = BLOCK_SIZE * Math.floor(src32.length / BLOCK_SIZE32);\n if (start < srcLen) {\n const b32 = new Uint32Array([s0, s1, s2, s3]);\n const buf = u8(b32);\n for (let i = start, pos = 0; i < srcLen; i++, pos++)\n dst[i] = src[i] ^ buf[pos];\n }\n return dst;\n}\n// AES CTR with overflowing 32 bit counter\n// It's possible to do 32le significantly simpler (and probably faster) by using u32.\n// But, we need both, and perf bottleneck is in ghash anyway.\nfunction ctr32(xk, isLE, nonce, src, dst) {\n abytes(nonce, BLOCK_SIZE);\n abytes(src);\n dst = getDst(src.length, dst);\n const ctr = nonce; // write new value to nonce, so it can be re-used\n const c32 = u32(ctr);\n const view = createView(ctr);\n const src32 = u32(src);\n const dst32 = u32(dst);\n const ctrPos = isLE ? 0 : 12;\n const srcLen = src.length;\n // Fill block (empty, ctr=0)\n let ctrNum = view.getUint32(ctrPos, isLE); // read current counter value\n let { s0, s1, s2, s3 } = encrypt(xk, c32[0], c32[1], c32[2], c32[3]);\n // process blocks\n for (let i = 0; i + 4 <= src32.length; i += 4) {\n dst32[i + 0] = src32[i + 0] ^ s0;\n dst32[i + 1] = src32[i + 1] ^ s1;\n dst32[i + 2] = src32[i + 2] ^ s2;\n dst32[i + 3] = src32[i + 3] ^ s3;\n ctrNum = (ctrNum + 1) >>> 0; // u32 wrap\n view.setUint32(ctrPos, ctrNum, isLE);\n ({ s0, s1, s2, s3 } = encrypt(xk, c32[0], c32[1], c32[2], c32[3]));\n }\n // leftovers (less than a block)\n const start = BLOCK_SIZE * Math.floor(src32.length / BLOCK_SIZE32);\n if (start < srcLen) {\n const b32 = new Uint32Array([s0, s1, s2, s3]);\n const buf = u8(b32);\n for (let i = start, pos = 0; i < srcLen; i++, pos++)\n dst[i] = src[i] ^ buf[pos];\n }\n return dst;\n}\n/**\n * CTR: counter mode. Creates stream cipher.\n * Requires good IV. Parallelizable. OK, but no MAC.\n */\nexport const ctr = wrapCipher({ blockSize: 16, nonceLength: 16 }, function ctr(key, nonce) {\n abytes(key);\n abytes(nonce, BLOCK_SIZE);\n function processCtr(buf, dst) {\n const xk = expandKeyLE(key);\n const n = nonce.slice();\n const out = ctrCounter(xk, n, buf, dst);\n xk.fill(0);\n n.fill(0);\n return out;\n }\n return {\n encrypt: (plaintext, dst) => processCtr(plaintext, dst),\n decrypt: (ciphertext, dst) => processCtr(ciphertext, dst),\n };\n});\nfunction validateBlockDecrypt(data) {\n abytes(data);\n if (data.length % BLOCK_SIZE !== 0) {\n throw new Error(`aes/(cbc-ecb).decrypt ciphertext should consist of blocks with size ${BLOCK_SIZE}`);\n }\n}\nfunction validateBlockEncrypt(plaintext, pcks5, dst) {\n let outLen = plaintext.length;\n const remaining = outLen % BLOCK_SIZE;\n if (!pcks5 && remaining !== 0)\n throw new Error('aec/(cbc-ecb): unpadded plaintext with disabled padding');\n const b = u32(plaintext);\n if (pcks5) {\n let left = BLOCK_SIZE - remaining;\n if (!left)\n left = BLOCK_SIZE; // if no bytes left, create empty padding block\n outLen = outLen + left;\n }\n const out = getDst(outLen, dst);\n const o = u32(out);\n return { b, o, out };\n}\nfunction validatePCKS(data, pcks5) {\n if (!pcks5)\n return data;\n const len = data.length;\n if (!len)\n throw new Error(`aes/pcks5: empty ciphertext not allowed`);\n const lastByte = data[len - 1];\n if (lastByte <= 0 || lastByte > 16)\n throw new Error(`aes/pcks5: wrong padding byte: ${lastByte}`);\n const out = data.subarray(0, -lastByte);\n for (let i = 0; i < lastByte; i++)\n if (data[len - i - 1] !== lastByte)\n throw new Error(`aes/pcks5: wrong padding`);\n return out;\n}\nfunction padPCKS(left) {\n const tmp = new Uint8Array(16);\n const tmp32 = u32(tmp);\n tmp.set(left);\n const paddingByte = BLOCK_SIZE - left.length;\n for (let i = BLOCK_SIZE - paddingByte; i < BLOCK_SIZE; i++)\n tmp[i] = paddingByte;\n return tmp32;\n}\n/**\n * ECB: Electronic CodeBook. Simple deterministic replacement.\n * Dangerous: always map x to y. See [AES Penguin](https://words.filippo.io/the-ecb-penguin/).\n */\nexport const ecb = wrapCipher({ blockSize: 16 }, function ecb(key, opts = {}) {\n abytes(key);\n const pcks5 = !opts.disablePadding;\n return {\n encrypt: (plaintext, dst) => {\n abytes(plaintext);\n const { b, o, out: _out } = validateBlockEncrypt(plaintext, pcks5, dst);\n const xk = expandKeyLE(key);\n let i = 0;\n for (; i + 4 <= b.length;) {\n const { s0, s1, s2, s3 } = encrypt(xk, b[i + 0], b[i + 1], b[i + 2], b[i + 3]);\n (o[i++] = s0), (o[i++] = s1), (o[i++] = s2), (o[i++] = s3);\n }\n if (pcks5) {\n const tmp32 = padPCKS(plaintext.subarray(i * 4));\n const { s0, s1, s2, s3 } = encrypt(xk, tmp32[0], tmp32[1], tmp32[2], tmp32[3]);\n (o[i++] = s0), (o[i++] = s1), (o[i++] = s2), (o[i++] = s3);\n }\n xk.fill(0);\n return _out;\n },\n decrypt: (ciphertext, dst) => {\n validateBlockDecrypt(ciphertext);\n const xk = expandKeyDecLE(key);\n const out = getDst(ciphertext.length, dst);\n const b = u32(ciphertext);\n const o = u32(out);\n for (let i = 0; i + 4 <= b.length;) {\n const { s0, s1, s2, s3 } = decrypt(xk, b[i + 0], b[i + 1], b[i + 2], b[i + 3]);\n (o[i++] = s0), (o[i++] = s1), (o[i++] = s2), (o[i++] = s3);\n }\n xk.fill(0);\n return validatePCKS(out, pcks5);\n },\n };\n});\n/**\n * CBC: Cipher-Block-Chaining. Key is previous round’s block.\n * Fragile: needs proper padding. Unauthenticated: needs MAC.\n */\nexport const cbc = wrapCipher({ blockSize: 16, nonceLength: 16 }, function cbc(key, iv, opts = {}) {\n abytes(key);\n abytes(iv, 16);\n const pcks5 = !opts.disablePadding;\n return {\n encrypt: (plaintext, dst) => {\n const xk = expandKeyLE(key);\n const { b, o, out: _out } = validateBlockEncrypt(plaintext, pcks5, dst);\n const n32 = u32(iv);\n // prettier-ignore\n let s0 = n32[0], s1 = n32[1], s2 = n32[2], s3 = n32[3];\n let i = 0;\n for (; i + 4 <= b.length;) {\n (s0 ^= b[i + 0]), (s1 ^= b[i + 1]), (s2 ^= b[i + 2]), (s3 ^= b[i + 3]);\n ({ s0, s1, s2, s3 } = encrypt(xk, s0, s1, s2, s3));\n (o[i++] = s0), (o[i++] = s1), (o[i++] = s2), (o[i++] = s3);\n }\n if (pcks5) {\n const tmp32 = padPCKS(plaintext.subarray(i * 4));\n (s0 ^= tmp32[0]), (s1 ^= tmp32[1]), (s2 ^= tmp32[2]), (s3 ^= tmp32[3]);\n ({ s0, s1, s2, s3 } = encrypt(xk, s0, s1, s2, s3));\n (o[i++] = s0), (o[i++] = s1), (o[i++] = s2), (o[i++] = s3);\n }\n xk.fill(0);\n return _out;\n },\n decrypt: (ciphertext, dst) => {\n validateBlockDecrypt(ciphertext);\n const xk = expandKeyDecLE(key);\n const n32 = u32(iv);\n const out = getDst(ciphertext.length, dst);\n const b = u32(ciphertext);\n const o = u32(out);\n // prettier-ignore\n let s0 = n32[0], s1 = n32[1], s2 = n32[2], s3 = n32[3];\n for (let i = 0; i + 4 <= b.length;) {\n // prettier-ignore\n const ps0 = s0, ps1 = s1, ps2 = s2, ps3 = s3;\n (s0 = b[i + 0]), (s1 = b[i + 1]), (s2 = b[i + 2]), (s3 = b[i + 3]);\n const { s0: o0, s1: o1, s2: o2, s3: o3 } = decrypt(xk, s0, s1, s2, s3);\n (o[i++] = o0 ^ ps0), (o[i++] = o1 ^ ps1), (o[i++] = o2 ^ ps2), (o[i++] = o3 ^ ps3);\n }\n xk.fill(0);\n return validatePCKS(out, pcks5);\n },\n };\n});\n/**\n * CFB: Cipher Feedback Mode. The input for the block cipher is the previous cipher output.\n * Unauthenticated: needs MAC.\n */\nexport const cfb = wrapCipher({ blockSize: 16, nonceLength: 16 }, function cfb(key, iv) {\n abytes(key);\n abytes(iv, 16);\n function processCfb(src, isEncrypt, dst) {\n const xk = expandKeyLE(key);\n const srcLen = src.length;\n dst = getDst(srcLen, dst);\n const src32 = u32(src);\n const dst32 = u32(dst);\n const next32 = isEncrypt ? dst32 : src32;\n const n32 = u32(iv);\n // prettier-ignore\n let s0 = n32[0], s1 = n32[1], s2 = n32[2], s3 = n32[3];\n for (let i = 0; i + 4 <= src32.length;) {\n const { s0: e0, s1: e1, s2: e2, s3: e3 } = encrypt(xk, s0, s1, s2, s3);\n dst32[i + 0] = src32[i + 0] ^ e0;\n dst32[i + 1] = src32[i + 1] ^ e1;\n dst32[i + 2] = src32[i + 2] ^ e2;\n dst32[i + 3] = src32[i + 3] ^ e3;\n (s0 = next32[i++]), (s1 = next32[i++]), (s2 = next32[i++]), (s3 = next32[i++]);\n }\n // leftovers (less than block)\n const start = BLOCK_SIZE * Math.floor(src32.length / BLOCK_SIZE32);\n if (start < srcLen) {\n ({ s0, s1, s2, s3 } = encrypt(xk, s0, s1, s2, s3));\n const buf = u8(new Uint32Array([s0, s1, s2, s3]));\n for (let i = start, pos = 0; i < srcLen; i++, pos++)\n dst[i] = src[i] ^ buf[pos];\n buf.fill(0);\n }\n xk.fill(0);\n return dst;\n }\n return {\n encrypt: (plaintext, dst) => processCfb(plaintext, true, dst),\n decrypt: (ciphertext, dst) => processCfb(ciphertext, false, dst),\n };\n});\n// TODO: merge with chacha, however gcm has bitLen while chacha has byteLen\nfunction computeTag(fn, isLE, key, data, AAD) {\n const h = fn.create(key, data.length + (AAD?.length || 0));\n if (AAD)\n h.update(AAD);\n h.update(data);\n const num = new Uint8Array(16);\n const view = createView(num);\n if (AAD)\n setBigUint64(view, 0, BigInt(AAD.length * 8), isLE);\n setBigUint64(view, 8, BigInt(data.length * 8), isLE);\n h.update(num);\n return h.digest();\n}\n/**\n * GCM: Galois/Counter Mode.\n * Good, modern version of CTR, parallel, with MAC.\n * Be careful: MACs can be forged.\n */\nexport const gcm = wrapCipher({ blockSize: 16, nonceLength: 12, tagLength: 16 }, function gcm(key, nonce, AAD) {\n abytes(nonce);\n // Nonce can be pretty much anything (even 1 byte). But smaller nonces less secure.\n if (nonce.length === 0)\n throw new Error('aes/gcm: empty nonce');\n const tagLength = 16;\n function _computeTag(authKey, tagMask, data) {\n const tag = computeTag(ghash, false, authKey, data, AAD);\n for (let i = 0; i < tagMask.length; i++)\n tag[i] ^= tagMask[i];\n return tag;\n }\n function deriveKeys() {\n const xk = expandKeyLE(key);\n const authKey = EMPTY_BLOCK.slice();\n const counter = EMPTY_BLOCK.slice();\n ctr32(xk, false, counter, counter, authKey);\n if (nonce.length === 12) {\n counter.set(nonce);\n }\n else {\n // Spec (NIST 800-38d) supports variable size nonce.\n // Not supported for now, but can be useful.\n const nonceLen = EMPTY_BLOCK.slice();\n const view = createView(nonceLen);\n setBigUint64(view, 8, BigInt(nonce.length * 8), false);\n // ghash(nonce || u64be(0) || u64be(nonceLen*8))\n ghash.create(authKey).update(nonce).update(nonceLen).digestInto(counter);\n }\n const tagMask = ctr32(xk, false, counter, EMPTY_BLOCK);\n return { xk, authKey, counter, tagMask };\n }\n return {\n encrypt: (plaintext) => {\n abytes(plaintext);\n const { xk, authKey, counter, tagMask } = deriveKeys();\n const out = new Uint8Array(plaintext.length + tagLength);\n ctr32(xk, false, counter, plaintext, out);\n const tag = _computeTag(authKey, tagMask, out.subarray(0, out.length - tagLength));\n out.set(tag, plaintext.length);\n xk.fill(0);\n return out;\n },\n decrypt: (ciphertext) => {\n abytes(ciphertext);\n if (ciphertext.length < tagLength)\n throw new Error(`aes/gcm: ciphertext less than tagLen (${tagLength})`);\n const { xk, authKey, counter, tagMask } = deriveKeys();\n const data = ciphertext.subarray(0, -tagLength);\n const passedTag = ciphertext.subarray(-tagLength);\n const tag = _computeTag(authKey, tagMask, data);\n if (!equalBytes(tag, passedTag))\n throw new Error('aes/gcm: invalid ghash tag');\n const out = ctr32(xk, false, counter, data);\n authKey.fill(0);\n tagMask.fill(0);\n xk.fill(0);\n return out;\n },\n };\n});\nconst limit = (name, min, max) => (value) => {\n if (!Number.isSafeInteger(value) || min > value || value > max)\n throw new Error(`${name}: invalid value=${value}, must be [${min}..${max}]`);\n};\n/**\n * AES-GCM-SIV: classic AES-GCM with nonce-misuse resistance.\n * Guarantees that, when a nonce is repeated, the only security loss is that identical\n * plaintexts will produce identical ciphertexts.\n * RFC 8452, https://datatracker.ietf.org/doc/html/rfc8452\n */\nexport const siv = wrapCipher({ blockSize: 16, nonceLength: 12, tagLength: 16 }, function siv(key, nonce, AAD) {\n const tagLength = 16;\n // From RFC 8452: Section 6\n const AAD_LIMIT = limit('AAD', 0, 2 ** 36);\n const PLAIN_LIMIT = limit('plaintext', 0, 2 ** 36);\n const NONCE_LIMIT = limit('nonce', 12, 12);\n const CIPHER_LIMIT = limit('ciphertext', 16, 2 ** 36 + 16);\n abytes(nonce);\n NONCE_LIMIT(nonce.length);\n if (AAD) {\n abytes(AAD);\n AAD_LIMIT(AAD.length);\n }\n function deriveKeys() {\n const len = key.length;\n if (len !== 16 && len !== 24 && len !== 32)\n throw new Error(`key length must be 16, 24 or 32 bytes, got: ${len} bytes`);\n const xk = expandKeyLE(key);\n const encKey = new Uint8Array(len);\n const authKey = new Uint8Array(16);\n const n32 = u32(nonce);\n // prettier-ignore\n let s0 = 0, s1 = n32[0], s2 = n32[1], s3 = n32[2];\n let counter = 0;\n for (const derivedKey of [authKey, encKey].map(u32)) {\n const d32 = u32(derivedKey);\n for (let i = 0; i < d32.length; i += 2) {\n // aes(u32le(0) || nonce)[:8] || aes(u32le(1) || nonce)[:8] ...\n const { s0: o0, s1: o1 } = encrypt(xk, s0, s1, s2, s3);\n d32[i + 0] = o0;\n d32[i + 1] = o1;\n s0 = ++counter; // increment counter inside state\n }\n }\n xk.fill(0);\n return { authKey, encKey: expandKeyLE(encKey) };\n }\n function _computeTag(encKey, authKey, data) {\n const tag = computeTag(polyval, true, authKey, data, AAD);\n // Compute the expected tag by XORing S_s and the nonce, clearing the\n // most significant bit of the last byte and encrypting with the\n // message-encryption key.\n for (let i = 0; i < 12; i++)\n tag[i] ^= nonce[i];\n tag[15] &= 0x7f; // Clear the highest bit\n // encrypt tag as block\n const t32 = u32(tag);\n // prettier-ignore\n let s0 = t32[0], s1 = t32[1], s2 = t32[2], s3 = t32[3];\n ({ s0, s1, s2, s3 } = encrypt(encKey, s0, s1, s2, s3));\n (t32[0] = s0), (t32[1] = s1), (t32[2] = s2), (t32[3] = s3);\n return tag;\n }\n // actual decrypt/encrypt of message.\n function processSiv(encKey, tag, input) {\n let block = tag.slice();\n block[15] |= 0x80; // Force highest bit\n return ctr32(encKey, true, block, input);\n }\n return {\n encrypt: (plaintext) => {\n abytes(plaintext);\n PLAIN_LIMIT(plaintext.length);\n const { encKey, authKey } = deriveKeys();\n const tag = _computeTag(encKey, authKey, plaintext);\n const out = new Uint8Array(plaintext.length + tagLength);\n out.set(tag, plaintext.length);\n out.set(processSiv(encKey, tag, plaintext));\n encKey.fill(0);\n authKey.fill(0);\n return out;\n },\n decrypt: (ciphertext) => {\n abytes(ciphertext);\n CIPHER_LIMIT(ciphertext.length);\n const tag = ciphertext.subarray(-tagLength);\n const { encKey, authKey } = deriveKeys();\n const plaintext = processSiv(encKey, tag, ciphertext.subarray(0, -tagLength));\n const expectedTag = _computeTag(encKey, authKey, plaintext);\n encKey.fill(0);\n authKey.fill(0);\n if (!equalBytes(tag, expectedTag))\n throw new Error('invalid polyval tag');\n return plaintext;\n },\n };\n});\nfunction isBytes32(a) {\n return (a != null &&\n typeof a === 'object' &&\n (a instanceof Uint32Array || a.constructor.name === 'Uint32Array'));\n}\nfunction encryptBlock(xk, block) {\n abytes(block, 16);\n if (!isBytes32(xk))\n throw new Error('_encryptBlock accepts result of expandKeyLE');\n const b32 = u32(block);\n let { s0, s1, s2, s3 } = encrypt(xk, b32[0], b32[1], b32[2], b32[3]);\n (b32[0] = s0), (b32[1] = s1), (b32[2] = s2), (b32[3] = s3);\n return block;\n}\nfunction decryptBlock(xk, block) {\n abytes(block, 16);\n if (!isBytes32(xk))\n throw new Error('_decryptBlock accepts result of expandKeyLE');\n const b32 = u32(block);\n let { s0, s1, s2, s3 } = decrypt(xk, b32[0], b32[1], b32[2], b32[3]);\n (b32[0] = s0), (b32[1] = s1), (b32[2] = s2), (b32[3] = s3);\n return block;\n}\n// Highly unsafe private functions for implementing new modes or ciphers based on AES\n// Can change at any time, no API guarantees\nexport const unsafe = {\n expandKeyLE,\n expandKeyDecLE,\n encrypt,\n decrypt,\n encryptBlock,\n decryptBlock,\n ctrCounter,\n ctr32,\n};\n//# sourceMappingURL=aes.js.map","// Basic utils for ARX (add-rotate-xor) salsa and chacha ciphers.\nimport { number as anumber, bytes as abytes, bool as abool } from './_assert.js';\nimport { checkOpts, u32 } from './utils.js';\n/*\nRFC8439 requires multi-step cipher stream, where\nauthKey starts with counter: 0, actual msg with counter: 1.\n\nFor this, we need a way to re-use nonce / counter:\n\n const counter = new Uint8Array(4);\n chacha(..., counter, ...); // counter is now 1\n chacha(..., counter, ...); // counter is now 2\n\nThis is complicated:\n\n- 32-bit counters are enough, no need for 64-bit: max ArrayBuffer size in JS is 4GB\n- Original papers don't allow mutating counters\n- Counter overflow is undefined [^1]\n- Idea A: allow providing (nonce | counter) instead of just nonce, re-use it\n- Caveat: Cannot be re-used through all cases:\n- * chacha has (counter | nonce)\n- * xchacha has (nonce16 | counter | nonce16)\n- Idea B: separate nonce / counter and provide separate API for counter re-use\n- Caveat: there are different counter sizes depending on an algorithm.\n- salsa & chacha also differ in structures of key & sigma:\n salsa20: s[0] | k(4) | s[1] | nonce(2) | ctr(2) | s[2] | k(4) | s[3]\n chacha: s(4) | k(8) | ctr(1) | nonce(3)\n chacha20orig: s(4) | k(8) | ctr(2) | nonce(2)\n- Idea C: helper method such as `setSalsaState(key, nonce, sigma, data)`\n- Caveat: we can't re-use counter array\n\nxchacha [^2] uses the subkey and remaining 8 byte nonce with ChaCha20 as normal\n(prefixed by 4 NUL bytes, since [RFC8439] specifies a 12-byte nonce).\n\n[^1]: https://mailarchive.ietf.org/arch/msg/cfrg/gsOnTJzcbgG6OqD8Sc0GO5aR_tU/\n[^2]: https://datatracker.ietf.org/doc/html/draft-irtf-cfrg-xchacha#appendix-A.2\n*/\n// We can't make top-level var depend on utils.utf8ToBytes\n// because it's not present in all envs. Creating a similar fn here\nconst _utf8ToBytes = (str) => Uint8Array.from(str.split('').map((c) => c.charCodeAt(0)));\nconst sigma16 = _utf8ToBytes('expand 16-byte k');\nconst sigma32 = _utf8ToBytes('expand 32-byte k');\nconst sigma16_32 = u32(sigma16);\nconst sigma32_32 = u32(sigma32);\nexport const sigma = sigma32_32.slice();\nexport function rotl(a, b) {\n return (a << b) | (a >>> (32 - b));\n}\n// Is byte array aligned to 4 byte offset (u32)?\nfunction isAligned32(b) {\n return b.byteOffset % 4 === 0;\n}\n// Salsa and Chacha block length is always 512-bit\nconst BLOCK_LEN = 64;\nconst BLOCK_LEN32 = 16;\n// new Uint32Array([2**32]) // => Uint32Array(1) [ 0 ]\n// new Uint32Array([2**32-1]) // => Uint32Array(1) [ 4294967295 ]\nconst MAX_COUNTER = 2 ** 32 - 1;\nconst U32_EMPTY = new Uint32Array();\nfunction runCipher(core, sigma, key, nonce, data, output, counter, rounds) {\n const len = data.length;\n const block = new Uint8Array(BLOCK_LEN);\n const b32 = u32(block);\n // Make sure that buffers aligned to 4 bytes\n const isAligned = isAligned32(data) && isAligned32(output);\n const d32 = isAligned ? u32(data) : U32_EMPTY;\n const o32 = isAligned ? u32(output) : U32_EMPTY;\n for (let pos = 0; pos < len; counter++) {\n core(sigma, key, nonce, b32, counter, rounds);\n if (counter >= MAX_COUNTER)\n throw new Error('arx: counter overflow');\n const take = Math.min(BLOCK_LEN, len - pos);\n // aligned to 4 bytes\n if (isAligned && take === BLOCK_LEN) {\n const pos32 = pos / 4;\n if (pos % 4 !== 0)\n throw new Error('arx: invalid block position');\n for (let j = 0, posj; j < BLOCK_LEN32; j++) {\n posj = pos32 + j;\n o32[posj] = d32[posj] ^ b32[j];\n }\n pos += BLOCK_LEN;\n continue;\n }\n for (let j = 0, posj; j < take; j++) {\n posj = pos + j;\n output[posj] = data[posj] ^ block[j];\n }\n pos += take;\n }\n}\nexport function createCipher(core, opts) {\n const { allowShortKeys, extendNonceFn, counterLength, counterRight, rounds } = checkOpts({ allowShortKeys: false, counterLength: 8, counterRight: false, rounds: 20 }, opts);\n if (typeof core !== 'function')\n throw new Error('core must be a function');\n anumber(counterLength);\n anumber(rounds);\n abool(counterRight);\n abool(allowShortKeys);\n return (key, nonce, data, output, counter = 0) => {\n abytes(key);\n abytes(nonce);\n abytes(data);\n const len = data.length;\n if (!output)\n output = new Uint8Array(len);\n abytes(output);\n anumber(counter);\n if (counter < 0 || counter >= MAX_COUNTER)\n throw new Error('arx: counter overflow');\n if (output.length < len)\n throw new Error(`arx: output (${output.length}) is shorter than data (${len})`);\n const toClean = [];\n // Key & sigma\n // key=16 -> sigma16, k=key|key\n // key=32 -> sigma32, k=key\n let l = key.length, k, sigma;\n if (l === 32) {\n k = key.slice();\n toClean.push(k);\n sigma = sigma32_32;\n }\n else if (l === 16 && allowShortKeys) {\n k = new Uint8Array(32);\n k.set(key);\n k.set(key, 16);\n sigma = sigma16_32;\n toClean.push(k);\n }\n else {\n throw new Error(`arx: invalid 32-byte key, got length=${l}`);\n }\n // Nonce\n // salsa20: 8 (8-byte counter)\n // chacha20orig: 8 (8-byte counter)\n // chacha20: 12 (4-byte counter)\n // xsalsa20: 24 (16 -> hsalsa, 8 -> old nonce)\n // xchacha20: 24 (16 -> hchacha, 8 -> old nonce)\n // Align nonce to 4 bytes\n if (!isAligned32(nonce)) {\n nonce = nonce.slice();\n toClean.push(nonce);\n }\n const k32 = u32(k);\n // hsalsa & hchacha: handle extended nonce\n if (extendNonceFn) {\n if (nonce.length !== 24)\n throw new Error(`arx: extended nonce must be 24 bytes`);\n extendNonceFn(sigma, k32, u32(nonce.subarray(0, 16)), k32);\n nonce = nonce.subarray(16);\n }\n // Handle nonce counter\n const nonceNcLen = 16 - counterLength;\n if (nonceNcLen !== nonce.length)\n throw new Error(`arx: nonce must be ${nonceNcLen} or 16 bytes`);\n // Pad counter when nonce is 64 bit\n if (nonceNcLen !== 12) {\n const nc = new Uint8Array(12);\n nc.set(nonce, counterRight ? 0 : 12 - nonce.length);\n nonce = nc;\n toClean.push(nonce);\n }\n const n32 = u32(nonce);\n runCipher(core, sigma, k32, n32, data, output, counter, rounds);\n while (toClean.length > 0)\n toClean.pop().fill(0);\n return output;\n };\n}\n//# sourceMappingURL=_arx.js.map","// prettier-ignore\nimport { wrapCipher, createView, equalBytes, setBigUint64, } from './utils.js';\nimport { poly1305 } from './_poly1305.js';\nimport { createCipher, rotl } from './_arx.js';\nimport { bytes as abytes } from './_assert.js';\n// ChaCha20 stream cipher was released in 2008. ChaCha aims to increase\n// the diffusion per round, but had slightly less cryptanalysis.\n// https://cr.yp.to/chacha.html, http://cr.yp.to/chacha/chacha-20080128.pdf\n/**\n * ChaCha core function.\n */\n// prettier-ignore\nfunction chachaCore(s, k, n, out, cnt, rounds = 20) {\n let y00 = s[0], y01 = s[1], y02 = s[2], y03 = s[3], // \"expa\" \"nd 3\" \"2-by\" \"te k\"\n y04 = k[0], y05 = k[1], y06 = k[2], y07 = k[3], // Key Key Key Key\n y08 = k[4], y09 = k[5], y10 = k[6], y11 = k[7], // Key Key Key Key\n y12 = cnt, y13 = n[0], y14 = n[1], y15 = n[2]; // Counter Counter\tNonce Nonce\n // Save state to temporary variables\n let x00 = y00, x01 = y01, x02 = y02, x03 = y03, x04 = y04, x05 = y05, x06 = y06, x07 = y07, x08 = y08, x09 = y09, x10 = y10, x11 = y11, x12 = y12, x13 = y13, x14 = y14, x15 = y15;\n for (let r = 0; r < rounds; r += 2) {\n x00 = (x00 + x04) | 0;\n x12 = rotl(x12 ^ x00, 16);\n x08 = (x08 + x12) | 0;\n x04 = rotl(x04 ^ x08, 12);\n x00 = (x00 + x04) | 0;\n x12 = rotl(x12 ^ x00, 8);\n x08 = (x08 + x12) | 0;\n x04 = rotl(x04 ^ x08, 7);\n x01 = (x01 + x05) | 0;\n x13 = rotl(x13 ^ x01, 16);\n x09 = (x09 + x13) | 0;\n x05 = rotl(x05 ^ x09, 12);\n x01 = (x01 + x05) | 0;\n x13 = rotl(x13 ^ x01, 8);\n x09 = (x09 + x13) | 0;\n x05 = rotl(x05 ^ x09, 7);\n x02 = (x02 + x06) | 0;\n x14 = rotl(x14 ^ x02, 16);\n x10 = (x10 + x14) | 0;\n x06 = rotl(x06 ^ x10, 12);\n x02 = (x02 + x06) | 0;\n x14 = rotl(x14 ^ x02, 8);\n x10 = (x10 + x14) | 0;\n x06 = rotl(x06 ^ x10, 7);\n x03 = (x03 + x07) | 0;\n x15 = rotl(x15 ^ x03, 16);\n x11 = (x11 + x15) | 0;\n x07 = rotl(x07 ^ x11, 12);\n x03 = (x03 + x07) | 0;\n x15 = rotl(x15 ^ x03, 8);\n x11 = (x11 + x15) | 0;\n x07 = rotl(x07 ^ x11, 7);\n x00 = (x00 + x05) | 0;\n x15 = rotl(x15 ^ x00, 16);\n x10 = (x10 + x15) | 0;\n x05 = rotl(x05 ^ x10, 12);\n x00 = (x00 + x05) | 0;\n x15 = rotl(x15 ^ x00, 8);\n x10 = (x10 + x15) | 0;\n x05 = rotl(x05 ^ x10, 7);\n x01 = (x01 + x06) | 0;\n x12 = rotl(x12 ^ x01, 16);\n x11 = (x11 + x12) | 0;\n x06 = rotl(x06 ^ x11, 12);\n x01 = (x01 + x06) | 0;\n x12 = rotl(x12 ^ x01, 8);\n x11 = (x11 + x12) | 0;\n x06 = rotl(x06 ^ x11, 7);\n x02 = (x02 + x07) | 0;\n x13 = rotl(x13 ^ x02, 16);\n x08 = (x08 + x13) | 0;\n x07 = rotl(x07 ^ x08, 12);\n x02 = (x02 + x07) | 0;\n x13 = rotl(x13 ^ x02, 8);\n x08 = (x08 + x13) | 0;\n x07 = rotl(x07 ^ x08, 7);\n x03 = (x03 + x04) | 0;\n x14 = rotl(x14 ^ x03, 16);\n x09 = (x09 + x14) | 0;\n x04 = rotl(x04 ^ x09, 12);\n x03 = (x03 + x04) | 0;\n x14 = rotl(x14 ^ x03, 8);\n x09 = (x09 + x14) | 0;\n x04 = rotl(x04 ^ x09, 7);\n }\n // Write output\n let oi = 0;\n out[oi++] = (y00 + x00) | 0;\n out[oi++] = (y01 + x01) | 0;\n out[oi++] = (y02 + x02) | 0;\n out[oi++] = (y03 + x03) | 0;\n out[oi++] = (y04 + x04) | 0;\n out[oi++] = (y05 + x05) | 0;\n out[oi++] = (y06 + x06) | 0;\n out[oi++] = (y07 + x07) | 0;\n out[oi++] = (y08 + x08) | 0;\n out[oi++] = (y09 + x09) | 0;\n out[oi++] = (y10 + x10) | 0;\n out[oi++] = (y11 + x11) | 0;\n out[oi++] = (y12 + x12) | 0;\n out[oi++] = (y13 + x13) | 0;\n out[oi++] = (y14 + x14) | 0;\n out[oi++] = (y15 + x15) | 0;\n}\n/**\n * hchacha helper method, used primarily in xchacha, to hash\n * key and nonce into key' and nonce'.\n * Same as chachaCore, but there doesn't seem to be a way to move the block\n * out without 25% performance hit.\n */\n// prettier-ignore\nexport function hchacha(s, k, i, o32) {\n let x00 = s[0], x01 = s[1], x02 = s[2], x03 = s[3], x04 = k[0], x05 = k[1], x06 = k[2], x07 = k[3], x08 = k[4], x09 = k[5], x10 = k[6], x11 = k[7], x12 = i[0], x13 = i[1], x14 = i[2], x15 = i[3];\n for (let r = 0; r < 20; r += 2) {\n x00 = (x00 + x04) | 0;\n x12 = rotl(x12 ^ x00, 16);\n x08 = (x08 + x12) | 0;\n x04 = rotl(x04 ^ x08, 12);\n x00 = (x00 + x04) | 0;\n x12 = rotl(x12 ^ x00, 8);\n x08 = (x08 + x12) | 0;\n x04 = rotl(x04 ^ x08, 7);\n x01 = (x01 + x05) | 0;\n x13 = rotl(x13 ^ x01, 16);\n x09 = (x09 + x13) | 0;\n x05 = rotl(x05 ^ x09, 12);\n x01 = (x01 + x05) | 0;\n x13 = rotl(x13 ^ x01, 8);\n x09 = (x09 + x13) | 0;\n x05 = rotl(x05 ^ x09, 7);\n x02 = (x02 + x06) | 0;\n x14 = rotl(x14 ^ x02, 16);\n x10 = (x10 + x14) | 0;\n x06 = rotl(x06 ^ x10, 12);\n x02 = (x02 + x06) | 0;\n x14 = rotl(x14 ^ x02, 8);\n x10 = (x10 + x14) | 0;\n x06 = rotl(x06 ^ x10, 7);\n x03 = (x03 + x07) | 0;\n x15 = rotl(x15 ^ x03, 16);\n x11 = (x11 + x15) | 0;\n x07 = rotl(x07 ^ x11, 12);\n x03 = (x03 + x07) | 0;\n x15 = rotl(x15 ^ x03, 8);\n x11 = (x11 + x15) | 0;\n x07 = rotl(x07 ^ x11, 7);\n x00 = (x00 + x05) | 0;\n x15 = rotl(x15 ^ x00, 16);\n x10 = (x10 + x15) | 0;\n x05 = rotl(x05 ^ x10, 12);\n x00 = (x00 + x05) | 0;\n x15 = rotl(x15 ^ x00, 8);\n x10 = (x10 + x15) | 0;\n x05 = rotl(x05 ^ x10, 7);\n x01 = (x01 + x06) | 0;\n x12 = rotl(x12 ^ x01, 16);\n x11 = (x11 + x12) | 0;\n x06 = rotl(x06 ^ x11, 12);\n x01 = (x01 + x06) | 0;\n x12 = rotl(x12 ^ x01, 8);\n x11 = (x11 + x12) | 0;\n x06 = rotl(x06 ^ x11, 7);\n x02 = (x02 + x07) | 0;\n x13 = rotl(x13 ^ x02, 16);\n x08 = (x08 + x13) | 0;\n x07 = rotl(x07 ^ x08, 12);\n x02 = (x02 + x07) | 0;\n x13 = rotl(x13 ^ x02, 8);\n x08 = (x08 + x13) | 0;\n x07 = rotl(x07 ^ x08, 7);\n x03 = (x03 + x04) | 0;\n x14 = rotl(x14 ^ x03, 16);\n x09 = (x09 + x14) | 0;\n x04 = rotl(x04 ^ x09, 12);\n x03 = (x03 + x04) | 0;\n x14 = rotl(x14 ^ x03, 8);\n x09 = (x09 + x14) | 0;\n x04 = rotl(x04 ^ x09, 7);\n }\n let oi = 0;\n o32[oi++] = x00;\n o32[oi++] = x01;\n o32[oi++] = x02;\n o32[oi++] = x03;\n o32[oi++] = x12;\n o32[oi++] = x13;\n o32[oi++] = x14;\n o32[oi++] = x15;\n}\n/**\n * Original, non-RFC chacha20 from DJB. 8-byte nonce, 8-byte counter.\n */\nexport const chacha20orig = /* @__PURE__ */ createCipher(chachaCore, {\n counterRight: false,\n counterLength: 8,\n allowShortKeys: true,\n});\n/**\n * ChaCha stream cipher. Conforms to RFC 8439 (IETF, TLS). 12-byte nonce, 4-byte counter.\n * With 12-byte nonce, it's not safe to use fill it with random (CSPRNG), due to collision chance.\n */\nexport const chacha20 = /* @__PURE__ */ createCipher(chachaCore, {\n counterRight: false,\n counterLength: 4,\n allowShortKeys: false,\n});\n/**\n * XChaCha eXtended-nonce ChaCha. 24-byte nonce.\n * With 24-byte nonce, it's safe to use fill it with random (CSPRNG).\n * https://datatracker.ietf.org/doc/html/draft-irtf-cfrg-xchacha\n */\nexport const xchacha20 = /* @__PURE__ */ createCipher(chachaCore, {\n counterRight: false,\n counterLength: 8,\n extendNonceFn: hchacha,\n allowShortKeys: false,\n});\n/**\n * Reduced 8-round chacha, described in original paper.\n */\nexport const chacha8 = /* @__PURE__ */ createCipher(chachaCore, {\n counterRight: false,\n counterLength: 4,\n rounds: 8,\n});\n/**\n * Reduced 12-round chacha, described in original paper.\n */\nexport const chacha12 = /* @__PURE__ */ createCipher(chachaCore, {\n counterRight: false,\n counterLength: 4,\n rounds: 12,\n});\nconst ZEROS16 = /* @__PURE__ */ new Uint8Array(16);\n// Pad to digest size with zeros\nconst updatePadded = (h, msg) => {\n h.update(msg);\n const left = msg.length % 16;\n if (left)\n h.update(ZEROS16.subarray(left));\n};\nconst ZEROS32 = /* @__PURE__ */ new Uint8Array(32);\nfunction computeTag(fn, key, nonce, data, AAD) {\n const authKey = fn(key, nonce, ZEROS32);\n const h = poly1305.create(authKey);\n if (AAD)\n updatePadded(h, AAD);\n updatePadded(h, data);\n const num = new Uint8Array(16);\n const view = createView(num);\n setBigUint64(view, 0, BigInt(AAD ? AAD.length : 0), true);\n setBigUint64(view, 8, BigInt(data.length), true);\n h.update(num);\n const res = h.digest();\n authKey.fill(0);\n return res;\n}\n/**\n * AEAD algorithm from RFC 8439.\n * Salsa20 and chacha (RFC 8439) use poly1305 differently.\n * We could have composed them similar to:\n * https://github.com/paulmillr/scure-base/blob/b266c73dde977b1dd7ef40ef7a23cc15aab526b3/index.ts#L250\n * But it's hard because of authKey:\n * In salsa20, authKey changes position in salsa stream.\n * In chacha, authKey can't be computed inside computeTag, it modifies the counter.\n */\nexport const _poly1305_aead = (xorStream) => (key, nonce, AAD) => {\n const tagLength = 16;\n abytes(key, 32);\n abytes(nonce);\n return {\n encrypt: (plaintext, output) => {\n const plength = plaintext.length;\n const clength = plength + tagLength;\n if (output) {\n abytes(output, clength);\n }\n else {\n output = new Uint8Array(clength);\n }\n xorStream(key, nonce, plaintext, output, 1);\n const tag = computeTag(xorStream, key, nonce, output.subarray(0, -tagLength), AAD);\n output.set(tag, plength); // append tag\n return output;\n },\n decrypt: (ciphertext, output) => {\n const clength = ciphertext.length;\n const plength = clength - tagLength;\n if (clength < tagLength)\n throw new Error(`encrypted data must be at least ${tagLength} bytes`);\n if (output) {\n abytes(output, plength);\n }\n else {\n output = new Uint8Array(plength);\n }\n const data = ciphertext.subarray(0, -tagLength);\n const passedTag = ciphertext.subarray(-tagLength);\n const tag = computeTag(xorStream, key, nonce, data, AAD);\n if (!equalBytes(passedTag, tag))\n throw new Error('invalid tag');\n xorStream(key, nonce, data, output, 1);\n return output;\n },\n };\n};\n/**\n * ChaCha20-Poly1305 from RFC 8439.\n * With 12-byte nonce, it's not safe to use fill it with random (CSPRNG), due to collision chance.\n */\nexport const chacha20poly1305 = /* @__PURE__ */ wrapCipher({ blockSize: 64, nonceLength: 12, tagLength: 16 }, _poly1305_aead(chacha20));\n/**\n * XChaCha20-Poly1305 extended-nonce chacha.\n * https://datatracker.ietf.org/doc/html/draft-irtf-cfrg-xchacha\n * With 24-byte nonce, it's safe to use fill it with random (CSPRNG).\n */\nexport const xchacha20poly1305 = /* @__PURE__ */ wrapCipher({ blockSize: 64, nonceLength: 24, tagLength: 16 }, _poly1305_aead(xchacha20));\n//# sourceMappingURL=chacha.js.map","import assert from './_assert.js';\nimport { Hash, toBytes } from './utils.js';\n// HMAC (RFC 2104)\nexport class HMAC extends Hash {\n constructor(hash, _key) {\n super();\n this.finished = false;\n this.destroyed = false;\n assert.hash(hash);\n const key = toBytes(_key);\n this.iHash = hash.create();\n if (typeof this.iHash.update !== 'function')\n throw new Error('Expected instance of class which extends utils.Hash');\n this.blockLen = this.iHash.blockLen;\n this.outputLen = this.iHash.outputLen;\n const blockLen = this.blockLen;\n const pad = new Uint8Array(blockLen);\n // blockLen can be bigger than outputLen\n pad.set(key.length > blockLen ? hash.create().update(key).digest() : key);\n for (let i = 0; i < pad.length; i++)\n pad[i] ^= 0x36;\n this.iHash.update(pad);\n // By doing update (processing of first block) of outer hash here we can re-use it between multiple calls via clone\n this.oHash = hash.create();\n // Undo internal XOR && apply outer XOR\n for (let i = 0; i < pad.length; i++)\n pad[i] ^= 0x36 ^ 0x5c;\n this.oHash.update(pad);\n pad.fill(0);\n }\n update(buf) {\n assert.exists(this);\n this.iHash.update(buf);\n return this;\n }\n digestInto(out) {\n assert.exists(this);\n assert.bytes(out, this.outputLen);\n this.finished = true;\n this.iHash.digestInto(out);\n this.oHash.update(out);\n this.oHash.digestInto(out);\n this.destroy();\n }\n digest() {\n const out = new Uint8Array(this.oHash.outputLen);\n this.digestInto(out);\n return out;\n }\n _cloneInto(to) {\n // Create new instance without calling constructor since key already in state and we don't know it.\n to || (to = Object.create(Object.getPrototypeOf(this), {}));\n const { oHash, iHash, finished, destroyed, blockLen, outputLen } = this;\n to = to;\n to.finished = finished;\n to.destroyed = destroyed;\n to.blockLen = blockLen;\n to.outputLen = outputLen;\n to.oHash = oHash._cloneInto(to.oHash);\n to.iHash = iHash._cloneInto(to.iHash);\n return to;\n }\n destroy() {\n this.destroyed = true;\n this.oHash.destroy();\n this.iHash.destroy();\n }\n}\n/**\n * HMAC: RFC2104 message authentication code.\n * @param hash - function that would be used e.g. sha256\n * @param key - message key\n * @param message - message data\n */\nexport const hmac = (hash, key, message) => new HMAC(hash, key).update(message).digest();\nhmac.create = (hash, key) => new HMAC(hash, key);\n//# sourceMappingURL=hmac.js.map","import assert from './_assert.js';\nimport { toBytes } from './utils.js';\nimport { hmac } from './hmac.js';\n// HKDF (RFC 5869)\n// https://soatok.blog/2021/11/17/understanding-hkdf/\n/**\n * HKDF-Extract(IKM, salt) -> PRK\n * Arguments position differs from spec (IKM is first one, since it is not optional)\n * @param hash\n * @param ikm\n * @param salt\n * @returns\n */\nexport function extract(hash, ikm, salt) {\n assert.hash(hash);\n // NOTE: some libraries treat zero-length array as 'not provided';\n // we don't, since we have undefined as 'not provided'\n // https://github.com/RustCrypto/KDFs/issues/15\n if (salt === undefined)\n salt = new Uint8Array(hash.outputLen); // if not provided, it is set to a string of HashLen zeros\n return hmac(hash, toBytes(salt), toBytes(ikm));\n}\n// HKDF-Expand(PRK, info, L) -> OKM\nconst HKDF_COUNTER = new Uint8Array([0]);\nconst EMPTY_BUFFER = new Uint8Array();\n/**\n * HKDF-expand from the spec.\n * @param prk - a pseudorandom key of at least HashLen octets (usually, the output from the extract step)\n * @param info - optional context and application specific information (can be a zero-length string)\n * @param length - length of output keying material in octets\n */\nexport function expand(hash, prk, info, length = 32) {\n assert.hash(hash);\n assert.number(length);\n if (length > 255 * hash.outputLen)\n throw new Error('Length should be <= 255*HashLen');\n const blocks = Math.ceil(length / hash.outputLen);\n if (info === undefined)\n info = EMPTY_BUFFER;\n // first L(ength) octets of T\n const okm = new Uint8Array(blocks * hash.outputLen);\n // Re-use HMAC instance between blocks\n const HMAC = hmac.create(hash, prk);\n const HMACTmp = HMAC._cloneInto();\n const T = new Uint8Array(HMAC.outputLen);\n for (let counter = 0; counter < blocks; counter++) {\n HKDF_COUNTER[0] = counter + 1;\n // T(0) = empty string (zero length)\n // T(N) = HMAC-Hash(PRK, T(N-1) | info | N)\n HMACTmp.update(counter === 0 ? EMPTY_BUFFER : T)\n .update(info)\n .update(HKDF_COUNTER)\n .digestInto(T);\n okm.set(T, hash.outputLen * counter);\n HMAC._cloneInto(HMACTmp);\n }\n HMAC.destroy();\n HMACTmp.destroy();\n T.fill(0);\n HKDF_COUNTER.fill(0);\n return okm.slice(0, length);\n}\n/**\n * HKDF (RFC 5869): extract + expand in one step.\n * @param hash - hash function that would be used (e.g. sha256)\n * @param ikm - input keying material, the initial key\n * @param salt - optional salt value (a non-secret random value)\n * @param info - optional context and application specific information\n * @param length - length of output keying material in octets\n */\nexport const hkdf = (hash, ikm, salt, info, length) => expand(hash, extract(hash, ikm, salt), info, length);\n//# sourceMappingURL=hkdf.js.map","var __defProp = Object.defineProperty;\nvar __export = (target, all) => {\n for (var name in all)\n __defProp(target, name, { get: all[name], enumerable: true });\n};\n\n// pure.ts\nimport { schnorr } from \"@noble/curves/secp256k1\";\nimport { bytesToHex } from \"@noble/hashes/utils\";\n\n// core.ts\nvar verifiedSymbol = Symbol(\"verified\");\nvar isRecord = (obj) => obj instanceof Object;\nfunction validateEvent(event) {\n if (!isRecord(event))\n return false;\n if (typeof event.kind !== \"number\")\n return false;\n if (typeof event.content !== \"string\")\n return false;\n if (typeof event.created_at !== \"number\")\n return false;\n if (typeof event.pubkey !== \"string\")\n return false;\n if (!event.pubkey.match(/^[a-f0-9]{64}$/))\n return false;\n if (!Array.isArray(event.tags))\n return false;\n for (let i2 = 0; i2 < event.tags.length; i2++) {\n let tag = event.tags[i2];\n if (!Array.isArray(tag))\n return false;\n for (let j = 0; j < tag.length; j++) {\n if (typeof tag[j] === \"object\")\n return false;\n }\n }\n return true;\n}\nfunction sortEvents(events) {\n return events.sort((a, b) => {\n if (a.created_at !== b.created_at) {\n return b.created_at - a.created_at;\n }\n return a.id.localeCompare(b.id);\n });\n}\n\n// pure.ts\nimport { sha256 } from \"@noble/hashes/sha256\";\n\n// utils.ts\nvar utils_exports = {};\n__export(utils_exports, {\n Queue: () => Queue,\n QueueNode: () => QueueNode,\n binarySearch: () => binarySearch,\n insertEventIntoAscendingList: () => insertEventIntoAscendingList,\n insertEventIntoDescendingList: () => insertEventIntoDescendingList,\n normalizeURL: () => normalizeURL,\n utf8Decoder: () => utf8Decoder,\n utf8Encoder: () => utf8Encoder\n});\nvar utf8Decoder = new TextDecoder(\"utf-8\");\nvar utf8Encoder = new TextEncoder();\nfunction normalizeURL(url) {\n if (url.indexOf(\"://\") === -1)\n url = \"wss://\" + url;\n let p = new URL(url);\n p.pathname = p.pathname.replace(/\\/+/g, \"/\");\n if (p.pathname.endsWith(\"/\"))\n p.pathname = p.pathname.slice(0, -1);\n if (p.port === \"80\" && p.protocol === \"ws:\" || p.port === \"443\" && p.protocol === \"wss:\")\n p.port = \"\";\n p.searchParams.sort();\n p.hash = \"\";\n return p.toString();\n}\nfunction insertEventIntoDescendingList(sortedArray, event) {\n const [idx, found] = binarySearch(sortedArray, (b) => {\n if (event.id === b.id)\n return 0;\n if (event.created_at === b.created_at)\n return -1;\n return b.created_at - event.created_at;\n });\n if (!found) {\n sortedArray.splice(idx, 0, event);\n }\n return sortedArray;\n}\nfunction insertEventIntoAscendingList(sortedArray, event) {\n const [idx, found] = binarySearch(sortedArray, (b) => {\n if (event.id === b.id)\n return 0;\n if (event.created_at === b.created_at)\n return -1;\n return event.created_at - b.created_at;\n });\n if (!found) {\n sortedArray.splice(idx, 0, event);\n }\n return sortedArray;\n}\nfunction binarySearch(arr, compare) {\n let start = 0;\n let end = arr.length - 1;\n while (start <= end) {\n const mid = Math.floor((start + end) / 2);\n const cmp = compare(arr[mid]);\n if (cmp === 0) {\n return [mid, true];\n }\n if (cmp < 0) {\n end = mid - 1;\n } else {\n start = mid + 1;\n }\n }\n return [start, false];\n}\nvar QueueNode = class {\n value;\n next = null;\n prev = null;\n constructor(message) {\n this.value = message;\n }\n};\nvar Queue = class {\n first;\n last;\n constructor() {\n this.first = null;\n this.last = null;\n }\n enqueue(value) {\n const newNode = new QueueNode(value);\n if (!this.last) {\n this.first = newNode;\n this.last = newNode;\n } else if (this.last === this.first) {\n this.last = newNode;\n this.last.prev = this.first;\n this.first.next = newNode;\n } else {\n newNode.prev = this.last;\n this.last.next = newNode;\n this.last = newNode;\n }\n return true;\n }\n dequeue() {\n if (!this.first)\n return null;\n if (this.first === this.last) {\n const target2 = this.first;\n this.first = null;\n this.last = null;\n return target2.value;\n }\n const target = this.first;\n this.first = target.next;\n return target.value;\n }\n};\n\n// pure.ts\nvar JS = class {\n generateSecretKey() {\n return schnorr.utils.randomPrivateKey();\n }\n getPublicKey(secretKey) {\n return bytesToHex(schnorr.getPublicKey(secretKey));\n }\n finalizeEvent(t, secretKey) {\n const event = t;\n event.pubkey = bytesToHex(schnorr.getPublicKey(secretKey));\n event.id = getEventHash(event);\n event.sig = bytesToHex(schnorr.sign(getEventHash(event), secretKey));\n event[verifiedSymbol] = true;\n return event;\n }\n verifyEvent(event) {\n if (typeof event[verifiedSymbol] === \"boolean\")\n return event[verifiedSymbol];\n const hash = getEventHash(event);\n if (hash !== event.id) {\n event[verifiedSymbol] = false;\n return false;\n }\n try {\n const valid = schnorr.verify(event.sig, hash, event.pubkey);\n event[verifiedSymbol] = valid;\n return valid;\n } catch (err) {\n event[verifiedSymbol] = false;\n return false;\n }\n }\n};\nfunction serializeEvent(evt) {\n if (!validateEvent(evt))\n throw new Error(\"can't serialize event with wrong or missing properties\");\n return JSON.stringify([0, evt.pubkey, evt.created_at, evt.kind, evt.tags, evt.content]);\n}\nfunction getEventHash(event) {\n let eventHash = sha256(utf8Encoder.encode(serializeEvent(event)));\n return bytesToHex(eventHash);\n}\nvar i = new JS();\nvar generateSecretKey = i.generateSecretKey;\nvar getPublicKey = i.getPublicKey;\nvar finalizeEvent = i.finalizeEvent;\nvar verifyEvent = i.verifyEvent;\n\n// kinds.ts\nvar kinds_exports = {};\n__export(kinds_exports, {\n Application: () => Application,\n BadgeAward: () => BadgeAward,\n BadgeDefinition: () => BadgeDefinition,\n BlockedRelaysList: () => BlockedRelaysList,\n BookmarkList: () => BookmarkList,\n Bookmarksets: () => Bookmarksets,\n Calendar: () => Calendar,\n CalendarEventRSVP: () => CalendarEventRSVP,\n ChannelCreation: () => ChannelCreation,\n ChannelHideMessage: () => ChannelHideMessage,\n ChannelMessage: () => ChannelMessage,\n ChannelMetadata: () => ChannelMetadata,\n ChannelMuteUser: () => ChannelMuteUser,\n ClassifiedListing: () => ClassifiedListing,\n ClientAuth: () => ClientAuth,\n CommunitiesList: () => CommunitiesList,\n CommunityDefinition: () => CommunityDefinition,\n CommunityPostApproval: () => CommunityPostApproval,\n Contacts: () => Contacts,\n CreateOrUpdateProduct: () => CreateOrUpdateProduct,\n CreateOrUpdateStall: () => CreateOrUpdateStall,\n Curationsets: () => Curationsets,\n Date: () => Date2,\n DirectMessageRelaysList: () => DirectMessageRelaysList,\n DraftClassifiedListing: () => DraftClassifiedListing,\n DraftLong: () => DraftLong,\n Emojisets: () => Emojisets,\n EncryptedDirectMessage: () => EncryptedDirectMessage,\n EventDeletion: () => EventDeletion,\n FileMetadata: () => FileMetadata,\n FileServerPreference: () => FileServerPreference,\n Followsets: () => Followsets,\n GenericRepost: () => GenericRepost,\n Genericlists: () => Genericlists,\n GiftWrap: () => GiftWrap,\n HTTPAuth: () => HTTPAuth,\n Handlerinformation: () => Handlerinformation,\n Handlerrecommendation: () => Handlerrecommendation,\n Highlights: () => Highlights,\n InterestsList: () => InterestsList,\n Interestsets: () => Interestsets,\n JobFeedback: () => JobFeedback,\n JobRequest: () => JobRequest,\n JobResult: () => JobResult,\n Label: () => Label,\n LightningPubRPC: () => LightningPubRPC,\n LiveChatMessage: () => LiveChatMessage,\n LiveEvent: () => LiveEvent,\n LongFormArticle: () => LongFormArticle,\n Metadata: () => Metadata,\n Mutelist: () => Mutelist,\n NWCWalletInfo: () => NWCWalletInfo,\n NWCWalletRequest: () => NWCWalletRequest,\n NWCWalletResponse: () => NWCWalletResponse,\n NostrConnect: () => NostrConnect,\n OpenTimestamps: () => OpenTimestamps,\n Pinlist: () => Pinlist,\n PrivateDirectMessage: () => PrivateDirectMessage,\n ProblemTracker: () => ProblemTracker,\n ProfileBadges: () => ProfileBadges,\n PublicChatsList: () => PublicChatsList,\n Reaction: () => Reaction,\n RecommendRelay: () => RecommendRelay,\n RelayList: () => RelayList,\n Relaysets: () => Relaysets,\n Report: () => Report,\n Reporting: () => Reporting,\n Repost: () => Repost,\n Seal: () => Seal,\n SearchRelaysList: () => SearchRelaysList,\n ShortTextNote: () => ShortTextNote,\n Time: () => Time,\n UserEmojiList: () => UserEmojiList,\n UserStatuses: () => UserStatuses,\n Zap: () => Zap,\n ZapGoal: () => ZapGoal,\n ZapRequest: () => ZapRequest,\n classifyKind: () => classifyKind,\n isEphemeralKind: () => isEphemeralKind,\n isKind: () => isKind,\n isParameterizedReplaceableKind: () => isParameterizedReplaceableKind,\n isRegularKind: () => isRegularKind,\n isReplaceableKind: () => isReplaceableKind\n});\nfunction isRegularKind(kind) {\n return 1e3 <= kind && kind < 1e4 || [1, 2, 4, 5, 6, 7, 8, 16, 40, 41, 42, 43, 44].includes(kind);\n}\nfunction isReplaceableKind(kind) {\n return [0, 3].includes(kind) || 1e4 <= kind && kind < 2e4;\n}\nfunction isEphemeralKind(kind) {\n return 2e4 <= kind && kind < 3e4;\n}\nfunction isParameterizedReplaceableKind(kind) {\n return 3e4 <= kind && kind < 4e4;\n}\nfunction classifyKind(kind) {\n if (isRegularKind(kind))\n return \"regular\";\n if (isReplaceableKind(kind))\n return \"replaceable\";\n if (isEphemeralKind(kind))\n return \"ephemeral\";\n if (isParameterizedReplaceableKind(kind))\n return \"parameterized\";\n return \"unknown\";\n}\nfunction isKind(event, kind) {\n const kindAsArray = kind instanceof Array ? kind : [kind];\n return validateEvent(event) && kindAsArray.includes(event.kind) || false;\n}\nvar Metadata = 0;\nvar ShortTextNote = 1;\nvar RecommendRelay = 2;\nvar Contacts = 3;\nvar EncryptedDirectMessage = 4;\nvar EventDeletion = 5;\nvar Repost = 6;\nvar Reaction = 7;\nvar BadgeAward = 8;\nvar Seal = 13;\nvar PrivateDirectMessage = 14;\nvar GenericRepost = 16;\nvar ChannelCreation = 40;\nvar ChannelMetadata = 41;\nvar ChannelMessage = 42;\nvar ChannelHideMessage = 43;\nvar ChannelMuteUser = 44;\nvar OpenTimestamps = 1040;\nvar GiftWrap = 1059;\nvar FileMetadata = 1063;\nvar LiveChatMessage = 1311;\nvar ProblemTracker = 1971;\nvar Report = 1984;\nvar Reporting = 1984;\nvar Label = 1985;\nvar CommunityPostApproval = 4550;\nvar JobRequest = 5999;\nvar JobResult = 6999;\nvar JobFeedback = 7e3;\nvar ZapGoal = 9041;\nvar ZapRequest = 9734;\nvar Zap = 9735;\nvar Highlights = 9802;\nvar Mutelist = 1e4;\nvar Pinlist = 10001;\nvar RelayList = 10002;\nvar BookmarkList = 10003;\nvar CommunitiesList = 10004;\nvar PublicChatsList = 10005;\nvar BlockedRelaysList = 10006;\nvar SearchRelaysList = 10007;\nvar InterestsList = 10015;\nvar UserEmojiList = 10030;\nvar DirectMessageRelaysList = 10050;\nvar FileServerPreference = 10096;\nvar NWCWalletInfo = 13194;\nvar LightningPubRPC = 21e3;\nvar ClientAuth = 22242;\nvar NWCWalletRequest = 23194;\nvar NWCWalletResponse = 23195;\nvar NostrConnect = 24133;\nvar HTTPAuth = 27235;\nvar Followsets = 3e4;\nvar Genericlists = 30001;\nvar Relaysets = 30002;\nvar Bookmarksets = 30003;\nvar Curationsets = 30004;\nvar ProfileBadges = 30008;\nvar BadgeDefinition = 30009;\nvar Interestsets = 30015;\nvar CreateOrUpdateStall = 30017;\nvar CreateOrUpdateProduct = 30018;\nvar LongFormArticle = 30023;\nvar DraftLong = 30024;\nvar Emojisets = 30030;\nvar Application = 30078;\nvar LiveEvent = 30311;\nvar UserStatuses = 30315;\nvar ClassifiedListing = 30402;\nvar DraftClassifiedListing = 30403;\nvar Date2 = 31922;\nvar Time = 31923;\nvar Calendar = 31924;\nvar CalendarEventRSVP = 31925;\nvar Handlerrecommendation = 31989;\nvar Handlerinformation = 31990;\nvar CommunityDefinition = 34550;\n\n// filter.ts\nfunction matchFilter(filter, event) {\n if (filter.ids && filter.ids.indexOf(event.id) === -1) {\n return false;\n }\n if (filter.kinds && filter.kinds.indexOf(event.kind) === -1) {\n return false;\n }\n if (filter.authors && filter.authors.indexOf(event.pubkey) === -1) {\n return false;\n }\n for (let f in filter) {\n if (f[0] === \"#\") {\n let tagName = f.slice(1);\n let values = filter[`#${tagName}`];\n if (values && !event.tags.find(([t, v]) => t === f.slice(1) && values.indexOf(v) !== -1))\n return false;\n }\n }\n if (filter.since && event.created_at < filter.since)\n return false;\n if (filter.until && event.created_at > filter.until)\n return false;\n return true;\n}\nfunction matchFilters(filters, event) {\n for (let i2 = 0; i2 < filters.length; i2++) {\n if (matchFilter(filters[i2], event)) {\n return true;\n }\n }\n return false;\n}\nfunction mergeFilters(...filters) {\n let result = {};\n for (let i2 = 0; i2 < filters.length; i2++) {\n let filter = filters[i2];\n Object.entries(filter).forEach(([property, values]) => {\n if (property === \"kinds\" || property === \"ids\" || property === \"authors\" || property[0] === \"#\") {\n result[property] = result[property] || [];\n for (let v = 0; v < values.length; v++) {\n let value = values[v];\n if (!result[property].includes(value))\n result[property].push(value);\n }\n }\n });\n if (filter.limit && (!result.limit || filter.limit > result.limit))\n result.limit = filter.limit;\n if (filter.until && (!result.until || filter.until > result.until))\n result.until = filter.until;\n if (filter.since && (!result.since || filter.since < result.since))\n result.since = filter.since;\n }\n return result;\n}\nfunction getFilterLimit(filter) {\n if (filter.ids && !filter.ids.length)\n return 0;\n if (filter.kinds && !filter.kinds.length)\n return 0;\n if (filter.authors && !filter.authors.length)\n return 0;\n for (const [key, value] of Object.entries(filter)) {\n if (key[0] === \"#\" && Array.isArray(value) && !value.length)\n return 0;\n }\n return Math.min(\n Math.max(0, filter.limit ?? Infinity),\n filter.ids?.length ?? Infinity,\n filter.authors?.length && filter.kinds?.every((kind) => isReplaceableKind(kind)) ? filter.authors.length * filter.kinds.length : Infinity,\n filter.authors?.length && filter.kinds?.every((kind) => isParameterizedReplaceableKind(kind)) && filter[\"#d\"]?.length ? filter.authors.length * filter.kinds.length * filter[\"#d\"].length : Infinity\n );\n}\n\n// fakejson.ts\nvar fakejson_exports = {};\n__export(fakejson_exports, {\n getHex64: () => getHex64,\n getInt: () => getInt,\n getSubscriptionId: () => getSubscriptionId,\n matchEventId: () => matchEventId,\n matchEventKind: () => matchEventKind,\n matchEventPubkey: () => matchEventPubkey\n});\nfunction getHex64(json, field) {\n let len = field.length + 3;\n let idx = json.indexOf(`\"${field}\":`) + len;\n let s = json.slice(idx).indexOf(`\"`) + idx + 1;\n return json.slice(s, s + 64);\n}\nfunction getInt(json, field) {\n let len = field.length;\n let idx = json.indexOf(`\"${field}\":`) + len + 3;\n let sliced = json.slice(idx);\n let end = Math.min(sliced.indexOf(\",\"), sliced.indexOf(\"}\"));\n return parseInt(sliced.slice(0, end), 10);\n}\nfunction getSubscriptionId(json) {\n let idx = json.slice(0, 22).indexOf(`\"EVENT\"`);\n if (idx === -1)\n return null;\n let pstart = json.slice(idx + 7 + 1).indexOf(`\"`);\n if (pstart === -1)\n return null;\n let start = idx + 7 + 1 + pstart;\n let pend = json.slice(start + 1, 80).indexOf(`\"`);\n if (pend === -1)\n return null;\n let end = start + 1 + pend;\n return json.slice(start + 1, end);\n}\nfunction matchEventId(json, id) {\n return id === getHex64(json, \"id\");\n}\nfunction matchEventPubkey(json, pubkey) {\n return pubkey === getHex64(json, \"pubkey\");\n}\nfunction matchEventKind(json, kind) {\n return kind === getInt(json, \"kind\");\n}\n\n// nip42.ts\nvar nip42_exports = {};\n__export(nip42_exports, {\n makeAuthEvent: () => makeAuthEvent\n});\nfunction makeAuthEvent(relayURL, challenge) {\n return {\n kind: ClientAuth,\n created_at: Math.floor(Date.now() / 1e3),\n tags: [\n [\"relay\", relayURL],\n [\"challenge\", challenge]\n ],\n content: \"\"\n };\n}\n\n// helpers.ts\nasync function yieldThread() {\n return new Promise((resolve) => {\n const ch = new MessageChannel();\n const handler = () => {\n ch.port1.removeEventListener(\"message\", handler);\n resolve();\n };\n ch.port1.addEventListener(\"message\", handler);\n ch.port2.postMessage(0);\n ch.port1.start();\n });\n}\nvar alwaysTrue = (t) => {\n t[verifiedSymbol] = true;\n return true;\n};\n\n// abstract-relay.ts\nvar AbstractRelay = class {\n url;\n _connected = false;\n onclose = null;\n onnotice = (msg) => console.debug(`NOTICE from ${this.url}: ${msg}`);\n _onauth = null;\n baseEoseTimeout = 4400;\n connectionTimeout = 4400;\n publishTimeout = 4400;\n openSubs = /* @__PURE__ */ new Map();\n connectionTimeoutHandle;\n connectionPromise;\n openCountRequests = /* @__PURE__ */ new Map();\n openEventPublishes = /* @__PURE__ */ new Map();\n ws;\n incomingMessageQueue = new Queue();\n queueRunning = false;\n challenge;\n serial = 0;\n verifyEvent;\n _WebSocket;\n constructor(url, opts) {\n this.url = normalizeURL(url);\n this.verifyEvent = opts.verifyEvent;\n this._WebSocket = opts.websocketImplementation || WebSocket;\n }\n static async connect(url, opts) {\n const relay = new AbstractRelay(url, opts);\n await relay.connect();\n return relay;\n }\n closeAllSubscriptions(reason) {\n for (let [_, sub] of this.openSubs) {\n sub.close(reason);\n }\n this.openSubs.clear();\n for (let [_, ep] of this.openEventPublishes) {\n ep.reject(new Error(reason));\n }\n this.openEventPublishes.clear();\n for (let [_, cr] of this.openCountRequests) {\n cr.reject(new Error(reason));\n }\n this.openCountRequests.clear();\n }\n get connected() {\n return this._connected;\n }\n async connect() {\n if (this.connectionPromise)\n return this.connectionPromise;\n this.challenge = void 0;\n this.connectionPromise = new Promise((resolve, reject) => {\n this.connectionTimeoutHandle = setTimeout(() => {\n reject(\"connection timed out\");\n this.connectionPromise = void 0;\n this.onclose?.();\n this.closeAllSubscriptions(\"relay connection timed out\");\n }, this.connectionTimeout);\n try {\n this.ws = new this._WebSocket(this.url);\n } catch (err) {\n reject(err);\n return;\n }\n this.ws.onopen = () => {\n clearTimeout(this.connectionTimeoutHandle);\n this._connected = true;\n resolve();\n };\n this.ws.onerror = (ev) => {\n reject(ev.message || \"websocket error\");\n if (this._connected) {\n this._connected = false;\n this.connectionPromise = void 0;\n this.onclose?.();\n this.closeAllSubscriptions(\"relay connection errored\");\n }\n };\n this.ws.onclose = async () => {\n if (this._connected) {\n this._connected = false;\n this.connectionPromise = void 0;\n this.onclose?.();\n this.closeAllSubscriptions(\"relay connection closed\");\n }\n };\n this.ws.onmessage = this._onmessage.bind(this);\n });\n return this.connectionPromise;\n }\n async runQueue() {\n this.queueRunning = true;\n while (true) {\n if (false === this.handleNext()) {\n break;\n }\n await yieldThread();\n }\n this.queueRunning = false;\n }\n handleNext() {\n const json = this.incomingMessageQueue.dequeue();\n if (!json) {\n return false;\n }\n const subid = getSubscriptionId(json);\n if (subid) {\n const so = this.openSubs.get(subid);\n if (!so) {\n return;\n }\n const id = getHex64(json, \"id\");\n const alreadyHave = so.alreadyHaveEvent?.(id);\n so.receivedEvent?.(this, id);\n if (alreadyHave) {\n return;\n }\n }\n try {\n let data = JSON.parse(json);\n switch (data[0]) {\n case \"EVENT\": {\n const so = this.openSubs.get(data[1]);\n const event = data[2];\n if (this.verifyEvent(event) && matchFilters(so.filters, event)) {\n so.onevent(event);\n }\n return;\n }\n case \"COUNT\": {\n const id = data[1];\n const payload = data[2];\n const cr = this.openCountRequests.get(id);\n if (cr) {\n cr.resolve(payload.count);\n this.openCountRequests.delete(id);\n }\n return;\n }\n case \"EOSE\": {\n const so = this.openSubs.get(data[1]);\n if (!so)\n return;\n so.receivedEose();\n return;\n }\n case \"OK\": {\n const id = data[1];\n const ok = data[2];\n const reason = data[3];\n const ep = this.openEventPublishes.get(id);\n if (ep) {\n if (ok)\n ep.resolve(reason);\n else\n ep.reject(new Error(reason));\n this.openEventPublishes.delete(id);\n }\n return;\n }\n case \"CLOSED\": {\n const id = data[1];\n const so = this.openSubs.get(id);\n if (!so)\n return;\n so.closed = true;\n so.close(data[2]);\n return;\n }\n case \"NOTICE\":\n this.onnotice(data[1]);\n return;\n case \"AUTH\": {\n this.challenge = data[1];\n this._onauth?.(data[1]);\n return;\n }\n }\n } catch (err) {\n return;\n }\n }\n async send(message) {\n if (!this.connectionPromise)\n throw new Error(\"sending on closed connection\");\n this.connectionPromise.then(() => {\n this.ws?.send(message);\n });\n }\n async auth(signAuthEvent) {\n if (!this.challenge)\n throw new Error(\"can't perform auth, no challenge was received\");\n const evt = await signAuthEvent(makeAuthEvent(this.url, this.challenge));\n const ret = new Promise((resolve, reject) => {\n this.openEventPublishes.set(evt.id, { resolve, reject });\n });\n this.send('[\"AUTH\",' + JSON.stringify(evt) + \"]\");\n return ret;\n }\n async publish(event) {\n const ret = new Promise((resolve, reject) => {\n this.openEventPublishes.set(event.id, { resolve, reject });\n });\n this.send('[\"EVENT\",' + JSON.stringify(event) + \"]\");\n setTimeout(() => {\n const ep = this.openEventPublishes.get(event.id);\n if (ep) {\n ep.reject(new Error(\"publish timed out\"));\n this.openEventPublishes.delete(event.id);\n }\n }, this.publishTimeout);\n return ret;\n }\n async count(filters, params) {\n this.serial++;\n const id = params?.id || \"count:\" + this.serial;\n const ret = new Promise((resolve, reject) => {\n this.openCountRequests.set(id, { resolve, reject });\n });\n this.send('[\"COUNT\",\"' + id + '\",' + JSON.stringify(filters).substring(1));\n return ret;\n }\n subscribe(filters, params) {\n const subscription = this.prepareSubscription(filters, params);\n subscription.fire();\n return subscription;\n }\n prepareSubscription(filters, params) {\n this.serial++;\n const id = params.id || \"sub:\" + this.serial;\n const subscription = new Subscription(this, id, filters, params);\n this.openSubs.set(id, subscription);\n return subscription;\n }\n close() {\n this.closeAllSubscriptions(\"relay connection closed by us\");\n this._connected = false;\n this.ws?.close();\n }\n _onmessage(ev) {\n this.incomingMessageQueue.enqueue(ev.data);\n if (!this.queueRunning) {\n this.runQueue();\n }\n }\n};\nvar Subscription = class {\n relay;\n id;\n closed = false;\n eosed = false;\n filters;\n alreadyHaveEvent;\n receivedEvent;\n onevent;\n oneose;\n onclose;\n eoseTimeout;\n eoseTimeoutHandle;\n constructor(relay, id, filters, params) {\n this.relay = relay;\n this.filters = filters;\n this.id = id;\n this.alreadyHaveEvent = params.alreadyHaveEvent;\n this.receivedEvent = params.receivedEvent;\n this.eoseTimeout = params.eoseTimeout || relay.baseEoseTimeout;\n this.oneose = params.oneose;\n this.onclose = params.onclose;\n this.onevent = params.onevent || ((event) => {\n console.warn(\n `onevent() callback not defined for subscription '${this.id}' in relay ${this.relay.url}. event received:`,\n event\n );\n });\n }\n fire() {\n this.relay.send('[\"REQ\",\"' + this.id + '\",' + JSON.stringify(this.filters).substring(1));\n this.eoseTimeoutHandle = setTimeout(this.receivedEose.bind(this), this.eoseTimeout);\n }\n receivedEose() {\n if (this.eosed)\n return;\n clearTimeout(this.eoseTimeoutHandle);\n this.eosed = true;\n this.oneose?.();\n }\n close(reason = \"closed by caller\") {\n if (!this.closed && this.relay.connected) {\n this.relay.send('[\"CLOSE\",' + JSON.stringify(this.id) + \"]\");\n this.closed = true;\n }\n this.relay.openSubs.delete(this.id);\n this.onclose?.(reason);\n }\n};\n\n// relay.ts\nvar _WebSocket;\ntry {\n _WebSocket = WebSocket;\n} catch {\n}\nvar Relay = class extends AbstractRelay {\n constructor(url) {\n super(url, { verifyEvent, websocketImplementation: _WebSocket });\n }\n static async connect(url) {\n const relay = new Relay(url);\n await relay.connect();\n return relay;\n }\n};\n\n// abstract-pool.ts\nvar AbstractSimplePool = class {\n relays = /* @__PURE__ */ new Map();\n seenOn = /* @__PURE__ */ new Map();\n trackRelays = false;\n verifyEvent;\n trustedRelayURLs = /* @__PURE__ */ new Set();\n _WebSocket;\n constructor(opts) {\n this.verifyEvent = opts.verifyEvent;\n this._WebSocket = opts.websocketImplementation;\n }\n async ensureRelay(url, params) {\n url = normalizeURL(url);\n let relay = this.relays.get(url);\n if (!relay) {\n relay = new AbstractRelay(url, {\n verifyEvent: this.trustedRelayURLs.has(url) ? alwaysTrue : this.verifyEvent,\n websocketImplementation: this._WebSocket\n });\n if (params?.connectionTimeout)\n relay.connectionTimeout = params.connectionTimeout;\n this.relays.set(url, relay);\n }\n await relay.connect();\n return relay;\n }\n close(relays) {\n relays.map(normalizeURL).forEach((url) => {\n this.relays.get(url)?.close();\n });\n }\n subscribeMany(relays, filters, params) {\n return this.subscribeManyMap(Object.fromEntries(relays.map((url) => [url, filters])), params);\n }\n subscribeManyMap(requests, params) {\n if (this.trackRelays) {\n params.receivedEvent = (relay, id) => {\n let set = this.seenOn.get(id);\n if (!set) {\n set = /* @__PURE__ */ new Set();\n this.seenOn.set(id, set);\n }\n set.add(relay);\n };\n }\n const _knownIds = /* @__PURE__ */ new Set();\n const subs = [];\n const relaysLength = Object.keys(requests).length;\n const eosesReceived = [];\n let handleEose = (i2) => {\n eosesReceived[i2] = true;\n if (eosesReceived.filter((a) => a).length === relaysLength) {\n params.oneose?.();\n handleEose = () => {\n };\n }\n };\n const closesReceived = [];\n let handleClose = (i2, reason) => {\n handleEose(i2);\n closesReceived[i2] = reason;\n if (closesReceived.filter((a) => a).length === relaysLength) {\n params.onclose?.(closesReceived);\n handleClose = () => {\n };\n }\n };\n const localAlreadyHaveEventHandler = (id) => {\n if (params.alreadyHaveEvent?.(id)) {\n return true;\n }\n const have = _knownIds.has(id);\n _knownIds.add(id);\n return have;\n };\n const allOpened = Promise.all(\n Object.entries(requests).map(async (req, i2, arr) => {\n if (arr.indexOf(req) !== i2) {\n handleClose(i2, \"duplicate url\");\n return;\n }\n let [url, filters] = req;\n url = normalizeURL(url);\n let relay;\n try {\n relay = await this.ensureRelay(url, {\n connectionTimeout: params.maxWait ? Math.max(params.maxWait * 0.8, params.maxWait - 1e3) : void 0\n });\n } catch (err) {\n handleClose(i2, err?.message || String(err));\n return;\n }\n let subscription = relay.subscribe(filters, {\n ...params,\n oneose: () => handleEose(i2),\n onclose: (reason) => handleClose(i2, reason),\n alreadyHaveEvent: localAlreadyHaveEventHandler,\n eoseTimeout: params.maxWait\n });\n subs.push(subscription);\n })\n );\n return {\n async close() {\n await allOpened;\n subs.forEach((sub) => {\n sub.close();\n });\n }\n };\n }\n subscribeManyEose(relays, filters, params) {\n const subcloser = this.subscribeMany(relays, filters, {\n ...params,\n oneose() {\n subcloser.close();\n }\n });\n return subcloser;\n }\n async querySync(relays, filter, params) {\n return new Promise(async (resolve) => {\n const events = [];\n this.subscribeManyEose(relays, [filter], {\n ...params,\n onevent(event) {\n events.push(event);\n },\n onclose(_) {\n resolve(events);\n }\n });\n });\n }\n async get(relays, filter, params) {\n filter.limit = 1;\n const events = await this.querySync(relays, filter, params);\n events.sort((a, b) => b.created_at - a.created_at);\n return events[0] || null;\n }\n publish(relays, event) {\n return relays.map(normalizeURL).map(async (url, i2, arr) => {\n if (arr.indexOf(url) !== i2) {\n return Promise.reject(\"duplicate url\");\n }\n let r = await this.ensureRelay(url);\n return r.publish(event).then((reason) => {\n if (this.trackRelays) {\n let set = this.seenOn.get(event.id);\n if (!set) {\n set = /* @__PURE__ */ new Set();\n this.seenOn.set(event.id, set);\n }\n set.add(r);\n }\n return reason;\n });\n });\n }\n listConnectionStatus() {\n const map = /* @__PURE__ */ new Map();\n this.relays.forEach((relay, url) => map.set(url, relay.connected));\n return map;\n }\n destroy() {\n this.relays.forEach((conn) => conn.close());\n this.relays = /* @__PURE__ */ new Map();\n }\n};\n\n// pool.ts\nvar _WebSocket2;\ntry {\n _WebSocket2 = WebSocket;\n} catch {\n}\nvar SimplePool = class extends AbstractSimplePool {\n constructor() {\n super({ verifyEvent, websocketImplementation: _WebSocket2 });\n }\n};\n\n// nip19.ts\nvar nip19_exports = {};\n__export(nip19_exports, {\n BECH32_REGEX: () => BECH32_REGEX,\n Bech32MaxSize: () => Bech32MaxSize,\n NostrTypeGuard: () => NostrTypeGuard,\n decode: () => decode,\n encodeBytes: () => encodeBytes,\n naddrEncode: () => naddrEncode,\n neventEncode: () => neventEncode,\n noteEncode: () => noteEncode,\n nprofileEncode: () => nprofileEncode,\n npubEncode: () => npubEncode,\n nsecEncode: () => nsecEncode\n});\nimport { bytesToHex as bytesToHex2, concatBytes, hexToBytes } from \"@noble/hashes/utils\";\nimport { bech32 } from \"@scure/base\";\nvar NostrTypeGuard = {\n isNProfile: (value) => /^nprofile1[a-z\\d]+$/.test(value || \"\"),\n isNEvent: (value) => /^nevent1[a-z\\d]+$/.test(value || \"\"),\n isNAddr: (value) => /^naddr1[a-z\\d]+$/.test(value || \"\"),\n isNSec: (value) => /^nsec1[a-z\\d]{58}$/.test(value || \"\"),\n isNPub: (value) => /^npub1[a-z\\d]{58}$/.test(value || \"\"),\n isNote: (value) => /^note1[a-z\\d]+$/.test(value || \"\"),\n isNcryptsec: (value) => /^ncryptsec1[a-z\\d]+$/.test(value || \"\")\n};\nvar Bech32MaxSize = 5e3;\nvar BECH32_REGEX = /[\\x21-\\x7E]{1,83}1[023456789acdefghjklmnpqrstuvwxyz]{6,}/;\nfunction integerToUint8Array(number) {\n const uint8Array = new Uint8Array(4);\n uint8Array[0] = number >> 24 & 255;\n uint8Array[1] = number >> 16 & 255;\n uint8Array[2] = number >> 8 & 255;\n uint8Array[3] = number & 255;\n return uint8Array;\n}\nfunction decode(nip19) {\n let { prefix, words } = bech32.decode(nip19, Bech32MaxSize);\n let data = new Uint8Array(bech32.fromWords(words));\n switch (prefix) {\n case \"nprofile\": {\n let tlv = parseTLV(data);\n if (!tlv[0]?.[0])\n throw new Error(\"missing TLV 0 for nprofile\");\n if (tlv[0][0].length !== 32)\n throw new Error(\"TLV 0 should be 32 bytes\");\n return {\n type: \"nprofile\",\n data: {\n pubkey: bytesToHex2(tlv[0][0]),\n relays: tlv[1] ? tlv[1].map((d) => utf8Decoder.decode(d)) : []\n }\n };\n }\n case \"nevent\": {\n let tlv = parseTLV(data);\n if (!tlv[0]?.[0])\n throw new Error(\"missing TLV 0 for nevent\");\n if (tlv[0][0].length !== 32)\n throw new Error(\"TLV 0 should be 32 bytes\");\n if (tlv[2] && tlv[2][0].length !== 32)\n throw new Error(\"TLV 2 should be 32 bytes\");\n if (tlv[3] && tlv[3][0].length !== 4)\n throw new Error(\"TLV 3 should be 4 bytes\");\n return {\n type: \"nevent\",\n data: {\n id: bytesToHex2(tlv[0][0]),\n relays: tlv[1] ? tlv[1].map((d) => utf8Decoder.decode(d)) : [],\n author: tlv[2]?.[0] ? bytesToHex2(tlv[2][0]) : void 0,\n kind: tlv[3]?.[0] ? parseInt(bytesToHex2(tlv[3][0]), 16) : void 0\n }\n };\n }\n case \"naddr\": {\n let tlv = parseTLV(data);\n if (!tlv[0]?.[0])\n throw new Error(\"missing TLV 0 for naddr\");\n if (!tlv[2]?.[0])\n throw new Error(\"missing TLV 2 for naddr\");\n if (tlv[2][0].length !== 32)\n throw new Error(\"TLV 2 should be 32 bytes\");\n if (!tlv[3]?.[0])\n throw new Error(\"missing TLV 3 for naddr\");\n if (tlv[3][0].length !== 4)\n throw new Error(\"TLV 3 should be 4 bytes\");\n return {\n type: \"naddr\",\n data: {\n identifier: utf8Decoder.decode(tlv[0][0]),\n pubkey: bytesToHex2(tlv[2][0]),\n kind: parseInt(bytesToHex2(tlv[3][0]), 16),\n relays: tlv[1] ? tlv[1].map((d) => utf8Decoder.decode(d)) : []\n }\n };\n }\n case \"nsec\":\n return { type: prefix, data };\n case \"npub\":\n case \"note\":\n return { type: prefix, data: bytesToHex2(data) };\n default:\n throw new Error(`unknown prefix ${prefix}`);\n }\n}\nfunction parseTLV(data) {\n let result = {};\n let rest = data;\n while (rest.length > 0) {\n let t = rest[0];\n let l = rest[1];\n let v = rest.slice(2, 2 + l);\n rest = rest.slice(2 + l);\n if (v.length < l)\n throw new Error(`not enough data to read on TLV ${t}`);\n result[t] = result[t] || [];\n result[t].push(v);\n }\n return result;\n}\nfunction nsecEncode(key) {\n return encodeBytes(\"nsec\", key);\n}\nfunction npubEncode(hex) {\n return encodeBytes(\"npub\", hexToBytes(hex));\n}\nfunction noteEncode(hex) {\n return encodeBytes(\"note\", hexToBytes(hex));\n}\nfunction encodeBech32(prefix, data) {\n let words = bech32.toWords(data);\n return bech32.encode(prefix, words, Bech32MaxSize);\n}\nfunction encodeBytes(prefix, bytes) {\n return encodeBech32(prefix, bytes);\n}\nfunction nprofileEncode(profile) {\n let data = encodeTLV({\n 0: [hexToBytes(profile.pubkey)],\n 1: (profile.relays || []).map((url) => utf8Encoder.encode(url))\n });\n return encodeBech32(\"nprofile\", data);\n}\nfunction neventEncode(event) {\n let kindArray;\n if (event.kind !== void 0) {\n kindArray = integerToUint8Array(event.kind);\n }\n let data = encodeTLV({\n 0: [hexToBytes(event.id)],\n 1: (event.relays || []).map((url) => utf8Encoder.encode(url)),\n 2: event.author ? [hexToBytes(event.author)] : [],\n 3: kindArray ? [new Uint8Array(kindArray)] : []\n });\n return encodeBech32(\"nevent\", data);\n}\nfunction naddrEncode(addr) {\n let kind = new ArrayBuffer(4);\n new DataView(kind).setUint32(0, addr.kind, false);\n let data = encodeTLV({\n 0: [utf8Encoder.encode(addr.identifier)],\n 1: (addr.relays || []).map((url) => utf8Encoder.encode(url)),\n 2: [hexToBytes(addr.pubkey)],\n 3: [new Uint8Array(kind)]\n });\n return encodeBech32(\"naddr\", data);\n}\nfunction encodeTLV(tlv) {\n let entries = [];\n Object.entries(tlv).reverse().forEach(([t, vs]) => {\n vs.forEach((v) => {\n let entry = new Uint8Array(v.length + 2);\n entry.set([parseInt(t)], 0);\n entry.set([v.length], 1);\n entry.set(v, 2);\n entries.push(entry);\n });\n });\n return concatBytes(...entries);\n}\n\n// references.ts\nvar mentionRegex = /\\bnostr:((note|npub|naddr|nevent|nprofile)1\\w+)\\b|#\\[(\\d+)\\]/g;\nfunction parseReferences(evt) {\n let references = [];\n for (let ref of evt.content.matchAll(mentionRegex)) {\n if (ref[2]) {\n try {\n let { type, data } = decode(ref[1]);\n switch (type) {\n case \"npub\": {\n references.push({\n text: ref[0],\n profile: { pubkey: data, relays: [] }\n });\n break;\n }\n case \"nprofile\": {\n references.push({\n text: ref[0],\n profile: data\n });\n break;\n }\n case \"note\": {\n references.push({\n text: ref[0],\n event: { id: data, relays: [] }\n });\n break;\n }\n case \"nevent\": {\n references.push({\n text: ref[0],\n event: data\n });\n break;\n }\n case \"naddr\": {\n references.push({\n text: ref[0],\n address: data\n });\n break;\n }\n }\n } catch (err) {\n }\n } else if (ref[3]) {\n let idx = parseInt(ref[3], 10);\n let tag = evt.tags[idx];\n if (!tag)\n continue;\n switch (tag[0]) {\n case \"p\": {\n references.push({\n text: ref[0],\n profile: { pubkey: tag[1], relays: tag[2] ? [tag[2]] : [] }\n });\n break;\n }\n case \"e\": {\n references.push({\n text: ref[0],\n event: { id: tag[1], relays: tag[2] ? [tag[2]] : [] }\n });\n break;\n }\n case \"a\": {\n try {\n let [kind, pubkey, identifier] = tag[1].split(\":\");\n references.push({\n text: ref[0],\n address: {\n identifier,\n pubkey,\n kind: parseInt(kind, 10),\n relays: tag[2] ? [tag[2]] : []\n }\n });\n } catch (err) {\n }\n break;\n }\n }\n }\n }\n return references;\n}\n\n// nip04.ts\nvar nip04_exports = {};\n__export(nip04_exports, {\n decrypt: () => decrypt,\n encrypt: () => encrypt\n});\nimport { bytesToHex as bytesToHex3, randomBytes } from \"@noble/hashes/utils\";\nimport { secp256k1 } from \"@noble/curves/secp256k1\";\nimport { cbc } from \"@noble/ciphers/aes\";\nimport { base64 } from \"@scure/base\";\nasync function encrypt(secretKey, pubkey, text) {\n const privkey = secretKey instanceof Uint8Array ? bytesToHex3(secretKey) : secretKey;\n const key = secp256k1.getSharedSecret(privkey, \"02\" + pubkey);\n const normalizedKey = getNormalizedX(key);\n let iv = Uint8Array.from(randomBytes(16));\n let plaintext = utf8Encoder.encode(text);\n let ciphertext = cbc(normalizedKey, iv).encrypt(plaintext);\n let ctb64 = base64.encode(new Uint8Array(ciphertext));\n let ivb64 = base64.encode(new Uint8Array(iv.buffer));\n return `${ctb64}?iv=${ivb64}`;\n}\nasync function decrypt(secretKey, pubkey, data) {\n const privkey = secretKey instanceof Uint8Array ? bytesToHex3(secretKey) : secretKey;\n let [ctb64, ivb64] = data.split(\"?iv=\");\n let key = secp256k1.getSharedSecret(privkey, \"02\" + pubkey);\n let normalizedKey = getNormalizedX(key);\n let iv = base64.decode(ivb64);\n let ciphertext = base64.decode(ctb64);\n let plaintext = cbc(normalizedKey, iv).decrypt(ciphertext);\n return utf8Decoder.decode(plaintext);\n}\nfunction getNormalizedX(key) {\n return key.slice(1, 33);\n}\n\n// nip05.ts\nvar nip05_exports = {};\n__export(nip05_exports, {\n NIP05_REGEX: () => NIP05_REGEX,\n isNip05: () => isNip05,\n isValid: () => isValid,\n queryProfile: () => queryProfile,\n searchDomain: () => searchDomain,\n useFetchImplementation: () => useFetchImplementation\n});\nvar NIP05_REGEX = /^(?:([\\w.+-]+)@)?([\\w_-]+(\\.[\\w_-]+)+)$/;\nvar isNip05 = (value) => NIP05_REGEX.test(value || \"\");\nvar _fetch;\ntry {\n _fetch = fetch;\n} catch (_) {\n null;\n}\nfunction useFetchImplementation(fetchImplementation) {\n _fetch = fetchImplementation;\n}\nasync function searchDomain(domain, query = \"\") {\n try {\n const url = `https://${domain}/.well-known/nostr.json?name=${query}`;\n const res = await _fetch(url, { redirect: \"manual\" });\n if (res.status !== 200) {\n throw Error(\"Wrong response code\");\n }\n const json = await res.json();\n return json.names;\n } catch (_) {\n return {};\n }\n}\nasync function queryProfile(fullname) {\n const match = fullname.match(NIP05_REGEX);\n if (!match)\n return null;\n const [, name = \"_\", domain] = match;\n try {\n const url = `https://${domain}/.well-known/nostr.json?name=${name}`;\n const res = await _fetch(url, { redirect: \"manual\" });\n if (res.status !== 200) {\n throw Error(\"Wrong response code\");\n }\n const json = await res.json();\n const pubkey = json.names[name];\n return pubkey ? { pubkey, relays: json.relays?.[pubkey] } : null;\n } catch (_e) {\n return null;\n }\n}\nasync function isValid(pubkey, nip05) {\n const res = await queryProfile(nip05);\n return res ? res.pubkey === pubkey : false;\n}\n\n// nip10.ts\nvar nip10_exports = {};\n__export(nip10_exports, {\n parse: () => parse\n});\nfunction parse(event) {\n const result = {\n reply: void 0,\n root: void 0,\n mentions: [],\n profiles: []\n };\n const eTags = [];\n for (const tag of event.tags) {\n if (tag[0] === \"e\" && tag[1]) {\n eTags.push(tag);\n }\n if (tag[0] === \"p\" && tag[1]) {\n result.profiles.push({\n pubkey: tag[1],\n relays: tag[2] ? [tag[2]] : []\n });\n }\n }\n for (let eTagIndex = 0; eTagIndex < eTags.length; eTagIndex++) {\n const eTag = eTags[eTagIndex];\n const [_, eTagEventId, eTagRelayUrl, eTagMarker] = eTag;\n const eventPointer = {\n id: eTagEventId,\n relays: eTagRelayUrl ? [eTagRelayUrl] : []\n };\n const isFirstETag = eTagIndex === 0;\n const isLastETag = eTagIndex === eTags.length - 1;\n if (eTagMarker === \"root\") {\n result.root = eventPointer;\n continue;\n }\n if (eTagMarker === \"reply\") {\n result.reply = eventPointer;\n continue;\n }\n if (eTagMarker === \"mention\") {\n result.mentions.push(eventPointer);\n continue;\n }\n if (isFirstETag) {\n result.root = eventPointer;\n continue;\n }\n if (isLastETag) {\n result.reply = eventPointer;\n continue;\n }\n result.mentions.push(eventPointer);\n }\n return result;\n}\n\n// nip11.ts\nvar nip11_exports = {};\n__export(nip11_exports, {\n fetchRelayInformation: () => fetchRelayInformation,\n useFetchImplementation: () => useFetchImplementation2\n});\nvar _fetch2;\ntry {\n _fetch2 = fetch;\n} catch {\n}\nfunction useFetchImplementation2(fetchImplementation) {\n _fetch2 = fetchImplementation;\n}\nasync function fetchRelayInformation(url) {\n return await (await fetch(url.replace(\"ws://\", \"http://\").replace(\"wss://\", \"https://\"), {\n headers: { Accept: \"application/nostr+json\" }\n })).json();\n}\n\n// nip13.ts\nvar nip13_exports = {};\n__export(nip13_exports, {\n fastEventHash: () => fastEventHash,\n getPow: () => getPow,\n minePow: () => minePow\n});\nimport { bytesToHex as bytesToHex4 } from \"@noble/hashes/utils\";\nimport { sha256 as sha2562 } from \"@noble/hashes/sha256\";\nfunction getPow(hex) {\n let count = 0;\n for (let i2 = 0; i2 < 64; i2 += 8) {\n const nibble = parseInt(hex.substring(i2, i2 + 8), 16);\n if (nibble === 0) {\n count += 32;\n } else {\n count += Math.clz32(nibble);\n break;\n }\n }\n return count;\n}\nfunction minePow(unsigned, difficulty) {\n let count = 0;\n const event = unsigned;\n const tag = [\"nonce\", count.toString(), difficulty.toString()];\n event.tags.push(tag);\n while (true) {\n const now2 = Math.floor(new Date().getTime() / 1e3);\n if (now2 !== event.created_at) {\n count = 0;\n event.created_at = now2;\n }\n tag[1] = (++count).toString();\n event.id = fastEventHash(event);\n if (getPow(event.id) >= difficulty) {\n break;\n }\n }\n return event;\n}\nfunction fastEventHash(evt) {\n return bytesToHex4(\n sha2562(utf8Encoder.encode(JSON.stringify([0, evt.pubkey, evt.created_at, evt.kind, evt.tags, evt.content])))\n );\n}\n\n// nip18.ts\nvar nip18_exports = {};\n__export(nip18_exports, {\n finishRepostEvent: () => finishRepostEvent,\n getRepostedEvent: () => getRepostedEvent,\n getRepostedEventPointer: () => getRepostedEventPointer\n});\nfunction finishRepostEvent(t, reposted, relayUrl, privateKey) {\n return finalizeEvent(\n {\n kind: Repost,\n tags: [...t.tags ?? [], [\"e\", reposted.id, relayUrl], [\"p\", reposted.pubkey]],\n content: t.content === \"\" ? \"\" : JSON.stringify(reposted),\n created_at: t.created_at\n },\n privateKey\n );\n}\nfunction getRepostedEventPointer(event) {\n if (event.kind !== Repost) {\n return void 0;\n }\n let lastETag;\n let lastPTag;\n for (let i2 = event.tags.length - 1; i2 >= 0 && (lastETag === void 0 || lastPTag === void 0); i2--) {\n const tag = event.tags[i2];\n if (tag.length >= 2) {\n if (tag[0] === \"e\" && lastETag === void 0) {\n lastETag = tag;\n } else if (tag[0] === \"p\" && lastPTag === void 0) {\n lastPTag = tag;\n }\n }\n }\n if (lastETag === void 0) {\n return void 0;\n }\n return {\n id: lastETag[1],\n relays: [lastETag[2], lastPTag?.[2]].filter((x) => typeof x === \"string\"),\n author: lastPTag?.[1]\n };\n}\nfunction getRepostedEvent(event, { skipVerification } = {}) {\n const pointer = getRepostedEventPointer(event);\n if (pointer === void 0 || event.content === \"\") {\n return void 0;\n }\n let repostedEvent;\n try {\n repostedEvent = JSON.parse(event.content);\n } catch (error) {\n return void 0;\n }\n if (repostedEvent.id !== pointer.id) {\n return void 0;\n }\n if (!skipVerification && !verifyEvent(repostedEvent)) {\n return void 0;\n }\n return repostedEvent;\n}\n\n// nip21.ts\nvar nip21_exports = {};\n__export(nip21_exports, {\n NOSTR_URI_REGEX: () => NOSTR_URI_REGEX,\n parse: () => parse2,\n test: () => test\n});\nvar NOSTR_URI_REGEX = new RegExp(`nostr:(${BECH32_REGEX.source})`);\nfunction test(value) {\n return typeof value === \"string\" && new RegExp(`^${NOSTR_URI_REGEX.source}$`).test(value);\n}\nfunction parse2(uri) {\n const match = uri.match(new RegExp(`^${NOSTR_URI_REGEX.source}$`));\n if (!match)\n throw new Error(`Invalid Nostr URI: ${uri}`);\n return {\n uri: match[0],\n value: match[1],\n decoded: decode(match[1])\n };\n}\n\n// nip25.ts\nvar nip25_exports = {};\n__export(nip25_exports, {\n finishReactionEvent: () => finishReactionEvent,\n getReactedEventPointer: () => getReactedEventPointer\n});\nfunction finishReactionEvent(t, reacted, privateKey) {\n const inheritedTags = reacted.tags.filter((tag) => tag.length >= 2 && (tag[0] === \"e\" || tag[0] === \"p\"));\n return finalizeEvent(\n {\n ...t,\n kind: Reaction,\n tags: [...t.tags ?? [], ...inheritedTags, [\"e\", reacted.id], [\"p\", reacted.pubkey]],\n content: t.content ?? \"+\"\n },\n privateKey\n );\n}\nfunction getReactedEventPointer(event) {\n if (event.kind !== Reaction) {\n return void 0;\n }\n let lastETag;\n let lastPTag;\n for (let i2 = event.tags.length - 1; i2 >= 0 && (lastETag === void 0 || lastPTag === void 0); i2--) {\n const tag = event.tags[i2];\n if (tag.length >= 2) {\n if (tag[0] === \"e\" && lastETag === void 0) {\n lastETag = tag;\n } else if (tag[0] === \"p\" && lastPTag === void 0) {\n lastPTag = tag;\n }\n }\n }\n if (lastETag === void 0 || lastPTag === void 0) {\n return void 0;\n }\n return {\n id: lastETag[1],\n relays: [lastETag[2], lastPTag[2]].filter((x) => x !== void 0),\n author: lastPTag[1]\n };\n}\n\n// nip27.ts\nvar nip27_exports = {};\n__export(nip27_exports, {\n matchAll: () => matchAll,\n regex: () => regex,\n replaceAll: () => replaceAll\n});\nvar regex = () => new RegExp(`\\\\b${NOSTR_URI_REGEX.source}\\\\b`, \"g\");\nfunction* matchAll(content) {\n const matches = content.matchAll(regex());\n for (const match of matches) {\n try {\n const [uri, value] = match;\n yield {\n uri,\n value,\n decoded: decode(value),\n start: match.index,\n end: match.index + uri.length\n };\n } catch (_e) {\n }\n }\n}\nfunction replaceAll(content, replacer) {\n return content.replaceAll(regex(), (uri, value) => {\n return replacer({\n uri,\n value,\n decoded: decode(value)\n });\n });\n}\n\n// nip28.ts\nvar nip28_exports = {};\n__export(nip28_exports, {\n channelCreateEvent: () => channelCreateEvent,\n channelHideMessageEvent: () => channelHideMessageEvent,\n channelMessageEvent: () => channelMessageEvent,\n channelMetadataEvent: () => channelMetadataEvent,\n channelMuteUserEvent: () => channelMuteUserEvent\n});\nvar channelCreateEvent = (t, privateKey) => {\n let content;\n if (typeof t.content === \"object\") {\n content = JSON.stringify(t.content);\n } else if (typeof t.content === \"string\") {\n content = t.content;\n } else {\n return void 0;\n }\n return finalizeEvent(\n {\n kind: ChannelCreation,\n tags: [...t.tags ?? []],\n content,\n created_at: t.created_at\n },\n privateKey\n );\n};\nvar channelMetadataEvent = (t, privateKey) => {\n let content;\n if (typeof t.content === \"object\") {\n content = JSON.stringify(t.content);\n } else if (typeof t.content === \"string\") {\n content = t.content;\n } else {\n return void 0;\n }\n return finalizeEvent(\n {\n kind: ChannelMetadata,\n tags: [[\"e\", t.channel_create_event_id], ...t.tags ?? []],\n content,\n created_at: t.created_at\n },\n privateKey\n );\n};\nvar channelMessageEvent = (t, privateKey) => {\n const tags = [[\"e\", t.channel_create_event_id, t.relay_url, \"root\"]];\n if (t.reply_to_channel_message_event_id) {\n tags.push([\"e\", t.reply_to_channel_message_event_id, t.relay_url, \"reply\"]);\n }\n return finalizeEvent(\n {\n kind: ChannelMessage,\n tags: [...tags, ...t.tags ?? []],\n content: t.content,\n created_at: t.created_at\n },\n privateKey\n );\n};\nvar channelHideMessageEvent = (t, privateKey) => {\n let content;\n if (typeof t.content === \"object\") {\n content = JSON.stringify(t.content);\n } else if (typeof t.content === \"string\") {\n content = t.content;\n } else {\n return void 0;\n }\n return finalizeEvent(\n {\n kind: ChannelHideMessage,\n tags: [[\"e\", t.channel_message_event_id], ...t.tags ?? []],\n content,\n created_at: t.created_at\n },\n privateKey\n );\n};\nvar channelMuteUserEvent = (t, privateKey) => {\n let content;\n if (typeof t.content === \"object\") {\n content = JSON.stringify(t.content);\n } else if (typeof t.content === \"string\") {\n content = t.content;\n } else {\n return void 0;\n }\n return finalizeEvent(\n {\n kind: ChannelMuteUser,\n tags: [[\"p\", t.pubkey_to_mute], ...t.tags ?? []],\n content,\n created_at: t.created_at\n },\n privateKey\n );\n};\n\n// nip30.ts\nvar nip30_exports = {};\n__export(nip30_exports, {\n EMOJI_SHORTCODE_REGEX: () => EMOJI_SHORTCODE_REGEX,\n matchAll: () => matchAll2,\n regex: () => regex2,\n replaceAll: () => replaceAll2\n});\nvar EMOJI_SHORTCODE_REGEX = /:(\\w+):/;\nvar regex2 = () => new RegExp(`\\\\B${EMOJI_SHORTCODE_REGEX.source}\\\\B`, \"g\");\nfunction* matchAll2(content) {\n const matches = content.matchAll(regex2());\n for (const match of matches) {\n try {\n const [shortcode, name] = match;\n yield {\n shortcode,\n name,\n start: match.index,\n end: match.index + shortcode.length\n };\n } catch (_e) {\n }\n }\n}\nfunction replaceAll2(content, replacer) {\n return content.replaceAll(regex2(), (shortcode, name) => {\n return replacer({\n shortcode,\n name\n });\n });\n}\n\n// nip39.ts\nvar nip39_exports = {};\n__export(nip39_exports, {\n useFetchImplementation: () => useFetchImplementation3,\n validateGithub: () => validateGithub\n});\nvar _fetch3;\ntry {\n _fetch3 = fetch;\n} catch {\n}\nfunction useFetchImplementation3(fetchImplementation) {\n _fetch3 = fetchImplementation;\n}\nasync function validateGithub(pubkey, username, proof) {\n try {\n let res = await (await _fetch3(`https://gist.github.com/${username}/${proof}/raw`)).text();\n return res === `Verifying that I control the following Nostr public key: ${pubkey}`;\n } catch (_) {\n return false;\n }\n}\n\n// nip44.ts\nvar nip44_exports = {};\n__export(nip44_exports, {\n decrypt: () => decrypt2,\n encrypt: () => encrypt2,\n getConversationKey: () => getConversationKey,\n v2: () => v2\n});\nimport { chacha20 } from \"@noble/ciphers/chacha\";\nimport { equalBytes } from \"@noble/ciphers/utils\";\nimport { secp256k1 as secp256k12 } from \"@noble/curves/secp256k1\";\nimport { extract as hkdf_extract, expand as hkdf_expand } from \"@noble/hashes/hkdf\";\nimport { hmac } from \"@noble/hashes/hmac\";\nimport { sha256 as sha2563 } from \"@noble/hashes/sha256\";\nimport { concatBytes as concatBytes2, randomBytes as randomBytes2 } from \"@noble/hashes/utils\";\nimport { base64 as base642 } from \"@scure/base\";\nvar minPlaintextSize = 1;\nvar maxPlaintextSize = 65535;\nfunction getConversationKey(privkeyA, pubkeyB) {\n const sharedX = secp256k12.getSharedSecret(privkeyA, \"02\" + pubkeyB).subarray(1, 33);\n return hkdf_extract(sha2563, sharedX, \"nip44-v2\");\n}\nfunction getMessageKeys(conversationKey, nonce) {\n const keys = hkdf_expand(sha2563, conversationKey, nonce, 76);\n return {\n chacha_key: keys.subarray(0, 32),\n chacha_nonce: keys.subarray(32, 44),\n hmac_key: keys.subarray(44, 76)\n };\n}\nfunction calcPaddedLen(len) {\n if (!Number.isSafeInteger(len) || len < 1)\n throw new Error(\"expected positive integer\");\n if (len <= 32)\n return 32;\n const nextPower = 1 << Math.floor(Math.log2(len - 1)) + 1;\n const chunk = nextPower <= 256 ? 32 : nextPower / 8;\n return chunk * (Math.floor((len - 1) / chunk) + 1);\n}\nfunction writeU16BE(num) {\n if (!Number.isSafeInteger(num) || num < minPlaintextSize || num > maxPlaintextSize)\n throw new Error(\"invalid plaintext size: must be between 1 and 65535 bytes\");\n const arr = new Uint8Array(2);\n new DataView(arr.buffer).setUint16(0, num, false);\n return arr;\n}\nfunction pad(plaintext) {\n const unpadded = utf8Encoder.encode(plaintext);\n const unpaddedLen = unpadded.length;\n const prefix = writeU16BE(unpaddedLen);\n const suffix = new Uint8Array(calcPaddedLen(unpaddedLen) - unpaddedLen);\n return concatBytes2(prefix, unpadded, suffix);\n}\nfunction unpad(padded) {\n const unpaddedLen = new DataView(padded.buffer).getUint16(0);\n const unpadded = padded.subarray(2, 2 + unpaddedLen);\n if (unpaddedLen < minPlaintextSize || unpaddedLen > maxPlaintextSize || unpadded.length !== unpaddedLen || padded.length !== 2 + calcPaddedLen(unpaddedLen))\n throw new Error(\"invalid padding\");\n return utf8Decoder.decode(unpadded);\n}\nfunction hmacAad(key, message, aad) {\n if (aad.length !== 32)\n throw new Error(\"AAD associated data must be 32 bytes\");\n const combined = concatBytes2(aad, message);\n return hmac(sha2563, key, combined);\n}\nfunction decodePayload(payload) {\n if (typeof payload !== \"string\")\n throw new Error(\"payload must be a valid string\");\n const plen = payload.length;\n if (plen < 132 || plen > 87472)\n throw new Error(\"invalid payload length: \" + plen);\n if (payload[0] === \"#\")\n throw new Error(\"unknown encryption version\");\n let data;\n try {\n data = base642.decode(payload);\n } catch (error) {\n throw new Error(\"invalid base64: \" + error.message);\n }\n const dlen = data.length;\n if (dlen < 99 || dlen > 65603)\n throw new Error(\"invalid data length: \" + dlen);\n const vers = data[0];\n if (vers !== 2)\n throw new Error(\"unknown encryption version \" + vers);\n return {\n nonce: data.subarray(1, 33),\n ciphertext: data.subarray(33, -32),\n mac: data.subarray(-32)\n };\n}\nfunction encrypt2(plaintext, conversationKey, nonce = randomBytes2(32)) {\n const { chacha_key, chacha_nonce, hmac_key } = getMessageKeys(conversationKey, nonce);\n const padded = pad(plaintext);\n const ciphertext = chacha20(chacha_key, chacha_nonce, padded);\n const mac = hmacAad(hmac_key, ciphertext, nonce);\n return base642.encode(concatBytes2(new Uint8Array([2]), nonce, ciphertext, mac));\n}\nfunction decrypt2(payload, conversationKey) {\n const { nonce, ciphertext, mac } = decodePayload(payload);\n const { chacha_key, chacha_nonce, hmac_key } = getMessageKeys(conversationKey, nonce);\n const calculatedMac = hmacAad(hmac_key, ciphertext, nonce);\n if (!equalBytes(calculatedMac, mac))\n throw new Error(\"invalid MAC\");\n const padded = chacha20(chacha_key, chacha_nonce, ciphertext);\n return unpad(padded);\n}\nvar v2 = {\n utils: {\n getConversationKey,\n calcPaddedLen\n },\n encrypt: encrypt2,\n decrypt: decrypt2\n};\n\n// nip47.ts\nvar nip47_exports = {};\n__export(nip47_exports, {\n makeNwcRequestEvent: () => makeNwcRequestEvent,\n parseConnectionString: () => parseConnectionString\n});\nfunction parseConnectionString(connectionString) {\n const { pathname, searchParams } = new URL(connectionString);\n const pubkey = pathname;\n const relay = searchParams.get(\"relay\");\n const secret = searchParams.get(\"secret\");\n if (!pubkey || !relay || !secret) {\n throw new Error(\"invalid connection string\");\n }\n return { pubkey, relay, secret };\n}\nasync function makeNwcRequestEvent(pubkey, secretKey, invoice) {\n const content = {\n method: \"pay_invoice\",\n params: {\n invoice\n }\n };\n const encryptedContent = await encrypt(secretKey, pubkey, JSON.stringify(content));\n const eventTemplate = {\n kind: NWCWalletRequest,\n created_at: Math.round(Date.now() / 1e3),\n content: encryptedContent,\n tags: [[\"p\", pubkey]]\n };\n return finalizeEvent(eventTemplate, secretKey);\n}\n\n// nip57.ts\nvar nip57_exports = {};\n__export(nip57_exports, {\n getZapEndpoint: () => getZapEndpoint,\n makeZapReceipt: () => makeZapReceipt,\n makeZapRequest: () => makeZapRequest,\n useFetchImplementation: () => useFetchImplementation4,\n validateZapRequest: () => validateZapRequest\n});\nimport { bech32 as bech322 } from \"@scure/base\";\nvar _fetch4;\ntry {\n _fetch4 = fetch;\n} catch {\n}\nfunction useFetchImplementation4(fetchImplementation) {\n _fetch4 = fetchImplementation;\n}\nasync function getZapEndpoint(metadata) {\n try {\n let lnurl = \"\";\n let { lud06, lud16 } = JSON.parse(metadata.content);\n if (lud06) {\n let { words } = bech322.decode(lud06, 1e3);\n let data = bech322.fromWords(words);\n lnurl = utf8Decoder.decode(data);\n } else if (lud16) {\n let [name, domain] = lud16.split(\"@\");\n lnurl = new URL(`/.well-known/lnurlp/${name}`, `https://${domain}`).toString();\n } else {\n return null;\n }\n let res = await _fetch4(lnurl);\n let body = await res.json();\n if (body.allowsNostr && body.nostrPubkey) {\n return body.callback;\n }\n } catch (err) {\n }\n return null;\n}\nfunction makeZapRequest({\n profile,\n event,\n amount,\n relays,\n comment = \"\"\n}) {\n if (!amount)\n throw new Error(\"amount not given\");\n if (!profile)\n throw new Error(\"profile not given\");\n let zr = {\n kind: 9734,\n created_at: Math.round(Date.now() / 1e3),\n content: comment,\n tags: [\n [\"p\", profile],\n [\"amount\", amount.toString()],\n [\"relays\", ...relays]\n ]\n };\n if (event) {\n zr.tags.push([\"e\", event]);\n }\n return zr;\n}\nfunction validateZapRequest(zapRequestString) {\n let zapRequest;\n try {\n zapRequest = JSON.parse(zapRequestString);\n } catch (err) {\n return \"Invalid zap request JSON.\";\n }\n if (!validateEvent(zapRequest))\n return \"Zap request is not a valid Nostr event.\";\n if (!verifyEvent(zapRequest))\n return \"Invalid signature on zap request.\";\n let p = zapRequest.tags.find(([t, v]) => t === \"p\" && v);\n if (!p)\n return \"Zap request doesn't have a 'p' tag.\";\n if (!p[1].match(/^[a-f0-9]{64}$/))\n return \"Zap request 'p' tag is not valid hex.\";\n let e = zapRequest.tags.find(([t, v]) => t === \"e\" && v);\n if (e && !e[1].match(/^[a-f0-9]{64}$/))\n return \"Zap request 'e' tag is not valid hex.\";\n let relays = zapRequest.tags.find(([t, v]) => t === \"relays\" && v);\n if (!relays)\n return \"Zap request doesn't have a 'relays' tag.\";\n return null;\n}\nfunction makeZapReceipt({\n zapRequest,\n preimage,\n bolt11,\n paidAt\n}) {\n let zr = JSON.parse(zapRequest);\n let tagsFromZapRequest = zr.tags.filter(([t]) => t === \"e\" || t === \"p\" || t === \"a\");\n let zap = {\n kind: 9735,\n created_at: Math.round(paidAt.getTime() / 1e3),\n content: \"\",\n tags: [...tagsFromZapRequest, [\"P\", zr.pubkey], [\"bolt11\", bolt11], [\"description\", zapRequest]]\n };\n if (preimage) {\n zap.tags.push([\"preimage\", preimage]);\n }\n return zap;\n}\n\n// nip59.ts\nvar nip59_exports = {};\n__export(nip59_exports, {\n createRumor: () => createRumor,\n createSeal: () => createSeal,\n createWrap: () => createWrap,\n unwrapEvent: () => unwrapEvent,\n unwrapManyEvents: () => unwrapManyEvents,\n wrapEvent: () => wrapEvent,\n wrapManyEvents: () => wrapManyEvents\n});\nvar TWO_DAYS = 2 * 24 * 60 * 60;\nvar now = () => Math.round(Date.now() / 1e3);\nvar randomNow = () => Math.round(now() - Math.random() * TWO_DAYS);\nvar nip44ConversationKey = (privateKey, publicKey) => getConversationKey(privateKey, publicKey);\nvar nip44Encrypt = (data, privateKey, publicKey) => encrypt2(JSON.stringify(data), nip44ConversationKey(privateKey, publicKey));\nvar nip44Decrypt = (data, privateKey) => JSON.parse(decrypt2(data.content, nip44ConversationKey(privateKey, data.pubkey)));\nfunction createRumor(event, privateKey) {\n const rumor = {\n created_at: now(),\n content: \"\",\n tags: [],\n ...event,\n pubkey: getPublicKey(privateKey)\n };\n rumor.id = getEventHash(rumor);\n return rumor;\n}\nfunction createSeal(rumor, privateKey, recipientPublicKey) {\n return finalizeEvent(\n {\n kind: Seal,\n content: nip44Encrypt(rumor, privateKey, recipientPublicKey),\n created_at: randomNow(),\n tags: []\n },\n privateKey\n );\n}\nfunction createWrap(seal, recipientPublicKey) {\n const randomKey = generateSecretKey();\n return finalizeEvent(\n {\n kind: GiftWrap,\n content: nip44Encrypt(seal, randomKey, recipientPublicKey),\n created_at: randomNow(),\n tags: [[\"p\", recipientPublicKey]]\n },\n randomKey\n );\n}\nfunction wrapEvent(event, senderPrivateKey, recipientPublicKey) {\n const rumor = createRumor(event, senderPrivateKey);\n const seal = createSeal(rumor, senderPrivateKey, recipientPublicKey);\n return createWrap(seal, recipientPublicKey);\n}\nfunction wrapManyEvents(event, senderPrivateKey, recipientsPublicKeys) {\n if (!recipientsPublicKeys || recipientsPublicKeys.length === 0) {\n throw new Error(\"At least one recipient is required.\");\n }\n const senderPublicKey = getPublicKey(senderPrivateKey);\n const wrappeds = [wrapEvent(event, senderPrivateKey, senderPublicKey)];\n recipientsPublicKeys.forEach((recipientPublicKey) => {\n wrappeds.push(wrapEvent(event, senderPrivateKey, recipientPublicKey));\n });\n return wrappeds;\n}\nfunction unwrapEvent(wrap, recipientPrivateKey) {\n const unwrappedSeal = nip44Decrypt(wrap, recipientPrivateKey);\n return nip44Decrypt(unwrappedSeal, recipientPrivateKey);\n}\nfunction unwrapManyEvents(wrappedEvents, recipientPrivateKey) {\n let unwrappedEvents = [];\n wrappedEvents.forEach((e) => {\n unwrappedEvents.push(unwrapEvent(e, recipientPrivateKey));\n });\n unwrappedEvents.sort((a, b) => a.created_at - b.created_at);\n return unwrappedEvents;\n}\n\n// nip98.ts\nvar nip98_exports = {};\n__export(nip98_exports, {\n getToken: () => getToken,\n hashPayload: () => hashPayload,\n unpackEventFromToken: () => unpackEventFromToken,\n validateEvent: () => validateEvent2,\n validateEventKind: () => validateEventKind,\n validateEventMethodTag: () => validateEventMethodTag,\n validateEventPayloadTag: () => validateEventPayloadTag,\n validateEventTimestamp: () => validateEventTimestamp,\n validateEventUrlTag: () => validateEventUrlTag,\n validateToken: () => validateToken\n});\nimport { sha256 as sha2564 } from \"@noble/hashes/sha256\";\nimport { bytesToHex as bytesToHex5 } from \"@noble/hashes/utils\";\nimport { base64 as base643 } from \"@scure/base\";\nvar _authorizationScheme = \"Nostr \";\nasync function getToken(loginUrl, httpMethod, sign, includeAuthorizationScheme = false, payload) {\n const event = {\n kind: HTTPAuth,\n tags: [\n [\"u\", loginUrl],\n [\"method\", httpMethod]\n ],\n created_at: Math.round(new Date().getTime() / 1e3),\n content: \"\"\n };\n if (payload) {\n event.tags.push([\"payload\", hashPayload(payload)]);\n }\n const signedEvent = await sign(event);\n const authorizationScheme = includeAuthorizationScheme ? _authorizationScheme : \"\";\n return authorizationScheme + base643.encode(utf8Encoder.encode(JSON.stringify(signedEvent)));\n}\nasync function validateToken(token, url, method) {\n const event = await unpackEventFromToken(token).catch((error) => {\n throw error;\n });\n const valid = await validateEvent2(event, url, method).catch((error) => {\n throw error;\n });\n return valid;\n}\nasync function unpackEventFromToken(token) {\n if (!token) {\n throw new Error(\"Missing token\");\n }\n token = token.replace(_authorizationScheme, \"\");\n const eventB64 = utf8Decoder.decode(base643.decode(token));\n if (!eventB64 || eventB64.length === 0 || !eventB64.startsWith(\"{\")) {\n throw new Error(\"Invalid token\");\n }\n const event = JSON.parse(eventB64);\n return event;\n}\nfunction validateEventTimestamp(event) {\n if (!event.created_at) {\n return false;\n }\n return Math.round(new Date().getTime() / 1e3) - event.created_at < 60;\n}\nfunction validateEventKind(event) {\n return event.kind === HTTPAuth;\n}\nfunction validateEventUrlTag(event, url) {\n const urlTag = event.tags.find((t) => t[0] === \"u\");\n if (!urlTag) {\n return false;\n }\n return urlTag.length > 0 && urlTag[1] === url;\n}\nfunction validateEventMethodTag(event, method) {\n const methodTag = event.tags.find((t) => t[0] === \"method\");\n if (!methodTag) {\n return false;\n }\n return methodTag.length > 0 && methodTag[1].toLowerCase() === method.toLowerCase();\n}\nfunction hashPayload(payload) {\n const hash = sha2564(utf8Encoder.encode(JSON.stringify(payload)));\n return bytesToHex5(hash);\n}\nfunction validateEventPayloadTag(event, payload) {\n const payloadTag = event.tags.find((t) => t[0] === \"payload\");\n if (!payloadTag) {\n return false;\n }\n const payloadHash = hashPayload(payload);\n return payloadTag.length > 0 && payloadTag[1] === payloadHash;\n}\nasync function validateEvent2(event, url, method, body) {\n if (!verifyEvent(event)) {\n throw new Error(\"Invalid nostr event, signature invalid\");\n }\n if (!validateEventKind(event)) {\n throw new Error(\"Invalid nostr event, kind invalid\");\n }\n if (!validateEventTimestamp(event)) {\n throw new Error(\"Invalid nostr event, created_at timestamp invalid\");\n }\n if (!validateEventUrlTag(event, url)) {\n throw new Error(\"Invalid nostr event, url tag invalid\");\n }\n if (!validateEventMethodTag(event, method)) {\n throw new Error(\"Invalid nostr event, method tag invalid\");\n }\n if (Boolean(body) && typeof body === \"object\" && Object.keys(body).length > 0) {\n if (!validateEventPayloadTag(event, body)) {\n throw new Error(\"Invalid nostr event, payload tag does not match request body hash\");\n }\n }\n return true;\n}\nexport {\n Relay,\n SimplePool,\n finalizeEvent,\n fakejson_exports as fj,\n generateSecretKey,\n getEventHash,\n getFilterLimit,\n getPublicKey,\n kinds_exports as kinds,\n matchFilter,\n matchFilters,\n mergeFilters,\n nip04_exports as nip04,\n nip05_exports as nip05,\n nip10_exports as nip10,\n nip11_exports as nip11,\n nip13_exports as nip13,\n nip18_exports as nip18,\n nip19_exports as nip19,\n nip21_exports as nip21,\n nip25_exports as nip25,\n nip27_exports as nip27,\n nip28_exports as nip28,\n nip30_exports as nip30,\n nip39_exports as nip39,\n nip42_exports as nip42,\n nip44_exports as nip44,\n nip47_exports as nip47,\n nip57_exports as nip57,\n nip59_exports as nip59,\n nip98_exports as nip98,\n parseReferences,\n serializeEvent,\n sortEvents,\n utils_exports as utils,\n validateEvent,\n verifiedSymbol,\n verifyEvent\n};\n","// src/components/card/card.styles.ts\nimport { css } from \"lit\";\nvar card_styles_default = css`\n :host {\n --border-color: var(--sl-color-neutral-200);\n --border-radius: var(--sl-border-radius-medium);\n --border-width: 1px;\n --padding: var(--sl-spacing-large);\n\n display: inline-block;\n }\n\n .card {\n display: flex;\n flex-direction: column;\n background-color: var(--sl-panel-background-color);\n box-shadow: var(--sl-shadow-x-small);\n border: solid var(--border-width) var(--border-color);\n border-radius: var(--border-radius);\n }\n\n .card__image {\n display: flex;\n border-top-left-radius: var(--border-radius);\n border-top-right-radius: var(--border-radius);\n margin: calc(-1 * var(--border-width));\n overflow: hidden;\n }\n\n .card__image::slotted(img) {\n display: block;\n width: 100%;\n }\n\n .card:not(.card--has-image) .card__image {\n display: none;\n }\n\n .card__header {\n display: block;\n border-bottom: solid var(--border-width) var(--border-color);\n padding: calc(var(--padding) / 2) var(--padding);\n }\n\n .card:not(.card--has-header) .card__header {\n display: none;\n }\n\n .card:not(.card--has-image) .card__header {\n border-top-left-radius: var(--border-radius);\n border-top-right-radius: var(--border-radius);\n }\n\n .card__body {\n display: block;\n padding: var(--padding);\n }\n\n .card--has-footer .card__footer {\n display: block;\n border-top: solid var(--border-width) var(--border-color);\n padding: var(--padding);\n }\n\n .card:not(.card--has-footer) .card__footer {\n display: none;\n }\n`;\n\nexport {\n card_styles_default\n};\n","// src/internal/slot.ts\nvar HasSlotController = class {\n constructor(host, ...slotNames) {\n this.slotNames = [];\n this.handleSlotChange = (event) => {\n const slot = event.target;\n if (this.slotNames.includes(\"[default]\") && !slot.name || slot.name && this.slotNames.includes(slot.name)) {\n this.host.requestUpdate();\n }\n };\n (this.host = host).addController(this);\n this.slotNames = slotNames;\n }\n hasDefaultSlot() {\n return [...this.host.childNodes].some((node) => {\n if (node.nodeType === node.TEXT_NODE && node.textContent.trim() !== \"\") {\n return true;\n }\n if (node.nodeType === node.ELEMENT_NODE) {\n const el = node;\n const tagName = el.tagName.toLowerCase();\n if (tagName === \"sl-visually-hidden\") {\n return false;\n }\n if (!el.hasAttribute(\"slot\")) {\n return true;\n }\n }\n return false;\n });\n }\n hasNamedSlot(name) {\n return this.host.querySelector(`:scope > [slot=\"${name}\"]`) !== null;\n }\n test(slotName) {\n return slotName === \"[default]\" ? this.hasDefaultSlot() : this.hasNamedSlot(slotName);\n }\n hostConnected() {\n this.host.shadowRoot.addEventListener(\"slotchange\", this.handleSlotChange);\n }\n hostDisconnected() {\n this.host.shadowRoot.removeEventListener(\"slotchange\", this.handleSlotChange);\n }\n};\nfunction getTextContent(slot) {\n if (!slot) {\n return \"\";\n }\n const nodes = slot.assignedNodes({ flatten: true });\n let text = \"\";\n [...nodes].forEach((node) => {\n if (node.nodeType === Node.TEXT_NODE) {\n text += node.textContent;\n }\n });\n return text;\n}\n\nexport {\n HasSlotController,\n getTextContent\n};\n","// src/styles/component.styles.ts\nimport { css } from \"lit\";\nvar component_styles_default = css`\n :host {\n box-sizing: border-box;\n }\n\n :host *,\n :host *::before,\n :host *::after {\n box-sizing: inherit;\n }\n\n [hidden] {\n display: none !important;\n }\n`;\n\nexport {\n component_styles_default\n};\n","import {\n __decorateClass,\n __privateAdd,\n __privateGet,\n __privateSet,\n __spreadValues\n} from \"./chunk.B3BW2AY6.js\";\n\n// src/internal/shoelace-element.ts\nimport { LitElement } from \"lit\";\nimport { property } from \"lit/decorators.js\";\nvar _hasRecordedInitialProperties;\nvar ShoelaceElement = class extends LitElement {\n constructor() {\n super();\n __privateAdd(this, _hasRecordedInitialProperties, false);\n // Store the constructor value of all `static properties = {}`\n this.initialReflectedProperties = /* @__PURE__ */ new Map();\n Object.entries(this.constructor.dependencies).forEach(([name, component]) => {\n this.constructor.define(name, component);\n });\n }\n emit(name, options) {\n const event = new CustomEvent(name, __spreadValues({\n bubbles: true,\n cancelable: false,\n composed: true,\n detail: {}\n }, options));\n this.dispatchEvent(event);\n return event;\n }\n /* eslint-enable */\n static define(name, elementConstructor = this, options = {}) {\n const currentlyRegisteredConstructor = customElements.get(name);\n if (!currentlyRegisteredConstructor) {\n try {\n customElements.define(name, elementConstructor, options);\n } catch (_err) {\n customElements.define(name, class extends elementConstructor {\n }, options);\n }\n return;\n }\n let newVersion = \" (unknown version)\";\n let existingVersion = newVersion;\n if (\"version\" in elementConstructor && elementConstructor.version) {\n newVersion = \" v\" + elementConstructor.version;\n }\n if (\"version\" in currentlyRegisteredConstructor && currentlyRegisteredConstructor.version) {\n existingVersion = \" v\" + currentlyRegisteredConstructor.version;\n }\n if (newVersion && existingVersion && newVersion === existingVersion) {\n return;\n }\n console.warn(\n `Attempted to register <${name}>${newVersion}, but <${name}>${existingVersion} has already been registered.`\n );\n }\n attributeChangedCallback(name, oldValue, newValue) {\n if (!__privateGet(this, _hasRecordedInitialProperties)) {\n this.constructor.elementProperties.forEach(\n (obj, prop) => {\n if (obj.reflect && this[prop] != null) {\n this.initialReflectedProperties.set(prop, this[prop]);\n }\n }\n );\n __privateSet(this, _hasRecordedInitialProperties, true);\n }\n super.attributeChangedCallback(name, oldValue, newValue);\n }\n willUpdate(changedProperties) {\n super.willUpdate(changedProperties);\n this.initialReflectedProperties.forEach((value, prop) => {\n if (changedProperties.has(prop) && this[prop] == null) {\n this[prop] = value;\n }\n });\n }\n};\n_hasRecordedInitialProperties = new WeakMap();\n/* eslint-disable */\n// @ts-expect-error This is auto-injected at build time.\nShoelaceElement.version = \"2.18.0\";\nShoelaceElement.dependencies = {};\n__decorateClass([\n property()\n], ShoelaceElement.prototype, \"dir\", 2);\n__decorateClass([\n property()\n], ShoelaceElement.prototype, \"lang\", 2);\n\nexport {\n ShoelaceElement\n};\n","/**\n * @license\n * Copyright 2017 Google LLC\n * SPDX-License-Identifier: BSD-3-Clause\n */\nconst t={ATTRIBUTE:1,CHILD:2,PROPERTY:3,BOOLEAN_ATTRIBUTE:4,EVENT:5,ELEMENT:6},e=t=>(...e)=>({_$litDirective$:t,values:e});class i{constructor(t){}get _$AU(){return this._$AM._$AU}_$AT(t,e,i){this._$Ct=t,this._$AM=e,this._$Ci=i}_$AS(t,e){return this.update(t,e)}update(t,e){return this.render(...e)}}export{i as Directive,t as PartType,e as directive};\n//# sourceMappingURL=directive.js.map\n","import{noChange as t}from\"../lit-html.js\";import{directive as s,Directive as i,PartType as r}from\"../directive.js\";\n/**\n * @license\n * Copyright 2018 Google LLC\n * SPDX-License-Identifier: BSD-3-Clause\n */const e=s(class extends i{constructor(t){if(super(t),t.type!==r.ATTRIBUTE||\"class\"!==t.name||t.strings?.length>2)throw Error(\"`classMap()` can only be used in the `class` attribute and must be the only part in the attribute.\")}render(t){return\" \"+Object.keys(t).filter((s=>t[s])).join(\" \")+\" \"}update(s,[i]){if(void 0===this.st){this.st=new Set,void 0!==s.strings&&(this.nt=new Set(s.strings.join(\" \").split(/\\s/).filter((t=>\"\"!==t))));for(const t in i)i[t]&&!this.nt?.has(t)&&this.st.add(t);return this.render(i)}const r=s.element.classList;for(const t of this.st)t in i||(r.remove(t),this.st.delete(t));for(const t in i){const s=!!i[t];s===this.st.has(t)||this.nt?.has(t)||(s?(r.add(t),this.st.add(t)):(r.remove(t),this.st.delete(t)))}return t}});export{e as classMap};\n//# sourceMappingURL=class-map.js.map\n","import {\n card_styles_default\n} from \"./chunk.A5D6FTFY.js\";\nimport {\n HasSlotController\n} from \"./chunk.NYIIDP5N.js\";\nimport {\n component_styles_default\n} from \"./chunk.TUVJKY7S.js\";\nimport {\n ShoelaceElement\n} from \"./chunk.UYAO2JRR.js\";\n\n// src/components/card/card.component.ts\nimport { classMap } from \"lit/directives/class-map.js\";\nimport { html } from \"lit\";\nvar SlCard = class extends ShoelaceElement {\n constructor() {\n super(...arguments);\n this.hasSlotController = new HasSlotController(this, \"footer\", \"header\", \"image\");\n }\n render() {\n return html`\n <div\n part=\"base\"\n class=${classMap({\n card: true,\n \"card--has-footer\": this.hasSlotController.test(\"footer\"),\n \"card--has-image\": this.hasSlotController.test(\"image\"),\n \"card--has-header\": this.hasSlotController.test(\"header\")\n })}\n >\n <slot name=\"image\" part=\"image\" class=\"card__image\"></slot>\n <slot name=\"header\" part=\"header\" class=\"card__header\"></slot>\n <slot part=\"body\" class=\"card__body\"></slot>\n <slot name=\"footer\" part=\"footer\" class=\"card__footer\"></slot>\n </div>\n `;\n }\n};\nSlCard.styles = [component_styles_default, card_styles_default];\n\nexport {\n SlCard\n};\n","import {\n SlCard\n} from \"./chunk.LJF3QW2H.js\";\n\n// src/components/card/card.ts\nvar card_default = SlCard;\nSlCard.define(\"sl-card\");\n\nexport {\n card_default\n};\n","// src/components/spinner/spinner.styles.ts\nimport { css } from \"lit\";\nvar spinner_styles_default = css`\n :host {\n --track-width: 2px;\n --track-color: rgb(128 128 128 / 25%);\n --indicator-color: var(--sl-color-primary-600);\n --speed: 2s;\n\n display: inline-flex;\n width: 1em;\n height: 1em;\n flex: none;\n }\n\n .spinner {\n flex: 1 1 auto;\n height: 100%;\n width: 100%;\n }\n\n .spinner__track,\n .spinner__indicator {\n fill: none;\n stroke-width: var(--track-width);\n r: calc(0.5em - var(--track-width) / 2);\n cx: 0.5em;\n cy: 0.5em;\n transform-origin: 50% 50%;\n }\n\n .spinner__track {\n stroke: var(--track-color);\n transform-origin: 0% 0%;\n }\n\n .spinner__indicator {\n stroke: var(--indicator-color);\n stroke-linecap: round;\n stroke-dasharray: 150% 75%;\n animation: spin var(--speed) linear infinite;\n }\n\n @keyframes spin {\n 0% {\n transform: rotate(0deg);\n stroke-dasharray: 0.05em, 3em;\n }\n\n 50% {\n transform: rotate(450deg);\n stroke-dasharray: 1.375em, 1.375em;\n }\n\n 100% {\n transform: rotate(1080deg);\n stroke-dasharray: 0.05em, 3em;\n }\n }\n`;\n\nexport {\n spinner_styles_default\n};\n","const connectedElements = new Set();\nconst translations = new Map();\nlet fallback;\nlet documentDirection = 'ltr';\nlet documentLanguage = 'en';\nconst isClient = (typeof MutationObserver !== \"undefined\" && typeof document !== \"undefined\" && typeof document.documentElement !== \"undefined\");\nif (isClient) {\n const documentElementObserver = new MutationObserver(update);\n documentDirection = document.documentElement.dir || 'ltr';\n documentLanguage = document.documentElement.lang || navigator.language;\n documentElementObserver.observe(document.documentElement, {\n attributes: true,\n attributeFilter: ['dir', 'lang']\n });\n}\nexport function registerTranslation(...translation) {\n translation.map(t => {\n const code = t.$code.toLowerCase();\n if (translations.has(code)) {\n translations.set(code, Object.assign(Object.assign({}, translations.get(code)), t));\n }\n else {\n translations.set(code, t);\n }\n if (!fallback) {\n fallback = t;\n }\n });\n update();\n}\nexport function update() {\n if (isClient) {\n documentDirection = document.documentElement.dir || 'ltr';\n documentLanguage = document.documentElement.lang || navigator.language;\n }\n [...connectedElements.keys()].map((el) => {\n if (typeof el.requestUpdate === 'function') {\n el.requestUpdate();\n }\n });\n}\nexport class LocalizeController {\n constructor(host) {\n this.host = host;\n this.host.addController(this);\n }\n hostConnected() {\n connectedElements.add(this.host);\n }\n hostDisconnected() {\n connectedElements.delete(this.host);\n }\n dir() {\n return `${this.host.dir || documentDirection}`.toLowerCase();\n }\n lang() {\n return `${this.host.lang || documentLanguage}`.toLowerCase();\n }\n getTranslationData(lang) {\n var _a, _b;\n const locale = new Intl.Locale(lang.replace(/_/g, '-'));\n const language = locale === null || locale === void 0 ? void 0 : locale.language.toLowerCase();\n const region = (_b = (_a = locale === null || locale === void 0 ? void 0 : locale.region) === null || _a === void 0 ? void 0 : _a.toLowerCase()) !== null && _b !== void 0 ? _b : '';\n const primary = translations.get(`${language}-${region}`);\n const secondary = translations.get(language);\n return { locale, language, region, primary, secondary };\n }\n exists(key, options) {\n var _a;\n const { primary, secondary } = this.getTranslationData((_a = options.lang) !== null && _a !== void 0 ? _a : this.lang());\n options = Object.assign({ includeFallback: false }, options);\n if ((primary && primary[key]) ||\n (secondary && secondary[key]) ||\n (options.includeFallback && fallback && fallback[key])) {\n return true;\n }\n return false;\n }\n term(key, ...args) {\n const { primary, secondary } = this.getTranslationData(this.lang());\n let term;\n if (primary && primary[key]) {\n term = primary[key];\n }\n else if (secondary && secondary[key]) {\n term = secondary[key];\n }\n else if (fallback && fallback[key]) {\n term = fallback[key];\n }\n else {\n console.error(`No translation found for: ${String(key)}`);\n return String(key);\n }\n if (typeof term === 'function') {\n return term(...args);\n }\n return term;\n }\n date(dateToFormat, options) {\n dateToFormat = new Date(dateToFormat);\n return new Intl.DateTimeFormat(this.lang(), options).format(dateToFormat);\n }\n number(numberToFormat, options) {\n numberToFormat = Number(numberToFormat);\n return isNaN(numberToFormat) ? '' : new Intl.NumberFormat(this.lang(), options).format(numberToFormat);\n }\n relativeTime(value, unit, options) {\n return new Intl.RelativeTimeFormat(this.lang(), options).format(value, unit);\n }\n}\n","// src/translations/en.ts\nimport { registerTranslation } from \"@shoelace-style/localize\";\nvar translation = {\n $code: \"en\",\n $name: \"English\",\n $dir: \"ltr\",\n carousel: \"Carousel\",\n clearEntry: \"Clear entry\",\n close: \"Close\",\n copied: \"Copied\",\n copy: \"Copy\",\n currentValue: \"Current value\",\n error: \"Error\",\n goToSlide: (slide, count) => `Go to slide ${slide} of ${count}`,\n hidePassword: \"Hide password\",\n loading: \"Loading\",\n nextSlide: \"Next slide\",\n numOptionsSelected: (num) => {\n if (num === 0)\n return \"No options selected\";\n if (num === 1)\n return \"1 option selected\";\n return `${num} options selected`;\n },\n previousSlide: \"Previous slide\",\n progress: \"Progress\",\n remove: \"Remove\",\n resize: \"Resize\",\n scrollToEnd: \"Scroll to end\",\n scrollToStart: \"Scroll to start\",\n selectAColorFromTheScreen: \"Select a color from the screen\",\n showPassword: \"Show password\",\n slideNum: (slide) => `Slide ${slide}`,\n toggleColorFormat: \"Toggle color format\"\n};\nregisterTranslation(translation);\nvar en_default = translation;\n\nexport {\n en_default\n};\n","import {\n en_default\n} from \"./chunk.MAS2SHYD.js\";\n\n// src/utilities/localize.ts\nimport { LocalizeController as DefaultLocalizationController, registerTranslation } from \"@shoelace-style/localize\";\nimport { registerTranslation as registerTranslation2 } from \"@shoelace-style/localize\";\nvar LocalizeController = class extends DefaultLocalizationController {\n};\nregisterTranslation(en_default);\n\nexport {\n LocalizeController,\n registerTranslation2 as registerTranslation\n};\n","import {\n spinner_styles_default\n} from \"./chunk.7DUCI5S4.js\";\nimport {\n LocalizeController\n} from \"./chunk.WLV3FVBR.js\";\nimport {\n component_styles_default\n} from \"./chunk.TUVJKY7S.js\";\nimport {\n ShoelaceElement\n} from \"./chunk.UYAO2JRR.js\";\n\n// src/components/spinner/spinner.component.ts\nimport { html } from \"lit\";\nvar SlSpinner = class extends ShoelaceElement {\n constructor() {\n super(...arguments);\n this.localize = new LocalizeController(this);\n }\n render() {\n return html`\n <svg part=\"base\" class=\"spinner\" role=\"progressbar\" aria-label=${this.localize.term(\"loading\")}>\n <circle class=\"spinner__track\"></circle>\n <circle class=\"spinner__indicator\"></circle>\n </svg>\n `;\n }\n};\nSlSpinner.styles = [component_styles_default, spinner_styles_default];\n\nexport {\n SlSpinner\n};\n","import {\n __spreadProps,\n __spreadValues\n} from \"./chunk.B3BW2AY6.js\";\n\n// src/internal/form.ts\nvar formCollections = /* @__PURE__ */ new WeakMap();\nvar reportValidityOverloads = /* @__PURE__ */ new WeakMap();\nvar checkValidityOverloads = /* @__PURE__ */ new WeakMap();\nvar userInteractedControls = /* @__PURE__ */ new WeakSet();\nvar interactions = /* @__PURE__ */ new WeakMap();\nvar FormControlController = class {\n constructor(host, options) {\n this.handleFormData = (event) => {\n const disabled = this.options.disabled(this.host);\n const name = this.options.name(this.host);\n const value = this.options.value(this.host);\n const isButton = this.host.tagName.toLowerCase() === \"sl-button\";\n if (this.host.isConnected && !disabled && !isButton && typeof name === \"string\" && name.length > 0 && typeof value !== \"undefined\") {\n if (Array.isArray(value)) {\n value.forEach((val) => {\n event.formData.append(name, val.toString());\n });\n } else {\n event.formData.append(name, value.toString());\n }\n }\n };\n this.handleFormSubmit = (event) => {\n var _a;\n const disabled = this.options.disabled(this.host);\n const reportValidity = this.options.reportValidity;\n if (this.form && !this.form.noValidate) {\n (_a = formCollections.get(this.form)) == null ? void 0 : _a.forEach((control) => {\n this.setUserInteracted(control, true);\n });\n }\n if (this.form && !this.form.noValidate && !disabled && !reportValidity(this.host)) {\n event.preventDefault();\n event.stopImmediatePropagation();\n }\n };\n this.handleFormReset = () => {\n this.options.setValue(this.host, this.options.defaultValue(this.host));\n this.setUserInteracted(this.host, false);\n interactions.set(this.host, []);\n };\n this.handleInteraction = (event) => {\n const emittedEvents = interactions.get(this.host);\n if (!emittedEvents.includes(event.type)) {\n emittedEvents.push(event.type);\n }\n if (emittedEvents.length === this.options.assumeInteractionOn.length) {\n this.setUserInteracted(this.host, true);\n }\n };\n this.checkFormValidity = () => {\n if (this.form && !this.form.noValidate) {\n const elements = this.form.querySelectorAll(\"*\");\n for (const element of elements) {\n if (typeof element.checkValidity === \"function\") {\n if (!element.checkValidity()) {\n return false;\n }\n }\n }\n }\n return true;\n };\n this.reportFormValidity = () => {\n if (this.form && !this.form.noValidate) {\n const elements = this.form.querySelectorAll(\"*\");\n for (const element of elements) {\n if (typeof element.reportValidity === \"function\") {\n if (!element.reportValidity()) {\n return false;\n }\n }\n }\n }\n return true;\n };\n (this.host = host).addController(this);\n this.options = __spreadValues({\n form: (input) => {\n const formId = input.form;\n if (formId) {\n const root = input.getRootNode();\n const form = root.querySelector(`#${formId}`);\n if (form) {\n return form;\n }\n }\n return input.closest(\"form\");\n },\n name: (input) => input.name,\n value: (input) => input.value,\n defaultValue: (input) => input.defaultValue,\n disabled: (input) => {\n var _a;\n return (_a = input.disabled) != null ? _a : false;\n },\n reportValidity: (input) => typeof input.reportValidity === \"function\" ? input.reportValidity() : true,\n checkValidity: (input) => typeof input.checkValidity === \"function\" ? input.checkValidity() : true,\n setValue: (input, value) => input.value = value,\n assumeInteractionOn: [\"sl-input\"]\n }, options);\n }\n hostConnected() {\n const form = this.options.form(this.host);\n if (form) {\n this.attachForm(form);\n }\n interactions.set(this.host, []);\n this.options.assumeInteractionOn.forEach((event) => {\n this.host.addEventListener(event, this.handleInteraction);\n });\n }\n hostDisconnected() {\n this.detachForm();\n interactions.delete(this.host);\n this.options.assumeInteractionOn.forEach((event) => {\n this.host.removeEventListener(event, this.handleInteraction);\n });\n }\n hostUpdated() {\n const form = this.options.form(this.host);\n if (!form) {\n this.detachForm();\n }\n if (form && this.form !== form) {\n this.detachForm();\n this.attachForm(form);\n }\n if (this.host.hasUpdated) {\n this.setValidity(this.host.validity.valid);\n }\n }\n attachForm(form) {\n if (form) {\n this.form = form;\n if (formCollections.has(this.form)) {\n formCollections.get(this.form).add(this.host);\n } else {\n formCollections.set(this.form, /* @__PURE__ */ new Set([this.host]));\n }\n this.form.addEventListener(\"formdata\", this.handleFormData);\n this.form.addEventListener(\"submit\", this.handleFormSubmit);\n this.form.addEventListener(\"reset\", this.handleFormReset);\n if (!reportValidityOverloads.has(this.form)) {\n reportValidityOverloads.set(this.form, this.form.reportValidity);\n this.form.reportValidity = () => this.reportFormValidity();\n }\n if (!checkValidityOverloads.has(this.form)) {\n checkValidityOverloads.set(this.form, this.form.checkValidity);\n this.form.checkValidity = () => this.checkFormValidity();\n }\n } else {\n this.form = void 0;\n }\n }\n detachForm() {\n if (!this.form)\n return;\n const formCollection = formCollections.get(this.form);\n if (!formCollection) {\n return;\n }\n formCollection.delete(this.host);\n if (formCollection.size <= 0) {\n this.form.removeEventListener(\"formdata\", this.handleFormData);\n this.form.removeEventListener(\"submit\", this.handleFormSubmit);\n this.form.removeEventListener(\"reset\", this.handleFormReset);\n if (reportValidityOverloads.has(this.form)) {\n this.form.reportValidity = reportValidityOverloads.get(this.form);\n reportValidityOverloads.delete(this.form);\n }\n if (checkValidityOverloads.has(this.form)) {\n this.form.checkValidity = checkValidityOverloads.get(this.form);\n checkValidityOverloads.delete(this.form);\n }\n this.form = void 0;\n }\n }\n setUserInteracted(el, hasInteracted) {\n if (hasInteracted) {\n userInteractedControls.add(el);\n } else {\n userInteractedControls.delete(el);\n }\n el.requestUpdate();\n }\n doAction(type, submitter) {\n if (this.form) {\n const button = document.createElement(\"button\");\n button.type = type;\n button.style.position = \"absolute\";\n button.style.width = \"0\";\n button.style.height = \"0\";\n button.style.clipPath = \"inset(50%)\";\n button.style.overflow = \"hidden\";\n button.style.whiteSpace = \"nowrap\";\n if (submitter) {\n button.name = submitter.name;\n button.value = submitter.value;\n [\"formaction\", \"formenctype\", \"formmethod\", \"formnovalidate\", \"formtarget\"].forEach((attr) => {\n if (submitter.hasAttribute(attr)) {\n button.setAttribute(attr, submitter.getAttribute(attr));\n }\n });\n }\n this.form.append(button);\n button.click();\n button.remove();\n }\n }\n /** Returns the associated `<form>` element, if one exists. */\n getForm() {\n var _a;\n return (_a = this.form) != null ? _a : null;\n }\n /** Resets the form, restoring all the control to their default value */\n reset(submitter) {\n this.doAction(\"reset\", submitter);\n }\n /** Submits the form, triggering validation and form data injection. */\n submit(submitter) {\n this.doAction(\"submit\", submitter);\n }\n /**\n * Synchronously sets the form control's validity. Call this when you know the future validity but need to update\n * the host element immediately, i.e. before Lit updates the component in the next update.\n */\n setValidity(isValid) {\n const host = this.host;\n const hasInteracted = Boolean(userInteractedControls.has(host));\n const required = Boolean(host.required);\n host.toggleAttribute(\"data-required\", required);\n host.toggleAttribute(\"data-optional\", !required);\n host.toggleAttribute(\"data-invalid\", !isValid);\n host.toggleAttribute(\"data-valid\", isValid);\n host.toggleAttribute(\"data-user-invalid\", !isValid && hasInteracted);\n host.toggleAttribute(\"data-user-valid\", isValid && hasInteracted);\n }\n /**\n * Updates the form control's validity based on the current value of `host.validity.valid`. Call this when anything\n * that affects constraint validation changes so the component receives the correct validity states.\n */\n updateValidity() {\n const host = this.host;\n this.setValidity(host.validity.valid);\n }\n /**\n * Dispatches a non-bubbling, cancelable custom event of type `sl-invalid`.\n * If the `sl-invalid` event will be cancelled then the original `invalid`\n * event (which may have been passed as argument) will also be cancelled.\n * If no original `invalid` event has been passed then the `sl-invalid`\n * event will be cancelled before being dispatched.\n */\n emitInvalidEvent(originalInvalidEvent) {\n const slInvalidEvent = new CustomEvent(\"sl-invalid\", {\n bubbles: false,\n composed: false,\n cancelable: true,\n detail: {}\n });\n if (!originalInvalidEvent) {\n slInvalidEvent.preventDefault();\n }\n if (!this.host.dispatchEvent(slInvalidEvent)) {\n originalInvalidEvent == null ? void 0 : originalInvalidEvent.preventDefault();\n }\n }\n};\nvar validValidityState = Object.freeze({\n badInput: false,\n customError: false,\n patternMismatch: false,\n rangeOverflow: false,\n rangeUnderflow: false,\n stepMismatch: false,\n tooLong: false,\n tooShort: false,\n typeMismatch: false,\n valid: true,\n valueMissing: false\n});\nvar valueMissingValidityState = Object.freeze(__spreadProps(__spreadValues({}, validValidityState), {\n valid: false,\n valueMissing: true\n}));\nvar customErrorValidityState = Object.freeze(__spreadProps(__spreadValues({}, validValidityState), {\n valid: false,\n customError: true\n}));\n\nexport {\n formCollections,\n FormControlController,\n validValidityState,\n valueMissingValidityState,\n customErrorValidityState\n};\n","// src/components/button/button.styles.ts\nimport { css } from \"lit\";\nvar button_styles_default = css`\n :host {\n display: inline-block;\n position: relative;\n width: auto;\n cursor: pointer;\n }\n\n .button {\n display: inline-flex;\n align-items: stretch;\n justify-content: center;\n width: 100%;\n border-style: solid;\n border-width: var(--sl-input-border-width);\n font-family: var(--sl-input-font-family);\n font-weight: var(--sl-font-weight-semibold);\n text-decoration: none;\n user-select: none;\n -webkit-user-select: none;\n white-space: nowrap;\n vertical-align: middle;\n padding: 0;\n transition:\n var(--sl-transition-x-fast) background-color,\n var(--sl-transition-x-fast) color,\n var(--sl-transition-x-fast) border,\n var(--sl-transition-x-fast) box-shadow;\n cursor: inherit;\n }\n\n .button::-moz-focus-inner {\n border: 0;\n }\n\n .button:focus {\n outline: none;\n }\n\n .button:focus-visible {\n outline: var(--sl-focus-ring);\n outline-offset: var(--sl-focus-ring-offset);\n }\n\n .button--disabled {\n opacity: 0.5;\n cursor: not-allowed;\n }\n\n /* When disabled, prevent mouse events from bubbling up from children */\n .button--disabled * {\n pointer-events: none;\n }\n\n .button__prefix,\n .button__suffix {\n flex: 0 0 auto;\n display: flex;\n align-items: center;\n pointer-events: none;\n }\n\n .button__label {\n display: inline-block;\n }\n\n .button__label::slotted(sl-icon) {\n vertical-align: -2px;\n }\n\n /*\n * Standard buttons\n */\n\n /* Default */\n .button--standard.button--default {\n background-color: var(--sl-color-neutral-0);\n border-color: var(--sl-input-border-color);\n color: var(--sl-color-neutral-700);\n }\n\n .button--standard.button--default:hover:not(.button--disabled) {\n background-color: var(--sl-color-primary-50);\n border-color: var(--sl-color-primary-300);\n color: var(--sl-color-primary-700);\n }\n\n .button--standard.button--default:active:not(.button--disabled) {\n background-color: var(--sl-color-primary-100);\n border-color: var(--sl-color-primary-400);\n color: var(--sl-color-primary-700);\n }\n\n /* Primary */\n .button--standard.button--primary {\n background-color: var(--sl-color-primary-600);\n border-color: var(--sl-color-primary-600);\n color: var(--sl-color-neutral-0);\n }\n\n .button--standard.button--primary:hover:not(.button--disabled) {\n background-color: var(--sl-color-primary-500);\n border-color: var(--sl-color-primary-500);\n color: var(--sl-color-neutral-0);\n }\n\n .button--standard.button--primary:active:not(.button--disabled) {\n background-color: var(--sl-color-primary-600);\n border-color: var(--sl-color-primary-600);\n color: var(--sl-color-neutral-0);\n }\n\n /* Success */\n .button--standard.button--success {\n background-color: var(--sl-color-success-600);\n border-color: var(--sl-color-success-600);\n color: var(--sl-color-neutral-0);\n }\n\n .button--standard.button--success:hover:not(.button--disabled) {\n background-color: var(--sl-color-success-500);\n border-color: var(--sl-color-success-500);\n color: var(--sl-color-neutral-0);\n }\n\n .button--standard.button--success:active:not(.button--disabled) {\n background-color: var(--sl-color-success-600);\n border-color: var(--sl-color-success-600);\n color: var(--sl-color-neutral-0);\n }\n\n /* Neutral */\n .button--standard.button--neutral {\n background-color: var(--sl-color-neutral-600);\n border-color: var(--sl-color-neutral-600);\n color: var(--sl-color-neutral-0);\n }\n\n .button--standard.button--neutral:hover:not(.button--disabled) {\n background-color: var(--sl-color-neutral-500);\n border-color: var(--sl-color-neutral-500);\n color: var(--sl-color-neutral-0);\n }\n\n .button--standard.button--neutral:active:not(.button--disabled) {\n background-color: var(--sl-color-neutral-600);\n border-color: var(--sl-color-neutral-600);\n color: var(--sl-color-neutral-0);\n }\n\n /* Warning */\n .button--standard.button--warning {\n background-color: var(--sl-color-warning-600);\n border-color: var(--sl-color-warning-600);\n color: var(--sl-color-neutral-0);\n }\n .button--standard.button--warning:hover:not(.button--disabled) {\n background-color: var(--sl-color-warning-500);\n border-color: var(--sl-color-warning-500);\n color: var(--sl-color-neutral-0);\n }\n\n .button--standard.button--warning:active:not(.button--disabled) {\n background-color: var(--sl-color-warning-600);\n border-color: var(--sl-color-warning-600);\n color: var(--sl-color-neutral-0);\n }\n\n /* Danger */\n .button--standard.button--danger {\n background-color: var(--sl-color-danger-600);\n border-color: var(--sl-color-danger-600);\n color: var(--sl-color-neutral-0);\n }\n\n .button--standard.button--danger:hover:not(.button--disabled) {\n background-color: var(--sl-color-danger-500);\n border-color: var(--sl-color-danger-500);\n color: var(--sl-color-neutral-0);\n }\n\n .button--standard.button--danger:active:not(.button--disabled) {\n background-color: var(--sl-color-danger-600);\n border-color: var(--sl-color-danger-600);\n color: var(--sl-color-neutral-0);\n }\n\n /*\n * Outline buttons\n */\n\n .button--outline {\n background: none;\n border: solid 1px;\n }\n\n /* Default */\n .button--outline.button--default {\n border-color: var(--sl-input-border-color);\n color: var(--sl-color-neutral-700);\n }\n\n .button--outline.button--default:hover:not(.button--disabled),\n .button--outline.button--default.button--checked:not(.button--disabled) {\n border-color: var(--sl-color-primary-600);\n background-color: var(--sl-color-primary-600);\n color: var(--sl-color-neutral-0);\n }\n\n .button--outline.button--default:active:not(.button--disabled) {\n border-color: var(--sl-color-primary-700);\n background-color: var(--sl-color-primary-700);\n color: var(--sl-color-neutral-0);\n }\n\n /* Primary */\n .button--outline.button--primary {\n border-color: var(--sl-color-primary-600);\n color: var(--sl-color-primary-600);\n }\n\n .button--outline.button--primary:hover:not(.button--disabled),\n .button--outline.button--primary.button--checked:not(.button--disabled) {\n background-color: var(--sl-color-primary-600);\n color: var(--sl-color-neutral-0);\n }\n\n .button--outline.button--primary:active:not(.button--disabled) {\n border-color: var(--sl-color-primary-700);\n background-color: var(--sl-color-primary-700);\n color: var(--sl-color-neutral-0);\n }\n\n /* Success */\n .button--outline.button--success {\n border-color: var(--sl-color-success-600);\n color: var(--sl-color-success-600);\n }\n\n .button--outline.button--success:hover:not(.button--disabled),\n .button--outline.button--success.button--checked:not(.button--disabled) {\n background-color: var(--sl-color-success-600);\n color: var(--sl-color-neutral-0);\n }\n\n .button--outline.button--success:active:not(.button--disabled) {\n border-color: var(--sl-color-success-700);\n background-color: var(--sl-color-success-700);\n color: var(--sl-color-neutral-0);\n }\n\n /* Neutral */\n .button--outline.button--neutral {\n border-color: var(--sl-color-neutral-600);\n color: var(--sl-color-neutral-600);\n }\n\n .button--outline.button--neutral:hover:not(.button--disabled),\n .button--outline.button--neutral.button--checked:not(.button--disabled) {\n background-color: var(--sl-color-neutral-600);\n color: var(--sl-color-neutral-0);\n }\n\n .button--outline.button--neutral:active:not(.button--disabled) {\n border-color: var(--sl-color-neutral-700);\n background-color: var(--sl-color-neutral-700);\n color: var(--sl-color-neutral-0);\n }\n\n /* Warning */\n .button--outline.button--warning {\n border-color: var(--sl-color-warning-600);\n color: var(--sl-color-warning-600);\n }\n\n .button--outline.button--warning:hover:not(.button--disabled),\n .button--outline.button--warning.button--checked:not(.button--disabled) {\n background-color: var(--sl-color-warning-600);\n color: var(--sl-color-neutral-0);\n }\n\n .button--outline.button--warning:active:not(.button--disabled) {\n border-color: var(--sl-color-warning-700);\n background-color: var(--sl-color-warning-700);\n color: var(--sl-color-neutral-0);\n }\n\n /* Danger */\n .button--outline.button--danger {\n border-color: var(--sl-color-danger-600);\n color: var(--sl-color-danger-600);\n }\n\n .button--outline.button--danger:hover:not(.button--disabled),\n .button--outline.button--danger.button--checked:not(.button--disabled) {\n background-color: var(--sl-color-danger-600);\n color: var(--sl-color-neutral-0);\n }\n\n .button--outline.button--danger:active:not(.button--disabled) {\n border-color: var(--sl-color-danger-700);\n background-color: var(--sl-color-danger-700);\n color: var(--sl-color-neutral-0);\n }\n\n @media (forced-colors: active) {\n .button.button--outline.button--checked:not(.button--disabled) {\n outline: solid 2px transparent;\n }\n }\n\n /*\n * Text buttons\n */\n\n .button--text {\n background-color: transparent;\n border-color: transparent;\n color: var(--sl-color-primary-600);\n }\n\n .button--text:hover:not(.button--disabled) {\n background-color: transparent;\n border-color: transparent;\n color: var(--sl-color-primary-500);\n }\n\n .button--text:focus-visible:not(.button--disabled) {\n background-color: transparent;\n border-color: transparent;\n color: var(--sl-color-primary-500);\n }\n\n .button--text:active:not(.button--disabled) {\n background-color: transparent;\n border-color: transparent;\n color: var(--sl-color-primary-700);\n }\n\n /*\n * Size modifiers\n */\n\n .button--small {\n height: auto;\n min-height: var(--sl-input-height-small);\n font-size: var(--sl-button-font-size-small);\n line-height: calc(var(--sl-input-height-small) - var(--sl-input-border-width) * 2);\n border-radius: var(--sl-input-border-radius-small);\n }\n\n .button--medium {\n height: auto;\n min-height: var(--sl-input-height-medium);\n font-size: var(--sl-button-font-size-medium);\n line-height: calc(var(--sl-input-height-medium) - var(--sl-input-border-width) * 2);\n border-radius: var(--sl-input-border-radius-medium);\n }\n\n .button--large {\n height: auto;\n min-height: var(--sl-input-height-large);\n font-size: var(--sl-button-font-size-large);\n line-height: calc(var(--sl-input-height-large) - var(--sl-input-border-width) * 2);\n border-radius: var(--sl-input-border-radius-large);\n }\n\n /*\n * Pill modifier\n */\n\n .button--pill.button--small {\n border-radius: var(--sl-input-height-small);\n }\n\n .button--pill.button--medium {\n border-radius: var(--sl-input-height-medium);\n }\n\n .button--pill.button--large {\n border-radius: var(--sl-input-height-large);\n }\n\n /*\n * Circle modifier\n */\n\n .button--circle {\n padding-left: 0;\n padding-right: 0;\n }\n\n .button--circle.button--small {\n width: var(--sl-input-height-small);\n border-radius: 50%;\n }\n\n .button--circle.button--medium {\n width: var(--sl-input-height-medium);\n border-radius: 50%;\n }\n\n .button--circle.button--large {\n width: var(--sl-input-height-large);\n border-radius: 50%;\n }\n\n .button--circle .button__prefix,\n .button--circle .button__suffix,\n .button--circle .button__caret {\n display: none;\n }\n\n /*\n * Caret modifier\n */\n\n .button--caret .button__suffix {\n display: none;\n }\n\n .button--caret .button__caret {\n height: auto;\n }\n\n /*\n * Loading modifier\n */\n\n .button--loading {\n position: relative;\n cursor: wait;\n }\n\n .button--loading .button__prefix,\n .button--loading .button__label,\n .button--loading .button__suffix,\n .button--loading .button__caret {\n visibility: hidden;\n }\n\n .button--loading sl-spinner {\n --indicator-color: currentColor;\n position: absolute;\n font-size: 1em;\n height: 1em;\n width: 1em;\n top: calc(50% - 0.5em);\n left: calc(50% - 0.5em);\n }\n\n /*\n * Badges\n */\n\n .button ::slotted(sl-badge) {\n position: absolute;\n top: 0;\n right: 0;\n translate: 50% -50%;\n pointer-events: none;\n }\n\n .button--rtl ::slotted(sl-badge) {\n right: auto;\n left: 0;\n translate: -50% -50%;\n }\n\n /*\n * Button spacing\n */\n\n .button--has-label.button--small .button__label {\n padding: 0 var(--sl-spacing-small);\n }\n\n .button--has-label.button--medium .button__label {\n padding: 0 var(--sl-spacing-medium);\n }\n\n .button--has-label.button--large .button__label {\n padding: 0 var(--sl-spacing-large);\n }\n\n .button--has-prefix.button--small {\n padding-inline-start: var(--sl-spacing-x-small);\n }\n\n .button--has-prefix.button--small .button__label {\n padding-inline-start: var(--sl-spacing-x-small);\n }\n\n .button--has-prefix.button--medium {\n padding-inline-start: var(--sl-spacing-small);\n }\n\n .button--has-prefix.button--medium .button__label {\n padding-inline-start: var(--sl-spacing-small);\n }\n\n .button--has-prefix.button--large {\n padding-inline-start: var(--sl-spacing-small);\n }\n\n .button--has-prefix.button--large .button__label {\n padding-inline-start: var(--sl-spacing-small);\n }\n\n .button--has-suffix.button--small,\n .button--caret.button--small {\n padding-inline-end: var(--sl-spacing-x-small);\n }\n\n .button--has-suffix.button--small .button__label,\n .button--caret.button--small .button__label {\n padding-inline-end: var(--sl-spacing-x-small);\n }\n\n .button--has-suffix.button--medium,\n .button--caret.button--medium {\n padding-inline-end: var(--sl-spacing-small);\n }\n\n .button--has-suffix.button--medium .button__label,\n .button--caret.button--medium .button__label {\n padding-inline-end: var(--sl-spacing-small);\n }\n\n .button--has-suffix.button--large,\n .button--caret.button--large {\n padding-inline-end: var(--sl-spacing-small);\n }\n\n .button--has-suffix.button--large .button__label,\n .button--caret.button--large .button__label {\n padding-inline-end: var(--sl-spacing-small);\n }\n\n /*\n * Button groups support a variety of button types (e.g. buttons with tooltips, buttons as dropdown triggers, etc.).\n * This means buttons aren't always direct descendants of the button group, thus we can't target them with the\n * ::slotted selector. To work around this, the button group component does some magic to add these special classes to\n * buttons and we style them here instead.\n */\n\n :host([data-sl-button-group__button--first]:not([data-sl-button-group__button--last])) .button {\n border-start-end-radius: 0;\n border-end-end-radius: 0;\n }\n\n :host([data-sl-button-group__button--inner]) .button {\n border-radius: 0;\n }\n\n :host([data-sl-button-group__button--last]:not([data-sl-button-group__button--first])) .button {\n border-start-start-radius: 0;\n border-end-start-radius: 0;\n }\n\n /* All except the first */\n :host([data-sl-button-group__button]:not([data-sl-button-group__button--first])) {\n margin-inline-start: calc(-1 * var(--sl-input-border-width));\n }\n\n /* Add a visual separator between solid buttons */\n :host(\n [data-sl-button-group__button]:not(\n [data-sl-button-group__button--first],\n [data-sl-button-group__button--radio],\n [variant='default']\n ):not(:hover)\n )\n .button:after {\n content: '';\n position: absolute;\n top: 0;\n inset-inline-start: 0;\n bottom: 0;\n border-left: solid 1px rgb(128 128 128 / 33%);\n mix-blend-mode: multiply;\n }\n\n /* Bump hovered, focused, and checked buttons up so their focus ring isn't clipped */\n :host([data-sl-button-group__button--hover]) {\n z-index: 1;\n }\n\n /* Focus and checked are always on top */\n :host([data-sl-button-group__button--focus]),\n :host([data-sl-button-group__button][checked]) {\n z-index: 2;\n }\n`;\n\nexport {\n button_styles_default\n};\n","import {\n getBasePath\n} from \"./chunk.3Y6SB6QS.js\";\n\n// src/components/icon/library.default.ts\nvar library = {\n name: \"default\",\n resolver: (name) => getBasePath(`assets/icons/${name}.svg`)\n};\nvar library_default_default = library;\n\nexport {\n library_default_default\n};\n","// src/components/icon/library.system.ts\nvar icons = {\n caret: `\n <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\n <polyline points=\"6 9 12 15 18 9\"></polyline>\n </svg>\n `,\n check: `\n <svg part=\"checked-icon\" class=\"checkbox__icon\" viewBox=\"0 0 16 16\">\n <g stroke=\"none\" stroke-width=\"1\" fill=\"none\" fill-rule=\"evenodd\" stroke-linecap=\"round\">\n <g stroke=\"currentColor\">\n <g transform=\"translate(3.428571, 3.428571)\">\n <path d=\"M0,5.71428571 L3.42857143,9.14285714\"></path>\n <path d=\"M9.14285714,0 L3.42857143,9.14285714\"></path>\n </g>\n </g>\n </g>\n </svg>\n `,\n \"chevron-down\": `\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" fill=\"currentColor\" class=\"bi bi-chevron-down\" viewBox=\"0 0 16 16\">\n <path fill-rule=\"evenodd\" d=\"M1.646 4.646a.5.5 0 0 1 .708 0L8 10.293l5.646-5.647a.5.5 0 0 1 .708.708l-6 6a.5.5 0 0 1-.708 0l-6-6a.5.5 0 0 1 0-.708z\"/>\n </svg>\n `,\n \"chevron-left\": `\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" fill=\"currentColor\" class=\"bi bi-chevron-left\" viewBox=\"0 0 16 16\">\n <path fill-rule=\"evenodd\" d=\"M11.354 1.646a.5.5 0 0 1 0 .708L5.707 8l5.647 5.646a.5.5 0 0 1-.708.708l-6-6a.5.5 0 0 1 0-.708l6-6a.5.5 0 0 1 .708 0z\"/>\n </svg>\n `,\n \"chevron-right\": `\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" fill=\"currentColor\" class=\"bi bi-chevron-right\" viewBox=\"0 0 16 16\">\n <path fill-rule=\"evenodd\" d=\"M4.646 1.646a.5.5 0 0 1 .708 0l6 6a.5.5 0 0 1 0 .708l-6 6a.5.5 0 0 1-.708-.708L10.293 8 4.646 2.354a.5.5 0 0 1 0-.708z\"/>\n </svg>\n `,\n copy: `\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" fill=\"currentColor\" class=\"bi bi-copy\" viewBox=\"0 0 16 16\">\n <path fill-rule=\"evenodd\" d=\"M4 2a2 2 0 0 1 2-2h8a2 2 0 0 1 2 2v8a2 2 0 0 1-2 2H6a2 2 0 0 1-2-2V2Zm2-1a1 1 0 0 0-1 1v8a1 1 0 0 0 1 1h8a1 1 0 0 0 1-1V2a1 1 0 0 0-1-1H6ZM2 5a1 1 0 0 0-1 1v8a1 1 0 0 0 1 1h8a1 1 0 0 0 1-1v-1h1v1a2 2 0 0 1-2 2H2a2 2 0 0 1-2-2V6a2 2 0 0 1 2-2h1v1H2Z\"/>\n </svg>\n `,\n eye: `\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" fill=\"currentColor\" class=\"bi bi-eye\" viewBox=\"0 0 16 16\">\n <path d=\"M16 8s-3-5.5-8-5.5S0 8 0 8s3 5.5 8 5.5S16 8 16 8zM1.173 8a13.133 13.133 0 0 1 1.66-2.043C4.12 4.668 5.88 3.5 8 3.5c2.12 0 3.879 1.168 5.168 2.457A13.133 13.133 0 0 1 14.828 8c-.058.087-.122.183-.195.288-.335.48-.83 1.12-1.465 1.755C11.879 11.332 10.119 12.5 8 12.5c-2.12 0-3.879-1.168-5.168-2.457A13.134 13.134 0 0 1 1.172 8z\"/>\n <path d=\"M8 5.5a2.5 2.5 0 1 0 0 5 2.5 2.5 0 0 0 0-5zM4.5 8a3.5 3.5 0 1 1 7 0 3.5 3.5 0 0 1-7 0z\"/>\n </svg>\n `,\n \"eye-slash\": `\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" fill=\"currentColor\" class=\"bi bi-eye-slash\" viewBox=\"0 0 16 16\">\n <path d=\"M13.359 11.238C15.06 9.72 16 8 16 8s-3-5.5-8-5.5a7.028 7.028 0 0 0-2.79.588l.77.771A5.944 5.944 0 0 1 8 3.5c2.12 0 3.879 1.168 5.168 2.457A13.134 13.134 0 0 1 14.828 8c-.058.087-.122.183-.195.288-.335.48-.83 1.12-1.465 1.755-.165.165-.337.328-.517.486l.708.709z\"/>\n <path d=\"M11.297 9.176a3.5 3.5 0 0 0-4.474-4.474l.823.823a2.5 2.5 0 0 1 2.829 2.829l.822.822zm-2.943 1.299.822.822a3.5 3.5 0 0 1-4.474-4.474l.823.823a2.5 2.5 0 0 0 2.829 2.829z\"/>\n <path d=\"M3.35 5.47c-.18.16-.353.322-.518.487A13.134 13.134 0 0 0 1.172 8l.195.288c.335.48.83 1.12 1.465 1.755C4.121 11.332 5.881 12.5 8 12.5c.716 0 1.39-.133 2.02-.36l.77.772A7.029 7.029 0 0 1 8 13.5C3 13.5 0 8 0 8s.939-1.721 2.641-3.238l.708.709zm10.296 8.884-12-12 .708-.708 12 12-.708.708z\"/>\n </svg>\n `,\n eyedropper: `\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" fill=\"currentColor\" class=\"bi bi-eyedropper\" viewBox=\"0 0 16 16\">\n <path d=\"M13.354.646a1.207 1.207 0 0 0-1.708 0L8.5 3.793l-.646-.647a.5.5 0 1 0-.708.708L8.293 5l-7.147 7.146A.5.5 0 0 0 1 12.5v1.793l-.854.853a.5.5 0 1 0 .708.707L1.707 15H3.5a.5.5 0 0 0 .354-.146L11 7.707l1.146 1.147a.5.5 0 0 0 .708-.708l-.647-.646 3.147-3.146a1.207 1.207 0 0 0 0-1.708l-2-2zM2 12.707l7-7L10.293 7l-7 7H2v-1.293z\"></path>\n </svg>\n `,\n \"grip-vertical\": `\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" fill=\"currentColor\" class=\"bi bi-grip-vertical\" viewBox=\"0 0 16 16\">\n <path d=\"M7 2a1 1 0 1 1-2 0 1 1 0 0 1 2 0zm3 0a1 1 0 1 1-2 0 1 1 0 0 1 2 0zM7 5a1 1 0 1 1-2 0 1 1 0 0 1 2 0zm3 0a1 1 0 1 1-2 0 1 1 0 0 1 2 0zM7 8a1 1 0 1 1-2 0 1 1 0 0 1 2 0zm3 0a1 1 0 1 1-2 0 1 1 0 0 1 2 0zm-3 3a1 1 0 1 1-2 0 1 1 0 0 1 2 0zm3 0a1 1 0 1 1-2 0 1 1 0 0 1 2 0zm-3 3a1 1 0 1 1-2 0 1 1 0 0 1 2 0zm3 0a1 1 0 1 1-2 0 1 1 0 0 1 2 0z\"></path>\n </svg>\n `,\n indeterminate: `\n <svg part=\"indeterminate-icon\" class=\"checkbox__icon\" viewBox=\"0 0 16 16\">\n <g stroke=\"none\" stroke-width=\"1\" fill=\"none\" fill-rule=\"evenodd\" stroke-linecap=\"round\">\n <g stroke=\"currentColor\" stroke-width=\"2\">\n <g transform=\"translate(2.285714, 6.857143)\">\n <path d=\"M10.2857143,1.14285714 L1.14285714,1.14285714\"></path>\n </g>\n </g>\n </g>\n </svg>\n `,\n \"person-fill\": `\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" fill=\"currentColor\" class=\"bi bi-person-fill\" viewBox=\"0 0 16 16\">\n <path d=\"M3 14s-1 0-1-1 1-4 6-4 6 3 6 4-1 1-1 1H3zm5-6a3 3 0 1 0 0-6 3 3 0 0 0 0 6z\"/>\n </svg>\n `,\n \"play-fill\": `\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" fill=\"currentColor\" class=\"bi bi-play-fill\" viewBox=\"0 0 16 16\">\n <path d=\"m11.596 8.697-6.363 3.692c-.54.313-1.233-.066-1.233-.697V4.308c0-.63.692-1.01 1.233-.696l6.363 3.692a.802.802 0 0 1 0 1.393z\"></path>\n </svg>\n `,\n \"pause-fill\": `\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" fill=\"currentColor\" class=\"bi bi-pause-fill\" viewBox=\"0 0 16 16\">\n <path d=\"M5.5 3.5A1.5 1.5 0 0 1 7 5v6a1.5 1.5 0 0 1-3 0V5a1.5 1.5 0 0 1 1.5-1.5zm5 0A1.5 1.5 0 0 1 12 5v6a1.5 1.5 0 0 1-3 0V5a1.5 1.5 0 0 1 1.5-1.5z\"></path>\n </svg>\n `,\n radio: `\n <svg part=\"checked-icon\" class=\"radio__icon\" viewBox=\"0 0 16 16\">\n <g stroke=\"none\" stroke-width=\"1\" fill=\"none\" fill-rule=\"evenodd\">\n <g fill=\"currentColor\">\n <circle cx=\"8\" cy=\"8\" r=\"3.42857143\"></circle>\n </g>\n </g>\n </svg>\n `,\n \"star-fill\": `\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" fill=\"currentColor\" class=\"bi bi-star-fill\" viewBox=\"0 0 16 16\">\n <path d=\"M3.612 15.443c-.386.198-.824-.149-.746-.592l.83-4.73L.173 6.765c-.329-.314-.158-.888.283-.95l4.898-.696L7.538.792c.197-.39.73-.39.927 0l2.184 4.327 4.898.696c.441.062.612.636.282.95l-3.522 3.356.83 4.73c.078.443-.36.79-.746.592L8 13.187l-4.389 2.256z\"/>\n </svg>\n `,\n \"x-lg\": `\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" fill=\"currentColor\" class=\"bi bi-x-lg\" viewBox=\"0 0 16 16\">\n <path d=\"M2.146 2.854a.5.5 0 1 1 .708-.708L8 7.293l5.146-5.147a.5.5 0 0 1 .708.708L8.707 8l5.147 5.146a.5.5 0 0 1-.708.708L8 8.707l-5.146 5.147a.5.5 0 0 1-.708-.708L7.293 8 2.146 2.854Z\"/>\n </svg>\n `,\n \"x-circle-fill\": `\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" fill=\"currentColor\" class=\"bi bi-x-circle-fill\" viewBox=\"0 0 16 16\">\n <path d=\"M16 8A8 8 0 1 1 0 8a8 8 0 0 1 16 0zM5.354 4.646a.5.5 0 1 0-.708.708L7.293 8l-2.647 2.646a.5.5 0 0 0 .708.708L8 8.707l2.646 2.647a.5.5 0 0 0 .708-.708L8.707 8l2.647-2.646a.5.5 0 0 0-.708-.708L8 7.293 5.354 4.646z\"></path>\n </svg>\n `\n};\nvar systemLibrary = {\n name: \"system\",\n resolver: (name) => {\n if (name in icons) {\n return `data:image/svg+xml,${encodeURIComponent(icons[name])}`;\n }\n return \"\";\n }\n};\nvar library_system_default = systemLibrary;\n\nexport {\n library_system_default\n};\n","import {\n library_default_default\n} from \"./chunk.P7ZG6EMR.js\";\nimport {\n library_system_default\n} from \"./chunk.3TFKS637.js\";\n\n// src/components/icon/library.ts\nvar registry = [library_default_default, library_system_default];\nvar watchedIcons = [];\nfunction watchIcon(icon) {\n watchedIcons.push(icon);\n}\nfunction unwatchIcon(icon) {\n watchedIcons = watchedIcons.filter((el) => el !== icon);\n}\nfunction getIconLibrary(name) {\n return registry.find((lib) => lib.name === name);\n}\nfunction registerIconLibrary(name, options) {\n unregisterIconLibrary(name);\n registry.push({\n name,\n resolver: options.resolver,\n mutator: options.mutator,\n spriteSheet: options.spriteSheet\n });\n watchedIcons.forEach((icon) => {\n if (icon.library === name) {\n icon.setIcon();\n }\n });\n}\nfunction unregisterIconLibrary(name) {\n registry = registry.filter((lib) => lib.name !== name);\n}\n\nexport {\n watchIcon,\n unwatchIcon,\n getIconLibrary,\n registerIconLibrary,\n unregisterIconLibrary\n};\n","// src/components/icon/icon.styles.ts\nimport { css } from \"lit\";\nvar icon_styles_default = css`\n :host {\n display: inline-block;\n width: 1em;\n height: 1em;\n box-sizing: content-box !important;\n }\n\n svg {\n display: block;\n height: 100%;\n width: 100%;\n }\n`;\n\nexport {\n icon_styles_default\n};\n","import {\n __spreadValues\n} from \"./chunk.B3BW2AY6.js\";\n\n// src/internal/watch.ts\nfunction watch(propertyName, options) {\n const resolvedOptions = __spreadValues({\n waitUntilFirstUpdate: false\n }, options);\n return (proto, decoratedFnName) => {\n const { update } = proto;\n const watchedProperties = Array.isArray(propertyName) ? propertyName : [propertyName];\n proto.update = function(changedProps) {\n watchedProperties.forEach((property) => {\n const key = property;\n if (changedProps.has(key)) {\n const oldValue = changedProps.get(key);\n const newValue = this[key];\n if (oldValue !== newValue) {\n if (!resolvedOptions.waitUntilFirstUpdate || this.hasUpdated) {\n this[decoratedFnName](oldValue, newValue);\n }\n }\n }\n });\n update.call(this, changedProps);\n };\n };\n}\n\nexport {\n watch\n};\n","import{_$LH as o}from\"./lit-html.js\";\n/**\n * @license\n * Copyright 2020 Google LLC\n * SPDX-License-Identifier: BSD-3-Clause\n */const{I:t}=o,i=o=>null===o||\"object\"!=typeof o&&\"function\"!=typeof o,n={HTML:1,SVG:2,MATHML:3},e=(o,t)=>void 0===t?void 0!==o?._$litType$:o?._$litType$===t,l=o=>null!=o?._$litType$?.h,c=o=>void 0!==o?._$litDirective$,d=o=>o?._$litDirective$,f=o=>void 0===o.strings,s=()=>document.createComment(\"\"),r=(o,i,n)=>{const e=o._$AA.parentNode,l=void 0===i?o._$AB:i._$AA;if(void 0===n){const i=e.insertBefore(s(),l),c=e.insertBefore(s(),l);n=new t(i,c,o,o.options)}else{const t=n._$AB.nextSibling,i=n._$AM,c=i!==o;if(c){let t;n._$AQ?.(o),n._$AM=o,void 0!==n._$AP&&(t=o._$AU)!==i._$AU&&n._$AP(t)}if(t!==l||c){let o=n._$AA;for(;o!==t;){const t=o.nextSibling;e.insertBefore(o,l),o=t}}}return n},v=(o,t,i=o)=>(o._$AI(t,i),o),u={},m=(o,t=u)=>o._$AH=t,p=o=>o._$AH,M=o=>{o._$AP?.(!1,!0);let t=o._$AA;const i=o._$AB.nextSibling;for(;t!==i;){const o=t.nextSibling;t.remove(),t=o}},h=o=>{o._$AR()};export{n as TemplateResultType,h as clearPart,p as getCommittedValue,d as getDirectiveClass,r as insertPart,l as isCompiledTemplateResult,c as isDirectiveResult,i as isPrimitive,f as isSingleExpression,e as isTemplateResult,M as removePart,v as setChildPartValue,m as setCommittedValue};\n//# sourceMappingURL=directive-helpers.js.map\n","import {\n getIconLibrary,\n unwatchIcon,\n watchIcon\n} from \"./chunk.ZL53POKZ.js\";\nimport {\n icon_styles_default\n} from \"./chunk.QLXRCYS4.js\";\nimport {\n watch\n} from \"./chunk.CCJUT23E.js\";\nimport {\n component_styles_default\n} from \"./chunk.TUVJKY7S.js\";\nimport {\n ShoelaceElement\n} from \"./chunk.UYAO2JRR.js\";\nimport {\n __decorateClass\n} from \"./chunk.B3BW2AY6.js\";\n\n// src/components/icon/icon.component.ts\nimport { html } from \"lit\";\nimport { isTemplateResult } from \"lit/directive-helpers.js\";\nimport { property, state } from \"lit/decorators.js\";\nvar CACHEABLE_ERROR = Symbol();\nvar RETRYABLE_ERROR = Symbol();\nvar parser;\nvar iconCache = /* @__PURE__ */ new Map();\nvar SlIcon = class extends ShoelaceElement {\n constructor() {\n super(...arguments);\n this.initialRender = false;\n this.svg = null;\n this.label = \"\";\n this.library = \"default\";\n }\n /** Given a URL, this function returns the resulting SVG element or an appropriate error symbol. */\n async resolveIcon(url, library) {\n var _a;\n let fileData;\n if (library == null ? void 0 : library.spriteSheet) {\n this.svg = html`<svg part=\"svg\">\n <use part=\"use\" href=\"${url}\"></use>\n </svg>`;\n return this.svg;\n }\n try {\n fileData = await fetch(url, { mode: \"cors\" });\n if (!fileData.ok)\n return fileData.status === 410 ? CACHEABLE_ERROR : RETRYABLE_ERROR;\n } catch (e) {\n return RETRYABLE_ERROR;\n }\n try {\n const div = document.createElement(\"div\");\n div.innerHTML = await fileData.text();\n const svg = div.firstElementChild;\n if (((_a = svg == null ? void 0 : svg.tagName) == null ? void 0 : _a.toLowerCase()) !== \"svg\")\n return CACHEABLE_ERROR;\n if (!parser)\n parser = new DOMParser();\n const doc = parser.parseFromString(svg.outerHTML, \"text/html\");\n const svgEl = doc.body.querySelector(\"svg\");\n if (!svgEl)\n return CACHEABLE_ERROR;\n svgEl.part.add(\"svg\");\n return document.adoptNode(svgEl);\n } catch (e) {\n return CACHEABLE_ERROR;\n }\n }\n connectedCallback() {\n super.connectedCallback();\n watchIcon(this);\n }\n firstUpdated() {\n this.initialRender = true;\n this.setIcon();\n }\n disconnectedCallback() {\n super.disconnectedCallback();\n unwatchIcon(this);\n }\n getIconSource() {\n const library = getIconLibrary(this.library);\n if (this.name && library) {\n return {\n url: library.resolver(this.name),\n fromLibrary: true\n };\n }\n return {\n url: this.src,\n fromLibrary: false\n };\n }\n handleLabelChange() {\n const hasLabel = typeof this.label === \"string\" && this.label.length > 0;\n if (hasLabel) {\n this.setAttribute(\"role\", \"img\");\n this.setAttribute(\"aria-label\", this.label);\n this.removeAttribute(\"aria-hidden\");\n } else {\n this.removeAttribute(\"role\");\n this.removeAttribute(\"aria-label\");\n this.setAttribute(\"aria-hidden\", \"true\");\n }\n }\n async setIcon() {\n var _a;\n const { url, fromLibrary } = this.getIconSource();\n const library = fromLibrary ? getIconLibrary(this.library) : void 0;\n if (!url) {\n this.svg = null;\n return;\n }\n let iconResolver = iconCache.get(url);\n if (!iconResolver) {\n iconResolver = this.resolveIcon(url, library);\n iconCache.set(url, iconResolver);\n }\n if (!this.initialRender) {\n return;\n }\n const svg = await iconResolver;\n if (svg === RETRYABLE_ERROR) {\n iconCache.delete(url);\n }\n if (url !== this.getIconSource().url) {\n return;\n }\n if (isTemplateResult(svg)) {\n this.svg = svg;\n if (library) {\n await this.updateComplete;\n const shadowSVG = this.shadowRoot.querySelector(\"[part='svg']\");\n if (typeof library.mutator === \"function\" && shadowSVG) {\n library.mutator(shadowSVG);\n }\n }\n return;\n }\n switch (svg) {\n case RETRYABLE_ERROR:\n case CACHEABLE_ERROR:\n this.svg = null;\n this.emit(\"sl-error\");\n break;\n default:\n this.svg = svg.cloneNode(true);\n (_a = library == null ? void 0 : library.mutator) == null ? void 0 : _a.call(library, this.svg);\n this.emit(\"sl-load\");\n }\n }\n render() {\n return this.svg;\n }\n};\nSlIcon.styles = [component_styles_default, icon_styles_default];\n__decorateClass([\n state()\n], SlIcon.prototype, \"svg\", 2);\n__decorateClass([\n property({ reflect: true })\n], SlIcon.prototype, \"name\", 2);\n__decorateClass([\n property()\n], SlIcon.prototype, \"src\", 2);\n__decorateClass([\n property()\n], SlIcon.prototype, \"label\", 2);\n__decorateClass([\n property({ reflect: true })\n], SlIcon.prototype, \"library\", 2);\n__decorateClass([\n watch(\"label\")\n], SlIcon.prototype, \"handleLabelChange\", 1);\n__decorateClass([\n watch([\"name\", \"src\", \"library\"])\n], SlIcon.prototype, \"setIcon\", 1);\n\nexport {\n SlIcon\n};\n","import{html as t,svg as r,mathml as e}from\"./lit-html.js\";\n/**\n * @license\n * Copyright 2020 Google LLC\n * SPDX-License-Identifier: BSD-3-Clause\n */\nconst a=Symbol.for(\"\"),o=t=>{if(t?.r===a)return t?._$litStatic$},s=t=>({_$litStatic$:t,r:a}),i=(t,...r)=>({_$litStatic$:r.reduce(((r,e,a)=>r+(t=>{if(void 0!==t._$litStatic$)return t._$litStatic$;throw Error(`Value passed to 'literal' function must be a 'literal' result: ${t}. Use 'unsafeStatic' to pass non-literal values, but\\n take care to ensure page security.`)})(e)+t[a+1]),t[0]),r:a}),l=new Map,n=t=>(r,...e)=>{const a=e.length;let s,i;const n=[],u=[];let c,$=0,f=!1;for(;$<a;){for(c=r[$];$<a&&void 0!==(i=e[$],s=o(i));)c+=s+r[++$],f=!0;$!==a&&u.push(i),n.push(c),$++}if($===a&&n.push(r[a]),f){const t=n.join(\"$$lit$$\");void 0===(r=l.get(t))&&(n.raw=n,l.set(t,r=n)),e=u}return t(r,...e)},u=n(t),c=n(r),$=n(e);export{u as html,i as literal,$ as mathml,c as svg,s as unsafeStatic,n as withStatic};\n//# sourceMappingURL=static.js.map\n","import{nothing as t}from\"../lit-html.js\";\n/**\n * @license\n * Copyright 2018 Google LLC\n * SPDX-License-Identifier: BSD-3-Clause\n */const o=o=>o??t;export{o as ifDefined};\n//# sourceMappingURL=if-defined.js.map\n","import {\n SlSpinner\n} from \"./chunk.TLKDQ5JG.js\";\nimport {\n FormControlController,\n validValidityState\n} from \"./chunk.2RCF7SLU.js\";\nimport {\n button_styles_default\n} from \"./chunk.MAQXLKQ7.js\";\nimport {\n LocalizeController\n} from \"./chunk.WLV3FVBR.js\";\nimport {\n HasSlotController\n} from \"./chunk.NYIIDP5N.js\";\nimport {\n SlIcon\n} from \"./chunk.E6QAPUBK.js\";\nimport {\n watch\n} from \"./chunk.CCJUT23E.js\";\nimport {\n component_styles_default\n} from \"./chunk.TUVJKY7S.js\";\nimport {\n ShoelaceElement\n} from \"./chunk.UYAO2JRR.js\";\nimport {\n __decorateClass\n} from \"./chunk.B3BW2AY6.js\";\n\n// src/components/button/button.component.ts\nimport { classMap } from \"lit/directives/class-map.js\";\nimport { html, literal } from \"lit/static-html.js\";\nimport { ifDefined } from \"lit/directives/if-defined.js\";\nimport { property, query, state } from \"lit/decorators.js\";\nvar SlButton = class extends ShoelaceElement {\n constructor() {\n super(...arguments);\n this.formControlController = new FormControlController(this, {\n assumeInteractionOn: [\"click\"]\n });\n this.hasSlotController = new HasSlotController(this, \"[default]\", \"prefix\", \"suffix\");\n this.localize = new LocalizeController(this);\n this.hasFocus = false;\n this.invalid = false;\n this.title = \"\";\n this.variant = \"default\";\n this.size = \"medium\";\n this.caret = false;\n this.disabled = false;\n this.loading = false;\n this.outline = false;\n this.pill = false;\n this.circle = false;\n this.type = \"button\";\n this.name = \"\";\n this.value = \"\";\n this.href = \"\";\n this.rel = \"noreferrer noopener\";\n }\n /** Gets the validity state object */\n get validity() {\n if (this.isButton()) {\n return this.button.validity;\n }\n return validValidityState;\n }\n /** Gets the validation message */\n get validationMessage() {\n if (this.isButton()) {\n return this.button.validationMessage;\n }\n return \"\";\n }\n firstUpdated() {\n if (this.isButton()) {\n this.formControlController.updateValidity();\n }\n }\n handleBlur() {\n this.hasFocus = false;\n this.emit(\"sl-blur\");\n }\n handleFocus() {\n this.hasFocus = true;\n this.emit(\"sl-focus\");\n }\n handleClick() {\n if (this.type === \"submit\") {\n this.formControlController.submit(this);\n }\n if (this.type === \"reset\") {\n this.formControlController.reset(this);\n }\n }\n handleInvalid(event) {\n this.formControlController.setValidity(false);\n this.formControlController.emitInvalidEvent(event);\n }\n isButton() {\n return this.href ? false : true;\n }\n isLink() {\n return this.href ? true : false;\n }\n handleDisabledChange() {\n if (this.isButton()) {\n this.formControlController.setValidity(this.disabled);\n }\n }\n /** Simulates a click on the button. */\n click() {\n this.button.click();\n }\n /** Sets focus on the button. */\n focus(options) {\n this.button.focus(options);\n }\n /** Removes focus from the button. */\n blur() {\n this.button.blur();\n }\n /** Checks for validity but does not show a validation message. Returns `true` when valid and `false` when invalid. */\n checkValidity() {\n if (this.isButton()) {\n return this.button.checkValidity();\n }\n return true;\n }\n /** Gets the associated form, if one exists. */\n getForm() {\n return this.formControlController.getForm();\n }\n /** Checks for validity and shows the browser's validation message if the control is invalid. */\n reportValidity() {\n if (this.isButton()) {\n return this.button.reportValidity();\n }\n return true;\n }\n /** Sets a custom validation message. Pass an empty string to restore validity. */\n setCustomValidity(message) {\n if (this.isButton()) {\n this.button.setCustomValidity(message);\n this.formControlController.updateValidity();\n }\n }\n render() {\n const isLink = this.isLink();\n const tag = isLink ? literal`a` : literal`button`;\n return html`\n <${tag}\n part=\"base\"\n class=${classMap({\n button: true,\n \"button--default\": this.variant === \"default\",\n \"button--primary\": this.variant === \"primary\",\n \"button--success\": this.variant === \"success\",\n \"button--neutral\": this.variant === \"neutral\",\n \"button--warning\": this.variant === \"warning\",\n \"button--danger\": this.variant === \"danger\",\n \"button--text\": this.variant === \"text\",\n \"button--small\": this.size === \"small\",\n \"button--medium\": this.size === \"medium\",\n \"button--large\": this.size === \"large\",\n \"button--caret\": this.caret,\n \"button--circle\": this.circle,\n \"button--disabled\": this.disabled,\n \"button--focused\": this.hasFocus,\n \"button--loading\": this.loading,\n \"button--standard\": !this.outline,\n \"button--outline\": this.outline,\n \"button--pill\": this.pill,\n \"button--rtl\": this.localize.dir() === \"rtl\",\n \"button--has-label\": this.hasSlotController.test(\"[default]\"),\n \"button--has-prefix\": this.hasSlotController.test(\"prefix\"),\n \"button--has-suffix\": this.hasSlotController.test(\"suffix\")\n })}\n ?disabled=${ifDefined(isLink ? void 0 : this.disabled)}\n type=${ifDefined(isLink ? void 0 : this.type)}\n title=${this.title}\n name=${ifDefined(isLink ? void 0 : this.name)}\n value=${ifDefined(isLink ? void 0 : this.value)}\n href=${ifDefined(isLink && !this.disabled ? this.href : void 0)}\n target=${ifDefined(isLink ? this.target : void 0)}\n download=${ifDefined(isLink ? this.download : void 0)}\n rel=${ifDefined(isLink ? this.rel : void 0)}\n role=${ifDefined(isLink ? void 0 : \"button\")}\n aria-disabled=${this.disabled ? \"true\" : \"false\"}\n tabindex=${this.disabled ? \"-1\" : \"0\"}\n @blur=${this.handleBlur}\n @focus=${this.handleFocus}\n @invalid=${this.isButton() ? this.handleInvalid : null}\n @click=${this.handleClick}\n >\n <slot name=\"prefix\" part=\"prefix\" class=\"button__prefix\"></slot>\n <slot part=\"label\" class=\"button__label\"></slot>\n <slot name=\"suffix\" part=\"suffix\" class=\"button__suffix\"></slot>\n ${this.caret ? html` <sl-icon part=\"caret\" class=\"button__caret\" library=\"system\" name=\"caret\"></sl-icon> ` : \"\"}\n ${this.loading ? html`<sl-spinner part=\"spinner\"></sl-spinner>` : \"\"}\n </${tag}>\n `;\n }\n};\nSlButton.styles = [component_styles_default, button_styles_default];\nSlButton.dependencies = {\n \"sl-icon\": SlIcon,\n \"sl-spinner\": SlSpinner\n};\n__decorateClass([\n query(\".button\")\n], SlButton.prototype, \"button\", 2);\n__decorateClass([\n state()\n], SlButton.prototype, \"hasFocus\", 2);\n__decorateClass([\n state()\n], SlButton.prototype, \"invalid\", 2);\n__decorateClass([\n property()\n], SlButton.prototype, \"title\", 2);\n__decorateClass([\n property({ reflect: true })\n], SlButton.prototype, \"variant\", 2);\n__decorateClass([\n property({ reflect: true })\n], SlButton.prototype, \"size\", 2);\n__decorateClass([\n property({ type: Boolean, reflect: true })\n], SlButton.prototype, \"caret\", 2);\n__decorateClass([\n property({ type: Boolean, reflect: true })\n], SlButton.prototype, \"disabled\", 2);\n__decorateClass([\n property({ type: Boolean, reflect: true })\n], SlButton.prototype, \"loading\", 2);\n__decorateClass([\n property({ type: Boolean, reflect: true })\n], SlButton.prototype, \"outline\", 2);\n__decorateClass([\n property({ type: Boolean, reflect: true })\n], SlButton.prototype, \"pill\", 2);\n__decorateClass([\n property({ type: Boolean, reflect: true })\n], SlButton.prototype, \"circle\", 2);\n__decorateClass([\n property()\n], SlButton.prototype, \"type\", 2);\n__decorateClass([\n property()\n], SlButton.prototype, \"name\", 2);\n__decorateClass([\n property()\n], SlButton.prototype, \"value\", 2);\n__decorateClass([\n property()\n], SlButton.prototype, \"href\", 2);\n__decorateClass([\n property()\n], SlButton.prototype, \"target\", 2);\n__decorateClass([\n property()\n], SlButton.prototype, \"rel\", 2);\n__decorateClass([\n property()\n], SlButton.prototype, \"download\", 2);\n__decorateClass([\n property()\n], SlButton.prototype, \"form\", 2);\n__decorateClass([\n property({ attribute: \"formaction\" })\n], SlButton.prototype, \"formAction\", 2);\n__decorateClass([\n property({ attribute: \"formenctype\" })\n], SlButton.prototype, \"formEnctype\", 2);\n__decorateClass([\n property({ attribute: \"formmethod\" })\n], SlButton.prototype, \"formMethod\", 2);\n__decorateClass([\n property({ attribute: \"formnovalidate\", type: Boolean })\n], SlButton.prototype, \"formNoValidate\", 2);\n__decorateClass([\n property({ attribute: \"formtarget\" })\n], SlButton.prototype, \"formTarget\", 2);\n__decorateClass([\n watch(\"disabled\", { waitUntilFirstUpdate: true })\n], SlButton.prototype, \"handleDisabledChange\", 1);\n\nexport {\n SlButton\n};\n","import {\n SlButton\n} from \"./chunk.N2SNE3QN.js\";\n\n// src/components/button/button.ts\nvar button_default = SlButton;\nSlButton.define(\"sl-button\");\n\nexport {\n button_default\n};\n","import { css } from 'lit';\n\n// these styles can be imported from any component\n// for an example of how to use this, check /pages/about-about.ts\nexport const styles = css`\n @media(min-width: 1000px) {\n sl-card {\n max-width: 70vw;\n }\n }\n\n main {\n margin-top: 70px;\n padding: 12px;\n }\n\n.ProseMirror {\n position: relative;\n word-wrap: break-word;\n white-space: pre-wrap;\n -webkit-font-variant-ligatures: none;\n font-variant-ligatures: none;\n padding: 1rem;\n line-height: 1.2;\n outline: none;\n font-family: var(\n --markdown-editor-typography-font-family,\n var(--mdc-typography-font-family, Montserrat, sans-serif)\n );\n font-size: var(\n --markdown-editor-typography-font-size,\n var(--mdc-typography-subtitle1-font-size, 1rem)\n );\n font-weight: var(\n --markdown-editor-typography-font-weight,\n var(--mdc-typography-subtitle1-font-weight, 400)\n );\n letter-spacing: var(\n --markdown-editor-typography-letter-spacing,\n var(--mdc-typography-subtitle1-letter-spacing, 0.009375em)\n );\n }\n\n .ProseMirror pre {\n white-space: pre-wrap;\n }\n\n .ProseMirror li {\n position: relative;\n }\n\n .ProseMirror p:first-child,\n .ProseMirror h1:first-child,\n .ProseMirror h2:first-child,\n .ProseMirror h3:first-child,\n .ProseMirror h4:first-child,\n .ProseMirror h5:first-child,\n .ProseMirror h6:first-child {\n margin-top: 10px;\n }\n\n .ProseMirror a {\n color: var(--markdown-editor-typography-anchor-color, -webkit-link);\n text-decoration: var(--markdown-editor-typography-anchor-text-decoration);\n }\n\n .ProseMirror p {\n margin-bottom: 1em;\n }\n\n .ProseMirror-hideselection {\n caret-color: transparent;\n }\n\n .ProseMirror-hideselection *::selection,\n .ProseMirror-hideselection *::-moz-selection {\n background: transparent;\n }\n\n .ProseMirror-selectednode {\n outline: 2px solid #8cf;\n }\n\n /* Make sure li selections wrap around markers */\n li.ProseMirror-selectednode {\n outline: none;\n }\n\n li.ProseMirror-selectednode:after {\n content: '';\n position: absolute;\n left: -32px;\n right: -2px;\n top: -2px;\n bottom: -2px;\n border: 2px solid #8cf;\n pointer-events: none;\n }\n\n .ProseMirror-textblock-dropdown {\n min-width: 3em;\n }\n\n .ProseMirror-menu {\n margin: 0 -4px;\n line-height: 1;\n }\n\n .ProseMirror-tooltip .ProseMirror-menu {\n width: -webkit-fit-content;\n width: fit-content;\n white-space: pre;\n }\n\n .ProseMirror-menuitem {\n margin: 0.25rem 0.25rem 0.25rem 0;\n display: flex;\n justify-content: center;\n align-items: center;\n border-radius: 4px;\n overflow: hidden;\n }\n .ProseMirror-menuitem:hover {\n background-color: #f5f5f5;\n }\n\n .ProseMirror-menuseparator {\n margin: 0 8px;\n }\n\n .ProseMirror-menu-dropdown,\n .ProseMirror-menu-dropdown-menu {\n font-size: 90%;\n white-space: nowrap;\n }\n\n .ProseMirror-menu-dropdown {\n vertical-align: 1px;\n cursor: pointer;\n position: relative;\n padding-right: 15px;\n }\n\n .ProseMirror-menu-dropdown-wrap {\n padding: 1px 0 1px 4px;\n display: inline-block;\n position: relative;\n }\n\n .ProseMirror-menu-dropdown:after {\n content: '';\n border-left: 4px solid transparent;\n border-right: 4px solid transparent;\n border-top: 4px solid currentColor;\n opacity: 0.6;\n position: absolute;\n right: 4px;\n top: calc(50% - 2px);\n }\n\n .ProseMirror-menu-dropdown-menu,\n .ProseMirror-menu-submenu {\n position: absolute;\n background: white;\n color: #666;\n border: 1px solid #aaa;\n padding: 2px;\n }\n\n .ProseMirror-menu-dropdown-menu {\n z-index: 1;\n min-width: 6em;\n }\n\n .ProseMirror-menu-dropdown-item {\n cursor: pointer;\n }\n\n .ProseMirror-menu-dropdown-item:hover {\n background: #f2f2f2;\n }\n\n .ProseMirror-menu-dropdown-item > div {\n padding: 0.375rem 0.5rem;\n }\n\n .ProseMirror-menu-submenu-wrap {\n position: relative;\n margin-right: -4px;\n }\n\n .ProseMirror-menu-submenu-label:after {\n content: '';\n border-top: 4px solid transparent;\n border-bottom: 4px solid transparent;\n border-left: 4px solid currentColor;\n opacity: 0.6;\n position: absolute;\n right: 4px;\n top: calc(50% - 4px);\n }\n\n .ProseMirror-menu-submenu {\n display: none;\n min-width: 4em;\n left: 100%;\n top: -3px;\n }\n\n .ProseMirror-menu-active {\n background: #eee;\n border-radius: 4px;\n color: black;\n }\n\n .ProseMirror-menu-submenu-wrap:hover .ProseMirror-menu-submenu,\n .ProseMirror-menu-submenu-wrap-active .ProseMirror-menu-submenu {\n display: block;\n }\n\n .ProseMirror-menubar {\n display: flex;\n flex-wrap: wrap;\n position: relative;\n background: white;\n min-height: 1em;\n overflow: visible;\n z-index: 2;\n top: 0;\n left: 0;\n right: 0;\n color: #666;\n padding: 1px 6px;\n border-top-left-radius: inherit;\n border-top-right-radius: inherit;\n border-bottom: 1px solid\n var(--markdown-editor-outline-idle-border-color, rgba(0, 0, 0, 0.38));\n box-sizing: border-box;\n -moz-box-sizing: border-box;\n }\n\n .ProseMirror-icon {\n display: inline-block;\n line-height: 0.8;\n vertical-align: -2px;\n /* Compensate for padding */\n padding: 2px 8px;\n cursor: pointer;\n }\n\n .ProseMirror-menu-disabled {\n color: rgba(0,0,0,0.37);\n background-color: rgba(0,0,0,0.12);\n cursor: not-allowed;\n }\n\n .ProseMirror-menu-disabled.ProseMirror-icon {\n cursor: not-allowed;\n }\n\n .ProseMirror-icon svg {\n fill: currentColor;\n height: 1em;\n }\n\n .ProseMirror-icon span {\n vertical-align: text-top;\n }\n\n .ProseMirror-gapcursor {\n display: none;\n pointer-events: none;\n position: absolute;\n }\n\n .ProseMirror-gapcursor:after {\n content: '';\n display: block;\n position: absolute;\n top: -2px;\n width: 20px;\n border-top: 1px solid black;\n animation: ProseMirror-cursor-blink 1.1s steps(2, start) infinite;\n }\n\n @keyframes ProseMirror-cursor-blink {\n to {\n visibility: hidden;\n }\n }\n\n .ProseMirror-focused .ProseMirror-gapcursor {\n display: block;\n }\n\n /* Add space around the hr to make clicking it easier */\n .ProseMirror-example-setup-style hr {\n padding: 2px 10px;\n border: none;\n margin: 1em 0;\n }\n\n .ProseMirror-example-setup-style hr:after {\n content: '';\n display: block;\n height: 1px;\n background-color: silver;\n line-height: 2px;\n }\n\n .ProseMirror ul,\n .ProseMirror ol {\n padding-left: 30px;\n }\n\n .ProseMirror blockquote {\n padding-left: 1em;\n border-left: 3px solid #eee;\n margin-left: 0;\n margin-right: 0;\n }\n\n .ProseMirror-example-setup-style img {\n cursor: default;\n }\n\n .ProseMirror-invalid {\n background: #ffc;\n border: 1px solid #cc7;\n border-radius: 4px;\n padding: 5px 10px;\n position: absolute;\n min-width: 10em;\n }\n\n .ProseMirror h1.title.empty-node::before,\n .ProseMirror h2.instructional-prompt.empty-node::before,\n .ProseMirror h3.mechanical-promp.empty-node::before {\n content: 'Enter title here...';\n }\n\n .ProseMirror div.passage-subtitle.empty-node:first-child::before {\n content: 'Enter subtitle here...';\n }\n\n .ProseMirror div.passage-author.empty-node:first-child::before,\n .ProseMirror div.passage-cast-title.empty-node:first-child::before,\n .ProseMirror div.passage-act-title.empty-node:first-child::before,\n .ProseMirror div.passage-scene-title.empty-node:first-child::before,\n .ProseMirror div.passage-verse.empty-node:first-child::before,\n .ProseMirror div.passage-footnotes.empty-node:first-child::before,\n .ProseMirror div.paragraph.empty-node:first-child::before {\n content: 'Enter text here...';\n }\n\n div[contenteditable]:focus h1.title.empty-node::before,\n div[contenteditable]:focus h2.instructional-prompt.empty-node::before,\n div[contenteditable]:focus h3.mechanical-promp.empty-node::before,\n div[contenteditable]:focus\n div.passage-subtitle.empty-node:first-child::before,\n div[contenteditable]:focus div.passage-author.empty-node:first-child::before,\n div[contenteditable]:focus\n div.passage-cast-title.empty-node:first-child::before,\n div[contenteditable]:focus\n div.passage-act-title.empty-node:first-child::before,\n div[contenteditable]:focus\n div.passage-scene-title.empty-node:first-child::before,\n div[contenteditable]:focus div.passage-verse.empty-node:first-child::before,\n div[contenteditable]:focus\n div.passage-footnotes.empty-node:first-child::before,\n div[contenteditable]:focus div.paragraph.empty-node:first-child::before {\n content: '';\n }\n\n .ProseMirror .empty-node::before {\n position: absolute;\n color: #aaa;\n cursor: text;\n font-style: italic;\n }\n\n #editor, .editor {\n background: white;\n color: black;\n background-clip: padding-box;\n padding: 5px 0;\n }\n\n #editor[disabled] .ProseMirror-menubar {\n display: none!important;\n }\n\n drop-down-editor rich-text .inline-component-button,\n expand-collapse rich-text .inline-component-button,\n flip-reveal rich-text .inline-component-button,\n hint-list rich-text .inline-component-button,\n option-list rich-text .inline-component-button,\n plankton-passage rich-text .inline-component-button {\n pointer-events: none;\n color: lightgray;\n }\n\n #ProseMirror-icon-collection path {\n fill-rule: evenodd;\n }\n #welcomeBar {\n display: flex;\n justify-content: center;\n align-items: center;\n flex-direction: column;\n }\n\n #welcomeCard,\n #infoCard {\n padding: 18px;\n padding-top: 0px;\n }\n\n sl-card::part(footer) {\n display: flex;\n justify-content: flex-end;\n }\n\n @media(min-width: 750px) {\n sl-card {\n width: 70vw;\n }\n }\n\n @media (horizontal-viewport-segments: 2) {\n #welcomeBar {\n flex-direction: row;\n align-items: flex-start;\n justify-content: space-between;\n }\n\n\n\n\n @media (horizontal-viewport-segments: 2) {\n #welcomeBar {\n flex-direction: row;\n align-items: flex-start;\n justify-content: space-between;\n }\n\n\n }\n .boring {\n background: grey;\n }\n\n .plus {\n position: absolute;\n\n padding: 8px;\n background-color: #4CAF50;\n color: red;\n border: none;\n cursor: pointer;\n}\n\n.plus:hover {\n background-color: #45a049;\n}\n\n.ProseMirror-textblock-dropdown {\n min-width: 3em;\n}\n}`","import { LitElement, css, html } from 'lit';\nimport { property, customElement } from 'lit/decorators.js';\nimport { Relay } from 'nostr-tools';\n\nimport '@shoelace-style/shoelace/dist/components/card/card.js';\nimport '@shoelace-style/shoelace/dist/components/button/button.js';\n\nimport { styles } from '../styles/shared-styles';\n\n\n\n\n@customElement('note-wall')\nexport class NoteWall extends LitElement {\n\n@property({ type: Array }) notes: { content: string; date: string }[] = [];\n@property({ type: String }) relayName: string = '';\n\n\nnote = ''; // store notes\n\n static styles = [\n styles,\n css`\n\n.comment-wall .main-section-header {\n margin-bottom: 3px;\n}\n\n.comment-wall .main-section-h2 {\n margin-bottom: 0;\n}\n\n#comment-counter {\n margin-top: 0;\n margin-left: 15px;\n margin-bottom: 3px;\n}\n\n.comment-wall table {\n margin: auto;\n margin-bottom: 5px;\n color: black;\n}\n\n\n.comment-wall th {\n width: 158px;\n padding: 3px;\n vertical-align: top;\n}\n\n.comment-wall td {\n vertical-align: top;\n width: 269px;\n padding: 3px;\n}\n\n.comment-wall figcaption,\n.comment-wall figure {\n margin: 0;\n}\n\n.comment-wall figcaption {\n margin-bottom: 1em;\n}\n\n.comment-wall figure {\n margin-bottom: 49.33px;\n}\n\n.comment-wall h3 {\n font-size: 10pt;\n margin: 0;\n margin-bottom: 3em;\n}\n\n.comment-wall p {\n font-weight: normal;\n text-align: center;\n margin: 0;\n}\n\n#add-comment {\n text-align: right;\n margin-right: 10px;\n margin-bottom: 5px;\n}\n\n\n `];\n\n\n\n getUserLang() {\n\n return navigator.language || 'en';\n\n }\n\n async firstUpdated() {\n // this method is a lifecycle even in lit\n // for more info check out the lit docs https://lit.dev/docs/components/lifecycle/\n console.log('Here are some recent notes from the neighborhood');\n }\n\n async connectedCallback(): Promise<void> {\n super.connectedCallback();\n await Promise.all([\n this.fetchNotes(),\n\n ]);\n\n}\n\n\n/* async translateText(text: string, targetLang: string) {\n try {\n const response = await axios.post('https://api-free.deepl.com/v2/translate', {\n text, target_lang: targetLang });\n\n return response.data.translations[0].text; // Assuming DeepL's API structure\n } catch (error: any) {\n console.error('Error during translation:', error.response?.data || error.message);\n return '';\n }\n} */\n\n\n\n\nasync fetchNotes() {\n // const ifcaRelay = await Relay.connect('wss://hi.myvoiceourstory.org');\n\n const migsRelay = await Relay.connect('wss://notes.miguelalmodo.com');\n console.log(`connected to ${migsRelay.url}`);\n\n\n// store the relay name\n this.relayName = migsRelay.url;\n\n\n const sub = migsRelay.subscribe([\n {\n kinds: [30023], // short and long form notes\n limit: 5,\n }\n ], {\n onevent: async (event) => {\n console.log('Event received:', event);\n this.notes = [...this.notes, {\n content: event.content,\n date: new Date(event.created_at * 1000).toLocaleDateString(),\n }];\n this.requestUpdate();\n console.log(migsRelay)\n\n },\n oneose: () => {\n sub.close();\n this.requestUpdate();\n },\n });\n\n}\n\nasync displayLongNotes() {\n\n}\n\n\n\n\n share() {\n if ((navigator as any).share) {\n (navigator as any).share({\n title: 'Nostr Micro Client',\n text: 'Share this with your homie!',\n url: 'https://miguelalmodo.com/',\n });\n }\n }\n\n render() {\n return html`\n <app-header ?enableBack=\"${true}\"></app-header>\n <main> <div id=\"welcomeBar\">\n<sl-card id=\"WelcomeCard\">\n <section>\n\n <header class=\"main-section-header\">\n <h2 class=\"main-section-h2\">Recent Notes from ${this.relayName}</h2>\n </header>\n\n\n\n\n <table class=\"comment-wall\">\n ${this.notes.map(note => {\n // extract URL from note content\n const urlMatch = note.content.match(/https?:\\/\\/[^\\s]+/);\n const textContent = note.content.replace(urlMatch?.[0] || '', '').trim();\n\n\n // Check for yt links and extract video ID\n const youtubeRegex = /(?:https?:\\/\\/(?:www\\.)?youtube\\.com\\/watch\\?v=|https?:\\/\\/youtu\\.be\\/)([a-zA-Z0-9_-]{11})/;\n const youtubeMatch = urlMatch?.[0].match(youtubeRegex);\n const youtubeVideoId = youtubeMatch ? youtubeMatch[1] : null;\n\n // build yt thumbnail URL if applicable\n const thumbnailUrl = youtubeVideoId\n ? `https://img.youtube.com/vi/${youtubeVideoId}/maxresdefault.jpg`\n : null;\n\n //check for image links\n const imgRegex = /(https?:\\/\\/[^\\s]+\\.(?:jpg|jpeg|png|gif))/i;\n const imgMatch = urlMatch?.find(url => imgRegex.test(url));\n\n return html`\n <tr>\n <td><h3>${note.date}</h3></td>\n <td>\n <p>${textContent}</p>\n ${thumbnailUrl\n ? html`<img src=\"${thumbnailUrl}\" alt=\"YouTube thumbnail\" style=\"max-width: 30%; height: 30%;\">`\n : imgMatch\n ? html`<img src=\"${imgMatch}\" alt=\"Note image\" style=\"max-width: 30%; height: 30%;\">`\n : ''}\n </td>\n </tr>\n `;\n })}\n</table>\n\n\n\n </section></main>\n</sl-card>\n `;\n }\n}\n","const KEY = Symbol.for('app-tools::log::1.x');\n\nglobalThis[KEY] = { \n setDebug, \n debug: 'window' in globalThis ? new URL(window.location.href).searchParams.has('app-tools-debug') : false,\n};\n\n/**\n * @param {boolean} value \n */\nexport function setDebug(value) {\n globalThis[KEY].debug = !!value;\n}\n\n/**\n * @returns {boolean}\n */\nexport function getDebug() {\n return globalThis[KEY].debug;\n}\n\n/**\n * @param {string} action - describing the action\n * @param {*} [data] - any js value\n */\nexport function log(action, data) {\n if(globalThis[KEY].debug) {\n console.groupCollapsed(`[app-tools] ${action}`);\n if(data) {\n console.log(data);\n }\n console.groupEnd();\n }\n}\n\n/**\n * @param {string} title \n * @returns {(action: string, data?: any) => void}\n */\nexport function createLogger(title) {\n return (action, data) => {\n log(`${title}: ${action}`, data);\n }\n}","import { createLogger } from '../utils/log.js';\nconst log = createLogger('router');\n\nclass RouteEvent extends Event {\n /**\n * @param {Context} context \n */\n constructor(context) {\n super('route-changed');\n this.context = context;\n }\n}\n\n/**\n * @typedef {import('./types.js').Plugin} Plugin\n * @typedef {import('./types.js').Context} Context\n * @typedef {import('./types.js').RouteDefinition} RouteDefinition\n * @typedef {import('./types.js').Route} Route\n * @typedef {import('./types.js').Config} Config\n */\n\nexport class Router extends EventTarget {\n context = {\n params: {},\n query: {},\n title: '',\n url: new URL(window.location.href),\n }\n\n /**\n * @param {Config} config \n */\n constructor(config) {\n super();\n this.config = config;\n\n /** @type {Route[]} */\n this.routes = config.routes.map((route) => {\n const r = /** @type {unknown} */ ({\n ...route,\n // @ts-ignore\n urlPattern: new URLPattern({\n pathname: route.path,\n baseURL: window.location.href,\n search: '*',\n hash: '*',\n }),\n });\n return /** @type {Route} */ (r);\n });\n log('Initialized routes', this.routes);\n\n queueMicrotask(() => {\n this.navigate(new URL(window.location.href), { replace: true });\n });\n window.addEventListener('popstate', this._onPopState);\n window.addEventListener('click', this._onAnchorClick);\n }\n\n uninstall() {\n window.removeEventListener('popstate', this._onPopState);\n window.removeEventListener('click', this._onAnchorClick);\n }\n\n get url() {\n return new URL(window.location.href);\n }\n\n get fallback() {\n return new URL(\n this.config?.fallback || this.baseUrl.href.substring(window.location.origin.length), \n this.baseUrl\n )\n }\n\n get baseUrl() {\n return new URL('./', document.baseURI);\n }\n\n /**\n * @template RenderResult\n */\n render() {\n log(`Rendering route ${this.context.url.pathname}${this.context.url.search}${this.context.url.hash}`, { context: this.context, route: this.route });\n return /** @type {RenderResult} */ (this.route?.render?.(this.context));\n }\n\n /**\n * @private\n * @param {URL} url \n * @returns {Route | null}\n */\n _matchRoute(url) {\n for (const route of this.routes) {\n const match = route.urlPattern.exec(url);\n if (match) {\n const { title } = route;\n const query = Object.fromEntries(new URLSearchParams(url.search)); \n const params = match?.pathname?.groups ?? {};\n this.context = {\n url,\n title: typeof title === 'function' ? title({params, query, url}) : title,\n params,\n query,\n }\n return route;\n }\n }\n log(`No route matched for ${url.pathname}${url.search}${url.hash}`, url);\n return null;\n }\n \n /**\n * @private\n */\n _notifyUrlChanged() {\n this.dispatchEvent(new RouteEvent(this.context));\n }\n\n /**\n * @private\n */\n _onPopState = () => {\n this.navigate(new URL(window.location.href), { backNav: true });\n }\n\n /**\n * @private\n */\n _onAnchorClick = (e) => {\n if (\n e.defaultPrevented ||\n e.button !== 0 ||\n e.metaKey ||\n e.ctrlKey ||\n e.shiftKey\n ) {\n return;\n }\n\n const a = e.composedPath().find((el) => el.tagName === 'A');\n if (!a || !a.href) return;\n\n const url = new URL(a.href);\n\n if (this.url.href === url.href) return;\n if (url.host !== window.location.host) return;\n if (a.hasAttribute('download') || a.href.includes('mailto:')) return;\n\n const target = a.getAttribute('target');\n if (target && target !== '' && target !== '_self') return;\n \n e.preventDefault();\n this.navigate(url);\n }\n\n /**\n * @private \n */\n _collectPlugins(route) {\n return [\n ...(this.config?.plugins ?? []), \n ...(route?.plugins ?? []),\n ]\n }\n\n /**\n * @param {string | URL} url The URL to navigate to.\n * @param {{\n * backNav?: boolean,\n * replace?: boolean,\n * }} options options An options object to configure the navigation. The backNav property specifies whether the navigation is a backward navigation, which doesn't push the navigation into browser nav history.\n */\n async navigate(url, options = {}) {\n if (typeof url === 'string') {\n url = new URL(url, this.baseUrl);\n }\n \n let route = this._matchRoute(url) || this._matchRoute(this.fallback);\n log(`Navigating to ${url.pathname}${url.search}${url.hash}`, { context: this.context, route: this.route });\n\n /** @type {Plugin[]} */\n let plugins = this._collectPlugins(route);\n\n for (const plugin of plugins) {\n try {\n const result = await plugin?.shouldNavigate?.(this.context);\n if (result) {\n const condition = await result.condition();\n if (!condition) {\n url = new URL(result.redirect, this.baseUrl);\n route = this._matchRoute(url) || this._matchRoute(this.fallback);\n plugins = this._collectPlugins(route);\n log('Redirecting', { context: this.context, route: this.route });\n }\n }\n } catch(e) {\n log(`Plugin \"${plugin.name}\" error on shouldNavigate hook`, e);\n throw e;\n }\n }\n\n this.route = route;\n\n if (!this.route) {\n throw new Error(`[ROUTER] No route or fallback matched for url ${url}`);\n }\n\n for (const plugin of plugins) {\n try {\n await plugin?.beforeNavigation?.(this.context);\n } catch(e) {\n log(`Plugin \"${plugin.name}\" error on beforeNavigation hook`, e);\n throw e;\n }\n }\n\n if (options?.replace) {\n window.history.replaceState(null, '', `${url.pathname}${url.search}${url.hash}`);\n } else if (!options.backNav) {\n window.history.pushState(null, '', `${url.pathname}${url.search}${url.hash}`);\n }\n\n document.title = this.context.title;\n this._notifyUrlChanged();\n\n for (const plugin of plugins) {\n try {\n await plugin?.afterNavigation?.(this.context);\n } catch(e) {\n log(`Plugin \"${plugin.name}\" error on afterNavigation hook`, e);\n throw e;\n }\n }\n }\n}\n","/**\n * @example lazy(() => import('foo'))\n * @param {any} fn\n * @returns {import('../index.js').Plugin}\n */\nexport function lazy(fn) {\n return {\n name: 'lazy',\n beforeNavigation: () => {\n fn();\n }\n }\n}","// docs for router https://github.com/thepassle/app-tools/blob/master/router/README.md\n\nimport { html } from 'lit';\n\nif (!(globalThis as any).URLPattern) {\n await import(\"urlpattern-polyfill\");\n}\n\nimport { Router } from '@thepassle/app-tools/router.js';\nimport { lazy } from '@thepassle/app-tools/router/plugins/lazy.js';\n\n// @ts-ignore\nimport { title } from '@thepassle/app-tools/router/plugins/title.js';\n\nimport './pages/app-home.js';\n\n\nconst baseURL: string = (import.meta as any).env.BASE_URL;\n\nexport const router = new Router({\n routes: [\n {\n path: resolveRouterPath(),\n title: 'Home',\n render: () => html`<app-home></app-home>`\n },\n {\n path: resolveRouterPath('about'),\n title: 'About',\n plugins: [\n lazy(() => import('./pages/app-about/app-about.js')),\n ],\n render: () => html`<app-about></app-about>`\n },\n {\n path: resolveRouterPath('note-wall'),\n title: 'Note Wall',\n plugins: [\n lazy(() => import('./pages/note-wall.js')),\n ],\n render: () => html`<note-wall></note-wall>`\n },\n {\n path: resolveRouterPath('write'),\n title: 'Write',\n plugins: [\n lazy(() => import('./pages/app-write/app-write.js')),\n ],\n render: () => html`<app-write><app-write>`\n },\n ]\n });\n\n // This function will resolve a path with whatever Base URL was passed to the vite build process.\n // Use of this function throughout the starter is not required, but highly recommended, especially if you plan to use GitHub Pages to deploy.\n // If no arg is passed to this function, it will return the base URL.\n\n export function resolveRouterPath(unresolvedPath?: string) {\n var resolvedPath = baseURL;\n if(unresolvedPath) {\n resolvedPath = resolvedPath + unresolvedPath;\n }\n\n return resolvedPath;\n }\n","import { LitElement, css, html } from 'lit';\nimport { property, customElement } from 'lit/decorators.js';\nimport { resolveRouterPath } from '../router';\nimport { Relay } from 'nostr-tools';\nimport { WindowNostr } from 'nostr-tools/nip07';\n\n\nimport '@shoelace-style/shoelace/dist/components/card/card.js';\nimport '@shoelace-style/shoelace/dist/components/button/button.js';\n\nimport { styles } from '../styles/shared-styles';\n\n\ndeclare global {\n interface Window {\n nostr?: WindowNostr;\n }\n}\n\n@customElement('app-home')\nexport class AppHome extends LitElement {\n\n // For more information on using properties and state in lit\n // check out this link https://lit.dev/docs/components/properties/\n @property() message = 'Welcome to my demo!';\n @property({ type: String }) nostrAddy = '';\n @property({ type: String }) bio = '';\n @property({ type: String }) profilePic = '';\n @property({ type: Boolean }) isSignedIn = false;\n @property({ type: String }) publicKey = '';\n\n\n static styles = [\n styles,\n css`\n\n\n\n @media (horizontal-viewport-segments: 2) {\n #welcomeBar {\n flex-direction: row;\n align-items: flex-start;\n justify-content: space-between;\n }\n\n #welcomeCard {\n margin-right: 64px;\n }\n }\n\n /*\n========================================\nProfile Picture Container\n========================================\n*/\n.profile-picture-container {\n display: grid;\n grid-template-columns: 400px 200px;\n grid-template-rows: 250px;\n grid-column-gap: 15px;\n margin-bottom: 12px;\n\n}\n\n.profile-picture-container p {\n margin: 0;\n}\n\n.profile-pic {\n grid-area: 1/1;\n margin-top: 25px;\n margin-left: 100px;\n margin-bottom: 10px;\n border-radius: 50%;\n}\n\n.personal-msg {\n grid-area: 1/2;\n align-content: center;\n align-items: center;\n}\n\n\n\n.nav-button-container {\n justify-self: center;\n align-self: end;\n}\n\n `];\n\n async firstUpdated() {\n // this method is a lifecycle event in lit\n // for more info check out the lit docs https://lit.dev/docs/components/lifecycle/\n console.log('Welcome to my home page');\n }\n\n\n connectedCallback(): void {\n super.connectedCallback();\n\n this.addEventListener('user-state-changed', (event: Event) => {\n const detail = (event as CustomEvent).detail;\n this.nostrAddy = detail.nostrAddy;\n this.bio = detail.bio;\n this.profilePic = detail.profilePic;\n this.isSignedIn = detail.isSignedIn;\n });\n }\n\n\n\n disconnectedCallback(): void {\n super.disconnectedCallback();\n window.removeEventListener('profile-updated', this.updateProfileFromEvent.bind(this));\n window.removeEventListener('user-signed-out', this.handlesSignOut.bind(this));\n }\n\n updateProfileFromEvent(event: Event) {\n console.log('Profile updated event received:', (event as CustomEvent).detail);\n\n const detail = (event as CustomEvent).detail;\n this.nostrAddy = detail.nostrAddy;\n this.bio = detail.bio;\n this.profilePic = detail.profilePic;\n this.isSignedIn = true;\n this.requestUpdate();\n }\n\n handlesSignOut() {\n this.profilePic = '';\n this.bio = '';\n this.nostrAddy = 'Guest';\n this.isSignedIn = false;\n this.requestUpdate();\n }\n\n async fetchAndDisplayProfile(pubkey: string) {\n this.nostrAddy = pubkey;\n this.bio = 'Loading profile info...';\n this.profilePic = '/assets/img/loading_pfp.png';\n\n try {\n // Fetch profile metadata from a relay\n const relay = await Relay.connect('wss://notes.miguelalmodo.com'); // Example URL\n const sub = relay.subscribe([{ kinds: [0], authors: [pubkey] }], {\n onevent: (event) => {\n const profileData = JSON.parse(event.content);\n this.nostrAddy = profileData.nip05 || 'No address available';\n this.bio = profileData.about || 'No bio available';\n this.profilePic = profileData.picture || '/assets/img/default_pfp.png';\n this.requestUpdate();\n },\n oneose: () => sub.close(),\n });\n } catch (error) {\n console.error('Error fetching profile:', error);\n this.displayGuestView();\n }\n }\n\n\n displayGuestView() {\n // Set initial values for guest view\n this.nostrAddy = '';\n this.bio = 'Welcome, guest! Please sign in with a browser extension to view your profile.';\n this.profilePic = '/assets/img/default_pfp.png'; // Could be a placeholder image for guests\n this.isSignedIn = false;\n }\n\n\n share() {\n if ((navigator as any).share) {\n (navigator as any).share({\n title: 'A MiggyMofongo Project',\n text: 'This is a personal progressive social web app',\n url: 'https://miguelalmodo.com/dist2',\n });\n }\n }\n\n\n\n\n render() {\n return html`\n <app-header></app-header>\n\n <main>\n <div id=\"welcomeBar\">\n <sl-card id=\"welcomeCard\">\n <div slot=\"header\">\n <h2>Welcome to ${this.nostrAddy || 'Guest'}'s Profile</h2>\n </div>\n <p>\n You can upgrade your website into\n a micro blog client with a social protocol to do things\n like browse a feed, compose a note, or post to your network.\n\n </p>\n\n\n <div class=\"profile-picture-container\">\n<img class=\"profile-pic\" src=\"${this.profilePic || '/assets/img/default_pfp.png'}\" alt=\"Profile Picture\" width=\"200px\" height=\"200px\">\n\n <p class=\"personal-msg\"><b>${this.bio || 'Welcome, guest! Please sign in to view your profile.'}</b></p>\n\n </div>\n<div class=\"nav-button-container\">\n <sl-button href=\"${resolveRouterPath('about')}\" variant=\"primary\">About this Web App</sl-button>\n <sl-button href=\"${resolveRouterPath('note-wall')}\" variant=\"primary\">Feed</sl-button>\n <sl-button href=\"${resolveRouterPath('write')}\" variant=\"primary\">Compose a Note</sl-button>\n</div>\n ${'share' in navigator\n ? html`<sl-button slot=\"footer\" variant=\"default\" @click=\"${this.share}\">\n <sl-icon slot=\"prefix\" name=\"share\"></sl-icon>\n Share this personal website with a friend!\n </sl-button>`\n : null}\n </sl-card>\n\n\n\n </div>\n </main>\n `;\n }\n\n\n\n\n}\n","import { LitElement, css, html } from 'lit';\nimport { property, customElement } from 'lit/decorators.js';\nimport { resolveRouterPath } from '../router';\nimport { Relay } from 'nostr-tools';\n\nimport '@shoelace-style/shoelace/dist/components/button/button.js';\n@customElement('app-header')\nexport class AppHeader extends LitElement {\n @property({ type: String }) title = 'fostr';\n\n @property({ type: Boolean}) enableBack: boolean = false;\n\n @property({ type: String }) nostrAddy = '';\n @property({ type: String }) bio = '';\n @property({ type: String }) profilePic = '';\n @property({ type: Boolean }) isSignedIn = false;\n @property({ type: String }) publicKey = '';\n\n static styles = css`\n header {\n display: flex;\n justify-content: space-between;\n align-items: center;\n background: var(--app-color-primary);\n color: white;\n padding: 12px;\n padding-top: 4px;\n\n position: fixed;\n left: env(titlebar-area-x, 0);\n top: env(titlebar-area-y, 0);\n height: env(titlebar-area-height, 30px);\n width: env(titlebar-area-width, 100%);\n -webkit-app-region: drag;\n }\n\n header h1 {\n margin-top: 0;\n margin-bottom: 0;\n font-size: 12px;\n font-weight: bold;\n }\n\n nav a {\n margin-left: 10px;\n }\n\n #back-button-block {\n display: flex;\n justify-content: space-between;\n align-items: center;\n gap: 8px;\n }\n\n @media(prefers-color-scheme: light) {\n header {\n color: black;\n }\n\n nav a {\n color: initial;\n }\n }\n `;\n /** the connected callback method one of the lifecycle methods that runs once the element is added\n * to the dom. there is no disconnectedCallback because the header is never removed from the DOM.\n * i centralize state in this component because it's where the sign in and out button resides.\n *\n *\n */\n connectedCallback(): void {\n super.connectedCallback();\n\n // Check for stored pubkey and fetch metadata if available\n const storedPubkey = localStorage.getItem('pubkey');\n if (storedPubkey) {\n this.isSignedIn = true;\n this.fetchProfileMetadata(storedPubkey);\n } else {\n this.displayGuestView();\n }\n }\n\n displayGuestView() {\n // this method displays a guest view when the user is signed out\n this.nostrAddy = '';\n this.bio = 'Welcome, guest! Please sign in with a browser extension to view your profile.';\n this.profilePic = '/public/assets/img/default_pfp.png'; // a placeholder profile picture\n this.isSignedIn = false;\n\n this.dispatchUserStateChanged();\n }\n\n async fetchProfileMetadata(pubkey: string) {\n try {\n const relay = await Relay.connect('wss://notes.miguelalmodo.com');\n const sub = relay.subscribe(\n [{ kinds: [0], authors: [pubkey] }],\n {\n onevent: (event) => {\n const profileData = JSON.parse(event.content);\n this.profilePic = profileData.picture || '/assets/img/default_pfp.png';\n this.nostrAddy = profileData.nip05 || 'no addy available';\n this.bio = profileData.about || 'bio not available';\n\n this.dispatchUserStateChanged();\n },\n oneose: () => sub.close(),\n }\n );\n } catch (error) {\n console.error('Failed to fetch profile metadata:', error);\n this.displayGuestView();\n }\n }\n\n async signInWithNostr() {\n if (window.nostr) {\n try {\n const userPubkey = await window.nostr.getPublicKey();\n this.isSignedIn = true;\n\n //save pubkey in localStorage to keep sign-in state\n localStorage.setItem('pubkey', userPubkey)\n\n await this.fetchProfileMetadata(userPubkey);\n } catch (error) {\n console.error('Failed to sign in:', error);\n this.isSignedIn = false;\n }\n } else {\n alert('Nostr extension not detected. Please install a Nostr extension.');\n }\n }\n\n /* this sign out method clears the public key from local storage and sets the profile view\n back to guest view */\n signOut() {\n localStorage.removeItem('pubkey');\n this.displayGuestView();\n }\n\n dispatchUserStateChanged() {\n this.dispatchEvent(\n new CustomEvent('user-state-changed', {\n detail: {\n isSignedIn: this.isSignedIn,\n nostrAddy: this.nostrAddy,\n bio: this.bio,\n profilePic: this.profilePic,\n },\n bubbles: true,\n composed: true,\n })\n );\n }\n\n render() {\n return html`\n <header>\n\n <div id=\"back-button-block\">\n ${this.enableBack ? html`<sl-button size=\"small\" href=\"${resolveRouterPath()}\">\n Back\n </sl-button>` : null}\n\n <h1>${this.title}</h1>\n </div>\n\n <sl-button variant=\"primary\" @click=\"${this.isSignedIn ? this.signOut : this.signInWithNostr}\">\n ${this.isSignedIn ? 'Sign out' : 'Sign in'}\n\n </sl-button>\n </header>\n `;\n }\n}\n","import { LitElement, css } from 'lit';\nimport { customElement } from 'lit/decorators.js';\n\nimport './pages/note-wall'\nimport './pages/app-home';\nimport './components/header';\nimport './styles/global.css';\nimport { router } from './router';\n\n\n\n@customElement('app-index')\nexport class AppIndex extends LitElement {\n static styles = css`\n main {\n padding-left: 16px;\n padding-right: 16px;\n padding-bottom: 16px;\n }\n `;\n\n firstUpdated() {\n router.addEventListener('route-changed', () => {\n if (\"startViewTransition\" in document) {\n (document as any).startViewTransition(() => this.requestUpdate());\n }\n else {\n this.requestUpdate();\n }\n });\n }\n\n render() {\n // router config can be round in src/router.ts\n return router.render();\n }\n}\n"],"file":"code/index-COc6jZBc.js"} |