@citizenwallet/sdk
Version:
An sdk to easily work with citizen wallet.
55 lines • 2.68 kB
JavaScript
;
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