@bcts/frost-hubert 1.0.0-alpha.22 → 1.0.0-beta.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.
Files changed (174) hide show
  1. package/dist/bin/frost.cjs +347 -75
  2. package/dist/bin/frost.cjs.map +1 -1
  3. package/dist/bin/frost.mjs +347 -75
  4. package/dist/bin/frost.mjs.map +1 -1
  5. package/dist/busy-DkM2jAIZ.mjs +27 -0
  6. package/dist/busy-DkM2jAIZ.mjs.map +1 -0
  7. package/dist/busy-EZU7EKr6.cjs +38 -0
  8. package/dist/busy-EZU7EKr6.cjs.map +1 -0
  9. package/dist/{chunk-uaV2rQ02.cjs → chunk-CZWwpsFl.cjs} +22 -32
  10. package/dist/{chunk-ClPoSABd.mjs → chunk-CjcI7cDX.mjs} +6 -12
  11. package/dist/cmd/index.cjs +46 -43
  12. package/dist/cmd/index.d.cts +2 -4
  13. package/dist/cmd/index.d.mts +2 -4
  14. package/dist/cmd/index.mjs +7 -6
  15. package/dist/cmd-Bw9_i2_f.cjs +130 -0
  16. package/dist/cmd-Bw9_i2_f.cjs.map +1 -0
  17. package/dist/cmd-CS1uJtuD.mjs +113 -0
  18. package/dist/cmd-CS1uJtuD.mjs.map +1 -0
  19. package/dist/common-CvH6dFvQ.mjs +282 -0
  20. package/dist/common-CvH6dFvQ.mjs.map +1 -0
  21. package/dist/common-DUWvtc08.mjs +96 -0
  22. package/dist/common-DUWvtc08.mjs.map +1 -0
  23. package/dist/common-lKP5EzHy.cjs +372 -0
  24. package/dist/common-lKP5EzHy.cjs.map +1 -0
  25. package/dist/common-lThIvJmZ.cjs +114 -0
  26. package/dist/common-lThIvJmZ.cjs.map +1 -0
  27. package/dist/dkg/index.cjs +245 -7
  28. package/dist/dkg/index.cjs.map +1 -0
  29. package/dist/dkg/index.d.cts +2 -2
  30. package/dist/dkg/index.d.mts +2 -2
  31. package/dist/dkg/index.mjs +238 -2
  32. package/dist/dkg/index.mjs.map +1 -0
  33. package/dist/finalize-BRgJK-Xv.cjs +402 -0
  34. package/dist/finalize-BRgJK-Xv.cjs.map +1 -0
  35. package/dist/finalize-BfLgzn8f.cjs +303 -0
  36. package/dist/finalize-BfLgzn8f.cjs.map +1 -0
  37. package/dist/finalize-CNTDj6aS.mjs +389 -0
  38. package/dist/finalize-CNTDj6aS.mjs.map +1 -0
  39. package/dist/finalize-EC3ikHQq.mjs +252 -0
  40. package/dist/finalize-EC3ikHQq.mjs.map +1 -0
  41. package/dist/finalize-IA01t_Qq.mjs +290 -0
  42. package/dist/finalize-IA01t_Qq.mjs.map +1 -0
  43. package/dist/finalize-UPyI1yb1.cjs +265 -0
  44. package/dist/finalize-UPyI1yb1.cjs.map +1 -0
  45. package/dist/frost/index.cjs +8 -9
  46. package/dist/frost/index.cjs.map +1 -1
  47. package/dist/frost/index.mjs +2 -3
  48. package/dist/frost/index.mjs.map +1 -1
  49. package/dist/{group-invite-Dz1Jmiky.d.cts → index-B3c-80VS.d.cts} +25 -2
  50. package/dist/index-B3c-80VS.d.cts.map +1 -0
  51. package/dist/{index-CcvTi5EA.d.cts → index-BgbSGpxn.d.mts} +102 -80
  52. package/dist/index-BgbSGpxn.d.mts.map +1 -0
  53. package/dist/{registry-impl-CE76sTXQ.d.cts → index-C8QeHNwa.d.cts} +46 -2
  54. package/dist/index-C8QeHNwa.d.cts.map +1 -0
  55. package/dist/{group-invite-Wk9CIbHL.d.mts → index-D3QTWkEm.d.mts} +25 -2
  56. package/dist/index-D3QTWkEm.d.mts.map +1 -0
  57. package/dist/{registry-impl-BETn_lEO.d.mts → index-DVbWyOs7.d.mts} +46 -2
  58. package/dist/index-DVbWyOs7.d.mts.map +1 -0
  59. package/dist/{index-DNCPeLNM.d.mts → index-F1iNEAJR.d.cts} +102 -80
  60. package/dist/index-F1iNEAJR.d.cts.map +1 -0
  61. package/dist/index.cjs +72 -68
  62. package/dist/index.cjs.map +1 -1
  63. package/dist/index.d.cts +4 -7
  64. package/dist/index.d.cts.map +1 -1
  65. package/dist/index.d.mts +4 -7
  66. package/dist/index.d.mts.map +1 -1
  67. package/dist/index.mjs +11 -10
  68. package/dist/index.mjs.map +1 -1
  69. package/dist/invite-5277FQVT.cjs +274 -0
  70. package/dist/invite-5277FQVT.cjs.map +1 -0
  71. package/dist/invite-DUTcfTgX.cjs +109 -0
  72. package/dist/invite-DUTcfTgX.cjs.map +1 -0
  73. package/dist/invite-IU4n0dq2.mjs +96 -0
  74. package/dist/invite-IU4n0dq2.mjs.map +1 -0
  75. package/dist/invite-RU-OXTNS.mjs +219 -0
  76. package/dist/invite-RU-OXTNS.mjs.map +1 -0
  77. package/dist/parallel-D1R6ZGlY.cjs +318 -0
  78. package/dist/parallel-D1R6ZGlY.cjs.map +1 -0
  79. package/dist/parallel-D6zc6VW4.mjs +235 -0
  80. package/dist/parallel-D6zc6VW4.mjs.map +1 -0
  81. package/dist/proposed-participant-Dm1Eq6mX.cjs +141 -0
  82. package/dist/proposed-participant-Dm1Eq6mX.cjs.map +1 -0
  83. package/dist/proposed-participant-cWM7iUrO.mjs +129 -0
  84. package/dist/proposed-participant-cWM7iUrO.mjs.map +1 -0
  85. package/dist/receive-CAI-x4II.cjs +213 -0
  86. package/dist/receive-CAI-x4II.cjs.map +1 -0
  87. package/dist/receive-D2Nn68L7.mjs +188 -0
  88. package/dist/receive-D2Nn68L7.mjs.map +1 -0
  89. package/dist/receive-DA_KQEgk.mjs +177 -0
  90. package/dist/receive-DA_KQEgk.mjs.map +1 -0
  91. package/dist/receive-kZMsXhbK.cjs +190 -0
  92. package/dist/receive-kZMsXhbK.cjs.map +1 -0
  93. package/dist/registry/index.cjs +881 -13
  94. package/dist/registry/index.cjs.map +1 -0
  95. package/dist/registry/index.d.cts +1 -1
  96. package/dist/registry/index.d.mts +1 -1
  97. package/dist/registry/index.mjs +867 -2
  98. package/dist/registry/index.mjs.map +1 -0
  99. package/dist/{registry-FMU-ec5K.cjs → registry-9puTaRrD.cjs} +28 -31
  100. package/dist/registry-9puTaRrD.cjs.map +1 -0
  101. package/dist/{registry-BDnNV1Rk.mjs → registry-BpCwtrRt.mjs} +7 -10
  102. package/dist/{registry-BDnNV1Rk.mjs.map → registry-BpCwtrRt.mjs.map} +1 -1
  103. package/dist/round1-4Hyx8w0x.cjs +422 -0
  104. package/dist/round1-4Hyx8w0x.cjs.map +1 -0
  105. package/dist/round1-7v9LlE11.mjs +373 -0
  106. package/dist/round1-7v9LlE11.mjs.map +1 -0
  107. package/dist/round1-BHBjru1m.cjs +465 -0
  108. package/dist/round1-BHBjru1m.cjs.map +1 -0
  109. package/dist/round1-CMLKN2RR.mjs +195 -0
  110. package/dist/round1-CMLKN2RR.mjs.map +1 -0
  111. package/dist/round1-CWSXZx5R.cjs +208 -0
  112. package/dist/round1-CWSXZx5R.cjs.map +1 -0
  113. package/dist/round1-CcQCGlIT.mjs +208 -0
  114. package/dist/round1-CcQCGlIT.mjs.map +1 -0
  115. package/dist/round1-Cgm7j1kI.mjs +452 -0
  116. package/dist/round1-Cgm7j1kI.mjs.map +1 -0
  117. package/dist/round1-DQ0fnc1H.cjs +221 -0
  118. package/dist/round1-DQ0fnc1H.cjs.map +1 -0
  119. package/dist/round2-BWz9SQIi.cjs +305 -0
  120. package/dist/round2-BWz9SQIi.cjs.map +1 -0
  121. package/dist/round2-BkNRCXgS.mjs +292 -0
  122. package/dist/round2-BkNRCXgS.mjs.map +1 -0
  123. package/dist/round2-Bl2uK93U.mjs +450 -0
  124. package/dist/round2-Bl2uK93U.mjs.map +1 -0
  125. package/dist/round2-CdUT-AhH.cjs +499 -0
  126. package/dist/round2-CdUT-AhH.cjs.map +1 -0
  127. package/dist/round2-DOA3rnV-.mjs +280 -0
  128. package/dist/round2-DOA3rnV-.mjs.map +1 -0
  129. package/dist/round2-Dg24w-TU.mjs +397 -0
  130. package/dist/round2-Dg24w-TU.mjs.map +1 -0
  131. package/dist/round2-LylCa84n.cjs +293 -0
  132. package/dist/round2-LylCa84n.cjs.map +1 -0
  133. package/dist/round2-o2Q-GMbX.cjs +410 -0
  134. package/dist/round2-o2Q-GMbX.cjs.map +1 -0
  135. package/dist/storage-B-Gu68-O.cjs +79 -0
  136. package/dist/storage-B-Gu68-O.cjs.map +1 -0
  137. package/dist/storage-Bkkliz0K.mjs +74 -0
  138. package/dist/storage-Bkkliz0K.mjs.map +1 -0
  139. package/package.json +17 -17
  140. package/src/bin/frost.ts +849 -128
  141. package/src/cmd/common.ts +19 -1
  142. package/src/cmd/dkg/common.ts +97 -10
  143. package/src/cmd/dkg/coordinator/invite.ts +5 -2
  144. package/src/cmd/dkg/participant/finalize.ts +52 -18
  145. package/src/cmd/dkg/participant/round1.ts +39 -38
  146. package/src/cmd/dkg/participant/round2.ts +60 -26
  147. package/src/cmd/sign/coordinator/round2.ts +5 -1
  148. package/src/cmd/sign/participant/finalize.ts +6 -2
  149. package/src/cmd/sign/participant/receive.ts +5 -2
  150. package/src/dkg/group-invite.ts +12 -2
  151. package/src/dkg/proposed-participant.ts +33 -5
  152. package/src/frost/index.ts +1 -1
  153. package/src/registry/owner-record.ts +13 -2
  154. package/src/registry/participant-record.ts +36 -4
  155. package/src/registry/registry-impl.ts +74 -18
  156. package/dist/group-invite-CrbOabFL.cjs +0 -368
  157. package/dist/group-invite-CrbOabFL.cjs.map +0 -1
  158. package/dist/group-invite-Dz1Jmiky.d.cts.map +0 -1
  159. package/dist/group-invite-RPElq-fm.mjs +0 -338
  160. package/dist/group-invite-RPElq-fm.mjs.map +0 -1
  161. package/dist/group-invite-Wk9CIbHL.d.mts.map +0 -1
  162. package/dist/index-CcvTi5EA.d.cts.map +0 -1
  163. package/dist/index-DNCPeLNM.d.mts.map +0 -1
  164. package/dist/registry-FMU-ec5K.cjs.map +0 -1
  165. package/dist/registry-impl-BETn_lEO.d.mts.map +0 -1
  166. package/dist/registry-impl-C7w4awTv.cjs +0 -865
  167. package/dist/registry-impl-C7w4awTv.cjs.map +0 -1
  168. package/dist/registry-impl-CE76sTXQ.d.cts.map +0 -1
  169. package/dist/registry-impl-eYXVSPwM.mjs +0 -797
  170. package/dist/registry-impl-eYXVSPwM.mjs.map +0 -1
  171. package/dist/sign-2bOp18Fs.cjs +0 -4875
  172. package/dist/sign-2bOp18Fs.cjs.map +0 -1
  173. package/dist/sign-D8C3HJ4B.mjs +0 -4736
  174. package/dist/sign-D8C3HJ4B.mjs.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"index.mjs","names":[],"sources":["../../src/frost/index.ts"],"sourcesContent":["/**\n * Copyright © 2023-2026 Blockchain Commons, LLC\n * Copyright © 2025-2026 Parity Technologies\n *\n *\n * FROST cryptographic operations module.\n *\n * This module wraps the @frosts/ed25519 library to provide FROST\n * threshold signature operations for DKG and signing.\n *\n * @module\n */\n\nimport {\n Ed25519Sha512,\n Identifier,\n keys,\n serde,\n commitRound1,\n signRound2,\n aggregate,\n type Ed25519SigningNonces,\n type Ed25519SigningCommitments,\n type Ed25519SignatureShare,\n type Ed25519Signature,\n type KeyPackage,\n type PublicKeyPackage,\n type SigningShare,\n} from \"@frosts/ed25519\";\n\nimport { type SigningPackage, SigningPackageImpl, type RandomSource } from \"@frosts/core\";\n\n// Re-export types for convenience\nexport type {\n Ed25519SigningNonces,\n Ed25519SigningCommitments,\n Ed25519SignatureShare,\n Ed25519Signature,\n KeyPackage,\n PublicKeyPackage,\n RandomSource,\n};\n\nexport { Ed25519Sha512, Identifier, keys };\n\n// Type aliases for frost-hubert\nexport type FrostIdentifier = Identifier<typeof Ed25519Sha512>;\nexport type FrostKeyPackage = KeyPackage<typeof Ed25519Sha512>;\nexport type FrostPublicKeyPackage = PublicKeyPackage<typeof Ed25519Sha512>;\nexport type FrostSigningPackage = SigningPackage<typeof Ed25519Sha512>;\nexport type FrostSigningShare = SigningShare<typeof Ed25519Sha512>;\n\n// DKG round types - use the namespaced types from keys.dkg\nexport type DkgRound1Package = keys.dkg.round1.Package;\nexport type DkgRound1SecretPackage = keys.dkg.round1.SecretPackage;\nexport type DkgRound2Package = keys.dkg.round2.Package;\nexport type DkgRound2SecretPackage = keys.dkg.round2.SecretPackage;\n\n/**\n * Cryptographically secure random number generator using Web Crypto API.\n */\nexport class SecureRng implements RandomSource {\n fill(array: Uint8Array): void {\n globalThis.crypto.getRandomValues(array);\n }\n}\n\n/**\n * Create a new secure random number generator.\n */\nexport function createRng(): RandomSource {\n return new SecureRng();\n}\n\n/**\n * Create an identifier from a number (1-indexed participant ID).\n */\nexport function identifierFromU16(id: number): FrostIdentifier {\n return Identifier.fromU16(Ed25519Sha512, id);\n}\n\n/**\n * Serialize an identifier to bytes.\n */\nexport function serializeIdentifier(id: FrostIdentifier): Uint8Array {\n return id.serialize();\n}\n\n/**\n * Deserialize an identifier from bytes.\n */\nexport function deserializeIdentifier(bytes: Uint8Array): FrostIdentifier {\n return Identifier.deserialize(Ed25519Sha512, bytes);\n}\n\n/**\n * Convert an identifier to a hex string for use as a map key.\n */\nexport function identifierToHex(id: FrostIdentifier): string {\n return bytesToHex(id.serialize());\n}\n\n// =============================================================================\n// DKG Operations\n// =============================================================================\n\n/**\n * Execute DKG round 1 (part1) - Generate commitment and proof of knowledge.\n *\n * @param identifier - This participant's identifier\n * @param maxSigners - Total number of participants\n * @param minSigners - Threshold (minimum signers required)\n * @param rng - Random number generator\n * @returns Tuple of [SecretPackage, Package] where Package is broadcast to all\n */\nexport function dkgPart1(\n identifier: FrostIdentifier,\n maxSigners: number,\n minSigners: number,\n rng: RandomSource = createRng(),\n): [DkgRound1SecretPackage, DkgRound1Package] {\n return keys.dkg.part1(Ed25519Sha512, identifier, maxSigners, minSigners, rng);\n}\n\n/**\n * Execute DKG round 2 (part2) - Process round 1 packages and generate shares.\n *\n * @param secretPackage - The secret package from part1\n * @param round1Packages - Map of identifier hex to round1 packages from other participants\n * @returns Tuple of [Round2SecretPackage, Map of round2 packages to send]\n */\nexport function dkgPart2(\n secretPackage: DkgRound1SecretPackage,\n round1Packages: Map<string, DkgRound1Package>,\n): [DkgRound2SecretPackage, Map<string, DkgRound2Package>] {\n return keys.dkg.part2(Ed25519Sha512, secretPackage, round1Packages);\n}\n\n/**\n * Execute DKG round 3 (part3/finalize) - Compute final key package.\n *\n * @param round2SecretPackage - The secret package from part2\n * @param round1Packages - Map of identifier hex to round1 packages\n * @param round2Packages - Map of identifier hex to round2 packages received\n * @returns Promise of tuple [KeyPackage, PublicKeyPackage]\n */\nexport async function dkgPart3(\n round2SecretPackage: DkgRound2SecretPackage,\n round1Packages: Map<string, DkgRound1Package>,\n round2Packages: Map<string, DkgRound2Package>,\n): Promise<[FrostKeyPackage, FrostPublicKeyPackage]> {\n return keys.dkg.part3(Ed25519Sha512, round2SecretPackage, round1Packages, round2Packages);\n}\n\n// =============================================================================\n// Signing Operations\n// =============================================================================\n\n/**\n * Execute signing round 1 - Generate nonces and commitments.\n *\n * @param keyPackage - The participant's key package from DKG\n * @param rng - Random number generator\n * @returns Tuple of [SigningNonces, SigningCommitments]\n */\nexport function signingRound1(\n keyPackage: FrostKeyPackage,\n rng: RandomSource = createRng(),\n): [Ed25519SigningNonces, Ed25519SigningCommitments] {\n return commitRound1(keyPackage.signingShare, rng);\n}\n\n/**\n * Create a signing package from commitments and message.\n *\n * @param commitments - Map of identifier to signing commitments\n * @param message - The message to sign\n * @returns SigningPackage for round 2\n */\nexport function createSigningPackage(\n commitments: Map<FrostIdentifier, Ed25519SigningCommitments>,\n message: Uint8Array,\n): FrostSigningPackage {\n return new SigningPackageImpl(Ed25519Sha512, commitments, message);\n}\n\n/**\n * Execute signing round 2 - Generate signature share.\n *\n * @param signingPackage - The signing package with all commitments\n * @param nonces - This participant's nonces from round 1\n * @param keyPackage - This participant's key package\n * @returns Signature share\n */\nexport function signingRound2(\n signingPackage: FrostSigningPackage,\n nonces: Ed25519SigningNonces,\n keyPackage: FrostKeyPackage,\n): Ed25519SignatureShare {\n return signRound2(signingPackage, nonces, keyPackage);\n}\n\n/**\n * Aggregate signature shares into a final signature.\n *\n * @param signingPackage - The signing package used for round 2\n * @param signatureShares - Map of identifier to signature shares\n * @param publicKeyPackage - The group's public key package\n * @returns The aggregated signature\n */\nexport function aggregateSignatures(\n signingPackage: FrostSigningPackage,\n signatureShares: Map<FrostIdentifier, Ed25519SignatureShare>,\n publicKeyPackage: FrostPublicKeyPackage,\n): Ed25519Signature {\n return aggregate(signingPackage, signatureShares, publicKeyPackage);\n}\n\n// =============================================================================\n// Serialization Helpers - Using @frosts/ed25519 serde module\n// =============================================================================\n\n/**\n * Serialize a DKG round 1 package to JSON-compatible format.\n */\nexport function serializeDkgRound1Package(pkg: DkgRound1Package): SerializedDkgRound1Package {\n const json = serde.round1PackageToJson(pkg);\n return {\n commitment: {\n coefficients: json.commitment,\n },\n proofOfKnowledge: json.proof_of_knowledge,\n };\n}\n\n/**\n * Deserialize a DKG round 1 package from JSON format.\n */\nexport function deserializeDkgRound1Package(data: SerializedDkgRound1Package): DkgRound1Package {\n const json = {\n header: serde.DEFAULT_HEADER,\n commitment: data.commitment.coefficients,\n proof_of_knowledge: data.proofOfKnowledge,\n };\n return serde.round1PackageFromJson(json);\n}\n\n/**\n * Serialize a DKG round 2 package to JSON-compatible format.\n */\nexport function serializeDkgRound2Package(pkg: DkgRound2Package): SerializedDkgRound2Package {\n const json = serde.round2PackageToJson(pkg);\n return {\n signingShare: json.signing_share,\n };\n}\n\n/**\n * Deserialize a DKG round 2 package from JSON format.\n */\nexport function deserializeDkgRound2Package(data: SerializedDkgRound2Package): DkgRound2Package {\n const json = {\n header: serde.DEFAULT_HEADER,\n signing_share: data.signingShare,\n };\n return serde.round2PackageFromJson(json);\n}\n\n/**\n * Serialize a key package to JSON-compatible format.\n */\nexport function serializeKeyPackage(keyPackage: FrostKeyPackage): SerializedKeyPackage {\n const json = serde.keyPackageToJson(keyPackage);\n return {\n identifier: json.identifier,\n signingShare: json.signing_share,\n verifyingShare: json.verifying_share,\n verifyingKey: json.verifying_key,\n minSigners: json.min_signers,\n };\n}\n\n/**\n * Deserialize a key package from JSON format.\n */\nexport function deserializeKeyPackage(data: SerializedKeyPackage): FrostKeyPackage {\n const json = {\n header: serde.DEFAULT_HEADER,\n identifier: data.identifier,\n signing_share: data.signingShare,\n verifying_share: data.verifyingShare,\n verifying_key: data.verifyingKey,\n min_signers: data.minSigners,\n };\n return serde.keyPackageFromJson(json);\n}\n\n/**\n * Serialize a public key package to JSON-compatible format.\n */\nexport function serializePublicKeyPackage(pkg: FrostPublicKeyPackage): SerializedPublicKeyPackage {\n const json = serde.publicKeyPackageToJson(pkg);\n return {\n verifyingKey: json.verifying_key,\n verifyingShares: json.verifying_shares,\n // minSigners may be undefined in older packages\n ...(json.min_signers !== undefined ? { minSigners: json.min_signers } : {}),\n };\n}\n\n/**\n * Deserialize a public key package from JSON format.\n */\nexport function deserializePublicKeyPackage(\n data: SerializedPublicKeyPackage,\n): FrostPublicKeyPackage {\n const json = {\n header: serde.DEFAULT_HEADER,\n verifying_key: data.verifyingKey,\n verifying_shares: data.verifyingShares,\n min_signers: data.minSigners,\n };\n return serde.publicKeyPackageFromJson(json);\n}\n\n/**\n * Serialize signing nonces to JSON-compatible format.\n */\nexport function serializeSigningNonces(nonces: Ed25519SigningNonces): SerializedSigningNonces {\n // Access the internal properties of the nonces\n return {\n hiding: bytesToHex(nonces.hiding.serialize()),\n binding: bytesToHex(nonces.binding.serialize()),\n commitments: {\n hiding: bytesToHex(nonces.commitments.hiding.serialize()),\n binding: bytesToHex(nonces.commitments.binding.serialize()),\n },\n };\n}\n\n/**\n * Serialize signing commitments to JSON-compatible format.\n */\nexport function serializeSigningCommitments(\n commitments: Ed25519SigningCommitments,\n): SerializedSigningCommitments {\n const json = serde.signingCommitmentsToJson(commitments);\n return {\n hiding: json.hiding,\n binding: json.binding,\n };\n}\n\n/**\n * Deserialize signing commitments from JSON format.\n */\nexport function deserializeSigningCommitments(\n data: SerializedSigningCommitments,\n): Ed25519SigningCommitments {\n const json = {\n header: serde.DEFAULT_HEADER,\n hiding: data.hiding,\n binding: data.binding,\n };\n return serde.signingCommitmentsFromJson(json);\n}\n\n/**\n * Serialize a signature share to hex string.\n */\nexport function serializeSignatureShare(share: Ed25519SignatureShare): string {\n const json = serde.signatureShareToJson(share);\n return json.share;\n}\n\n/**\n * Deserialize a signature share from hex string.\n */\nexport function deserializeSignatureShare(hex: string): Ed25519SignatureShare {\n const json = {\n header: serde.DEFAULT_HEADER,\n share: hex,\n };\n return serde.signatureShareFromJson(json);\n}\n\n/**\n * Serialize a signature to bytes.\n */\nexport function serializeSignature(sig: Ed25519Signature): Uint8Array {\n return sig.serialize(Ed25519Sha512);\n}\n\n/**\n * Serialize a signature to hex string.\n */\nexport function serializeSignatureHex(sig: Ed25519Signature): string {\n return bytesToHex(sig.serialize(Ed25519Sha512));\n}\n\n// =============================================================================\n// Serialized Type Definitions\n// =============================================================================\n\nexport interface SerializedDkgRound1Package {\n commitment: {\n coefficients: string[]; // hex-encoded coefficient commitments\n };\n proofOfKnowledge: string; // hex-encoded proof of knowledge\n}\n\nexport interface SerializedDkgRound2Package {\n signingShare: string; // hex-encoded signing share\n}\n\nexport interface SerializedKeyPackage {\n identifier: string;\n signingShare: string;\n verifyingShare: string;\n verifyingKey: string;\n minSigners: number;\n}\n\nexport interface SerializedPublicKeyPackage {\n verifyingKey: string;\n verifyingShares: Record<string, string>; // identifier hex -> verifying share hex\n minSigners?: number;\n}\n\nexport interface SerializedSigningNonces {\n hiding: string;\n binding: string;\n commitments: {\n hiding: string;\n binding: string;\n };\n}\n\nexport interface SerializedSigningCommitments {\n hiding: string;\n binding: string;\n}\n\n// =============================================================================\n// Utility Functions - Re-export from serde\n// =============================================================================\n\n/**\n * Convert bytes to hex string.\n */\nexport function bytesToHex(bytes: Uint8Array): string {\n return serde.bytesToHex(bytes);\n}\n\n/**\n * Convert hex string to bytes.\n */\nexport function hexToBytes(hex: string): Uint8Array {\n return serde.hexToBytes(hex);\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"index.mjs","names":[],"sources":["../../src/frost/index.ts"],"sourcesContent":["/**\n * Copyright © 2023-2026 Blockchain Commons, LLC\n * Copyright © 2025-2026 Parity Technologies\n *\n *\n * FROST cryptographic operations module.\n *\n * This module wraps the @frosts/ed25519 library to provide FROST\n * threshold signature operations for DKG and signing.\n *\n * @module\n */\n\nimport {\n Ed25519Sha512,\n Identifier,\n keys,\n serde,\n commitRound1,\n signRound2,\n aggregate,\n type Ed25519SigningNonces,\n type Ed25519SigningCommitments,\n type Ed25519SignatureShare,\n type Ed25519Signature,\n type KeyPackage,\n type PublicKeyPackage,\n type SigningShare,\n} from \"@frosts/ed25519\";\n\nimport { type SigningPackage, SigningPackageImpl, type RandomSource } from \"@frosts/core\";\n\n// Re-export types for convenience\nexport type {\n Ed25519SigningNonces,\n Ed25519SigningCommitments,\n Ed25519SignatureShare,\n Ed25519Signature,\n KeyPackage,\n PublicKeyPackage,\n RandomSource,\n};\n\nexport { Ed25519Sha512, Identifier, keys };\n\n// Type aliases for frost-hubert\nexport type FrostIdentifier = Identifier<typeof Ed25519Sha512>;\nexport type FrostKeyPackage = KeyPackage<typeof Ed25519Sha512>;\nexport type FrostPublicKeyPackage = PublicKeyPackage<typeof Ed25519Sha512>;\nexport type FrostSigningPackage = SigningPackage<typeof Ed25519Sha512>;\nexport type FrostSigningShare = SigningShare<typeof Ed25519Sha512>;\n\n// DKG round types - use the namespaced types from keys.dkg\nexport type DkgRound1Package = keys.dkg.round1.Package;\nexport type DkgRound1SecretPackage = keys.dkg.round1.SecretPackage;\nexport type DkgRound2Package = keys.dkg.round2.Package;\nexport type DkgRound2SecretPackage = keys.dkg.round2.SecretPackage;\n\n/**\n * Cryptographically secure random number generator using Web Crypto API.\n */\nexport class SecureRng implements RandomSource {\n fill(array: Uint8Array): void {\n globalThis.crypto.getRandomValues(array as Uint8Array<ArrayBuffer>);\n }\n}\n\n/**\n * Create a new secure random number generator.\n */\nexport function createRng(): RandomSource {\n return new SecureRng();\n}\n\n/**\n * Create an identifier from a number (1-indexed participant ID).\n */\nexport function identifierFromU16(id: number): FrostIdentifier {\n return Identifier.fromU16(Ed25519Sha512, id);\n}\n\n/**\n * Serialize an identifier to bytes.\n */\nexport function serializeIdentifier(id: FrostIdentifier): Uint8Array {\n return id.serialize();\n}\n\n/**\n * Deserialize an identifier from bytes.\n */\nexport function deserializeIdentifier(bytes: Uint8Array): FrostIdentifier {\n return Identifier.deserialize(Ed25519Sha512, bytes);\n}\n\n/**\n * Convert an identifier to a hex string for use as a map key.\n */\nexport function identifierToHex(id: FrostIdentifier): string {\n return bytesToHex(id.serialize());\n}\n\n// =============================================================================\n// DKG Operations\n// =============================================================================\n\n/**\n * Execute DKG round 1 (part1) - Generate commitment and proof of knowledge.\n *\n * @param identifier - This participant's identifier\n * @param maxSigners - Total number of participants\n * @param minSigners - Threshold (minimum signers required)\n * @param rng - Random number generator\n * @returns Tuple of [SecretPackage, Package] where Package is broadcast to all\n */\nexport function dkgPart1(\n identifier: FrostIdentifier,\n maxSigners: number,\n minSigners: number,\n rng: RandomSource = createRng(),\n): [DkgRound1SecretPackage, DkgRound1Package] {\n return keys.dkg.part1(Ed25519Sha512, identifier, maxSigners, minSigners, rng);\n}\n\n/**\n * Execute DKG round 2 (part2) - Process round 1 packages and generate shares.\n *\n * @param secretPackage - The secret package from part1\n * @param round1Packages - Map of identifier hex to round1 packages from other participants\n * @returns Tuple of [Round2SecretPackage, Map of round2 packages to send]\n */\nexport function dkgPart2(\n secretPackage: DkgRound1SecretPackage,\n round1Packages: Map<string, DkgRound1Package>,\n): [DkgRound2SecretPackage, Map<string, DkgRound2Package>] {\n return keys.dkg.part2(Ed25519Sha512, secretPackage, round1Packages);\n}\n\n/**\n * Execute DKG round 3 (part3/finalize) - Compute final key package.\n *\n * @param round2SecretPackage - The secret package from part2\n * @param round1Packages - Map of identifier hex to round1 packages\n * @param round2Packages - Map of identifier hex to round2 packages received\n * @returns Promise of tuple [KeyPackage, PublicKeyPackage]\n */\nexport async function dkgPart3(\n round2SecretPackage: DkgRound2SecretPackage,\n round1Packages: Map<string, DkgRound1Package>,\n round2Packages: Map<string, DkgRound2Package>,\n): Promise<[FrostKeyPackage, FrostPublicKeyPackage]> {\n return keys.dkg.part3(Ed25519Sha512, round2SecretPackage, round1Packages, round2Packages);\n}\n\n// =============================================================================\n// Signing Operations\n// =============================================================================\n\n/**\n * Execute signing round 1 - Generate nonces and commitments.\n *\n * @param keyPackage - The participant's key package from DKG\n * @param rng - Random number generator\n * @returns Tuple of [SigningNonces, SigningCommitments]\n */\nexport function signingRound1(\n keyPackage: FrostKeyPackage,\n rng: RandomSource = createRng(),\n): [Ed25519SigningNonces, Ed25519SigningCommitments] {\n return commitRound1(keyPackage.signingShare, rng);\n}\n\n/**\n * Create a signing package from commitments and message.\n *\n * @param commitments - Map of identifier to signing commitments\n * @param message - The message to sign\n * @returns SigningPackage for round 2\n */\nexport function createSigningPackage(\n commitments: Map<FrostIdentifier, Ed25519SigningCommitments>,\n message: Uint8Array,\n): FrostSigningPackage {\n return new SigningPackageImpl(Ed25519Sha512, commitments, message);\n}\n\n/**\n * Execute signing round 2 - Generate signature share.\n *\n * @param signingPackage - The signing package with all commitments\n * @param nonces - This participant's nonces from round 1\n * @param keyPackage - This participant's key package\n * @returns Signature share\n */\nexport function signingRound2(\n signingPackage: FrostSigningPackage,\n nonces: Ed25519SigningNonces,\n keyPackage: FrostKeyPackage,\n): Ed25519SignatureShare {\n return signRound2(signingPackage, nonces, keyPackage);\n}\n\n/**\n * Aggregate signature shares into a final signature.\n *\n * @param signingPackage - The signing package used for round 2\n * @param signatureShares - Map of identifier to signature shares\n * @param publicKeyPackage - The group's public key package\n * @returns The aggregated signature\n */\nexport function aggregateSignatures(\n signingPackage: FrostSigningPackage,\n signatureShares: Map<FrostIdentifier, Ed25519SignatureShare>,\n publicKeyPackage: FrostPublicKeyPackage,\n): Ed25519Signature {\n return aggregate(signingPackage, signatureShares, publicKeyPackage);\n}\n\n// =============================================================================\n// Serialization Helpers - Using @frosts/ed25519 serde module\n// =============================================================================\n\n/**\n * Serialize a DKG round 1 package to JSON-compatible format.\n */\nexport function serializeDkgRound1Package(pkg: DkgRound1Package): SerializedDkgRound1Package {\n const json = serde.round1PackageToJson(pkg);\n return {\n commitment: {\n coefficients: json.commitment,\n },\n proofOfKnowledge: json.proof_of_knowledge,\n };\n}\n\n/**\n * Deserialize a DKG round 1 package from JSON format.\n */\nexport function deserializeDkgRound1Package(data: SerializedDkgRound1Package): DkgRound1Package {\n const json = {\n header: serde.DEFAULT_HEADER,\n commitment: data.commitment.coefficients,\n proof_of_knowledge: data.proofOfKnowledge,\n };\n return serde.round1PackageFromJson(json);\n}\n\n/**\n * Serialize a DKG round 2 package to JSON-compatible format.\n */\nexport function serializeDkgRound2Package(pkg: DkgRound2Package): SerializedDkgRound2Package {\n const json = serde.round2PackageToJson(pkg);\n return {\n signingShare: json.signing_share,\n };\n}\n\n/**\n * Deserialize a DKG round 2 package from JSON format.\n */\nexport function deserializeDkgRound2Package(data: SerializedDkgRound2Package): DkgRound2Package {\n const json = {\n header: serde.DEFAULT_HEADER,\n signing_share: data.signingShare,\n };\n return serde.round2PackageFromJson(json);\n}\n\n/**\n * Serialize a key package to JSON-compatible format.\n */\nexport function serializeKeyPackage(keyPackage: FrostKeyPackage): SerializedKeyPackage {\n const json = serde.keyPackageToJson(keyPackage);\n return {\n identifier: json.identifier,\n signingShare: json.signing_share,\n verifyingShare: json.verifying_share,\n verifyingKey: json.verifying_key,\n minSigners: json.min_signers,\n };\n}\n\n/**\n * Deserialize a key package from JSON format.\n */\nexport function deserializeKeyPackage(data: SerializedKeyPackage): FrostKeyPackage {\n const json = {\n header: serde.DEFAULT_HEADER,\n identifier: data.identifier,\n signing_share: data.signingShare,\n verifying_share: data.verifyingShare,\n verifying_key: data.verifyingKey,\n min_signers: data.minSigners,\n };\n return serde.keyPackageFromJson(json);\n}\n\n/**\n * Serialize a public key package to JSON-compatible format.\n */\nexport function serializePublicKeyPackage(pkg: FrostPublicKeyPackage): SerializedPublicKeyPackage {\n const json = serde.publicKeyPackageToJson(pkg);\n return {\n verifyingKey: json.verifying_key,\n verifyingShares: json.verifying_shares,\n // minSigners may be undefined in older packages\n ...(json.min_signers !== undefined ? { minSigners: json.min_signers } : {}),\n };\n}\n\n/**\n * Deserialize a public key package from JSON format.\n */\nexport function deserializePublicKeyPackage(\n data: SerializedPublicKeyPackage,\n): FrostPublicKeyPackage {\n const json = {\n header: serde.DEFAULT_HEADER,\n verifying_key: data.verifyingKey,\n verifying_shares: data.verifyingShares,\n min_signers: data.minSigners,\n };\n return serde.publicKeyPackageFromJson(json);\n}\n\n/**\n * Serialize signing nonces to JSON-compatible format.\n */\nexport function serializeSigningNonces(nonces: Ed25519SigningNonces): SerializedSigningNonces {\n // Access the internal properties of the nonces\n return {\n hiding: bytesToHex(nonces.hiding.serialize()),\n binding: bytesToHex(nonces.binding.serialize()),\n commitments: {\n hiding: bytesToHex(nonces.commitments.hiding.serialize()),\n binding: bytesToHex(nonces.commitments.binding.serialize()),\n },\n };\n}\n\n/**\n * Serialize signing commitments to JSON-compatible format.\n */\nexport function serializeSigningCommitments(\n commitments: Ed25519SigningCommitments,\n): SerializedSigningCommitments {\n const json = serde.signingCommitmentsToJson(commitments);\n return {\n hiding: json.hiding,\n binding: json.binding,\n };\n}\n\n/**\n * Deserialize signing commitments from JSON format.\n */\nexport function deserializeSigningCommitments(\n data: SerializedSigningCommitments,\n): Ed25519SigningCommitments {\n const json = {\n header: serde.DEFAULT_HEADER,\n hiding: data.hiding,\n binding: data.binding,\n };\n return serde.signingCommitmentsFromJson(json);\n}\n\n/**\n * Serialize a signature share to hex string.\n */\nexport function serializeSignatureShare(share: Ed25519SignatureShare): string {\n const json = serde.signatureShareToJson(share);\n return json.share;\n}\n\n/**\n * Deserialize a signature share from hex string.\n */\nexport function deserializeSignatureShare(hex: string): Ed25519SignatureShare {\n const json = {\n header: serde.DEFAULT_HEADER,\n share: hex,\n };\n return serde.signatureShareFromJson(json);\n}\n\n/**\n * Serialize a signature to bytes.\n */\nexport function serializeSignature(sig: Ed25519Signature): Uint8Array {\n return sig.serialize(Ed25519Sha512);\n}\n\n/**\n * Serialize a signature to hex string.\n */\nexport function serializeSignatureHex(sig: Ed25519Signature): string {\n return bytesToHex(sig.serialize(Ed25519Sha512));\n}\n\n// =============================================================================\n// Serialized Type Definitions\n// =============================================================================\n\nexport interface SerializedDkgRound1Package {\n commitment: {\n coefficients: string[]; // hex-encoded coefficient commitments\n };\n proofOfKnowledge: string; // hex-encoded proof of knowledge\n}\n\nexport interface SerializedDkgRound2Package {\n signingShare: string; // hex-encoded signing share\n}\n\nexport interface SerializedKeyPackage {\n identifier: string;\n signingShare: string;\n verifyingShare: string;\n verifyingKey: string;\n minSigners: number;\n}\n\nexport interface SerializedPublicKeyPackage {\n verifyingKey: string;\n verifyingShares: Record<string, string>; // identifier hex -> verifying share hex\n minSigners?: number;\n}\n\nexport interface SerializedSigningNonces {\n hiding: string;\n binding: string;\n commitments: {\n hiding: string;\n binding: string;\n };\n}\n\nexport interface SerializedSigningCommitments {\n hiding: string;\n binding: string;\n}\n\n// =============================================================================\n// Utility Functions - Re-export from serde\n// =============================================================================\n\n/**\n * Convert bytes to hex string.\n */\nexport function bytesToHex(bytes: Uint8Array): string {\n return serde.bytesToHex(bytes);\n}\n\n/**\n * Convert hex string to bytes.\n */\nexport function hexToBytes(hex: string): Uint8Array {\n return serde.hexToBytes(hex);\n}\n"],"mappings":"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"}
