{"version":3,"file":"getWithdrawableAmount.cjs","sources":["../../../../src/staking/getWithdrawableAmount.ts"],"sourcesContent":["import { Address, Rpc, SolanaRpcApi, address } from \"@solana/kit\";\nimport { STAKE_STATE_LEN, U64_MAX } from \"./types\";\n\nexport const makeGetWithdrawableAmount = ({\n  rpc,\n}: {\n  rpc: Rpc<SolanaRpcApi>;\n}) => {\n  return async (\n    stakeAccount: Address | string,\n    includeRentExempt = false\n  ): Promise<number> => {\n    const stakeAddr =\n      typeof stakeAccount === \"string\" ? address(stakeAccount) : stakeAccount;\n\n    const { value: accInfo } = await rpc\n      .getAccountInfo(stakeAddr, { encoding: \"jsonParsed\" })\n      .send();\n\n    if (!accInfo) throw new Error(\"Stake account not found\");\n\n    const { lamports, data } = accInfo;\n    const parsed: any = (data as any)?.parsed; // We know it's JSON parsed\n\n    if (!parsed?.info?.meta) {\n      throw new Error(\"Not a valid stake account\");\n    }\n\n    const info = parsed.info;\n\n    // Guard: must be stake OR just initialised; never delegated\n    if (!info.stake && info.meta?.type !== \"initialized\") {\n      throw new Error(\"Not a valid stake account\");\n    }\n\n    const deactivationStr =\n      info.stake?.delegation?.deactivationEpoch ?? U64_MAX.toString();\n\n    const deactivationEpoch = BigInt(deactivationStr);\n    const currentEpoch = BigInt((await rpc.getEpochInfo().send()).epoch);\n\n    // If still active (not yet cooled down), return 0\n    if (deactivationEpoch > currentEpoch) return 0;\n    if (includeRentExempt) return Number(lamports);\n\n    const rentExempt = await rpc\n      .getMinimumBalanceForRentExemption(BigInt(STAKE_STATE_LEN))\n      .send();\n\n    const withdrawable = lamports > rentExempt ? lamports - rentExempt : 0n;\n    return Number(withdrawable);\n  };\n};\n"],"names":["address","U64_MAX","STAKE_STATE_LEN"],"mappings":";;;;;MAGa,yBAAyB,GAAG,CAAC,EACxC,GAAG,GAGJ,KAAI;IACH,OAAO,OACL,YAA8B,EAC9B,iBAAiB,GAAG,KAAK,KACN;AACnB,QAAA,MAAM,SAAS,GACb,OAAO,YAAY,KAAK,QAAQ,GAAGA,WAAO,CAAC,YAAY,CAAC,GAAG,YAAY;AAEzE,QAAA,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,GAAG,MAAM;aAC9B,cAAc,CAAC,SAAS,EAAE,EAAE,QAAQ,EAAE,YAAY,EAAE;AACpD,aAAA,IAAI,EAAE;AAET,QAAA,IAAI,CAAC,OAAO;AAAE,YAAA,MAAM,IAAI,KAAK,CAAC,yBAAyB,CAAC;AAExD,QAAA,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE,GAAG,OAAO;AAClC,QAAA,MAAM,MAAM,GAAS,IAAY,EAAE,MAAM,CAAC;AAE1C,QAAA,IAAI,CAAC,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE;AACvB,YAAA,MAAM,IAAI,KAAK,CAAC,2BAA2B,CAAC;QAC9C;AAEA,QAAA,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI;;AAGxB,QAAA,IAAI,CAAC,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,IAAI,EAAE,IAAI,KAAK,aAAa,EAAE;AACpD,YAAA,MAAM,IAAI,KAAK,CAAC,2BAA2B,CAAC;QAC9C;AAEA,QAAA,MAAM,eAAe,GACnB,IAAI,CAAC,KAAK,EAAE,UAAU,EAAE,iBAAiB,IAAIC,aAAO,CAAC,QAAQ,EAAE;AAEjE,QAAA,MAAM,iBAAiB,GAAG,MAAM,CAAC,eAAe,CAAC;AACjD,QAAA,MAAM,YAAY,GAAG,MAAM,CAAC,CAAC,MAAM,GAAG,CAAC,YAAY,EAAE,CAAC,IAAI,EAAE,EAAE,KAAK,CAAC;;QAGpE,IAAI,iBAAiB,GAAG,YAAY;AAAE,YAAA,OAAO,CAAC;AAC9C,QAAA,IAAI,iBAAiB;AAAE,YAAA,OAAO,MAAM,CAAC,QAAQ,CAAC;QAE9C,MAAM,UAAU,GAAG,MAAM;AACtB,aAAA,iCAAiC,CAAC,MAAM,CAACC,qBAAe,CAAC;AACzD,aAAA,IAAI,EAAE;AAET,QAAA,MAAM,YAAY,GAAG,QAAQ,GAAG,UAAU,GAAG,QAAQ,GAAG,UAAU,GAAG,EAAE;AACvE,QAAA,OAAO,MAAM,CAAC,YAAY,CAAC;AAC7B,IAAA,CAAC;AACH;;;;"}