Skip to content

Commit a7c7906

Browse files
Merge pull request #83 from torusresearch/feat/tss-frost-url
added support for tss-frost endpoints
2 parents a9c654a + de02266 commit a7c7906

File tree

10 files changed

+66
-139
lines changed

10 files changed

+66
-139
lines changed

packages/constants/src/constants.ts

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -79,3 +79,8 @@ export const METADATA_MAP: Record<TORUS_LEGACY_NETWORK_TYPE, string> = {
7979

8080
export const FND_SERVER = "https://fnd.web3auth.io";
8181
export const SESSION_SERVER = "https://session.web3auth.io";
82+
83+
export const KEY_TYPE = {
84+
SECP256K1: "secp256k1",
85+
ED25519: "ed25519",
86+
} as const;

packages/constants/src/interfaces.ts

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import { TORUS_LEGACY_NETWORK, TORUS_SAPPHIRE_NETWORK } from "./constants";
1+
import { KEY_TYPE, TORUS_LEGACY_NETWORK, TORUS_SAPPHIRE_NETWORK } from "./constants";
22

33
export interface JRPCResponse<T> {
44
id: number;
@@ -33,6 +33,8 @@ export type TORUS_SAPPHIRE_NETWORK_TYPE = (typeof TORUS_SAPPHIRE_NETWORK)[keyof
3333

3434
export type TORUS_NETWORK_TYPE = TORUS_LEGACY_NETWORK_TYPE | TORUS_SAPPHIRE_NETWORK_TYPE;
3535

36+
export type WEB3AUTH_KEY_TYPE = (typeof KEY_TYPE)[keyof typeof KEY_TYPE];
37+
3638
export type NODE = {
3739
address: string;
3840
node_index: string;
Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,8 @@
1-
import { TORUS_NETWORK_TYPE } from "@toruslabs/constants";
1+
import { TORUS_NETWORK_TYPE, WEB3AUTH_KEY_TYPE } from "@toruslabs/constants";
22

3-
export type NodeDetailManagerParams = { network?: TORUS_NETWORK_TYPE; fndServerEndpoint?: string; enableLogging?: boolean };
3+
export type NodeDetailManagerParams = {
4+
network?: TORUS_NETWORK_TYPE;
5+
keyType?: WEB3AUTH_KEY_TYPE;
6+
fndServerEndpoint?: string;
7+
enableLogging?: boolean;
8+
};

packages/fetch-node-details/src/nodeDetailManager.ts

Lines changed: 13 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,12 +2,14 @@ import {
22
FND_SERVER,
33
INodeDetails,
44
INodePub,
5+
KEY_TYPE,
56
METADATA_MAP,
67
MULTI_CLUSTER_NETWORKS,
78
TORUS_LEGACY_NETWORK,
89
TORUS_LEGACY_NETWORK_TYPE,
910
TORUS_NETWORK_TYPE,
1011
TORUS_SAPPHIRE_NETWORK,
12+
WEB3AUTH_KEY_TYPE,
1113
} from "@toruslabs/constants";
1214
import { fetchLocalConfig } from "@toruslabs/fnd-base";
1315
import { get } from "@toruslabs/http-helpers";
@@ -22,6 +24,8 @@ class NodeDetailManager {
2224

2325
private _currentEpoch = "1";
2426

27+
private _keyType: WEB3AUTH_KEY_TYPE;
28+
2529
private _torusNodeEndpoints: string[] = [];
2630

2731
private _torusNodeRSSEndpoints: string[] = [];
@@ -38,9 +42,14 @@ class NodeDetailManager {
3842

3943
private network: TORUS_NETWORK_TYPE;
4044

41-
constructor({ network = TORUS_SAPPHIRE_NETWORK.SAPPHIRE_MAINNET, fndServerEndpoint, enableLogging = false }: NodeDetailManagerParams = {}) {
45+
constructor({
46+
network = TORUS_SAPPHIRE_NETWORK.SAPPHIRE_MAINNET,
47+
keyType = KEY_TYPE.SECP256K1,
48+
fndServerEndpoint,
49+
enableLogging = false,
50+
}: NodeDetailManagerParams = {}) {
4251
this.network = network;
43-
52+
this._keyType = keyType;
4453
this.updated = false;
4554
if (fndServerEndpoint) {
4655
this.fndServerEndpoint = fndServerEndpoint;
@@ -71,7 +80,7 @@ class NodeDetailManager {
7180

7281
try {
7382
const { nodeDetails } = await get<{ nodeDetails: INodeDetails }>(
74-
`${this.fndServerEndpoint}?network=${this.network}&verifier=${verifier}&verifierId=${verifierId}`
83+
`${this.fndServerEndpoint}?network=${this.network}&verifier=${verifier}&verifierId=${verifierId}&keyType=${this._keyType}`
7584
);
7685
this.setNodeDetails(nodeDetails);
7786

@@ -80,7 +89,7 @@ class NodeDetailManager {
8089
log.error("Failed to fetch node details from server, using local.", error);
8190
}
8291

83-
const nodeDetails = fetchLocalConfig(this.network as TORUS_NETWORK_TYPE);
92+
const nodeDetails = fetchLocalConfig(this.network as TORUS_NETWORK_TYPE, this._keyType);
8493
if (!nodeDetails) throw new Error("Failed to fetch node details");
8594
this.setNodeDetails(nodeDetails);
8695
return this._nodeDetails;

packages/fetch-node-details/test/nodeDetail.test.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@ describe("Fetch Node Details", function () {
2020
deepStrictEqual(details, getSapphireNodeDetails(TORUS_SAPPHIRE_NETWORK.SAPPHIRE_MAINNET, TORUS_LEGACY_NETWORK.MAINNET));
2121
strictEqual(metadataUrl, METADATA_MAP[TORUS_LEGACY_NETWORK.MAINNET]);
2222
});
23+
2324
it("#should return correct values - sapphire devnet", async function () {
2425
const nodeDetailManager = new NodeDetailManager({
2526
network: TORUS_SAPPHIRE_NETWORK.SAPPHIRE_DEVNET,

packages/fnd-base/src/endpoints.ts

Lines changed: 16 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,11 @@
1-
import { LEGACY_NETWORKS_ROUTE_MAP, TORUS_LEGACY_NETWORK_TYPE, TORUS_SAPPHIRE_NETWORK, TORUS_SAPPHIRE_NETWORK_TYPE } from "@toruslabs/constants";
1+
import {
2+
KEY_TYPE,
3+
LEGACY_NETWORKS_ROUTE_MAP,
4+
TORUS_LEGACY_NETWORK_TYPE,
5+
TORUS_SAPPHIRE_NETWORK,
6+
TORUS_SAPPHIRE_NETWORK_TYPE,
7+
WEB3AUTH_KEY_TYPE,
8+
} from "@toruslabs/constants";
29

310
export const SAPPHIRE_NETWORK_URLS: Record<TORUS_SAPPHIRE_NETWORK_TYPE, string[]> = {
411
[TORUS_SAPPHIRE_NETWORK.SAPPHIRE_DEVNET]: [
@@ -46,17 +53,22 @@ export const getRSSEndpoints = (sapphireNetwork: TORUS_SAPPHIRE_NETWORK_TYPE, le
4653
});
4754
};
4855

49-
export const getTSSEndpoints = (sapphireNetwork: TORUS_SAPPHIRE_NETWORK_TYPE, legacyNetwork?: TORUS_LEGACY_NETWORK_TYPE) => {
56+
export const getTSSEndpoints = (
57+
sapphireNetwork: TORUS_SAPPHIRE_NETWORK_TYPE,
58+
legacyNetwork?: TORUS_LEGACY_NETWORK_TYPE,
59+
keyType = KEY_TYPE.SECP256K1 as WEB3AUTH_KEY_TYPE
60+
) => {
5061
const endpoints = SAPPHIRE_NETWORK_URLS[sapphireNetwork];
5162
if (!endpoints || endpoints.length === 0) {
5263
throw new Error(`Unsupported network: ${sapphireNetwork}`);
5364
}
5465

66+
const tssPath = keyType === KEY_TYPE.ED25519 ? "tss-frost" : "tss";
5567
const routeIdentifier = LEGACY_NETWORKS_ROUTE_MAP[legacyNetwork as TORUS_LEGACY_NETWORK_TYPE];
5668
return endpoints.map((e) => {
5769
if (routeIdentifier && routeIdentifier.networkIdentifier) {
58-
return `${e}/tss/${routeIdentifier.networkIdentifier}`;
70+
return `${e}/${tssPath}/${routeIdentifier.networkIdentifier}`;
5971
}
60-
return `${e}/tss`;
72+
return `${e}/${tssPath}`;
6173
});
6274
};

packages/fnd-base/src/sapphireNetworkConfig.ts

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,13 @@
1-
import { INodeDetails, TORUS_LEGACY_NETWORK_TYPE, TORUS_SAPPHIRE_NETWORK_TYPE } from "@toruslabs/constants";
1+
import { INodeDetails, TORUS_LEGACY_NETWORK_TYPE, TORUS_SAPPHIRE_NETWORK_TYPE, WEB3AUTH_KEY_TYPE } from "@toruslabs/constants";
22

33
import { getRSSEndpoints, getSSSEndpoints, getTSSEndpoints } from "./endpoints";
44
import { SAPPHIRE_NODE_PUB_KEYS } from "./pubKeys";
55

6-
export const getSapphireNodeDetails = (sapphireNetwork: TORUS_SAPPHIRE_NETWORK_TYPE, legacyNetwork?: TORUS_LEGACY_NETWORK_TYPE): INodeDetails => {
6+
export const getSapphireNodeDetails = (
7+
sapphireNetwork: TORUS_SAPPHIRE_NETWORK_TYPE,
8+
legacyNetwork?: TORUS_LEGACY_NETWORK_TYPE,
9+
keyType?: WEB3AUTH_KEY_TYPE
10+
): INodeDetails => {
711
return {
812
currentEpoch: "1",
913

@@ -13,7 +17,7 @@ export const getSapphireNodeDetails = (sapphireNetwork: TORUS_SAPPHIRE_NETWORK_T
1317

1418
torusNodeRSSEndpoints: getRSSEndpoints(sapphireNetwork, legacyNetwork),
1519

16-
torusNodeTSSEndpoints: getTSSEndpoints(sapphireNetwork, legacyNetwork),
20+
torusNodeTSSEndpoints: getTSSEndpoints(sapphireNetwork, legacyNetwork, keyType),
1721
torusIndexes: [1, 2, 3, 4, 5],
1822

1923
torusNodePub: SAPPHIRE_NODE_PUB_KEYS[sapphireNetwork],

packages/fnd-base/src/utils.ts

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,18 +6,19 @@ import {
66
TORUS_NETWORK_TYPE,
77
TORUS_SAPPHIRE_NETWORK,
88
TORUS_SAPPHIRE_NETWORK_TYPE,
9+
WEB3AUTH_KEY_TYPE,
910
} from "@toruslabs/constants";
1011

1112
import { getSapphireNodeDetails } from "./sapphireNetworkConfig";
1213

13-
export function fetchLocalConfig(network: TORUS_NETWORK_TYPE): INodeDetails | undefined {
14+
export function fetchLocalConfig(network: TORUS_NETWORK_TYPE, keyType: WEB3AUTH_KEY_TYPE): INodeDetails | undefined {
1415
if (Object.values(TORUS_SAPPHIRE_NETWORK).includes(network as TORUS_SAPPHIRE_NETWORK_TYPE)) {
15-
return getSapphireNodeDetails(network as TORUS_SAPPHIRE_NETWORK_TYPE);
16+
return getSapphireNodeDetails(network as TORUS_SAPPHIRE_NETWORK_TYPE, undefined, keyType);
1617
}
1718

1819
if (Object.values(TORUS_LEGACY_NETWORK).includes(network as TORUS_LEGACY_NETWORK_TYPE)) {
1920
const legacyMap = LEGACY_NETWORKS_ROUTE_MAP[network as TORUS_LEGACY_NETWORK_TYPE];
20-
if (legacyMap.migrationCompleted) return getSapphireNodeDetails(legacyMap.networkMigratedTo, network as TORUS_LEGACY_NETWORK_TYPE);
21+
if (legacyMap.migrationCompleted) return getSapphireNodeDetails(legacyMap.networkMigratedTo, network as TORUS_LEGACY_NETWORK_TYPE, keyType);
2122
}
2223

2324
return undefined;

packages/fnd-server/src/router.ts

Lines changed: 10 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,12 @@
11
import {
2+
KEY_TYPE,
23
MULTI_CLUSTER_NETWORKS,
34
PROXY_CONTRACT_ADDRESS,
45
TORUS_LEGACY_NETWORK,
56
TORUS_LEGACY_NETWORK_TYPE,
67
TORUS_NETWORK_TYPE,
78
TORUS_SAPPHIRE_NETWORK,
9+
WEB3AUTH_KEY_TYPE,
810
} from "@toruslabs/constants";
911
import { fetchLocalConfig } from "@toruslabs/fnd-base";
1012
import { celebrate, Joi } from "celebrate";
@@ -41,24 +43,27 @@ router.get(
4143
.allow(...Object.values(TORUS_LEGACY_NETWORK), ...Object.values(TORUS_SAPPHIRE_NETWORK)),
4244
verifier: Joi.string().required(),
4345
verifierId: Joi.string().required(),
46+
keyType: Joi.string()
47+
.optional()
48+
.allow(...Object.values(KEY_TYPE)),
4449
}),
4550
},
4651
{ allowUnknown: true }
4752
),
4853
async (req: Request, res: Response) => {
4954
try {
50-
const { network, verifier, verifierId } = req.query as Record<string, string>;
55+
const { network, verifier, verifierId, keyType = "secp256k1" } = req.query as Record<string, string>;
5156
const finalNetwork = network.toLowerCase();
52-
const cacheKey = getNetworkRedisKey(finalNetwork as TORUS_NETWORK_TYPE, verifier, verifierId);
53-
54-
let nodeDetails = fetchLocalConfig(finalNetwork as TORUS_NETWORK_TYPE);
57+
// use static details for sapphire mainnet and testnet
58+
let nodeDetails = fetchLocalConfig(finalNetwork as TORUS_NETWORK_TYPE, keyType as WEB3AUTH_KEY_TYPE);
5559
if (nodeDetails) {
5660
return res.status(200).json({
5761
nodeDetails,
5862
success: true,
5963
});
6064
}
61-
// use static details for mainnet and testnet
65+
66+
const cacheKey = getNetworkRedisKey(finalNetwork as TORUS_NETWORK_TYPE, verifier, verifierId);
6267
try {
6368
const cachedInfo = await redisClient.get(cacheKey);
6469
if (cachedInfo) {

packages/fnd-server/src/utils/sapphireNodeDetails.ts

Lines changed: 0 additions & 117 deletions
This file was deleted.

0 commit comments

Comments
 (0)