@@ -53,9 +53,32 @@ declare class DkgProposedParticipant {
53
53
  responseArid(): ARID;
54
54
  /**
55
55
  * Compare participants by XID for sorting.
56
+ *
57
+ * Mirrors Rust `PartialOrd::partial_cmp` which uses
58
+ * `self.xid().cmp(&other.xid())` — i.e. the underlying 32-byte XID
59
+ * data is compared lexicographically (`Vec<u8>` ordering). The
60
+ * earlier port used `xid.toString().localeCompare(...)`, which (a)
61
+ * compares the UR-encoded base32-ish string, not the bytes, and (b)
62
+ * is locale-aware. Sorting on UR strings differs from the byte
63
+ * order whenever the underlying bytes contain values ≥ 0x80, so
64
+ * Rust and TS would assign different FROST identifiers to the same
65
+ * participant set — producing different secret shares.
56
66
  */
57
67
  compareTo(other: DkgProposedParticipant): number;
58
68
  }
69
+ /**
70
+ * Lexicographic byte compare matching Rust's `Vec<u8>::cmp` /
71
+ * `XID::cmp`. Exported so the cmd-tree call sites (round1 / finalize)
72
+ * can use the same comparator when they sort deduplicated XID lists.
73
+ *
74
+ * `XID` is exactly 32 bytes so this only ever compares two equal-length
75
+ * inputs; the length-tiebreak branch mirrors the generic `Ord` impl on
76
+ * `Vec<u8>` and is included for correctness if ever applied to other
77
+ * byte sequences.
78
+ *
79
+ * @internal
80
+ */
81
+ declare function compareXidBytes(a: Uint8Array, b: Uint8Array): number;
59
82
  //#endregion
