From 78db945485e7de8e0c57052ff6a0d5188492eb05 Mon Sep 17 00:00:00 2001 From: chaitanyapotti Date: Wed, 25 Mar 2026 14:42:01 +0800 Subject: [PATCH 1/3] adds record id --- src/helpers/citadelUtils.ts | 20 ++++++++++++++++++++ src/helpers/nodeUtils.ts | 4 ++++ src/torus.ts | 8 ++++++-- 3 files changed, 30 insertions(+), 2 deletions(-) diff --git a/src/helpers/citadelUtils.ts b/src/helpers/citadelUtils.ts index b9e441b..dbb1466 100644 --- a/src/helpers/citadelUtils.ts +++ b/src/helpers/citadelUtils.ts @@ -9,12 +9,17 @@ export interface CitadelAllowParams { verifierId: string; network: string; clientId: string; + recordId: string; source?: string; torusLoginStatus?: TorusLoginStatus; + torusLoginInitiated?: boolean; + torusLoginSuccess?: boolean; + torusLoginFailed?: boolean; } export function buildAllowUrl(params: CitadelAllowParams): string { const url = new URL(`${CITADEL_SERVER_MAP[params.buildEnv]}/v1/signer/allow`); + url.searchParams.set("recordid", params.recordId); url.searchParams.set("verifier", params.verifier); url.searchParams.set("verifierid", params.verifierId); url.searchParams.set("network", params.network); @@ -25,9 +30,24 @@ export function buildAllowUrl(params: CitadelAllowParams): string { if (params.torusLoginStatus) { url.searchParams.set("torusloginstatus", params.torusLoginStatus); } + if (typeof params.torusLoginInitiated !== "undefined") { + url.searchParams.set("toruslogininitiated", params.torusLoginInitiated.toString()); + } + if (typeof params.torusLoginSuccess !== "undefined") { + url.searchParams.set("torusloginsuccess", params.torusLoginSuccess.toString()); + } + if (typeof params.torusLoginFailed !== "undefined") { + url.searchParams.set("torusloginfailed", params.torusLoginFailed.toString()); + } return url.toString(); } export async function callAllowApi(params: CitadelAllowParams): Promise { await get(buildAllowUrl(params)); } + +export function generateRecordId(): string { + const cr = typeof globalThis === "object" ? globalThis.crypto : null; + if (typeof cr?.randomUUID !== "function") throw new Error("crypto.randomUUID must be defined"); + return cr.randomUUID(); +} diff --git a/src/helpers/nodeUtils.ts b/src/helpers/nodeUtils.ts index 3b3dcf9..1e5e9c4 100644 --- a/src/helpers/nodeUtils.ts +++ b/src/helpers/nodeUtils.ts @@ -363,6 +363,7 @@ export async function retrieveOrImportShare(params: { overrideExistingKey: boolean; nodePubkeys: INodePub[]; extraParams: TorusUtilsExtraParams; + recordId: string; newImportedShares?: ImportedShare[]; checkCommitment?: boolean; source?: string; @@ -388,6 +389,7 @@ export async function retrieveOrImportShare(params: { serverTimeOffset, checkCommitment = true, source, + recordId, } = params; await callAllowApi({ buildEnv, @@ -397,6 +399,8 @@ export async function retrieveOrImportShare(params: { clientId, source, torusLoginStatus: TorusLoginStatus.INITIATED, + recordId, + torusLoginInitiated: true, }); // generate temporary private and public key that is used to secure receive shares diff --git a/src/torus.ts b/src/torus.ts index 6ad186e..940e093 100644 --- a/src/torus.ts +++ b/src/torus.ts @@ -10,6 +10,7 @@ import { Curve, encodeEd25519Point, generateAddressFromPubKey, + generateRecordId, generateShares, getEd25519ExtendedPublicKey, getKeyCurve, @@ -157,11 +158,13 @@ class Torus { network: this.network, clientId: this.clientId, source: this.source, + recordId: generateRecordId(), }; let result: TorusKey; try { result = await retrieveOrImportShare({ + recordId: allowParams.recordId, legacyMetadataHost: this.legacyMetadataHost, serverTimeOffset: this.serverTimeOffset, enableOneKey: this.enableOneKey, @@ -184,11 +187,11 @@ class Torus { source: this.source, }); } catch (error) { - this.reportSignerAllow({ ...allowParams, torusLoginStatus: TorusLoginStatus.FAILED }); + this.reportSignerAllow({ ...allowParams, torusLoginStatus: TorusLoginStatus.FAILED, torusLoginFailed: true }); throw error; } - this.reportSignerAllow({ ...allowParams, torusLoginStatus: TorusLoginStatus.SUCCESS }); + this.reportSignerAllow({ ...allowParams, torusLoginStatus: TorusLoginStatus.SUCCESS, torusLoginSuccess: true }); return result; } @@ -261,6 +264,7 @@ class Torus { } return retrieveOrImportShare({ + recordId: generateRecordId(), legacyMetadataHost: this.legacyMetadataHost, serverTimeOffset: this.serverTimeOffset, enableOneKey: this.enableOneKey, From 41cee6610c9c5f68da3df687eaac88513f1ce593 Mon Sep 17 00:00:00 2001 From: chaitanyapotti Date: Wed, 25 Mar 2026 15:17:23 +0800 Subject: [PATCH 2/3] refactor: remove TorusLoginStatus and torusloginstatus param Drop the TorusLoginStatus enum and the torusloginstatus query string from Citadel allow URLs. Login lifecycle is reported only via the boolean toruslogininitiated / torusloginsuccess / torusloginfailed params. --- src/helpers/citadelUtils.ts | 6 ------ src/helpers/nodeUtils.ts | 2 -- src/interfaces.ts | 6 ------ src/torus.ts | 5 ++--- 4 files changed, 2 insertions(+), 17 deletions(-) diff --git a/src/helpers/citadelUtils.ts b/src/helpers/citadelUtils.ts index dbb1466..9796bf2 100644 --- a/src/helpers/citadelUtils.ts +++ b/src/helpers/citadelUtils.ts @@ -1,8 +1,6 @@ import { BUILD_ENV_TYPE, CITADEL_SERVER_MAP } from "@toruslabs/constants"; import { get } from "@toruslabs/http-helpers"; -import { TorusLoginStatus } from "../interfaces"; - export interface CitadelAllowParams { buildEnv: BUILD_ENV_TYPE; verifier: string; @@ -11,7 +9,6 @@ export interface CitadelAllowParams { clientId: string; recordId: string; source?: string; - torusLoginStatus?: TorusLoginStatus; torusLoginInitiated?: boolean; torusLoginSuccess?: boolean; torusLoginFailed?: boolean; @@ -27,9 +24,6 @@ export function buildAllowUrl(params: CitadelAllowParams): string { if (params.source) { url.searchParams.set("source", params.source); } - if (params.torusLoginStatus) { - url.searchParams.set("torusloginstatus", params.torusLoginStatus); - } if (typeof params.torusLoginInitiated !== "undefined") { url.searchParams.set("toruslogininitiated", params.torusLoginInitiated.toString()); } diff --git a/src/helpers/nodeUtils.ts b/src/helpers/nodeUtils.ts index 1e5e9c4..dee63f0 100644 --- a/src/helpers/nodeUtils.ts +++ b/src/helpers/nodeUtils.ts @@ -19,7 +19,6 @@ import { SessionToken, ShareRequestResult, TorusKey, - TorusLoginStatus, UserType, VerifierLookupResponse, VerifierLookupResult, @@ -398,7 +397,6 @@ export async function retrieveOrImportShare(params: { network, clientId, source, - torusLoginStatus: TorusLoginStatus.INITIATED, recordId, torusLoginInitiated: true, }); diff --git a/src/interfaces.ts b/src/interfaces.ts index 195dd4a..b7ead09 100644 --- a/src/interfaces.ts +++ b/src/interfaces.ts @@ -25,12 +25,6 @@ export type v1NonceResultType = { typeOfUser: "v1"; nonce?: string; seed?: strin export type GetOrSetNonceResult = v2NonceResultType | v1NonceResultType; export type KeyType = "secp256k1" | "ed25519"; -export enum TorusLoginStatus { - INITIATED = "initiated", - SUCCESS = "success", - FAILED = "failed", -} - export interface SetNonceData { operation: string; data: string; diff --git a/src/torus.ts b/src/torus.ts index 940e093..c368b8e 100644 --- a/src/torus.ts +++ b/src/torus.ts @@ -33,7 +33,6 @@ import { RetrieveSharesParams, TorusCtorOptions, TorusKey, - TorusLoginStatus, TorusPublicKey, } from "./interfaces"; import log from "./loglevel"; @@ -187,11 +186,11 @@ class Torus { source: this.source, }); } catch (error) { - this.reportSignerAllow({ ...allowParams, torusLoginStatus: TorusLoginStatus.FAILED, torusLoginFailed: true }); + this.reportSignerAllow({ ...allowParams, torusLoginFailed: true }); throw error; } - this.reportSignerAllow({ ...allowParams, torusLoginStatus: TorusLoginStatus.SUCCESS, torusLoginSuccess: true }); + this.reportSignerAllow({ ...allowParams, torusLoginSuccess: true }); return result; } From bcffca9327e4eed9df5ac9585cf62a59efadd1cb Mon Sep 17 00:00:00 2001 From: chaitanyapotti Date: Wed, 25 Mar 2026 15:18:57 +0800 Subject: [PATCH 3/3] 17.2.2 --- package-lock.json | 4 ++-- package.json | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/package-lock.json b/package-lock.json index de2371a..f3b537f 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "@toruslabs/torus.js", - "version": "17.2.1", + "version": "17.2.2", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "@toruslabs/torus.js", - "version": "17.2.1", + "version": "17.2.2", "license": "MIT", "dependencies": { "@toruslabs/constants": "^16.1.1", diff --git a/package.json b/package.json index 47bf38f..92e4dc7 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@toruslabs/torus.js", - "version": "17.2.1", + "version": "17.2.2", "description": "Handle communication with torus nodes", "main": "dist/lib.cjs/index.js", "module": "dist/lib.esm/index.js",