@biconomy/abstractjs
Version:
SDK for Biconomy integration with support for account abstraction, smart accounts, ERC-4337.
81 lines • 3.78 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.getSupertransactionReceipt = getSupertransactionReceipt;
const viem_1 = require("viem");
const actions_1 = require("viem/actions");
const explorer_1 = require("../../../account/utils/explorer.js");
const parseErrorMessage_1 = require("../../../account/utils/parseErrorMessage.js");
const parseTransactionStatus_1 = require("../../../account/utils/parseTransactionStatus.js");
const createHttpClient_1 = require("../../createHttpClient.js");
const createMeeClient_1 = require("../../createMeeClient.js");
async function getSupertransactionReceipt(client, parameters) {
const { confirmations = 2, waitForReceipts = true, ...params } = parameters;
const account = parameters.account ?? client.account;
let receipts = null;
const explorerResponse = await client.request({
path: `explorer/${params.hash}`,
method: "GET"
});
const metaStatus = await (0, parseTransactionStatus_1.parseTransactionStatus)(explorerResponse.userOps);
switch (metaStatus.status) {
case "FAILED": {
console.log({ metaStatus, explorerResponse, hash: params.hash });
throw new Error((0, parseErrorMessage_1.parseErrorMessage)(metaStatus.message));
}
case "MINED_FAIL": {
console.log({ metaStatus, explorerResponse, hash: params.hash });
throw new Error((0, parseErrorMessage_1.parseErrorMessage)(metaStatus.message));
}
case "PENDING": {
break;
}
case "MINING": {
break;
}
case "MINED_SUCCESS": {
if (waitForReceipts) {
const isSponsoredSupertransaction = explorerResponse.paymentInfo.sponsored;
const sponsorshipUrl = explorerResponse.paymentInfo.sponsorshipUrl || createMeeClient_1.DEFAULT_PATHFINDER_URL;
receipts = await Promise.all(explorerResponse.userOps
.filter((userOp) => {
if (userOp.isCleanUpUserOp &&
userOp.executionStatus !== "MINED_SUCCESS") {
return false;
}
return true;
})
.map(async ({ chainId, executionData }, index) => {
if (isSponsoredSupertransaction && index === 0) {
const sponsorshipClient = (0, createHttpClient_1.createHttpClient)(sponsorshipUrl);
const receipt = await sponsorshipClient.request({
path: `sponsorship/receipt/${chainId}/${executionData}`,
method: "GET"
});
return (0, viem_1.formatTransactionReceipt)(receipt);
}
return (0, actions_1.getTransactionReceipt)(account.deploymentOn(Number(chainId), true).publicClient, {
confirmations,
...parameters,
hash: executionData
});
}));
}
break;
}
default: {
throw new Error("Unknown transaction status");
}
}
const explorerLinks = explorerResponse.userOps.reduce((acc, userOp) => {
acc.push((0, explorer_1.getExplorerTxLink)(userOp.executionData, userOp.chainId), (0, explorer_1.getJiffyScanLink)(userOp.userOpHash));
return acc;
}, [(0, explorer_1.getMeeScanLink)(params.hash)]);
return {
...explorerResponse,
explorerLinks,
receipts,
transactionStatus: metaStatus.status
};
}
exports.default = getSupertransactionReceipt;
//# sourceMappingURL=getSupertransactionReceipt.js.map