{"version":3,"file":"pollTransactionConfirmation.cjs","sources":["../../../../src/transactions/pollTransactionConfirmation.ts"],"sourcesContent":["import type { Rpc, Signature, SolanaRpcApi } from \"@solana/kit\";\nimport { PollTxOptions } from \"./types\";\n\nexport const makePollTransactionConfirmation = (raw: Rpc<SolanaRpcApi>) => {\n  return async function poll(\n    signature: Signature,\n    {\n      confirmationStatuses = [\"confirmed\", \"finalized\"],\n      timeout = 60_000,\n      interval = 2_000,\n      lastValidBlockHeight,\n    }: PollTxOptions = {}\n  ): Promise<Signature> {\n    if (lastValidBlockHeight !== undefined) {\n      const chainHeight = Number(await raw.getBlockHeight().send());\n\n      if (Number(lastValidBlockHeight) - chainHeight > 150) {\n        throw new Error(\n          `Provided lastValidBlockHeight (${lastValidBlockHeight}) is more than 150 blocks ahead of current height (${chainHeight})`\n        );\n      }\n    }\n\n    const started = Date.now();\n\n    // eslint-disable-next-line no-constant-condition\n    while (true) {\n      if (Date.now() - started > timeout) {\n        throw new Error(\n          `Transaction ${signature} not confirmed within ${timeout} ms`\n        );\n      }\n\n      if (lastValidBlockHeight !== undefined) {\n        const blockHeight = Number(await raw.getBlockHeight().send());\n        if (blockHeight > Number(lastValidBlockHeight)) {\n          const { value } = await raw\n            .getSignatureStatuses([signature], {\n              searchTransactionHistory: false,\n            })\n            .send();\n\n          const status = value[0];\n          if (\n            status?.confirmationStatus &&\n            confirmationStatuses.includes(status.confirmationStatus)\n          )\n            return signature;\n\n          throw new Error(\n            `Block height (${blockHeight}) exceeded lastValidBlockHeight (${lastValidBlockHeight}) and tx not found in a confirmed block`\n          );\n        }\n      }\n\n      const { value } = await raw\n        .getSignatureStatuses([signature], { searchTransactionHistory: false })\n        .send();\n\n      const status = value[0];\n      if (status) {\n        if (status.err) {\n          throw new Error(\n            `Transaction ${signature} failed on-chain: ${JSON.stringify(\n              status.err\n            )}`\n          );\n        }\n\n        if (\n          status.confirmationStatus &&\n          confirmationStatuses.includes(status.confirmationStatus)\n        ) {\n          return signature;\n        }\n      }\n\n      await new Promise((r) => setTimeout(r, interval));\n    }\n  };\n};\n"],"names":[],"mappings":";;AAGO,MAAM,+BAA+B,GAAG,CAAC,GAAsB,KAAI;IACxE,OAAO,eAAe,IAAI,CACxB,SAAoB,EACpB,EACE,oBAAoB,GAAG,CAAC,WAAW,EAAE,WAAW,CAAC,EACjD,OAAO,GAAG,KAAM,EAChB,QAAQ,GAAG,IAAK,EAChB,oBAAoB,GAAA,GACH,EAAE,EAAA;AAErB,QAAA,IAAI,oBAAoB,KAAK,SAAS,EAAE;AACtC,YAAA,MAAM,WAAW,GAAG,MAAM,CAAC,MAAM,GAAG,CAAC,cAAc,EAAE,CAAC,IAAI,EAAE,CAAC;YAE7D,IAAI,MAAM,CAAC,oBAAoB,CAAC,GAAG,WAAW,GAAG,GAAG,EAAE;gBACpD,MAAM,IAAI,KAAK,CACb,CAAA,+BAAA,EAAkC,oBAAoB,CAAA,mDAAA,EAAsD,WAAW,CAAA,CAAA,CAAG,CAC3H;YACH;QACF;AAEA,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,EAAE;;QAG1B,OAAO,IAAI,EAAE;YACX,IAAI,IAAI,CAAC,GAAG,EAAE,GAAG,OAAO,GAAG,OAAO,EAAE;gBAClC,MAAM,IAAI,KAAK,CACb,CAAA,YAAA,EAAe,SAAS,CAAA,sBAAA,EAAyB,OAAO,CAAA,GAAA,CAAK,CAC9D;YACH;AAEA,YAAA,IAAI,oBAAoB,KAAK,SAAS,EAAE;AACtC,gBAAA,MAAM,WAAW,GAAG,MAAM,CAAC,MAAM,GAAG,CAAC,cAAc,EAAE,CAAC,IAAI,EAAE,CAAC;AAC7D,gBAAA,IAAI,WAAW,GAAG,MAAM,CAAC,oBAAoB,CAAC,EAAE;AAC9C,oBAAA,MAAM,EAAE,KAAK,EAAE,GAAG,MAAM;AACrB,yBAAA,oBAAoB,CAAC,CAAC,SAAS,CAAC,EAAE;AACjC,wBAAA,wBAAwB,EAAE,KAAK;qBAChC;AACA,yBAAA,IAAI,EAAE;AAET,oBAAA,MAAM,MAAM,GAAG,KAAK,CAAC,CAAC,CAAC;oBACvB,IACE,MAAM,EAAE,kBAAkB;AAC1B,wBAAA,oBAAoB,CAAC,QAAQ,CAAC,MAAM,CAAC,kBAAkB,CAAC;AAExD,wBAAA,OAAO,SAAS;oBAElB,MAAM,IAAI,KAAK,CACb,CAAA,cAAA,EAAiB,WAAW,CAAA,iCAAA,EAAoC,oBAAoB,CAAA,uCAAA,CAAyC,CAC9H;gBACH;YACF;AAEA,YAAA,MAAM,EAAE,KAAK,EAAE,GAAG,MAAM;iBACrB,oBAAoB,CAAC,CAAC,SAAS,CAAC,EAAE,EAAE,wBAAwB,EAAE,KAAK,EAAE;AACrE,iBAAA,IAAI,EAAE;AAET,YAAA,MAAM,MAAM,GAAG,KAAK,CAAC,CAAC,CAAC;YACvB,IAAI,MAAM,EAAE;AACV,gBAAA,IAAI,MAAM,CAAC,GAAG,EAAE;AACd,oBAAA,MAAM,IAAI,KAAK,CACb,CAAA,YAAA,EAAe,SAAS,qBAAqB,IAAI,CAAC,SAAS,CACzD,MAAM,CAAC,GAAG,CACX,CAAA,CAAE,CACJ;gBACH;gBAEA,IACE,MAAM,CAAC,kBAAkB;oBACzB,oBAAoB,CAAC,QAAQ,CAAC,MAAM,CAAC,kBAAkB,CAAC,EACxD;AACA,oBAAA,OAAO,SAAS;gBAClB;YACF;AAEA,YAAA,MAAM,IAAI,OAAO,CAAC,CAAC,CAAC,KAAK,UAAU,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC;QACnD;AACF,IAAA,CAAC;AACH;;;;"}