60
83
  //#region src/dkg/group-invite.d.ts
61
84
  /**
@@ -168,5 +191,5 @@ declare class DkgInvitation {
168
191
  static fromInvite(invite: Envelope, now: Date, expectedSender: XIDDocument | undefined, recipient: XIDDocument): DkgInvitation;
169
192
  }
170
193
  //#endregion
171
- export { declined as a, accepted as i, DkgInvitationResult as n, DkgProposedParticipant as o, DkgInvite as r, DkgInvitation as t };
172
- //# sourceMappingURL=group-invite-Dz1Jmiky.d.cts.map
194
+ export { declined as a, accepted as i, DkgInvitationResult as n, DkgProposedParticipant as o, DkgInvite as r, compareXidBytes as s, DkgInvitation as t };
195
+ //# sourceMappingURL=index-B3c-80VS.d.cts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index-B3c-80VS.d.cts","names":[],"sources":["../src/dkg/proposed-participant.ts","../src/dkg/group-invite.ts"],"mappings":";;;;;;;;;;;cAsBa,sBAAA;EAAA,iBACM,SAAA;EAAA,iBACA,SAAA;EAAA,iBACA,SAAA;EAAA,iBACA,aAAA;EAAA,QAEV,WAAA,CAAA;EAiBuC;;;;;EAAA,OAAvC,MAAA,CAAO,QAAA,UAAkB,YAAA,EAAc,IAAA,GAAO,sBAAA;EAmBtC;;;;;EATf,GAAA,CAAA,GAAO,GAAA;EAqDP;;;;;EA5CA,WAAA,CAAA,GAAe,WAAA;EA6Dc;;;;;EApD7B,aAAA,CAAA;EAoD6C;;;;;EA3C7C,mBAAA,CAAA,GAAuB,QAAA;ECzDb;;;;;EDkEV,YAAA,CAAA,GAAgB,IAAA;EClE2D;;;AAK7E;;;;;AAOA;;;;;EDuEE,SAAA,CAAU,KAAA,EAAO,sBAAA;AAAA;;;;;;;;;;;;;iBAiBH,eAAA,CAAgB,CAAA,EAAG,UAAA,EAAY,CAAA,EAAG,UAAA;;;;;;;;KCpGtC,mBAAA;EAAwB,IAAA;AAAA;EAAuB,IAAA;EAAkB,MAAA;AAAA;;;;iBAK7D,QAAA,CAAA,GAAY,mBAAA;;;;iBAOZ,QAAA,CAAS,MAAA,WAAiB,mBAAA;;;;;;cAS7B,SAAA;EAAA,iBACM,UAAA;EAAA,iBACA,OAAA;EAAA,iBACA,QAAA;EAAA,iBACA,KAAA;EAAA,iBACA,WAAA;EAAA,iBACA,WAAA;EAAA,iBACA,QAAA;EAAA,iBACA,oBAAA;EAAA,QAEV,WAAA,CAAA;EDqEmD;;;;;EAAA,OC5CnD,MAAA,CACL,SAAA,EAAW,IAAA,EACX,MAAA,EAAQ,WAAA,EACR,OAAA,EAAS,IAAA,EACT,IAAA,EAAM,IAAA,EACN,UAAA,EAAY,IAAA,EACZ,UAAA,UACA,OAAA,UACA,YAAA,YACA,aAAA,EAAe,IAAA,KACd,SAAA;EAkCH,SAAA,CAAA,GAAa,IAAA;EAIb,MAAA,CAAA,GAAU,WAAA;EAIV,OAAA,CAAA,GAAW,IAAA;EAIX,IAAA,CAAA,GAAQ,IAAA;EAIR,UAAA,CAAA,GAAc,IAAA;EAId,UAAA,CAAA;EAIA,OAAA,CAAA;EAIA,YAAA,CAAA,GAAgB,sBAAA;EA3HF;;;;;EAoId,SAAA,CAAA,GAAa,aAAA;EA7HS;;;;AASxB;EAsJE,kBAAA,CAAA,GAAsB,QAAA;;;;;;EAqBtB,UAAA,CAAA,GAAc,QAAA;AAAA;;;;;;cAoBH,aAAA;EAAA,iBACM,aAAA;EAAA,iBACA,WAAA;EAAA,iBACA,OAAA;EAAA,iBACA,UAAA;EAAA,iBACA,iBAAA;EAAA,iBACA,WAAA;EAAA,iBACA,QAAA;EAAA,iBACA,QAAA;EAAA,QAEV,WAAA,CAAA;EAoBP,YAAA,CAAA,GAAgB,IAAA;EAIhB,UAAA,CAAA,GAAc,IAAA;EAId,MAAA,CAAA,GAAU,WAAA;EAIV,SAAA,CAAA,GAAa,IAAA;EAIb,gBAAA,CAAA,GAAoB,QAAA;EAIpB,UAAA,CAAA;EAIA,OAAA,CAAA;EAIA,OAAA,CAAA,GAAW,IAAA;EArNT;;;;;EA8NF,UAAA,CAAW,QAAA,EAAU,mBAAA,EAAqB,SAAA,EAAW,WAAA,GAAc,cAAA;EA3NjE;;;;;EA2OF,UAAA,CAAW,QAAA,EAAU,mBAAA,EAAqB,SAAA,EAAW,WAAA,GAAc,QAAA;EAtOlD;;;;;EAAA,OAwPV,UAAA,CACL,MAAA,EAAQ,QAAA,EACR,GAAA,EAAK,IAAA,EACL,cAAA,EAAgB,WAAA,cAChB,SAAA,EAAW,WAAA,GACV,aAAA;AAAA"}
@@ -1,22 +1,112 @@
1
- import { d as PendingRequests, i as Registry, l as GroupParticipant, o as ParticipantRecord, r as OwnerOutcome, s as OwnerRecord, t as AddOutcome, u as GroupRecord } from "./registry-impl-CE76sTXQ.cjs";
2
- import { t as DkgInvitation } from "./group-invite-Dz1Jmiky.cjs";
1
+ import { d as PendingRequests, i as Registry, l as GroupParticipant, o as ParticipantRecord, r as OwnerOutcome, s as OwnerRecord, t as AddOutcome, u as GroupRecord } from "./index-DVbWyOs7.mjs";
2
+ import { t as DkgInvitation } from "./index-D3QTWkEm.mjs";
3
3
  import { ARID, PrivateKeys, XID } from "@bcts/components";
4
4
  import { Envelope, EnvelopeEncodableValue } from "@bcts/envelope";
5
- import { XIDDocument } from "@bcts/xid";
6
5
  import { SealedRequest } from "@bcts/gstp";
6
+ import { XIDDocument } from "@bcts/xid";
7
7
 
8
- //#region src/cmd/common.d.ts
8
+ //#region src/cmd/dkg/common.d.ts
9
+ /**
10
+ * Parse an ARID from a UR string.
11
+ *
12
+ * Mirrors Rust `parse_arid_ur` (`cmd/common.rs:27-43`):
13
+ *
14
+ * 1. Trim and reject empty input.
15
+ * 2. Parse as a UR; require `ur_type` of `"arid"`.
16
+ * 3. Try `ARID::try_from(cbor)` (the tagged-CBOR form).
17
+ * 4. If that fails, fall back to interpreting the CBOR as a bare
18
+ * byte string and constructing the ARID from those bytes via
19
+ * `ARID::from_data_ref`.
20
+ *
21
+ * The earlier port only accepted the tagged form; this matches Rust
22
+ * by accepting the byte-string fallback too.
23
+ */
24
+ declare function parseAridUr(urString: string): ARID;
25
+ /**
26
+ * Parse an envelope from a UR string.
27
+ *
28
+ * Port of `parse_envelope_ur()` from cmd/dkg/common.rs.
29
+ */
30
+ declare function parseEnvelopeUr(urString: string): Envelope;
9
31
  /**
10
- * Copyright © 2023-2026 Blockchain Commons, LLC
11
- * Copyright © 2025-2026 Parity Technologies
32
+ * Resolve the registry owner's XID document.
12
33
  *
34
+ * The earlier port called this `resolveSender(registry)`, but its
35
+ * behaviour — "give me the owner" — has nothing in common with Rust's
36
+ * `resolve_sender(registry, input)` (which resolves an arbitrary
37
+ * named sender). This helper is renamed to its actual behaviour;
38
+ * the Rust-equivalent `resolveSender(registry, input)` lives below.
39
+ */
40
+ declare function resolveOwnerXidDocument(registry: Registry): XIDDocument;
41
+ /**
42
+ * Resolve a sender XID document from the registry by UR or pet name.
13
43
  *
14
- * Common utilities for commands.
44
+ * Mirrors Rust `resolve_sender(registry, input)`
45
+ * (`cmd/dkg/common.rs:76-94`):
15
46
  *
16
- * Port of cmd/common.rs from frost-hubert-rust.
47
+ * 1. Trim and reject empty input.
48
+ * 2. Try parsing the input as a `ur:xid`. If that succeeds, look it
49
+ * up via `registry.participant(xid)`; if no record is found,
50
+ * error with `Sender with XID {ur} not found`.
51
+ * 3. Otherwise look it up by pet name via
52
+ * `registry.participantByPetName(name)`; if no record is found,
53
+ * error with `Sender with pet name '{name}' not found`.
17
54
  *
18
- * @module
55
+ * Note Rust does NOT check the owner here — only the participants
56
+ * map. The earlier inline duplicate in `participant/round1.ts` did
57
+ * an extra owner-check fallback which is removed to match Rust.
19
58
  */
