@dynamic-labs-wallet/forward-mpc-shared 0.1.1 → 0.2.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
@@ -96,6 +96,10 @@ var TraceContextCodec = ioTs.union([
96
96
  TraceContextSchema,
97
97
  ioTs.undefined
98
98
  ]);
99
+ var OptionalStringCodec = ioTs.union([
100
+ ioTs.string,
101
+ ioTs.undefined
102
+ ]);
99
103
  function buildMessageSchema(messageType, version, additionalFields = {}, ...additionalSchemas) {
100
104
  const schema = ioTs.type({
101
105
  type: ioTs.literal(messageType),
@@ -469,6 +473,8 @@ var SignMessageRequestSchema = buildMessageSchema("signMessage", 1, {
469
473
  keyshare: EncryptedKeyshareCodec,
470
474
  message: Uint8ArrayOrHexCodec,
471
475
  roomUuid: ioTs.string,
476
+ userId: OptionalStringCodec,
477
+ environmentId: OptionalStringCodec,
472
478
  traceContext: TraceContextCodec
473
479
  }, SignatureAlgoSchema);
474
480
  var SignMessageV1RequestMessage = createStandardMessage({
@@ -491,6 +497,8 @@ var SignMessageV1RequestMessage = createStandardMessage({
491
497
  keyshare: decoded.keyshare,
492
498
  message: decoded.message,
493
499
  roomUuid: decoded.roomUuid,
500
+ userId: decoded.userId,
501
+ environmentId: decoded.environmentId,
494
502
  traceContext: decoded.traceContext
495
503
  }))
496
504
  });
@@ -803,6 +811,7 @@ exports.HandshakeResponseSchema = HandshakeResponseSchema;
803
811
  exports.HandshakeV1RequestMessage = HandshakeV1RequestMessage;
804
812
  exports.HandshakeV1ResponseMessage = HandshakeV1ResponseMessage;
805
813
  exports.MessageRegistry = MessageRegistry;
814
+ exports.OptionalStringCodec = OptionalStringCodec;
806
815
  exports.SIGNING_ALGORITHM_CLASSES = SIGNING_ALGORITHM_CLASSES;
807
816
  exports.SIGNING_ALGORITHM_INSTANCES = SIGNING_ALGORITHM_INSTANCES;
808
817
  exports.SignMessageRequestSchema = SignMessageRequestSchema;
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/types.ts","../src/messages/base.ts","../src/codecs/Uint8ArrayCodec.ts","../src/codecs/Uint32ArrayCodec.ts","../src/codecs/EncryptedKeyshareCodec.ts","../src/codecs/TraceContextCodec.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/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/keyshareEncryption.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","EncryptedKeyshareCodec","type","salt","encryptedPayload","TraceContextSchema","partial","traceId","string","startTime","number","TraceContextCodec","union","undefinedType","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","SignMessageV1RequestMessage","WebSocketErrorTypeCodec","WebSocketErrorCodec","details","unknown","SignMessageResponseSchema","signature","error","SignMessageV1ResponseMessage","ConnectionAckRequestSchema","ConnectionAckV1RequestMessage","ConnectionAckResponseSchema","status","timestamp","ConnectionAckV1ResponseMessage","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","deriveAESKey","sharedSecret","info","infoBytes","TextEncoder","hkdf","sha256","createKeyDerivationInfo","purpose","encryptKeyshare","signingAlgorithm","randomBytes","keyshareInfo","aesKey","keyshareData","Date","now","aes256Gcm","gcm","plaintext","JSON","stringify","ciphertext","encrypt","set","fill","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 * Encrypted keyshare structure for secure transmission\n * Contains HKDF salt and AES-256-GCM encrypted payload\n */\nexport const EncryptedKeyshareCodec = type({\n salt: Uint8ArrayCodec,\n encryptedPayload: Uint8ArrayCodec,\n});\n\nexport type EncryptedKeyshare = TypeOf<typeof EncryptedKeyshareCodec>;\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\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\nexport interface Ed25519SignMessageSchema {\n signingAlgo: 'ed25519';\n derivationPath?: Uint32Array;\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,\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 */\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} 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} from '../codecs';\nimport {\n HashAlgorithm,\n SignatureAlgoSchema,\n fromDynamicSigningAlgorithm,\n} from '../constants';\nimport { DomainCodec } from '../codecs/DomainCodec';\nimport {\n EncryptedKeyshareCodec,\n type EncryptedKeyshare,\n} from '../codecs/EncryptedKeyshareCodec';\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: EncryptedKeyshare;\n message: Uint8Array | string;\n roomUuid: 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 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: EncryptedKeyshareCodec,\n message: Uint8ArrayOrHexCodec,\n roomUuid: string,\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: EncryptedKeyshare) =>\n EncryptedKeyshareCodec.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 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 { HandshakeV1RequestMessage } from './HandshakeV1Request';\nimport { HandshakeV1ResponseMessage } from './HandshakeV1Response';\nimport { SignMessageV1RequestMessage } from './SignMessageV1Request';\nimport { SignMessageV1ResponseMessage } from './SignMessageV1Response';\nimport { ConnectionAckV1RequestMessage } from './ConnectionAckV1Request';\nimport { ConnectionAckV1ResponseMessage } from './ConnectionAckV1Response';\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} 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 * 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: 'keyshare' | 'hmac',\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 { bytesToHex, randomBytes } from '@noble/hashes/utils.js';\nimport { deriveAESKey, createKeyDerivationInfo } from './keyDerivation';\nimport type { EncryptedKeyshare } from '../codecs/EncryptedKeyshareCodec';\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 async function encryptKeyshare(\n keyshare: any,\n sharedSecret: Uint8Array,\n connectionId: string,\n signingAlgorithm: SigningAlgorithmName\n): Promise<EncryptedKeyshare> {\n // Generate random salt for HKDF\n const salt = randomBytes(32);\n\n // Derive AES key using HKDF with connection-specific context\n const keyshareInfo = createKeyDerivationInfo('keyshare', connectionId);\n const aesKey = deriveAESKey(sharedSecret, salt, keyshareInfo);\n\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 // Encrypt with AES-256-GCM\n const nonce = randomBytes(12);\n const aes256Gcm = gcm(aesKey, nonce);\n const plaintext = new TextEncoder().encode(JSON.stringify(keyshareData));\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","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/EncryptedKeyshareCodec.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/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/keyshareEncryption.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","EncryptedKeyshareCodec","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","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","deriveAESKey","sharedSecret","info","infoBytes","TextEncoder","hkdf","sha256","createKeyDerivationInfo","purpose","encryptKeyshare","signingAlgorithm","randomBytes","keyshareInfo","aesKey","keyshareData","Date","now","aes256Gcm","gcm","plaintext","JSON","stringify","ciphertext","encrypt","set","fill","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 * Encrypted keyshare structure for secure transmission\n * Contains HKDF salt and AES-256-GCM encrypted payload\n */\nexport const EncryptedKeyshareCodec = type({\n salt: Uint8ArrayCodec,\n encryptedPayload: Uint8ArrayCodec,\n});\n\nexport type EncryptedKeyshare = TypeOf<typeof EncryptedKeyshareCodec>;\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\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\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\nexport interface Ed25519SignMessageSchema {\n signingAlgo: 'ed25519';\n derivationPath?: Uint32Array;\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,\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 */\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} 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} from '../codecs';\nimport {\n HashAlgorithm,\n SignatureAlgoSchema,\n fromDynamicSigningAlgorithm,\n} from '../constants';\nimport { DomainCodec } from '../codecs/DomainCodec';\nimport {\n EncryptedKeyshareCodec,\n type EncryptedKeyshare,\n} from '../codecs/EncryptedKeyshareCodec';\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: EncryptedKeyshare;\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: EncryptedKeyshareCodec,\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: EncryptedKeyshare) =>\n EncryptedKeyshareCodec.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 { HandshakeV1RequestMessage } from './HandshakeV1Request';\nimport { HandshakeV1ResponseMessage } from './HandshakeV1Response';\nimport { SignMessageV1RequestMessage } from './SignMessageV1Request';\nimport { SignMessageV1ResponseMessage } from './SignMessageV1Response';\nimport { ConnectionAckV1RequestMessage } from './ConnectionAckV1Request';\nimport { ConnectionAckV1ResponseMessage } from './ConnectionAckV1Response';\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} 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 * 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: 'keyshare' | 'hmac',\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 { bytesToHex, randomBytes } from '@noble/hashes/utils.js';\nimport { deriveAESKey, createKeyDerivationInfo } from './keyDerivation';\nimport type { EncryptedKeyshare } from '../codecs/EncryptedKeyshareCodec';\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 async function encryptKeyshare(\n keyshare: any,\n sharedSecret: Uint8Array,\n connectionId: string,\n signingAlgorithm: SigningAlgorithmName\n): Promise<EncryptedKeyshare> {\n // Generate random salt for HKDF\n const salt = randomBytes(32);\n\n // Derive AES key using HKDF with connection-specific context\n const keyshareInfo = createKeyDerivationInfo('keyshare', connectionId);\n const aesKey = deriveAESKey(sharedSecret, salt, keyshareInfo);\n\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 // Encrypt with AES-256-GCM\n const nonce = randomBytes(12);\n const aes256Gcm = gcm(aesKey, nonce);\n const plaintext = new TextEncoder().encode(JSON.stringify(keyshareData));\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","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
@@ -233,6 +233,11 @@ declare const TraceContextCodec: io_ts.UnionC<[io_ts.PartialC<{
233
233
  startTime: io_ts.NumberC;
234
234
  }>, io_ts.UndefinedC]>;
235
235
 
236
+ /**
237
+ * Optional String Codec - validates string or undefined
238
+ */
239
+ declare const OptionalStringCodec: io_ts.UnionC<[io_ts.StringC, io_ts.UndefinedC]>;
240
+
236
241
  /**
237
242
  * Base secret share data (what gets encrypted)
238
243
  */
@@ -436,6 +441,8 @@ interface SignMessageRequestData {
436
441
  keyshare: EncryptedKeyshare;
437
442
  message: Uint8Array | string;
438
443
  roomUuid: string;
444
+ userId?: string;
445
+ environmentId?: string;
439
446
  traceContext?: TraceContext;
440
447
  }
441
448
  /**
@@ -455,6 +462,8 @@ interface SignMessageRequestWire {
455
462
  };
456
463
  message: string;
457
464
  roomUuid: string;
465
+ userId?: string;
466
+ environmentId?: string;
458
467
  traceContext?: TraceContext;
459
468
  }
460
469
  /**
@@ -1046,4 +1055,4 @@ declare class SigningAlgorithmRegistry {
1046
1055
  }
1047
1056
  declare const signingAlgorithmRegistry: SigningAlgorithmRegistry;
1048
1057
 
1049
- 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 DecryptedSecretShare, EcdsaSigningAlgorithm, Ed25519SigningAlgorithm, type EncryptedKeyshare, EncryptedKeyshareCodec, 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, MessageRegistry, 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, deriveAESKey, encapsulateMlKem768, encryptKeyshare, fromDynamicSigningAlgorithm, generateMlKem768Keypair, getAllSupportedMessages, getDefined, getMessageClass, isValidMessageType, isValidSigningAlgorithm, messageRegistry, parseMessageKey, signingAlgorithmRegistry, toDynamicSigningAlgorithm };
1058
+ 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 DecryptedSecretShare, EcdsaSigningAlgorithm, Ed25519SigningAlgorithm, type EncryptedKeyshare, EncryptedKeyshareCodec, 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, MessageRegistry, OptionalStringCodec, 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, deriveAESKey, encapsulateMlKem768, encryptKeyshare, fromDynamicSigningAlgorithm, generateMlKem768Keypair, getAllSupportedMessages, getDefined, getMessageClass, isValidMessageType, isValidSigningAlgorithm, messageRegistry, parseMessageKey, signingAlgorithmRegistry, toDynamicSigningAlgorithm };
package/dist/index.d.ts CHANGED
@@ -233,6 +233,11 @@ declare const TraceContextCodec: io_ts.UnionC<[io_ts.PartialC<{
233
233
  startTime: io_ts.NumberC;
234
234
  }>, io_ts.UndefinedC]>;
235
235
 
236
+ /**
237
+ * Optional String Codec - validates string or undefined
238
+ */
239
+ declare const OptionalStringCodec: io_ts.UnionC<[io_ts.StringC, io_ts.UndefinedC]>;
240
+
236
241
  /**
237
242
  * Base secret share data (what gets encrypted)
238
243
  */
@@ -436,6 +441,8 @@ interface SignMessageRequestData {
436
441
  keyshare: EncryptedKeyshare;
437
442
  message: Uint8Array | string;
438
443
  roomUuid: string;
444
+ userId?: string;
445
+ environmentId?: string;
439
446
  traceContext?: TraceContext;
440
447
  }
441
448
  /**
@@ -455,6 +462,8 @@ interface SignMessageRequestWire {
455
462
  };
456
463
  message: string;
457
464
  roomUuid: string;
465
+ userId?: string;
466
+ environmentId?: string;
458
467
  traceContext?: TraceContext;
459
468
  }
460
469
  /**
@@ -1046,4 +1055,4 @@ declare class SigningAlgorithmRegistry {
1046
1055
  }
1047
1056
  declare const signingAlgorithmRegistry: SigningAlgorithmRegistry;
1048
1057
 
1049
- 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 DecryptedSecretShare, EcdsaSigningAlgorithm, Ed25519SigningAlgorithm, type EncryptedKeyshare, EncryptedKeyshareCodec, 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, MessageRegistry, 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, deriveAESKey, encapsulateMlKem768, encryptKeyshare, fromDynamicSigningAlgorithm, generateMlKem768Keypair, getAllSupportedMessages, getDefined, getMessageClass, isValidMessageType, isValidSigningAlgorithm, messageRegistry, parseMessageKey, signingAlgorithmRegistry, toDynamicSigningAlgorithm };
1058
+ 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 DecryptedSecretShare, EcdsaSigningAlgorithm, Ed25519SigningAlgorithm, type EncryptedKeyshare, EncryptedKeyshareCodec, 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, MessageRegistry, OptionalStringCodec, 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, deriveAESKey, encapsulateMlKem768, encryptKeyshare, fromDynamicSigningAlgorithm, generateMlKem768Keypair, getAllSupportedMessages, getDefined, getMessageClass, isValidMessageType, isValidSigningAlgorithm, messageRegistry, parseMessageKey, signingAlgorithmRegistry, toDynamicSigningAlgorithm };
package/dist/index.js CHANGED
@@ -94,6 +94,10 @@ var TraceContextCodec = union([
94
94
  TraceContextSchema,
95
95
  _undefined
96
96
  ]);
97
+ var OptionalStringCodec = union([
98
+ string,
99
+ _undefined
100
+ ]);
97
101
  function buildMessageSchema(messageType, version, additionalFields = {}, ...additionalSchemas) {
98
102
  const schema = type({
99
103
  type: literal(messageType),
@@ -467,6 +471,8 @@ var SignMessageRequestSchema = buildMessageSchema("signMessage", 1, {
467
471
  keyshare: EncryptedKeyshareCodec,
468
472
  message: Uint8ArrayOrHexCodec,
469
473
  roomUuid: string,
474
+ userId: OptionalStringCodec,
475
+ environmentId: OptionalStringCodec,
470
476
  traceContext: TraceContextCodec
471
477
  }, SignatureAlgoSchema);
472
478
  var SignMessageV1RequestMessage = createStandardMessage({
@@ -489,6 +495,8 @@ var SignMessageV1RequestMessage = createStandardMessage({
489
495
  keyshare: decoded.keyshare,
490
496
  message: decoded.message,
491
497
  roomUuid: decoded.roomUuid,
498
+ userId: decoded.userId,
499
+ environmentId: decoded.environmentId,
492
500
  traceContext: decoded.traceContext
493
501
  }))
494
502
  });
@@ -777,6 +785,6 @@ var SigningAlgorithmRegistry = class SigningAlgorithmRegistry2 {
777
785
  };
778
786
  var signingAlgorithmRegistry = new SigningAlgorithmRegistry();
779
787
 
780
- 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, BIP340SigningAlgorithm, BaseMessage, BaseSigningAlgorithm, ConnectionAckRequestSchema, ConnectionAckResponseSchema, ConnectionAckV1RequestMessage, ConnectionAckV1ResponseMessage, EcdsaSigningAlgorithm, Ed25519SigningAlgorithm, EncryptedKeyshareCodec, HKDF_SALT_SIZE, HandshakeRequestSchema, HandshakeResponseSchema, HandshakeV1RequestMessage, HandshakeV1ResponseMessage, MessageRegistry, SIGNING_ALGORITHM_CLASSES, SIGNING_ALGORITHM_INSTANCES, SignMessageRequestSchema, SignMessageResponseSchema, SignMessageV1RequestMessage, SignMessageV1ResponseMessage, SignatureAlgoSchema, TraceContextCodec, Uint32ArrayCodec, Uint8ArrayCodec, WebSocketErrorType, assertDefined, assertNotNull, createKeyDerivationInfo, createKeygenResultFromSecretShare, decapsulateMlKem768, deriveAESKey, encapsulateMlKem768, encryptKeyshare, fromDynamicSigningAlgorithm, generateMlKem768Keypair, getAllSupportedMessages, getDefined, getMessageClass, isValidMessageType, isValidSigningAlgorithm, messageRegistry, parseMessageKey, signingAlgorithmRegistry, toDynamicSigningAlgorithm };
788
+ 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, BIP340SigningAlgorithm, BaseMessage, BaseSigningAlgorithm, ConnectionAckRequestSchema, ConnectionAckResponseSchema, ConnectionAckV1RequestMessage, ConnectionAckV1ResponseMessage, EcdsaSigningAlgorithm, Ed25519SigningAlgorithm, EncryptedKeyshareCodec, HKDF_SALT_SIZE, HandshakeRequestSchema, HandshakeResponseSchema, HandshakeV1RequestMessage, HandshakeV1ResponseMessage, MessageRegistry, OptionalStringCodec, SIGNING_ALGORITHM_CLASSES, SIGNING_ALGORITHM_INSTANCES, SignMessageRequestSchema, SignMessageResponseSchema, SignMessageV1RequestMessage, SignMessageV1ResponseMessage, SignatureAlgoSchema, TraceContextCodec, Uint32ArrayCodec, Uint8ArrayCodec, WebSocketErrorType, assertDefined, assertNotNull, createKeyDerivationInfo, createKeygenResultFromSecretShare, decapsulateMlKem768, deriveAESKey, encapsulateMlKem768, encryptKeyshare, fromDynamicSigningAlgorithm, generateMlKem768Keypair, getAllSupportedMessages, getDefined, getMessageClass, isValidMessageType, isValidSigningAlgorithm, messageRegistry, parseMessageKey, signingAlgorithmRegistry, toDynamicSigningAlgorithm };
781
789
  //# sourceMappingURL=index.js.map
782
790
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/types.ts","../src/messages/base.ts","../src/codecs/Uint8ArrayCodec.ts","../src/codecs/Uint32ArrayCodec.ts","../src/codecs/EncryptedKeyshareCodec.ts","../src/codecs/TraceContextCodec.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/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/keyshareEncryption.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","EncryptedKeyshareCodec","type","salt","encryptedPayload","TraceContextSchema","partial","traceId","string","startTime","number","TraceContextCodec","union","undefinedType","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","SignMessageV1RequestMessage","WebSocketErrorTypeCodec","WebSocketErrorCodec","details","unknown","SignMessageResponseSchema","signature","error","SignMessageV1ResponseMessage","ConnectionAckRequestSchema","ConnectionAckV1RequestMessage","ConnectionAckResponseSchema","status","timestamp","ConnectionAckV1ResponseMessage","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","deriveAESKey","sharedSecret","info","infoBytes","TextEncoder","hkdf","sha256","createKeyDerivationInfo","purpose","encryptKeyshare","signingAlgorithm","randomBytes","keyshareInfo","aesKey","keyshareData","Date","now","aes256Gcm","gcm","plaintext","JSON","stringify","ciphertext","encrypt","set","fill","SigningAlgorithmRegistry","get","has","getAllNames","getAllInstances","signingAlgorithmRegistry"],"mappings":"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","file":"index.js","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 * Encrypted keyshare structure for secure transmission\n * Contains HKDF salt and AES-256-GCM encrypted payload\n */\nexport const EncryptedKeyshareCodec = type({\n salt: Uint8ArrayCodec,\n encryptedPayload: Uint8ArrayCodec,\n});\n\nexport type EncryptedKeyshare = TypeOf<typeof EncryptedKeyshareCodec>;\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\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\nexport interface Ed25519SignMessageSchema {\n signingAlgo: 'ed25519';\n derivationPath?: Uint32Array;\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,\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 */\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} 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} from '../codecs';\nimport {\n HashAlgorithm,\n SignatureAlgoSchema,\n fromDynamicSigningAlgorithm,\n} from '../constants';\nimport { DomainCodec } from '../codecs/DomainCodec';\nimport {\n EncryptedKeyshareCodec,\n type EncryptedKeyshare,\n} from '../codecs/EncryptedKeyshareCodec';\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: EncryptedKeyshare;\n message: Uint8Array | string;\n roomUuid: 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 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: EncryptedKeyshareCodec,\n message: Uint8ArrayOrHexCodec,\n roomUuid: string,\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: EncryptedKeyshare) =>\n EncryptedKeyshareCodec.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 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 { HandshakeV1RequestMessage } from './HandshakeV1Request';\nimport { HandshakeV1ResponseMessage } from './HandshakeV1Response';\nimport { SignMessageV1RequestMessage } from './SignMessageV1Request';\nimport { SignMessageV1ResponseMessage } from './SignMessageV1Response';\nimport { ConnectionAckV1RequestMessage } from './ConnectionAckV1Request';\nimport { ConnectionAckV1ResponseMessage } from './ConnectionAckV1Response';\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} 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 * 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: 'keyshare' | 'hmac',\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 { bytesToHex, randomBytes } from '@noble/hashes/utils.js';\nimport { deriveAESKey, createKeyDerivationInfo } from './keyDerivation';\nimport type { EncryptedKeyshare } from '../codecs/EncryptedKeyshareCodec';\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 async function encryptKeyshare(\n keyshare: any,\n sharedSecret: Uint8Array,\n connectionId: string,\n signingAlgorithm: SigningAlgorithmName\n): Promise<EncryptedKeyshare> {\n // Generate random salt for HKDF\n const salt = randomBytes(32);\n\n // Derive AES key using HKDF with connection-specific context\n const keyshareInfo = createKeyDerivationInfo('keyshare', connectionId);\n const aesKey = deriveAESKey(sharedSecret, salt, keyshareInfo);\n\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 // Encrypt with AES-256-GCM\n const nonce = randomBytes(12);\n const aes256Gcm = gcm(aesKey, nonce);\n const plaintext = new TextEncoder().encode(JSON.stringify(keyshareData));\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","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/EncryptedKeyshareCodec.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/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/keyshareEncryption.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","EncryptedKeyshareCodec","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","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","deriveAESKey","sharedSecret","info","infoBytes","TextEncoder","hkdf","sha256","createKeyDerivationInfo","purpose","encryptKeyshare","signingAlgorithm","randomBytes","keyshareInfo","aesKey","keyshareData","Date","now","aes256Gcm","gcm","plaintext","JSON","stringify","ciphertext","encrypt","set","fill","SigningAlgorithmRegistry","get","has","getAllNames","getAllInstances","signingAlgorithmRegistry"],"mappings":"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","file":"index.js","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 * Encrypted keyshare structure for secure transmission\n * Contains HKDF salt and AES-256-GCM encrypted payload\n */\nexport const EncryptedKeyshareCodec = type({\n salt: Uint8ArrayCodec,\n encryptedPayload: Uint8ArrayCodec,\n});\n\nexport type EncryptedKeyshare = TypeOf<typeof EncryptedKeyshareCodec>;\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\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\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\nexport interface Ed25519SignMessageSchema {\n signingAlgo: 'ed25519';\n derivationPath?: Uint32Array;\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,\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 */\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} 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} from '../codecs';\nimport {\n HashAlgorithm,\n SignatureAlgoSchema,\n fromDynamicSigningAlgorithm,\n} from '../constants';\nimport { DomainCodec } from '../codecs/DomainCodec';\nimport {\n EncryptedKeyshareCodec,\n type EncryptedKeyshare,\n} from '../codecs/EncryptedKeyshareCodec';\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: EncryptedKeyshare;\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: EncryptedKeyshareCodec,\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: EncryptedKeyshare) =>\n EncryptedKeyshareCodec.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 { HandshakeV1RequestMessage } from './HandshakeV1Request';\nimport { HandshakeV1ResponseMessage } from './HandshakeV1Response';\nimport { SignMessageV1RequestMessage } from './SignMessageV1Request';\nimport { SignMessageV1ResponseMessage } from './SignMessageV1Response';\nimport { ConnectionAckV1RequestMessage } from './ConnectionAckV1Request';\nimport { ConnectionAckV1ResponseMessage } from './ConnectionAckV1Response';\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} 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 * 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: 'keyshare' | 'hmac',\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 { bytesToHex, randomBytes } from '@noble/hashes/utils.js';\nimport { deriveAESKey, createKeyDerivationInfo } from './keyDerivation';\nimport type { EncryptedKeyshare } from '../codecs/EncryptedKeyshareCodec';\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 async function encryptKeyshare(\n keyshare: any,\n sharedSecret: Uint8Array,\n connectionId: string,\n signingAlgorithm: SigningAlgorithmName\n): Promise<EncryptedKeyshare> {\n // Generate random salt for HKDF\n const salt = randomBytes(32);\n\n // Derive AES key using HKDF with connection-specific context\n const keyshareInfo = createKeyDerivationInfo('keyshare', connectionId);\n const aesKey = deriveAESKey(sharedSecret, salt, keyshareInfo);\n\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 // Encrypt with AES-256-GCM\n const nonce = randomBytes(12);\n const aes256Gcm = gcm(aesKey, nonce);\n const plaintext = new TextEncoder().encode(JSON.stringify(keyshareData));\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","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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@dynamic-labs-wallet/forward-mpc-shared",
3
- "version": "0.1.1",
3
+ "version": "0.2.0",
4
4
  "description": "Shared types and schemas for Forward MPC Client",
5
5
  "type": "module",
6
6
  "sideEffects": false,