UNPKG

@citizenwallet/sdk

Version:

An sdk to easily work with citizen wallet.

55 lines 2.68 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.verifyConnectedUrl = exports.createConnectedUrl = exports.generateConnectionMessage = void 0; const ethers_1 = require("ethers"); const accounts_1 = require("../accounts"); const generateConnectionMessage = (accountAddress, expiryTimeStamp, redirectUrl) => { const message = `Signature auth for ${accountAddress} with expiry ${expiryTimeStamp} and redirect ${encodeURIComponent(redirectUrl)}`; return (0, ethers_1.hashMessage)(message); }; exports.generateConnectionMessage = generateConnectionMessage; const createConnectedUrl = async (url, signer, accountAddress, expiryTimeStamp, redirectUrl) => { const message = (0, exports.generateConnectionMessage)(accountAddress, expiryTimeStamp, redirectUrl); const signature = await signer.signMessage(message); const params = new URLSearchParams({ sigAuthAccount: accountAddress, sigAuthExpiry: expiryTimeStamp, sigAuthSignature: signature, sigAuthRedirect: redirectUrl, }); return url.includes("?") ? `${url}&${params.toString()}` : `${url}?${params.toString()}`; }; exports.createConnectedUrl = createConnectedUrl; const verifyConnectedUrl = async (config, options) => { if (!options.url && !options.params) { throw new Error("Either url or params must be provided"); } const params = options.params || new URLSearchParams(options.url?.split("?")[1]); const sigAuthAccount = params.get("sigAuthAccount"); const sigAuthExpiry = params.get("sigAuthExpiry"); const sigAuthSignature = params.get("sigAuthSignature"); const sigAuthRedirect = params.get("sigAuthRedirect"); if (!sigAuthAccount || !sigAuthExpiry || !sigAuthSignature || !sigAuthRedirect) { const missingParams = [ !sigAuthAccount && "sigAuthAccount", !sigAuthExpiry && "sigAuthExpiry", !sigAuthSignature && "sigAuthSignature", !sigAuthRedirect && "sigAuthRedirect", ].filter(Boolean); throw new Error(`Invalid connection request: missing ${missingParams.join(", ")}`); } // check the expiry time if (new Date(sigAuthExpiry).getTime() < Date.now()) { throw new Error("Connection request expired"); } const message = (0, exports.generateConnectionMessage)(sigAuthAccount, sigAuthExpiry, sigAuthRedirect); const verified = await (0, accounts_1.verifyAccountOwnership)(config, sigAuthAccount, message, sigAuthSignature); return verified ? sigAuthAccount : null; }; exports.verifyConnectedUrl = verifyConnectedUrl; //# sourceMappingURL=index.js.map