59
+ declare function resolveSender(registry: Registry, input: string): XIDDocument;
60
+ /**
61
+ * Resolve participant identifiers (XID URs or pet names) to records.
62
+ *
63
+ * Port of `resolve_participants()` from cmd/dkg/common.rs lines 29-74.
64
+ */
65
+ declare function resolveParticipants(registry: Registry, inputs: string[]): [XID, ParticipantRecord][];
66
+ /**
67
+ * Get display name for sender from registry.
68
+ *
69
+ * Port of `resolve_sender_name()` from cmd/dkg/common.rs lines 96-116.
70
+ */
71
+ declare function resolveSenderName(registry: Registry, sender: XIDDocument): string | undefined;
72
+ /**
73
+ * Build GroupParticipant[] from XIDDocuments using registry lookups.
74
+ *
75
+ * Port of `build_group_participants()` from cmd/dkg/common.rs lines 122-131.
76
+ */
77
+ declare function buildGroupParticipants(registry: Registry, owner: OwnerRecord, participants: XIDDocument[]): GroupParticipant[];
78
+ /**
79
+ * Create a GroupParticipant from a XIDDocument, validating against the registry.
80
+ *
81
+ * Port of `group_participant_from_registry()` from cmd/dkg/common.rs lines 133-149.
82
+ */
83
+ declare function groupParticipantFromRegistry(registry: Registry, owner: OwnerRecord, document: XIDDocument): GroupParticipant;
84
+ /**
85
+ * Format a participant name with owner marker if applicable.
86
+ *
87
+ * Port of `format_name_with_owner_marker()` from cmd/dkg/common.rs lines 155-157.
88
+ */
89
+ declare function formatNameWithOwnerMarker(name: string, isOwner: boolean): string;
90
+ /**
91
+ * Get display names for participants, sorted by XID, with owner marked.
92
+ *
93
+ * Port of `participant_names_from_registry()` from cmd/dkg/common.rs lines 159-191.
94
+ */
95
+ declare function participantNamesFromRegistry(registry: Registry, participants: XIDDocument[], ownerXid: XID, ownerPetName: string | undefined): string[];
96
+ /**
97
+ * Get the DKG state directory for a given registry path and group ID.
98
+ *
99
+ * Port of `dkg_state_dir()` from cmd/dkg/common.rs.
100
+ */
101
+ declare function dkgStateDir(registryPath: string, groupIdHex: string): string;
102
+ /**
103
+ * Convert a verifying key bytes to a SigningPublicKey.
104
+ *
105
+ * Port of `signing_key_from_verifying()` from cmd/dkg/common.rs.
106
+ */
107
+ declare function signingKeyFromVerifying(verifyingKeyBytes: Uint8Array): unknown;
108
+ //#endregion
109
+ //#region src/cmd/common.d.ts
20
110
  /**
21
111
  * Get the group state directory for a given registry path and group ID.
22
112
  *
@@ -224,74 +314,6 @@ declare function parallelSend(client: StorageClient, messages: [XID, ARID, Envel
224
314
  */
