@dynamic-labs-wallet/forward-mpc-shared 0.4.0 → 0.5.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.cjs CHANGED
@@ -427,6 +427,16 @@ function fromDynamicSigningAlgorithm(dynamicAlgorithm) {
427
427
  }
428
428
  __name(fromDynamicSigningAlgorithm, "fromDynamicSigningAlgorithm");
429
429
  var SignatureAlgoSchema = ALL_SIGNING_ALGORITHM_SCHEMA;
430
+
431
+ // src/constants/websocket.ts
432
+ var WebSocketCloseCode = {
433
+ /** Normal, intentional closure. */
434
+ NORMAL: 1e3,
435
+ /** Server-initiated idle timeout (enclave ping/pong). */
436
+ IDLE_TIMEOUT: 1001,
437
+ /** Abnormal closure — no close frame (network drop, etc.). */
438
+ ABNORMAL: 1006
439
+ };
430
440
  var DomainCodec = new ioTs.Type("DomainCodec", (u) => typeof u === "string", (u, c) => {
431
441
  if (typeof u !== "string") {
432
442
  return ioTs.failure(u, c, "Value must be a string");
@@ -1053,6 +1063,7 @@ exports.SignatureAlgoSchema = SignatureAlgoSchema;
1053
1063
  exports.TraceContextCodec = TraceContextCodec;
1054
1064
  exports.Uint32ArrayCodec = Uint32ArrayCodec;
1055
1065
  exports.Uint8ArrayCodec = Uint8ArrayCodec;
1066
+ exports.WebSocketCloseCode = WebSocketCloseCode;
1056
1067
  exports.WebSocketErrorType = WebSocketErrorType;
1057
1068
  exports.assertDefined = assertDefined;
1058
1069
  exports.assertNotNull = assertNotNull;
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/types.ts","../src/messages/base.ts","../src/codecs/Uint8ArrayCodec.ts","../src/codecs/Uint32ArrayCodec.ts","../src/codecs/EncryptedPayloadCodec.ts","../src/codecs/TraceContextCodec.ts","../src/codecs/OptionalStringCodec.ts","../src/messages/utils/schemaBuilder.ts","../src/messages/utils/encodingHelpers.ts","../src/messages/utils/StandardMessage.ts","../src/messages/HandshakeV1Request.ts","../src/messages/HandshakeV1Response.ts","../src/signing/base.ts","../src/signing/algorithms/Ed25519SigningAlgorithm.ts","../src/signing/algorithms/BIP340SigningAlgorithm.ts","../src/signing/algorithms/EcdsaSigningAlgorithm.ts","../src/signing/allAlgorithms.ts","../src/constants/algorithms.ts","../src/codecs/DomainCodec.ts","../src/codecs/Uint8ArrayOrHexCodec.ts","../src/messages/SignMessageV1Request.ts","../src/codecs/WebSocketErrorCodec.ts","../src/messages/SignMessageV1Response.ts","../src/messages/ConnectionAckV1Request.ts","../src/messages/ConnectionAckV1Response.ts","../src/messages/KeygenV1Request.ts","../src/messages/KeygenV1Response.ts","../src/messages/ReceiveKeyV1Request.ts","../src/messages/ReceiveKeyV1Response.ts","../src/messages/allMessages.ts","../src/messages/registry.ts","../src/utils/assertDefined.ts","../src/crypto/generateKeypair.ts","../src/crypto/encapsulate.ts","../src/crypto/decapsulate.ts","../src/crypto/keyDerivation.ts","../src/crypto/payloadEncryption.ts","../src/crypto/keyshareEncryption.ts","../src/crypto/keygenEncryption.ts","../src/signing/registry.ts"],"names":["WebSocketErrorType","BaseMessage","data","getData","Uint8ArrayCodec","Type","u","Uint8Array","c","failure","cleanHex","startsWith","slice","length","test","decoded","hexToBytes","success","e","a","bytesToHex","Uint32ArrayCodec","Uint32Array","uint8Array","uint32Array","buffer","EncryptedPayloadCodec","type","salt","encryptedPayload","TraceContextSchema","partial","traceId","string","startTime","number","TraceContextCodec","union","undefinedType","OptionalStringCodec","buildMessageSchema","messageType","version","additionalFields","additionalSchemas","schema","literal","intersection","result","i","createComplexEncoder","fieldTransforms","encoded","key","value","Object","entries","undefined","createStandardDecoder","fieldExtractor","createStandardMessage","config","StandardMessageClass","MESSAGE_TYPE","MESSAGE_VERSION","encode","encodeData","decode","wireData","either","isLeft","right","_tag","decodeData","createSimpleMessage","HandshakeRequestSchema","challenge","nonce","traceContext","HandshakeV1RequestMessage","HandshakeResponseSchema","encapsulatedSharedSecret","attestationDoc","connectionId","HandshakeV1ResponseMessage","BaseSigningAlgorithm","Ed25519SigningAlgorithm","algorithmName","signingAlgo","derivationPath","createKeygenResultFromSecretShare","secretShare","pubkey","createSignRequest","keygenResult","params","processSignResult","_result","BIP340SigningAlgorithm","tweak","EcdsaSigningAlgorithm","hashAlgo","pubKeyAsHex","repeat","serializeCompressed","serializeUncompressed","SIGNING_ALGORITHM_CLASSES","ed25519","bip340","ecdsa","ALL_SIGNING_ALGORITHM_NAMES","keys","SIGNING_ALGORITHM_INSTANCES","ALL_SIGNING_ALGORITHM_SCHEMA","schemas","values","map","instance","Error","isValidSigningAlgorithm","name","algorithm","ALGORITHMS","SigningAlgorithm","ECDSA","dynamicEnum","className","requiresHashAlgo","supportsDerivationPath","supportsTweak","supportedHashAlgos","ED25519","BIP340","toDynamicSigningAlgorithm","algorithmConfig","find","fromDynamicSigningAlgorithm","dynamicAlgorithm","SignatureAlgoSchema","DomainCodec","domainPattern","identity","Uint8ArrayOrHexCodec","SignMessageRequestSchema","relayDomain","keyshare","message","roomUuid","userId","environmentId","SignMessageV1RequestMessage","WebSocketErrorTypeCodec","WebSocketErrorCodec","details","unknown","SignMessageResponseSchema","signature","error","SignMessageV1ResponseMessage","ConnectionAckRequestSchema","ConnectionAckV1RequestMessage","ConnectionAckResponseSchema","status","timestamp","ConnectionAckV1ResponseMessage","BaseKeygenParamsCodec","numParties","threshold","keygenInit","keygenIds","array","EcdsaKeygenParamsCodec","props","BIP340KeygenParamsCodec","KeygenAlgoParamsCodec","KeygenRequestSchema","KeygenV1RequestMessage","KeygenResponseSchema","KeygenV1ResponseMessage","ReceiveKeyRequestSchema","ReceiveKeyV1RequestMessage","ReceiveKeyResponseSchema","ReceiveKeyV1ResponseMessage","ALL_MESSAGE_CLASSES","ALL_MESSAGE_KEYS","getMessageClass","MessageClass","isValidMessageType","getAllSupportedMessages","versionStr","split","parseInt","parseMessageKey","MessageRegistry","getInstance","left","join","getRegisteredTypes","messageRegistry","assertDefined","assertNotNull","getDefined","generateMlKem768Keypair","ml_kem768","keygen","publicKey","secretKey","encapsulationKey","decapsulationKey","String","encapsulateMlKem768","encapsulate","decapsulateMlKem768","cipherText","decapsulate","AES_256_GCM_KEY_SIZE","AES_256_GCM_NONCE_SIZE","AES_256_GCM_TAG_SIZE","HKDF_SALT_SIZE","EncryptionPurpose","deriveAESKey","sharedSecret","info","infoBytes","TextEncoder","hkdf","sha256","createKeyDerivationInfo","purpose","AES_GCM_NONCE_SIZE","MIN_SHARED_SECRET_SIZE","encryptPayload","options","payload","trim","randomBytes","aesKey","aes256Gcm","gcm","plaintext","JSON","stringify","ciphertext","encrypt","set","fill","decryptPayload","encrypted","decrypt","decryptedText","TextDecoder","parse","encryptKeyshare","signingAlgorithm","keyshareData","Date","now","KEYSHARE","encryptKeygenInit","keygenId","keygenSecret","KEYGEN_INIT","decryptKeygenResult","KEYGEN_RESULT","Array","isArray","SigningAlgorithmRegistry","get","has","getAllNames","getAllInstances","signingAlgorithmRegistry"],"mappings":";;;;;;;;;;;;;;;AAWO,IAAKA,kBAAAA,6BAAAA,mBAAAA,EAAAA;;;;;;AAAAA,EAAAA,OAAAA,mBAAAA;;;;ACUL,IAAeC,cAAf,MAAeA;EArBtB;;;;AA2BE,EAAA,WAAA,CAAsCC,IAAAA,EAAgB;SAAhBA,IAAAA,GAAAA,IAAAA;AAAiB,EAAA;EAIvDC,OAAAA,GAAoB;AAClB,IAAA,OAAO,IAAA,CAAKD,IAAAA;AACd,EAAA;AACF;AC/BO,IAAME,kBAAkB,IAAIC,SAAAA;AAKjC,EAAA,YAAA;AACA,EAAA,CAACC,MAAuBA,CAAAA,YAAaC,UAAAA;AACrC,EAAA,CAACD,GAAGE,CAAAA,KAAAA;AAEF,IAAA,IAAI,OAAOF,MAAM,QAAA,EAAU;AACzB,MAAA,OAAOG,YAAAA,CAAQH,CAAAA,EAAGE,CAAAA,EAAG,sCAAA,CAAA;AACvB,IAAA;AACA,IAAA,IAAI;AAEF,MAAA,MAAME,QAAAA,GAAWJ,EAAEK,UAAAA,CAAW,IAAA,IAAQL,CAAAA,CAAEM,KAAAA,CAAM,CAAA,CAAA,GAAKN,CAAAA;AAGnD,MAAA,IAAII,QAAAA,CAASG,SAAS,CAAA,KAAM,CAAA,IAAK,CAAC,gBAAA,CAAiBC,IAAAA,CAAKJ,QAAAA,CAAAA,EAAW;AACjE,QAAA,OAAOD,YAAAA,CAAQH,CAAAA,EAAGE,CAAAA,EAAG,2BAAA,CAAA;AACvB,MAAA;AAEA,MAAA,MAAMO,OAAAA,GAAUC,oBAAWN,QAAAA,CAAAA;AAC3B,MAAA,OAAOO,aAAQF,OAAAA,CAAAA;AACjB,IAAA,CAAA,CAAA,OAASG,CAAAA,EAAG;AACV,MAAA,OAAOT,YAAAA,CAAQH,CAAAA,EAAGE,CAAAA,EAAG,CAAA,oBAAA,EAAuBU,CAAAA,CAAAA,CAAG,CAAA;AACjD,IAAA;AACF,EAAA,CAAA;;EAEA,CAACC,CAAAA,KAAMC,oBAAWD,CAAAA;AAAAA;AC5Bb,IAAME,mBAAmB,IAAIhB,SAAAA;AAKlC,EAAA,aAAA;AACA,EAAA,CAACC,MAAwBA,CAAAA,YAAagB,WAAAA;AACtC,EAAA,CAAChB,GAAGE,CAAAA,KAAAA;AAEF,IAAA,IAAI,OAAOF,MAAM,QAAA,EAAU;AACzB,MAAA,OAAOG,YAAAA,CAAQH,CAAAA,EAAGE,CAAAA,EAAG,uCAAA,CAAA;AACvB,IAAA;AACA,IAAA,IAAI;AAEF,MAAA,MAAME,QAAAA,GAAWJ,EAAEK,UAAAA,CAAW,IAAA,IAAQL,CAAAA,CAAEM,KAAAA,CAAM,CAAA,CAAA,GAAKN,CAAAA;AAGnD,MAAA,IAAII,QAAAA,CAASG,WAAW,CAAA,EAAG;AACzB,QAAA,OAAOJ,YAAAA,CAAQH,CAAAA,EAAGE,CAAAA,EAAG,8CAAA,CAAA;AACvB,MAAA;AACA,MAAA,IAAIE,QAAAA,CAASG,MAAAA,GAAS,CAAA,KAAM,CAAA,EAAG;AAC7B,QAAA,OAAOJ,YAAAA,CACLH,CAAAA,EACAE,CAAAA,EACA,kFAAA,CAAA;AAEJ,MAAA;AAGA,MAAA,MAAMe,UAAAA,GAAaP,oBAAWN,QAAAA,CAAAA;AAI9B,MAAA,MAAMc,WAAAA,GAAc,IAAIF,WAAAA,CAAYC,UAAAA,CAAWE,MAAM,CAAA;AAErD,MAAA,OAAOR,aAAQO,WAAAA,CAAAA;AACjB,IAAA,CAAA,CAAA,OAASN,CAAAA,EAAG;AACV,MAAA,OAAOT,YAAAA,CAAQH,CAAAA,EAAGE,CAAAA,EAAG,CAAA,oBAAA,EAAuBU,CAAAA,CAAAA,CAAG,CAAA;AACjD,IAAA;AACF,EAAA,CAAA;;AAEA,EAAA,CAACC,CAAAA,KAAAA;AAEC,IAAA,MAAMI,UAAAA,GAAa,IAAIhB,UAAAA,CAAWY,CAAAA,CAAEM,MAAM,CAAA;AAC1C,IAAA,OAAOL,oBAAWG,UAAAA,CAAAA;AACpB,EAAA;AAAA;ACxCK,IAAMG,wBAAwBC,SAAAA,CAAK;EACxCC,IAAAA,EAAMxB,eAAAA;EACNyB,gBAAAA,EAAkBzB;AACpB,CAAA;ACQA,IAAM0B,qBAAqBC,YAAAA,CAAQ;EACjCC,OAAAA,EAASC,WAAAA;EACTC,SAAAA,EAAWC;AACb,CAAA,CAAA;AAKO,IAAMC,oBAAoBC,UAAAA,CAAM;AAACP,EAAAA,kBAAAA;AAAoBQ,EAAAA;AAAc,CAAA;ACtBnE,IAAMC,sBAAsBF,UAAAA,CAAM;AAACJ,EAAAA,WAAAA;AAAQK,EAAAA;AAAc,CAAA;ACCzD,SAASE,mBACdC,WAAAA,EACAC,OAAAA,EACAC,gBAAAA,GAAwC,OACrCC,iBAAAA,EAA0B;AAE7B,EAAA,MAAMC,SAASlB,SAAAA,CAAK;AAClBA,IAAAA,IAAAA,EAAMmB,aAAQL,WAAAA,CAAAA;AACdC,IAAAA,OAAAA,EAASI,aAAQJ,OAAAA,CAAAA;IACjB,GAAGC;GACL,CAAA;AAEA,EAAA,IAAIC,iBAAAA,CAAkB/B,WAAW,CAAA,EAAG;AAClC,IAAA,OAAOgC,MAAAA;AACT,EAAA;AAEA,EAAA,IAAID,iBAAAA,CAAkB/B,WAAW,CAAA,EAAG;AAClC,IAAA,OAAOkC,iBAAAA,CAAa;AAACF,MAAAA,MAAAA;AAAQD,MAAAA,iBAAAA,CAAkB,CAAA;AAAG,KAAA,CAAA;AACpD,EAAA;AAGA,EAAA,IAAII,SAAoBD,iBAAAA,CAAa;AAACF,IAAAA,MAAAA;AAAQD,IAAAA,iBAAAA,CAAkB,CAAA;AAAG,GAAA,CAAA;AACnE,EAAA,KAAA,IAASK,CAAAA,GAAI,CAAA,EAAGA,CAAAA,GAAIL,iBAAAA,CAAkB/B,QAAQoC,CAAAA,EAAAA,EAAK;AACjDD,IAAAA,MAAAA,GAASD,iBAAAA,CAAa;AAACC,MAAAA,MAAAA;AAAQJ,MAAAA,iBAAAA,CAAkBK,CAAAA;AAAG,KAAA,CAAA;AACtD,EAAA;AACA,EAAA,OAAOD,MAAAA;AACT;AA1BgBR,MAAAA,CAAAA,kBAAAA,EAAAA,oBAAAA,CAAAA;;;ACcT,SAASU,oBAAAA,CACdT,WAAAA,EACAC,OAAAA,EACAS,eAAAA,GAAuD,EAAC,EAAC;AAEzD,EAAA,OAAO,CAACjD,IAAAA,KAAAA;AACN,IAAA,MAAMkD,OAAAA,GAAe;MACnBzB,IAAAA,EAAMc,WAAAA;AACNC,MAAAA;AACF,KAAA;AAGA,IAAA,KAAA,MAAW,CAACW,GAAAA,EAAKC,KAAAA,KAAUC,MAAAA,CAAOC,OAAAA,CAAQtD,IAAAA,CAAAA,EAAc;AACtD,MAAA,IAAIoD,UAAUG,MAAAA,EAAW;AACvBL,QAAAA,OAAAA,CAAQC,GAAAA,IAAOF,eAAAA,CAAgBE,GAAAA,IAC3BF,eAAAA,CAAgBE,GAAAA,CAAAA,CAAKC,KAAAA,CAAAA,GACrBA,KAAAA;AACN,MAAA;AACF,IAAA;AAEA,IAAA,OAAOF,OAAAA;AACT,EAAA,CAAA;AACF;AAtBgBF,MAAAA,CAAAA,oBAAAA,EAAAA,sBAAAA,CAAAA;AA4BT,SAASQ,sBACdC,cAAAA,EAAuC;AAEvC,EAAA,OAAO,CAAC5C,OAAAA,KAAwB4C,cAAAA,CAAe5C,OAAAA,CAAAA;AACjD;AAJgB2C,MAAAA,CAAAA,qBAAAA,EAAAA,uBAAAA,CAAAA;ACxBT,SAASE,sBAKdC,MAAAA,EAA4D;AAC5D,EAAA,IAAMC,oBAAAA,GAAN,MAAMA,qBAAAA,SACI7D,WAAAA,CAAAA;IA/BZ;;;AAkCI,IAAA,OAAgB8D,eAAeF,MAAAA,CAAOpB,WAAAA;AACtC,IAAA,OAAgBuB,kBAAkBH,MAAAA,CAAOnB,OAAAA;AACzC,IAAA,OAAgBG,SAASgB,MAAAA,CAAOhB,MAAAA;AAEvBlB,IAAAA,IAAAA,GAAOkC,MAAAA,CAAOpB,WAAAA;AACdC,IAAAA,OAAAA,GAAUmB,MAAAA,CAAOnB,OAAAA;AAE1B,IAAA,WAAA,CAAYxC,IAAAA,EAAa;AACvB,MAAA,KAAA,CAAMA,IAAAA,CAAAA;AACR,IAAA;IAEA+D,MAAAA,GAAgB;AACd,MAAA,OAAOJ,OAAOK,UAAAA,CAAW,IAAA,CAAKhE,MAAM,IAAA,CAAKyB,IAAAA,EAAM,KAAKe,OAAO,CAAA;AAC7D,IAAA;AAEA,IAAA,OAAOyB,OACLC,QAAAA,EAC6C;AAC7C,MAAA,MAAMpB,MAAAA,GAASa,MAAAA,CAAOhB,MAAAA,CAAOsB,MAAAA,CAAOC,QAAAA,CAAAA;AACpC,MAAA,IAAIC,WAAAA,CAAOC,MAAAA,CAAOtB,MAAAA,CAAAA,EAAS;AACzB,QAAA,OAAOA,MAAAA;AACT,MAAA;AAEA,MAAA,MAAMjC,UAAUiC,MAAAA,CAAOuB,KAAAA;AACvB,MAAA,OAAO;QACLC,IAAAA,EAAM,OAAA;AACND,QAAAA,KAAAA,EAAO,IAAIT,qBAAAA,CAAqBD,MAAAA,CAAOY,UAAAA,CAAW1D,OAAAA,CAAAA;AACpD,OAAA;AACF,IAAA;AACF,GAAA;AAEA,EAAA,OAAO+C,oBAAAA;AACT;AA1CgBF,MAAAA,CAAAA,qBAAAA,EAAAA,uBAAAA,CAAAA;AAyDT,SAASc,oBAIdb,MAAAA,EAAoE;AACpE,EAAA,OAAOD,qBAAAA,CAAsB;AAC3BnB,IAAAA,WAAAA,EAAaoB,MAAAA,CAAOpB,WAAAA;AACpBC,IAAAA,OAAAA,EAASmB,MAAAA,CAAOnB,OAAAA;AAChBG,IAAAA,MAAAA,EAAQgB,MAAAA,CAAOhB,MAAAA;AACfqB,IAAAA,UAAAA,0BAAahE,IAAAA,MACV;AACCyB,MAAAA,IAAAA,EAAMkC,MAAAA,CAAOpB,WAAAA;AACbC,MAAAA,OAAAA,EAASmB,MAAAA,CAAOnB,OAAAA;MAChB,GAAGxC;KACL,CAAA,EALU,YAAA,CAAA;AAMZuE,IAAAA,UAAAA,0BAAa1D,OAAAA,KAAAA;AACX,MAAA,MAAM,EAAEY,IAAAA,EAAAA,KAAAA,EAAMe,OAAAA,EAAS,GAAGxC,MAAAA,GAASa,OAAAA;AACnC,MAAA,OAAOb,IAAAA;IACT,CAAA,EAHY,YAAA;GAId,CAAA;AACF;AApBgBwE,MAAAA,CAAAA,mBAAAA,EAAAA,qBAAAA,CAAAA;;;AC9CT,IAAMC,sBAAAA,GAAyBnC,kBAAAA,CAAmB,WAAA,EAAa,CAAA,EAAG;EACvEoC,SAAAA,EAAWxE,eAAAA;EACXyE,KAAAA,EAAOzE,eAAAA;EACP0E,YAAAA,EAAc1C;AAChB,CAAA;AAOO,IAAM2C,4BAA4BnB,qBAAAA,CAAsB;EAC7DnB,WAAAA,EAAa,WAAA;EACbC,OAAAA,EAAS,CAAA;EACTG,MAAAA,EAAQ8B,sBAAAA;EACRT,UAAAA,kBAAY,MAAA,CAAA,CAAChE,IAAAA,KACXyE,sBAAAA,CAAuBV,MAAAA,CAAO;IAC5BtC,IAAAA,EAAM,WAAA;IACNe,OAAAA,EAAS,CAAA;AACTkC,IAAAA,SAAAA,EAAW1E,IAAAA,CAAK0E,SAAAA;AAChBC,IAAAA,KAAAA,EAAO3E,IAAAA,CAAK2E,KAAAA;AACZC,IAAAA,YAAAA,EAAc5E,IAAAA,CAAK4E;AACrB,GAAA,CAAA,EAPU,YAAA,CAAA;EAQZL,UAAAA,EAAYf,qBAAAA,CAA4C,CAAC3C,OAAAA,MAAa;AACpE6D,IAAAA,SAAAA,EAAW7D,OAAAA,CAAQ6D,SAAAA;AACnBC,IAAAA,KAAAA,EAAO9D,OAAAA,CAAQ8D,KAAAA;AACfC,IAAAA,YAAAA,EAAc/D,OAAAA,CAAQ+D;GACxB,CAAA;AACF,CAAA;ACrCO,IAAME,uBAAAA,GAA0BxC,kBAAAA,CACrC,oBAAA,EACA,CAAA,EACA;EACEyC,wBAAAA,EAA0BhD,WAAAA;EAC1BiD,cAAAA,EAAgBjD,WAAAA;EAChBkD,YAAAA,EAAclD;AAChB,CAAA;AAQK,IAAMmD,6BAA6BV,mBAAAA,CAIxC;EACAjC,WAAAA,EAAa,oBAAA;EACbC,OAAAA,EAAS,CAAA;EACTG,MAAAA,EAAQmC;AACV,CAAA;;;ACXO,IAAeK,uBAAf,MAAeA;EAHtB;;;AAWA;ACrBO,IAAMC,uBAAAA,GAAN,cAAsCD,oBAAAA,CAAAA;EAzB7C;;;EA0BWE,aAAAA,GAAgB,SAAA;EAChB7C,OAAAA,GAAU,CAAA;AAEVG,EAAAA,MAAAA,GAASE,iBAAAA,CAAa;IAC7BpB,SAAAA,CAAK;AACH6D,MAAAA,WAAAA,EAAa1C,aAAQ,SAAA;KACvB,CAAA;IACAf,YAAAA,CAAQ;MACN0D,cAAAA,EAAgBpE;KAClB;AACD,GAAA,CAAA;AAEDqE,EAAAA,iCAAAA,CAAkCC,WAAAA,EAA0B;AAC1D,IAAA,OAAO;AACLA,MAAAA,WAAAA;MACAC,MAAAA,EAAQ,IAAIrF,WAAW,EAAA;AACzB,KAAA;AACF,EAAA;AAEAsF,EAAAA,iBAAAA,CAAkBC,cAAmBC,MAAAA,EAAkB;AACrD,IAAA,OAAO;AACLJ,MAAAA,WAAAA,EAAaG,YAAAA,CAAaH,WAAAA;MAC1B,GAAGI;AACL,KAAA;AACF,EAAA;AAEAC,EAAAA,iBAAAA,CAAkBC,OAAAA,EAA0B;AAC1C,IAAA,OAAO,IAAI1F,WAAW,EAAA,CAAA;AACxB,EAAA;AACF;AC7CO,IAAM2F,sBAAAA,GAAN,cAAqCb,oBAAAA,CAAAA;EAV5C;;;EAWWE,aAAAA,GAAgB,QAAA;EAChB7C,OAAAA,GAAU,CAAA;AAEVG,EAAAA,MAAAA,GAASE,iBAAAA,CAAa;IAC7BpB,SAAAA,CAAK;AACH6D,MAAAA,WAAAA,EAAa1C,aAAQ,QAAA;KACvB,CAAA;IACAf,YAAAA,CAAQ;MACN0D,cAAAA,EAAgBpE,gBAAAA;MAChB8E,KAAAA,EAAO/F;KACT;AACD,GAAA,CAAA;AAEDsF,EAAAA,iCAAAA,CAAkCC,WAAAA,EAA0B;AAC1D,IAAA,OAAO;AACLA,MAAAA,WAAAA;MACAC,MAAAA,EAAQ,IAAIrF,WAAW,EAAA;AACzB,KAAA;AACF,EAAA;AAEAsF,EAAAA,iBAAAA,CAAkBC,cAAmBC,MAAAA,EAAkB;AACrD,IAAA,OAAO;AACLJ,MAAAA,WAAAA,EAAaG,YAAAA,CAAaH,WAAAA;MAC1B,GAAGI;AACL,KAAA;AACF,EAAA;AAEAC,EAAAA,iBAAAA,CAAkBC,OAAAA,EAA0B;AAC1C,IAAA,OAAO,IAAI1F,WAAW,EAAA,CAAA;AACxB,EAAA;AACF;AC/BO,IAAM6F,qBAAAA,GAAN,cAAoCf,oBAAAA,CAAAA;EAV3C;;;EAWWE,aAAAA,GAAgB,OAAA;EAChB7C,OAAAA,GAAU,CAAA;AAEVG,EAAAA,MAAAA,GAASE,iBAAAA,CAAa;IAC7BpB,SAAAA,CAAK;AACH6D,MAAAA,WAAAA,EAAa1C,aAAQ,OAAA;KACvB,CAAA;IACAf,YAAAA,CAAQ;AACNsE,MAAAA,QAAAA,EAAUhE,UAAAA,CAAM;AACdS,QAAAA,YAAAA,CAAQ,QAAA,CAAA;AACRA,QAAAA,YAAAA,CAAQ,SAAA,CAAA;AACRA,QAAAA,YAAAA,CAAQ,WAAA;AACT,OAAA,CAAA;MACD2C,cAAAA,EAAgBpE;KAClB;AACD,GAAA,CAAA;AAEDqE,EAAAA,iCAAAA,CAAkCC,WAAAA,EAA0B;AAC1D,IAAA,OAAO;AACLA,MAAAA,WAAAA;MACAC,MAAAA,EAAQ;AACNU,QAAAA,WAAAA,kBAAa,MAAA,CAAA,MAAM,IAAA,GAAO,IAAA,CAAKC,MAAAA,CAAO,EAAA,CAAA,EAAzB,aAAA,CAAA;AACbC,QAAAA,mBAAAA,kBAAqB,MAAA,CAAA,MAAM,IAAIjG,UAAAA,CAAW,EAAA,CAAA,EAArB,qBAAA,CAAA;AACrBkG,QAAAA,qBAAAA,kBAAuB,MAAA,CAAA,MAAM,IAAIlG,UAAAA,CAAW,EAAA,CAAA,EAArB,uBAAA;AACzB;AACF,KAAA;AACF,EAAA;AAEAsF,EAAAA,iBAAAA,CAAkBC,cAAmBC,MAAAA,EAAkB;AACrD,IAAA,OAAO;AACLJ,MAAAA,WAAAA,EAAaG,YAAAA,CAAaH,WAAAA;MAC1B,GAAGI;AACL,KAAA;AACF,EAAA;AAEAC,EAAAA,iBAAAA,CAAkBC,OAAAA,EAA0B;AAC1C,IAAA,OAAO,IAAI1F,WAAW,EAAA,CAAA;AACxB,EAAA;AACF;;;AC3BO,IAAMmG,yBAAAA,GAA4B;EACvCC,OAAAA,EAASrB,uBAAAA;EACTsB,MAAAA,EAAQV,sBAAAA;EACRW,KAAAA,EAAOT;AACT;AAuBO,IAAMU,2BAAAA,GAA8BvD,MAAAA,CAAOwD,IAAAA,CAChDL,yBAAAA;AAMK,IAAMM,2BAAAA,GAGT;EACFL,OAAAA,EAAS,IAAID,0BAA0BC,OAAAA,EAAO;EAC9CC,MAAAA,EAAQ,IAAIF,0BAA0BE,MAAAA,EAAM;EAC5CC,KAAAA,EAAO,IAAIH,0BAA0BG,KAAAA;AACvC;AAKO,IAAMI,gCACV,MAAA;AACC,EAAA,MAAMC,OAAAA,GAAU3D,OAAO4D,MAAAA,CAAOH,2BAAAA,EAA6BI,GAAAA,CACzD,CAACC,QAAAA,KAAaA,QAAAA,CAASxE,MAAM,CAAA;AAG/B,EAAA,IAAIqE,OAAAA,CAAQrG,WAAW,CAAA,EAAG;AACxB,IAAA,MAAM,IAAIyG,MAAM,+BAAA,CAAA;AAClB,EAAA;AAEA,EAAA,IAAIJ,OAAAA,CAAQrG,WAAW,CAAA,EAAG;AACxB,IAAA,OAAOqG,QAAQ,CAAA,CAAA;AACjB,EAAA;AAEA,EAAA,OAAO7E,UAAAA,CAAM;AACX6E,IAAAA,OAAAA,CAAQ,CAAA,CAAA;AACRA,IAAAA,OAAAA,CAAQ,CAAA,CAAA;AACLA,IAAAA,GAAAA,OAAAA,CAAQtG,MAAM,CAAA;AAClB,GAAA,CAAA;AACH,CAAA;AAYK,SAAS2G,wBACdC,IAAAA,EAAY;AAEZ,EAAA,OAAOA,IAAAA,IAAQd,yBAAAA;AACjB;AAJgBa,MAAAA,CAAAA,uBAAAA,EAAAA,yBAAAA,CAAAA;AAST,SAAS7B,iCAAAA,CACdH,eACAI,WAAAA,EAAmB;AAEnB,EAAA,MAAM8B,SAAAA,GAAYT,4BAA4BzB,aAAAA,CAAAA;AAC9C,EAAA,IAAI,CAACkC,SAAAA,EAAW;AACd,IAAA,MAAM,IAAIH,KAAAA,CAAM,CAAA,2BAAA,EAA8B/B,aAAAA,CAAAA,CAAe,CAAA;AAC/D,EAAA;AACA,EAAA,OAAOkC,SAAAA,CAAU/B,kCAAkCC,WAAAA,CAAAA;AACrD;AATgBD,MAAAA,CAAAA,iCAAAA,EAAAA,mCAAAA,CAAAA;ACjGT,IAAMgC,UAAAA,GAAa;EACxB,CAACC,qBAAAA,CAAiBC,KAAK,GAAG;IACxBJ,IAAAA,EAAM,OAAA;AACNK,IAAAA,WAAAA,EAAaF,qBAAAA,CAAiBC,KAAAA;IAC9BE,SAAAA,EAAW,OAAA;IACXC,gBAAAA,EAAkB,IAAA;IAClBC,sBAAAA,EAAwB,IAAA;IACxBC,aAAAA,EAAe,KAAA;IACfC,kBAAAA,EAAoB;AAAC,MAAA,QAAA;AAAU,MAAA,SAAA;AAAW,MAAA;;AAC5C,GAAA;EACA,CAACP,qBAAAA,CAAiBQ,OAAO,GAAG;IAC1BX,IAAAA,EAAM,SAAA;AACNK,IAAAA,WAAAA,EAAaF,qBAAAA,CAAiBQ,OAAAA;IAC9BL,SAAAA,EAAW,SAAA;IACXC,gBAAAA,EAAkB,KAAA;IAClBC,sBAAAA,EAAwB,IAAA;IACxBC,aAAAA,EAAe,KAAA;AACfC,IAAAA,kBAAAA,EAAoB;AACtB,GAAA;EACA,CAACP,qBAAAA,CAAiBS,MAAM,GAAG;IACzBZ,IAAAA,EAAM,QAAA;AACNK,IAAAA,WAAAA,EAAaF,qBAAAA,CAAiBS,MAAAA;IAC9BN,SAAAA,EAAW,QAAA;IACXC,gBAAAA,EAAkB,KAAA;IAClBC,sBAAAA,EAAwB,IAAA;IACxBC,aAAAA,EAAe,IAAA;AACfC,IAAAA,kBAAAA,EAAoB;AACtB;AAIF;AAUO,SAASG,0BACd9C,aAAAA,EAAmC;AAEnC,EAAA,MAAM+C,eAAAA,GAAkB/E,MAAAA,CAAO4D,MAAAA,CAAOO,UAAAA,CAAAA,CAAYa,KAChD,CAAC1E,MAAAA,KAAWA,MAAAA,CAAO2D,IAAAA,KAASjC,aAAAA,CAAAA;AAE9B,EAAA,IAAI,CAAC+C,eAAAA,EAAiB;AACpB,IAAA,MAAM,IAAIhB,KAAAA,CAAM,CAAA,mBAAA,EAAsB/B,aAAAA,CAAAA,CAAe,CAAA;AACvD,EAAA;AACA,EAAA,OAAO+C,eAAAA,CAAgBT,WAAAA;AACzB;AAVgBQ,MAAAA,CAAAA,yBAAAA,EAAAA,2BAAAA,CAAAA;AAeT,SAASG,4BACdC,gBAAAA,EAAkC;AAElC,EAAA,MAAMH,eAAAA,GAAkBZ,WAAWe,gBAAAA,CAAAA;AACnC,EAAA,IAAI,CAACH,eAAAA,EAAiB;AACpB,IAAA,MAAM,IAAIhB,KAAAA,CAAM,CAAA,+BAAA,EAAkCmB,gBAAAA,CAAAA,CAAkB,CAAA;AACtE,EAAA;AACA,EAAA,OAAOH,eAAAA,CAAgBd,IAAAA;AACzB;AARgBgB,MAAAA,CAAAA,2BAAAA,EAAAA,6BAAAA,CAAAA;AAaT,IAAME,mBAAAA,GAAsBzB;ACtE5B,IAAM0B,WAAAA,GAAc,IAAItI,SAAAA,CAC7B,aAAA,EACA,CAACC,CAAAA,KAAmB,OAAOA,CAAAA,KAAM,QAAA,EACjC,CAACA,CAAAA,EAAGE,CAAAA,KAAAA;AACF,EAAA,IAAI,OAAOF,MAAM,QAAA,EAAU;AACzB,IAAA,OAAOG,YAAAA,CAAQH,CAAAA,EAAGE,CAAAA,EAAG,wBAAA,CAAA;AACvB,EAAA;AAOA,EAAA,MAAMoI,aAAAA,GACJ,kHAAA;AAEF,EAAA,IAAI,CAACA,aAAAA,CAAc9H,IAAAA,CAAKR,CAAAA,CAAAA,EAAI;AAC1B,IAAA,OAAOG,YAAAA,CAAQH,CAAAA,EAAGE,CAAAA,EAAG,uBAAA,CAAA;AACvB,EAAA;AAEA,EAAA,OAAOS,aAAQX,CAAAA,CAAAA;AACjB,CAAA,EACAuI,aAAAA,CAAAA;AC7BK,IAAMC,uBAAuB,IAAIzI,SAAAA;AAKtC,EAAA,iBAAA;AACA,EAAA,CAACC,MAAuBA,CAAAA,YAAaC,UAAAA;AACrC,EAAA,CAACD,GAAGE,CAAAA,KAAAA;AAEF,IAAA,IAAKF,aAAqBC,UAAAA,EAAY;AACpC,MAAA,OAAOU,aAAQX,CAAAA,CAAAA;AACjB,IAAA;AAGA,IAAA,IAAI,OAAOA,MAAM,QAAA,EAAU;AACzB,MAAA,OAAOG,YAAAA,CAAQH,CAAAA,EAAGE,CAAAA,EAAG,qCAAA,CAAA;AACvB,IAAA;AAEA,IAAA,IAAI;AAEF,MAAA,MAAME,QAAAA,GAAWJ,EAAEK,UAAAA,CAAW,IAAA,IAAQL,CAAAA,CAAEM,KAAAA,CAAM,CAAA,CAAA,GAAKN,CAAAA;AAGnD,MAAA,IAAII,QAAAA,CAASG,SAAS,CAAA,KAAM,CAAA,IAAK,CAAC,gBAAA,CAAiBC,IAAAA,CAAKJ,QAAAA,CAAAA,EAAW;AACjE,QAAA,OAAOD,YAAAA,CAAQH,CAAAA,EAAGE,CAAAA,EAAG,2BAAA,CAAA;AACvB,MAAA;AAEA,MAAA,MAAMO,OAAAA,GAAUC,oBAAWN,QAAAA,CAAAA;AAC3B,MAAA,OAAOO,aAAQF,OAAAA,CAAAA;AACjB,IAAA,CAAA,CAAA,OAASG,CAAAA,EAAG;AACV,MAAA,OAAOT,YAAAA,CAAQH,CAAAA,EAAGE,CAAAA,EAAG,CAAA,oBAAA,EAAuBU,CAAAA,CAAAA,CAAG,CAAA;AACjD,IAAA;AACF,EAAA,CAAA;;AAEA,EAAA,CAACC,CAAAA,KAAAA;AACC,IAAA,IAAI,OAAOA,MAAM,QAAA,EAAU;AACzB,MAAA,OAAOA,CAAAA;AACT,IAAA;AACA,IAAA,OAAOC,oBAAWD,CAAAA,CAAAA;AACpB,EAAA;AAAA,CAAA;;;ACyBK,IAAM4H,wBAAAA,GAA2BvG,kBAAAA,CACtC,aAAA,EACA,CAAA,EACA;EACEwG,WAAAA,EAAaL,WAAAA;EACbM,QAAAA,EAAUvH,qBAAAA;EACVwH,OAAAA,EAASJ,oBAAAA;EACTK,QAAAA,EAAUlH,WAAAA;EACVmH,MAAAA,EAAQ7G,mBAAAA;EACR8G,aAAAA,EAAe9G,mBAAAA;EACfuC,YAAAA,EAAc1C;AAChB,CAAA,EACAsG,mBAAAA;AAQK,IAAMY,8BAA8B1F,qBAAAA,CAAsB;EAC/DnB,WAAAA,EAAa,aAAA;EACbC,OAAAA,EAAS,CAAA;EACTG,MAAAA,EAAQkG,wBAAAA;EACR7E,UAAAA,EAAYhB,oBAAAA,CAAqB,eAAe,CAAA,EAAG;AACjDsC,IAAAA,WAAAA,kBAAa,MAAA,CAAA,CAAClC,KAAAA,KACZkF,2BAAAA,CAA4BlF,KAAAA,CAAAA,EADjB,aAAA,CAAA;AAEbmC,IAAAA,cAAAA,kBAAgB,MAAA,CAAA,CAACnC,KAAAA,KAAuBjC,gBAAAA,CAAiB4C,MAAAA,CAAOX,KAAAA,CAAAA,EAAhD,gBAAA,CAAA;AAChB6C,IAAAA,KAAAA,kBAAO,MAAA,CAAA,CAAC7C,KAAAA,KAAsBlD,eAAAA,CAAgB6D,MAAAA,CAAOX,KAAAA,CAAAA,EAA9C,OAAA,CAAA;AACP2F,IAAAA,QAAAA,kBAAU,MAAA,CAAA,CAAC3F,KAAAA,KAA4B5B,qBAAAA,CAAsBuC,MAAAA,CAAOX,KAAAA,CAAAA,EAA1D,UAAA,CAAA;AACV4F,IAAAA,OAAAA,kBAAS,MAAA,CAAA,CAAC5F,KAAAA,KAA+BwF,oBAAAA,CAAqB7E,MAAAA,CAAOX,KAAAA,CAAAA,EAA5D,SAAA;GACX,CAAA;EACAmB,UAAAA,EAAYf,qBAAAA,CAA8C,CAAC3C,OAAAA,MAAa;AACtEiI,IAAAA,WAAAA,EAAajI,OAAAA,CAAQiI,WAAAA;AACrBxD,IAAAA,WAAAA,EAAazE,OAAAA,CAAQyE,WAAAA;AACrBa,IAAAA,QAAAA,EAAUtF,OAAAA,CAAQsF,QAAAA;AAClBZ,IAAAA,cAAAA,EAAgB1E,OAAAA,CAAQ0E,cAAAA;AACxBU,IAAAA,KAAAA,EAAOpF,OAAAA,CAAQoF,KAAAA;AACf8C,IAAAA,QAAAA,EAAUlI,OAAAA,CAAQkI,QAAAA;AAClBC,IAAAA,OAAAA,EAASnI,OAAAA,CAAQmI,OAAAA;AACjBC,IAAAA,QAAAA,EAAUpI,OAAAA,CAAQoI,QAAAA;AAClBC,IAAAA,MAAAA,EAAQrI,OAAAA,CAAQqI,MAAAA;AAChBC,IAAAA,aAAAA,EAAetI,OAAAA,CAAQsI,aAAAA;AACvBvE,IAAAA,YAAAA,EAAc/D,OAAAA,CAAQ+D;GACxB,CAAA;AACF,CAAA;ACpGO,IAAMyE,uBAAAA,GAA0BtH,WAAAA;AAKhC,IAAMuH,sBAAsB7H,SAAAA,CAAK;EACtCA,IAAAA,EAAM4H,uBAAAA;EACNL,OAAAA,EAASjH,WAAAA;AACTwH,EAAAA,OAAAA,EAASpH,UAAAA,CAAM;AAACqH,IAAAA,YAAAA;AAASpH,IAAAA;AAAc,GAAA;AACzC,CAAA,CAAA;;;ACYO,IAAMqH,yBAAAA,GAA4BnH,kBAAAA,CACvC,sBAAA,EACA,CAAA,EACA;AACEoH,EAAAA,SAAAA,EAAWvH,UAAAA,CAAM;AAACyG,IAAAA,oBAAAA;AAAsBxG,IAAAA;AAAc,GAAA,CAAA;AACtDuH,EAAAA,KAAAA,EAAOxH,UAAAA,CAAM;AAACmH,IAAAA,mBAAAA;AAAqBlH,IAAAA;AAAc,GAAA;AACnD,CAAA;AAQK,IAAMwH,+BAA+BlG,qBAAAA,CAK1C;EACAnB,WAAAA,EAAa,sBAAA;EACbC,OAAAA,EAAS,CAAA;EACTG,MAAAA,EAAQ8G,yBAAAA;EACRzF,UAAAA,EAAYhB,oBAAAA,CAAqB,wBAAwB,CAAA,EAAG;AAC1D0G,IAAAA,SAAAA,kBAAW,MAAA,CAAA,CAACtG,KAAAA,KAAsBwF,oBAAAA,CAAqB7E,MAAAA,CAAOX,KAAAA,CAAAA,EAAnD,WAAA;GACb,CAAA;EACAmB,UAAAA,EAAYf,qBAAAA,CAA+C,CAAC3C,OAAAA,MAAa;AACvE6I,IAAAA,SAAAA,EAAW7I,OAAAA,CAAQ6I,SAAAA;AACnBC,IAAAA,KAAAA,EAAO9I,OAAAA,CAAQ8I;GACjB,CAAA;AACF,CAAA;ACzCO,IAAME,0BAAAA,GAA6BvH,kBAAAA,CACxC,gBAAA,EACA,CAAA,EACA;AACE2C,EAAAA,YAAAA,EAAc9C,UAAAA,CAAM;AAACJ,IAAAA,WAAAA;AAAQK,IAAAA;AAAc,GAAA;AAC7C,CAAA;AAQK,IAAM0H,gCAAgCtF,mBAAAA,CAI3C;EACAjC,WAAAA,EAAa,gBAAA;EACbC,OAAAA,EAAS,CAAA;EACTG,MAAAA,EAAQkH;AACV,CAAA;ACnBO,IAAME,2BAAAA,GAA8BzH,kBAAAA,CACzC,yBAAA,EACA,CAAA,EACA;AACE0H,EAAAA,MAAAA,EAAQpH,aAAQ,cAAA,CAAA;EAChBqH,SAAAA,EAAWlI;AACb,CAAA;AAQK,IAAMmI,iCAAiC1F,mBAAAA,CAI5C;EACAjC,WAAAA,EAAa,yBAAA;EACbC,OAAAA,EAAS,CAAA;EACTG,MAAAA,EAAQoH;AACV,CAAA;ACzBA,IAAMI,wBAAwB1I,SAAAA,CAAK;EACjCqH,WAAAA,EAAaL,WAAAA;EACbQ,QAAAA,EAAUlH,WAAAA;EACVqI,UAAAA,EAAYnI,WAAAA;EACZoI,SAAAA,EAAWpI,WAAAA;EACXqI,UAAAA,EAAY9I,qBAAAA;AACZ+I,EAAAA,SAAAA,EAAWC,WAAMzI,WAAAA,CAAAA;EACjBmH,MAAAA,EAAQ7G,mBAAAA;EACR8G,aAAAA,EAAe9G,mBAAAA;EACfuC,YAAAA,EAAc1C;AAChB,CAAA,CAAA;AAKA,IAAMuI,yBAAyBhJ,SAAAA,CAAK;AAClC,EAAA,GAAG0I,qBAAAA,CAAsBO,KAAAA;AACzBpF,EAAAA,WAAAA,EAAa1C,aAAQ,OAAA;AACvB,CAAA,CAAA;AAKA,IAAM+H,0BAA0BlJ,SAAAA,CAAK;AACnC,EAAA,GAAG0I,qBAAAA,CAAsBO,KAAAA;AACzBpF,EAAAA,WAAAA,EAAa1C,aAAQ,QAAA;AACvB,CAAA,CAAA;AAMA,IAAMgI,wBAAwBzI,UAAAA,CAAM;AAClCsI,EAAAA,sBAAAA;AACAE,EAAAA;AACD,CAAA,CAAA;AA8CM,IAAME,mBAAAA,GAAsBvI,kBAAAA,CACjC,QAAA,EACA,CAAA,EACA;EACEwG,WAAAA,EAAaL,WAAAA;EACbQ,QAAAA,EAAUlH,WAAAA;EACVqI,UAAAA,EAAYnI,WAAAA;EACZoI,SAAAA,EAAWpI,WAAAA;EACXqI,UAAAA,EAAY9I,qBAAAA;AACZ+I,EAAAA,SAAAA,EAAWC,WAAMzI,WAAAA,CAAAA;EACjBmH,MAAAA,EAAQ7G,mBAAAA;EACR8G,aAAAA,EAAe9G,mBAAAA;EACfuC,YAAAA,EAAc1C;AAChB,CAAA,EACA0I,qBAAAA;AAQK,IAAME,yBAAyBpH,qBAAAA,CAAsB;EAC1DnB,WAAAA,EAAa,QAAA;EACbC,OAAAA,EAAS,CAAA;EACTG,MAAAA,EAAQkI,mBAAAA;EACR7G,UAAAA,EAAYhB,oBAAAA,CAAqB,UAAU,CAAA,EAAG;AAC5CsC,IAAAA,WAAAA,kBAAa,MAAA,CAAA,CAAClC,KAAAA,KACZkF,2BAAAA,CAA4BlF,KAAAA,CAAAA,EADjB,aAAA,CAAA;AAEbkH,IAAAA,UAAAA,kBAAY,MAAA,CAAA,CAAClH,KAAAA,KACX5B,qBAAAA,CAAsBuC,MAAAA,CAAOX,KAAAA,CAAAA,EADnB,YAAA;GAEd,CAAA;EACAmB,UAAAA,EAAYf,qBAAAA,CAAyC,CAAC3C,OAAAA,MAAa;AACjEiI,IAAAA,WAAAA,EAAajI,OAAAA,CAAQiI,WAAAA;AACrBxD,IAAAA,WAAAA,EAAazE,OAAAA,CAAQyE,WAAAA;AACrB2D,IAAAA,QAAAA,EAAUpI,OAAAA,CAAQoI,QAAAA;AAClBmB,IAAAA,UAAAA,EAAYvJ,OAAAA,CAAQuJ,UAAAA;AACpBC,IAAAA,SAAAA,EAAWxJ,OAAAA,CAAQwJ,SAAAA;AACnBC,IAAAA,UAAAA,EAAYzJ,OAAAA,CAAQyJ,UAAAA;AACpBC,IAAAA,SAAAA,EAAW1J,OAAAA,CAAQ0J,SAAAA;AACnBrB,IAAAA,MAAAA,EAAQrI,OAAAA,CAAQqI,MAAAA;AAChBC,IAAAA,aAAAA,EAAetI,OAAAA,CAAQsI,aAAAA;AACvBvE,IAAAA,YAAAA,EAAc/D,OAAAA,CAAQ+D;GACxB,CAAA;AACF,CAAA;AC/GO,IAAMmG,oBAAAA,GAAuBzI,kBAAAA,CAAmB,iBAAA,EAAmB,CAAA,EAAG;AAC3EsD,EAAAA,YAAAA,EAAczD,UAAAA,CAAM;AAACX,IAAAA,qBAAAA;AAAuBY,IAAAA;AAAc,GAAA,CAAA;AAC1DuH,EAAAA,KAAAA,EAAOxH,UAAAA,CAAM;AAACmH,IAAAA,mBAAAA;AAAqBlH,IAAAA;AAAc,GAAA;AACnD,CAAA;AAOO,IAAM4I,0BAA0BtH,qBAAAA,CAKrC;EACAnB,WAAAA,EAAa,iBAAA;EACbC,OAAAA,EAAS,CAAA;EACTG,MAAAA,EAAQoI,oBAAAA;EACR/G,UAAAA,EAAYhB,oBAAAA,CAAqB,mBAAmB,CAAA,EAAG;AACrD4C,IAAAA,YAAAA,kBAAc,MAAA,CAAA,CAACxC,KAAAA,KACb5B,qBAAAA,CAAsBuC,MAAAA,CAAOX,KAAAA,CAAAA,EADjB,cAAA;GAEhB,CAAA;EACAmB,UAAAA,EAAYf,qBAAAA,CAA0C,CAAC3C,OAAAA,MAAa;AAClE+E,IAAAA,YAAAA,EAAc/E,OAAAA,CAAQ+E,YAAAA;AACtB+D,IAAAA,KAAAA,EAAO9I,OAAAA,CAAQ8I;GACjB,CAAA;AACF,CAAA;ACNO,IAAMsB,uBAAAA,GAA0B3I,kBAAAA,CAAmB,YAAA,EAAc,CAAA,EAAG;EACzEwG,WAAAA,EAAaL,WAAAA;AACbnD,EAAAA,WAAAA,EAAa1C,aAAQ,SAAA,CAAA;EACrBqG,QAAAA,EAAUlH,WAAAA;EACVqI,UAAAA,EAAYnI,WAAAA;EACZoI,SAAAA,EAAWpI,WAAAA;EACXqI,UAAAA,EAAY9I,qBAAAA;AACZ+I,EAAAA,SAAAA,EAAWC,WAAMzI,WAAAA,CAAAA;EACjBmH,MAAAA,EAAQ7G,mBAAAA;EACR8G,aAAAA,EAAe9G,mBAAAA;EACfuC,YAAAA,EAAc1C;AAChB,CAAA;AAQO,IAAMgJ,6BAA6BxH,qBAAAA,CAAsB;EAC9DnB,WAAAA,EAAa,YAAA;EACbC,OAAAA,EAAS,CAAA;EACTG,MAAAA,EAAQsI,uBAAAA;EACRjH,UAAAA,kBAAY,MAAA,CAAA,CAAChE,IAAAA,KACXiL,uBAAAA,CAAwBlH,MAAAA,CAAO;IAC7BtC,IAAAA,EAAM,YAAA;IACNe,OAAAA,EAAS,CAAA;IACT,GAAGxC;AACL,GAAA,CAAA,EALU,YAAA,CAAA;EAMZuE,UAAAA,EAAYf,qBAAAA,CAA6C,CAAC3C,OAAAA,MAAa;AACrEiI,IAAAA,WAAAA,EAAajI,OAAAA,CAAQiI,WAAAA;AACrBxD,IAAAA,WAAAA,EAAazE,OAAAA,CAAQyE,WAAAA;AACrB2D,IAAAA,QAAAA,EAAUpI,OAAAA,CAAQoI,QAAAA;AAClBmB,IAAAA,UAAAA,EAAYvJ,OAAAA,CAAQuJ,UAAAA;AACpBC,IAAAA,SAAAA,EAAWxJ,OAAAA,CAAQwJ,SAAAA;AACnBC,IAAAA,UAAAA,EAAYzJ,OAAAA,CAAQyJ,UAAAA;AACpBC,IAAAA,SAAAA,EAAW1J,OAAAA,CAAQ0J,SAAAA;AACnBrB,IAAAA,MAAAA,EAAQrI,OAAAA,CAAQqI,MAAAA;AAChBC,IAAAA,aAAAA,EAAetI,OAAAA,CAAQsI,aAAAA;AACvBvE,IAAAA,YAAAA,EAAc/D,OAAAA,CAAQ+D;GACxB,CAAA;AACF,CAAA;AC9DO,IAAMuG,wBAAAA,GAA2B7I,kBAAAA,CACtC,qBAAA,EACA,CAAA,EACA;AACEsD,EAAAA,YAAAA,EAAczD,UAAAA,CAAM;AAACX,IAAAA,qBAAAA;AAAuBY,IAAAA;AAAc,GAAA,CAAA;AAC1DuH,EAAAA,KAAAA,EAAOxH,UAAAA,CAAM;AAACmH,IAAAA,mBAAAA;AAAqBlH,IAAAA;AAAc,GAAA;AACnD,CAAA;AAQK,IAAMgJ,8BAA8B1H,qBAAAA,CAKzC;EACAnB,WAAAA,EAAa,qBAAA;EACbC,OAAAA,EAAS,CAAA;EACTG,MAAAA,EAAQwI,wBAAAA;EACRnH,UAAAA,EAAYhB,oBAAAA,CAAqB,uBAAuB,CAAA,EAAG;AACzD4C,IAAAA,YAAAA,kBAAc,MAAA,CAAA,CAACxC,KAAAA,KACb5B,qBAAAA,CAAsBuC,MAAAA,CAAOX,KAAAA,CAAAA,EADjB,cAAA;GAEhB,CAAA;EACAmB,UAAAA,EAAYf,qBAAAA,CAA8C,CAAC3C,OAAAA,MAAa;AACtE+E,IAAAA,YAAAA,EAAc/E,OAAAA,CAAQ+E,YAAAA;AACtB+D,IAAAA,KAAAA,EAAO9I,OAAAA,CAAQ8I;GACjB,CAAA;AACF,CAAA;;;ACnDO,IAAM0B,mBAAAA,GAAsB;EACjC,aAAA,EAAexG,yBAAAA;EACf,sBAAA,EAAwBK,0BAAAA;EACxB,eAAA,EAAiBkE,2BAAAA;EACjB,wBAAA,EAA0BQ,4BAAAA;EAC1B,kBAAA,EAAoBE,6BAAAA;EACpB,2BAAA,EAA6BI,8BAAAA;EAC7B,UAAA,EAAYY,sBAAAA;EACZ,mBAAA,EAAqBE,uBAAAA;EACrB,cAAA,EAAgBE,0BAAAA;EAChB,uBAAA,EAAyBE;AAC3B;AAcO,IAAME,gBAAAA,GAAmBjI,MAAAA,CAAOwD,IAAAA,CACrCwE,mBAAAA;AAMK,SAASE,eAAAA,CAAgB9J,OAAce,OAAAA,EAAe;AAC3D,EAAA,MAAMW,GAAAA,GAAM,CAAA,EAAG1B,KAAAA,CAAAA,CAAAA,EAAQe,OAAAA,CAAAA,CAAAA;AACvB,EAAA,MAAMgJ,YAAAA,GAAeH,oBAAoBlI,GAAAA,CAAAA;AAEzC,EAAA,IAAI,CAACqI,YAAAA,EAAc;AACjB,IAAA,MAAM,IAAIpE,KAAAA,CAAM,CAAA,sBAAA,EAAyB3F,KAAAA,CAAAA,SAAAA,EAAgBe,OAAAA,CAAAA,CAAS,CAAA;AACpE,EAAA;AAEA,EAAA,OAAOgJ,YAAAA;AACT;AATgBD,MAAAA,CAAAA,eAAAA,EAAAA,iBAAAA,CAAAA;AAcT,SAASE,kBAAAA,CAAmBhK,OAAce,OAAAA,EAAe;AAC9D,EAAA,MAAMW,GAAAA,GAAM,CAAA,EAAG1B,KAAAA,CAAAA,CAAAA,EAAQe,OAAAA,CAAAA,CAAAA;AACvB,EAAA,OAAOW,GAAAA,IAAOkI,mBAAAA;AAChB;AAHgBI,MAAAA,CAAAA,kBAAAA,EAAAA,oBAAAA,CAAAA;AAQT,SAASC,uBAAAA,GAAAA;AAId,EAAA,OAAOJ,gBAAAA,CAAiBpE,GAAAA,CAAI,CAAC/D,GAAAA,KAAAA;AAC3B,IAAA,MAAM,CAAC1B,KAAAA,EAAMkK,UAAAA,CAAAA,GAAcxI,GAAAA,CAAIyI,MAAM,GAAA,CAAA;AACrC,IAAA,OAAO;MAAEnK,IAAAA,EAAAA,KAAAA;MAAMe,OAAAA,EAASqJ,QAAAA,CAASF,YAAY,EAAA;AAAI,KAAA;EACnD,CAAA,CAAA;AACF;AARgBD,MAAAA,CAAAA,uBAAAA,EAAAA,yBAAAA,CAAAA;AAaT,SAASI,gBAAgB3I,GAAAA,EAAoB;AAIlD,EAAA,MAAM,CAAC1B,KAAAA,EAAMkK,UAAAA,CAAAA,GAAcxI,GAAAA,CAAIyI,MAAM,GAAA,CAAA;AACrC,EAAA,OAAO;IAAEnK,IAAAA,EAAAA,KAAAA;IAAMe,OAAAA,EAASqJ,QAAAA,CAASF,YAAY,EAAA;AAAI,GAAA;AACnD;AANgBG,MAAAA,CAAAA,eAAAA,EAAAA,iBAAAA,CAAAA;;;AC3ET,IAAMC,eAAAA,GAAN,MAAMA,gBAAAA,CAAAA;EAPb;;;EAQE,OAAe5E,QAAAA;EAEf,WAAA,GAAsB;AAAC,EAAA;AAEvB,EAAA,OAAO6E,WAAAA,GAA+B;AACpC,IAAA,IAAI,CAACD,iBAAgB5E,QAAAA,EAAU;AAC7B4E,MAAAA,gBAAAA,CAAgB5E,QAAAA,GAAW,IAAI4E,gBAAAA,EAAAA;AACjC,IAAA;AACA,IAAA,OAAOA,gBAAAA,CAAgB5E,QAAAA;AACzB,EAAA;;;;AAKAoE,EAAAA,eAAAA,CAAgB9J,OAAce,OAAAA,EAAiB;AAC7C,IAAA,IAAI;AACF,MAAA,OAAO+I,eAAAA,CAAgB9J,OAAMe,OAAAA,CAAAA;IAC/B,CAAA,CAAA,MAAQ;AACN,MAAA,OAAOe,MAAAA;AACT,IAAA;AACF,EAAA;;;;AAKAU,EAAAA,MAAAA,CAAOC,QAAAA,EAAgD;AACrD,IAAA,IAAI,CAACA,QAAAA,IAAY,OAAOA,QAAAA,KAAa,QAAA,EAAU;AAC7C,MAAA,OAAO;QAAEI,IAAAA,EAAM,MAAA;QAAQ2H,IAAAA,EAAM;AAAuC,OAAA;AACtE,IAAA;AAEA,IAAA,MAAM,EAAExK,IAAAA,EAAAA,KAAAA,EAAMe,OAAAA,EAAO,GAAK0B,QAAAA;AAC1B,IAAA,IAAI,CAACzC,KAAAA,IAAQ,CAACe,OAAAA,EAAS;AACrB,MAAA,OAAO;QACL8B,IAAAA,EAAM,MAAA;QACN2H,IAAAA,EAAM;AACR,OAAA;AACF,IAAA;AAEA,IAAA,MAAMT,YAAAA,GAAe,IAAA,CAAKD,eAAAA,CAAgB9J,KAAAA,EAAMe,OAAAA,CAAAA;AAChD,IAAA,IAAI,CAACgJ,YAAAA,EAAc;AACjB,MAAA,OAAO;QAAElH,IAAAA,EAAM,MAAA;QAAQ2H,IAAAA,EAAM,CAAA,sBAAA,EAAyBxK,KAAAA,CAAAA,CAAAA,EAAQe,OAAAA,CAAAA;AAAU,OAAA;AAC1E,IAAA;AAEA,IAAA,MAAMM,MAAAA,GAAS0I,YAAAA,CAAavH,MAAAA,CAAOC,QAAAA,CAAAA;AACnC,IAAA,IAAIC,WAAAA,CAAOC,MAAAA,CAAOtB,MAAAA,CAAAA,EAAS;AACzB,MAAA,OAAO;QACLwB,IAAAA,EAAM,MAAA;QACN2H,IAAAA,EAAM,CAAA,cAAA,EAAiBnJ,MAAAA,CAAOmJ,IAAAA,CAAK/E,GAAAA,CAAI,CAAClG,CAAAA,KAAMA,CAAAA,CAAEgI,OAAO,CAAA,CAAEkD,IAAAA,CAAK,IAAA,CAAA,CAAA;AAChE,OAAA;AACF,IAAA;AAEA,IAAA,OAAO;MAAE5H,IAAAA,EAAM,OAAA;AAASD,MAAAA,KAAAA,EAAOvB,MAAAA,CAAOuB;AAAM,KAAA;AAC9C,EAAA;;;;AAKAN,EAAAA,MAAAA,CAAOiF,OAAAA,EAAwB;AAC7B,IAAA,OAAOA,QAAQjF,MAAAA,EAAM;AACvB,EAAA;;;;EAKAoI,kBAAAA,GAA+B;AAC7B,IAAA,OAAOT,uBAAAA,EAAAA,CAA0BxE,GAAAA,CAC/B,CAAC,EAAEzF,IAAAA,EAAAA,KAAAA,EAAMe,OAAAA,EAAO,KAAO,CAAA,EAAGf,KAAAA,CAAAA,CAAAA,EAAQe,OAAAA,CAAAA,CAAS,CAAA;AAE/C,EAAA;AACF;AAGO,IAAM4J,eAAAA,GAAkBL,gBAAgBC,WAAAA;;;AC5ExC,SAASK,aAAAA,CACdjJ,OACA4F,OAAAA,EAAgB;AAEhB,EAAA,IAAI5F,KAAAA,KAAU,IAAA,IAAQA,KAAAA,KAAUG,MAAAA,EAAW;AACzC,IAAA,MAAM,IAAI6D,KAAAA,CAAM4B,OAAAA,IAAW,uBAAA,CAAA;AAC7B,EAAA;AACF;AAPgBqD,MAAAA,CAAAA,aAAAA,EAAAA,eAAAA,CAAAA;AAaT,SAASC,aAAAA,CACdlJ,OACA4F,OAAAA,EAAgB;AAEhB,EAAA,IAAI5F,UAAU,IAAA,EAAM;AAClB,IAAA,MAAM,IAAIgE,KAAAA,CAAM4B,OAAAA,IAAW,wBAAA,CAAA;AAC7B,EAAA;AACF;AAPgBsD,MAAAA,CAAAA,aAAAA,EAAAA,eAAAA,CAAAA;AAaT,SAASC,UAAAA,CACdnJ,OACA4F,OAAAA,EAAgB;AAEhBqD,EAAAA,aAAAA,CAAcjJ,OAAO4F,OAAAA,CAAAA;AACrB,EAAA,OAAO5F,KAAAA;AACT;AANgBmJ,MAAAA,CAAAA,UAAAA,EAAAA,YAAAA,CAAAA;;;AC3BT,IAAMC,0CAA0B,MAAA,CAAA,MAAA;AAIrC,EAAA,IAAI;AACF,IAAA,MAAM3F,IAAAA,GAAO4F,mBAAUC,MAAAA,EAAM;AAC7BJ,IAAAA,aAAAA,CAAczF,IAAAA,CAAK8F,WAAW,mCAAA,CAAA;AAC9BL,IAAAA,aAAAA,CAAczF,IAAAA,CAAK+F,WAAW,mCAAA,CAAA;AAC9B,IAAA,OAAO;AACLC,MAAAA,gBAAAA,EAAkBhG,IAAAA,CAAK8F,SAAAA;AACvBG,MAAAA,gBAAAA,EAAkBjG,IAAAA,CAAK+F;AACzB,KAAA;AACF,EAAA,CAAA,CAAA,OAASjD,KAAAA,EAAO;AACd,IAAA,MAAM,IAAIvC,KAAAA,CACR,CAAA,uCAAA,EAA0CuC,KAAAA,YAAiBvC,KAAAA,GAAQuC,MAAMX,OAAAA,GAAU+D,MAAAA,CAAOpD,KAAAA,CAAAA,CAAAA,CAAQ,CAAA;AAEtG,EAAA;AACF,CAAA,EAjBuC,yBAAA;ACDhC,IAAMqD,mBAAAA,2BACXH,gBAAAA,KAAAA;AAEA,EAAA,OAAOJ,kBAAAA,CAAUQ,YAAYJ,gBAAAA,CAAAA;AAC/B,CAAA,EAJmC,qBAAA;ACA5B,IAAMK,mBAAAA,mBAAsB,MAAA,CAAA,CACjCJ,gBAAAA,EACAK,UAAAA,KAAAA;AAEA,EAAA,OAAOV,kBAAAA,CAAUW,WAAAA,CAAYD,UAAAA,EAAYL,gBAAAA,CAAAA;AAC3C,CAAA,EALmC,qBAAA;ACC5B,IAAMO,oBAAAA,GAAuB;AAC7B,IAAMC,sBAAAA,GAAyB;AAC/B,IAAMC,oBAAAA,GAAuB;AAC7B,IAAMC,cAAAA,GAAiB;AAKvB,IAAKC,iBAAAA,6BAAAA,kBAAAA,EAAAA;;;;;AAAAA,EAAAA,OAAAA,kBAAAA;;AAWL,SAASC,YAAAA,CACdC,YAAAA,EACAjM,IAAAA,EACAkM,IAAAA,EAAY;AAEZ,EAAA,MAAMC,SAAAA,GAAY,IAAIC,WAAAA,EAAAA,CAAc/J,OAAO6J,IAAAA,CAAAA;AAC3C,EAAA,OAAOG,YAAAA,CAAKC,cAAAA,EAAQL,YAAAA,EAAcjM,IAAAA,EAAMmM,WAAWR,oBAAAA,CAAAA;AACrD;AAPgBK,MAAAA,CAAAA,YAAAA,EAAAA,cAAAA,CAAAA;AAYT,SAASO,uBAAAA,CACdC,OAAAA,EACAjJ,YAAAA,EACAzC,OAAAA,GAAkB,CAAA,EAAC;AAEnB,EAAA,OAAO,CAAA,YAAA,EAAe0L,OAAAA,CAAAA,EAAAA,EAAY1L,OAAAA,IAAWyC,YAAAA,CAAAA,CAAAA;AAC/C;AANgBgJ,MAAAA,CAAAA,uBAAAA,EAAAA,yBAAAA,CAAAA;ACxBhB,IAAMT,eAAAA,GAAiB,EAAA;AACvB,IAAMW,kBAAAA,GAAqB,EAAA;AAC3B,IAAMC,sBAAAA,GAAyB,EAAA;AAuBxB,SAASC,eACdC,OAAAA,EAA8B;AAE9B,EAAA,MAAM,EAAEC,OAAAA,EAASZ,YAAAA,EAAc1I,YAAAA,EAAciJ,SAAO,GAAKI,OAAAA;AAEzD,EAAA,IAAI,CAACX,YAAAA,IAAgBA,YAAAA,CAAahN,MAAAA,GAASyN,sBAAAA,EAAwB;AACjE,IAAA,MAAM,IAAIhH,KAAAA,CACR,CAAA,wCAAA,EAA2CgH,sBAAAA,CAAAA,MAAAA,CAA8B,CAAA;AAE7E,EAAA;AACA,EAAA,IAAI,CAACnJ,YAAAA,IAAgBA,YAAAA,CAAauJ,IAAAA,EAAI,CAAG7N,WAAW,CAAA,EAAG;AACrD,IAAA,MAAM,IAAIyG,MAAM,gDAAA,CAAA;AAClB,EAAA;AAGA,EAAA,MAAM1F,IAAAA,GAAO+M,qBAAYjB,eAAAA,CAAAA;AAGzB,EAAA,MAAMI,IAAAA,GAAOK,uBAAAA,CAAwBC,OAAAA,EAASjJ,YAAAA,CAAAA;AAC9C,EAAA,MAAMyJ,MAAAA,GAAShB,YAAAA,CAAaC,YAAAA,EAAcjM,IAAAA,EAAMkM,IAAAA,CAAAA;AAGhD,EAAA,MAAMjJ,KAAAA,GAAQ8J,qBAAYN,kBAAAA,CAAAA;AAC1B,EAAA,MAAMQ,SAAAA,GAAYC,OAAAA,CAAIF,MAAAA,EAAQ/J,KAAAA,CAAAA;AAC9B,EAAA,MAAMkK,SAAAA,GAAY,IAAIf,WAAAA,EAAAA,CAAc/J,OAAO+K,IAAAA,CAAKC,SAAAA,CAAUR,OAAAA,CAAAA,CAAAA;AAC1D,EAAA,MAAMS,UAAAA,GAAaL,SAAAA,CAAUM,OAAAA,CAAQJ,SAAAA,CAAAA;AAGrC,EAAA,MAAMlN,mBAAmB,IAAItB,UAAAA,CAAWsE,KAAAA,CAAMhE,MAAAA,GAASqO,WAAWrO,MAAM,CAAA;AACxEgB,EAAAA,gBAAAA,CAAiBuN,GAAAA,CAAIvK,OAAO,CAAA,CAAA;AAC5BhD,EAAAA,gBAAAA,CAAiBuN,GAAAA,CAAIF,UAAAA,EAAYrK,KAAAA,CAAMhE,MAAM,CAAA;AAG7C+N,EAAAA,MAAAA,CAAOS,KAAK,CAAA,CAAA;AAEZ,EAAA,OAAO;AAAEzN,IAAAA,IAAAA;AAAMC,IAAAA;AAAiB,GAAA;AAClC;AApCgB0M,MAAAA,CAAAA,cAAAA,EAAAA,gBAAAA,CAAAA;AA2DT,SAASe,eAAwBd,OAAAA,EAA8B;AACpE,EAAA,MAAM,EAAEe,SAAAA,EAAW1B,YAAAA,EAAc1I,YAAAA,EAAciJ,SAAO,GAAKI,OAAAA;AAE3D,EAAA,IAAI,CAACX,YAAAA,IAAgBA,YAAAA,CAAahN,MAAAA,GAASyN,sBAAAA,EAAwB;AACjE,IAAA,MAAM,IAAIhH,KAAAA,CACR,CAAA,wCAAA,EAA2CgH,sBAAAA,CAAAA,MAAAA,CAA8B,CAAA;AAE7E,EAAA;AACA,EAAA,IAAI,CAACnJ,YAAAA,IAAgBA,YAAAA,CAAauJ,IAAAA,EAAI,CAAG7N,WAAW,CAAA,EAAG;AACrD,IAAA,MAAM,IAAIyG,MAAM,gDAAA,CAAA;AAClB,EAAA;AACA,EAAA,IACE,CAACiI,SAAAA,CAAU1N,gBAAAA,IACX0N,SAAAA,CAAU1N,gBAAAA,CAAiBhB,SAASwN,kBAAAA,EACpC;AACA,IAAA,MAAM,IAAI/G,KAAAA,CACR,CAAA,4CAAA,EAA+C+G,kBAAAA,CAAAA,MAAAA,CAA0B,CAAA;AAE7E,EAAA;AAGA,EAAA,MAAMP,IAAAA,GAAOK,uBAAAA,CAAwBC,OAAAA,EAASjJ,YAAAA,CAAAA;AAC9C,EAAA,MAAMyJ,MAAAA,GAAShB,YAAAA,CAAaC,YAAAA,EAAc0B,SAAAA,CAAU3N,MAAMkM,IAAAA,CAAAA;AAG1D,EAAA,MAAMjJ,KAAAA,GAAQ0K,SAAAA,CAAU1N,gBAAAA,CAAiBjB,KAAAA,CAAM,GAAGyN,kBAAAA,CAAAA;AAClD,EAAA,MAAMa,UAAAA,GAAaK,SAAAA,CAAU1N,gBAAAA,CAAiBjB,KAAAA,CAAMyN,kBAAAA,CAAAA;AAGpD,EAAA,MAAMQ,SAAAA,GAAYC,OAAAA,CAAIF,MAAAA,EAAQ/J,KAAAA,CAAAA;AAC9B,EAAA,MAAMkK,SAAAA,GAAYF,SAAAA,CAAUW,OAAAA,CAAQN,UAAAA,CAAAA;AAGpC,EAAA,MAAMO,aAAAA,GAAgB,IAAIC,WAAAA,EAAAA,CAAcvL,OAAO4K,SAAAA,CAAAA;AAC/C,EAAA,MAAM7O,IAAAA,GAAO8O,IAAAA,CAAKW,KAAAA,CAAMF,aAAAA,CAAAA;AAGxBb,EAAAA,MAAAA,CAAOS,KAAK,CAAA,CAAA;AAEZ,EAAA,OAAOnP,IAAAA;AACT;AAxCgBoP,MAAAA,CAAAA,cAAAA,EAAAA,gBAAAA,CAAAA;AC/ET,SAASM,eAAAA,CACd3G,QAAAA,EACA4E,YAAAA,EACA1I,YAAAA,EACA0K,gBAAAA,EAAsC;AAGtC,EAAA,MAAMC,YAAAA,GAAe;AACnB7G,IAAAA,QAAAA;AACA4G,IAAAA,gBAAAA;AACA1F,IAAAA,SAAAA,EAAW4F,KAAKC,GAAAA,EAAG;IACnBnL,KAAAA,EAAOzD,mBAAAA,CAAWuN,oBAAAA,CAAY,EAAA,CAAA;AAChC,GAAA;AAEA,EAAA,OAAOJ,cAAAA,CAAe;IACpBE,OAAAA,EAASqB,YAAAA;AACTjC,IAAAA,YAAAA;AACA1I,IAAAA,YAAAA;AACAiJ,IAAAA,OAAAA,EAAST,iBAAAA,CAAkBsC;GAC7B,CAAA;AACF;AApBgBL,MAAAA,CAAAA,eAAAA,EAAAA,iBAAAA,CAAAA;;;ACFT,SAASM,iBAAAA,CACd1F,UAAAA,EACAqD,YAAAA,EACA1I,YAAAA,EAAoB;AAGpB,EAAA,IAAI,CAACqF,WAAW2F,QAAAA,IAAY3F,UAAAA,CAAW2F,SAASzB,IAAAA,EAAI,CAAG7N,WAAW,CAAA,EAAG;AACnE,IAAA,MAAM,IAAIyG,MAAM,uDAAA,CAAA;AAClB,EAAA;AACA,EAAA,IAAI,CAACkD,WAAW4F,YAAAA,IAAgB5F,UAAAA,CAAW4F,aAAa1B,IAAAA,EAAI,CAAG7N,WAAW,CAAA,EAAG;AAC3E,IAAA,MAAM,IAAIyG,MACR,2DAAA,CAAA;AAEJ,EAAA;AAEA,EAAA,OAAOiH,cAAAA,CAAe;IACpBE,OAAAA,EAASjE,UAAAA;AACTqD,IAAAA,YAAAA;AACA1I,IAAAA,YAAAA;AACAiJ,IAAAA,OAAAA,EAAST,iBAAAA,CAAkB0C;GAC7B,CAAA;AACF;AArBgBH,MAAAA,CAAAA,iBAAAA,EAAAA,mBAAAA,CAAAA;AAgCT,SAASI,mBAAAA,CACdf,SAAAA,EACA1B,YAAAA,EACA1I,YAAAA,EAAoB;AAEpB,EAAA,MAAMjF,OAAOoP,cAAAA,CAAe;AAC1BC,IAAAA,SAAAA;AACA1B,IAAAA,YAAAA;AACA1I,IAAAA,YAAAA;AACAiJ,IAAAA,OAAAA,EAAST,iBAAAA,CAAkB4C;GAC7B,CAAA;AAGA,EAAA,IAAI,CAACrQ,KAAK0F,MAAAA,IAAU,CAAC4K,MAAMC,OAAAA,CAAQvQ,IAAAA,CAAK0F,MAAM,CAAA,EAAG;AAC/C,IAAA,MAAM,IAAI0B,MAAM,gDAAA,CAAA;AAClB,EAAA;AACA,EAAA,IACE,CAACpH,IAAAA,CAAKyF,WAAAA,IACN,OAAOzF,IAAAA,CAAKyF,WAAAA,KAAgB,QAAA,IAC5BzF,IAAAA,CAAKyF,WAAAA,CAAY+I,IAAAA,EAAI,CAAG7N,MAAAA,KAAW,CAAA,EACnC;AACA,IAAA,MAAM,IAAIyG,MACR,6DAAA,CAAA;AAEJ,EAAA;AAGA,EAAA,OAAO;IACL1B,MAAAA,EAAQ,IAAIrF,UAAAA,CAAWL,IAAAA,CAAK0F,MAAM,CAAA;AAClCD,IAAAA,WAAAA,EAAazF,IAAAA,CAAKyF;AACpB,GAAA;AACF;AA/BgB2K,MAAAA,CAAAA,mBAAAA,EAAAA,qBAAAA,CAAAA;;;AClChB,IAAMI,wBAAAA,GAAN,MAAMA,yBAAAA,CAAAA;EATN;;;;;;AAaEC,EAAAA,GAAAA,CAAInJ,IAAAA,EAA+C;AACjD,IAAA,MAAMC,SAAAA,GAAYT,4BAA4BQ,IAAAA,CAAAA;AAC9C,IAAA,IAAI,CAACC,SAAAA,EAAW;AACd,MAAA,MAAM,IAAIH,KAAAA,CAAM,CAAA,2BAAA,EAA8BE,IAAAA,CAAAA,CAAM,CAAA;AACtD,IAAA;AACA,IAAA,OAAOC,SAAAA;AACT,EAAA;;;;AAKAmJ,EAAAA,GAAAA,CAAIpJ,IAAAA,EAA4C;AAC9C,IAAA,OAAOD,wBAAwBC,IAAAA,CAAAA;AACjC,EAAA;;;;EAKAqJ,WAAAA,GAAsC;AACpC,IAAA,OAAO/J,2BAAAA;AACT,EAAA;;;;EAKAgK,eAAAA,GAAmE;AACjE,IAAA,OAAO9J,2BAAAA;AACT,EAAA;AACF,CAAA;AAEO,IAAM+J,wBAAAA,GAA2B,IAAIL,wBAAAA","file":"index.cjs","sourcesContent":["/**\n * Base structure for all WebSocket messages\n */\nexport interface BaseWebSocketMessage {\n type: string;\n version: number;\n}\n\n/**\n * WebSocket error types\n */\nexport enum WebSocketErrorType {\n INVALID_MESSAGE = 'INVALID_MESSAGE',\n HANDLER_NOT_FOUND = 'HANDLER_NOT_FOUND',\n HANDLER_ERROR = 'HANDLER_ERROR',\n CONNECTION_ERROR = 'CONNECTION_ERROR',\n VALIDATION_ERROR = 'VALIDATION_ERROR',\n}\n\n/**\n * Structured WebSocket error\n */\nexport interface WebSocketError {\n type: WebSocketErrorType;\n message: string;\n details?: unknown;\n}\n\n/**\n * Standard error response format\n */\nexport interface ErrorResponse extends BaseWebSocketMessage {\n type: 'error';\n error: WebSocketError;\n}\n\n/**\n * WebSocket connection context (client-side version without ws instance)\n */\nexport interface WebSocketConnectionInfo {\n id: string;\n connectedAt: Date;\n lastActivity: Date;\n metadata?: Record<string, unknown>;\n}\n","/**\n * Base interface for all messages\n */\nexport interface IMessage<TRuntime = any, TWire = any> {\n readonly type: string;\n readonly version: number;\n\n /**\n * Encode this message to wire format for transmission\n */\n encode(): TWire;\n\n /**\n * Get the runtime data of this message\n */\n getData(): TRuntime;\n}\n\n/**\n * Abstract base class for all messages\n */\nexport abstract class BaseMessage<TRuntime = any, TWire = any>\n implements IMessage<TRuntime, TWire>\n{\n abstract readonly type: string;\n abstract readonly version: number;\n\n protected constructor(public readonly data: TRuntime) {}\n\n abstract encode(): TWire;\n\n getData(): TRuntime {\n return this.data;\n }\n}\n","import { failure, success, Type } from 'io-ts';\nimport { bytesToHex, hexToBytes } from '@noble/hashes/utils.js';\n\nexport const Uint8ArrayCodec = new Type<\n Uint8Array, // A: The runtime type (the type you work with in your code)\n string, // O: The encoded output type (e.g., JSON representation)\n unknown // I: The input type (e.g., from JSON)\n>(\n 'Uint8Array', // The name of the codec\n (u): u is Uint8Array => u instanceof Uint8Array, // A type guard\n (u, c) => {\n // The `validate` function for decoding\n if (typeof u !== 'string') {\n return failure(u, c, 'Expected a hex string for Uint8Array');\n }\n try {\n // Remove any '0x' prefix if present\n const cleanHex = u.startsWith('0x') ? u.slice(2) : u;\n\n // Validate hex string (must be even length and contain only hex characters)\n if (cleanHex.length % 2 !== 0 || !/^[0-9a-fA-F]+$/.test(cleanHex)) {\n return failure(u, c, 'Invalid hex string format');\n }\n\n const decoded = hexToBytes(cleanHex);\n return success(decoded);\n } catch (e) {\n return failure(u, c, `Invalid hex string: ${e}`);\n }\n },\n // The `encode` function for converting back to the output type\n (a) => bytesToHex(a)\n);\n","import { failure, success, Type } from 'io-ts';\nimport { bytesToHex, hexToBytes } from '@noble/hashes/utils.js';\n\nexport const Uint32ArrayCodec = new Type<\n Uint32Array, // A: The runtime type (the type you work with in your code)\n string, // O: The encoded output type (e.g., JSON representation)\n unknown // I: The input type (e.g., from JSON)\n>(\n 'Uint32Array', // The name of the codec\n (u): u is Uint32Array => u instanceof Uint32Array, // A type guard\n (u, c) => {\n // The `validate` function for decoding\n if (typeof u !== 'string') {\n return failure(u, c, 'Expected a hex string for Uint32Array');\n }\n try {\n // Remove any '0x' prefix if present\n const cleanHex = u.startsWith('0x') ? u.slice(2) : u;\n\n // Validate hex string (must be multiple of 8 characters for 32-bit values)\n if (cleanHex.length === 0) {\n return failure(u, c, 'Empty hex string not allowed for Uint32Array');\n }\n if (cleanHex.length % 8 !== 0) {\n return failure(\n u,\n c,\n 'Invalid hex string format for Uint32Array (must be multiple of 8 hex characters)'\n );\n }\n\n // Convert hex string to Uint8Array using noble-hashes\n const uint8Array = hexToBytes(cleanHex);\n\n // Convert Uint8Array to Uint32Array by interpreting the buffer\n // Note: This assumes little-endian byte order\n const uint32Array = new Uint32Array(uint8Array.buffer);\n\n return success(uint32Array);\n } catch (e) {\n return failure(u, c, `Invalid hex string: ${e}`);\n }\n },\n // The `encode` function for converting back to the output type\n (a) => {\n // Convert Uint32Array to Uint8Array to use noble-hashes\n const uint8Array = new Uint8Array(a.buffer);\n return bytesToHex(uint8Array);\n }\n);\n","import { type, TypeOf } from 'io-ts';\nimport { Uint8ArrayCodec } from './Uint8ArrayCodec';\n\n/**\n * Generic encrypted payload structure for secure transmission\n * Contains HKDF salt and AES-256-GCM encrypted payload\n * Used for keyshares, keygen init, and other encrypted data\n */\nexport const EncryptedPayloadCodec = type({\n salt: Uint8ArrayCodec,\n encryptedPayload: Uint8ArrayCodec,\n});\n\nexport type EncryptedPayload = TypeOf<typeof EncryptedPayloadCodec>;\n","import {\n partial,\n string,\n number,\n union,\n undefined as undefinedType,\n} from 'io-ts';\n\n/**\n * Trace Context for request tracing\n */\nexport interface TraceContext {\n traceId?: string;\n startTime?: number;\n}\n\n/**\n * Trace Context Schema - validates trace context with optional fields\n */\nconst TraceContextSchema = partial({\n traceId: string,\n startTime: number,\n});\n\n/**\n * Trace Context Codec - optional by default (allows undefined)\n */\nexport const TraceContextCodec = union([TraceContextSchema, undefinedType]);\n","import { string, union, undefined as undefinedType } from 'io-ts';\n\n/**\n * Optional String Codec - validates string or undefined\n */\nexport const OptionalStringCodec = union([string, undefinedType]);\n","import { intersection, literal, Mixed, type, Type } from 'io-ts';\n\n/**\n * Build standard message schema with type and version\n * Eliminates duplication across all message schemas\n */\nexport function buildMessageSchema<T extends string, V extends number>(\n messageType: T,\n version: V,\n additionalFields: Record<string, any> = {},\n ...additionalSchemas: Mixed[]\n): Type<any> {\n const schema = type({\n type: literal(messageType),\n version: literal(version),\n ...additionalFields,\n });\n\n if (additionalSchemas.length === 0) {\n return schema;\n }\n\n if (additionalSchemas.length === 1) {\n return intersection([schema, additionalSchemas[0]]);\n }\n\n // For multiple schemas, chain intersections\n let result: Type<any> = intersection([schema, additionalSchemas[0]]);\n for (let i = 1; i < additionalSchemas.length; i++) {\n result = intersection([result, additionalSchemas[i]]);\n }\n return result;\n}\n\n/**\n * Message schema configuration interface\n */\nexport interface MessageSchemaConfig<T extends string, V extends number> {\n type: T;\n version: V;\n fields: Record<string, any>;\n}\n\n/**\n * Create schema from configuration\n */\nexport function createSchemaFromConfig<T extends string, V extends number>(\n config: MessageSchemaConfig<T, V>\n): Type<any> {\n return buildMessageSchema(config.type, config.version, config.fields);\n}\n","/**\n * Standard encoder for simple messages\n * Creates basic encode function with type and version\n */\nexport function createSimpleEncoder<TData, TWire>(\n messageType: string,\n version: number\n) {\n return (data: TData): TWire =>\n ({\n type: messageType,\n version,\n ...data,\n }) as TWire;\n}\n\n/**\n * Standard encoder for complex messages with codec transformations\n * Handles field transformations like Uint8Array -> hex string\n */\nexport function createComplexEncoder<TData, TWire>(\n messageType: string,\n version: number,\n fieldTransforms: Record<string, (value: any) => any> = {}\n) {\n return (data: TData): TWire => {\n const encoded: any = {\n type: messageType,\n version,\n };\n\n // Apply field transformations\n for (const [key, value] of Object.entries(data as any)) {\n if (value !== undefined) {\n encoded[key] = fieldTransforms[key]\n ? fieldTransforms[key](value)\n : value;\n }\n }\n\n return encoded as TWire;\n };\n}\n\n/**\n * Standard decoder with field extraction\n * Extracts runtime data from decoded wire format\n */\nexport function createStandardDecoder<TData>(\n fieldExtractor: (decoded: any) => TData\n) {\n return (decoded: any): TData => fieldExtractor(decoded);\n}\n\n/**\n * Identity decoder for simple messages where wire format matches runtime format\n */\nexport function createIdentityDecoder<TData>(): (decoded: any) => TData {\n return (decoded: any): TData => {\n // Remove type and version fields, keep the rest\n const { type, version, ...data } = decoded;\n return data as TData;\n };\n}\n","import { either } from 'fp-ts';\nimport { Errors, Type } from 'io-ts';\nimport { BaseMessage, IMessage } from '../base';\n\n/**\n * Configuration for creating a standard message class\n */\nexport interface StandardMessageConfig<\n TData,\n TWire,\n TType extends string,\n TVersion extends number,\n> {\n messageType: TType;\n version: TVersion;\n schema: Type<any>;\n encodeData: (data: TData, type: TType, version: TVersion) => TWire;\n decodeData: (decoded: any) => TData;\n}\n\n/**\n * Standard message class factory - eliminates boilerplate\n * Creates a complete message class with encode/decode functionality\n */\nexport function createStandardMessage<\n TData,\n TWire,\n TType extends string,\n TVersion extends number,\n>(config: StandardMessageConfig<TData, TWire, TType, TVersion>) {\n class StandardMessageClass\n extends BaseMessage<TData, TWire>\n implements IMessage<TData, TWire>\n {\n static readonly MESSAGE_TYPE = config.messageType;\n static readonly MESSAGE_VERSION = config.version;\n static readonly schema = config.schema;\n\n readonly type = config.messageType;\n readonly version = config.version;\n\n constructor(data: TData) {\n super(data);\n }\n\n encode(): TWire {\n return config.encodeData(this.data, this.type, this.version);\n }\n\n static decode(\n wireData: unknown\n ): either.Either<Errors, StandardMessageClass> {\n const result = config.schema.decode(wireData);\n if (either.isLeft(result)) {\n return result;\n }\n\n const decoded = result.right;\n return {\n _tag: 'Right',\n right: new StandardMessageClass(config.decodeData(decoded)),\n };\n }\n }\n\n return StandardMessageClass;\n}\n\n/**\n * Type helper to extract the message class type from createStandardMessage\n */\nexport type StandardMessageClass<\n TData,\n TWire,\n TType extends string,\n TVersion extends number,\n> = ReturnType<typeof createStandardMessage<TData, TWire, TType, TVersion>>;\n\n/**\n * Simplified message factory for messages with identical runtime and wire formats\n */\nexport function createSimpleMessage<\n TData,\n TType extends string,\n TVersion extends number,\n>(config: { messageType: TType; version: TVersion; schema: Type<any> }) {\n return createStandardMessage({\n messageType: config.messageType,\n version: config.version,\n schema: config.schema,\n encodeData: (data: TData) =>\n ({\n type: config.messageType,\n version: config.version,\n ...data,\n }) as any,\n decodeData: (decoded: any) => {\n const { type, version, ...data } = decoded;\n return data as TData;\n },\n });\n}\n\n/**\n * Message factory with field transformations - eliminates encodeData/decodeData duplication\n */\nexport function createMessageWithTransforms<\n TData,\n TWire = TData & { type: string; version: number },\n TType extends string = string,\n TVersion extends number = number,\n>(config: {\n messageType: TType;\n version: TVersion;\n schema: Type<any>;\n transforms?: Record<string, (value: any) => any>;\n normalizers?: Partial<Record<keyof TData, (input: any) => any>>;\n}) {\n return createStandardMessage({\n messageType: config.messageType,\n version: config.version,\n schema: config.schema,\n encodeData: (data: TData) => {\n const encoded: any = {\n type: config.messageType,\n version: config.version,\n };\n\n // Apply field transformations\n const dataObj = data as Record<string, any>;\n for (const [key, value] of Object.entries(dataObj)) {\n if (value !== undefined) {\n const transform = config.transforms?.[key];\n encoded[key] = transform ? transform(value) : value;\n }\n }\n\n return encoded as TWire;\n },\n decodeData: (decoded: any) => {\n // Apply normalizers to convert wire format to runtime format\n const normalizedData: any = { ...decoded };\n\n if (config.normalizers) {\n for (const [key, normalizer] of Object.entries(config.normalizers)) {\n if (\n key in normalizedData &&\n normalizer &&\n typeof normalizer === 'function' &&\n normalizedData[key] !== undefined\n ) {\n const normalizedValue = normalizer(normalizedData[key]);\n if (normalizedValue !== undefined) {\n normalizedData[key] = normalizedValue;\n }\n }\n }\n }\n\n // Remove type and version, return runtime data\n const { type, version, ...data } = normalizedData;\n return data as TData;\n },\n });\n}\n","import { TypeOf } from 'io-ts';\nimport {\n Uint8ArrayCodec,\n type TraceContext,\n TraceContextCodec,\n} from '../codecs';\nimport {\n buildMessageSchema,\n createStandardMessage,\n createStandardDecoder,\n} from './utils';\n\n/**\n * Handshake Request Runtime Data\n */\nexport interface HandshakeRequestData {\n challenge: Uint8Array;\n nonce: Uint8Array;\n traceContext?: TraceContext;\n}\n\n/**\n * Handshake Request Wire Format\n */\nexport interface HandshakeRequestWire {\n type: 'handshake';\n version: 1;\n challenge: string; // hex string\n nonce: string; // hex string\n traceContext?: TraceContext;\n}\n\n/**\n * Handshake Request Schema (built using Ultra-DRY utilities)\n */\nexport const HandshakeRequestSchema = buildMessageSchema('handshake', 1, {\n challenge: Uint8ArrayCodec,\n nonce: Uint8ArrayCodec,\n traceContext: TraceContextCodec,\n});\n\nexport type HandshakeRequest = TypeOf<typeof HandshakeRequestSchema>;\n\n/**\n * Handshake V1 Request Message Class (Ultra-DRY implementation)\n */\nexport const HandshakeV1RequestMessage = createStandardMessage({\n messageType: 'handshake' as const,\n version: 1 as const,\n schema: HandshakeRequestSchema,\n encodeData: (data: HandshakeRequestData): HandshakeRequestWire =>\n HandshakeRequestSchema.encode({\n type: 'handshake',\n version: 1,\n challenge: data.challenge,\n nonce: data.nonce,\n traceContext: data.traceContext,\n }),\n decodeData: createStandardDecoder<HandshakeRequestData>((decoded) => ({\n challenge: decoded.challenge,\n nonce: decoded.nonce,\n traceContext: decoded.traceContext,\n })),\n});\n","import { string, TypeOf } from 'io-ts';\nimport { buildMessageSchema, createSimpleMessage } from './utils';\n\n/**\n * Handshake Response Runtime Data\n */\nexport interface HandshakeResponseData {\n encapsulatedSharedSecret: string; // hex-encoded\n attestationDoc: string; // hex-encoded\n connectionId: string; // Server's connection ID for key derivation\n}\n\n/**\n * Handshake Response Wire Format\n */\nexport interface HandshakeResponseWire {\n type: 'handshake_response';\n version: 1;\n encapsulatedSharedSecret: string; // hex-encoded\n attestationDoc: string; // base64-encoded\n connectionId: string; // Server's connection ID for key derivation\n}\n\n/**\n * Handshake Response Schema (built using Ultra-DRY utilities)\n */\nexport const HandshakeResponseSchema = buildMessageSchema(\n 'handshake_response',\n 1,\n {\n encapsulatedSharedSecret: string,\n attestationDoc: string,\n connectionId: string,\n }\n);\n\nexport type HandshakeResponse = TypeOf<typeof HandshakeResponseSchema>;\n\n/**\n * Handshake V1 Response Message Class (Ultra-DRY implementation)\n */\nexport const HandshakeV1ResponseMessage = createSimpleMessage<\n HandshakeResponseData,\n 'handshake_response',\n 1\n>({\n messageType: 'handshake_response',\n version: 1,\n schema: HandshakeResponseSchema,\n});\n\n// HandshakeResponse naturally implements IMessageConstructor through its static properties\n","import type { Type } from 'io-ts';\n\n/**\n * Base secret share data (what gets encrypted)\n */\nexport interface SecretShareData {\n secretShare: string;\n signingAlgorithm: string;\n timestamp: number;\n nonce: string;\n}\n\n/**\n * Decrypted secret share with reconstructed keygen result\n */\nexport interface DecryptedSecretShare {\n keygenResult: any;\n signingAlgorithm: string;\n timestamp: number;\n nonce: string;\n}\n\n/**\n * Base interface for signing algorithm implementations\n */\nexport interface ISigningAlgorithm {\n readonly algorithmName: string;\n readonly version: number;\n readonly schema: Type<any>;\n\n createKeygenResultFromSecretShare(secretShare: string): any;\n createSignRequest(keygenResult: any, params: any): any;\n processSignResult(result: any): Uint8Array;\n}\n\n/**\n * Base signing algorithm class\n */\nexport abstract class BaseSigningAlgorithm implements ISigningAlgorithm {\n abstract readonly algorithmName: string;\n abstract readonly version: number;\n abstract readonly schema: Type<any>;\n\n abstract createKeygenResultFromSecretShare(secretShare: string): any;\n abstract createSignRequest(keygenResult: any, params: any): any;\n abstract processSignResult(result: any): Uint8Array;\n}\n","import { BaseSigningAlgorithm } from '../base';\nimport { intersection, literal, partial, type } from 'io-ts';\nimport { Uint32ArrayCodec } from '../../codecs';\n\n/**\n * ED25519 signing algorithm\n *\n * IMPORTANT: This uses Dynamic SDK's ExportableEd25519 implementation under the hood.\n * When you call getMPCSignatureScheme(SigningAlgorithm.ED25519), you get ExportableEd25519.\n *\n * Key characteristics:\n * - Uses sampleKey/receiveKey for keygen (one party samples, other receives)\n * - Can export private keys\n *\n * DERIVATION PATH CAVEAT:\n * - The schema accepts derivationPath for backwards compatibility\n * - However, ExportableEd25519 does NOT support BIP32/BIP44 derivation in signing\n * - If derivationPath is provided, it may be ignored or cause errors\n * - See: https://docs.sodot.dev/sodot-docs/mpc-api/key-management/exportable-ed25519-keys\n */\nexport interface Ed25519SignMessageSchema {\n signingAlgo: 'ed25519';\n derivationPath?: Uint32Array; // WARNING: Not supported by ExportableEd25519, kept for compatibility\n}\n\nexport class Ed25519SigningAlgorithm extends BaseSigningAlgorithm {\n readonly algorithmName = 'ed25519' as const;\n readonly version = 1;\n\n readonly schema = intersection([\n type({\n signingAlgo: literal('ed25519'),\n }),\n partial({\n derivationPath: Uint32ArrayCodec, // WARNING: Not supported by underlying ExportableEd25519\n }),\n ]);\n\n createKeygenResultFromSecretShare(secretShare: string): any {\n return {\n secretShare,\n pubkey: new Uint8Array(32), // Mock pubkey\n };\n }\n\n createSignRequest(keygenResult: any, params: any): any {\n return {\n secretShare: keygenResult.secretShare,\n ...params,\n };\n }\n\n processSignResult(_result: any): Uint8Array {\n return new Uint8Array(64);\n }\n}\n","import { BaseSigningAlgorithm } from '../base';\nimport { intersection, literal, partial, type } from 'io-ts';\nimport { Uint32ArrayCodec, Uint8ArrayCodec } from '../../codecs';\n\nexport interface BIP340SignMessageSchema {\n signingAlgo: 'bip340';\n derivationPath?: Uint32Array;\n tweak?: Uint8Array;\n}\n\nexport class BIP340SigningAlgorithm extends BaseSigningAlgorithm {\n readonly algorithmName = 'bip340' as const;\n readonly version = 1;\n\n readonly schema = intersection([\n type({\n signingAlgo: literal('bip340'),\n }),\n partial({\n derivationPath: Uint32ArrayCodec,\n tweak: Uint8ArrayCodec,\n }),\n ]);\n\n createKeygenResultFromSecretShare(secretShare: string): any {\n return {\n secretShare,\n pubkey: new Uint8Array(32), // Mock pubkey\n };\n }\n\n createSignRequest(keygenResult: any, params: any): any {\n return {\n secretShare: keygenResult.secretShare,\n ...params,\n };\n }\n\n processSignResult(_result: any): Uint8Array {\n return new Uint8Array(64);\n }\n}\n","import { BaseSigningAlgorithm } from '../base';\nimport { intersection, literal, partial, type, union } from 'io-ts';\nimport { Uint32ArrayCodec } from '../../codecs';\n\nexport interface EcdsaSignMessageSchema {\n signingAlgo: 'ecdsa';\n hashAlgo: 'sha256' | 'sha256d' | 'keccak256';\n derivationPath?: Uint32Array;\n}\n\nexport class EcdsaSigningAlgorithm extends BaseSigningAlgorithm {\n readonly algorithmName = 'ecdsa' as const;\n readonly version = 1;\n\n readonly schema = intersection([\n type({\n signingAlgo: literal('ecdsa'),\n }),\n partial({\n hashAlgo: union([\n literal('sha256'),\n literal('sha256d'),\n literal('keccak256'),\n ]),\n derivationPath: Uint32ArrayCodec,\n }),\n ]);\n\n createKeygenResultFromSecretShare(secretShare: string): any {\n return {\n secretShare,\n pubkey: {\n pubKeyAsHex: () => '0x' + '00'.repeat(33),\n serializeCompressed: () => new Uint8Array(33),\n serializeUncompressed: () => new Uint8Array(65),\n },\n };\n }\n\n createSignRequest(keygenResult: any, params: any): any {\n return {\n secretShare: keygenResult.secretShare,\n ...params,\n };\n }\n\n processSignResult(_result: any): Uint8Array {\n return new Uint8Array(64);\n }\n}\n","import { union, type Type } from 'io-ts';\nimport {\n Ed25519SigningAlgorithm,\n type Ed25519SignMessageSchema,\n} from './algorithms/Ed25519SigningAlgorithm';\nimport {\n BIP340SigningAlgorithm,\n type BIP340SignMessageSchema,\n} from './algorithms/BIP340SigningAlgorithm';\nimport {\n EcdsaSigningAlgorithm,\n type EcdsaSignMessageSchema,\n} from './algorithms/EcdsaSigningAlgorithm';\nimport type { ISigningAlgorithm } from './base';\n\n/**\n * 🎯 SINGLE SOURCE OF TRUTH - Add new algorithms here and everything else is automatic!\n * This is the ONLY place you need to add new signing algorithms\n *\n * Maps 1:1 with Dynamic SDK's SigningAlgorithm enum (ECDSA, ED25519, BIP340)\n * NOTE: ED25519 uses ExportableEd25519 implementation (no derivation support)\n */\nexport const SIGNING_ALGORITHM_CLASSES = {\n ed25519: Ed25519SigningAlgorithm,\n bip340: BIP340SigningAlgorithm,\n ecdsa: EcdsaSigningAlgorithm,\n} as const;\n\n/**\n * 📝 Explicit union type of all signing algorithm schemas\n * (Only other place you need to add new algorithms)\n */\nexport type AllSigningAlgorithmSchemas =\n | Ed25519SignMessageSchema\n | BIP340SignMessageSchema\n | EcdsaSignMessageSchema;\n\n// ========================================\n// 🤖 EVERYTHING BELOW IS AUTOMATICALLY DERIVED\n// ========================================\n\n/**\n * Derive signing algorithm name type from classes\n */\nexport type SigningAlgorithmName = keyof typeof SIGNING_ALGORITHM_CLASSES;\n\n/**\n * Derive runtime array of algorithm names from classes\n */\nexport const ALL_SIGNING_ALGORITHM_NAMES = Object.keys(\n SIGNING_ALGORITHM_CLASSES\n) as SigningAlgorithmName[];\n\n/**\n * Create algorithm instances (derived from classes)\n */\nexport const SIGNING_ALGORITHM_INSTANCES: Record<\n SigningAlgorithmName,\n ISigningAlgorithm\n> = {\n ed25519: new SIGNING_ALGORITHM_CLASSES.ed25519(),\n bip340: new SIGNING_ALGORITHM_CLASSES.bip340(),\n ecdsa: new SIGNING_ALGORITHM_CLASSES.ecdsa(),\n};\n\n/**\n * Create union schema (derived from instances)\n */\nexport const ALL_SIGNING_ALGORITHM_SCHEMA: Type<AllSigningAlgorithmSchemas> =\n (() => {\n const schemas = Object.values(SIGNING_ALGORITHM_INSTANCES).map(\n (instance) => instance.schema\n );\n\n if (schemas.length === 0) {\n throw new Error('No signing algorithms defined');\n }\n\n if (schemas.length === 1) {\n return schemas[0] as Type<AllSigningAlgorithmSchemas>;\n }\n\n return union([\n schemas[0],\n schemas[1],\n ...schemas.slice(2),\n ]) as Type<AllSigningAlgorithmSchemas>;\n })();\n\n/**\n * Helper type to extract algorithm-specific schema\n */\nexport type SigningAlgorithmSchemaFor<\n T extends AllSigningAlgorithmSchemas['signingAlgo'],\n> = Extract<AllSigningAlgorithmSchemas, { signingAlgo: T }>;\n\n/**\n * Utility to check if a string is a valid signing algorithm name\n */\nexport function isValidSigningAlgorithm(\n name: string\n): name is SigningAlgorithmName {\n return name in SIGNING_ALGORITHM_CLASSES;\n}\n\n/**\n * Create keygen result from secret share using algorithm-specific logic\n */\nexport function createKeygenResultFromSecretShare(\n algorithmName: SigningAlgorithmName,\n secretShare: string\n): any {\n const algorithm = SIGNING_ALGORITHM_INSTANCES[algorithmName];\n if (!algorithm) {\n throw new Error(`Unknown signing algorithm: ${algorithmName}`);\n }\n return algorithm.createKeygenResultFromSecretShare(secretShare);\n}\n","import {\n ALL_SIGNING_ALGORITHM_SCHEMA,\n type AllSigningAlgorithmSchemas,\n type SigningAlgorithmName,\n} from '../signing/allAlgorithms';\nimport { SigningAlgorithm } from '@dynamic-labs-wallet/core';\n\n/**\n * Algorithm configurations for complex properties\n * Maps Dynamic SDK enum values to our internal algorithm names\n */\nexport const ALGORITHMS = {\n [SigningAlgorithm.ECDSA]: {\n name: 'ecdsa' as const,\n dynamicEnum: SigningAlgorithm.ECDSA,\n className: 'Ecdsa' as const,\n requiresHashAlgo: true,\n supportsDerivationPath: true,\n supportsTweak: false,\n supportedHashAlgos: ['sha256', 'sha256d', 'keccak256'] as const,\n },\n [SigningAlgorithm.ED25519]: {\n name: 'ed25519' as const,\n dynamicEnum: SigningAlgorithm.ED25519,\n className: 'Ed25519' as const,\n requiresHashAlgo: false,\n supportsDerivationPath: true,\n supportsTweak: false,\n supportedHashAlgos: [] as const,\n },\n [SigningAlgorithm.BIP340]: {\n name: 'bip340' as const,\n dynamicEnum: SigningAlgorithm.BIP340,\n className: 'BIP340' as const,\n requiresHashAlgo: false,\n supportsDerivationPath: true,\n supportsTweak: true,\n supportedHashAlgos: [] as const,\n },\n // Note: SR25519 and ED25519_EXPORTABLE exist as native-level functions but are not\n // available via SigningAlgorithm enum or getMPCSignatureScheme API.\n // They require direct native API calls (sr25519Keygen, exportableEd25519SampleKey, etc.)\n} as const;\n\n/**\n * Type definitions - use Dynamic SDK's SigningAlgorithm enum\n */\nexport type HashAlgorithm = 'sha256' | 'sha256d' | 'keccak256';\n\n/**\n * Helper function to convert our internal algorithm names to Dynamic SDK enum values\n */\nexport function toDynamicSigningAlgorithm(\n algorithmName: SigningAlgorithmName\n): SigningAlgorithm {\n const algorithmConfig = Object.values(ALGORITHMS).find(\n (config) => config.name === algorithmName\n );\n if (!algorithmConfig) {\n throw new Error(`Unknown algorithm: ${algorithmName}`);\n }\n return algorithmConfig.dynamicEnum;\n}\n\n/**\n * Helper function to convert Dynamic SDK enum values to our internal algorithm names\n */\nexport function fromDynamicSigningAlgorithm(\n dynamicAlgorithm: SigningAlgorithm\n): SigningAlgorithmName {\n const algorithmConfig = ALGORITHMS[dynamicAlgorithm];\n if (!algorithmConfig) {\n throw new Error(`Unknown Dynamic SDK algorithm: ${dynamicAlgorithm}`);\n }\n return algorithmConfig.name;\n}\n\n/**\n * Union schema derived from algorithm instances (no more manual schema generation!)\n */\nexport const SignatureAlgoSchema = ALL_SIGNING_ALGORITHM_SCHEMA;\n\n/**\n * Export the union type for external use\n */\nexport type { AllSigningAlgorithmSchemas as SigningAlgorithmSchemas };\n","import { Type, failure, success, identity } from 'io-ts';\n\n/**\n * Codec for validating domain names without protocol or paths.\n * Allows optional port numbers.\n * Examples:\n * - example.com\n * - sub.example.com\n * - example.com:8080\n */\nexport const DomainCodec = new Type<string>(\n 'DomainCodec',\n (u): u is string => typeof u === 'string',\n (u, c) => {\n if (typeof u !== 'string') {\n return failure(u, c, 'Value must be a string');\n }\n\n // Domain regex pattern:\n // - Starts with alphanumeric or hyphen\n // - Can contain dots for subdomains\n // - Optional port number at the end\n // - No protocols or paths allowed\n const domainPattern =\n /^[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*(?::\\d{1,5})?$/;\n\n if (!domainPattern.test(u)) {\n return failure(u, c, 'Invalid domain format');\n }\n\n return success(u);\n },\n identity\n);\n","import { failure, success, Type } from 'io-ts';\nimport { bytesToHex, hexToBytes } from '@noble/hashes/utils.js';\n\nexport const Uint8ArrayOrHexCodec = new Type<\n Uint8Array | string, // A: The runtime type (the type you work with in your code)\n string, // O: The encoded output type (e.g., JSON representation)\n string | unknown // I: The input type (e.g., from JSON)\n>(\n 'Uint8ArrayOrHex', // The name of the codec\n (u): u is Uint8Array => u instanceof Uint8Array, // A type guard\n (u, c) => {\n // Handle Uint8Array input (already in correct format)\n if ((u as any) instanceof Uint8Array) {\n return success(u as unknown as Uint8Array);\n }\n\n // Handle string input (hex string)\n if (typeof u !== 'string') {\n return failure(u, c, 'Expected a hex string or Uint8Array');\n }\n\n try {\n // Remove any '0x' prefix if present\n const cleanHex = u.startsWith('0x') ? u.slice(2) : u;\n\n // Validate hex string (must be even length and contain only hex characters)\n if (cleanHex.length % 2 !== 0 || !/^[0-9a-fA-F]+$/.test(cleanHex)) {\n return failure(u, c, 'Invalid hex string format');\n }\n\n const decoded = hexToBytes(cleanHex);\n return success(decoded);\n } catch (e) {\n return failure(u, c, `Invalid hex string: ${e}`);\n }\n },\n // The `encode` function for converting back to the output type\n (a) => {\n if (typeof a === 'string') {\n return a;\n }\n return bytesToHex(a);\n }\n);\n","import { TypeOf, string } from 'io-ts';\nimport {\n Uint32ArrayCodec,\n Uint8ArrayCodec,\n type TraceContext,\n TraceContextCodec,\n OptionalStringCodec,\n EncryptedPayloadCodec,\n type EncryptedPayload,\n} from '../codecs';\nimport {\n HashAlgorithm,\n SignatureAlgoSchema,\n fromDynamicSigningAlgorithm,\n} from '../constants';\nimport { DomainCodec } from '../codecs/DomainCodec';\nimport {\n buildMessageSchema,\n createStandardMessage,\n createStandardDecoder,\n createComplexEncoder,\n} from './utils';\nimport { Uint8ArrayOrHexCodec } from '../codecs/Uint8ArrayOrHexCodec';\nimport { SigningAlgorithm } from '@dynamic-labs-wallet/core';\n\n/**\n * Sign Message Request Runtime Data\n */\nexport interface SignMessageRequestData {\n relayDomain: string;\n signingAlgo: SigningAlgorithm;\n hashAlgo?: HashAlgorithm;\n derivationPath?: Uint32Array;\n tweak?: Uint8Array;\n keyshare: EncryptedPayload;\n message: Uint8Array | string;\n roomUuid: string;\n userId?: string;\n environmentId?: string;\n traceContext?: TraceContext;\n}\n\n/**\n * Sign Message Request Wire Format\n */\nexport interface SignMessageRequestWire {\n type: 'signMessage';\n version: 1;\n relayDomain: string;\n signingAlgo: SigningAlgorithm;\n hashAlgo?: HashAlgorithm;\n derivationPath?: string; // hex string\n tweak?: string; // hex string\n keyshare: {\n salt: string; // hex string\n encryptedPayload: string; // hex string\n };\n message: string; // hex string\n roomUuid: string;\n userId?: string;\n environmentId?: string;\n traceContext?: TraceContext;\n}\n\n/**\n * Sign Message Request Schema - uses codecs that handle both formats automatically\n */\nexport const SignMessageRequestSchema = buildMessageSchema(\n 'signMessage',\n 1,\n {\n relayDomain: DomainCodec,\n keyshare: EncryptedPayloadCodec,\n message: Uint8ArrayOrHexCodec,\n roomUuid: string,\n userId: OptionalStringCodec,\n environmentId: OptionalStringCodec,\n traceContext: TraceContextCodec,\n },\n SignatureAlgoSchema\n);\n\nexport type SignMessageRequest = TypeOf<typeof SignMessageRequestSchema>;\n\n/**\n * Sign Message V1 Request Message Class - Clean implementation using createComplexEncoder\n */\nexport const SignMessageV1RequestMessage = createStandardMessage({\n messageType: 'signMessage' as const,\n version: 1 as const,\n schema: SignMessageRequestSchema,\n encodeData: createComplexEncoder('signMessage', 1, {\n signingAlgo: (value: SigningAlgorithm) =>\n fromDynamicSigningAlgorithm(value),\n derivationPath: (value: Uint32Array) => Uint32ArrayCodec.encode(value),\n tweak: (value: Uint8Array) => Uint8ArrayCodec.encode(value),\n keyshare: (value: EncryptedPayload) => EncryptedPayloadCodec.encode(value),\n message: (value: Uint8Array | string) => Uint8ArrayOrHexCodec.encode(value),\n }),\n decodeData: createStandardDecoder<SignMessageRequestData>((decoded) => ({\n relayDomain: decoded.relayDomain,\n signingAlgo: decoded.signingAlgo,\n hashAlgo: decoded.hashAlgo,\n derivationPath: decoded.derivationPath,\n tweak: decoded.tweak,\n keyshare: decoded.keyshare,\n message: decoded.message,\n roomUuid: decoded.roomUuid,\n userId: decoded.userId,\n environmentId: decoded.environmentId,\n traceContext: decoded.traceContext,\n })),\n});\n","import {\n type,\n string,\n union,\n undefined as undefinedType,\n unknown,\n TypeOf,\n} from 'io-ts';\n\n/**\n * WebSocket Error Type Codec\n */\nexport const WebSocketErrorTypeCodec = string; // Just use string directly\n\n/**\n * WebSocket Error Codec\n */\nexport const WebSocketErrorCodec = type({\n type: WebSocketErrorTypeCodec,\n message: string,\n details: union([unknown, undefinedType]), // Optional details field\n});\n\nexport type WebSocketErrorValidated = TypeOf<typeof WebSocketErrorCodec>;\n","import { TypeOf, union, undefined as undefinedType } from 'io-ts';\nimport {\n buildMessageSchema,\n createStandardMessage,\n createComplexEncoder,\n createStandardDecoder,\n} from './utils';\nimport { WebSocketError } from '../types';\nimport { WebSocketErrorCodec } from '../codecs/WebSocketErrorCodec';\nimport { Uint8ArrayOrHexCodec } from '../codecs/Uint8ArrayOrHexCodec';\n\n/**\n * Sign Message Response Runtime Data\n */\nexport interface SignMessageResponseData {\n signature?: Uint8Array; // The signature as byte array - present on success\n error?: WebSocketError; // Error details - present on failure\n}\n\n/**\n * Sign Message Response Wire Format\n */\nexport interface SignMessageResponseWire {\n type: 'signMessage_response';\n version: 1;\n signature?: string; // The signature (hex-encoded) - present on success\n error?: WebSocketError; // Error details - present on failure\n}\n\n/**\n * Sign Message Response Schema (built using Ultra-DRY utilities)\n * Schema expects wire format types (string for signature)\n */\nexport const SignMessageResponseSchema = buildMessageSchema(\n 'signMessage_response',\n 1,\n {\n signature: union([Uint8ArrayOrHexCodec, undefinedType]), // Codec handles both hex string and Uint8Array\n error: union([WebSocketErrorCodec, undefinedType]),\n }\n);\n\nexport type SignMessageResponse = TypeOf<typeof SignMessageResponseSchema>;\n\n/**\n * Sign Message V1 Response Message Class (Ultra-DRY implementation)\n */\nexport const SignMessageV1ResponseMessage = createStandardMessage<\n SignMessageResponseData,\n SignMessageResponseWire,\n 'signMessage_response',\n 1\n>({\n messageType: 'signMessage_response',\n version: 1,\n schema: SignMessageResponseSchema,\n encodeData: createComplexEncoder('signMessage_response', 1, {\n signature: (value: Uint8Array) => Uint8ArrayOrHexCodec.encode(value),\n }),\n decodeData: createStandardDecoder<SignMessageResponseData>((decoded) => ({\n signature: decoded.signature,\n error: decoded.error,\n })),\n});\n","import { union, string, undefined as undefinedType, TypeOf } from 'io-ts';\nimport { buildMessageSchema, createSimpleMessage } from './utils';\n\n/**\n * Connection Acknowledgment Request Runtime Data\n */\nexport interface ConnectionAckRequestData {\n connectionId?: string;\n}\n\n/**\n * Connection Acknowledgment Request Wire Format\n */\nexport interface ConnectionAckRequestWire {\n type: 'connection_ack';\n version: 1;\n connectionId?: string;\n}\n\n/**\n * Connection Acknowledgment Request Schema (built using Ultra-DRY utilities)\n */\nexport const ConnectionAckRequestSchema = buildMessageSchema(\n 'connection_ack',\n 1,\n {\n connectionId: union([string, undefinedType]), // Optional string connectionId\n }\n);\n\nexport type ConnectionAckRequest = TypeOf<typeof ConnectionAckRequestSchema>;\n\n/**\n * Connection Acknowledgment V1 Request Message Class (Ultra-DRY implementation)\n */\nexport const ConnectionAckV1RequestMessage = createSimpleMessage<\n ConnectionAckRequestData,\n 'connection_ack',\n 1\n>({\n messageType: 'connection_ack',\n version: 1,\n schema: ConnectionAckRequestSchema,\n});\n","import { literal, string, TypeOf } from 'io-ts';\nimport { buildMessageSchema, createSimpleMessage } from './utils';\n\n/**\n * Connection Acknowledgment Response Runtime Data\n */\nexport interface ConnectionAckResponseData {\n status: 'acknowledged';\n timestamp: string;\n}\n\n/**\n * Connection Acknowledgment Response Wire Format\n */\nexport interface ConnectionAckResponseWire {\n type: 'connection_ack_response';\n version: 1;\n status: 'acknowledged';\n timestamp: string;\n}\n\n/**\n * Connection Acknowledgment Response Schema (built using Ultra-DRY utilities)\n */\nexport const ConnectionAckResponseSchema = buildMessageSchema(\n 'connection_ack_response',\n 1,\n {\n status: literal('acknowledged'),\n timestamp: string, // ISO timestamp string\n }\n);\n\nexport type ConnectionAckResponse = TypeOf<typeof ConnectionAckResponseSchema>;\n\n/**\n * Connection Acknowledgment V1 Response Message Class (Ultra-DRY implementation)\n */\nexport const ConnectionAckV1ResponseMessage = createSimpleMessage<\n ConnectionAckResponseData,\n 'connection_ack_response',\n 1\n>({\n messageType: 'connection_ack_response',\n version: 1,\n schema: ConnectionAckResponseSchema,\n});\n","import { TypeOf, string, number, array, type, literal, union } from 'io-ts';\nimport {\n type TraceContext,\n TraceContextCodec,\n OptionalStringCodec,\n EncryptedPayloadCodec,\n type EncryptedPayload,\n} from '../codecs';\nimport { SigningAlgorithm } from '@dynamic-labs-wallet/core';\nimport { fromDynamicSigningAlgorithm } from '../constants';\nimport { DomainCodec } from '../codecs/DomainCodec';\nimport {\n buildMessageSchema,\n createStandardMessage,\n createStandardDecoder,\n createComplexEncoder,\n} from './utils';\n\n/**\n * Base keygen parameters common to all algorithms\n */\nconst BaseKeygenParamsCodec = type({\n relayDomain: DomainCodec,\n roomUuid: string,\n numParties: number,\n threshold: number,\n keygenInit: EncryptedPayloadCodec,\n keygenIds: array(string),\n userId: OptionalStringCodec,\n environmentId: OptionalStringCodec,\n traceContext: TraceContextCodec,\n});\n\n/**\n * ECDSA keygen parameters\n */\nconst EcdsaKeygenParamsCodec = type({\n ...BaseKeygenParamsCodec.props,\n signingAlgo: literal('ecdsa'),\n});\n\n/**\n * BIP340 keygen parameters\n */\nconst BIP340KeygenParamsCodec = type({\n ...BaseKeygenParamsCodec.props,\n signingAlgo: literal('bip340'),\n});\n\n/**\n * Discriminated union of all keygen algorithm parameters\n * Note: ED25519 uses separate SampleKey/ReceiveKey messages\n */\nconst KeygenAlgoParamsCodec = union([\n EcdsaKeygenParamsCodec,\n BIP340KeygenParamsCodec,\n]);\n\n/**\n * Keygen Request Runtime Data\n * Supports ECDSA and BIP340 algorithms only\n * Note: ED25519 uses separate SampleKeyV1Request/ReceiveKeyV1Request messages\n */\nexport interface KeygenRequestData {\n relayDomain: string;\n signingAlgo: SigningAlgorithm; // Dynamic SDK enum (ECDSA or BIP340 only)\n roomUuid: string;\n numParties: number;\n threshold: number;\n keygenInit: EncryptedPayload;\n keygenIds: string[];\n userId?: string;\n environmentId?: string;\n traceContext?: TraceContext;\n}\n\n/**\n * Keygen Request Wire Format\n * Supports ECDSA and BIP340 algorithms only\n * Note: ED25519 uses separate 'sampleKey'/'receiveKey' message types\n */\nexport interface KeygenRequestWire {\n type: 'keygen';\n version: 1;\n relayDomain: string;\n signingAlgo: SigningAlgorithm; // Encoded as lowercase string on wire via encoder\n roomUuid: string;\n numParties: number;\n threshold: number;\n keygenInit: {\n salt: string; // hex string\n encryptedPayload: string; // hex string\n };\n keygenIds: string[];\n userId?: string;\n environmentId?: string;\n traceContext?: TraceContext;\n}\n\n/**\n * Keygen Request Schema\n */\nexport const KeygenRequestSchema = buildMessageSchema(\n 'keygen',\n 1,\n {\n relayDomain: DomainCodec,\n roomUuid: string,\n numParties: number,\n threshold: number,\n keygenInit: EncryptedPayloadCodec,\n keygenIds: array(string),\n userId: OptionalStringCodec,\n environmentId: OptionalStringCodec,\n traceContext: TraceContextCodec,\n },\n KeygenAlgoParamsCodec\n);\n\nexport type KeygenRequest = TypeOf<typeof KeygenRequestSchema>;\n\n/**\n * Keygen V1 Request Message Class\n */\nexport const KeygenV1RequestMessage = createStandardMessage({\n messageType: 'keygen' as const,\n version: 1 as const,\n schema: KeygenRequestSchema,\n encodeData: createComplexEncoder('keygen', 1, {\n signingAlgo: (value: SigningAlgorithm) =>\n fromDynamicSigningAlgorithm(value),\n keygenInit: (value: EncryptedPayload) =>\n EncryptedPayloadCodec.encode(value),\n }),\n decodeData: createStandardDecoder<KeygenRequestData>((decoded) => ({\n relayDomain: decoded.relayDomain,\n signingAlgo: decoded.signingAlgo,\n roomUuid: decoded.roomUuid,\n numParties: decoded.numParties,\n threshold: decoded.threshold,\n keygenInit: decoded.keygenInit,\n keygenIds: decoded.keygenIds,\n userId: decoded.userId,\n environmentId: decoded.environmentId,\n traceContext: decoded.traceContext,\n })),\n});\n","import { TypeOf, union, undefined as undefinedType } from 'io-ts';\nimport {\n buildMessageSchema,\n createStandardMessage,\n createComplexEncoder,\n createStandardDecoder,\n} from './utils';\nimport { WebSocketError } from '../types';\nimport { WebSocketErrorCodec } from '../codecs/WebSocketErrorCodec';\nimport { EncryptedPayloadCodec, type EncryptedPayload } from '../codecs';\n\n/**\n * Keygen Response Runtime Data\n */\nexport interface KeygenResponseData {\n keygenResult?: EncryptedPayload; // Encrypted KeygenResult (pubkey + secretShare) - present on success\n error?: WebSocketError; // Error details - present on failure\n}\n\n/**\n * Keygen Response Wire Format\n */\nexport interface KeygenResponseWire {\n type: 'keygen_response';\n version: 1;\n keygenResult?: {\n salt: string; // hex string\n encryptedPayload: string; // hex string\n };\n error?: WebSocketError; // Error details - present on failure\n}\n\n/**\n * Keygen Response Schema\n */\nexport const KeygenResponseSchema = buildMessageSchema('keygen_response', 1, {\n keygenResult: union([EncryptedPayloadCodec, undefinedType]),\n error: union([WebSocketErrorCodec, undefinedType]),\n});\n\nexport type KeygenResponse = TypeOf<typeof KeygenResponseSchema>;\n\n/**\n * Keygen V1 Response Message Class\n */\nexport const KeygenV1ResponseMessage = createStandardMessage<\n KeygenResponseData,\n KeygenResponseWire,\n 'keygen_response',\n 1\n>({\n messageType: 'keygen_response',\n version: 1,\n schema: KeygenResponseSchema,\n encodeData: createComplexEncoder('keygen_response', 1, {\n keygenResult: (value: EncryptedPayload) =>\n EncryptedPayloadCodec.encode(value),\n }),\n decodeData: createStandardDecoder<KeygenResponseData>((decoded) => ({\n keygenResult: decoded.keygenResult,\n error: decoded.error,\n })),\n});\n","import { TypeOf, string, number, array, literal } from 'io-ts';\nimport {\n type TraceContext,\n TraceContextCodec,\n OptionalStringCodec,\n EncryptedPayloadCodec,\n type EncryptedPayload,\n} from '../codecs';\nimport { DomainCodec } from '../codecs/DomainCodec';\nimport {\n buildMessageSchema,\n createStandardMessage,\n createStandardDecoder,\n} from './utils';\n\n/**\n * ReceiveKey Request Runtime Data\n * Used for ExportableEd25519 key generation where one party receives the key\n */\nexport interface ReceiveKeyRequestData {\n relayDomain: string;\n signingAlgo: 'ed25519';\n roomUuid: string;\n numParties: number;\n threshold: number;\n keygenInit: EncryptedPayload;\n keygenIds: string[];\n userId?: string;\n environmentId?: string;\n traceContext?: TraceContext;\n}\n\n/**\n * ReceiveKey Request Wire Format\n */\nexport interface ReceiveKeyRequestWire {\n type: 'receiveKey';\n version: 1;\n relayDomain: string;\n signingAlgo: 'ed25519';\n roomUuid: string;\n numParties: number;\n threshold: number;\n keygenInit: {\n salt: string;\n encryptedPayload: string;\n };\n keygenIds: string[];\n userId?: string;\n environmentId?: string;\n traceContext?: TraceContext;\n}\n\n/**\n * ReceiveKey V1 Request Schema\n */\nexport const ReceiveKeyRequestSchema = buildMessageSchema('receiveKey', 1, {\n relayDomain: DomainCodec,\n signingAlgo: literal('ed25519'),\n roomUuid: string,\n numParties: number,\n threshold: number,\n keygenInit: EncryptedPayloadCodec,\n keygenIds: array(string),\n userId: OptionalStringCodec,\n environmentId: OptionalStringCodec,\n traceContext: TraceContextCodec,\n});\n\nexport type ReceiveKeyRequest = TypeOf<typeof ReceiveKeyRequestSchema>;\n\n/**\n * ReceiveKey V1 Request Message Class\n * Represents a request to receive an exportable ED25519 key from another party\n */\nexport const ReceiveKeyV1RequestMessage = createStandardMessage({\n messageType: 'receiveKey' as const,\n version: 1 as const,\n schema: ReceiveKeyRequestSchema,\n encodeData: (data: ReceiveKeyRequestData): ReceiveKeyRequestWire =>\n ReceiveKeyRequestSchema.encode({\n type: 'receiveKey',\n version: 1,\n ...data,\n }),\n decodeData: createStandardDecoder<ReceiveKeyRequestData>((decoded) => ({\n relayDomain: decoded.relayDomain,\n signingAlgo: decoded.signingAlgo,\n roomUuid: decoded.roomUuid,\n numParties: decoded.numParties,\n threshold: decoded.threshold,\n keygenInit: decoded.keygenInit,\n keygenIds: decoded.keygenIds,\n userId: decoded.userId,\n environmentId: decoded.environmentId,\n traceContext: decoded.traceContext,\n })),\n});\n","import { TypeOf, union, undefined as undefinedType } from 'io-ts';\nimport {\n buildMessageSchema,\n createStandardMessage,\n createComplexEncoder,\n createStandardDecoder,\n} from './utils';\nimport { WebSocketError } from '../types';\nimport { WebSocketErrorCodec } from '../codecs/WebSocketErrorCodec';\nimport { EncryptedPayloadCodec, type EncryptedPayload } from '../codecs';\n\n/**\n * ReceiveKey Response Runtime Data\n */\nexport interface ReceiveKeyResponseData {\n keygenResult?: EncryptedPayload; // Encrypted KeygenResult (pubkey + secretShare) - present on success\n error?: WebSocketError; // Error details - present on failure\n}\n\n/**\n * ReceiveKey Response Wire Format\n */\nexport interface ReceiveKeyResponseWire {\n type: 'receiveKey_response';\n version: 1;\n keygenResult?: {\n salt: string; // hex string\n encryptedPayload: string; // hex string\n };\n error?: WebSocketError; // Error details - present on failure\n}\n\n/**\n * ReceiveKey Response Schema\n */\nexport const ReceiveKeyResponseSchema = buildMessageSchema(\n 'receiveKey_response',\n 1,\n {\n keygenResult: union([EncryptedPayloadCodec, undefinedType]),\n error: union([WebSocketErrorCodec, undefinedType]),\n }\n);\n\nexport type ReceiveKeyResponse = TypeOf<typeof ReceiveKeyResponseSchema>;\n\n/**\n * ReceiveKey V1 Response Message Class\n */\nexport const ReceiveKeyV1ResponseMessage = createStandardMessage<\n ReceiveKeyResponseData,\n ReceiveKeyResponseWire,\n 'receiveKey_response',\n 1\n>({\n messageType: 'receiveKey_response',\n version: 1,\n schema: ReceiveKeyResponseSchema,\n encodeData: createComplexEncoder('receiveKey_response', 1, {\n keygenResult: (value: EncryptedPayload) =>\n EncryptedPayloadCodec.encode(value),\n }),\n decodeData: createStandardDecoder<ReceiveKeyResponseData>((decoded) => ({\n keygenResult: decoded.keygenResult,\n error: decoded.error,\n })),\n});\n","import { HandshakeV1RequestMessage } from './HandshakeV1Request';\nimport { HandshakeV1ResponseMessage } from './HandshakeV1Response';\nimport { SignMessageV1RequestMessage } from './SignMessageV1Request';\nimport { SignMessageV1ResponseMessage } from './SignMessageV1Response';\nimport { ConnectionAckV1RequestMessage } from './ConnectionAckV1Request';\nimport { ConnectionAckV1ResponseMessage } from './ConnectionAckV1Response';\nimport { KeygenV1RequestMessage } from './KeygenV1Request';\nimport { KeygenV1ResponseMessage } from './KeygenV1Response';\nimport { ReceiveKeyV1RequestMessage } from './ReceiveKeyV1Request';\nimport { ReceiveKeyV1ResponseMessage } from './ReceiveKeyV1Response';\n\n/**\n * 🎯 SINGLE SOURCE OF TRUTH - Add new messages here and everything else is automatic!\n * This is the ONLY place you need to add new message types\n */\nexport const ALL_MESSAGE_CLASSES = {\n 'handshake@1': HandshakeV1RequestMessage,\n 'handshake_response@1': HandshakeV1ResponseMessage,\n 'signMessage@1': SignMessageV1RequestMessage,\n 'signMessage_response@1': SignMessageV1ResponseMessage,\n 'connection_ack@1': ConnectionAckV1RequestMessage,\n 'connection_ack_response@1': ConnectionAckV1ResponseMessage,\n 'keygen@1': KeygenV1RequestMessage,\n 'keygen_response@1': KeygenV1ResponseMessage,\n 'receiveKey@1': ReceiveKeyV1RequestMessage,\n 'receiveKey_response@1': ReceiveKeyV1ResponseMessage,\n} as const;\n\n// ========================================\n// 🤖 EVERYTHING BELOW IS AUTOMATICALLY DERIVED\n// ========================================\n\n/**\n * Derive message type union from classes\n */\nexport type AllMessageTypes = keyof typeof ALL_MESSAGE_CLASSES;\n\n/**\n * Derive runtime array of message keys from classes\n */\nexport const ALL_MESSAGE_KEYS = Object.keys(\n ALL_MESSAGE_CLASSES\n) as AllMessageTypes[];\n\n/**\n * Get message class by type and version (derived from single source)\n */\nexport function getMessageClass(type: string, version: number) {\n const key = `${type}@${version}` as AllMessageTypes;\n const MessageClass = ALL_MESSAGE_CLASSES[key];\n\n if (!MessageClass) {\n throw new Error(`Unknown message type: ${type} version ${version}`);\n }\n\n return MessageClass;\n}\n\n/**\n * Type-safe check if message type exists\n */\nexport function isValidMessageType(type: string, version: number): boolean {\n const key = `${type}@${version}`;\n return key in ALL_MESSAGE_CLASSES;\n}\n\n/**\n * Get all supported message types and versions\n */\nexport function getAllSupportedMessages(): Array<{\n type: string;\n version: number;\n}> {\n return ALL_MESSAGE_KEYS.map((key) => {\n const [type, versionStr] = key.split('@');\n return { type, version: parseInt(versionStr, 10) };\n });\n}\n\n/**\n * Helper to extract message type and version from key\n */\nexport function parseMessageKey(key: AllMessageTypes): {\n type: string;\n version: number;\n} {\n const [type, versionStr] = key.split('@');\n return { type, version: parseInt(versionStr, 10) };\n}\n","import { either } from 'fp-ts';\nimport { IMessage } from './base';\nimport { getMessageClass, getAllSupportedMessages } from './allMessages';\n\n/**\n * Ultra-DRY Message Registry - everything is derived, no registration needed\n */\nexport class MessageRegistry {\n private static instance: MessageRegistry;\n\n private constructor() {}\n\n static getInstance(): MessageRegistry {\n if (!MessageRegistry.instance) {\n MessageRegistry.instance = new MessageRegistry();\n }\n return MessageRegistry.instance;\n }\n\n /**\n * Get a message class by type and version (derived from single source)\n */\n getMessageClass(type: string, version: number) {\n try {\n return getMessageClass(type, version);\n } catch {\n return undefined;\n }\n }\n\n /**\n * Create a message instance from wire data (using derived message classes)\n */\n decode(wireData: any): either.Either<string, IMessage> {\n if (!wireData || typeof wireData !== 'object') {\n return { _tag: 'Left', left: 'Invalid wire data: must be an object' };\n }\n\n const { type, version } = wireData;\n if (!type || !version) {\n return {\n _tag: 'Left',\n left: 'Invalid wire data: missing type or version',\n };\n }\n\n const MessageClass = this.getMessageClass(type, version);\n if (!MessageClass) {\n return { _tag: 'Left', left: `Unknown message type: ${type}@${version}` };\n }\n\n const result = MessageClass.decode(wireData);\n if (either.isLeft(result)) {\n return {\n _tag: 'Left',\n left: `Decode error: ${result.left.map((e) => e.message).join(', ')}`,\n };\n }\n\n return { _tag: 'Right', right: result.right };\n }\n\n /**\n * Encode a message to wire format\n */\n encode(message: IMessage): any {\n return message.encode();\n }\n\n /**\n * Get all registered message types (derived from single source)\n */\n getRegisteredTypes(): string[] {\n return getAllSupportedMessages().map(\n ({ type, version }) => `${type}@${version}`\n );\n }\n}\n\n// Export singleton instance\nexport const messageRegistry = MessageRegistry.getInstance();\n","/**\n * Asserts that a value is defined (not null or undefined)\n * @throws Error if value is null or undefined\n */\nexport function assertDefined<T>(\n value: T | null | undefined,\n message?: string\n): asserts value is T {\n if (value === null || value === undefined) {\n throw new Error(message ?? 'Value must be defined');\n }\n}\n\n/**\n * Asserts that a value is not null\n * @throws Error if value is null\n */\nexport function assertNotNull<T>(\n value: T | null,\n message?: string\n): asserts value is T {\n if (value === null) {\n throw new Error(message ?? 'Value must not be null');\n }\n}\n\n/**\n * Returns a value if it is defined, otherwise throws an error\n * @throws Error if value is null or undefined\n */\nexport function getDefined<T>(\n value: T | null | undefined,\n message?: string\n): T {\n assertDefined(value, message);\n return value;\n}\n","import { ml_kem768 } from '@noble/post-quantum/ml-kem.js';\nimport { assertNotNull } from '../utils/assertDefined';\n\nexport const generateMlKem768Keypair = (): {\n encapsulationKey: Uint8Array;\n decapsulationKey: Uint8Array;\n} => {\n try {\n const keys = ml_kem768.keygen();\n assertNotNull(keys.publicKey, 'Encapsulation key must be defined');\n assertNotNull(keys.secretKey, 'Decapsulation key must be defined');\n return {\n encapsulationKey: keys.publicKey,\n decapsulationKey: keys.secretKey,\n };\n } catch (error) {\n throw new Error(\n `Failed to generate ML-KEM-768 keypair: ${error instanceof Error ? error.message : String(error)}`\n );\n }\n};\n","import { ml_kem768 } from '@noble/post-quantum/ml-kem.js';\n\nexport const encapsulateMlKem768 = (\n encapsulationKey: Uint8Array\n): { cipherText: Uint8Array; sharedSecret: Uint8Array } => {\n return ml_kem768.encapsulate(encapsulationKey);\n};\n","import { ml_kem768 } from '@noble/post-quantum/ml-kem.js';\n\nexport const decapsulateMlKem768 = (\n decapsulationKey: Uint8Array,\n cipherText: Uint8Array\n): Uint8Array => {\n return ml_kem768.decapsulate(cipherText, decapsulationKey);\n};\n","import { hkdf } from '@noble/hashes/hkdf.js';\nimport { sha256 } from '@noble/hashes/sha2.js';\n\nexport const AES_256_GCM_KEY_SIZE = 32; // 256 bits\nexport const AES_256_GCM_NONCE_SIZE = 12; // 96 bits\nexport const AES_256_GCM_TAG_SIZE = 16; // 128 bits\nexport const HKDF_SALT_SIZE = 32; // 256 bits\n\n/**\n * Encryption purpose enum to prevent typos and ensure consistency\n */\nexport enum EncryptionPurpose {\n KEYSHARE = 'keyshare',\n KEYGEN_INIT = 'keygen_init',\n KEYGEN_RESULT = 'keygen_result',\n TEST = 'test', // For testing purposes\n}\n\n/**\n * Derive AES-256 key from ML-KEM shared secret using HKDF\n * Following NIST SP 800-56C recommendations\n */\nexport function deriveAESKey(\n sharedSecret: Uint8Array,\n salt: Uint8Array,\n info: string\n): Uint8Array {\n const infoBytes = new TextEncoder().encode(info);\n return hkdf(sha256, sharedSecret, salt, infoBytes, AES_256_GCM_KEY_SIZE);\n}\n\n/**\n * Create standardized context info for HKDF\n */\nexport function createKeyDerivationInfo(\n purpose: EncryptionPurpose,\n connectionId: string,\n version: number = 1\n): string {\n return `forward-mpc-${purpose}-v${version}-${connectionId}`;\n}\n","import { gcm } from '@noble/ciphers/aes';\nimport { randomBytes } from '@noble/hashes/utils.js';\nimport {\n deriveAESKey,\n createKeyDerivationInfo,\n EncryptionPurpose,\n} from './keyDerivation';\nimport type { EncryptedPayload } from '../codecs/EncryptedPayloadCodec';\n\n// Constants for cryptographic parameters\nconst HKDF_SALT_SIZE = 32; // 256-bit salt for HKDF\nconst AES_GCM_NONCE_SIZE = 12; // Standard AES-GCM nonce size (96 bits)\nconst MIN_SHARED_SECRET_SIZE = 32; // Minimum 256-bit shared secret\n\n/**\n * Options for encrypting a payload\n */\nexport interface EncryptPayloadOptions {\n /** The data to encrypt (will be JSON stringified) */\n payload: unknown;\n /** ML-KEM shared secret from handshake (min 32 bytes) */\n sharedSecret: Uint8Array;\n /** Unique connection identifier (non-empty) */\n connectionId: string;\n /** Purpose for HKDF context (prevents key reuse across contexts) */\n purpose: EncryptionPurpose;\n}\n\n/**\n * Generic payload encryption using AES-256-GCM with ML-KEM derived key\n *\n * @param options - Encryption options\n * @returns Encrypted payload with salt and encrypted data\n * @throws Error if inputs are invalid or encryption fails\n */\nexport function encryptPayload(\n options: EncryptPayloadOptions\n): EncryptedPayload {\n const { payload, sharedSecret, connectionId, purpose } = options;\n // Validate inputs\n if (!sharedSecret || sharedSecret.length < MIN_SHARED_SECRET_SIZE) {\n throw new Error(\n `Invalid shared secret: must be at least ${MIN_SHARED_SECRET_SIZE} bytes`\n );\n }\n if (!connectionId || connectionId.trim().length === 0) {\n throw new Error('Invalid connectionId: must be non-empty string');\n }\n\n // Generate random salt for HKDF\n const salt = randomBytes(HKDF_SALT_SIZE);\n\n // Derive AES key using HKDF with connection-specific context\n const info = createKeyDerivationInfo(purpose, connectionId);\n const aesKey = deriveAESKey(sharedSecret, salt, info);\n\n // Encrypt with AES-256-GCM\n const nonce = randomBytes(AES_GCM_NONCE_SIZE);\n const aes256Gcm = gcm(aesKey, nonce);\n const plaintext = new TextEncoder().encode(JSON.stringify(payload));\n const ciphertext = aes256Gcm.encrypt(plaintext);\n\n // Combine nonce + ciphertext for single payload\n const encryptedPayload = new Uint8Array(nonce.length + ciphertext.length);\n encryptedPayload.set(nonce, 0);\n encryptedPayload.set(ciphertext, nonce.length);\n\n // Clear sensitive data from memory\n aesKey.fill(0);\n\n return { salt, encryptedPayload };\n}\n\n/**\n * Options for decrypting a payload\n */\nexport interface DecryptPayloadOptions {\n /** Encrypted payload with salt and encrypted data */\n encrypted: EncryptedPayload;\n /** ML-KEM shared secret from handshake (min 32 bytes) */\n sharedSecret: Uint8Array;\n /** Unique connection identifier (non-empty) */\n connectionId: string;\n /** Purpose for HKDF context (must match encryption) */\n purpose: EncryptionPurpose;\n}\n\n/**\n * Generic payload decryption using AES-256-GCM with ML-KEM derived key\n *\n * @param options - Decryption options\n * @returns Decrypted and parsed JSON data\n * @throws Error if inputs are invalid or decryption fails\n */\nexport function decryptPayload<T = any>(options: DecryptPayloadOptions): T {\n const { encrypted, sharedSecret, connectionId, purpose } = options;\n // Validate inputs\n if (!sharedSecret || sharedSecret.length < MIN_SHARED_SECRET_SIZE) {\n throw new Error(\n `Invalid shared secret: must be at least ${MIN_SHARED_SECRET_SIZE} bytes`\n );\n }\n if (!connectionId || connectionId.trim().length === 0) {\n throw new Error('Invalid connectionId: must be non-empty string');\n }\n if (\n !encrypted.encryptedPayload ||\n encrypted.encryptedPayload.length < AES_GCM_NONCE_SIZE\n ) {\n throw new Error(\n `Invalid encrypted payload: must be at least ${AES_GCM_NONCE_SIZE} bytes`\n );\n }\n\n // Derive the same AES key using HKDF\n const info = createKeyDerivationInfo(purpose, connectionId);\n const aesKey = deriveAESKey(sharedSecret, encrypted.salt, info);\n\n // Extract nonce and ciphertext\n const nonce = encrypted.encryptedPayload.slice(0, AES_GCM_NONCE_SIZE);\n const ciphertext = encrypted.encryptedPayload.slice(AES_GCM_NONCE_SIZE);\n\n // Decrypt with AES-256-GCM\n const aes256Gcm = gcm(aesKey, nonce);\n const plaintext = aes256Gcm.decrypt(ciphertext);\n\n // Parse JSON data\n const decryptedText = new TextDecoder().decode(plaintext);\n const data = JSON.parse(decryptedText);\n\n // Clear sensitive data from memory\n aesKey.fill(0);\n\n return data;\n}\n","import { bytesToHex, randomBytes } from '@noble/hashes/utils.js';\nimport { encryptPayload } from './payloadEncryption';\nimport { EncryptionPurpose } from './keyDerivation';\nimport type { EncryptedPayload } from '../codecs/EncryptedPayloadCodec';\nimport type { SigningAlgorithmName } from '../signing/allAlgorithms';\n\n/**\n * Encrypt keyshare using AES-256-GCM with ML-KEM derived key\n *\n * @param keyshare - The keyshare object from Dynamic Wallet SDK\n * @param sharedSecret - ML-KEM shared secret from handshake\n * @param connectionId - Unique connection identifier\n * @param signingAlgorithm - Algorithm name for context\n * @returns Encrypted keyshare with salt and encrypted payload\n */\nexport function encryptKeyshare(\n keyshare: any,\n sharedSecret: Uint8Array,\n connectionId: string,\n signingAlgorithm: SigningAlgorithmName\n): EncryptedPayload {\n // Prepare keyshare data for encryption\n const keyshareData = {\n keyshare,\n signingAlgorithm,\n timestamp: Date.now(),\n nonce: bytesToHex(randomBytes(16)),\n };\n\n return encryptPayload({\n payload: keyshareData,\n sharedSecret,\n connectionId,\n purpose: EncryptionPurpose.KEYSHARE,\n });\n}\n","import { encryptPayload, decryptPayload } from './payloadEncryption';\nimport { EncryptionPurpose } from './keyDerivation';\nimport type { EncryptedPayload } from '../codecs/EncryptedPayloadCodec';\n\n/**\n * Encrypt keygen init data (keygenId + keygenSecret)\n *\n * @param keygenInit - The keygen init object with keygenId and keygenSecret\n * @param sharedSecret - ML-KEM shared secret from handshake\n * @param connectionId - Unique connection identifier\n * @returns Encrypted keygen init with salt and encrypted payload\n * @throws Error if keygenInit contains empty or invalid fields\n */\nexport function encryptKeygenInit(\n keygenInit: { keygenId: string; keygenSecret: string },\n sharedSecret: Uint8Array,\n connectionId: string\n): EncryptedPayload {\n // Validate keygenInit fields\n if (!keygenInit.keygenId || keygenInit.keygenId.trim().length === 0) {\n throw new Error('Invalid keygenInit: keygenId must be non-empty string');\n }\n if (!keygenInit.keygenSecret || keygenInit.keygenSecret.trim().length === 0) {\n throw new Error(\n 'Invalid keygenInit: keygenSecret must be non-empty string'\n );\n }\n\n return encryptPayload({\n payload: keygenInit,\n sharedSecret,\n connectionId,\n purpose: EncryptionPurpose.KEYGEN_INIT,\n });\n}\n\n/**\n * Decrypt keygen result (pubkey + secretShare)\n *\n * @param encrypted - Encrypted keygen result from server\n * @param sharedSecret - ML-KEM shared secret from handshake\n * @param connectionId - Unique connection identifier\n * @returns Decrypted keygen result with pubkey and secretShare\n * @throws Error if decrypted data is missing required fields or has invalid types\n */\nexport function decryptKeygenResult(\n encrypted: EncryptedPayload,\n sharedSecret: Uint8Array,\n connectionId: string\n): { pubkey: Uint8Array; secretShare: string } {\n const data = decryptPayload({\n encrypted,\n sharedSecret,\n connectionId,\n purpose: EncryptionPurpose.KEYGEN_RESULT,\n });\n\n // Validate decrypted data structure\n if (!data.pubkey || !Array.isArray(data.pubkey)) {\n throw new Error('Invalid keygen result: pubkey must be an array');\n }\n if (\n !data.secretShare ||\n typeof data.secretShare !== 'string' ||\n data.secretShare.trim().length === 0\n ) {\n throw new Error(\n 'Invalid keygen result: secretShare must be non-empty string'\n );\n }\n\n // Convert pubkey array back to Uint8Array\n return {\n pubkey: new Uint8Array(data.pubkey),\n secretShare: data.secretShare,\n };\n}\n","import type { SigningAlgorithmName } from './allAlgorithms';\nimport type { ISigningAlgorithm } from './base';\nimport {\n SIGNING_ALGORITHM_INSTANCES,\n ALL_SIGNING_ALGORITHM_NAMES,\n isValidSigningAlgorithm,\n} from './allAlgorithms';\n\n/**\n * Ultra-simple registry - everything is derived, no registration needed\n */\nclass SigningAlgorithmRegistry {\n /**\n * Get algorithm instance (derived from single source of truth)\n */\n get(name: SigningAlgorithmName): ISigningAlgorithm {\n const algorithm = SIGNING_ALGORITHM_INSTANCES[name];\n if (!algorithm) {\n throw new Error(`Unknown signing algorithm: ${name}`);\n }\n return algorithm;\n }\n\n /**\n * Type-safe check if algorithm exists\n */\n has(name: string): name is SigningAlgorithmName {\n return isValidSigningAlgorithm(name);\n }\n\n /**\n * Get all algorithm names (derived from classes)\n */\n getAllNames(): SigningAlgorithmName[] {\n return ALL_SIGNING_ALGORITHM_NAMES;\n }\n\n /**\n * Get all algorithm instances (derived from classes)\n */\n getAllInstances(): Record<SigningAlgorithmName, ISigningAlgorithm> {\n return SIGNING_ALGORITHM_INSTANCES;\n }\n}\n\nexport const signingAlgorithmRegistry = new SigningAlgorithmRegistry();\n"]}
1
+ {"version":3,"sources":["../src/types.ts","../src/messages/base.ts","../src/codecs/Uint8ArrayCodec.ts","../src/codecs/Uint32ArrayCodec.ts","../src/codecs/EncryptedPayloadCodec.ts","../src/codecs/TraceContextCodec.ts","../src/codecs/OptionalStringCodec.ts","../src/messages/utils/schemaBuilder.ts","../src/messages/utils/encodingHelpers.ts","../src/messages/utils/StandardMessage.ts","../src/messages/HandshakeV1Request.ts","../src/messages/HandshakeV1Response.ts","../src/signing/base.ts","../src/signing/algorithms/Ed25519SigningAlgorithm.ts","../src/signing/algorithms/BIP340SigningAlgorithm.ts","../src/signing/algorithms/EcdsaSigningAlgorithm.ts","../src/signing/allAlgorithms.ts","../src/constants/algorithms.ts","../src/constants/websocket.ts","../src/codecs/DomainCodec.ts","../src/codecs/Uint8ArrayOrHexCodec.ts","../src/messages/SignMessageV1Request.ts","../src/codecs/WebSocketErrorCodec.ts","../src/messages/SignMessageV1Response.ts","../src/messages/ConnectionAckV1Request.ts","../src/messages/ConnectionAckV1Response.ts","../src/messages/KeygenV1Request.ts","../src/messages/KeygenV1Response.ts","../src/messages/ReceiveKeyV1Request.ts","../src/messages/ReceiveKeyV1Response.ts","../src/messages/allMessages.ts","../src/messages/registry.ts","../src/utils/assertDefined.ts","../src/crypto/generateKeypair.ts","../src/crypto/encapsulate.ts","../src/crypto/decapsulate.ts","../src/crypto/keyDerivation.ts","../src/crypto/payloadEncryption.ts","../src/crypto/keyshareEncryption.ts","../src/crypto/keygenEncryption.ts","../src/signing/registry.ts"],"names":["WebSocketErrorType","BaseMessage","data","getData","Uint8ArrayCodec","Type","u","Uint8Array","c","failure","cleanHex","startsWith","slice","length","test","decoded","hexToBytes","success","e","a","bytesToHex","Uint32ArrayCodec","Uint32Array","uint8Array","uint32Array","buffer","EncryptedPayloadCodec","type","salt","encryptedPayload","TraceContextSchema","partial","traceId","string","startTime","number","TraceContextCodec","union","undefinedType","OptionalStringCodec","buildMessageSchema","messageType","version","additionalFields","additionalSchemas","schema","literal","intersection","result","i","createComplexEncoder","fieldTransforms","encoded","key","value","Object","entries","undefined","createStandardDecoder","fieldExtractor","createStandardMessage","config","StandardMessageClass","MESSAGE_TYPE","MESSAGE_VERSION","encode","encodeData","decode","wireData","either","isLeft","right","_tag","decodeData","createSimpleMessage","HandshakeRequestSchema","challenge","nonce","traceContext","HandshakeV1RequestMessage","HandshakeResponseSchema","encapsulatedSharedSecret","attestationDoc","connectionId","HandshakeV1ResponseMessage","BaseSigningAlgorithm","Ed25519SigningAlgorithm","algorithmName","signingAlgo","derivationPath","createKeygenResultFromSecretShare","secretShare","pubkey","createSignRequest","keygenResult","params","processSignResult","_result","BIP340SigningAlgorithm","tweak","EcdsaSigningAlgorithm","hashAlgo","pubKeyAsHex","repeat","serializeCompressed","serializeUncompressed","SIGNING_ALGORITHM_CLASSES","ed25519","bip340","ecdsa","ALL_SIGNING_ALGORITHM_NAMES","keys","SIGNING_ALGORITHM_INSTANCES","ALL_SIGNING_ALGORITHM_SCHEMA","schemas","values","map","instance","Error","isValidSigningAlgorithm","name","algorithm","ALGORITHMS","SigningAlgorithm","ECDSA","dynamicEnum","className","requiresHashAlgo","supportsDerivationPath","supportsTweak","supportedHashAlgos","ED25519","BIP340","toDynamicSigningAlgorithm","algorithmConfig","find","fromDynamicSigningAlgorithm","dynamicAlgorithm","SignatureAlgoSchema","WebSocketCloseCode","NORMAL","IDLE_TIMEOUT","ABNORMAL","DomainCodec","domainPattern","identity","Uint8ArrayOrHexCodec","SignMessageRequestSchema","relayDomain","keyshare","message","roomUuid","userId","environmentId","SignMessageV1RequestMessage","WebSocketErrorTypeCodec","WebSocketErrorCodec","details","unknown","SignMessageResponseSchema","signature","error","SignMessageV1ResponseMessage","ConnectionAckRequestSchema","ConnectionAckV1RequestMessage","ConnectionAckResponseSchema","status","timestamp","ConnectionAckV1ResponseMessage","BaseKeygenParamsCodec","numParties","threshold","keygenInit","keygenIds","array","EcdsaKeygenParamsCodec","props","BIP340KeygenParamsCodec","KeygenAlgoParamsCodec","KeygenRequestSchema","KeygenV1RequestMessage","KeygenResponseSchema","KeygenV1ResponseMessage","ReceiveKeyRequestSchema","ReceiveKeyV1RequestMessage","ReceiveKeyResponseSchema","ReceiveKeyV1ResponseMessage","ALL_MESSAGE_CLASSES","ALL_MESSAGE_KEYS","getMessageClass","MessageClass","isValidMessageType","getAllSupportedMessages","versionStr","split","parseInt","parseMessageKey","MessageRegistry","getInstance","left","join","getRegisteredTypes","messageRegistry","assertDefined","assertNotNull","getDefined","generateMlKem768Keypair","ml_kem768","keygen","publicKey","secretKey","encapsulationKey","decapsulationKey","String","encapsulateMlKem768","encapsulate","decapsulateMlKem768","cipherText","decapsulate","AES_256_GCM_KEY_SIZE","AES_256_GCM_NONCE_SIZE","AES_256_GCM_TAG_SIZE","HKDF_SALT_SIZE","EncryptionPurpose","deriveAESKey","sharedSecret","info","infoBytes","TextEncoder","hkdf","sha256","createKeyDerivationInfo","purpose","AES_GCM_NONCE_SIZE","MIN_SHARED_SECRET_SIZE","encryptPayload","options","payload","trim","randomBytes","aesKey","aes256Gcm","gcm","plaintext","JSON","stringify","ciphertext","encrypt","set","fill","decryptPayload","encrypted","decrypt","decryptedText","TextDecoder","parse","encryptKeyshare","signingAlgorithm","keyshareData","Date","now","KEYSHARE","encryptKeygenInit","keygenId","keygenSecret","KEYGEN_INIT","decryptKeygenResult","KEYGEN_RESULT","Array","isArray","SigningAlgorithmRegistry","get","has","getAllNames","getAllInstances","signingAlgorithmRegistry"],"mappings":"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","file":"index.cjs","sourcesContent":["/**\n * Base structure for all WebSocket messages\n */\nexport interface BaseWebSocketMessage {\n type: string;\n version: number;\n}\n\n/**\n * WebSocket error types\n */\nexport enum WebSocketErrorType {\n INVALID_MESSAGE = 'INVALID_MESSAGE',\n HANDLER_NOT_FOUND = 'HANDLER_NOT_FOUND',\n HANDLER_ERROR = 'HANDLER_ERROR',\n CONNECTION_ERROR = 'CONNECTION_ERROR',\n VALIDATION_ERROR = 'VALIDATION_ERROR',\n}\n\n/**\n * Structured WebSocket error\n */\nexport interface WebSocketError {\n type: WebSocketErrorType;\n message: string;\n details?: unknown;\n}\n\n/**\n * Standard error response format\n */\nexport interface ErrorResponse extends BaseWebSocketMessage {\n type: 'error';\n error: WebSocketError;\n}\n\n/**\n * WebSocket connection context (client-side version without ws instance)\n */\nexport interface WebSocketConnectionInfo {\n id: string;\n connectedAt: Date;\n lastActivity: Date;\n metadata?: Record<string, unknown>;\n}\n","/**\n * Base interface for all messages\n */\nexport interface IMessage<TRuntime = any, TWire = any> {\n readonly type: string;\n readonly version: number;\n\n /**\n * Encode this message to wire format for transmission\n */\n encode(): TWire;\n\n /**\n * Get the runtime data of this message\n */\n getData(): TRuntime;\n}\n\n/**\n * Abstract base class for all messages\n */\nexport abstract class BaseMessage<TRuntime = any, TWire = any>\n implements IMessage<TRuntime, TWire>\n{\n abstract readonly type: string;\n abstract readonly version: number;\n\n protected constructor(public readonly data: TRuntime) {}\n\n abstract encode(): TWire;\n\n getData(): TRuntime {\n return this.data;\n }\n}\n","import { failure, success, Type } from 'io-ts';\nimport { bytesToHex, hexToBytes } from '@noble/hashes/utils.js';\n\nexport const Uint8ArrayCodec = new Type<\n Uint8Array, // A: The runtime type (the type you work with in your code)\n string, // O: The encoded output type (e.g., JSON representation)\n unknown // I: The input type (e.g., from JSON)\n>(\n 'Uint8Array', // The name of the codec\n (u): u is Uint8Array => u instanceof Uint8Array, // A type guard\n (u, c) => {\n // The `validate` function for decoding\n if (typeof u !== 'string') {\n return failure(u, c, 'Expected a hex string for Uint8Array');\n }\n try {\n // Remove any '0x' prefix if present\n const cleanHex = u.startsWith('0x') ? u.slice(2) : u;\n\n // Validate hex string (must be even length and contain only hex characters)\n if (cleanHex.length % 2 !== 0 || !/^[0-9a-fA-F]+$/.test(cleanHex)) {\n return failure(u, c, 'Invalid hex string format');\n }\n\n const decoded = hexToBytes(cleanHex);\n return success(decoded);\n } catch (e) {\n return failure(u, c, `Invalid hex string: ${e}`);\n }\n },\n // The `encode` function for converting back to the output type\n (a) => bytesToHex(a)\n);\n","import { failure, success, Type } from 'io-ts';\nimport { bytesToHex, hexToBytes } from '@noble/hashes/utils.js';\n\nexport const Uint32ArrayCodec = new Type<\n Uint32Array, // A: The runtime type (the type you work with in your code)\n string, // O: The encoded output type (e.g., JSON representation)\n unknown // I: The input type (e.g., from JSON)\n>(\n 'Uint32Array', // The name of the codec\n (u): u is Uint32Array => u instanceof Uint32Array, // A type guard\n (u, c) => {\n // The `validate` function for decoding\n if (typeof u !== 'string') {\n return failure(u, c, 'Expected a hex string for Uint32Array');\n }\n try {\n // Remove any '0x' prefix if present\n const cleanHex = u.startsWith('0x') ? u.slice(2) : u;\n\n // Validate hex string (must be multiple of 8 characters for 32-bit values)\n if (cleanHex.length === 0) {\n return failure(u, c, 'Empty hex string not allowed for Uint32Array');\n }\n if (cleanHex.length % 8 !== 0) {\n return failure(\n u,\n c,\n 'Invalid hex string format for Uint32Array (must be multiple of 8 hex characters)'\n );\n }\n\n // Convert hex string to Uint8Array using noble-hashes\n const uint8Array = hexToBytes(cleanHex);\n\n // Convert Uint8Array to Uint32Array by interpreting the buffer\n // Note: This assumes little-endian byte order\n const uint32Array = new Uint32Array(uint8Array.buffer);\n\n return success(uint32Array);\n } catch (e) {\n return failure(u, c, `Invalid hex string: ${e}`);\n }\n },\n // The `encode` function for converting back to the output type\n (a) => {\n // Convert Uint32Array to Uint8Array to use noble-hashes\n const uint8Array = new Uint8Array(a.buffer);\n return bytesToHex(uint8Array);\n }\n);\n","import { type, TypeOf } from 'io-ts';\nimport { Uint8ArrayCodec } from './Uint8ArrayCodec';\n\n/**\n * Generic encrypted payload structure for secure transmission\n * Contains HKDF salt and AES-256-GCM encrypted payload\n * Used for keyshares, keygen init, and other encrypted data\n */\nexport const EncryptedPayloadCodec = type({\n salt: Uint8ArrayCodec,\n encryptedPayload: Uint8ArrayCodec,\n});\n\nexport type EncryptedPayload = TypeOf<typeof EncryptedPayloadCodec>;\n","import {\n partial,\n string,\n number,\n union,\n undefined as undefinedType,\n} from 'io-ts';\n\n/**\n * Trace Context for request tracing\n */\nexport interface TraceContext {\n traceId?: string;\n startTime?: number;\n}\n\n/**\n * Trace Context Schema - validates trace context with optional fields\n */\nconst TraceContextSchema = partial({\n traceId: string,\n startTime: number,\n});\n\n/**\n * Trace Context Codec - optional by default (allows undefined)\n */\nexport const TraceContextCodec = union([TraceContextSchema, undefinedType]);\n","import { string, union, undefined as undefinedType } from 'io-ts';\n\n/**\n * Optional String Codec - validates string or undefined\n */\nexport const OptionalStringCodec = union([string, undefinedType]);\n","import { intersection, literal, Mixed, type, Type } from 'io-ts';\n\n/**\n * Build standard message schema with type and version\n * Eliminates duplication across all message schemas\n */\nexport function buildMessageSchema<T extends string, V extends number>(\n messageType: T,\n version: V,\n additionalFields: Record<string, any> = {},\n ...additionalSchemas: Mixed[]\n): Type<any> {\n const schema = type({\n type: literal(messageType),\n version: literal(version),\n ...additionalFields,\n });\n\n if (additionalSchemas.length === 0) {\n return schema;\n }\n\n if (additionalSchemas.length === 1) {\n return intersection([schema, additionalSchemas[0]]);\n }\n\n // For multiple schemas, chain intersections\n let result: Type<any> = intersection([schema, additionalSchemas[0]]);\n for (let i = 1; i < additionalSchemas.length; i++) {\n result = intersection([result, additionalSchemas[i]]);\n }\n return result;\n}\n\n/**\n * Message schema configuration interface\n */\nexport interface MessageSchemaConfig<T extends string, V extends number> {\n type: T;\n version: V;\n fields: Record<string, any>;\n}\n\n/**\n * Create schema from configuration\n */\nexport function createSchemaFromConfig<T extends string, V extends number>(\n config: MessageSchemaConfig<T, V>\n): Type<any> {\n return buildMessageSchema(config.type, config.version, config.fields);\n}\n","/**\n * Standard encoder for simple messages\n * Creates basic encode function with type and version\n */\nexport function createSimpleEncoder<TData, TWire>(\n messageType: string,\n version: number\n) {\n return (data: TData): TWire =>\n ({\n type: messageType,\n version,\n ...data,\n }) as TWire;\n}\n\n/**\n * Standard encoder for complex messages with codec transformations\n * Handles field transformations like Uint8Array -> hex string\n */\nexport function createComplexEncoder<TData, TWire>(\n messageType: string,\n version: number,\n fieldTransforms: Record<string, (value: any) => any> = {}\n) {\n return (data: TData): TWire => {\n const encoded: any = {\n type: messageType,\n version,\n };\n\n // Apply field transformations\n for (const [key, value] of Object.entries(data as any)) {\n if (value !== undefined) {\n encoded[key] = fieldTransforms[key]\n ? fieldTransforms[key](value)\n : value;\n }\n }\n\n return encoded as TWire;\n };\n}\n\n/**\n * Standard decoder with field extraction\n * Extracts runtime data from decoded wire format\n */\nexport function createStandardDecoder<TData>(\n fieldExtractor: (decoded: any) => TData\n) {\n return (decoded: any): TData => fieldExtractor(decoded);\n}\n\n/**\n * Identity decoder for simple messages where wire format matches runtime format\n */\nexport function createIdentityDecoder<TData>(): (decoded: any) => TData {\n return (decoded: any): TData => {\n // Remove type and version fields, keep the rest\n const { type, version, ...data } = decoded;\n return data as TData;\n };\n}\n","import { either } from 'fp-ts';\nimport { Errors, Type } from 'io-ts';\nimport { BaseMessage, IMessage } from '../base';\n\n/**\n * Configuration for creating a standard message class\n */\nexport interface StandardMessageConfig<\n TData,\n TWire,\n TType extends string,\n TVersion extends number,\n> {\n messageType: TType;\n version: TVersion;\n schema: Type<any>;\n encodeData: (data: TData, type: TType, version: TVersion) => TWire;\n decodeData: (decoded: any) => TData;\n}\n\n/**\n * Standard message class factory - eliminates boilerplate\n * Creates a complete message class with encode/decode functionality\n */\nexport function createStandardMessage<\n TData,\n TWire,\n TType extends string,\n TVersion extends number,\n>(config: StandardMessageConfig<TData, TWire, TType, TVersion>) {\n class StandardMessageClass\n extends BaseMessage<TData, TWire>\n implements IMessage<TData, TWire>\n {\n static readonly MESSAGE_TYPE = config.messageType;\n static readonly MESSAGE_VERSION = config.version;\n static readonly schema = config.schema;\n\n readonly type = config.messageType;\n readonly version = config.version;\n\n constructor(data: TData) {\n super(data);\n }\n\n encode(): TWire {\n return config.encodeData(this.data, this.type, this.version);\n }\n\n static decode(\n wireData: unknown\n ): either.Either<Errors, StandardMessageClass> {\n const result = config.schema.decode(wireData);\n if (either.isLeft(result)) {\n return result;\n }\n\n const decoded = result.right;\n return {\n _tag: 'Right',\n right: new StandardMessageClass(config.decodeData(decoded)),\n };\n }\n }\n\n return StandardMessageClass;\n}\n\n/**\n * Type helper to extract the message class type from createStandardMessage\n */\nexport type StandardMessageClass<\n TData,\n TWire,\n TType extends string,\n TVersion extends number,\n> = ReturnType<typeof createStandardMessage<TData, TWire, TType, TVersion>>;\n\n/**\n * Simplified message factory for messages with identical runtime and wire formats\n */\nexport function createSimpleMessage<\n TData,\n TType extends string,\n TVersion extends number,\n>(config: { messageType: TType; version: TVersion; schema: Type<any> }) {\n return createStandardMessage({\n messageType: config.messageType,\n version: config.version,\n schema: config.schema,\n encodeData: (data: TData) =>\n ({\n type: config.messageType,\n version: config.version,\n ...data,\n }) as any,\n decodeData: (decoded: any) => {\n const { type, version, ...data } = decoded;\n return data as TData;\n },\n });\n}\n\n/**\n * Message factory with field transformations - eliminates encodeData/decodeData duplication\n */\nexport function createMessageWithTransforms<\n TData,\n TWire = TData & { type: string; version: number },\n TType extends string = string,\n TVersion extends number = number,\n>(config: {\n messageType: TType;\n version: TVersion;\n schema: Type<any>;\n transforms?: Record<string, (value: any) => any>;\n normalizers?: Partial<Record<keyof TData, (input: any) => any>>;\n}) {\n return createStandardMessage({\n messageType: config.messageType,\n version: config.version,\n schema: config.schema,\n encodeData: (data: TData) => {\n const encoded: any = {\n type: config.messageType,\n version: config.version,\n };\n\n // Apply field transformations\n const dataObj = data as Record<string, any>;\n for (const [key, value] of Object.entries(dataObj)) {\n if (value !== undefined) {\n const transform = config.transforms?.[key];\n encoded[key] = transform ? transform(value) : value;\n }\n }\n\n return encoded as TWire;\n },\n decodeData: (decoded: any) => {\n // Apply normalizers to convert wire format to runtime format\n const normalizedData: any = { ...decoded };\n\n if (config.normalizers) {\n for (const [key, normalizer] of Object.entries(config.normalizers)) {\n if (\n key in normalizedData &&\n normalizer &&\n typeof normalizer === 'function' &&\n normalizedData[key] !== undefined\n ) {\n const normalizedValue = normalizer(normalizedData[key]);\n if (normalizedValue !== undefined) {\n normalizedData[key] = normalizedValue;\n }\n }\n }\n }\n\n // Remove type and version, return runtime data\n const { type, version, ...data } = normalizedData;\n return data as TData;\n },\n });\n}\n","import { TypeOf } from 'io-ts';\nimport {\n Uint8ArrayCodec,\n type TraceContext,\n TraceContextCodec,\n} from '../codecs';\nimport {\n buildMessageSchema,\n createStandardMessage,\n createStandardDecoder,\n} from './utils';\n\n/**\n * Handshake Request Runtime Data\n */\nexport interface HandshakeRequestData {\n challenge: Uint8Array;\n nonce: Uint8Array;\n traceContext?: TraceContext;\n}\n\n/**\n * Handshake Request Wire Format\n */\nexport interface HandshakeRequestWire {\n type: 'handshake';\n version: 1;\n challenge: string; // hex string\n nonce: string; // hex string\n traceContext?: TraceContext;\n}\n\n/**\n * Handshake Request Schema (built using Ultra-DRY utilities)\n */\nexport const HandshakeRequestSchema = buildMessageSchema('handshake', 1, {\n challenge: Uint8ArrayCodec,\n nonce: Uint8ArrayCodec,\n traceContext: TraceContextCodec,\n});\n\nexport type HandshakeRequest = TypeOf<typeof HandshakeRequestSchema>;\n\n/**\n * Handshake V1 Request Message Class (Ultra-DRY implementation)\n */\nexport const HandshakeV1RequestMessage = createStandardMessage({\n messageType: 'handshake' as const,\n version: 1 as const,\n schema: HandshakeRequestSchema,\n encodeData: (data: HandshakeRequestData): HandshakeRequestWire =>\n HandshakeRequestSchema.encode({\n type: 'handshake',\n version: 1,\n challenge: data.challenge,\n nonce: data.nonce,\n traceContext: data.traceContext,\n }),\n decodeData: createStandardDecoder<HandshakeRequestData>((decoded) => ({\n challenge: decoded.challenge,\n nonce: decoded.nonce,\n traceContext: decoded.traceContext,\n })),\n});\n","import { string, TypeOf } from 'io-ts';\nimport { buildMessageSchema, createSimpleMessage } from './utils';\n\n/**\n * Handshake Response Runtime Data\n */\nexport interface HandshakeResponseData {\n encapsulatedSharedSecret: string; // hex-encoded\n attestationDoc: string; // hex-encoded\n connectionId: string; // Server's connection ID for key derivation\n}\n\n/**\n * Handshake Response Wire Format\n */\nexport interface HandshakeResponseWire {\n type: 'handshake_response';\n version: 1;\n encapsulatedSharedSecret: string; // hex-encoded\n attestationDoc: string; // base64-encoded\n connectionId: string; // Server's connection ID for key derivation\n}\n\n/**\n * Handshake Response Schema (built using Ultra-DRY utilities)\n */\nexport const HandshakeResponseSchema = buildMessageSchema(\n 'handshake_response',\n 1,\n {\n encapsulatedSharedSecret: string,\n attestationDoc: string,\n connectionId: string,\n }\n);\n\nexport type HandshakeResponse = TypeOf<typeof HandshakeResponseSchema>;\n\n/**\n * Handshake V1 Response Message Class (Ultra-DRY implementation)\n */\nexport const HandshakeV1ResponseMessage = createSimpleMessage<\n HandshakeResponseData,\n 'handshake_response',\n 1\n>({\n messageType: 'handshake_response',\n version: 1,\n schema: HandshakeResponseSchema,\n});\n\n// HandshakeResponse naturally implements IMessageConstructor through its static properties\n","import type { Type } from 'io-ts';\n\n/**\n * Base secret share data (what gets encrypted)\n */\nexport interface SecretShareData {\n secretShare: string;\n signingAlgorithm: string;\n timestamp: number;\n nonce: string;\n}\n\n/**\n * Decrypted secret share with reconstructed keygen result\n */\nexport interface DecryptedSecretShare {\n keygenResult: any;\n signingAlgorithm: string;\n timestamp: number;\n nonce: string;\n}\n\n/**\n * Base interface for signing algorithm implementations\n */\nexport interface ISigningAlgorithm {\n readonly algorithmName: string;\n readonly version: number;\n readonly schema: Type<any>;\n\n createKeygenResultFromSecretShare(secretShare: string): any;\n createSignRequest(keygenResult: any, params: any): any;\n processSignResult(result: any): Uint8Array;\n}\n\n/**\n * Base signing algorithm class\n */\nexport abstract class BaseSigningAlgorithm implements ISigningAlgorithm {\n abstract readonly algorithmName: string;\n abstract readonly version: number;\n abstract readonly schema: Type<any>;\n\n abstract createKeygenResultFromSecretShare(secretShare: string): any;\n abstract createSignRequest(keygenResult: any, params: any): any;\n abstract processSignResult(result: any): Uint8Array;\n}\n","import { BaseSigningAlgorithm } from '../base';\nimport { intersection, literal, partial, type } from 'io-ts';\nimport { Uint32ArrayCodec } from '../../codecs';\n\n/**\n * ED25519 signing algorithm\n *\n * IMPORTANT: This uses Dynamic SDK's ExportableEd25519 implementation under the hood.\n * When you call getMPCSignatureScheme(SigningAlgorithm.ED25519), you get ExportableEd25519.\n *\n * Key characteristics:\n * - Uses sampleKey/receiveKey for keygen (one party samples, other receives)\n * - Can export private keys\n *\n * DERIVATION PATH CAVEAT:\n * - The schema accepts derivationPath for backwards compatibility\n * - However, ExportableEd25519 does NOT support BIP32/BIP44 derivation in signing\n * - If derivationPath is provided, it may be ignored or cause errors\n * - See: https://docs.sodot.dev/sodot-docs/mpc-api/key-management/exportable-ed25519-keys\n */\nexport interface Ed25519SignMessageSchema {\n signingAlgo: 'ed25519';\n derivationPath?: Uint32Array; // WARNING: Not supported by ExportableEd25519, kept for compatibility\n}\n\nexport class Ed25519SigningAlgorithm extends BaseSigningAlgorithm {\n readonly algorithmName = 'ed25519' as const;\n readonly version = 1;\n\n readonly schema = intersection([\n type({\n signingAlgo: literal('ed25519'),\n }),\n partial({\n derivationPath: Uint32ArrayCodec, // WARNING: Not supported by underlying ExportableEd25519\n }),\n ]);\n\n createKeygenResultFromSecretShare(secretShare: string): any {\n return {\n secretShare,\n pubkey: new Uint8Array(32), // Mock pubkey\n };\n }\n\n createSignRequest(keygenResult: any, params: any): any {\n return {\n secretShare: keygenResult.secretShare,\n ...params,\n };\n }\n\n processSignResult(_result: any): Uint8Array {\n return new Uint8Array(64);\n }\n}\n","import { BaseSigningAlgorithm } from '../base';\nimport { intersection, literal, partial, type } from 'io-ts';\nimport { Uint32ArrayCodec, Uint8ArrayCodec } from '../../codecs';\n\nexport interface BIP340SignMessageSchema {\n signingAlgo: 'bip340';\n derivationPath?: Uint32Array;\n tweak?: Uint8Array;\n}\n\nexport class BIP340SigningAlgorithm extends BaseSigningAlgorithm {\n readonly algorithmName = 'bip340' as const;\n readonly version = 1;\n\n readonly schema = intersection([\n type({\n signingAlgo: literal('bip340'),\n }),\n partial({\n derivationPath: Uint32ArrayCodec,\n tweak: Uint8ArrayCodec,\n }),\n ]);\n\n createKeygenResultFromSecretShare(secretShare: string): any {\n return {\n secretShare,\n pubkey: new Uint8Array(32), // Mock pubkey\n };\n }\n\n createSignRequest(keygenResult: any, params: any): any {\n return {\n secretShare: keygenResult.secretShare,\n ...params,\n };\n }\n\n processSignResult(_result: any): Uint8Array {\n return new Uint8Array(64);\n }\n}\n","import { BaseSigningAlgorithm } from '../base';\nimport { intersection, literal, partial, type, union } from 'io-ts';\nimport { Uint32ArrayCodec } from '../../codecs';\n\nexport interface EcdsaSignMessageSchema {\n signingAlgo: 'ecdsa';\n hashAlgo: 'sha256' | 'sha256d' | 'keccak256';\n derivationPath?: Uint32Array;\n}\n\nexport class EcdsaSigningAlgorithm extends BaseSigningAlgorithm {\n readonly algorithmName = 'ecdsa' as const;\n readonly version = 1;\n\n readonly schema = intersection([\n type({\n signingAlgo: literal('ecdsa'),\n }),\n partial({\n hashAlgo: union([\n literal('sha256'),\n literal('sha256d'),\n literal('keccak256'),\n ]),\n derivationPath: Uint32ArrayCodec,\n }),\n ]);\n\n createKeygenResultFromSecretShare(secretShare: string): any {\n return {\n secretShare,\n pubkey: {\n pubKeyAsHex: () => '0x' + '00'.repeat(33),\n serializeCompressed: () => new Uint8Array(33),\n serializeUncompressed: () => new Uint8Array(65),\n },\n };\n }\n\n createSignRequest(keygenResult: any, params: any): any {\n return {\n secretShare: keygenResult.secretShare,\n ...params,\n };\n }\n\n processSignResult(_result: any): Uint8Array {\n return new Uint8Array(64);\n }\n}\n","import { union, type Type } from 'io-ts';\nimport {\n Ed25519SigningAlgorithm,\n type Ed25519SignMessageSchema,\n} from './algorithms/Ed25519SigningAlgorithm';\nimport {\n BIP340SigningAlgorithm,\n type BIP340SignMessageSchema,\n} from './algorithms/BIP340SigningAlgorithm';\nimport {\n EcdsaSigningAlgorithm,\n type EcdsaSignMessageSchema,\n} from './algorithms/EcdsaSigningAlgorithm';\nimport type { ISigningAlgorithm } from './base';\n\n/**\n * 🎯 SINGLE SOURCE OF TRUTH - Add new algorithms here and everything else is automatic!\n * This is the ONLY place you need to add new signing algorithms\n *\n * Maps 1:1 with Dynamic SDK's SigningAlgorithm enum (ECDSA, ED25519, BIP340)\n * NOTE: ED25519 uses ExportableEd25519 implementation (no derivation support)\n */\nexport const SIGNING_ALGORITHM_CLASSES = {\n ed25519: Ed25519SigningAlgorithm,\n bip340: BIP340SigningAlgorithm,\n ecdsa: EcdsaSigningAlgorithm,\n} as const;\n\n/**\n * 📝 Explicit union type of all signing algorithm schemas\n * (Only other place you need to add new algorithms)\n */\nexport type AllSigningAlgorithmSchemas =\n | Ed25519SignMessageSchema\n | BIP340SignMessageSchema\n | EcdsaSignMessageSchema;\n\n// ========================================\n// 🤖 EVERYTHING BELOW IS AUTOMATICALLY DERIVED\n// ========================================\n\n/**\n * Derive signing algorithm name type from classes\n */\nexport type SigningAlgorithmName = keyof typeof SIGNING_ALGORITHM_CLASSES;\n\n/**\n * Derive runtime array of algorithm names from classes\n */\nexport const ALL_SIGNING_ALGORITHM_NAMES = Object.keys(\n SIGNING_ALGORITHM_CLASSES\n) as SigningAlgorithmName[];\n\n/**\n * Create algorithm instances (derived from classes)\n */\nexport const SIGNING_ALGORITHM_INSTANCES: Record<\n SigningAlgorithmName,\n ISigningAlgorithm\n> = {\n ed25519: new SIGNING_ALGORITHM_CLASSES.ed25519(),\n bip340: new SIGNING_ALGORITHM_CLASSES.bip340(),\n ecdsa: new SIGNING_ALGORITHM_CLASSES.ecdsa(),\n};\n\n/**\n * Create union schema (derived from instances)\n */\nexport const ALL_SIGNING_ALGORITHM_SCHEMA: Type<AllSigningAlgorithmSchemas> =\n (() => {\n const schemas = Object.values(SIGNING_ALGORITHM_INSTANCES).map(\n (instance) => instance.schema\n );\n\n if (schemas.length === 0) {\n throw new Error('No signing algorithms defined');\n }\n\n if (schemas.length === 1) {\n return schemas[0] as Type<AllSigningAlgorithmSchemas>;\n }\n\n return union([\n schemas[0],\n schemas[1],\n ...schemas.slice(2),\n ]) as Type<AllSigningAlgorithmSchemas>;\n })();\n\n/**\n * Helper type to extract algorithm-specific schema\n */\nexport type SigningAlgorithmSchemaFor<\n T extends AllSigningAlgorithmSchemas['signingAlgo'],\n> = Extract<AllSigningAlgorithmSchemas, { signingAlgo: T }>;\n\n/**\n * Utility to check if a string is a valid signing algorithm name\n */\nexport function isValidSigningAlgorithm(\n name: string\n): name is SigningAlgorithmName {\n return name in SIGNING_ALGORITHM_CLASSES;\n}\n\n/**\n * Create keygen result from secret share using algorithm-specific logic\n */\nexport function createKeygenResultFromSecretShare(\n algorithmName: SigningAlgorithmName,\n secretShare: string\n): any {\n const algorithm = SIGNING_ALGORITHM_INSTANCES[algorithmName];\n if (!algorithm) {\n throw new Error(`Unknown signing algorithm: ${algorithmName}`);\n }\n return algorithm.createKeygenResultFromSecretShare(secretShare);\n}\n","import {\n ALL_SIGNING_ALGORITHM_SCHEMA,\n type AllSigningAlgorithmSchemas,\n type SigningAlgorithmName,\n} from '../signing/allAlgorithms';\nimport { SigningAlgorithm } from '@dynamic-labs-wallet/core';\n\n/**\n * Algorithm configurations for complex properties\n * Maps Dynamic SDK enum values to our internal algorithm names\n */\nexport const ALGORITHMS = {\n [SigningAlgorithm.ECDSA]: {\n name: 'ecdsa' as const,\n dynamicEnum: SigningAlgorithm.ECDSA,\n className: 'Ecdsa' as const,\n requiresHashAlgo: true,\n supportsDerivationPath: true,\n supportsTweak: false,\n supportedHashAlgos: ['sha256', 'sha256d', 'keccak256'] as const,\n },\n [SigningAlgorithm.ED25519]: {\n name: 'ed25519' as const,\n dynamicEnum: SigningAlgorithm.ED25519,\n className: 'Ed25519' as const,\n requiresHashAlgo: false,\n supportsDerivationPath: true,\n supportsTweak: false,\n supportedHashAlgos: [] as const,\n },\n [SigningAlgorithm.BIP340]: {\n name: 'bip340' as const,\n dynamicEnum: SigningAlgorithm.BIP340,\n className: 'BIP340' as const,\n requiresHashAlgo: false,\n supportsDerivationPath: true,\n supportsTweak: true,\n supportedHashAlgos: [] as const,\n },\n // Note: SR25519 and ED25519_EXPORTABLE exist as native-level functions but are not\n // available via SigningAlgorithm enum or getMPCSignatureScheme API.\n // They require direct native API calls (sr25519Keygen, exportableEd25519SampleKey, etc.)\n} as const;\n\n/**\n * Type definitions - use Dynamic SDK's SigningAlgorithm enum\n */\nexport type HashAlgorithm = 'sha256' | 'sha256d' | 'keccak256';\n\n/**\n * Helper function to convert our internal algorithm names to Dynamic SDK enum values\n */\nexport function toDynamicSigningAlgorithm(\n algorithmName: SigningAlgorithmName\n): SigningAlgorithm {\n const algorithmConfig = Object.values(ALGORITHMS).find(\n (config) => config.name === algorithmName\n );\n if (!algorithmConfig) {\n throw new Error(`Unknown algorithm: ${algorithmName}`);\n }\n return algorithmConfig.dynamicEnum;\n}\n\n/**\n * Helper function to convert Dynamic SDK enum values to our internal algorithm names\n */\nexport function fromDynamicSigningAlgorithm(\n dynamicAlgorithm: SigningAlgorithm\n): SigningAlgorithmName {\n const algorithmConfig = ALGORITHMS[dynamicAlgorithm];\n if (!algorithmConfig) {\n throw new Error(`Unknown Dynamic SDK algorithm: ${dynamicAlgorithm}`);\n }\n return algorithmConfig.name;\n}\n\n/**\n * Union schema derived from algorithm instances (no more manual schema generation!)\n */\nexport const SignatureAlgoSchema = ALL_SIGNING_ALGORITHM_SCHEMA;\n\n/**\n * Export the union type for external use\n */\nexport type { AllSigningAlgorithmSchemas as SigningAlgorithmSchemas };\n","export const WebSocketCloseCode = {\n /** Normal, intentional closure. */\n NORMAL: 1000,\n /** Server-initiated idle timeout (enclave ping/pong). */\n IDLE_TIMEOUT: 1001,\n /** Abnormal closure — no close frame (network drop, etc.). */\n ABNORMAL: 1006,\n} as const;\n\nexport type WebSocketCloseCode =\n (typeof WebSocketCloseCode)[keyof typeof WebSocketCloseCode];\n","import { Type, failure, success, identity } from 'io-ts';\n\n/**\n * Codec for validating domain names without protocol or paths.\n * Allows optional port numbers.\n * Examples:\n * - example.com\n * - sub.example.com\n * - example.com:8080\n */\nexport const DomainCodec = new Type<string>(\n 'DomainCodec',\n (u): u is string => typeof u === 'string',\n (u, c) => {\n if (typeof u !== 'string') {\n return failure(u, c, 'Value must be a string');\n }\n\n // Domain regex pattern:\n // - Starts with alphanumeric or hyphen\n // - Can contain dots for subdomains\n // - Optional port number at the end\n // - No protocols or paths allowed\n const domainPattern =\n /^[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*(?::\\d{1,5})?$/;\n\n if (!domainPattern.test(u)) {\n return failure(u, c, 'Invalid domain format');\n }\n\n return success(u);\n },\n identity\n);\n","import { failure, success, Type } from 'io-ts';\nimport { bytesToHex, hexToBytes } from '@noble/hashes/utils.js';\n\nexport const Uint8ArrayOrHexCodec = new Type<\n Uint8Array | string, // A: The runtime type (the type you work with in your code)\n string, // O: The encoded output type (e.g., JSON representation)\n string | unknown // I: The input type (e.g., from JSON)\n>(\n 'Uint8ArrayOrHex', // The name of the codec\n (u): u is Uint8Array => u instanceof Uint8Array, // A type guard\n (u, c) => {\n // Handle Uint8Array input (already in correct format)\n if ((u as any) instanceof Uint8Array) {\n return success(u as unknown as Uint8Array);\n }\n\n // Handle string input (hex string)\n if (typeof u !== 'string') {\n return failure(u, c, 'Expected a hex string or Uint8Array');\n }\n\n try {\n // Remove any '0x' prefix if present\n const cleanHex = u.startsWith('0x') ? u.slice(2) : u;\n\n // Validate hex string (must be even length and contain only hex characters)\n if (cleanHex.length % 2 !== 0 || !/^[0-9a-fA-F]+$/.test(cleanHex)) {\n return failure(u, c, 'Invalid hex string format');\n }\n\n const decoded = hexToBytes(cleanHex);\n return success(decoded);\n } catch (e) {\n return failure(u, c, `Invalid hex string: ${e}`);\n }\n },\n // The `encode` function for converting back to the output type\n (a) => {\n if (typeof a === 'string') {\n return a;\n }\n return bytesToHex(a);\n }\n);\n","import { TypeOf, string } from 'io-ts';\nimport {\n Uint32ArrayCodec,\n Uint8ArrayCodec,\n type TraceContext,\n TraceContextCodec,\n OptionalStringCodec,\n EncryptedPayloadCodec,\n type EncryptedPayload,\n} from '../codecs';\nimport {\n HashAlgorithm,\n SignatureAlgoSchema,\n fromDynamicSigningAlgorithm,\n} from '../constants';\nimport { DomainCodec } from '../codecs/DomainCodec';\nimport {\n buildMessageSchema,\n createStandardMessage,\n createStandardDecoder,\n createComplexEncoder,\n} from './utils';\nimport { Uint8ArrayOrHexCodec } from '../codecs/Uint8ArrayOrHexCodec';\nimport { SigningAlgorithm } from '@dynamic-labs-wallet/core';\n\n/**\n * Sign Message Request Runtime Data\n */\nexport interface SignMessageRequestData {\n relayDomain: string;\n signingAlgo: SigningAlgorithm;\n hashAlgo?: HashAlgorithm;\n derivationPath?: Uint32Array;\n tweak?: Uint8Array;\n keyshare: EncryptedPayload;\n message: Uint8Array | string;\n roomUuid: string;\n userId?: string;\n environmentId?: string;\n traceContext?: TraceContext;\n}\n\n/**\n * Sign Message Request Wire Format\n */\nexport interface SignMessageRequestWire {\n type: 'signMessage';\n version: 1;\n relayDomain: string;\n signingAlgo: SigningAlgorithm;\n hashAlgo?: HashAlgorithm;\n derivationPath?: string; // hex string\n tweak?: string; // hex string\n keyshare: {\n salt: string; // hex string\n encryptedPayload: string; // hex string\n };\n message: string; // hex string\n roomUuid: string;\n userId?: string;\n environmentId?: string;\n traceContext?: TraceContext;\n}\n\n/**\n * Sign Message Request Schema - uses codecs that handle both formats automatically\n */\nexport const SignMessageRequestSchema = buildMessageSchema(\n 'signMessage',\n 1,\n {\n relayDomain: DomainCodec,\n keyshare: EncryptedPayloadCodec,\n message: Uint8ArrayOrHexCodec,\n roomUuid: string,\n userId: OptionalStringCodec,\n environmentId: OptionalStringCodec,\n traceContext: TraceContextCodec,\n },\n SignatureAlgoSchema\n);\n\nexport type SignMessageRequest = TypeOf<typeof SignMessageRequestSchema>;\n\n/**\n * Sign Message V1 Request Message Class - Clean implementation using createComplexEncoder\n */\nexport const SignMessageV1RequestMessage = createStandardMessage({\n messageType: 'signMessage' as const,\n version: 1 as const,\n schema: SignMessageRequestSchema,\n encodeData: createComplexEncoder('signMessage', 1, {\n signingAlgo: (value: SigningAlgorithm) =>\n fromDynamicSigningAlgorithm(value),\n derivationPath: (value: Uint32Array) => Uint32ArrayCodec.encode(value),\n tweak: (value: Uint8Array) => Uint8ArrayCodec.encode(value),\n keyshare: (value: EncryptedPayload) => EncryptedPayloadCodec.encode(value),\n message: (value: Uint8Array | string) => Uint8ArrayOrHexCodec.encode(value),\n }),\n decodeData: createStandardDecoder<SignMessageRequestData>((decoded) => ({\n relayDomain: decoded.relayDomain,\n signingAlgo: decoded.signingAlgo,\n hashAlgo: decoded.hashAlgo,\n derivationPath: decoded.derivationPath,\n tweak: decoded.tweak,\n keyshare: decoded.keyshare,\n message: decoded.message,\n roomUuid: decoded.roomUuid,\n userId: decoded.userId,\n environmentId: decoded.environmentId,\n traceContext: decoded.traceContext,\n })),\n});\n","import {\n type,\n string,\n union,\n undefined as undefinedType,\n unknown,\n TypeOf,\n} from 'io-ts';\n\n/**\n * WebSocket Error Type Codec\n */\nexport const WebSocketErrorTypeCodec = string; // Just use string directly\n\n/**\n * WebSocket Error Codec\n */\nexport const WebSocketErrorCodec = type({\n type: WebSocketErrorTypeCodec,\n message: string,\n details: union([unknown, undefinedType]), // Optional details field\n});\n\nexport type WebSocketErrorValidated = TypeOf<typeof WebSocketErrorCodec>;\n","import { TypeOf, union, undefined as undefinedType } from 'io-ts';\nimport {\n buildMessageSchema,\n createStandardMessage,\n createComplexEncoder,\n createStandardDecoder,\n} from './utils';\nimport { WebSocketError } from '../types';\nimport { WebSocketErrorCodec } from '../codecs/WebSocketErrorCodec';\nimport { Uint8ArrayOrHexCodec } from '../codecs/Uint8ArrayOrHexCodec';\n\n/**\n * Sign Message Response Runtime Data\n */\nexport interface SignMessageResponseData {\n signature?: Uint8Array; // The signature as byte array - present on success\n error?: WebSocketError; // Error details - present on failure\n}\n\n/**\n * Sign Message Response Wire Format\n */\nexport interface SignMessageResponseWire {\n type: 'signMessage_response';\n version: 1;\n signature?: string; // The signature (hex-encoded) - present on success\n error?: WebSocketError; // Error details - present on failure\n}\n\n/**\n * Sign Message Response Schema (built using Ultra-DRY utilities)\n * Schema expects wire format types (string for signature)\n */\nexport const SignMessageResponseSchema = buildMessageSchema(\n 'signMessage_response',\n 1,\n {\n signature: union([Uint8ArrayOrHexCodec, undefinedType]), // Codec handles both hex string and Uint8Array\n error: union([WebSocketErrorCodec, undefinedType]),\n }\n);\n\nexport type SignMessageResponse = TypeOf<typeof SignMessageResponseSchema>;\n\n/**\n * Sign Message V1 Response Message Class (Ultra-DRY implementation)\n */\nexport const SignMessageV1ResponseMessage = createStandardMessage<\n SignMessageResponseData,\n SignMessageResponseWire,\n 'signMessage_response',\n 1\n>({\n messageType: 'signMessage_response',\n version: 1,\n schema: SignMessageResponseSchema,\n encodeData: createComplexEncoder('signMessage_response', 1, {\n signature: (value: Uint8Array) => Uint8ArrayOrHexCodec.encode(value),\n }),\n decodeData: createStandardDecoder<SignMessageResponseData>((decoded) => ({\n signature: decoded.signature,\n error: decoded.error,\n })),\n});\n","import { union, string, undefined as undefinedType, TypeOf } from 'io-ts';\nimport { buildMessageSchema, createSimpleMessage } from './utils';\n\n/**\n * Connection Acknowledgment Request Runtime Data\n */\nexport interface ConnectionAckRequestData {\n connectionId?: string;\n}\n\n/**\n * Connection Acknowledgment Request Wire Format\n */\nexport interface ConnectionAckRequestWire {\n type: 'connection_ack';\n version: 1;\n connectionId?: string;\n}\n\n/**\n * Connection Acknowledgment Request Schema (built using Ultra-DRY utilities)\n */\nexport const ConnectionAckRequestSchema = buildMessageSchema(\n 'connection_ack',\n 1,\n {\n connectionId: union([string, undefinedType]), // Optional string connectionId\n }\n);\n\nexport type ConnectionAckRequest = TypeOf<typeof ConnectionAckRequestSchema>;\n\n/**\n * Connection Acknowledgment V1 Request Message Class (Ultra-DRY implementation)\n */\nexport const ConnectionAckV1RequestMessage = createSimpleMessage<\n ConnectionAckRequestData,\n 'connection_ack',\n 1\n>({\n messageType: 'connection_ack',\n version: 1,\n schema: ConnectionAckRequestSchema,\n});\n","import { literal, string, TypeOf } from 'io-ts';\nimport { buildMessageSchema, createSimpleMessage } from './utils';\n\n/**\n * Connection Acknowledgment Response Runtime Data\n */\nexport interface ConnectionAckResponseData {\n status: 'acknowledged';\n timestamp: string;\n}\n\n/**\n * Connection Acknowledgment Response Wire Format\n */\nexport interface ConnectionAckResponseWire {\n type: 'connection_ack_response';\n version: 1;\n status: 'acknowledged';\n timestamp: string;\n}\n\n/**\n * Connection Acknowledgment Response Schema (built using Ultra-DRY utilities)\n */\nexport const ConnectionAckResponseSchema = buildMessageSchema(\n 'connection_ack_response',\n 1,\n {\n status: literal('acknowledged'),\n timestamp: string, // ISO timestamp string\n }\n);\n\nexport type ConnectionAckResponse = TypeOf<typeof ConnectionAckResponseSchema>;\n\n/**\n * Connection Acknowledgment V1 Response Message Class (Ultra-DRY implementation)\n */\nexport const ConnectionAckV1ResponseMessage = createSimpleMessage<\n ConnectionAckResponseData,\n 'connection_ack_response',\n 1\n>({\n messageType: 'connection_ack_response',\n version: 1,\n schema: ConnectionAckResponseSchema,\n});\n","import { TypeOf, string, number, array, type, literal, union } from 'io-ts';\nimport {\n type TraceContext,\n TraceContextCodec,\n OptionalStringCodec,\n EncryptedPayloadCodec,\n type EncryptedPayload,\n} from '../codecs';\nimport { SigningAlgorithm } from '@dynamic-labs-wallet/core';\nimport { fromDynamicSigningAlgorithm } from '../constants';\nimport { DomainCodec } from '../codecs/DomainCodec';\nimport {\n buildMessageSchema,\n createStandardMessage,\n createStandardDecoder,\n createComplexEncoder,\n} from './utils';\n\n/**\n * Base keygen parameters common to all algorithms\n */\nconst BaseKeygenParamsCodec = type({\n relayDomain: DomainCodec,\n roomUuid: string,\n numParties: number,\n threshold: number,\n keygenInit: EncryptedPayloadCodec,\n keygenIds: array(string),\n userId: OptionalStringCodec,\n environmentId: OptionalStringCodec,\n traceContext: TraceContextCodec,\n});\n\n/**\n * ECDSA keygen parameters\n */\nconst EcdsaKeygenParamsCodec = type({\n ...BaseKeygenParamsCodec.props,\n signingAlgo: literal('ecdsa'),\n});\n\n/**\n * BIP340 keygen parameters\n */\nconst BIP340KeygenParamsCodec = type({\n ...BaseKeygenParamsCodec.props,\n signingAlgo: literal('bip340'),\n});\n\n/**\n * Discriminated union of all keygen algorithm parameters\n * Note: ED25519 uses separate SampleKey/ReceiveKey messages\n */\nconst KeygenAlgoParamsCodec = union([\n EcdsaKeygenParamsCodec,\n BIP340KeygenParamsCodec,\n]);\n\n/**\n * Keygen Request Runtime Data\n * Supports ECDSA and BIP340 algorithms only\n * Note: ED25519 uses separate SampleKeyV1Request/ReceiveKeyV1Request messages\n */\nexport interface KeygenRequestData {\n relayDomain: string;\n signingAlgo: SigningAlgorithm; // Dynamic SDK enum (ECDSA or BIP340 only)\n roomUuid: string;\n numParties: number;\n threshold: number;\n keygenInit: EncryptedPayload;\n keygenIds: string[];\n userId?: string;\n environmentId?: string;\n traceContext?: TraceContext;\n}\n\n/**\n * Keygen Request Wire Format\n * Supports ECDSA and BIP340 algorithms only\n * Note: ED25519 uses separate 'sampleKey'/'receiveKey' message types\n */\nexport interface KeygenRequestWire {\n type: 'keygen';\n version: 1;\n relayDomain: string;\n signingAlgo: SigningAlgorithm; // Encoded as lowercase string on wire via encoder\n roomUuid: string;\n numParties: number;\n threshold: number;\n keygenInit: {\n salt: string; // hex string\n encryptedPayload: string; // hex string\n };\n keygenIds: string[];\n userId?: string;\n environmentId?: string;\n traceContext?: TraceContext;\n}\n\n/**\n * Keygen Request Schema\n */\nexport const KeygenRequestSchema = buildMessageSchema(\n 'keygen',\n 1,\n {\n relayDomain: DomainCodec,\n roomUuid: string,\n numParties: number,\n threshold: number,\n keygenInit: EncryptedPayloadCodec,\n keygenIds: array(string),\n userId: OptionalStringCodec,\n environmentId: OptionalStringCodec,\n traceContext: TraceContextCodec,\n },\n KeygenAlgoParamsCodec\n);\n\nexport type KeygenRequest = TypeOf<typeof KeygenRequestSchema>;\n\n/**\n * Keygen V1 Request Message Class\n */\nexport const KeygenV1RequestMessage = createStandardMessage({\n messageType: 'keygen' as const,\n version: 1 as const,\n schema: KeygenRequestSchema,\n encodeData: createComplexEncoder('keygen', 1, {\n signingAlgo: (value: SigningAlgorithm) =>\n fromDynamicSigningAlgorithm(value),\n keygenInit: (value: EncryptedPayload) =>\n EncryptedPayloadCodec.encode(value),\n }),\n decodeData: createStandardDecoder<KeygenRequestData>((decoded) => ({\n relayDomain: decoded.relayDomain,\n signingAlgo: decoded.signingAlgo,\n roomUuid: decoded.roomUuid,\n numParties: decoded.numParties,\n threshold: decoded.threshold,\n keygenInit: decoded.keygenInit,\n keygenIds: decoded.keygenIds,\n userId: decoded.userId,\n environmentId: decoded.environmentId,\n traceContext: decoded.traceContext,\n })),\n});\n","import { TypeOf, union, undefined as undefinedType } from 'io-ts';\nimport {\n buildMessageSchema,\n createStandardMessage,\n createComplexEncoder,\n createStandardDecoder,\n} from './utils';\nimport { WebSocketError } from '../types';\nimport { WebSocketErrorCodec } from '../codecs/WebSocketErrorCodec';\nimport { EncryptedPayloadCodec, type EncryptedPayload } from '../codecs';\n\n/**\n * Keygen Response Runtime Data\n */\nexport interface KeygenResponseData {\n keygenResult?: EncryptedPayload; // Encrypted KeygenResult (pubkey + secretShare) - present on success\n error?: WebSocketError; // Error details - present on failure\n}\n\n/**\n * Keygen Response Wire Format\n */\nexport interface KeygenResponseWire {\n type: 'keygen_response';\n version: 1;\n keygenResult?: {\n salt: string; // hex string\n encryptedPayload: string; // hex string\n };\n error?: WebSocketError; // Error details - present on failure\n}\n\n/**\n * Keygen Response Schema\n */\nexport const KeygenResponseSchema = buildMessageSchema('keygen_response', 1, {\n keygenResult: union([EncryptedPayloadCodec, undefinedType]),\n error: union([WebSocketErrorCodec, undefinedType]),\n});\n\nexport type KeygenResponse = TypeOf<typeof KeygenResponseSchema>;\n\n/**\n * Keygen V1 Response Message Class\n */\nexport const KeygenV1ResponseMessage = createStandardMessage<\n KeygenResponseData,\n KeygenResponseWire,\n 'keygen_response',\n 1\n>({\n messageType: 'keygen_response',\n version: 1,\n schema: KeygenResponseSchema,\n encodeData: createComplexEncoder('keygen_response', 1, {\n keygenResult: (value: EncryptedPayload) =>\n EncryptedPayloadCodec.encode(value),\n }),\n decodeData: createStandardDecoder<KeygenResponseData>((decoded) => ({\n keygenResult: decoded.keygenResult,\n error: decoded.error,\n })),\n});\n","import { TypeOf, string, number, array, literal } from 'io-ts';\nimport {\n type TraceContext,\n TraceContextCodec,\n OptionalStringCodec,\n EncryptedPayloadCodec,\n type EncryptedPayload,\n} from '../codecs';\nimport { DomainCodec } from '../codecs/DomainCodec';\nimport {\n buildMessageSchema,\n createStandardMessage,\n createStandardDecoder,\n} from './utils';\n\n/**\n * ReceiveKey Request Runtime Data\n * Used for ExportableEd25519 key generation where one party receives the key\n */\nexport interface ReceiveKeyRequestData {\n relayDomain: string;\n signingAlgo: 'ed25519';\n roomUuid: string;\n numParties: number;\n threshold: number;\n keygenInit: EncryptedPayload;\n keygenIds: string[];\n userId?: string;\n environmentId?: string;\n traceContext?: TraceContext;\n}\n\n/**\n * ReceiveKey Request Wire Format\n */\nexport interface ReceiveKeyRequestWire {\n type: 'receiveKey';\n version: 1;\n relayDomain: string;\n signingAlgo: 'ed25519';\n roomUuid: string;\n numParties: number;\n threshold: number;\n keygenInit: {\n salt: string;\n encryptedPayload: string;\n };\n keygenIds: string[];\n userId?: string;\n environmentId?: string;\n traceContext?: TraceContext;\n}\n\n/**\n * ReceiveKey V1 Request Schema\n */\nexport const ReceiveKeyRequestSchema = buildMessageSchema('receiveKey', 1, {\n relayDomain: DomainCodec,\n signingAlgo: literal('ed25519'),\n roomUuid: string,\n numParties: number,\n threshold: number,\n keygenInit: EncryptedPayloadCodec,\n keygenIds: array(string),\n userId: OptionalStringCodec,\n environmentId: OptionalStringCodec,\n traceContext: TraceContextCodec,\n});\n\nexport type ReceiveKeyRequest = TypeOf<typeof ReceiveKeyRequestSchema>;\n\n/**\n * ReceiveKey V1 Request Message Class\n * Represents a request to receive an exportable ED25519 key from another party\n */\nexport const ReceiveKeyV1RequestMessage = createStandardMessage({\n messageType: 'receiveKey' as const,\n version: 1 as const,\n schema: ReceiveKeyRequestSchema,\n encodeData: (data: ReceiveKeyRequestData): ReceiveKeyRequestWire =>\n ReceiveKeyRequestSchema.encode({\n type: 'receiveKey',\n version: 1,\n ...data,\n }),\n decodeData: createStandardDecoder<ReceiveKeyRequestData>((decoded) => ({\n relayDomain: decoded.relayDomain,\n signingAlgo: decoded.signingAlgo,\n roomUuid: decoded.roomUuid,\n numParties: decoded.numParties,\n threshold: decoded.threshold,\n keygenInit: decoded.keygenInit,\n keygenIds: decoded.keygenIds,\n userId: decoded.userId,\n environmentId: decoded.environmentId,\n traceContext: decoded.traceContext,\n })),\n});\n","import { TypeOf, union, undefined as undefinedType } from 'io-ts';\nimport {\n buildMessageSchema,\n createStandardMessage,\n createComplexEncoder,\n createStandardDecoder,\n} from './utils';\nimport { WebSocketError } from '../types';\nimport { WebSocketErrorCodec } from '../codecs/WebSocketErrorCodec';\nimport { EncryptedPayloadCodec, type EncryptedPayload } from '../codecs';\n\n/**\n * ReceiveKey Response Runtime Data\n */\nexport interface ReceiveKeyResponseData {\n keygenResult?: EncryptedPayload; // Encrypted KeygenResult (pubkey + secretShare) - present on success\n error?: WebSocketError; // Error details - present on failure\n}\n\n/**\n * ReceiveKey Response Wire Format\n */\nexport interface ReceiveKeyResponseWire {\n type: 'receiveKey_response';\n version: 1;\n keygenResult?: {\n salt: string; // hex string\n encryptedPayload: string; // hex string\n };\n error?: WebSocketError; // Error details - present on failure\n}\n\n/**\n * ReceiveKey Response Schema\n */\nexport const ReceiveKeyResponseSchema = buildMessageSchema(\n 'receiveKey_response',\n 1,\n {\n keygenResult: union([EncryptedPayloadCodec, undefinedType]),\n error: union([WebSocketErrorCodec, undefinedType]),\n }\n);\n\nexport type ReceiveKeyResponse = TypeOf<typeof ReceiveKeyResponseSchema>;\n\n/**\n * ReceiveKey V1 Response Message Class\n */\nexport const ReceiveKeyV1ResponseMessage = createStandardMessage<\n ReceiveKeyResponseData,\n ReceiveKeyResponseWire,\n 'receiveKey_response',\n 1\n>({\n messageType: 'receiveKey_response',\n version: 1,\n schema: ReceiveKeyResponseSchema,\n encodeData: createComplexEncoder('receiveKey_response', 1, {\n keygenResult: (value: EncryptedPayload) =>\n EncryptedPayloadCodec.encode(value),\n }),\n decodeData: createStandardDecoder<ReceiveKeyResponseData>((decoded) => ({\n keygenResult: decoded.keygenResult,\n error: decoded.error,\n })),\n});\n","import { HandshakeV1RequestMessage } from './HandshakeV1Request';\nimport { HandshakeV1ResponseMessage } from './HandshakeV1Response';\nimport { SignMessageV1RequestMessage } from './SignMessageV1Request';\nimport { SignMessageV1ResponseMessage } from './SignMessageV1Response';\nimport { ConnectionAckV1RequestMessage } from './ConnectionAckV1Request';\nimport { ConnectionAckV1ResponseMessage } from './ConnectionAckV1Response';\nimport { KeygenV1RequestMessage } from './KeygenV1Request';\nimport { KeygenV1ResponseMessage } from './KeygenV1Response';\nimport { ReceiveKeyV1RequestMessage } from './ReceiveKeyV1Request';\nimport { ReceiveKeyV1ResponseMessage } from './ReceiveKeyV1Response';\n\n/**\n * 🎯 SINGLE SOURCE OF TRUTH - Add new messages here and everything else is automatic!\n * This is the ONLY place you need to add new message types\n */\nexport const ALL_MESSAGE_CLASSES = {\n 'handshake@1': HandshakeV1RequestMessage,\n 'handshake_response@1': HandshakeV1ResponseMessage,\n 'signMessage@1': SignMessageV1RequestMessage,\n 'signMessage_response@1': SignMessageV1ResponseMessage,\n 'connection_ack@1': ConnectionAckV1RequestMessage,\n 'connection_ack_response@1': ConnectionAckV1ResponseMessage,\n 'keygen@1': KeygenV1RequestMessage,\n 'keygen_response@1': KeygenV1ResponseMessage,\n 'receiveKey@1': ReceiveKeyV1RequestMessage,\n 'receiveKey_response@1': ReceiveKeyV1ResponseMessage,\n} as const;\n\n// ========================================\n// 🤖 EVERYTHING BELOW IS AUTOMATICALLY DERIVED\n// ========================================\n\n/**\n * Derive message type union from classes\n */\nexport type AllMessageTypes = keyof typeof ALL_MESSAGE_CLASSES;\n\n/**\n * Derive runtime array of message keys from classes\n */\nexport const ALL_MESSAGE_KEYS = Object.keys(\n ALL_MESSAGE_CLASSES\n) as AllMessageTypes[];\n\n/**\n * Get message class by type and version (derived from single source)\n */\nexport function getMessageClass(type: string, version: number) {\n const key = `${type}@${version}` as AllMessageTypes;\n const MessageClass = ALL_MESSAGE_CLASSES[key];\n\n if (!MessageClass) {\n throw new Error(`Unknown message type: ${type} version ${version}`);\n }\n\n return MessageClass;\n}\n\n/**\n * Type-safe check if message type exists\n */\nexport function isValidMessageType(type: string, version: number): boolean {\n const key = `${type}@${version}`;\n return key in ALL_MESSAGE_CLASSES;\n}\n\n/**\n * Get all supported message types and versions\n */\nexport function getAllSupportedMessages(): Array<{\n type: string;\n version: number;\n}> {\n return ALL_MESSAGE_KEYS.map((key) => {\n const [type, versionStr] = key.split('@');\n return { type, version: parseInt(versionStr, 10) };\n });\n}\n\n/**\n * Helper to extract message type and version from key\n */\nexport function parseMessageKey(key: AllMessageTypes): {\n type: string;\n version: number;\n} {\n const [type, versionStr] = key.split('@');\n return { type, version: parseInt(versionStr, 10) };\n}\n","import { either } from 'fp-ts';\nimport { IMessage } from './base';\nimport { getMessageClass, getAllSupportedMessages } from './allMessages';\n\n/**\n * Ultra-DRY Message Registry - everything is derived, no registration needed\n */\nexport class MessageRegistry {\n private static instance: MessageRegistry;\n\n private constructor() {}\n\n static getInstance(): MessageRegistry {\n if (!MessageRegistry.instance) {\n MessageRegistry.instance = new MessageRegistry();\n }\n return MessageRegistry.instance;\n }\n\n /**\n * Get a message class by type and version (derived from single source)\n */\n getMessageClass(type: string, version: number) {\n try {\n return getMessageClass(type, version);\n } catch {\n return undefined;\n }\n }\n\n /**\n * Create a message instance from wire data (using derived message classes)\n */\n decode(wireData: any): either.Either<string, IMessage> {\n if (!wireData || typeof wireData !== 'object') {\n return { _tag: 'Left', left: 'Invalid wire data: must be an object' };\n }\n\n const { type, version } = wireData;\n if (!type || !version) {\n return {\n _tag: 'Left',\n left: 'Invalid wire data: missing type or version',\n };\n }\n\n const MessageClass = this.getMessageClass(type, version);\n if (!MessageClass) {\n return { _tag: 'Left', left: `Unknown message type: ${type}@${version}` };\n }\n\n const result = MessageClass.decode(wireData);\n if (either.isLeft(result)) {\n return {\n _tag: 'Left',\n left: `Decode error: ${result.left.map((e) => e.message).join(', ')}`,\n };\n }\n\n return { _tag: 'Right', right: result.right };\n }\n\n /**\n * Encode a message to wire format\n */\n encode(message: IMessage): any {\n return message.encode();\n }\n\n /**\n * Get all registered message types (derived from single source)\n */\n getRegisteredTypes(): string[] {\n return getAllSupportedMessages().map(\n ({ type, version }) => `${type}@${version}`\n );\n }\n}\n\n// Export singleton instance\nexport const messageRegistry = MessageRegistry.getInstance();\n","/**\n * Asserts that a value is defined (not null or undefined)\n * @throws Error if value is null or undefined\n */\nexport function assertDefined<T>(\n value: T | null | undefined,\n message?: string\n): asserts value is T {\n if (value === null || value === undefined) {\n throw new Error(message ?? 'Value must be defined');\n }\n}\n\n/**\n * Asserts that a value is not null\n * @throws Error if value is null\n */\nexport function assertNotNull<T>(\n value: T | null,\n message?: string\n): asserts value is T {\n if (value === null) {\n throw new Error(message ?? 'Value must not be null');\n }\n}\n\n/**\n * Returns a value if it is defined, otherwise throws an error\n * @throws Error if value is null or undefined\n */\nexport function getDefined<T>(\n value: T | null | undefined,\n message?: string\n): T {\n assertDefined(value, message);\n return value;\n}\n","import { ml_kem768 } from '@noble/post-quantum/ml-kem.js';\nimport { assertNotNull } from '../utils/assertDefined';\n\nexport const generateMlKem768Keypair = (): {\n encapsulationKey: Uint8Array;\n decapsulationKey: Uint8Array;\n} => {\n try {\n const keys = ml_kem768.keygen();\n assertNotNull(keys.publicKey, 'Encapsulation key must be defined');\n assertNotNull(keys.secretKey, 'Decapsulation key must be defined');\n return {\n encapsulationKey: keys.publicKey,\n decapsulationKey: keys.secretKey,\n };\n } catch (error) {\n throw new Error(\n `Failed to generate ML-KEM-768 keypair: ${error instanceof Error ? error.message : String(error)}`\n );\n }\n};\n","import { ml_kem768 } from '@noble/post-quantum/ml-kem.js';\n\nexport const encapsulateMlKem768 = (\n encapsulationKey: Uint8Array\n): { cipherText: Uint8Array; sharedSecret: Uint8Array } => {\n return ml_kem768.encapsulate(encapsulationKey);\n};\n","import { ml_kem768 } from '@noble/post-quantum/ml-kem.js';\n\nexport const decapsulateMlKem768 = (\n decapsulationKey: Uint8Array,\n cipherText: Uint8Array\n): Uint8Array => {\n return ml_kem768.decapsulate(cipherText, decapsulationKey);\n};\n","import { hkdf } from '@noble/hashes/hkdf.js';\nimport { sha256 } from '@noble/hashes/sha2.js';\n\nexport const AES_256_GCM_KEY_SIZE = 32; // 256 bits\nexport const AES_256_GCM_NONCE_SIZE = 12; // 96 bits\nexport const AES_256_GCM_TAG_SIZE = 16; // 128 bits\nexport const HKDF_SALT_SIZE = 32; // 256 bits\n\n/**\n * Encryption purpose enum to prevent typos and ensure consistency\n */\nexport enum EncryptionPurpose {\n KEYSHARE = 'keyshare',\n KEYGEN_INIT = 'keygen_init',\n KEYGEN_RESULT = 'keygen_result',\n TEST = 'test', // For testing purposes\n}\n\n/**\n * Derive AES-256 key from ML-KEM shared secret using HKDF\n * Following NIST SP 800-56C recommendations\n */\nexport function deriveAESKey(\n sharedSecret: Uint8Array,\n salt: Uint8Array,\n info: string\n): Uint8Array {\n const infoBytes = new TextEncoder().encode(info);\n return hkdf(sha256, sharedSecret, salt, infoBytes, AES_256_GCM_KEY_SIZE);\n}\n\n/**\n * Create standardized context info for HKDF\n */\nexport function createKeyDerivationInfo(\n purpose: EncryptionPurpose,\n connectionId: string,\n version: number = 1\n): string {\n return `forward-mpc-${purpose}-v${version}-${connectionId}`;\n}\n","import { gcm } from '@noble/ciphers/aes';\nimport { randomBytes } from '@noble/hashes/utils.js';\nimport {\n deriveAESKey,\n createKeyDerivationInfo,\n EncryptionPurpose,\n} from './keyDerivation';\nimport type { EncryptedPayload } from '../codecs/EncryptedPayloadCodec';\n\n// Constants for cryptographic parameters\nconst HKDF_SALT_SIZE = 32; // 256-bit salt for HKDF\nconst AES_GCM_NONCE_SIZE = 12; // Standard AES-GCM nonce size (96 bits)\nconst MIN_SHARED_SECRET_SIZE = 32; // Minimum 256-bit shared secret\n\n/**\n * Options for encrypting a payload\n */\nexport interface EncryptPayloadOptions {\n /** The data to encrypt (will be JSON stringified) */\n payload: unknown;\n /** ML-KEM shared secret from handshake (min 32 bytes) */\n sharedSecret: Uint8Array;\n /** Unique connection identifier (non-empty) */\n connectionId: string;\n /** Purpose for HKDF context (prevents key reuse across contexts) */\n purpose: EncryptionPurpose;\n}\n\n/**\n * Generic payload encryption using AES-256-GCM with ML-KEM derived key\n *\n * @param options - Encryption options\n * @returns Encrypted payload with salt and encrypted data\n * @throws Error if inputs are invalid or encryption fails\n */\nexport function encryptPayload(\n options: EncryptPayloadOptions\n): EncryptedPayload {\n const { payload, sharedSecret, connectionId, purpose } = options;\n // Validate inputs\n if (!sharedSecret || sharedSecret.length < MIN_SHARED_SECRET_SIZE) {\n throw new Error(\n `Invalid shared secret: must be at least ${MIN_SHARED_SECRET_SIZE} bytes`\n );\n }\n if (!connectionId || connectionId.trim().length === 0) {\n throw new Error('Invalid connectionId: must be non-empty string');\n }\n\n // Generate random salt for HKDF\n const salt = randomBytes(HKDF_SALT_SIZE);\n\n // Derive AES key using HKDF with connection-specific context\n const info = createKeyDerivationInfo(purpose, connectionId);\n const aesKey = deriveAESKey(sharedSecret, salt, info);\n\n // Encrypt with AES-256-GCM\n const nonce = randomBytes(AES_GCM_NONCE_SIZE);\n const aes256Gcm = gcm(aesKey, nonce);\n const plaintext = new TextEncoder().encode(JSON.stringify(payload));\n const ciphertext = aes256Gcm.encrypt(plaintext);\n\n // Combine nonce + ciphertext for single payload\n const encryptedPayload = new Uint8Array(nonce.length + ciphertext.length);\n encryptedPayload.set(nonce, 0);\n encryptedPayload.set(ciphertext, nonce.length);\n\n // Clear sensitive data from memory\n aesKey.fill(0);\n\n return { salt, encryptedPayload };\n}\n\n/**\n * Options for decrypting a payload\n */\nexport interface DecryptPayloadOptions {\n /** Encrypted payload with salt and encrypted data */\n encrypted: EncryptedPayload;\n /** ML-KEM shared secret from handshake (min 32 bytes) */\n sharedSecret: Uint8Array;\n /** Unique connection identifier (non-empty) */\n connectionId: string;\n /** Purpose for HKDF context (must match encryption) */\n purpose: EncryptionPurpose;\n}\n\n/**\n * Generic payload decryption using AES-256-GCM with ML-KEM derived key\n *\n * @param options - Decryption options\n * @returns Decrypted and parsed JSON data\n * @throws Error if inputs are invalid or decryption fails\n */\nexport function decryptPayload<T = any>(options: DecryptPayloadOptions): T {\n const { encrypted, sharedSecret, connectionId, purpose } = options;\n // Validate inputs\n if (!sharedSecret || sharedSecret.length < MIN_SHARED_SECRET_SIZE) {\n throw new Error(\n `Invalid shared secret: must be at least ${MIN_SHARED_SECRET_SIZE} bytes`\n );\n }\n if (!connectionId || connectionId.trim().length === 0) {\n throw new Error('Invalid connectionId: must be non-empty string');\n }\n if (\n !encrypted.encryptedPayload ||\n encrypted.encryptedPayload.length < AES_GCM_NONCE_SIZE\n ) {\n throw new Error(\n `Invalid encrypted payload: must be at least ${AES_GCM_NONCE_SIZE} bytes`\n );\n }\n\n // Derive the same AES key using HKDF\n const info = createKeyDerivationInfo(purpose, connectionId);\n const aesKey = deriveAESKey(sharedSecret, encrypted.salt, info);\n\n // Extract nonce and ciphertext\n const nonce = encrypted.encryptedPayload.slice(0, AES_GCM_NONCE_SIZE);\n const ciphertext = encrypted.encryptedPayload.slice(AES_GCM_NONCE_SIZE);\n\n // Decrypt with AES-256-GCM\n const aes256Gcm = gcm(aesKey, nonce);\n const plaintext = aes256Gcm.decrypt(ciphertext);\n\n // Parse JSON data\n const decryptedText = new TextDecoder().decode(plaintext);\n const data = JSON.parse(decryptedText);\n\n // Clear sensitive data from memory\n aesKey.fill(0);\n\n return data;\n}\n","import { bytesToHex, randomBytes } from '@noble/hashes/utils.js';\nimport { encryptPayload } from './payloadEncryption';\nimport { EncryptionPurpose } from './keyDerivation';\nimport type { EncryptedPayload } from '../codecs/EncryptedPayloadCodec';\nimport type { SigningAlgorithmName } from '../signing/allAlgorithms';\n\n/**\n * Encrypt keyshare using AES-256-GCM with ML-KEM derived key\n *\n * @param keyshare - The keyshare object from Dynamic Wallet SDK\n * @param sharedSecret - ML-KEM shared secret from handshake\n * @param connectionId - Unique connection identifier\n * @param signingAlgorithm - Algorithm name for context\n * @returns Encrypted keyshare with salt and encrypted payload\n */\nexport function encryptKeyshare(\n keyshare: any,\n sharedSecret: Uint8Array,\n connectionId: string,\n signingAlgorithm: SigningAlgorithmName\n): EncryptedPayload {\n // Prepare keyshare data for encryption\n const keyshareData = {\n keyshare,\n signingAlgorithm,\n timestamp: Date.now(),\n nonce: bytesToHex(randomBytes(16)),\n };\n\n return encryptPayload({\n payload: keyshareData,\n sharedSecret,\n connectionId,\n purpose: EncryptionPurpose.KEYSHARE,\n });\n}\n","import { encryptPayload, decryptPayload } from './payloadEncryption';\nimport { EncryptionPurpose } from './keyDerivation';\nimport type { EncryptedPayload } from '../codecs/EncryptedPayloadCodec';\n\n/**\n * Encrypt keygen init data (keygenId + keygenSecret)\n *\n * @param keygenInit - The keygen init object with keygenId and keygenSecret\n * @param sharedSecret - ML-KEM shared secret from handshake\n * @param connectionId - Unique connection identifier\n * @returns Encrypted keygen init with salt and encrypted payload\n * @throws Error if keygenInit contains empty or invalid fields\n */\nexport function encryptKeygenInit(\n keygenInit: { keygenId: string; keygenSecret: string },\n sharedSecret: Uint8Array,\n connectionId: string\n): EncryptedPayload {\n // Validate keygenInit fields\n if (!keygenInit.keygenId || keygenInit.keygenId.trim().length === 0) {\n throw new Error('Invalid keygenInit: keygenId must be non-empty string');\n }\n if (!keygenInit.keygenSecret || keygenInit.keygenSecret.trim().length === 0) {\n throw new Error(\n 'Invalid keygenInit: keygenSecret must be non-empty string'\n );\n }\n\n return encryptPayload({\n payload: keygenInit,\n sharedSecret,\n connectionId,\n purpose: EncryptionPurpose.KEYGEN_INIT,\n });\n}\n\n/**\n * Decrypt keygen result (pubkey + secretShare)\n *\n * @param encrypted - Encrypted keygen result from server\n * @param sharedSecret - ML-KEM shared secret from handshake\n * @param connectionId - Unique connection identifier\n * @returns Decrypted keygen result with pubkey and secretShare\n * @throws Error if decrypted data is missing required fields or has invalid types\n */\nexport function decryptKeygenResult(\n encrypted: EncryptedPayload,\n sharedSecret: Uint8Array,\n connectionId: string\n): { pubkey: Uint8Array; secretShare: string } {\n const data = decryptPayload({\n encrypted,\n sharedSecret,\n connectionId,\n purpose: EncryptionPurpose.KEYGEN_RESULT,\n });\n\n // Validate decrypted data structure\n if (!data.pubkey || !Array.isArray(data.pubkey)) {\n throw new Error('Invalid keygen result: pubkey must be an array');\n }\n if (\n !data.secretShare ||\n typeof data.secretShare !== 'string' ||\n data.secretShare.trim().length === 0\n ) {\n throw new Error(\n 'Invalid keygen result: secretShare must be non-empty string'\n );\n }\n\n // Convert pubkey array back to Uint8Array\n return {\n pubkey: new Uint8Array(data.pubkey),\n secretShare: data.secretShare,\n };\n}\n","import type { SigningAlgorithmName } from './allAlgorithms';\nimport type { ISigningAlgorithm } from './base';\nimport {\n SIGNING_ALGORITHM_INSTANCES,\n ALL_SIGNING_ALGORITHM_NAMES,\n isValidSigningAlgorithm,\n} from './allAlgorithms';\n\n/**\n * Ultra-simple registry - everything is derived, no registration needed\n */\nclass SigningAlgorithmRegistry {\n /**\n * Get algorithm instance (derived from single source of truth)\n */\n get(name: SigningAlgorithmName): ISigningAlgorithm {\n const algorithm = SIGNING_ALGORITHM_INSTANCES[name];\n if (!algorithm) {\n throw new Error(`Unknown signing algorithm: ${name}`);\n }\n return algorithm;\n }\n\n /**\n * Type-safe check if algorithm exists\n */\n has(name: string): name is SigningAlgorithmName {\n return isValidSigningAlgorithm(name);\n }\n\n /**\n * Get all algorithm names (derived from classes)\n */\n getAllNames(): SigningAlgorithmName[] {\n return ALL_SIGNING_ALGORITHM_NAMES;\n }\n\n /**\n * Get all algorithm instances (derived from classes)\n */\n getAllInstances(): Record<SigningAlgorithmName, ISigningAlgorithm> {\n return SIGNING_ALGORITHM_INSTANCES;\n }\n}\n\nexport const signingAlgorithmRegistry = new SigningAlgorithmRegistry();\n"]}
package/dist/index.d.cts CHANGED
@@ -675,6 +675,16 @@ declare function fromDynamicSigningAlgorithm(dynamicAlgorithm: SigningAlgorithm)
675
675
  */
676
676
  declare const SignatureAlgoSchema: io_ts.Type<AllSigningAlgorithmSchemas, AllSigningAlgorithmSchemas, unknown>;
677
677
 
678
+ declare const WebSocketCloseCode: {
679
+ /** Normal, intentional closure. */
680
+ readonly NORMAL: 1000;
681
+ /** Server-initiated idle timeout (enclave ping/pong). */
682
+ readonly IDLE_TIMEOUT: 1001;
683
+ /** Abnormal closure — no close frame (network drop, etc.). */
684
+ readonly ABNORMAL: 1006;
685
+ };
686
+ type WebSocketCloseCode = (typeof WebSocketCloseCode)[keyof typeof WebSocketCloseCode];
687
+
678
688
  /**
679
689
  * Sign Message Request Runtime Data
680
690
  */
@@ -1600,4 +1610,4 @@ declare class SigningAlgorithmRegistry {
1600
1610
  }
1601
1611
  declare const signingAlgorithmRegistry: SigningAlgorithmRegistry;
1602
1612
 
1603
- export { AES_256_GCM_KEY_SIZE, AES_256_GCM_NONCE_SIZE, AES_256_GCM_TAG_SIZE, ALGORITHMS, ALL_MESSAGE_CLASSES, ALL_MESSAGE_KEYS, ALL_SIGNING_ALGORITHM_NAMES, ALL_SIGNING_ALGORITHM_SCHEMA, type AllMessageTypes, type AllSigningAlgorithmSchemas, BIP340SigningAlgorithm, BaseMessage, BaseSigningAlgorithm, type BaseWebSocketMessage, type ConnectionAckRequest, type ConnectionAckRequestData, ConnectionAckRequestSchema, type ConnectionAckRequestWire, type ConnectionAckResponse, type ConnectionAckResponseData, ConnectionAckResponseSchema, type ConnectionAckResponseWire, ConnectionAckV1RequestMessage, ConnectionAckV1ResponseMessage, type DecryptPayloadOptions, type DecryptedSecretShare, EcdsaSigningAlgorithm, Ed25519SigningAlgorithm, type EncryptPayloadOptions, type EncryptedPayload, EncryptedPayloadCodec, EncryptionPurpose, type ErrorResponse, HKDF_SALT_SIZE, type HandshakeRequest, type HandshakeRequestData, HandshakeRequestSchema, type HandshakeRequestWire, type HandshakeResponse, type HandshakeResponseData, HandshakeResponseSchema, type HandshakeResponseWire, HandshakeV1RequestMessage, HandshakeV1ResponseMessage, type HashAlgorithm, type IMessage, type ISigningAlgorithm, type KeygenRequest, type KeygenRequestData, KeygenRequestSchema, type KeygenRequestWire, type KeygenResponse, type KeygenResponseData, KeygenResponseSchema, type KeygenResponseWire, KeygenV1RequestMessage, KeygenV1ResponseMessage, MessageRegistry, OptionalStringCodec, type ReceiveKeyRequest, type ReceiveKeyRequestData, ReceiveKeyRequestSchema, type ReceiveKeyRequestWire, type ReceiveKeyResponse, type ReceiveKeyResponseData, ReceiveKeyResponseSchema, type ReceiveKeyResponseWire, ReceiveKeyV1RequestMessage, ReceiveKeyV1ResponseMessage, SIGNING_ALGORITHM_CLASSES, SIGNING_ALGORITHM_INSTANCES, type SecretShareData, type SignMessageRequest, type SignMessageRequestData, SignMessageRequestSchema, type SignMessageRequestWire, type SignMessageResponse, type SignMessageResponseData, SignMessageResponseSchema, type SignMessageResponseWire, SignMessageV1RequestMessage, SignMessageV1ResponseMessage, SignatureAlgoSchema, type SigningAlgorithmName, type SigningAlgorithmSchemaFor, type AllSigningAlgorithmSchemas as SigningAlgorithmSchemas, type TraceContext, TraceContextCodec, Uint32ArrayCodec, Uint8ArrayCodec, type WebSocketConnectionInfo, type WebSocketError, WebSocketErrorType, assertDefined, assertNotNull, createKeyDerivationInfo, createKeygenResultFromSecretShare, decapsulateMlKem768, decryptKeygenResult, decryptPayload, deriveAESKey, encapsulateMlKem768, encryptKeygenInit, encryptKeyshare, encryptPayload, fromDynamicSigningAlgorithm, generateMlKem768Keypair, getAllSupportedMessages, getDefined, getMessageClass, isValidMessageType, isValidSigningAlgorithm, messageRegistry, parseMessageKey, signingAlgorithmRegistry, toDynamicSigningAlgorithm };
1613
+ export { AES_256_GCM_KEY_SIZE, AES_256_GCM_NONCE_SIZE, AES_256_GCM_TAG_SIZE, ALGORITHMS, ALL_MESSAGE_CLASSES, ALL_MESSAGE_KEYS, ALL_SIGNING_ALGORITHM_NAMES, ALL_SIGNING_ALGORITHM_SCHEMA, type AllMessageTypes, type AllSigningAlgorithmSchemas, BIP340SigningAlgorithm, BaseMessage, BaseSigningAlgorithm, type BaseWebSocketMessage, type ConnectionAckRequest, type ConnectionAckRequestData, ConnectionAckRequestSchema, type ConnectionAckRequestWire, type ConnectionAckResponse, type ConnectionAckResponseData, ConnectionAckResponseSchema, type ConnectionAckResponseWire, ConnectionAckV1RequestMessage, ConnectionAckV1ResponseMessage, type DecryptPayloadOptions, type DecryptedSecretShare, EcdsaSigningAlgorithm, Ed25519SigningAlgorithm, type EncryptPayloadOptions, type EncryptedPayload, EncryptedPayloadCodec, EncryptionPurpose, type ErrorResponse, HKDF_SALT_SIZE, type HandshakeRequest, type HandshakeRequestData, HandshakeRequestSchema, type HandshakeRequestWire, type HandshakeResponse, type HandshakeResponseData, HandshakeResponseSchema, type HandshakeResponseWire, HandshakeV1RequestMessage, HandshakeV1ResponseMessage, type HashAlgorithm, type IMessage, type ISigningAlgorithm, type KeygenRequest, type KeygenRequestData, KeygenRequestSchema, type KeygenRequestWire, type KeygenResponse, type KeygenResponseData, KeygenResponseSchema, type KeygenResponseWire, KeygenV1RequestMessage, KeygenV1ResponseMessage, MessageRegistry, OptionalStringCodec, type ReceiveKeyRequest, type ReceiveKeyRequestData, ReceiveKeyRequestSchema, type ReceiveKeyRequestWire, type ReceiveKeyResponse, type ReceiveKeyResponseData, ReceiveKeyResponseSchema, type ReceiveKeyResponseWire, ReceiveKeyV1RequestMessage, ReceiveKeyV1ResponseMessage, SIGNING_ALGORITHM_CLASSES, SIGNING_ALGORITHM_INSTANCES, type SecretShareData, type SignMessageRequest, type SignMessageRequestData, SignMessageRequestSchema, type SignMessageRequestWire, type SignMessageResponse, type SignMessageResponseData, SignMessageResponseSchema, type SignMessageResponseWire, SignMessageV1RequestMessage, SignMessageV1ResponseMessage, SignatureAlgoSchema, type SigningAlgorithmName, type SigningAlgorithmSchemaFor, type AllSigningAlgorithmSchemas as SigningAlgorithmSchemas, type TraceContext, TraceContextCodec, Uint32ArrayCodec, Uint8ArrayCodec, WebSocketCloseCode, type WebSocketConnectionInfo, type WebSocketError, WebSocketErrorType, assertDefined, assertNotNull, createKeyDerivationInfo, createKeygenResultFromSecretShare, decapsulateMlKem768, decryptKeygenResult, decryptPayload, deriveAESKey, encapsulateMlKem768, encryptKeygenInit, encryptKeyshare, encryptPayload, fromDynamicSigningAlgorithm, generateMlKem768Keypair, getAllSupportedMessages, getDefined, getMessageClass, isValidMessageType, isValidSigningAlgorithm, messageRegistry, parseMessageKey, signingAlgorithmRegistry, toDynamicSigningAlgorithm };