diff --git a/packages/fetch-node-details/src/nodeDetailManager.ts b/packages/fetch-node-details/src/nodeDetailManager.ts index 880ee8a..d8bc954 100644 --- a/packages/fetch-node-details/src/nodeDetailManager.ts +++ b/packages/fetch-node-details/src/nodeDetailManager.ts @@ -83,13 +83,26 @@ class NodeDetailManager { }; } - async getNodeDetails({ verifier, verifierId }: { verifier: string; verifierId: string }): Promise { + async getNodeDetails({ + verifier, + verifierId, + keyType, + sigType, + }: { + verifier: string; + verifierId: string; + keyType?: WEB3AUTH_KEY_TYPE; + sigType?: WEB3AUTH_SIG_TYPE; + }): Promise { try { if (this.updated && !MULTI_CLUSTER_NETWORKS.includes(this.network as TORUS_LEGACY_NETWORK_TYPE)) return this._nodeDetails; + const finalKeyType = keyType ?? this._keyType; + const finalSigType = sigType ?? this._sigType; + try { const { nodeDetails } = await get<{ nodeDetails: INodeDetails }>( - `${this.fndServerEndpoint}?network=${this.network}&verifier=${verifier}&verifierId=${verifierId}&keyType=${this._keyType}&sigType=${this._sigType}` + `${this.fndServerEndpoint}?network=${this.network}&verifier=${verifier}&verifierId=${verifierId}&keyType=${finalKeyType}&sigType=${finalSigType}` ); this.setNodeDetails(nodeDetails); @@ -98,7 +111,7 @@ class NodeDetailManager { log.error("Failed to fetch node details from server, using local.", error); } - const nodeDetails = fetchLocalConfig(this.network as TORUS_NETWORK_TYPE, this._keyType, this._sigType); + const nodeDetails = fetchLocalConfig(this.network as TORUS_NETWORK_TYPE, finalKeyType, finalSigType); if (!nodeDetails) throw new Error("Failed to fetch node details"); this.setNodeDetails(nodeDetails); return this._nodeDetails; diff --git a/packages/fetch-node-details/test/nodeDetail.test.ts b/packages/fetch-node-details/test/nodeDetail.test.ts index 483f42a..481c017 100644 --- a/packages/fetch-node-details/test/nodeDetail.test.ts +++ b/packages/fetch-node-details/test/nodeDetail.test.ts @@ -124,4 +124,28 @@ describe("Fetch Node Details", function () { delete details.updated; deepStrictEqual(details, getSapphireNodeDetails(TORUS_SAPPHIRE_NETWORK.SAPPHIRE_MAINNET)); }); + + it("#should use override keytype and signType if provided", async function () { + const nodeDetailManager = new NodeDetailManager({ + fndServerEndpoint, + enableLogging: true, + }); + const details = await nodeDetailManager.getNodeDetails({ + verifier: "google", + verifierId: "hello@tor.us", + keyType: "ed25519", + sigType: "ed25519", + }); + delete details.updated; + deepStrictEqual(details, getSapphireNodeDetails(TORUS_SAPPHIRE_NETWORK.SAPPHIRE_MAINNET, undefined, "ed25519", "ed25519")); + + const details2 = await nodeDetailManager.getNodeDetails({ + verifier: "google", + verifierId: "hello@tor.us", + keyType: "secp256k1", + sigType: "bip340", + }); + delete details2.updated; + deepStrictEqual(details2, getSapphireNodeDetails(TORUS_SAPPHIRE_NETWORK.SAPPHIRE_MAINNET, undefined, "secp256k1", "bip340")); + }); });