225
315
  declare function checkAridExists(client: StorageClient, arid: ARID): Promise<boolean>;
226
316
  //#endregion
227
- //#region src/cmd/dkg/common.d.ts
228
- /**
229
- * Parse an ARID from a UR string.
230
- *
231
- * Port of `parse_arid_ur()` from cmd/dkg/common.rs.
232
- */
233
- declare function parseAridUr(urString: string): ARID;
234
- /**
235
- * Parse an envelope from a UR string.
236
- *
237
- * Port of `parse_envelope_ur()` from cmd/dkg/common.rs.
238
- */
239
- declare function parseEnvelopeUr(urString: string): Envelope;
240
- /**
241
- * Resolve the sender XID document from the registry.
242
- *
243
- * Port of `resolve_sender()` from cmd/dkg/common.rs.
244
- */
245
- declare function resolveSender(registry: Registry): XIDDocument;
246
- /**
247
- * Resolve participant identifiers (XID URs or pet names) to records.
248
- *
249
- * Port of `resolve_participants()` from cmd/dkg/common.rs lines 29-74.
250
- */
251
- declare function resolveParticipants(registry: Registry, inputs: string[]): [XID, ParticipantRecord][];
252
- /**
253
- * Get display name for sender from registry.
254
- *
255
- * Port of `resolve_sender_name()` from cmd/dkg/common.rs lines 96-116.
256
- */
257
- declare function resolveSenderName(registry: Registry, sender: XIDDocument): string | undefined;
258
- /**
259
- * Build GroupParticipant[] from XIDDocuments using registry lookups.
260
- *
261
- * Port of `build_group_participants()` from cmd/dkg/common.rs lines 122-131.
262
- */
263
- declare function buildGroupParticipants(registry: Registry, owner: OwnerRecord, participants: XIDDocument[]): GroupParticipant[];
264
- /**
265
- * Create a GroupParticipant from a XIDDocument, validating against the registry.
266
- *
267
- * Port of `group_participant_from_registry()` from cmd/dkg/common.rs lines 133-149.
268
- */
269
- declare function groupParticipantFromRegistry(registry: Registry, owner: OwnerRecord, document: XIDDocument): GroupParticipant;
270
- /**
271
- * Format a participant name with owner marker if applicable.
272
- *
273
- * Port of `format_name_with_owner_marker()` from cmd/dkg/common.rs lines 155-157.
274
- */
275
- declare function formatNameWithOwnerMarker(name: string, isOwner: boolean): string;
276
- /**
277
- * Get display names for participants, sorted by XID, with owner marked.
278
- *
279
- * Port of `participant_names_from_registry()` from cmd/dkg/common.rs lines 159-191.
280
- */
281
- declare function participantNamesFromRegistry(registry: Registry, participants: XIDDocument[], ownerXid: XID, ownerPetName: string | undefined): string[];
282
- /**
283
- * Get the DKG state directory for a given registry path and group ID.
284
- *
285
- * Port of `dkg_state_dir()` from cmd/dkg/common.rs.
286
- */
287
- declare function dkgStateDir(registryPath: string, groupIdHex: string): string;
288
- /**
289
- * Convert a verifying key bytes to a SigningPublicKey.
290
- *
291
- * Port of `signing_key_from_verifying()` from cmd/dkg/common.rs.
292
- */
293
- declare function signingKeyFromVerifying(verifyingKeyBytes: Uint8Array): unknown;
294
- //#endregion
295
317
  //#region src/cmd/dkg/coordinator/invite.d.ts
296
318
  /**
297
319
  * Options for the DKG invite command.
@@ -612,7 +634,7 @@ declare namespace index_d_exports$5 {
612
634
  export { DkgFinalizeOptions, DkgFinalizeResult, DkgReceiveOptions, DkgReceiveResult, DkgRound1Options, DkgRound1Result, DkgRound2Options, DkgRound2Result, InviteDetails, decodeInviteDetails, finalize$1 as finalize, receive$1 as receive, resolveInviteEnvelope, round1$2 as round1, round2$2 as round2 };
613
635
  }
614
636
  declare namespace index_d_exports$4 {
615
- export { buildGroupParticipants, index_d_exports$6 as coordinator, dkgStateDir, formatNameWithOwnerMarker, groupParticipantFromRegistry, groupStateDir, parseAridUr, parseEnvelopeUr, index_d_exports$5 as participant, participantNamesFromRegistry, resolveParticipants, resolveSender, resolveSenderName, signingKeyFromVerifying };
637
+ export { buildGroupParticipants, index_d_exports$6 as coordinator, dkgStateDir, formatNameWithOwnerMarker, groupParticipantFromRegistry, groupStateDir, parseAridUr, parseEnvelopeUr, index_d_exports$5 as participant, participantNamesFromRegistry, resolveOwnerXidDocument, resolveParticipants, resolveSender, resolveSenderName, signingKeyFromVerifying };
616
638
  }
617
639
  //#endregion
618
640
  //#region src/cmd/sign/common.d.ts
@@ -1098,5 +1120,5 @@ declare namespace index_d_exports {
1098
1120
  */
1099
1121
  declare function participantsFilePath(registry: string | undefined, cwd: string): string;
1100
1122
  //#endregion
