UNPKG

@biconomy/abstractjs

Version:

SDK for Biconomy integration with support for account abstraction, smart accounts, ERC-4337.

101 lines 4.59 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.getMeeVersionsForQuote = exports.signQuote = exports.formatSignedQuotePayload = exports.prepareTypedDataSignableQuotePayload = exports.preparePersonalSignableQuotePayload = void 0; const viem_1 = require("viem"); const Constants_1 = require("../../../account/utils/Constants.js"); const getVersion_1 = require("../../../account/utils/getVersion.js"); const toP256Signer_1 = require("../../../account/utils/toP256Signer.js"); const constants_1 = require("../../../constants/index.js"); const createMeeClient_1 = require("../../createMeeClient.js"); const DEFAULT_PREFIX = "0x177eee00"; const preparePersonalSignableQuotePayload = (quote) => { return { signablePayload: { message: { raw: quote.hash } }, metadata: {} }; }; exports.preparePersonalSignableQuotePayload = preparePersonalSignableQuotePayload; const prepareTypedDataSignableQuotePayload = (quote, eip712Domain) => { const isTrustedSponsorship = quote.userOps[0].userOp.sender.toLowerCase() === createMeeClient_1.DEFAULT_MEE_SPONSORSHIP_PAYMASTER_ACCOUNT.toLowerCase(); const signablePayload = { domain: { name: eip712Domain.domain.name }, types: { MeeUserOp: [ { name: "userOpHash", type: "bytes32" }, { name: "lowerBoundTimestamp", type: "uint256" }, { name: "upperBoundTimestamp", type: "uint256" } ], SuperTx: [{ name: "meeUserOps", type: "MeeUserOp[]" }] }, primaryType: "SuperTx", message: { meeUserOps: (isTrustedSponsorship ? quote.userOps.slice(1) : quote.userOps).map((userOp) => ({ userOpHash: userOp.userOpHash, lowerBoundTimestamp: userOp.lowerBoundTimestamp, upperBoundTimestamp: userOp.upperBoundTimestamp })) } }; return { signablePayload, metadata: {} }; }; exports.prepareTypedDataSignableQuotePayload = prepareTypedDataSignableQuotePayload; const formatSignedQuotePayload = (quote, _metadata, signature, meeVersions, isP256) => { const prefix = isP256 ? Constants_1.SIG_TYPE_SIMPLE_P256 : DEFAULT_PREFIX; return { ...quote, signature: (0, viem_1.concatHex)([prefix, signature]), meeVersions: meeVersions, isEIP712TrustedSponsorshipSupported: true }; }; exports.formatSignedQuotePayload = formatSignedQuotePayload; const signQuote = async (client, params) => { const { account: account_ = client.account, quote } = params; const signer = account_.signer; const isP256 = (0, toP256Signer_1.isP256Signer)(signer); const startIndex = quote.paymentInfo.sponsored ? 1 : 0; const chainId = quote.userOps[startIndex].chainId; const meeVersions = (0, exports.getMeeVersionsForQuote)(account_, quote.userOps.slice(startIndex)); if ((0, getVersion_1.versionIsAtLeast)(meeVersions[0].version.version, constants_1.MEEVersion.V2_2_1)) { const deployment = account_.deploymentOn(Number(chainId), true); const eip712Domain = await deployment.getEip712Domain(); if (!eip712Domain) { throw new Error(`EIP-712 domain data not found for the multichain account on chain ${chainId}`); } const result = (0, exports.prepareTypedDataSignableQuotePayload)(quote, eip712Domain); const { signablePayload, metadata } = result; const typedDataSignature = await signer.signTypedData(signablePayload); return (0, exports.formatSignedQuotePayload)(quote, metadata, typedDataSignature, meeVersions, isP256); } const result = (0, exports.preparePersonalSignableQuotePayload)(quote); const { signablePayload, metadata } = result; const personalSignature = await signer.signMessage(signablePayload); return (0, exports.formatSignedQuotePayload)(quote, metadata, personalSignature, meeVersions, isP256); }; exports.signQuote = signQuote; const getMeeVersionsForQuote = (account, userOps) => { const usedChains = new Set(); for (const op of userOps) { usedChains.add(Number(op.chainId)); } return Array.from(usedChains, (chainId) => { const deployment = account.deploymentOn(chainId, true); return { version: deployment.version, chainId }; }); }; exports.getMeeVersionsForQuote = getMeeVersionsForQuote; exports.default = exports.signQuote; //# sourceMappingURL=signQuote.js.map