From 43f7444899ecbb2331c57d5a1cf1cf3edbf16b20 Mon Sep 17 00:00:00 2001 From: metalurgical <97008724+metalurgical@users.noreply.github.com> Date: Wed, 24 Jul 2024 10:41:23 +0200 Subject: [PATCH] refactor: add types for extra params --- .gitignore | 1 + package-lock.json | 131 +++++++++++++++++++++++++++++------ src/TorusUtilsExtraParams.ts | 23 ++++++ src/helpers/nodeUtils.ts | 3 +- src/torus.ts | 25 ++++--- 5 files changed, 150 insertions(+), 33 deletions(-) create mode 100644 src/TorusUtilsExtraParams.ts diff --git a/.gitignore b/.gitignore index 9f6504c..a1b106c 100644 --- a/.gitignore +++ b/.gitignore @@ -104,3 +104,4 @@ dist .tern-port .env.test +**/*.DS_Store diff --git a/package-lock.json b/package-lock.json index ca2c5b0..c97ff03 100644 --- a/package-lock.json +++ b/package-lock.json @@ -4204,15 +4204,14 @@ } }, "node_modules/asn1.js": { - "version": "5.4.1", - "resolved": "https://registry.npmjs.org/asn1.js/-/asn1.js-5.4.1.tgz", - "integrity": "sha512-+I//4cYPccV8LdmBLiX8CYvf9Sp3vQsrqu2QNXRcrbiWvcx/UdlFiqUJJzxRQxgsZmvhXhn4cSKeSmoFjVdupA==", + "version": "4.10.1", + "resolved": "https://registry.npmjs.org/asn1.js/-/asn1.js-4.10.1.tgz", + "integrity": "sha512-p32cOF5q0Zqs9uBiONKYLm6BClCoBCM5O9JfeUSlnQLBTxYdTK+pW+nXflm8UkKd2UYlEbYz5qEi0JuZR9ckSw==", "dev": true, "dependencies": { "bn.js": "^4.0.0", "inherits": "^2.0.1", - "minimalistic-assert": "^1.0.0", - "safer-buffer": "^2.1.0" + "minimalistic-assert": "^1.0.0" } }, "node_modules/asn1.js/node_modules/bn.js": { @@ -4734,22 +4733,81 @@ } }, "node_modules/browserify-sign": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/browserify-sign/-/browserify-sign-4.2.1.tgz", - "integrity": "sha512-/vrA5fguVAKKAVTNJjgSm1tRQDHUU6DbwO9IROu/0WAzC8PKhucDSh18J0RMvVeHAn5puMd+QHC2erPRNf8lmg==", + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/browserify-sign/-/browserify-sign-4.2.3.tgz", + "integrity": "sha512-JWCZW6SKhfhjJxO8Tyiiy+XYB7cqd2S5/+WeYHsKdNKFlCBhKbblba1A/HN/90YwtxKc8tCErjffZl++UNmGiw==", "dev": true, "dependencies": { - "bn.js": "^5.1.1", - "browserify-rsa": "^4.0.1", + "bn.js": "^5.2.1", + "browserify-rsa": "^4.1.0", "create-hash": "^1.2.0", "create-hmac": "^1.1.7", - "elliptic": "^6.5.3", + "elliptic": "^6.5.5", + "hash-base": "~3.0", "inherits": "^2.0.4", - "parse-asn1": "^5.1.5", - "readable-stream": "^3.6.0", - "safe-buffer": "^5.2.0" + "parse-asn1": "^5.1.7", + "readable-stream": "^2.3.8", + "safe-buffer": "^5.2.1" + }, + "engines": { + "node": ">= 0.12" + } + }, + "node_modules/browserify-sign/node_modules/hash-base": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.0.4.tgz", + "integrity": "sha512-EeeoJKjTyt868liAlVmcv2ZsUfGHlE3Q+BICOXcZiwN3osr5Q/zFGYmTJpoIzuaSTAwndFy+GqhEwlU4L3j4Ow==", + "dev": true, + "dependencies": { + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/browserify-sign/node_modules/isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", + "dev": true + }, + "node_modules/browserify-sign/node_modules/readable-stream": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", + "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", + "dev": true, + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "node_modules/browserify-sign/node_modules/readable-stream/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true + }, + "node_modules/browserify-sign/node_modules/string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dev": true, + "dependencies": { + "safe-buffer": "~5.1.0" } }, + "node_modules/browserify-sign/node_modules/string_decoder/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true + }, "node_modules/browserify-zlib": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/browserify-zlib/-/browserify-zlib-0.2.0.tgz", @@ -5337,6 +5395,12 @@ "url": "https://opencollective.com/core-js" } }, + "node_modules/core-util-is": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", + "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==", + "dev": true + }, "node_modules/cosmiconfig": { "version": "8.3.6", "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-8.3.6.tgz", @@ -10753,16 +10817,33 @@ } }, "node_modules/parse-asn1": { - "version": "5.1.6", - "resolved": "https://registry.npmjs.org/parse-asn1/-/parse-asn1-5.1.6.tgz", - "integrity": "sha512-RnZRo1EPU6JBnra2vGHj0yhp6ebyjBZpmUCLHWiFhxlzvBCCpAuZ7elsBp1PVAbQN0/04VD/19rfzlBSwLstMw==", + "version": "5.1.7", + "resolved": "https://registry.npmjs.org/parse-asn1/-/parse-asn1-5.1.7.tgz", + "integrity": "sha512-CTM5kuWR3sx9IFamcl5ErfPl6ea/N8IYwiJ+vpeB2g+1iknv7zBl5uPwbMbRVznRVbrNY6lGuDoE5b30grmbqg==", "dev": true, "dependencies": { - "asn1.js": "^5.2.0", - "browserify-aes": "^1.0.0", - "evp_bytestokey": "^1.0.0", - "pbkdf2": "^3.0.3", - "safe-buffer": "^5.1.1" + "asn1.js": "^4.10.1", + "browserify-aes": "^1.2.0", + "evp_bytestokey": "^1.0.3", + "hash-base": "~3.0", + "pbkdf2": "^3.1.2", + "safe-buffer": "^5.2.1" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/parse-asn1/node_modules/hash-base": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.0.4.tgz", + "integrity": "sha512-EeeoJKjTyt868liAlVmcv2ZsUfGHlE3Q+BICOXcZiwN3osr5Q/zFGYmTJpoIzuaSTAwndFy+GqhEwlU4L3j4Ow==", + "dev": true, + "dependencies": { + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" + }, + "engines": { + "node": ">=4" } }, "node_modules/parse-json": { @@ -11062,6 +11143,12 @@ "node": ">= 0.6.0" } }, + "node_modules/process-nextick-args": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", + "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", + "dev": true + }, "node_modules/proto-list": { "version": "1.2.4", "resolved": "https://registry.npmjs.org/proto-list/-/proto-list-1.2.4.tgz", diff --git a/src/TorusUtilsExtraParams.ts b/src/TorusUtilsExtraParams.ts new file mode 100644 index 0000000..e9dc942 --- /dev/null +++ b/src/TorusUtilsExtraParams.ts @@ -0,0 +1,23 @@ +export interface TorusUtilsExtraParams { + nonce?: string; // farcaster + + message?: string; // farcaster + + signature?: string; // farcaster, passkey, webauthn + + clientDataJson?: string; // passkey, webauthn + + authenticatorData?: string; // passkey, webauhn + + publicKey?: string; // passkey, webauthn + + challenge?: string; // passkey, webauthn + + rpOrigin?: string; // passkey, webauthn + + rpId?: string; // passkey, webauthn + + session_token_exp_second?: number; + + timestamp?: number; // Signature +} diff --git a/src/helpers/nodeUtils.ts b/src/helpers/nodeUtils.ts index b194b48..08112e4 100644 --- a/src/helpers/nodeUtils.ts +++ b/src/helpers/nodeUtils.ts @@ -26,6 +26,7 @@ import { } from "../interfaces"; import log from "../loglevel"; import { Some } from "../some"; +import { TorusUtilsExtraParams } from "../TorusUtilsExtraParams"; import { calculateMedian, getProxyCoordinatorEndpointIndex, kCombinations, normalizeKeysResult, retryCommitment, thresholdSame } from "./common"; import { derivePubKey, @@ -174,7 +175,7 @@ export async function retrieveOrImportShare(params: { overrideExistingKey: boolean; nodePubkeys: INodePub[]; newImportedShares?: ImportedShare[]; - extraParams: Record; + extraParams: TorusUtilsExtraParams; }): Promise { const { legacyMetadataHost, diff --git a/src/torus.ts b/src/torus.ts index 54adecb..16456ac 100644 --- a/src/torus.ts +++ b/src/torus.ts @@ -34,6 +34,7 @@ import { VerifierParams, } from "./interfaces"; import log from "./loglevel"; +import { TorusUtilsExtraParams } from "./TorusUtilsExtraParams"; // Implement threshold logic wrappers around public APIs // of Torus nodes to handle malicious node responses @@ -117,7 +118,7 @@ class Torus { verifierParams: VerifierParams, idToken: string, nodePubkeys: INodePub[], - extraParams: Record = {}, + extraParams: TorusUtilsExtraParams = {}, useDkg?: boolean ): Promise { if (nodePubkeys.length === 0) { @@ -144,6 +145,11 @@ class Torus { if (!shouldUseDkg && nodePubkeys.length === 0) { throw new Error("nodePubkeys param is required"); } + + if (!extraParams.session_token_exp_second) { + extraParams.session_token_exp_second = Torus.sessionTime; + } + return retrieveOrImportShare({ legacyMetadataHost: this.legacyMetadataHost, serverTimeOffset: this.serverTimeOffset, @@ -162,10 +168,7 @@ class Torus { newImportedShares: [], overrideExistingKey: false, nodePubkeys, - extraParams: { - ...extraParams, - session_token_exp_second: Torus.sessionTime, - }, + extraParams, }); } @@ -186,12 +189,16 @@ class Torus { verifierParams: VerifierParams, idToken: string, newPrivateKey: string, - extraParams: Record = {} + extraParams: TorusUtilsExtraParams = {} ): Promise { if (endpoints.length !== nodeIndexes.length) { throw new Error(`length of endpoints array must be same as length of nodeIndexes array`); } + if (!extraParams.session_token_exp_second) { + extraParams.session_token_exp_second = Torus.sessionTime; + } + let privKeyBuffer; if (this.keyType === KEY_TYPE.SECP256K1) { @@ -218,6 +225,7 @@ class Torus { throw new Error("invalid shares data for ed25519 key, public key is not matching after generating shares"); } } + return retrieveOrImportShare({ legacyMetadataHost: this.legacyMetadataHost, serverTimeOffset: this.serverTimeOffset, @@ -236,10 +244,7 @@ class Torus { overrideExistingKey: true, newImportedShares: sharesData, nodePubkeys, - extraParams: { - ...extraParams, - session_token_exp_second: Torus.sessionTime, - }, + extraParams, }); }