1101
- export { StorageClient as C, isVerbose as D, groupStateDir as E, setVerbose as O, putWithIndicator as S, createStorageClient as T, fetchStatusTimeout as _, CollectionResult as a, parallelSend as b, FetchStatus as c, directionEmoji as d, emptyCollectionResult as f, fetchStatusSuccess as g, fetchStatusRejected as h, checkAridExists as i, ParallelFetchConfig as l, fetchStatusPending as m, index_d_exports$1 as n, DEFAULT_TIMEOUT_SECONDS as o, fetchStatusError as p, index_d_exports$4 as r, Direction as s, index_d_exports as t, buildFetchRequests as u, parallelFetch as v, StorageSelection as w, getWithIndicator as x, parallelFetchConfigWithTimeout as y };
1102
- //# sourceMappingURL=index-CcvTi5EA.d.cts.map
1123
+ export { signingKeyFromVerifying as A, StorageClient as C, isVerbose as D, groupStateDir as E, setVerbose as O, putWithIndicator as S, createStorageClient as T, fetchStatusTimeout as _, CollectionResult as a, parallelSend as b, FetchStatus as c, directionEmoji as d, emptyCollectionResult as f, fetchStatusSuccess as g, fetchStatusRejected as h, checkAridExists as i, parseAridUr as k, ParallelFetchConfig as l, fetchStatusPending as m, index_d_exports$1 as n, DEFAULT_TIMEOUT_SECONDS as o, fetchStatusError as p, index_d_exports$4 as r, Direction as s, index_d_exports as t, buildFetchRequests as u, parallelFetch as v, StorageSelection as w, getWithIndicator as x, parallelFetchConfigWithTimeout as y };
1124
+ //# sourceMappingURL=index-BgbSGpxn.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index-BgbSGpxn.d.mts","names":[],"sources":["../src/cmd/dkg/common.ts","../src/cmd/common.ts","../src/cmd/storage.ts","../src/cmd/busy.ts","../src/cmd/parallel.ts","../src/cmd/check.ts","../src/cmd/dkg/coordinator/invite.ts","../src/cmd/dkg/coordinator/round1.ts","../src/cmd/dkg/coordinator/round2.ts","../src/cmd/dkg/coordinator/finalize.ts","../src/cmd/dkg/coordinator/index.ts","../src/cmd/dkg/participant/receive.ts","../src/cmd/dkg/participant/round1.ts","../src/cmd/dkg/participant/round2.ts","../src/cmd/dkg/participant/finalize.ts","../src/cmd/dkg/participant/index.ts","../src/cmd/dkg/index.ts","../src/cmd/sign/common.ts","../src/cmd/sign/coordinator/invite.ts","../src/cmd/sign/coordinator/round1.ts","../src/cmd/sign/coordinator/round2.ts","../src/cmd/sign/coordinator/index.ts","../src/cmd/sign/participant/receive.ts","../src/cmd/sign/participant/round1.ts","../src/cmd/sign/participant/round2.ts","../src/cmd/sign/participant/finalize.ts","../src/cmd/sign/participant/index.ts","../src/cmd/sign/index.ts","../src/cmd/registry/owner/set.ts","../src/cmd/registry/participant/add.ts","../src/cmd/registry/index.ts"],"mappings":";;;;;;;;;;;AAqGA;;;;;;;;;AA4BA;;;iBApFgB,WAAA,CAAY,QAAA,WAAmB,IAAA;;;;;;iBAkC/B,eAAA,CAAgB,QAAA,WAAmB,QAAA;AA8FnD;;;;;;;;;AAAA,iBAxEgB,uBAAA,CAAwB,QAAA,EAAU,QAAA,GAAW,WAAA;;;;;;AAmI7D;;;;;;;;;;AA6BA;;;iBApIgB,aAAA,CAAc,QAAA,EAAU,QAAA,EAAU,KAAA,WAAgB,WAAA;;;;;;iBA4ClD,mBAAA,CACd,QAAA,EAAU,QAAA,EACV,MAAA,cACE,GAAA,EAAK,iBAAA;;;;;;iBAwDO,iBAAA,CAAkB,QAAA,EAAU,QAAA,EAAU,MAAA,EAAQ,WAAA;;;AA0C9D;;;iBAbgB,sBAAA,CACd,QAAA,EAAU,QAAA,EACV,KAAA,EAAO,WAAA,EACP,YAAA,EAAc,WAAA,KACb,gBAAA;;;;;;iBASa,4BAAA,CACd,QAAA,EAAU,QAAA,EACV,KAAA,EAAO,WAAA,EACP,QAAA,EAAU,WAAA,GACT,gBAAA;;;;;;iBAyBa,yBAAA,CAA0B,IAAA,UAAc,OAAA;;;AAAxD;;;iBASgB,4BAAA,CACd,QAAA,EAAU,QAAA,EACV,YAAA,EAAc,WAAA,IACd,QAAA,EAAU,GAAA,EACV,YAAA;;AAJF;;;;iBAsCgB,WAAA,CAAY,YAAA,UAAsB,UAAA;;;;;;iBAUlC,uBAAA,CAAwB,iBAAA,EAAmB,UAAA;;;AAvO3D;;;;;AAAA,iBC5FgB,aAAA,CAAc,YAAA,UAAsB,UAAA;;;;iBAapC,UAAA,CAAW,KAAA;AD2H3B;;;;;AAAA,iBClHgB,SAAA,CAAA;;;;ADoBhB;;;;KE3DY,gBAAA;AFiFZ;;;;;AAAA,UE1EiB,aAAA;EF0E4C;;;EEtE3D,GAAA,CAAI,IAAA,EAAM,IAAA,EAAM,QAAA,EAAU,QAAA,GAAW,OAAA;EFkGV;;;EE7F3B,GAAA,CAAI,IAAA,EAAM,IAAA,EAAM,cAAA,YAA0B,OAAA,CAAQ,QAAA;EF6FtB;;;EExF5B,MAAA,CAAO,IAAA,EAAM,IAAA,GAAO,OAAA;AAAA;AFoItB;;;;;AAAA,iBE5HsB,mBAAA,CACpB,SAAA,EAAW,gBAAA,EACX,SAAA,YACC,OAAA,CAAQ,aAAA;;;AF2BX;;;;;AAAA,iBGzDsB,gBAAA,CACpB,MAAA,EAAQ,aAAA,EACR,IAAA,EAAM,IAAA,EACN,QAAA,EAAU,QAAA,EACV,OAAA,UACA,OAAA,YACC,OAAA;;;;;;iBAiBmB,gBAAA,CACpB,MAAA,EAAQ,aAAA,EACR,IAAA,EAAM,IAAA,EACN,OAAA,UACA,cAAA,sBACA,OAAA,YACC,OAAA,CAAQ,QAAA;;;;;AHkDX;;;KI5EY,WAAA;EACN,IAAA;AAAA;EACA,IAAA;EAAiB,QAAA,EAAU,QAAA;AAAA;EAC3B,IAAA;EAAkB,MAAA;AAAA;EAClB,IAAA;EAAe,KAAA;AAAA;EACf,IAAA;AAAA;;;AJ+IN;iBI1IgB,kBAAA,CAAA,GAAsB,WAAA;;;;iBAOtB,kBAAA,CAAmB,QAAA,EAAU,QAAA,GAAW,WAAA;;;;iBAOxC,mBAAA,CAAoB,MAAA,WAAiB,WAAA;;;;iBAOrC,gBAAA,CAAiB,KAAA,WAAgB,WAAA;;AJgLjD;;iBIzKgB,kBAAA,CAAA,GAAsB,WAAA;;;;;;aAS1B,SAAA;EJgK6D;EI9JvE,GAAA;EJ2LoC;EIzLpC,GAAA;AAAA;;;;;;iBAQc,cAAA,CAAe,SAAA,EAAW,SAAA;;;;;;UAczB,mBAAA;EJuKE;EIrKjB,cAAA;EJ8Kc;EI5Kd,OAAA;AAAA;;;;cAMW,uBAAA;;;;iBAKG,8BAAA,CAA+B,cAAA,YAA0B,mBAAA;;;;;;cAS5D,gBAAA;EJ4JM;EI1JjB,SAAA,GAAY,GAAA,EAAK,CAAA;EJmLsB;EIjLvC,UAAA,GAAa,GAAA;EJiL2B;EI/KxC,MAAA,GAAS,GAAA;EJwLK;EItLd,QAAA,EAAU,GAAA;;EJuLA;;;;;EIzKV,UAAA,CAAW,WAAA;EJyKX;;;;;EIhKA,KAAA,CAAA;EJmKgC;;AAkClC;;;EI1LE,YAAA,CAAA;AAAA;AJoMF;;;AAAA,iBI5LgB,qBAAA,GAAA,CAAA,GAA4B,gBAAA,CAAiB,CAAA;;;;;AHvI7D;iBGgJgB,kBAAA,CACd,OAAA,EAAS,QAAA,EAAU,GAAA,EAAK,IAAA,IACxB,OAAA,GAAU,GAAA,EAAK,GAAA,eACb,GAAA,EAAK,IAAA;;;;AHtIT;;iBG2KsB,aAAA,GAAA,CACpB,MAAA,EAAQ,aAAA,EACR,QAAA,GAAW,GAAA,EAAK,IAAA,aAChB,QAAA,GAAW,QAAA,EAAU,QAAA,EAAU,GAAA,EAAK,GAAA,KAAQ,CAAA;EAAM,QAAA;AAAA,GAClD,MAAA,EAAQ,mBAAA,GACP,OAAA,CAAQ,gBAAA,CAAiB,CAAA;AHvK5B;;;;;AAAA,iBG+OsB,YAAA,CACpB,MAAA,EAAQ,aAAA,EACR,QAAA,GAAW,GAAA,EAAK,IAAA,EAAM,QAAA,aACtB,OAAA,aACC,OAAA,EAAS,GAAA,EAAK,KAAA;;;;AJ/NjB;;;;iBK1DsB,eAAA,CAAgB,MAAA,EAAQ,aAAA,EAAe,IAAA,EAAM,IAAA,GAAO,OAAA;;;;AL0D1E;;UM/CiB,gBAAA;EACf,YAAA;EACA,UAAA;EACA,OAAA;EACA,SAAA;EACA,gBAAA;EACA,OAAA;AAAA;;;;UAMe,eAAA;EACf,OAAA,EAAS,IAAA;EACT,SAAA,EAAW,IAAA;EACX,UAAA;AAAA;;;;;;iBAsFoB,QAAA,CACpB,MAAA,EAAQ,aAAA,EACR,OAAA,EAAS,gBAAA,EACT,GAAA,WACC,OAAA,CAAQ,eAAA;;;;;AN1DX;UOnCiB,kBAAA;EACf,YAAA;EACA,OAAA;EACA,QAAA;EACA,cAAA;EACA,OAAA;EACA,OAAA;AAAA;;;;UAMe,iBAAA;EACf,QAAA;EACA,QAAA;EACA,MAAA;EACA,QAAA;AAAA;;;;;;;APiHF;iBOqnBsB,QAAA,CACpB,MAAA,EAAQ,aAAA,EACR,OAAA,EAAS,kBAAA,EACT,GAAA,WACC,OAAA,CAAQ,iBAAA;;;;APjsBX;;UQxDiB,kBAAA;EACf,YAAA;EACA,OAAA;EACA,QAAA;EACA,cAAA;EACA,OAAA;EACA,OAAA;AAAA;;;;UAMe,iBAAA;EACf,QAAA;EACA,QAAA;EACA,MAAA;EACA,QAAA;EACA,WAAA;AAAA;;;;;;UAQe,kBAAA;EACf,QAAA,GAAW,GAAA;EACX,gBAAA,EAAkB,IAAA;AAAA;;;;;;iBAmDJ,gCAAA,CACd,QAAA,EAAU,QAAA,EACV,eAAA,EAAiB,WAAA,EACjB,eAAA,EAAiB,IAAA,EACjB,cAAA,EAAgB,GAAA,GACf,kBAAA;EAAuB,QAAA;AAAA;;;;;;iBAmSJ,qBAAA,CACpB,MAAA,EAAQ,aAAA,EACR,QAAA,EAAU,QAAA,EACV,eAAA,EAAiB,eAAA,EACjB,eAAA,EAAiB,WAAA,EACjB,eAAA,EAAiB,IAAA,EACjB,OAAA,uBACC,OAAA,CAAQ,gBAAA,CAAiB,kBAAA;;ARrK5B;;;;iBQkMgB,qBAAA,CACd,YAAA,UACA,OAAA,EAAS,IAAA,EACT,SAAA,GAAY,GAAA,EAAK,kBAAA;;;;;;iBAwCH,sCAAA,CACd,QAAA,EAAU,QAAA,EACV,YAAA,UACA,OAAA,EAAS,IAAA,EACT,SAAA,GAAY,GAAA,EAAK,kBAAA;;;;;;iBAsDH,kCAAA,CACd,MAAA,EAAQ,WAAA,EACR,OAAA,EAAS,IAAA,EACT,YAAA,EAAc,IAAA,EACd,QAAA,GAAW,GAAA,eACV,aAAA;;AR/RH;;;;iBQgZsB,gCAAA,CACpB,MAAA,EAAQ,aAAA,EACR,QAAA,EAAU,QAAA,EACV,YAAA,UACA,WAAA,EAAa,WAAA,EACb,OAAA,EAAS,IAAA,EACT,SAAA,GAAY,GAAA,EAAK,kBAAA,KACjB,OAAA,YACC,OAAA;;;;;;;;iBAgKmB,QAAA,CACpB,MAAA,EAAQ,aAAA,EACR,OAAA,EAAS,kBAAA,EACT,GAAA,WACC,OAAA,CAAQ,iBAAA;;;;;AR/vBX;USxCiB,oBAAA;EACf,YAAA;EACA,OAAA;EACA,QAAA;EACA,cAAA;EACA,OAAA;AAAA;;;;UAMe,mBAAA;EACf,YAAA;EACA,SAAA;EACA,QAAA;EACA,MAAA;EACA,QAAA;AAAA;;;;;;;ATsHF;iBSqPsB,UAAA,CACpB,MAAA,EAAQ,aAAA,EACR,OAAA,EAAS,oBAAA,EACT,GAAA,WACC,OAAA,CAAQ,mBAAA;AAAA;;;;;;;;UElYM,iBAAA;EACf,YAAA;EACA,cAAA;EACA,UAAA;EACA,IAAA;EACA,MAAA;EACA,MAAA;EACA,gBAAA,GAAmB,gBAAA;EACnB,OAAA;AAAA;;;;UAMe,gBAAA;EACf,OAAA;EACA,SAAA;EACA,UAAA;EACA,OAAA;EACA,UAAA;EACA,YAAA;EACA,UAAA;EACA,eAAA;EACA,gBAAA;AAAA;;;;;;UAQe,aAAA;EACf,UAAA,EAAY,aAAA;EACZ,YAAA,EAAc,WAAA;AAAA;;AXmKhB;;;;iBW3JsB,qBAAA,CACpB,SAAA,EAAW,gBAAA,cACX,MAAA,UACA,OAAA,YACC,OAAA,CAAQ,QAAA;;;;;;iBA4CK,mBAAA,CACd,MAAA,EAAQ,QAAA,EACR,GAAA,EAAK,IAAA,EACL,QAAA,EAAU,QAAA,EACV,SAAA,EAAW,WAAA,EACX,cAAA,GAAiB,WAAA,GAChB,aAAA;;;;;;;;iBAqHmB,SAAA,CACpB,OAAA,EAAS,aAAA,cACT,OAAA,EAAS,iBAAA,EACT,GAAA,WACC,OAAA,CAAQ,gBAAA;;;;;AX7KX;UY3BiB,gBAAA;EACf,YAAA;EACA,cAAA;EACA,YAAA;EACA,OAAA;EACA,YAAA;EACA,MAAA;EACA,MAAA;EACA,gBAAA,GAAmB,gBAAA;EACnB,OAAA;AAAA;;;AZoEF;UY9DiB,eAAA;EACf,QAAA;EACA,aAAA;EACA,UAAA;AAAA;;;;;AZuGF;;;iBYiEsB,QAAA,CACpB,OAAA,EAAS,aAAA,cACT,OAAA,EAAS,gBAAA,EACT,GAAA,WACC,OAAA,CAAQ,eAAA;;;;;AZnKX;UalCiB,gBAAA;EACf,YAAA;EACA,OAAA;EACA,cAAA;EACA,OAAA;EACA,gBAAA,GAAmB,gBAAA;EACnB,OAAA;AAAA;;;;UAMe,eAAA;EACf,aAAA;EACA,UAAA;AAAA;;;;;;;;;iBAgYoB,QAAA,CACpB,OAAA,EAAS,aAAA,cACT,OAAA,EAAS,gBAAA,EACT,GAAA,WACC,OAAA,CAAQ,eAAA;;;;;AbhXX;Uc/BiB,kBAAA;EACf,YAAA;EACA,OAAA;EACA,cAAA;EACA,OAAA;EACA,gBAAA,GAAmB,gBAAA;EACnB,OAAA;AAAA;;;;UAMe,iBAAA;EACf,YAAA;EACA,cAAA;EACA,oBAAA;AAAA;;;;;;;;Ad8GF;iBcuLsB,UAAA,CACpB,OAAA,EAAS,aAAA,cACT,OAAA,EAAS,kBAAA,EACT,GAAA,WACC,OAAA,CAAQ,iBAAA;AAAA;;;;;;;;;;AdzRX;;;;;iBiBxDgB,uBAAA,CAAwB,YAAA,UAAsB,UAAA;;;;;;;;iBAW9C,eAAA,CACd,YAAA,UACA,UAAA,UACA,YAAA;AjB4FF;;;;;;;;AAAA,ciB/Ea,mBAAA;EAAA,iBACM,SAAA;EAAA,QAEV,WAAA,CAAA;EjBwH0B;;;;;EAAA,OiB/G1B,GAAA,CAAA,GAAO,mBAAA;EjBkHU;;;;;EiBxGxB,YAAA,CACE,SAAA,EAAW,sBAAA,EACX,MAAA,EAAQ,sBAAA,GACP,mBAAA;EjBqGqB;;AAwD1B;;;EiBnJE,QAAA,CAAA,GAAY,QAAA;EjBmJ8B;;;;;;AA6B5C;EA7B4C,OiBxInC,YAAA,CAAa,QAAA,EAAU,QAAA,GAAW,mBAAA;;;;;;EAYzC,UAAA,CAAA,GAAc,QAAA;AAAA;;;;;AjBPhB;;;UkBtDiB,YAAA;EACf,SAAA,EAAW,IAAA;EACX,SAAA,EAAW,IAAA;EACX,WAAA,EAAa,GAAA,SAAY,IAAA;EACzB,UAAA,EAAY,GAAA,SAAY,IAAA;AAAA;AlB8E1B;;;;;AAAA,iBkBtEgB,kBAAA,CAAmB,YAAA,EAAc,gBAAA,KAAqB,YAAA;;;;;AlBkHtE;iBkBvFgB,mBAAA,CAAoB,WAAA,EAAa,WAAA,EAAa,KAAA,EAAO,WAAA;;;;;;iBAiBrD,wBAAA,CACd,YAAA,EAAc,gBAAA,IACd,KAAA,EAAO,WAAA,EACP,QAAA,EAAU,QAAA,GACT,WAAA;;;;;;UA4Bc,iBAAA;EACf,KAAA,EAAO,YAAA;EACP,OAAA,EAAS,IAAA;EACT,cAAA,EAAgB,QAAA;EAChB,WAAA,EAAa,WAAA;EACb,KAAA,EAAO,WAAA;EACP,QAAA,EAAU,QAAA;EACV,YAAA,EAAc,gBAAA;EACd,UAAA,EAAY,IAAA;AAAA;;;AlBsHd;;;iBkB9GgB,sBAAA,CAAuB,GAAA,EAAK,iBAAA,GAAoB,aAAA;;;;;;iBA2DhD,qBAAA,CACd,KAAA,EAAO,YAAA,EACP,OAAA,EAAS,IAAA,EACT,WAAA,EAAa,WAAA,EACb,YAAA,EAAc,gBAAA,IACd,cAAA,EAAgB,QAAA,GACf,MAAA;;;;;;iBAmCa,mBAAA,CAAoB,UAAA,UAAoB,SAAA,EAAW,MAAA;;;AlBuBnE;;;iBkBRgB,oBAAA,CAAqB,QAAA,WAAmB,QAAA;;;;UAsBvC,iBAAA;EACf,YAAA;EACA,OAAA;EACA,UAAA;EACA,SAAA;EACA,OAAA;EACA,OAAA;AAAA;;;;UAMe,gBAAA;EACf,SAAA;EACA,SAAA;AAAA;;AlBUF;;;;;;iBkBIsB,MAAA,CACpB,MAAA,EAAQ,aAAA,cACR,OAAA,EAAS,iBAAA,EACT,GAAA,WACC,OAAA,CAAQ,gBAAA;;;;AlB3NX;;UmB3DiB,mBAAA;EACf,YAAA;EACA,OAAA;EACA,SAAA;EACA,QAAA;EACA,cAAA;EACA,OAAA;EACA,YAAA;AAAA;;;;UAMe,kBAAA;EACf,QAAA;EACA,QAAA;EACA,MAAA;EACA,QAAA;AAAA;;;;;;UAQe,sBAAA;EnB6GS;EmB3GxB,WAAA;EnByGA;EmBvGA,eAAA,EAAiB,IAAA;AAAA;;;;AnBiKnB;;UmBzJiB,gBAAA;EACf,UAAA,EAAY,IAAA;EACZ,SAAA,EAAW,IAAA;AAAA;;;;;AnBoLb;UmB5KiB,UAAA;EACf,OAAA,EAAS,IAAA;EACT,QAAA;EACA,YAAA,EAAc,GAAA,SAAY,gBAAA;AAAA;;;;;;iBA6GZ,gCAAA,CACd,QAAA,EAAU,QAAA,EACV,eAAA,EAAiB,WAAA,EACjB,cAAA,EAAgB,GAAA,EAChB,iBAAA,EAAmB,IAAA,GAClB,sBAAA;;;;;;iBA+DmB,0BAAA,CACpB,MAAA,EAAQ,aAAA,EACR,QAAA,EAAU,QAAA,EACV,UAAA,EAAY,UAAA,EACZ,WAAA,EAAa,WAAA,EACb,SAAA,EAAW,IAAA,EACX,OAAA,YACC,OAAA,CAAQ,gBAAA,CAAiB,sBAAA;AnBF5B;;;;;AAAA,iBmBsCgB,+BAAA,CACd,MAAA,EAAQ,WAAA,EACR,QAAA,EAAU,IAAA,EACV,SAAA,EAAW,IAAA,EACX,YAAA,EAAc,IAAA,EACd,WAAA,EAAa,GAAA,oBACZ,aAAA;;;;;;iBAqBmB,6BAAA,CACpB,MAAA,EAAQ,aAAA,EACR,QAAA,EAAU,QAAA,EACV,KAAA,EAAO,WAAA,EACP,UAAA,EAAY,UAAA,EACZ,SAAA,EAAW,IAAA,EACX,UAAA,EAAY,gBAAA,CAAiB,sBAAA,GAC7B,WAAA,EAAa,GAAA,mBACb,YAAA,YACA,OAAA,aACC,OAAA,EAAS,GAAA,EAAK,KAAA;;;;;;iBA+DD,kBAAA,CACd,YAAA,UACA,OAAA,EAAS,IAAA,EACT,SAAA,EAAW,IAAA,EACX,UAAA,EAAY,UAAA,EACZ,WAAA,EAAa,GAAA;AnBlHf;;;;;AASA;;;;AATA,iBmB2JgB,qBAAA,CACd,SAAA,EAAW,QAAA,EACX,WAAA,EAAa,gBAAA,CAAiB,sBAAA,GAC9B,WAAA,EAAa,UAAA;;;;;;;;iBAcO,QAAA,CACpB,MAAA,EAAQ,aAAA,EACR,OAAA,EAAS,mBAAA,EACT,GAAA,WACC,OAAA,CAAQ,kBAAA;;;;;AnBhZX;UoBvBiB,mBAAA;EACf,YAAA;EACA,OAAA;EACA,SAAA;EACA,QAAA;EACA,cAAA;EACA,eAAA;EACA,OAAA;AAAA;;;;UAMe,kBAAA;EACf,SAAA;EACA,cAAA;EACA,QAAA;EACA,QAAA;EACA,MAAA;EACA,QAAA;AAAA;;;;ApBkGF;;;;iBoB8XsB,QAAA,CACpB,MAAA,EAAQ,aAAA,EACR,OAAA,EAAS,mBAAA,EACT,GAAA,WACC,OAAA,CAAQ,kBAAA;AAAA;;;;;;;ApBheX;UsBlDiB,kBAAA;EACf,YAAA;EtBiD8B;EsB/C9B,OAAA;EACA,cAAA;EtBoEqC;EsBlErC,IAAA;EtBkEsE;EsBhEtE,MAAA;AAAA;;;;UAMe,iBAAA;EACf,SAAA;EACA,OAAA;EACA,QAAA;EACA,eAAA;EACA,UAAA;EACA,gBAAA;AAAA;;;AtB4HF;;;;;iBsBUsB,OAAA,CACpB,MAAA,EAAQ,aAAA,cACR,SAAA,EAAW,gBAAA,cACX,OAAA,EAAS,kBAAA,EACT,GAAA,WACC,OAAA,CAAQ,iBAAA;;;;;AtB7GX;UuBrCiB,iBAAA;EACf,YAAA;EACA,SAAA;EACA,OAAA;EACA,OAAA;EACA,YAAA;EACA,gBAAA,GAAmB,gBAAA;EACnB,OAAA;AAAA;;;;UAMe,gBAAA;EACf,QAAA;EACA,aAAA;EACA,UAAA;AAAA;;;;;;;AvBmHF;iBuByIsB,MAAA,CACpB,OAAA,EAAS,aAAA,cACT,OAAA,EAAS,iBAAA,EACT,GAAA,WACC,OAAA,CAAQ,gBAAA;;;;;AvB3OX;UwBtBiB,iBAAA;EACf,YAAA;EACA,SAAA;EACA,OAAA;EACA,cAAA;EACA,OAAA;EACA,OAAA;AAAA;;;;UAMe,gBAAA;EACf,aAAA;AAAA;;;;;;;;iBA2YoB,MAAA,CACpB,MAAA,EAAQ,aAAA,EACR,OAAA,EAAS,iBAAA,EACT,GAAA,WACC,OAAA,CAAQ,gBAAA;;;;;AxBtYX;UyB1BiB,mBAAA;EACf,YAAA;EACA,SAAA;EACA,OAAA;EACA,cAAA;EACA,OAAA;AAAA;;;;UAMe,kBAAA;EACf,SAAA;EACA,cAAA;AAAA;;;;;;;;iBA4pBoB,QAAA,CACpB,MAAA,EAAQ,aAAA,EACR,OAAA,EAAS,mBAAA,EACT,GAAA,WACC,OAAA,CAAQ,kBAAA;AAAA;;;;;;;;;;AzBnpBX;U4B7DiB,eAAA;;EAEf,WAAA;E5B2DyD;E4BzDzD,OAAA;E5B+EqC;E4B7ErC,YAAA;AAAA;;;;UAMe,cAAA;EACf,OAAA,EAAS,YAAA;AAAA;;;;;;;;iBA0BK,QAAA,CAAS,OAAA,EAAS,eAAA,EAAiB,GAAA,WAAc,cAAA;;;;;A5BsBjE;U6B7DiB,qBAAA;;EAEf,WAAA;E7B2DyD;E6BzDzD,OAAA;E7B+EqC;E6B7ErC,YAAA;AAAA;;;;UAMe,oBAAA;EACf,OAAA,EAAS,UAAA;AAAA;;;;;;;;iBA0BK,cAAA,CAAe,OAAA,EAAS,qBAAA,EAAuB,GAAA,WAAc,oBAAA;AAAA;;;;A7BsB7E;;;;;iB8BrDgB,oBAAA,CAAqB,QAAA,sBAA8B,GAAA"}
@@ -185,6 +185,13 @@ declare class OwnerRecord {
185
185
  toJSON(): Record<string, unknown>;
186
186
  /**
187
187
  * Deserialize from JSON object.
188
+ *
189
+ * Mirrors Rust's `#[serde(deny_unknown_fields)]` derive on
190
+ * `OwnerRecord` (`owner_record.rs:13-17`) — any field not in
191
+ * `{xid_document, pet_name}` causes Rust's `serde_json::from_str`
192
+ * to error with `unknown field`, and we mirror that here so a
193
+ * registry file produced by a future Rust version with extra
194
+ * fields is rejected explicitly rather than silently lossy.
188
195
  */
189
196
  static fromJSON(json: Record<string, unknown>): OwnerRecord;
190
197
  }
@@ -255,6 +262,14 @@ declare class ParticipantRecord {
255
262
  toJSON(): Record<string, unknown>;
256
263
  /**
257
264
  * Deserialize from JSON object.
265
+ *
266
+ * Mirrors Rust's `#[serde(deny_unknown_fields)]` derive on
267
+ * `ParticipantRecord` (`participant_record.rs:12-17`) — Rust's
268
+ * `serde_json::from_str` errors with `unknown field` for any
269
+ * field outside `{xid_document, pet_name}`. We mirror that
270
+ * behaviour so a registry file produced by a future Rust
271
+ * version with extra fields is rejected explicitly rather than
272
+ * silently lossy.
258
273
  */
259
274
  static fromJSON(json: Record<string, unknown>): ParticipantRecord;
260
275
  }
@@ -326,7 +341,27 @@ declare class Registry {
326
341
  /**
327
342
  * Add a participant.
328
343
  *
329
- * Returns the outcome indicating whether the participant was already present or newly inserted.
344
+ * Mirrors Rust `Registry::add_participant`
345
+ * (`registry_impl.rs:83-124`):
346
+ *
347
+ * 1. If `record.pet_name()` is already used by some other XID,
348
+ * bail with `"Pet name '{name}' already used by another
349
+ * participant"`.
350
+ * 2. If `record.pet_name()` matches an existing record under the
351
+ * *same* XID and the public keys also match, return
352
+ * `AlreadyPresent`.
353
+ * 3. If the pet name matches the same XID but public keys don't,
354
+ * bail with `"Participant already exists with a different pet
355
+ * name"`.
356
+ * 4. Otherwise look up by XID. If present and public-keys + pet-name
357
+ * both match, return `AlreadyPresent`; if XID is present but
358
+ * anything differs, bail. If XID is new, insert and return
359
+ * `Inserted`.
360
+ *
361
+ * The earlier port short-circuited on `participants.has(xidUr)` and
362
+ * always returned `AlreadyPresent` — silently allowing re-adds with
363
+ * a different pet name or different public keys, which Rust
364
+ * correctly forbids.
330
365
  */
331
366
  addParticipant(xid: XID, record: ParticipantRecord): AddOutcome;
332
367
  /**
@@ -378,6 +413,15 @@ declare class Registry {
378
413
  save(filePath: string): void;
379
414
  /**
380
415
  * Serialize to JSON object.
416
+ *
417
+ * Mirrors Rust `Registry`'s field declaration order
418
+ * (`registry_impl.rs:8-14` — `owner, participants, groups`). JSON
419
+ * object member order is not semantically significant, but
420
+ * `serde_json::to_string_pretty` emits keys in declaration order,
421
+ * so for byte-equal `registry.json` (used by the integration tests
422
+ * as a string assertion) the TS port must match Rust's order.
423
+ * Empty `owner` is omitted via `Option::None` skip in Rust; we
424
+ * reproduce that by only setting the key when the owner exists.
381
425
  */
382
426
  toJSON(): Record<string, unknown>;
383
427
  /**
@@ -393,4 +437,4 @@ declare class Registry {
393
437
  declare function resolveRegistryPath(registryArg: string | undefined, cwd: string): string;
394
438
  //#endregion
395
439
  export { resolveRegistryPath as a, ContributionPaths as c, PendingRequests as d, Registry as i, GroupParticipant as l, GroupOutcome as n, ParticipantRecord as o, OwnerOutcome as r, OwnerRecord as s, AddOutcome as t, GroupRecord as u };
396
- //# sourceMappingURL=registry-impl-CE76sTXQ.d.cts.map
440
+ //# sourceMappingURL=index-C8QeHNwa.d.cts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index-C8QeHNwa.d.cts","names":[],"sources":["../src/registry/group-record.ts","../src/registry/owner-record.ts","../src/registry/participant-record.ts","../src/registry/registry-impl.ts"],"mappings":"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"}
@@ -53,9 +53,32 @@ declare class DkgProposedParticipant {
53
53
  responseArid(): ARID;
54
54
  /**
55
55
  * Compare participants by XID for sorting.
56
+ *
57
+ * Mirrors Rust `PartialOrd::partial_cmp` which uses
58
+ * `self.xid().cmp(&other.xid())` — i.e. the underlying 32-byte XID
59
+ * data is compared lexicographically (`Vec<u8>` ordering). The
60
+ * earlier port used `xid.toString().localeCompare(...)`, which (a)
61
+ * compares the UR-encoded base32-ish string, not the bytes, and (b)
62
+ * is locale-aware. Sorting on UR strings differs from the byte
63
+ * order whenever the underlying bytes contain values ≥ 0x80, so
64
+ * Rust and TS would assign different FROST identifiers to the same
65
+ * participant set — producing different secret shares.
56
66
  */
57
67
  compareTo(other: DkgProposedParticipant): number;
58
68
  }
69
+ /**
70
+ * Lexicographic byte compare matching Rust's `Vec<u8>::cmp` /
71
+ * `XID::cmp`. Exported so the cmd-tree call sites (round1 / finalize)
72
+ * can use the same comparator when they sort deduplicated XID lists.
73
+ *
74
+ * `XID` is exactly 32 bytes so this only ever compares two equal-length
75
+ * inputs; the length-tiebreak branch mirrors the generic `Ord` impl on
76
+ * `Vec<u8>` and is included for correctness if ever applied to other
77
+ * byte sequences.
78
+ *
79
+ * @internal
80
+ */
81
+ declare function compareXidBytes(a: Uint8Array, b: Uint8Array): number;
59
82
  //#endregion
60
83
  //#region src/dkg/group-invite.d.ts
61
84
  /**
@@ -168,5 +191,5 @@ declare class DkgInvitation {
168
191
  static fromInvite(invite: Envelope, now: Date, expectedSender: XIDDocument | undefined, recipient: XIDDocument): DkgInvitation;
169
192
  }
170
193
  //#endregion
171
- export { declined as a, accepted as i, DkgInvitationResult as n, DkgProposedParticipant as o, DkgInvite as r, DkgInvitation as t };
172
- //# sourceMappingURL=group-invite-Wk9CIbHL.d.mts.map
194
+ export { declined as a, accepted as i, DkgInvitationResult as n, DkgProposedParticipant as o, DkgInvite as r, compareXidBytes as s, DkgInvitation as t };
195
+ //# sourceMappingURL=index-D3QTWkEm.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index-D3QTWkEm.d.mts","names":[],"sources":["../src/dkg/proposed-participant.ts","../src/dkg/group-invite.ts"],"mappings":";;;;;;;;;;;cAsBa,sBAAA;EAAA,iBACM,SAAA;EAAA,iBACA,SAAA;EAAA,iBACA,SAAA;EAAA,iBACA,aAAA;EAAA,QAEV,WAAA,CAAA;EAiBuC;;;;;EAAA,OAAvC,MAAA,CAAO,QAAA,UAAkB,YAAA,EAAc,IAAA,GAAO,sBAAA;EAmBtC;;;;;EATf,GAAA,CAAA,GAAO,GAAA;EAqDP;;;;;EA5CA,WAAA,CAAA,GAAe,WAAA;EA6Dc;;;;;EApD7B,aAAA,CAAA;EAoD6C;;;;;EA3C7C,mBAAA,CAAA,GAAuB,QAAA;ECzDb;;;;;EDkEV,YAAA,CAAA,GAAgB,IAAA;EClE2D;;;AAK7E;;;;;AAOA;;;;;EDuEE,SAAA,CAAU,KAAA,EAAO,sBAAA;AAAA;;;;;;;;;;;;;iBAiBH,eAAA,CAAgB,CAAA,EAAG,UAAA,EAAY,CAAA,EAAG,UAAA;;;;;;;;KCpGtC,mBAAA;EAAwB,IAAA;AAAA;EAAuB,IAAA;EAAkB,MAAA;AAAA;;;;iBAK7D,QAAA,CAAA,GAAY,mBAAA;;;;iBAOZ,QAAA,CAAS,MAAA,WAAiB,mBAAA;;;;;;cAS7B,SAAA;EAAA,iBACM,UAAA;EAAA,iBACA,OAAA;EAAA,iBACA,QAAA;EAAA,iBACA,KAAA;EAAA,iBACA,WAAA;EAAA,iBACA,WAAA;EAAA,iBACA,QAAA;EAAA,iBACA,oBAAA;EAAA,QAEV,WAAA,CAAA;EDqEmD;;;;;EAAA,OC5CnD,MAAA,CACL,SAAA,EAAW,IAAA,EACX,MAAA,EAAQ,WAAA,EACR,OAAA,EAAS,IAAA,EACT,IAAA,EAAM,IAAA,EACN,UAAA,EAAY,IAAA,EACZ,UAAA,UACA,OAAA,UACA,YAAA,YACA,aAAA,EAAe,IAAA,KACd,SAAA;EAkCH,SAAA,CAAA,GAAa,IAAA;EAIb,MAAA,CAAA,GAAU,WAAA;EAIV,OAAA,CAAA,GAAW,IAAA;EAIX,IAAA,CAAA,GAAQ,IAAA;EAIR,UAAA,CAAA,GAAc,IAAA;EAId,UAAA,CAAA;EAIA,OAAA,CAAA;EAIA,YAAA,CAAA,GAAgB,sBAAA;EA3HF;;;;;EAoId,SAAA,CAAA,GAAa,aAAA;EA7HS;;;;AASxB;EAsJE,kBAAA,CAAA,GAAsB,QAAA;;;;;;EAqBtB,UAAA,CAAA,GAAc,QAAA;AAAA;;;;;;cAoBH,aAAA;EAAA,iBACM,aAAA;EAAA,iBACA,WAAA;EAAA,iBACA,OAAA;EAAA,iBACA,UAAA;EAAA,iBACA,iBAAA;EAAA,iBACA,WAAA;EAAA,iBACA,QAAA;EAAA,iBACA,QAAA;EAAA,QAEV,WAAA,CAAA;EAoBP,YAAA,CAAA,GAAgB,IAAA;EAIhB,UAAA,CAAA,GAAc,IAAA;EAId,MAAA,CAAA,GAAU,WAAA;EAIV,SAAA,CAAA,GAAa,IAAA;EAIb,gBAAA,CAAA,GAAoB,QAAA;EAIpB,UAAA,CAAA;EAIA,OAAA,CAAA;EAIA,OAAA,CAAA,GAAW,IAAA;EArNT;;;;;EA8NF,UAAA,CAAW,QAAA,EAAU,mBAAA,EAAqB,SAAA,EAAW,WAAA,GAAc,cAAA;EA3NjE;;;;;EA2OF,UAAA,CAAW,QAAA,EAAU,mBAAA,EAAqB,SAAA,EAAW,WAAA,GAAc,QAAA;EAtOlD;;;;;EAAA,OAwPV,UAAA,CACL,MAAA,EAAQ,QAAA,EACR,GAAA,EAAK,IAAA,EACL,cAAA,EAAgB,WAAA,cAChB,SAAA,EAAW,WAAA,GACV,aAAA;AAAA"}
@@ -185,6 +185,13 @@ declare class OwnerRecord {
185
185
  toJSON(): Record<string, unknown>;
186
186
  /**
187
187
  * Deserialize from JSON object.
188
+ *
189
+ * Mirrors Rust's `#[serde(deny_unknown_fields)]` derive on
190
+ * `OwnerRecord` (`owner_record.rs:13-17`) — any field not in
191
+ * `{xid_document, pet_name}` causes Rust's `serde_json::from_str`
192
+ * to error with `unknown field`, and we mirror that here so a
193
+ * registry file produced by a future Rust version with extra
194
+ * fields is rejected explicitly rather than silently lossy.
188
195
  */
189
196
  static fromJSON(json: Record<string, unknown>): OwnerRecord;
190
197
  }
@@ -255,6 +262,14 @@ declare class ParticipantRecord {
255
262
  toJSON(): Record<string, unknown>;
256
263
  /**
257
264
  * Deserialize from JSON object.
265
+ *
266
+ * Mirrors Rust's `#[serde(deny_unknown_fields)]` derive on
267
+ * `ParticipantRecord` (`participant_record.rs:12-17`) — Rust's
268
+ * `serde_json::from_str` errors with `unknown field` for any
269
+ * field outside `{xid_document, pet_name}`. We mirror that
270
+ * behaviour so a registry file produced by a future Rust
271
+ * version with extra fields is rejected explicitly rather than
272
+ * silently lossy.
258
273
  */
259
274
  static fromJSON(json: Record<string, unknown>): ParticipantRecord;
260
275
  }
@@ -326,7 +341,27 @@ declare class Registry {
326
341
  /**
327
342
  * Add a participant.
328
343
  *
329
- * Returns the outcome indicating whether the participant was already present or newly inserted.
344
+ * Mirrors Rust `Registry::add_participant`
345
+ * (`registry_impl.rs:83-124`):
346
+ *
347
+ * 1. If `record.pet_name()` is already used by some other XID,
348
+ * bail with `"Pet name '{name}' already used by another
349
+ * participant"`.
350
+ * 2. If `record.pet_name()` matches an existing record under the
351
+ * *same* XID and the public keys also match, return
352
+ * `AlreadyPresent`.
353
+ * 3. If the pet name matches the same XID but public keys don't,
354
+ * bail with `"Participant already exists with a different pet
355
+ * name"`.
356
+ * 4. Otherwise look up by XID. If present and public-keys + pet-name
357
+ * both match, return `AlreadyPresent`; if XID is present but
358
+ * anything differs, bail. If XID is new, insert and return
359
+ * `Inserted`.
360
+ *
361
+ * The earlier port short-circuited on `participants.has(xidUr)` and
362
+ * always returned `AlreadyPresent` — silently allowing re-adds with
363
+ * a different pet name or different public keys, which Rust
364
+ * correctly forbids.
330
365
  */
331
366
  addParticipant(xid: XID, record: ParticipantRecord): AddOutcome;
332
367
  /**
@@ -378,6 +413,15 @@ declare class Registry {
378
413
  save(filePath: string): void;
379
414
  /**
380
415
  * Serialize to JSON object.
416
+ *
417
+ * Mirrors Rust `Registry`'s field declaration order
418
+ * (`registry_impl.rs:8-14` — `owner, participants, groups`). JSON
419
+ * object member order is not semantically significant, but
420
+ * `serde_json::to_string_pretty` emits keys in declaration order,
421
+ * so for byte-equal `registry.json` (used by the integration tests
422
+ * as a string assertion) the TS port must match Rust's order.
423
+ * Empty `owner` is omitted via `Option::None` skip in Rust; we
424
+ * reproduce that by only setting the key when the owner exists.
381
425
  */
382
426
  toJSON(): Record<string, unknown>;
383
427
  /**
@@ -393,4 +437,4 @@ declare class Registry {
393
437
  declare function resolveRegistryPath(registryArg: string | undefined, cwd: string): string;
394
438
  //#endregion
395
439
  export { resolveRegistryPath as a, ContributionPaths as c, PendingRequests as d, Registry as i, GroupParticipant as l, GroupOutcome as n, ParticipantRecord as o, OwnerOutcome as r, OwnerRecord as s, AddOutcome as t, GroupRecord as u };
396
- //# sourceMappingURL=registry-impl-BETn_lEO.d.mts.map
440
+ //# sourceMappingURL=index-DVbWyOs7.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index-DVbWyOs7.d.mts","names":[],"sources":["../src/registry/group-record.ts","../src/registry/owner-record.ts","../src/registry/participant-record.ts","../src/registry/registry-impl.ts"],"mappings":"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"}