@xoxno/sdk-js 1.0.169 → 1.0.170

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- "undefined"!=typeof globalThis&&void 0===globalThis.self&&(globalThis.self=globalThis);import{Account as e,Address as t,BASE_FEE as o,Contract as r,ScInt as a,TransactionBuilder as n,scValToNative as s,xdr as i}from"@stellar/stellar-sdk";const l={mainnet:process.env.STELLAR_LENDING_CONTROLLER_MAINNET??"",testnet:process.env.STELLAR_LENDING_CONTROLLER_TESTNET??""},c={mainnet:process.env.STELLAR_AGGREGATOR_ROUTER_MAINNET??"",testnet:process.env.STELLAR_AGGREGATOR_ROUTER_TESTNET??""},u={mainnet:process.env.STELLAR_GOVERNANCE_MAINNET??"",testnet:process.env.STELLAR_GOVERNANCE_TESTNET??""},p={mainnet:"https://soroban-rpc.stellar.org",testnet:"https://soroban-testnet.stellar.org"},d={mainnet:process.env.STELLAR_QUOTE_URL_MAINNET??"https://stellar-swap.xoxno.com",testnet:process.env.STELLAR_QUOTE_URL_TESTNET??"https://testnet-stellar-swap.xoxno.com"},_={mainnet:"Public Global Stellar Network ; September 2015",testnet:"Test SDF Network ; September 2015"};function f(e){const t=l[e];if(!t)throw new Error(`Stellar lending controller address not configured for network "${e}". Set STELLAR_LENDING_CONTROLLER_${e.toUpperCase()} env var.`);return t}function m(e){const t=c[e];if(!t)throw new Error(`Stellar aggregator router address not configured for network "${e}". Set STELLAR_AGGREGATOR_ROUTER_${e.toUpperCase()} env var.`);return t}function h(e){const t=u[e];if(!t)throw new Error(`Stellar governance address not configured for network "${e}". Set STELLAR_GOVERNANCE_${e.toUpperCase()} env var.`);return t}const y=["Soroswap","Aquarius","Phoenix","Sushi","CometDex"],w=e=>new t(e).toScVal(),b=e=>new a(e).toI128(),g=e=>i.ScVal.scvU32(e),v=e=>new a("string"==typeof e?e:e.toString()).toU64(),S=e=>i.ScVal.scvBool(e),k=e=>i.ScVal.scvString(e),R=e=>i.ScVal.scvSymbol(e),T=()=>i.ScVal.scvVoid(),x=e=>i.ScVal.scvVec(e),E=(e,t=32)=>{const o=e.startsWith("0x")?e.slice(2):e,r=Buffer.from(o,"hex");if(r.length!==t)throw new Error(`Stellar builder: expected a ${t}-byte BytesN (got ${r.length} bytes from "${e}")`);return i.ScVal.scvBytes(r)},I=(e,t)=>null==e?T():t(e),$=(e,t)=>O({asset:w(t),hub_id:g(e)}),B=(e,t,o)=>i.ScVal.scvVec([$(e,t),b(o)]),A=e=>i.ScVal.scvVec(e.map((e=>B(e.hubId,e.asset,e.amount)))),O=e=>{const t=Object.keys(e).sort().map((t=>new i.ScMapEntry({key:R(t),val:e[t]})));return i.ScVal.scvMap(t)},N=e=>{const t=e.paths.map((e=>{const t=e.hops.map((e=>{return O({amount_out:b(e.amountOut),pool:w(e.pool),token_in:w(e.tokenIn),token_out:w(e.tokenOut),venue:(t=e.venue,i.ScVal.scvVec([R(t)]))});var t}));return O({hops:i.ScVal.scvVec(t),split_ppm:g(e.splitPpm)})}));return O({paths:i.ScVal.scvVec(t),referral_id:v(e.referralId??0),token_in:w(e.tokenIn),token_out:w(e.tokenOut),total_min_out:b(e.totalMinOut)})},P=e=>{const t=Buffer.from(e);if(0===t.length)throw new Error("Stellar builder: strategy swap bytes must be non-empty base64 routeXdr, 0x hex string, or Uint8Array");return i.ScVal.scvBytes(t)},C=e=>{const t=e.trim();if(t.startsWith("0x")){const e=t.slice(2);if(!((o=e).length>0&&o.length%2==0&&/^[0-9a-fA-F]+$/.test(o)))throw new Error("Stellar builder: strategy swap bytes hex string must be 0x-prefixed and even-length");return Buffer.from(e,"hex")}var o;if(!/^[A-Za-z0-9+/]+={0,2}$/.test(t))throw new Error("Stellar builder: strategy swap bytes must be base64 routeXdr or 0x-prefixed hex");const r=Buffer.from(t,"base64");if(0===r.length)throw new Error("Stellar builder: strategy swap bytes must be non-empty base64 routeXdr, 0x hex string, or Uint8Array");return r},U=e=>{if("string"==typeof e)return P(C(e));if(e instanceof Uint8Array)return P(e);if(e&&"object"==typeof e)return"routeXdr"in(o=e)&&"string"==typeof o.routeXdr?P(C(e.routeXdr)):(e=>"swapXdr"in e&&"string"==typeof e.swapXdr)(e)?P(C(e.swapXdr)):(e=>"bytes"in e&&("string"==typeof e.bytes||e.bytes instanceof Uint8Array))(e)?"string"==typeof e.bytes?P(C(e.bytes)):P(e.bytes):(t=(e=>{if(!e||"object"!=typeof e)throw new Error("Stellar builder: decoded strategy `steps` must be a StrategyPayload ({ paths, tokenIn, tokenOut, totalMinOut })");const t=e;if(!Array.isArray(t.paths)||0===t.paths.length)throw new Error("Stellar builder: `steps.paths` must be a non-empty array of strategy paths");if("string"!=typeof t.tokenIn)throw new Error("Stellar builder: `steps.tokenIn` must be a contract address");if("string"!=typeof t.tokenOut)throw new Error("Stellar builder: `steps.tokenOut` must be a contract address");if("string"!=typeof t.totalMinOut)throw new Error("Stellar builder: `steps.totalMinOut` must be an i128 decimal string");let o=0;for(const[e,r]of t.paths.entries()){if(!r||"number"!=typeof r.splitPpm||r.splitPpm<=0||!Array.isArray(r.hops)||0===r.hops.length)throw new Error(`Stellar builder: \`steps.paths[${e}]\` must have splitPpm > 0 and a non-empty hops array`);o+=r.splitPpm;for(const[t,o]of r.hops.entries())if(!o||"string"!=typeof o.amountOut||"string"!=typeof o.pool||"string"!=typeof o.tokenIn||"string"!=typeof o.tokenOut||!y.includes(o.venue))throw new Error(`Stellar builder: \`steps.paths[${e}].hops[${t}]\` must have amountOut, pool, tokenIn, tokenOut, and a valid Soroban venue`)}if(1e6!==o)throw new Error(`Stellar builder: \`steps.paths[].splitPpm\` must sum to 1_000_000, got ${o}`);return t})(e),i.ScVal.scvBytes(Buffer.from(N(t).toXDR("base64"),"base64")));var t,o;throw new Error("Stellar builder: `steps` must be opaque strategy bytes (`routeXdr`, base64/hex string, or Uint8Array)")},q=e=>{if("string"==typeof e)return(e=>{const t=e.startsWith("0x")?e.slice(2):e,o=Buffer.from(t,"hex");return i.ScVal.scvBytes(o)})(e);if(e instanceof Uint8Array)return i.ScVal.scvBytes(Buffer.from(e));throw new Error("Stellar builder: `data` must be a hex string or Uint8Array (Soroban Bytes payload)")};function L(t,a,s){const i=t.controllerAddress??f(t.network),l=new r(i),c=new e(t.caller,t.sourceSequence);return{xdr:new n(c,{fee:t.fee??o,networkPassphrase:_[t.network]}).addOperation(l.call(a,...s)).setTimeout(t.timeoutSeconds??300).build().toXDR()}}function V(e,t){const o=t.accountNonce??0,r=t.spokeId??0;return L(e,"supply",[w(e.caller),v(o),g(r),A([...t.assets])])}function z(e,t){return V(e,{accountNonce:t.accountNonce,spokeId:t.spokeId,assets:[{hubId:t.hubId,asset:t.asset,amount:t.amount}]})}function W(e,t){return L(e,"borrow",[w(e.caller),v(t.accountNonce),A([...t.borrows]),I(t.to,w)])}function D(e,t){return W(e,{accountNonce:t.accountNonce,borrows:[{hubId:t.hubId,asset:t.asset,amount:t.amount}],to:t.to})}function G(e,t){return L(e,"withdraw",[w(e.caller),v(t.accountNonce),A([...t.withdrawals]),I(t.to,w)])}function M(e,t){return G(e,{accountNonce:t.accountNonce,withdrawals:[{hubId:t.hubId,asset:t.asset,amount:t.amount}],to:t.to})}function X(e,t){return L(e,"repay",[w(e.caller),v(t.accountNonce),A([...t.payments])])}function F(e,t){return X(e,{accountNonce:t.accountNonce,payments:[{hubId:t.hubId,asset:t.asset,amount:t.amount}]})}function H(e,t){return L(e,"liquidate",[w(e.caller),v(t.accountNonce),A([...t.debtPayments])])}function j(e,t){return L(e,"flash_loan",[w(e.caller),$(t.hubId,t.asset),b(t.amount),w(t.receiver),q(t.data)])}function Q(e,t){return L(e,"migrate_from_blend",[w(e.caller),v(t.accountId),g(t.spokeId),w(t.blendPool),x(t.collateralTokens.map(w)),x(t.supplyTokens.map(w)),(o=t.debtCaps.map((e=>({token:e.token,amount:e.cap}))),i.ScVal.scvVec(o.map((e=>{return t=e.token,o=e.amount,i.ScVal.scvVec([w(t),b(o)]);var t,o}))))]);var o}function Z(e,t){const o=t.accountNonce??0,r=t.spokeId??0;return L(e,"multiply",[w(e.caller),v(o),g(r),$(t.collateral.hubId,t.collateral.asset),b(t.debtToFlashLoan),$(t.debt.hubId,t.debt.asset),g(t.mode),U(t.steps),I(t.initialPayment,(e=>B(e.hubId,e.asset,e.amount))),I(t.convertSwap,U)])}function J(e,t){return L(e,"swap_debt",[w(e.caller),v(t.accountNonce),$(t.existingDebt.hubId,t.existingDebt.asset),b(t.newDebtAmount),$(t.newDebt.hubId,t.newDebt.asset),U(t.steps)])}function K(e,t){return L(e,"swap_collateral",[w(e.caller),v(t.accountNonce),$(t.current.hubId,t.current.asset),b(t.fromAmount),$(t.newCollateral.hubId,t.newCollateral.asset),U(t.steps)])}function Y(e,t){return L(e,"repay_debt_with_collateral",[w(e.caller),v(t.accountNonce),$(t.collateral.hubId,t.collateral.asset),b(t.collateralAmount),$(t.debt.hubId,t.debt.asset),U(t.steps),S(t.closePosition)])}const ee="/stellar-lending",te=25,oe=encodeURIComponent,re=(e,t)=>e.fetchWithTimeout(`${ee}/assets`,t),ae=(e,t)=>e.fetchWithTimeout(`${ee}/hubs`,t),ne=(e,t)=>e.fetchWithTimeout(`${ee}/spokes`,t),se=(e,t={},o)=>{const{hubId:r,spokeId:a,asset:n}=t;return e.fetchWithTimeout(`${ee}/reserves`,{...o,params:{...void 0!==r?{hubId:r}:{},...void 0!==a?{spokeId:a}:{},...n?{asset:n}:{}}})},ie=(e,t,o,r,a)=>e.fetchWithTimeout(`${ee}/reserves/${t}/${o}/${oe(r)}`,a),le=(e,t,o,r,a,n)=>e.fetchWithTimeout(`${ee}/reserves/${t}/${o}/${oe(r)}/holders`,{...n,params:{side:a}}),ce=(e,t,o)=>e.fetchWithTimeout(`${ee}/assets/${oe(t)}`,o),ue=(e,t,o,r)=>e.fetchWithTimeout(`${ee}/assets/${oe(t)}/page`,{...r,params:{...o}}),pe=(e,t,o,r)=>e.fetchWithTimeout(`${ee}/assets/${oe(t)}/markets`,{...r,params:{side:o}}),de=(e,t,o)=>e.fetchWithTimeout(`${ee}/hubs/${t}`,o),_e=(e,t,o)=>e.fetchWithTimeout(`${ee}/spokes/${t}`,o),fe=(e,t,o)=>e.fetchWithTimeout(`${ee}/users/${oe(t)}/positions`,o),me=(e,t,o={},r)=>{const{skip:a,top:n}=o;return e.fetchWithTimeout(`${ee}/users/${oe(t)}/activity`,{...r,params:{...void 0!==a?{skip:a}:{},...void 0!==n?{top:n}:{}}})},he=(e,t,o)=>e.fetchWithTimeout(`${ee}/accounts/${oe(t)}/positions`,o),ye=(e,t={},o)=>{const{top:r=te,continuationToken:a}=t;return e.fetchWithTimeout(`${ee}/governance/proposals`,{...o,params:{top:r,...a?{continuationToken:a}:{}}})},we=(e,t,o,r)=>e.fetchWithTimeout(`${ee}/assets/${oe(t)}/graph`,{...r,params:{...o}}),be=(e,t,o,r)=>e.fetchWithTimeout(`${ee}/hubs/${t}/graph`,{...r,params:{...o}}),ge=(e,t,o,r)=>e.fetchWithTimeout(`${ee}/spokes/${t}/graph`,{...r,params:{...o}}),ve=(e,t,o,r,a,n)=>e.fetchWithTimeout(`${ee}/reserves/${t}/${o}/${oe(r)}/graph`,{...n,params:{...a}}),Se=e=>({assets:t=>re(e,t),hubs:t=>ae(e,t),spokes:t=>ne(e,t),reserves:(t,o)=>se(e,t,o),reserve:(t,o,r,a)=>ie(e,t,o,r,a),reserveHolders:(t,o,r,a,n)=>le(e,t,o,r,a,n),asset:(t,o)=>ce(e,t,o),assetMarkets:(t,o,r)=>pe(e,t,o,r),hub:(t,o)=>de(e,t,o),spoke:(t,o)=>_e(e,t,o),userPositions:(t,o)=>fe(e,t,o),userActivity:(t,o,r)=>me(e,t,o,r),accountPositions:(t,o)=>he(e,t,o),governanceProposals:(t,o)=>ye(e,t,o),assetGraph:(t,o,r)=>we(e,t,o,r),hubGraph:(t,o,r)=>be(e,t,o,r),spokeGraph:(t,o,r)=>ge(e,t,o,r),reserveGraph:(t,o,r,a,n)=>ve(e,t,o,r,a,n)}),ke={Single:0,PrimaryWithAnchor:1},Re=e=>O({base_borrow_rate_ray:b(e.baseBorrowRateRay),max_borrow_rate_ray:b(e.maxBorrowRateRay),max_utilization_ray:b(e.maxUtilizationRay),mid_utilization_ray:b(e.midUtilizationRay),optimal_utilization_ray:b(e.optimalUtilizationRay),reserve_factor_bps:g(e.reserveFactorBps),slope1_ray:b(e.slope1Ray),slope2_ray:b(e.slope2Ray),slope3_ray:b(e.slope3Ray)}),Te=e=>O({asset_decimals:g(e.assetDecimals),asset_id:w(e.assetId),base_borrow_rate_ray:b(e.baseBorrowRateRay),borrow_cap:b(e.borrowCap),max_borrow_rate_ray:b(e.maxBorrowRateRay),max_utilization_ray:b(e.maxUtilizationRay),mid_utilization_ray:b(e.midUtilizationRay),optimal_utilization_ray:b(e.optimalUtilizationRay),reserve_factor_bps:g(e.reserveFactorBps),slope1_ray:b(e.slope1Ray),slope2_ray:b(e.slope2Ray),slope3_ray:b(e.slope3Ray),supply_cap:b(e.supplyCap)}),xe=e=>O({asset_decimals:g(0),e_mode_categories:x(e.eModeCategories.map((e=>g(e)))),flashloan_fee_bps:g(e.flashloanFeeBps),is_borrowable:S(e.isBorrowable),is_collateralizable:S(e.isCollateralizable),is_flashloanable:S(e.isFlashloanable),liquidation_bonus_bps:g(e.liquidationBonusBps),liquidation_fees_bps:g(e.liquidationFeesBps),liquidation_threshold_bps:g(e.liquidationThresholdBps),loan_to_value_bps:g(e.loanToValueBps)}),Ee=e=>O({max_borrow_positions:g(e.maxBorrowPositions),max_supply_positions:g(e.maxSupplyPositions)}),Ie=e=>{const t=e.kind;switch(t){case"Stellar":return x([R("Stellar"),w(e.value)]);case"Symbol":return x([R("Symbol"),R(e.value)]);case"String":return x([R("String"),k(e.value)]);default:throw new Error(`Stellar builder: unknown oracle asset ref kind "${t}"`)}},$e=(e,t)=>{if("Twap"===e){if("number"!=typeof t)throw new Error("Stellar builder: oracle source with Twap read mode requires `twapRecords`");return x([R("Twap"),g(t)])}return x([R("Spot")])},Be=e=>{const t=e.provider;if("ReflectorSep40"===t){if(!e.asset)throw new Error("Stellar builder: Reflector oracle source requires `asset`");return x([R("Reflector"),O({asset:Ie(e.asset),contract:w(e.contract),read_mode:$e(e.readMode,e.twapRecords)})])}if("RedStonePriceFeed"===t){if("string"!=typeof e.feedId)throw new Error("Stellar builder: RedStone oracle source requires `feedId`");if("number"!=typeof e.maxStaleSeconds)throw new Error("Stellar builder: RedStone oracle source requires `maxStaleSeconds`");return x([R("RedStone"),O({contract:w(e.contract),feed_id:k(e.feedId),max_stale_seconds:v(e.maxStaleSeconds)})])}throw new Error(`Stellar builder: unknown oracle provider "${t}"`)},Ae=e=>{const t=ke[e.strategy];if(void 0===t)throw new Error(`Stellar builder: unknown oracle strategy "${e.strategy}"`);return O({anchor:(o=e.anchor,x(null==o?[R("None")]:[R("Some"),Be(o)])),max_price_stale_seconds:v(e.maxPriceStaleSeconds),max_sanity_price_wad:b(e.maxSanityPriceWad),min_sanity_price_wad:b(e.minSanityPriceWad),primary:Be(e.primary),strategy:g(t),tolerance_bps:g(e.toleranceBps)});var o};function Oe(e,t){return L(e,"upgrade",[E(t.wasmHash)])}function Ne(e,t){return L(e,"migrate",[g(t.newVersion)])}function Pe(e){return L(e,"pause",[])}function Ce(e){return L(e,"unpause",[])}function Ue(e,t){return L(e,"grant_role",[w(t.account),R(t.role)])}function qe(e,t){return L(e,"revoke_role",[w(t.account),R(t.role)])}function Le(e,t){return L(e,"transfer_ownership",[w(t.newOwner),g(t.liveUntilLedger)])}function Ve(e){return L(e,"accept_ownership",[])}function ze(e,t){return L(e,"set_aggregator",[w(t.aggregator)])}function We(e,t){return L(e,"set_accumulator",[w(t.accumulator)])}function De(e,t){return L(e,"set_liquidity_pool_template",[E(t.wasmHash)])}function Ge(e,t){return L(e,"edit_asset_config",[w(t.asset),xe(t.config)])}function Me(e,t){return L(e,"set_position_limits",[Ee(t)])}function Xe(e){return L(e,"add_e_mode_category",[])}function Fe(e,t){return L(e,"remove_e_mode_category",[g(t.id)])}const He=e=>O({asset:w(e.asset),category_id:g(e.categoryId),can_collateral:S(e.canCollateral),can_borrow:S(e.canBorrow),ltv:g(e.ltv),threshold:g(e.threshold),bonus:g(e.bonus),supply_cap:b(e.supplyCap),borrow_cap:b(e.borrowCap)});function je(e,t){return L(e,"add_asset_to_e_mode_category",[He(t)])}function Qe(e,t){return L(e,"edit_asset_in_e_mode_category",[He(t)])}function Ze(e,t){return L(e,"update_pool_caps",[w(t.asset),b(t.supplyCap),b(t.borrowCap)])}function Je(e,t){return L(e,"remove_asset_from_e_mode",[w(t.asset),g(t.categoryId)])}function Ke(e,t){return L(e,"approve_token",[w(t.token)])}function Ye(e,t){return L(e,"revoke_token",[w(t.token)])}function et(e,t){return L(e,"configure_market_oracle",[w(e.caller),w(t.asset),Ae(t.config)])}function tt(e,t){return L(e,"edit_oracle_tolerance",[w(e.caller),w(t.asset),g(t.tolerance)])}function ot(e,t){return L(e,"disable_token_oracle",[w(e.caller),w(t.asset)])}function rt(e,t){return L(e,"update_indexes",[w(e.caller),x(t.assets.map((e=>w(e))))])}function at(e,t){return L(e,"renew_account",[w(e.caller),v(t.accountNonce)])}function nt(e,t){return L(e,"create_liquidity_pool",[w(t.asset),Te(t.params),xe(t.config)])}function st(e,t){return L(e,"upgrade_liquidity_pool_params",[w(t.asset),Re(t.params)])}function it(e,t){return L(e,"upgrade_liquidity_pool",[w(t.asset),E(t.wasmHash)])}function lt(e,t){return L(e,"claim_revenue",[w(e.caller),x(t.assets.map((e=>w(e))))])}function ct(e,t){return L(e,"add_rewards",[w(e.caller),x(t.rewards.map((e=>x([w(e.token),b(e.amount)]))))])}function ut(e,t){return L(e,"update_account_threshold",[w(e.caller),w(t.asset),S(t.hasRisks),x(t.accountNonces.map((e=>v(e))))])}const pt="00".repeat(32),dt=e=>{if("string"==typeof e)return E(e);const t=Buffer.from(e);if(32!==t.length)throw new Error(`Stellar governance builder: expected a 32-byte salt (got ${t.length} bytes)`);return i.ScVal.scvBytes(t)},_t=(e,...t)=>x([R(e),...t]),ft=e=>O({asset:w(e.asset),category_id:g(e.categoryId),can_collateral:S(e.canCollateral),can_borrow:S(e.canBorrow),ltv:g(e.ltv),threshold:g(e.threshold),bonus:g(e.bonus),supply_cap:b(e.supplyCap),borrow_cap:b(e.borrowCap)}),mt=e=>O({new_owner:w(e.newOwner),live_until_ledger:g(e.liveUntilLedger)}),ht=e=>O({account:w(e.account),role:R(e.role)});function yt(t,a,s){const i=t.governanceAddress??h(t.network),l=new r(i),c=new e(t.caller,t.sourceSequence);return{xdr:new n(c,{fee:t.fee??o,networkPassphrase:_[t.network]}).addOperation(l.call(a,...s)).setTimeout(t.timeoutSeconds??300).build().toXDR()}}const wt=(e,t,o)=>yt(e,"propose",[w(e.caller),t,dt(o)]),bt=(e,t,o)=>yt(e,"execute_self",[T(),t,dt(o)]);function gt(e,t,o){return wt(e,_t("SetAggregator",w(t.aggregator)),o)}function vt(e,t,o){return wt(e,_t("SetAccumulator",w(t.accumulator)),o)}function St(e,t,o){return wt(e,_t("SetLiquidityPoolTemplate",E(t.wasmHash)),o)}function kt(e,t,o){return wt(e,_t("EditAssetConfig",w(t.asset),xe(t.config)),o)}function Rt(e,t,o){return wt(e,_t("SetPositionLimits",Ee(t)),o)}function Tt(e,t,o){return wt(e,_t("SetMinBorrowCollateralUsd",b(t.floorWad)),o)}function xt(e,t){return wt(e,_t("AddEModeCategory"),t)}function Et(e,t,o){return wt(e,_t("RemoveEModeCategory",g(t.id)),o)}function It(e,t,o){return wt(e,_t("AddAssetToEModeCategory",ft(t)),o)}function $t(e,t,o){return wt(e,_t("EditAssetInEModeCategory",ft(t)),o)}function Bt(e,t,o){return wt(e,_t("UpdatePoolCaps",O({asset:w((r=t).asset),supply_cap:b(r.supplyCap),borrow_cap:b(r.borrowCap)})),o);var r}function At(e,t,o){return wt(e,_t("RemoveAssetFromEMode",O({asset:w((r=t).asset),category_id:g(r.categoryId)})),o);var r}function Ot(e,t,o){return wt(e,_t("ApproveToken",w(t.token)),o)}function Nt(e,t,o){return wt(e,_t("RevokeToken",w(t.token)),o)}function Pt(e,t,o){return wt(e,_t("ApproveBlendPool",w(t.pool)),o)}function Ct(e,t,o){return wt(e,_t("RevokeBlendPool",w(t.pool)),o)}function Ut(e,t,o){return wt(e,_t("CreateLiquidityPool",O({asset:w((r=t).asset),params:Te(r.params),config:xe(r.config)})),o);var r}function qt(e,t,o){return wt(e,_t("UpgradeLiquidityPoolParams",O({asset:w((r=t).asset),params:Re(r.params)})),o);var r}function Lt(e,t){return wt(e,_t("DeployPool"),t)}function Vt(e,t,o){return wt(e,_t("UpgradePool",E(t.wasmHash)),o)}function zt(e,t,o){return wt(e,_t("DisableTokenOracle",w(t.asset)),o)}function Wt(e,t,o){return wt(e,_t("UpgradeController",E(t.wasmHash)),o)}function Dt(e,t,o){return wt(e,_t("MigrateController",g(t.newVersion)),o)}function Gt(e,t,o){return wt(e,_t("TransferCtrlOwnership",mt(t)),o)}function Mt(e,t,o){return wt(e,_t("ConfigureMarketOracle",O({asset:w((r=t).asset),cfg:Ae(r.config)})),o);var r}function Xt(e,t,o){return wt(e,_t("EditOracleTolerance",O({asset:w((r=t).asset),tolerance:g(r.tolerance)})),o);var r}function Ft(e,t,o){return wt(e,_t("UpgradeGov",E(t.wasmHash)),o)}function Ht(e,t,o){return wt(e,_t("UpdateGovDelay",g(t.newDelay)),o)}function jt(e,t,o){return wt(e,_t("GrantGovRole",ht(t)),o)}function Qt(e,t,o){return wt(e,_t("RevokeGovRole",ht(t)),o)}function Zt(e,t,o){return wt(e,_t("TransferGovOwnership",mt(t)),o)}function Jt(e,t){const o=x(t.argsXdr.map((e=>i.ScVal.fromXDR(e,"base64")))),r=dt(t.predecessor??pt);return yt(e,"execute",[T(),w(t.target),R(t.functionName),o,r,dt(t.salt)])}function Kt(e,t,o){return bt(e,_t("UpgradeGov",E(t.wasmHash)),o)}function Yt(e,t,o){return bt(e,_t("UpdateGovDelay",g(t.newDelay)),o)}function eo(e,t,o){return bt(e,_t("GrantGovRole",ht(t)),o)}function to(e,t,o){return bt(e,_t("RevokeGovRole",ht(t)),o)}function oo(e,t,o){return bt(e,_t("TransferGovOwnership",mt(t)),o)}const ro=e=>e.toXDR("base64"),ao=e=>i.ScVal.fromXDR(e,"base64"),no=e=>e.map((e=>String(s(ao(e))))).join(":"),so=e=>"bigint"==typeof e||"number"==typeof e?e.toString():String(e),io=e=>Number(e),lo=e=>String(e),co=e=>null==e?void 0:so(e),uo=e=>null==e?void 0:lo(e),po=e=>e instanceof Uint8Array?Buffer.from(e).toString("hex"):Buffer.isBuffer(e)?e.toString("hex"):String(e),_o=["None","Multiply","Long","Short"],fo=["Single","PrimaryWithAnchor"],mo=["ReflectorSep40","RedStonePriceFeed"],ho=["Spot","Twap"],yo=["supply","borrow","withdraw","repay","liq_repay","liq_seize","multiply","param_upd","sw_debt_r","sw_col_wd","rp_col_wd","rp_col_r","close_wd"],wo=e=>Array.isArray(e)?e:[],bo=e=>({loanToValueBps:io(e.loan_to_value_bps),liquidationThresholdBps:io(e.liquidation_threshold_bps),liquidationBonusBps:io(e.liquidation_bonus_bps),liquidationFeesBps:io(e.liquidation_fees_bps),isCollateralizable:Boolean(e.is_collateralizable),isBorrowable:Boolean(e.is_borrowable),isFlashloanable:Boolean(e.is_flashloanable),flashloanFeeBps:io(e.flashloan_fee_bps),eModeCategories:(e.e_mode_categories??[]).map(io)}),go=(e,t)=>{const o="Borrow"===t;return{action:(r=e[0],yo[io(r)]??so(r)),positionType:t,asset:lo(e[1]),scaledAmountRay:so(e[2]),indexRay:so(e[3]),amount:so(e[4]),liquidationThresholdBps:o?void 0:io(e[5]),liquidationBonusBps:o?void 0:io(e[6]),loanToValueBps:o?void 0:io(e[7])};var r},vo=e=>{return{owner:lo(e[0]),eModeCategoryId:io(e[1]),mode:(t=e[2],_o[io(t)]??"None")};var t},So=(e,t)=>{const o=ho[io(e[`${t}_read_mode`])]??"Spot",r=e[`${t}_asset`],a=e[`${t}_symbol`],n=null!=r?{kind:"Stellar",value:lo(r)}:null!=a?{kind:"Symbol",value:lo(a)}:void 0;return{provider:mo[io(e[`${t}_provider`])]??"ReflectorSep40",contractAddress:lo(e[`${t}_contract`]),asset:n,feedId:uo(e[`${t}_feed_id`]),readMode:o,twapRecords:"Twap"===o?io(e[`${t}_twap_records`]):void 0,decimals:io(e[`${t}_decimals`]),resolutionSeconds:io(e[`${t}_resolution_seconds`]),maxStaleSeconds:io(e[`${t}_max_stale_seconds`])}},ko=e=>{const t=null!==e.anchor_provider&&void 0!==e.anchor_provider;return{baseTokenId:lo(e.base_token_id),quoteTokenId:lo(e.quote_token_id),tolerance:{upperRatio:io(e.upper_ratio_bps??e.tolerance?.upper_ratio_bps),lowerRatio:io(e.lower_ratio_bps??e.tolerance?.lower_ratio_bps)},assetDecimals:io(e.asset_decimals),maxPriceStaleSeconds:io(e.max_price_stale_seconds),strategy:fo[io(e.strategy)]??"Single",primary:So(e,"primary"),anchor:t?So(e,"anchor"):void 0,primaryQuoteToken:uo(e.primary_quote_token),anchorQuoteToken:uo(e.anchor_quote_token),minSanityPriceWad:co(e.min_sanity_price_wad),maxSanityPriceWad:co(e.max_sanity_price_wad)}},Ro={"market:create":e=>({topic:"market:create",data:{baseAsset:lo(e.base_asset),maxBorrowRate:so(e.max_borrow_rate),baseBorrowRate:so(e.base_borrow_rate),slope1:so(e.slope1),slope2:so(e.slope2),slope3:so(e.slope3),midUtilization:so(e.mid_utilization),optimalUtilization:so(e.optimal_utilization),maxUtilization:co(e.max_utilization),reserveFactor:io(e.reserve_factor),marketAddress:lo(e.market_address),config:bo(e.config)}}),"market:params_update":e=>({topic:"market:params_update",data:{asset:lo(e.asset),maxBorrowRateRay:so(e.max_borrow_rate_ray),baseBorrowRateRay:so(e.base_borrow_rate_ray),slope1Ray:so(e.slope1_ray),slope2Ray:so(e.slope2_ray),slope3Ray:so(e.slope3_ray),midUtilizationRay:so(e.mid_utilization_ray),optimalUtilizationRay:so(e.optimal_utilization_ray),maxUtilizationRay:co(e.max_utilization_ray),reserveFactorBps:io(e.reserve_factor_bps)}}),"market:batch_state_update":e=>({topic:"market:batch_state_update",data:{updates:wo(e).map((e=>{return t=wo(e),{asset:lo(t[0]),timestamp:io(t[1]),supplyIndexRay:so(t[2]),borrowIndexRay:so(t[3]),reservesRay:so(t[4]),suppliedRay:so(t[5]),borrowedRay:so(t[6]),revenueRay:so(t[7]),assetPriceWad:co(t[8])};var t}))}}),"market:batch_params_update":e=>({topic:"market:batch_params_update",data:{updates:wo(e).map((e=>{const t=e;return{asset:lo(t.asset),params:(o=t.params,{maxBorrowRateRay:so(o.max_borrow_rate_ray),baseBorrowRateRay:so(o.base_borrow_rate_ray),slope1Ray:so(o.slope1_ray),slope2Ray:so(o.slope2_ray),slope3Ray:so(o.slope3_ray),midUtilizationRay:so(o.mid_utilization_ray),optimalUtilizationRay:so(o.optimal_utilization_ray),maxUtilizationRay:co(o.max_utilization_ray),reserveFactorBps:io(o.reserve_factor_bps),supplyCap:so(o.supply_cap),borrowCap:so(o.borrow_cap),assetId:uo(o.asset_id),assetDecimals:void 0===o.asset_decimals?void 0:io(o.asset_decimals)})};var o}))}}),"position:batch_update":e=>{const t=wo(e);return{topic:"position:batch_update",data:{accountId:so(t[0]),accountAttributes:vo(wo(t[1])),updates:[...wo(t[2]).map((e=>go(wo(e),"Deposit"))),...wo(t[3]).map((e=>go(wo(e),"Borrow")))]}}},"position:flash_loan":e=>({topic:"position:flash_loan",data:{asset:lo(e.asset),receiver:lo(e.receiver),caller:lo(e.caller),amount:so(e.amount),fee:so(e.fee)}}),"config:asset":e=>({topic:"config:asset",data:{asset:lo(e.asset),config:bo(e.config)}}),"config:oracle":e=>({topic:"config:oracle",data:{asset:lo(e.asset),oracle:ko(e.oracle)}}),"config:emode_category":e=>({topic:"config:emode_category",data:{category:{categoryId:io(e.category.category_id),isDeprecated:Boolean(e.category.is_deprecated)}}}),"config:emode_asset":e=>({topic:"config:emode_asset",data:{asset:lo(e.asset),config:{isCollateralizable:Boolean(e.config.is_collateralizable),isBorrowable:Boolean(e.config.is_borrowable),loanToValueBps:io(e.config.loan_to_value_bps),liquidationThresholdBps:io(e.config.liquidation_threshold_bps),liquidationBonusBps:io(e.config.liquidation_bonus_bps),supplyCap:so(e.config.supply_cap),borrowCap:so(e.config.borrow_cap)},categoryId:io(e.category_id)}}),"config:remove_emode_asset":e=>({topic:"config:remove_emode_asset",data:{asset:lo(e.asset),categoryId:io(e.category_id)}}),"debt:bad_debt":e=>({topic:"debt:bad_debt",data:{accountId:so(e.account_id),totalBorrowUsdWad:so(e.total_borrow_usd_wad),totalCollateralUsdWad:so(e.total_collateral_usd_wad)}}),"strategy:initial_payment":e=>({topic:"strategy:initial_payment",data:{token:lo(e.token),amount:so(e.amount),usdValueWad:so(e.usd_value_wad),accountId:so(e.account_id)}}),"strategy:fee":e=>({topic:"strategy:fee",data:{asset:lo(e.asset),amount:so(e.amount),fee:so(e.fee),amountSent:so(e.amount_sent)}}),"config:approve_token":e=>({topic:"config:approve_token",data:{wasmHash:po(e.wasm_hash),approved:Boolean(e.approved)}}),"config:aggregator":e=>({topic:"config:aggregator",data:{aggregator:lo(e.aggregator)}}),"config:accumulator":e=>({topic:"config:accumulator",data:{accumulator:lo(e.accumulator)}}),"config:pool_template":e=>({topic:"config:pool_template",data:{wasmHash:po(e.wasm_hash)}}),"config:position_limits":e=>({topic:"config:position_limits",data:{maxSupplyPositions:io(e.max_supply_positions),maxBorrowPositions:io(e.max_borrow_positions)}}),"config:oracle_disabled":e=>({topic:"config:oracle_disabled",data:{asset:lo(e.asset)}})},To=Object.freeze(Object.keys(Ro));function xo(e,t){const o=no(e),r=Ro[o];return r?r(s(ao(t))):null}const Eo="XLENDXLM-a7c9f3",Io=1e4;function $o(e){const t=BigInt(e).toString(16),o=t.length%2==0?t:`0${t}`;return`${Eo}-${o}`}function Bo(e){const t=e.split("-");return t.length>=2&&parseInt(t[1],10)||0}function Ao(e,t=0){return 1e4*e+t}function Oo(e){switch(e){case"liq_repay":return"lendingLiquidateRepayDebt";case"liq_seize":return"lendingLiquidateSeizeCollateral";case"param_upd":return"lendingUpdateAccountParameters";default:return"lendingUpdateAccountPosition"}}const No=(e,t,o)=>{const r=new URL(t,e.endsWith("/")?e:`${e}/`);if(o)for(const[e,t]of Object.entries(o))void 0!==t&&r.searchParams.set(e,String(t));return r.toString()},Po=e=>e.baseUrl??d[e.network];async function Co(e,t){if(null==e.amountIn==(null==e.amountOut))throw new Error("getStellarAggregatorQuote: exactly one of `amountIn` or `amountOut` must be provided");const o=No(Po(t),"api/v1/quote",{from:e.from,to:e.to,amountIn:e.amountIn,amountOut:e.amountOut,maxHops:e.maxHops,maxSplits:e.maxSplits,slippage:e.slippage,includePaths:e.includePaths,sender:e.sender,router:e.router,platform:e.platform,fresh:e.fresh}),r=await fetch(o,t.fetchOptions);if(!r.ok){const e=await r.text().catch((()=>""));throw new Error(`Stellar quote server responded ${r.status} ${r.statusText} for ${o} — ${e}`)}return await r.json()}async function Uo(e){const t=No(Po(e),"api/v1/tokens"),o=await fetch(t,e.fetchOptions);if(!o.ok){const e=await o.text().catch((()=>""));throw new Error(`Stellar quote server responded ${o.status} ${o.statusText} for ${t} — ${e}`)}return await o.json()}const qo=(e,t)=>(e=>Boolean(e&&"object"==typeof e&&!(e instanceof Uint8Array)&&"paths"in e))(e)&&void 0===e.referralId?{...e,referralId:t??0}:e,Lo=e=>N(e).toXDR("base64");function Vo(t,a){const s=t.routerAddress??m(t.network),i=new r(s),l=new e(t.caller,t.sourceSequence),c=U(qo(a,t.referralId));return{xdr:new n(l,{fee:t.fee??o,networkPassphrase:_[t.network]}).addOperation(i.call("execute_strategy",w(t.caller),b(t.totalIn),c)).setTimeout(t.timeoutSeconds??300).build().toXDR()}}function zo(e,t){return Vo(e,t)}function Wo(e,t={}){if("string"!=typeof e.amountOutMin)throw new Error("mapQuoteResponseToStrategyPayload: quote response is missing `amountOutMin`. Pass `slippage` when fetching the quote.");return{paths:e.paths?e.paths.map((e=>({hops:e.swaps.map(Mo),splitPpm:e.splitPpm}))):[{hops:e.hops.map(Mo),splitPpm:1e6}],referralId:t.referralId??0,tokenIn:e.from,tokenOut:e.to,totalMinOut:e.amountOutMin}}function Do(e,t={}){const o=e;return"string"==typeof o.routeXdr&&o.routeXdr.length>0?{routeXdr:o.routeXdr}:Wo(e,t)}const Go=Wo,Mo=e=>({amountOut:e.amountOut,pool:e.address,tokenIn:e.from,tokenOut:e.to,venue:e.dex});function Xo(e,t){const o=t instanceof Error?t.message:String(t);return new Error(`[xoxno-invoked:${e}] ${o}`)}async function Fo(e,t,o){const r=n.fromXDR(t,"base64");try{return(await e.prepareTransaction(r)).toXDR()}catch(e){if(o?.invokedContractId)throw Xo(o.invokedContractId,e);throw e}}async function Ho(e,t,o){return Fo(e,t.xdr,o)}function jo(e){if(e<=0||e>4)throw new Error(`Invalid PositionMode ${e} for Stellar — expected 1 (Normal) through 4 (Short). "None" (0) has no Stellar equivalent.`);return e-1}function Qo(e,t){return{paths:[{hops:[{amountOut:"0",pool:e,tokenIn:e,tokenOut:e,venue:"Soroswap"}],splitPpm:1e6}],referralId:0,tokenIn:e,tokenOut:e,totalMinOut:t}}const Zo=e=>{const t=e.startsWith("0x")?e.slice(2):e;if(t.length%2!=0)throw new Error("buildStellarCctpForwardTx: hex input must have even length");return Buffer.from(t,"hex")};function Jo(t){const o=new e(t.caller,t.sourceSequence),a=new r(t.forwarderAddress).call("mint_and_forward",i.ScVal.scvBytes(Zo(t.message)),i.ScVal.scvBytes(Zo(t.attestation)));return{xdr:new n(o,{fee:t.fee??"10000000",networkPassphrase:_[t.network]}).addOperation(a).setTimeout(t.timeoutSeconds??120).build().toXDR()}}export{c as STELLAR_AGGREGATOR_ROUTER,u as STELLAR_GOVERNANCE,pt as STELLAR_GOVERNANCE_ZERO_PREDECESSOR,l as STELLAR_LENDING_CONTROLLER,To as STELLAR_LENDING_TOPICS,_ as STELLAR_NETWORK_PASSPHRASE,d as STELLAR_QUOTE_URL,p as STELLAR_SOROBAN_RPC_URL,Io as SYNTHETIC_EVENT_ORDER_STRIDE,Eo as XOXNO_LENDING_STELLAR_TICKER,Qo as buildSameTokenRepaySwapSteps,Ve as buildStellarAcceptOwnershipTx,je as buildStellarAddAssetToEModeCategoryTx,Xe as buildStellarAddEModeCategoryTx,ct as buildStellarAddRewardsTx,Ke as buildStellarApproveTokenTx,zo as buildStellarBatchSwapTx,W as buildStellarBorrowBatchTx,D as buildStellarBorrowTx,Jo as buildStellarCctpForwardTx,lt as buildStellarClaimRevenueTx,et as buildStellarConfigureMarketOracleTx,nt as buildStellarCreateLiquidityPoolTx,ot as buildStellarDisableTokenOracleTx,Ge as buildStellarEditAssetConfigTx,Qe as buildStellarEditAssetInEModeCategoryTx,tt as buildStellarEditOracleToleranceTx,Vo as buildStellarExecuteStrategyTx,j as buildStellarFlashLoanTx,Kt as buildStellarGovernanceExecuteGovernanceUpgradeTx,eo as buildStellarGovernanceExecuteGrantGovernanceRoleTx,to as buildStellarGovernanceExecuteRevokeGovernanceRoleTx,oo as buildStellarGovernanceExecuteTransferGovOwnTx,Jt as buildStellarGovernanceExecuteTx,Yt as buildStellarGovernanceExecuteUpdateDelayTx,Ue as buildStellarGrantRoleTx,$o as buildStellarLendingIdentifier,H as buildStellarLiquidateTx,Q as buildStellarMigrateFromBlendTx,Ne as buildStellarMigrateTx,Z as buildStellarMultiplyTx,Pe as buildStellarPauseTx,It as buildStellarProposeAddAssetToEModeTx,xt as buildStellarProposeAddEModeCategoryTx,Pt as buildStellarProposeApproveBlendPoolTx,Ot as buildStellarProposeApproveTokenTx,Mt as buildStellarProposeConfigureMarketOracleTx,Ut as buildStellarProposeCreateLiquidityPoolTx,Lt as buildStellarProposeDeployPoolTx,zt as buildStellarProposeDisableTokenOracleTx,kt as buildStellarProposeEditAssetConfigTx,$t as buildStellarProposeEditAssetInEModeTx,Xt as buildStellarProposeEditOracleToleranceTx,Ft as buildStellarProposeGovernanceUpgradeTx,jt as buildStellarProposeGrantGovernanceRoleTx,Dt as buildStellarProposeMigrateControllerTx,At as buildStellarProposeRemoveAssetFromEModeTx,Et as buildStellarProposeRemoveEModeCategoryTx,Ct as buildStellarProposeRevokeBlendPoolTx,Qt as buildStellarProposeRevokeGovernanceRoleTx,Nt as buildStellarProposeRevokeTokenTx,vt as buildStellarProposeSetAccumulatorTx,gt as buildStellarProposeSetAggregatorTx,Tt as buildStellarProposeSetMinBorrowCollatTx,St as buildStellarProposeSetPoolTemplateTx,Rt as buildStellarProposeSetPositionLimitsTx,Gt as buildStellarProposeTransferCtrlOwnershipTx,Zt as buildStellarProposeTransferGovOwnTx,Ht as buildStellarProposeUpdateDelayTx,Bt as buildStellarProposeUpdatePoolCapsTx,Wt as buildStellarProposeUpgradeControllerTx,qt as buildStellarProposeUpgradePoolParamsTx,Vt as buildStellarProposeUpgradePoolTx,Je as buildStellarRemoveAssetFromEModeTx,Fe as buildStellarRemoveEModeCategoryTx,at as buildStellarRenewAccountTx,X as buildStellarRepayBatchTx,Y as buildStellarRepayDebtWithCollateralTx,F as buildStellarRepayTx,qe as buildStellarRevokeRoleTx,Ye as buildStellarRevokeTokenTx,We as buildStellarSetAccumulatorTx,ze as buildStellarSetAggregatorTx,De as buildStellarSetLiquidityPoolTemplateTx,Me as buildStellarSetPositionLimitsTx,V as buildStellarSupplyBatchTx,z as buildStellarSupplyTx,K as buildStellarSwapCollateralTx,J as buildStellarSwapDebtTx,Le as buildStellarTransferOwnershipTx,Ce as buildStellarUnpauseTx,ut as buildStellarUpdateAccountThresholdTx,rt as buildStellarUpdateIndexesTx,Ze as buildStellarUpdatePoolCapsTx,Oe as buildStellarUpgradeControllerTx,st as buildStellarUpgradeLiquidityPoolParamsTx,it as buildStellarUpgradeLiquidityPoolTx,G as buildStellarWithdrawBatchTx,M as buildStellarWithdrawTx,L as buildTx,xo as decodeStellarLendingEvent,xe as encodeAssetConfigRaw,Re as encodeInterestRateModel,Ae as encodeMarketOracleConfigInput,Te as encodeMarketParamsRaw,Be as encodeOracleSourceConfigInput,Ee as encodePositionLimits,Lo as encodeStrategyPayloadToRouteXdr,Bo as extractEventOrder,he as getStellarAccountPositions,Co as getStellarAggregatorQuote,m as getStellarAggregatorRouter,ce as getStellarAsset,we as getStellarAssetGraph,pe as getStellarAssetMarkets,ue as getStellarAssetPage,re as getStellarAssets,h as getStellarGovernance,ye as getStellarGovernanceProposals,de as getStellarHub,be as getStellarHubGraph,ae as getStellarHubs,f as getStellarLendingController,Uo as getStellarQuoteTokens,ie as getStellarReserve,ve as getStellarReserveGraph,le as getStellarReserveHolders,se as getStellarReserves,_e as getStellarSpoke,ge as getStellarSpokeGraph,ne as getStellarSpokes,me as getStellarUserActivity,fe as getStellarUserPositions,Go as mapQuoteResponseToAggregatorSwap,Wo as mapQuoteResponseToStrategyPayload,Do as mapQuoteResponseToStrategySwap,Oo as mapStellarPositionActivityType,Ho as prepareStellarBuiltTx,Fo as prepareStellarTxXdr,no as stellarLendingDispatchKey,Se as stellarLendingRead,Ao as syntheticEventOrder,Xo as tagStellarInvokedContractError,ro as toBase64Xdr,jo as toStellarPositionMode};
1
+ "undefined"!=typeof globalThis&&void 0===globalThis.self&&(globalThis.self=globalThis);import{Account as e,Address as t,BASE_FEE as o,Contract as r,ScInt as a,TransactionBuilder as n,scValToNative as s,xdr as i}from"@stellar/stellar-sdk";const l={mainnet:process.env.STELLAR_LENDING_CONTROLLER_MAINNET??"",testnet:process.env.STELLAR_LENDING_CONTROLLER_TESTNET??""},c={mainnet:process.env.STELLAR_AGGREGATOR_ROUTER_MAINNET??"",testnet:process.env.STELLAR_AGGREGATOR_ROUTER_TESTNET??""},u={mainnet:process.env.STELLAR_GOVERNANCE_MAINNET??"",testnet:process.env.STELLAR_GOVERNANCE_TESTNET??""},p={mainnet:"https://soroban-rpc.stellar.org",testnet:"https://soroban-testnet.stellar.org"},d={mainnet:process.env.STELLAR_QUOTE_URL_MAINNET??"https://stellar-swap.xoxno.com",testnet:process.env.STELLAR_QUOTE_URL_TESTNET??"https://testnet-stellar-swap.xoxno.com"},_={mainnet:"Public Global Stellar Network ; September 2015",testnet:"Test SDF Network ; September 2015"};function f(e){const t=l[e];if(!t)throw new Error(`Stellar lending controller address not configured for network "${e}". Set STELLAR_LENDING_CONTROLLER_${e.toUpperCase()} env var.`);return t}function m(e){const t=c[e];if(!t)throw new Error(`Stellar aggregator router address not configured for network "${e}". Set STELLAR_AGGREGATOR_ROUTER_${e.toUpperCase()} env var.`);return t}function h(e){const t=u[e];if(!t)throw new Error(`Stellar governance address not configured for network "${e}". Set STELLAR_GOVERNANCE_${e.toUpperCase()} env var.`);return t}const y=["Soroswap","Aquarius","Phoenix","Sushi","CometDex"],w=e=>new t(e).toScVal(),b=e=>new a(e).toI128(),g=e=>i.ScVal.scvU32(e),v=e=>new a("string"==typeof e?e:e.toString()).toU64(),S=e=>i.ScVal.scvBool(e),k=e=>i.ScVal.scvString(e),R=e=>i.ScVal.scvSymbol(e),T=()=>i.ScVal.scvVoid(),x=e=>i.ScVal.scvVec(e),E=(e,t=32)=>{const o=e.startsWith("0x")?e.slice(2):e,r=Buffer.from(o,"hex");if(r.length!==t)throw new Error(`Stellar builder: expected a ${t}-byte BytesN (got ${r.length} bytes from "${e}")`);return i.ScVal.scvBytes(r)},I=(e,t)=>null==e?T():t(e),$=(e,t)=>O({asset:w(t),hub_id:g(e)}),B=(e,t,o)=>i.ScVal.scvVec([$(e,t),b(o)]),A=e=>i.ScVal.scvVec(e.map((e=>B(e.hubId,e.asset,e.amount)))),O=e=>{const t=Object.keys(e).sort().map((t=>new i.ScMapEntry({key:R(t),val:e[t]})));return i.ScVal.scvMap(t)},N=e=>{const t=e.paths.map((e=>{const t=e.hops.map((e=>{return O({amount_out:b(e.amountOut),pool:w(e.pool),token_in:w(e.tokenIn),token_out:w(e.tokenOut),venue:(t=e.venue,i.ScVal.scvVec([R(t)]))});var t}));return O({hops:i.ScVal.scvVec(t),split_ppm:g(e.splitPpm)})}));return O({paths:i.ScVal.scvVec(t),referral_id:v(e.referralId??0),token_in:w(e.tokenIn),token_out:w(e.tokenOut),total_min_out:b(e.totalMinOut)})},P=e=>{const t=Buffer.from(e);if(0===t.length)throw new Error("Stellar builder: strategy swap bytes must be non-empty base64 routeXdr, 0x hex string, or Uint8Array");return i.ScVal.scvBytes(t)},C=e=>{const t=e.trim();if(t.startsWith("0x")){const e=t.slice(2);if(!((o=e).length>0&&o.length%2==0&&/^[0-9a-fA-F]+$/.test(o)))throw new Error("Stellar builder: strategy swap bytes hex string must be 0x-prefixed and even-length");return Buffer.from(e,"hex")}var o;if(!/^[A-Za-z0-9+/]+={0,2}$/.test(t))throw new Error("Stellar builder: strategy swap bytes must be base64 routeXdr or 0x-prefixed hex");const r=Buffer.from(t,"base64");if(0===r.length)throw new Error("Stellar builder: strategy swap bytes must be non-empty base64 routeXdr, 0x hex string, or Uint8Array");return r},U=e=>{if("string"==typeof e)return P(C(e));if(e instanceof Uint8Array)return P(e);if(e&&"object"==typeof e)return"routeXdr"in(o=e)&&"string"==typeof o.routeXdr?P(C(e.routeXdr)):(e=>"swapXdr"in e&&"string"==typeof e.swapXdr)(e)?P(C(e.swapXdr)):(e=>"bytes"in e&&("string"==typeof e.bytes||e.bytes instanceof Uint8Array))(e)?"string"==typeof e.bytes?P(C(e.bytes)):P(e.bytes):(t=(e=>{if(!e||"object"!=typeof e)throw new Error("Stellar builder: decoded strategy `steps` must be a StrategyPayload ({ paths, tokenIn, tokenOut, totalMinOut })");const t=e;if(!Array.isArray(t.paths)||0===t.paths.length)throw new Error("Stellar builder: `steps.paths` must be a non-empty array of strategy paths");if("string"!=typeof t.tokenIn)throw new Error("Stellar builder: `steps.tokenIn` must be a contract address");if("string"!=typeof t.tokenOut)throw new Error("Stellar builder: `steps.tokenOut` must be a contract address");if("string"!=typeof t.totalMinOut)throw new Error("Stellar builder: `steps.totalMinOut` must be an i128 decimal string");let o=0;for(const[e,r]of t.paths.entries()){if(!r||"number"!=typeof r.splitPpm||r.splitPpm<=0||!Array.isArray(r.hops)||0===r.hops.length)throw new Error(`Stellar builder: \`steps.paths[${e}]\` must have splitPpm > 0 and a non-empty hops array`);o+=r.splitPpm;for(const[t,o]of r.hops.entries())if(!o||"string"!=typeof o.amountOut||"string"!=typeof o.pool||"string"!=typeof o.tokenIn||"string"!=typeof o.tokenOut||!y.includes(o.venue))throw new Error(`Stellar builder: \`steps.paths[${e}].hops[${t}]\` must have amountOut, pool, tokenIn, tokenOut, and a valid Soroban venue`)}if(1e6!==o)throw new Error(`Stellar builder: \`steps.paths[].splitPpm\` must sum to 1_000_000, got ${o}`);return t})(e),i.ScVal.scvBytes(Buffer.from(N(t).toXDR("base64"),"base64")));var t,o;throw new Error("Stellar builder: `steps` must be opaque strategy bytes (`routeXdr`, base64/hex string, or Uint8Array)")},q=e=>{if("string"==typeof e)return(e=>{const t=e.startsWith("0x")?e.slice(2):e,o=Buffer.from(t,"hex");return i.ScVal.scvBytes(o)})(e);if(e instanceof Uint8Array)return i.ScVal.scvBytes(Buffer.from(e));throw new Error("Stellar builder: `data` must be a hex string or Uint8Array (Soroban Bytes payload)")};function L(t,a,s){const i=t.controllerAddress??f(t.network),l=new r(i),c=new e(t.caller,t.sourceSequence);return{xdr:new n(c,{fee:t.fee??o,networkPassphrase:_[t.network]}).addOperation(l.call(a,...s)).setTimeout(t.timeoutSeconds??300).build().toXDR()}}function V(e,t){const o=t.accountNonce??0,r=t.spokeId??0;return L(e,"supply",[w(e.caller),v(o),g(r),A([...t.assets])])}function z(e,t){return V(e,{accountNonce:t.accountNonce,spokeId:t.spokeId,assets:[{hubId:t.hubId,asset:t.asset,amount:t.amount}]})}function W(e,t){return L(e,"borrow",[w(e.caller),v(t.accountNonce),A([...t.borrows]),I(t.to,w)])}function D(e,t){return W(e,{accountNonce:t.accountNonce,borrows:[{hubId:t.hubId,asset:t.asset,amount:t.amount}],to:t.to})}function G(e,t){return L(e,"withdraw",[w(e.caller),v(t.accountNonce),A([...t.withdrawals]),I(t.to,w)])}function M(e,t){return G(e,{accountNonce:t.accountNonce,withdrawals:[{hubId:t.hubId,asset:t.asset,amount:t.amount}],to:t.to})}function X(e,t){return L(e,"repay",[w(e.caller),v(t.accountNonce),A([...t.payments])])}function F(e,t){return X(e,{accountNonce:t.accountNonce,payments:[{hubId:t.hubId,asset:t.asset,amount:t.amount}]})}function H(e,t){return L(e,"liquidate",[w(e.caller),v(t.accountNonce),A([...t.debtPayments])])}function j(e,t){return L(e,"flash_loan",[w(e.caller),$(t.hubId,t.asset),b(t.amount),w(t.receiver),q(t.data)])}function Q(e,t){return L(e,"migrate_from_blend",[w(e.caller),v(t.accountId),g(t.spokeId),g(t.hubId),w(t.blendPool),x(t.collateralTokens.map(w)),x(t.supplyTokens.map(w)),(o=t.debtCaps.map((e=>({token:e.token,amount:e.cap}))),i.ScVal.scvVec(o.map((e=>{return t=e.token,o=e.amount,i.ScVal.scvVec([w(t),b(o)]);var t,o}))))]);var o}function Z(e,t){const o=t.accountNonce??0,r=t.spokeId??0;return L(e,"multiply",[w(e.caller),v(o),g(r),$(t.collateral.hubId,t.collateral.asset),b(t.debtToFlashLoan),$(t.debt.hubId,t.debt.asset),g(t.mode),U(t.steps),I(t.initialPayment,(e=>B(e.hubId,e.asset,e.amount))),I(t.convertSwap,U)])}function J(e,t){return L(e,"swap_debt",[w(e.caller),v(t.accountNonce),$(t.existingDebt.hubId,t.existingDebt.asset),b(t.newDebtAmount),$(t.newDebt.hubId,t.newDebt.asset),U(t.steps)])}function K(e,t){return L(e,"swap_collateral",[w(e.caller),v(t.accountNonce),$(t.current.hubId,t.current.asset),b(t.fromAmount),$(t.newCollateral.hubId,t.newCollateral.asset),U(t.steps)])}function Y(e,t){return L(e,"repay_debt_with_collateral",[w(e.caller),v(t.accountNonce),$(t.collateral.hubId,t.collateral.asset),b(t.collateralAmount),$(t.debt.hubId,t.debt.asset),U(t.steps),S(t.closePosition)])}const ee="/stellar-lending",te=25,oe=encodeURIComponent,re=(e,t)=>e.fetchWithTimeout(`${ee}/assets`,t),ae=(e,t)=>e.fetchWithTimeout(`${ee}/hubs`,t),ne=(e,t)=>e.fetchWithTimeout(`${ee}/spokes`,t),se=(e,t={},o)=>{const{hubId:r,spokeId:a,asset:n}=t;return e.fetchWithTimeout(`${ee}/reserves`,{...o,params:{...void 0!==r?{hubId:r}:{},...void 0!==a?{spokeId:a}:{},...n?{asset:n}:{}}})},ie=(e,t,o,r,a)=>e.fetchWithTimeout(`${ee}/reserves/${t}/${o}/${oe(r)}`,a),le=(e,t,o,r,a,n)=>e.fetchWithTimeout(`${ee}/reserves/${t}/${o}/${oe(r)}/holders`,{...n,params:{side:a}}),ce=(e,t,o)=>e.fetchWithTimeout(`${ee}/assets/${oe(t)}`,o),ue=(e,t,o,r)=>e.fetchWithTimeout(`${ee}/assets/${oe(t)}/page`,{...r,params:{...o}}),pe=(e,t,o,r)=>e.fetchWithTimeout(`${ee}/assets/${oe(t)}/markets`,{...r,params:{side:o}}),de=(e,t,o)=>e.fetchWithTimeout(`${ee}/hubs/${t}`,o),_e=(e,t,o)=>e.fetchWithTimeout(`${ee}/spokes/${t}`,o),fe=(e,t,o)=>e.fetchWithTimeout(`${ee}/users/${oe(t)}/positions`,o),me=(e,t,o={},r)=>{const{skip:a,top:n}=o;return e.fetchWithTimeout(`${ee}/users/${oe(t)}/activity`,{...r,params:{...void 0!==a?{skip:a}:{},...void 0!==n?{top:n}:{}}})},he=(e,t,o)=>e.fetchWithTimeout(`${ee}/accounts/${oe(t)}/positions`,o),ye=(e,t={},o)=>{const{top:r=te,continuationToken:a}=t;return e.fetchWithTimeout(`${ee}/governance/proposals`,{...o,params:{top:r,...a?{continuationToken:a}:{}}})},we=(e,t,o,r)=>e.fetchWithTimeout(`${ee}/assets/${oe(t)}/graph`,{...r,params:{...o}}),be=(e,t,o,r)=>e.fetchWithTimeout(`${ee}/hubs/${t}/graph`,{...r,params:{...o}}),ge=(e,t,o,r)=>e.fetchWithTimeout(`${ee}/spokes/${t}/graph`,{...r,params:{...o}}),ve=(e,t,o,r,a,n)=>e.fetchWithTimeout(`${ee}/reserves/${t}/${o}/${oe(r)}/graph`,{...n,params:{...a}}),Se=e=>({assets:t=>re(e,t),hubs:t=>ae(e,t),spokes:t=>ne(e,t),reserves:(t,o)=>se(e,t,o),reserve:(t,o,r,a)=>ie(e,t,o,r,a),reserveHolders:(t,o,r,a,n)=>le(e,t,o,r,a,n),asset:(t,o)=>ce(e,t,o),assetMarkets:(t,o,r)=>pe(e,t,o,r),hub:(t,o)=>de(e,t,o),spoke:(t,o)=>_e(e,t,o),userPositions:(t,o)=>fe(e,t,o),userActivity:(t,o,r)=>me(e,t,o,r),accountPositions:(t,o)=>he(e,t,o),governanceProposals:(t,o)=>ye(e,t,o),assetGraph:(t,o,r)=>we(e,t,o,r),hubGraph:(t,o,r)=>be(e,t,o,r),spokeGraph:(t,o,r)=>ge(e,t,o,r),reserveGraph:(t,o,r,a,n)=>ve(e,t,o,r,a,n)}),ke={Single:0,PrimaryWithAnchor:1},Re=e=>O({base_borrow_rate_ray:b(e.baseBorrowRateRay),max_borrow_rate_ray:b(e.maxBorrowRateRay),max_utilization_ray:b(e.maxUtilizationRay),mid_utilization_ray:b(e.midUtilizationRay),optimal_utilization_ray:b(e.optimalUtilizationRay),reserve_factor_bps:g(e.reserveFactorBps),slope1_ray:b(e.slope1Ray),slope2_ray:b(e.slope2Ray),slope3_ray:b(e.slope3Ray)}),Te=e=>O({asset_decimals:g(e.assetDecimals),asset_id:w(e.assetId),base_borrow_rate_ray:b(e.baseBorrowRateRay),borrow_cap:b(e.borrowCap),max_borrow_rate_ray:b(e.maxBorrowRateRay),max_utilization_ray:b(e.maxUtilizationRay),mid_utilization_ray:b(e.midUtilizationRay),optimal_utilization_ray:b(e.optimalUtilizationRay),reserve_factor_bps:g(e.reserveFactorBps),slope1_ray:b(e.slope1Ray),slope2_ray:b(e.slope2Ray),slope3_ray:b(e.slope3Ray),supply_cap:b(e.supplyCap)}),xe=e=>O({asset_decimals:g(0),e_mode_categories:x(e.eModeCategories.map((e=>g(e)))),flashloan_fee_bps:g(e.flashloanFeeBps),is_borrowable:S(e.isBorrowable),is_collateralizable:S(e.isCollateralizable),is_flashloanable:S(e.isFlashloanable),liquidation_bonus_bps:g(e.liquidationBonusBps),liquidation_fees_bps:g(e.liquidationFeesBps),liquidation_threshold_bps:g(e.liquidationThresholdBps),loan_to_value_bps:g(e.loanToValueBps)}),Ee=e=>O({max_borrow_positions:g(e.maxBorrowPositions),max_supply_positions:g(e.maxSupplyPositions)}),Ie=e=>{const t=e.kind;switch(t){case"Stellar":return x([R("Stellar"),w(e.value)]);case"Symbol":return x([R("Symbol"),R(e.value)]);case"String":return x([R("String"),k(e.value)]);default:throw new Error(`Stellar builder: unknown oracle asset ref kind "${t}"`)}},$e=(e,t)=>{if("Twap"===e){if("number"!=typeof t)throw new Error("Stellar builder: oracle source with Twap read mode requires `twapRecords`");return x([R("Twap"),g(t)])}return x([R("Spot")])},Be=e=>{const t=e.provider;if("ReflectorSep40"===t){if(!e.asset)throw new Error("Stellar builder: Reflector oracle source requires `asset`");return x([R("Reflector"),O({asset:Ie(e.asset),contract:w(e.contract),read_mode:$e(e.readMode,e.twapRecords)})])}if("RedStonePriceFeed"===t){if("string"!=typeof e.feedId)throw new Error("Stellar builder: RedStone oracle source requires `feedId`");if("number"!=typeof e.maxStaleSeconds)throw new Error("Stellar builder: RedStone oracle source requires `maxStaleSeconds`");return x([R("RedStone"),O({contract:w(e.contract),feed_id:k(e.feedId),max_stale_seconds:v(e.maxStaleSeconds)})])}throw new Error(`Stellar builder: unknown oracle provider "${t}"`)},Ae=e=>{const t=ke[e.strategy];if(void 0===t)throw new Error(`Stellar builder: unknown oracle strategy "${e.strategy}"`);return O({anchor:(o=e.anchor,x(null==o?[R("None")]:[R("Some"),Be(o)])),max_price_stale_seconds:v(e.maxPriceStaleSeconds),max_sanity_price_wad:b(e.maxSanityPriceWad),min_sanity_price_wad:b(e.minSanityPriceWad),primary:Be(e.primary),strategy:g(t),tolerance_bps:g(e.toleranceBps)});var o};function Oe(e,t){return L(e,"upgrade",[E(t.wasmHash)])}function Ne(e,t){return L(e,"migrate",[g(t.newVersion)])}function Pe(e){return L(e,"pause",[])}function Ce(e){return L(e,"unpause",[])}function Ue(e,t){return L(e,"grant_role",[w(t.account),R(t.role)])}function qe(e,t){return L(e,"revoke_role",[w(t.account),R(t.role)])}function Le(e,t){return L(e,"transfer_ownership",[w(t.newOwner),g(t.liveUntilLedger)])}function Ve(e){return L(e,"accept_ownership",[])}function ze(e,t){return L(e,"set_aggregator",[w(t.aggregator)])}function We(e,t){return L(e,"set_accumulator",[w(t.accumulator)])}function De(e,t){return L(e,"set_liquidity_pool_template",[E(t.wasmHash)])}function Ge(e,t){return L(e,"edit_asset_config",[w(t.asset),xe(t.config)])}function Me(e,t){return L(e,"set_position_limits",[Ee(t)])}function Xe(e){return L(e,"add_e_mode_category",[])}function Fe(e,t){return L(e,"remove_e_mode_category",[g(t.id)])}const He=e=>O({asset:w(e.asset),category_id:g(e.categoryId),can_collateral:S(e.canCollateral),can_borrow:S(e.canBorrow),ltv:g(e.ltv),threshold:g(e.threshold),bonus:g(e.bonus),supply_cap:b(e.supplyCap),borrow_cap:b(e.borrowCap)});function je(e,t){return L(e,"add_asset_to_e_mode_category",[He(t)])}function Qe(e,t){return L(e,"edit_asset_in_e_mode_category",[He(t)])}function Ze(e,t){return L(e,"update_pool_caps",[w(t.asset),b(t.supplyCap),b(t.borrowCap)])}function Je(e,t){return L(e,"remove_asset_from_e_mode",[w(t.asset),g(t.categoryId)])}function Ke(e,t){return L(e,"approve_token",[w(t.token)])}function Ye(e,t){return L(e,"revoke_token",[w(t.token)])}function et(e,t){return L(e,"configure_market_oracle",[w(e.caller),w(t.asset),Ae(t.config)])}function tt(e,t){return L(e,"edit_oracle_tolerance",[w(e.caller),w(t.asset),g(t.tolerance)])}function ot(e,t){return L(e,"disable_token_oracle",[w(e.caller),w(t.asset)])}function rt(e,t){return L(e,"update_indexes",[w(e.caller),x(t.assets.map((e=>w(e))))])}function at(e,t){return L(e,"renew_account",[w(e.caller),v(t.accountNonce)])}function nt(e,t){return L(e,"create_liquidity_pool",[w(t.asset),Te(t.params),xe(t.config)])}function st(e,t){return L(e,"upgrade_liquidity_pool_params",[w(t.asset),Re(t.params)])}function it(e,t){return L(e,"upgrade_liquidity_pool",[w(t.asset),E(t.wasmHash)])}function lt(e,t){return L(e,"claim_revenue",[w(e.caller),x(t.assets.map((e=>w(e))))])}function ct(e,t){return L(e,"add_rewards",[w(e.caller),x(t.rewards.map((e=>x([w(e.token),b(e.amount)]))))])}function ut(e,t){return L(e,"update_account_threshold",[w(e.caller),w(t.asset),S(t.hasRisks),x(t.accountNonces.map((e=>v(e))))])}const pt="00".repeat(32),dt=e=>{if("string"==typeof e)return E(e);const t=Buffer.from(e);if(32!==t.length)throw new Error(`Stellar governance builder: expected a 32-byte salt (got ${t.length} bytes)`);return i.ScVal.scvBytes(t)},_t=(e,...t)=>x([R(e),...t]),ft=e=>O({asset:w(e.asset),category_id:g(e.categoryId),can_collateral:S(e.canCollateral),can_borrow:S(e.canBorrow),ltv:g(e.ltv),threshold:g(e.threshold),bonus:g(e.bonus),supply_cap:b(e.supplyCap),borrow_cap:b(e.borrowCap)}),mt=e=>O({new_owner:w(e.newOwner),live_until_ledger:g(e.liveUntilLedger)}),ht=e=>O({account:w(e.account),role:R(e.role)});function yt(t,a,s){const i=t.governanceAddress??h(t.network),l=new r(i),c=new e(t.caller,t.sourceSequence);return{xdr:new n(c,{fee:t.fee??o,networkPassphrase:_[t.network]}).addOperation(l.call(a,...s)).setTimeout(t.timeoutSeconds??300).build().toXDR()}}const wt=(e,t,o)=>yt(e,"propose",[w(e.caller),t,dt(o)]),bt=(e,t,o)=>yt(e,"execute_self",[T(),t,dt(o)]);function gt(e,t,o){return wt(e,_t("SetAggregator",w(t.aggregator)),o)}function vt(e,t,o){return wt(e,_t("SetAccumulator",w(t.accumulator)),o)}function St(e,t,o){return wt(e,_t("SetLiquidityPoolTemplate",E(t.wasmHash)),o)}function kt(e,t,o){return wt(e,_t("EditAssetConfig",w(t.asset),xe(t.config)),o)}function Rt(e,t,o){return wt(e,_t("SetPositionLimits",Ee(t)),o)}function Tt(e,t,o){return wt(e,_t("SetMinBorrowCollateralUsd",b(t.floorWad)),o)}function xt(e,t){return wt(e,_t("AddEModeCategory"),t)}function Et(e,t,o){return wt(e,_t("RemoveEModeCategory",g(t.id)),o)}function It(e,t,o){return wt(e,_t("AddAssetToEModeCategory",ft(t)),o)}function $t(e,t,o){return wt(e,_t("EditAssetInEModeCategory",ft(t)),o)}function Bt(e,t,o){return wt(e,_t("UpdatePoolCaps",O({asset:w((r=t).asset),supply_cap:b(r.supplyCap),borrow_cap:b(r.borrowCap)})),o);var r}function At(e,t,o){return wt(e,_t("RemoveAssetFromEMode",O({asset:w((r=t).asset),category_id:g(r.categoryId)})),o);var r}function Ot(e,t,o){return wt(e,_t("ApproveToken",w(t.token)),o)}function Nt(e,t,o){return wt(e,_t("RevokeToken",w(t.token)),o)}function Pt(e,t,o){return wt(e,_t("ApproveBlendPool",w(t.pool)),o)}function Ct(e,t,o){return wt(e,_t("RevokeBlendPool",w(t.pool)),o)}function Ut(e,t,o){return wt(e,_t("CreateLiquidityPool",O({asset:w((r=t).asset),params:Te(r.params),config:xe(r.config)})),o);var r}function qt(e,t,o){return wt(e,_t("UpgradeLiquidityPoolParams",O({asset:w((r=t).asset),params:Re(r.params)})),o);var r}function Lt(e,t){return wt(e,_t("DeployPool"),t)}function Vt(e,t,o){return wt(e,_t("UpgradePool",E(t.wasmHash)),o)}function zt(e,t,o){return wt(e,_t("DisableTokenOracle",w(t.asset)),o)}function Wt(e,t,o){return wt(e,_t("UpgradeController",E(t.wasmHash)),o)}function Dt(e,t,o){return wt(e,_t("MigrateController",g(t.newVersion)),o)}function Gt(e,t,o){return wt(e,_t("TransferCtrlOwnership",mt(t)),o)}function Mt(e,t,o){return wt(e,_t("ConfigureMarketOracle",O({asset:w((r=t).asset),cfg:Ae(r.config)})),o);var r}function Xt(e,t,o){return wt(e,_t("EditOracleTolerance",O({asset:w((r=t).asset),tolerance:g(r.tolerance)})),o);var r}function Ft(e,t,o){return wt(e,_t("UpgradeGov",E(t.wasmHash)),o)}function Ht(e,t,o){return wt(e,_t("UpdateGovDelay",g(t.newDelay)),o)}function jt(e,t,o){return wt(e,_t("GrantGovRole",ht(t)),o)}function Qt(e,t,o){return wt(e,_t("RevokeGovRole",ht(t)),o)}function Zt(e,t,o){return wt(e,_t("TransferGovOwnership",mt(t)),o)}function Jt(e,t){const o=x(t.argsXdr.map((e=>i.ScVal.fromXDR(e,"base64")))),r=dt(t.predecessor??pt);return yt(e,"execute",[T(),w(t.target),R(t.functionName),o,r,dt(t.salt)])}function Kt(e,t,o){return bt(e,_t("UpgradeGov",E(t.wasmHash)),o)}function Yt(e,t,o){return bt(e,_t("UpdateGovDelay",g(t.newDelay)),o)}function eo(e,t,o){return bt(e,_t("GrantGovRole",ht(t)),o)}function to(e,t,o){return bt(e,_t("RevokeGovRole",ht(t)),o)}function oo(e,t,o){return bt(e,_t("TransferGovOwnership",mt(t)),o)}const ro=e=>e.toXDR("base64"),ao=e=>i.ScVal.fromXDR(e,"base64"),no=e=>e.map((e=>String(s(ao(e))))).join(":"),so=e=>"bigint"==typeof e||"number"==typeof e?e.toString():String(e),io=e=>Number(e),lo=e=>String(e),co=e=>null==e?void 0:so(e),uo=e=>null==e?void 0:lo(e),po=e=>e instanceof Uint8Array?Buffer.from(e).toString("hex"):Buffer.isBuffer(e)?e.toString("hex"):String(e),_o=["None","Multiply","Long","Short"],fo=["Single","PrimaryWithAnchor"],mo=["ReflectorSep40","RedStonePriceFeed"],ho=["Spot","Twap"],yo=["supply","borrow","withdraw","repay","liq_repay","liq_seize","multiply","param_upd","sw_debt_r","sw_col_wd","rp_col_wd","rp_col_r","close_wd"],wo=e=>Array.isArray(e)?e:[],bo=e=>({loanToValueBps:io(e.loan_to_value_bps),liquidationThresholdBps:io(e.liquidation_threshold_bps),liquidationBonusBps:io(e.liquidation_bonus_bps),liquidationFeesBps:io(e.liquidation_fees_bps),isCollateralizable:Boolean(e.is_collateralizable),isBorrowable:Boolean(e.is_borrowable),isFlashloanable:Boolean(e.is_flashloanable),flashloanFeeBps:io(e.flashloan_fee_bps),eModeCategories:(e.e_mode_categories??[]).map(io)}),go=(e,t)=>{const o="Borrow"===t;return{action:(r=e[0],yo[io(r)]??so(r)),positionType:t,asset:lo(e[1]),scaledAmountRay:so(e[2]),indexRay:so(e[3]),amount:so(e[4]),liquidationThresholdBps:o?void 0:io(e[5]),liquidationBonusBps:o?void 0:io(e[6]),loanToValueBps:o?void 0:io(e[7])};var r},vo=e=>{return{owner:lo(e[0]),eModeCategoryId:io(e[1]),mode:(t=e[2],_o[io(t)]??"None")};var t},So=(e,t)=>{const o=ho[io(e[`${t}_read_mode`])]??"Spot",r=e[`${t}_asset`],a=e[`${t}_symbol`],n=null!=r?{kind:"Stellar",value:lo(r)}:null!=a?{kind:"Symbol",value:lo(a)}:void 0;return{provider:mo[io(e[`${t}_provider`])]??"ReflectorSep40",contractAddress:lo(e[`${t}_contract`]),asset:n,feedId:uo(e[`${t}_feed_id`]),readMode:o,twapRecords:"Twap"===o?io(e[`${t}_twap_records`]):void 0,decimals:io(e[`${t}_decimals`]),resolutionSeconds:io(e[`${t}_resolution_seconds`]),maxStaleSeconds:io(e[`${t}_max_stale_seconds`])}},ko=e=>{const t=null!==e.anchor_provider&&void 0!==e.anchor_provider;return{baseTokenId:lo(e.base_token_id),quoteTokenId:lo(e.quote_token_id),tolerance:{upperRatio:io(e.upper_ratio_bps??e.tolerance?.upper_ratio_bps),lowerRatio:io(e.lower_ratio_bps??e.tolerance?.lower_ratio_bps)},assetDecimals:io(e.asset_decimals),maxPriceStaleSeconds:io(e.max_price_stale_seconds),strategy:fo[io(e.strategy)]??"Single",primary:So(e,"primary"),anchor:t?So(e,"anchor"):void 0,primaryQuoteToken:uo(e.primary_quote_token),anchorQuoteToken:uo(e.anchor_quote_token),minSanityPriceWad:co(e.min_sanity_price_wad),maxSanityPriceWad:co(e.max_sanity_price_wad)}},Ro={"market:create":e=>({topic:"market:create",data:{baseAsset:lo(e.base_asset),maxBorrowRate:so(e.max_borrow_rate),baseBorrowRate:so(e.base_borrow_rate),slope1:so(e.slope1),slope2:so(e.slope2),slope3:so(e.slope3),midUtilization:so(e.mid_utilization),optimalUtilization:so(e.optimal_utilization),maxUtilization:co(e.max_utilization),reserveFactor:io(e.reserve_factor),marketAddress:lo(e.market_address),config:bo(e.config)}}),"market:params_update":e=>({topic:"market:params_update",data:{asset:lo(e.asset),maxBorrowRateRay:so(e.max_borrow_rate_ray),baseBorrowRateRay:so(e.base_borrow_rate_ray),slope1Ray:so(e.slope1_ray),slope2Ray:so(e.slope2_ray),slope3Ray:so(e.slope3_ray),midUtilizationRay:so(e.mid_utilization_ray),optimalUtilizationRay:so(e.optimal_utilization_ray),maxUtilizationRay:co(e.max_utilization_ray),reserveFactorBps:io(e.reserve_factor_bps)}}),"market:batch_state_update":e=>({topic:"market:batch_state_update",data:{updates:wo(e).map((e=>{return t=wo(e),{asset:lo(t[0]),timestamp:io(t[1]),supplyIndexRay:so(t[2]),borrowIndexRay:so(t[3]),reservesRay:so(t[4]),suppliedRay:so(t[5]),borrowedRay:so(t[6]),revenueRay:so(t[7]),assetPriceWad:co(t[8])};var t}))}}),"market:batch_params_update":e=>({topic:"market:batch_params_update",data:{updates:wo(e).map((e=>{const t=e;return{asset:lo(t.asset),params:(o=t.params,{maxBorrowRateRay:so(o.max_borrow_rate_ray),baseBorrowRateRay:so(o.base_borrow_rate_ray),slope1Ray:so(o.slope1_ray),slope2Ray:so(o.slope2_ray),slope3Ray:so(o.slope3_ray),midUtilizationRay:so(o.mid_utilization_ray),optimalUtilizationRay:so(o.optimal_utilization_ray),maxUtilizationRay:co(o.max_utilization_ray),reserveFactorBps:io(o.reserve_factor_bps),supplyCap:so(o.supply_cap),borrowCap:so(o.borrow_cap),assetId:uo(o.asset_id),assetDecimals:void 0===o.asset_decimals?void 0:io(o.asset_decimals)})};var o}))}}),"position:batch_update":e=>{const t=wo(e);return{topic:"position:batch_update",data:{accountId:so(t[0]),accountAttributes:vo(wo(t[1])),updates:[...wo(t[2]).map((e=>go(wo(e),"Deposit"))),...wo(t[3]).map((e=>go(wo(e),"Borrow")))]}}},"position:flash_loan":e=>({topic:"position:flash_loan",data:{asset:lo(e.asset),receiver:lo(e.receiver),caller:lo(e.caller),amount:so(e.amount),fee:so(e.fee)}}),"config:asset":e=>({topic:"config:asset",data:{asset:lo(e.asset),config:bo(e.config)}}),"config:oracle":e=>({topic:"config:oracle",data:{asset:lo(e.asset),oracle:ko(e.oracle)}}),"config:emode_category":e=>({topic:"config:emode_category",data:{category:{categoryId:io(e.category.category_id),isDeprecated:Boolean(e.category.is_deprecated)}}}),"config:emode_asset":e=>({topic:"config:emode_asset",data:{asset:lo(e.asset),config:{isCollateralizable:Boolean(e.config.is_collateralizable),isBorrowable:Boolean(e.config.is_borrowable),loanToValueBps:io(e.config.loan_to_value_bps),liquidationThresholdBps:io(e.config.liquidation_threshold_bps),liquidationBonusBps:io(e.config.liquidation_bonus_bps),supplyCap:so(e.config.supply_cap),borrowCap:so(e.config.borrow_cap)},categoryId:io(e.category_id)}}),"config:remove_emode_asset":e=>({topic:"config:remove_emode_asset",data:{asset:lo(e.asset),categoryId:io(e.category_id)}}),"debt:bad_debt":e=>({topic:"debt:bad_debt",data:{accountId:so(e.account_id),totalBorrowUsdWad:so(e.total_borrow_usd_wad),totalCollateralUsdWad:so(e.total_collateral_usd_wad)}}),"strategy:initial_payment":e=>({topic:"strategy:initial_payment",data:{token:lo(e.token),amount:so(e.amount),usdValueWad:so(e.usd_value_wad),accountId:so(e.account_id)}}),"strategy:fee":e=>({topic:"strategy:fee",data:{asset:lo(e.asset),amount:so(e.amount),fee:so(e.fee),amountSent:so(e.amount_sent)}}),"config:approve_token":e=>({topic:"config:approve_token",data:{wasmHash:po(e.wasm_hash),approved:Boolean(e.approved)}}),"config:aggregator":e=>({topic:"config:aggregator",data:{aggregator:lo(e.aggregator)}}),"config:accumulator":e=>({topic:"config:accumulator",data:{accumulator:lo(e.accumulator)}}),"config:pool_template":e=>({topic:"config:pool_template",data:{wasmHash:po(e.wasm_hash)}}),"config:position_limits":e=>({topic:"config:position_limits",data:{maxSupplyPositions:io(e.max_supply_positions),maxBorrowPositions:io(e.max_borrow_positions)}}),"config:oracle_disabled":e=>({topic:"config:oracle_disabled",data:{asset:lo(e.asset)}})},To=Object.freeze(Object.keys(Ro));function xo(e,t){const o=no(e),r=Ro[o];return r?r(s(ao(t))):null}const Eo="XLENDXLM-a7c9f3",Io=1e4;function $o(e){const t=BigInt(e).toString(16),o=t.length%2==0?t:`0${t}`;return`${Eo}-${o}`}function Bo(e){const t=e.split("-");return t.length>=2&&parseInt(t[1],10)||0}function Ao(e,t=0){return 1e4*e+t}function Oo(e){switch(e){case"liq_repay":return"lendingLiquidateRepayDebt";case"liq_seize":return"lendingLiquidateSeizeCollateral";case"param_upd":return"lendingUpdateAccountParameters";default:return"lendingUpdateAccountPosition"}}const No=(e,t,o)=>{const r=new URL(t,e.endsWith("/")?e:`${e}/`);if(o)for(const[e,t]of Object.entries(o))void 0!==t&&r.searchParams.set(e,String(t));return r.toString()},Po=e=>e.baseUrl??d[e.network];async function Co(e,t){if(null==e.amountIn==(null==e.amountOut))throw new Error("getStellarAggregatorQuote: exactly one of `amountIn` or `amountOut` must be provided");const o=No(Po(t),"api/v1/quote",{from:e.from,to:e.to,amountIn:e.amountIn,amountOut:e.amountOut,maxHops:e.maxHops,maxSplits:e.maxSplits,slippage:e.slippage,includePaths:e.includePaths,sender:e.sender,router:e.router,platform:e.platform,fresh:e.fresh}),r=await fetch(o,t.fetchOptions);if(!r.ok){const e=await r.text().catch((()=>""));throw new Error(`Stellar quote server responded ${r.status} ${r.statusText} for ${o} — ${e}`)}return await r.json()}async function Uo(e){const t=No(Po(e),"api/v1/tokens"),o=await fetch(t,e.fetchOptions);if(!o.ok){const e=await o.text().catch((()=>""));throw new Error(`Stellar quote server responded ${o.status} ${o.statusText} for ${t} — ${e}`)}return await o.json()}const qo=(e,t)=>(e=>Boolean(e&&"object"==typeof e&&!(e instanceof Uint8Array)&&"paths"in e))(e)&&void 0===e.referralId?{...e,referralId:t??0}:e,Lo=e=>N(e).toXDR("base64");function Vo(t,a){const s=t.routerAddress??m(t.network),i=new r(s),l=new e(t.caller,t.sourceSequence),c=U(qo(a,t.referralId));return{xdr:new n(l,{fee:t.fee??o,networkPassphrase:_[t.network]}).addOperation(i.call("execute_strategy",w(t.caller),b(t.totalIn),c)).setTimeout(t.timeoutSeconds??300).build().toXDR()}}function zo(e,t){return Vo(e,t)}function Wo(e,t={}){if("string"!=typeof e.amountOutMin)throw new Error("mapQuoteResponseToStrategyPayload: quote response is missing `amountOutMin`. Pass `slippage` when fetching the quote.");return{paths:e.paths?e.paths.map((e=>({hops:e.swaps.map(Mo),splitPpm:e.splitPpm}))):[{hops:e.hops.map(Mo),splitPpm:1e6}],referralId:t.referralId??0,tokenIn:e.from,tokenOut:e.to,totalMinOut:e.amountOutMin}}function Do(e,t={}){const o=e;return"string"==typeof o.routeXdr&&o.routeXdr.length>0?{routeXdr:o.routeXdr}:Wo(e,t)}const Go=Wo,Mo=e=>({amountOut:e.amountOut,pool:e.address,tokenIn:e.from,tokenOut:e.to,venue:e.dex});function Xo(e,t){const o=t instanceof Error?t.message:String(t);return new Error(`[xoxno-invoked:${e}] ${o}`)}async function Fo(e,t,o){const r=n.fromXDR(t,"base64");try{return(await e.prepareTransaction(r)).toXDR()}catch(e){if(o?.invokedContractId)throw Xo(o.invokedContractId,e);throw e}}async function Ho(e,t,o){return Fo(e,t.xdr,o)}function jo(e){if(e<=0||e>4)throw new Error(`Invalid PositionMode ${e} for Stellar — expected 1 (Normal) through 4 (Short). "None" (0) has no Stellar equivalent.`);return e-1}function Qo(e,t){return{paths:[{hops:[{amountOut:"0",pool:e,tokenIn:e,tokenOut:e,venue:"Soroswap"}],splitPpm:1e6}],referralId:0,tokenIn:e,tokenOut:e,totalMinOut:t}}const Zo=e=>{const t=e.startsWith("0x")?e.slice(2):e;if(t.length%2!=0)throw new Error("buildStellarCctpForwardTx: hex input must have even length");return Buffer.from(t,"hex")};function Jo(t){const o=new e(t.caller,t.sourceSequence),a=new r(t.forwarderAddress).call("mint_and_forward",i.ScVal.scvBytes(Zo(t.message)),i.ScVal.scvBytes(Zo(t.attestation)));return{xdr:new n(o,{fee:t.fee??"10000000",networkPassphrase:_[t.network]}).addOperation(a).setTimeout(t.timeoutSeconds??120).build().toXDR()}}export{c as STELLAR_AGGREGATOR_ROUTER,u as STELLAR_GOVERNANCE,pt as STELLAR_GOVERNANCE_ZERO_PREDECESSOR,l as STELLAR_LENDING_CONTROLLER,To as STELLAR_LENDING_TOPICS,_ as STELLAR_NETWORK_PASSPHRASE,d as STELLAR_QUOTE_URL,p as STELLAR_SOROBAN_RPC_URL,Io as SYNTHETIC_EVENT_ORDER_STRIDE,Eo as XOXNO_LENDING_STELLAR_TICKER,Qo as buildSameTokenRepaySwapSteps,Ve as buildStellarAcceptOwnershipTx,je as buildStellarAddAssetToEModeCategoryTx,Xe as buildStellarAddEModeCategoryTx,ct as buildStellarAddRewardsTx,Ke as buildStellarApproveTokenTx,zo as buildStellarBatchSwapTx,W as buildStellarBorrowBatchTx,D as buildStellarBorrowTx,Jo as buildStellarCctpForwardTx,lt as buildStellarClaimRevenueTx,et as buildStellarConfigureMarketOracleTx,nt as buildStellarCreateLiquidityPoolTx,ot as buildStellarDisableTokenOracleTx,Ge as buildStellarEditAssetConfigTx,Qe as buildStellarEditAssetInEModeCategoryTx,tt as buildStellarEditOracleToleranceTx,Vo as buildStellarExecuteStrategyTx,j as buildStellarFlashLoanTx,Kt as buildStellarGovernanceExecuteGovernanceUpgradeTx,eo as buildStellarGovernanceExecuteGrantGovernanceRoleTx,to as buildStellarGovernanceExecuteRevokeGovernanceRoleTx,oo as buildStellarGovernanceExecuteTransferGovOwnTx,Jt as buildStellarGovernanceExecuteTx,Yt as buildStellarGovernanceExecuteUpdateDelayTx,Ue as buildStellarGrantRoleTx,$o as buildStellarLendingIdentifier,H as buildStellarLiquidateTx,Q as buildStellarMigrateFromBlendTx,Ne as buildStellarMigrateTx,Z as buildStellarMultiplyTx,Pe as buildStellarPauseTx,It as buildStellarProposeAddAssetToEModeTx,xt as buildStellarProposeAddEModeCategoryTx,Pt as buildStellarProposeApproveBlendPoolTx,Ot as buildStellarProposeApproveTokenTx,Mt as buildStellarProposeConfigureMarketOracleTx,Ut as buildStellarProposeCreateLiquidityPoolTx,Lt as buildStellarProposeDeployPoolTx,zt as buildStellarProposeDisableTokenOracleTx,kt as buildStellarProposeEditAssetConfigTx,$t as buildStellarProposeEditAssetInEModeTx,Xt as buildStellarProposeEditOracleToleranceTx,Ft as buildStellarProposeGovernanceUpgradeTx,jt as buildStellarProposeGrantGovernanceRoleTx,Dt as buildStellarProposeMigrateControllerTx,At as buildStellarProposeRemoveAssetFromEModeTx,Et as buildStellarProposeRemoveEModeCategoryTx,Ct as buildStellarProposeRevokeBlendPoolTx,Qt as buildStellarProposeRevokeGovernanceRoleTx,Nt as buildStellarProposeRevokeTokenTx,vt as buildStellarProposeSetAccumulatorTx,gt as buildStellarProposeSetAggregatorTx,Tt as buildStellarProposeSetMinBorrowCollatTx,St as buildStellarProposeSetPoolTemplateTx,Rt as buildStellarProposeSetPositionLimitsTx,Gt as buildStellarProposeTransferCtrlOwnershipTx,Zt as buildStellarProposeTransferGovOwnTx,Ht as buildStellarProposeUpdateDelayTx,Bt as buildStellarProposeUpdatePoolCapsTx,Wt as buildStellarProposeUpgradeControllerTx,qt as buildStellarProposeUpgradePoolParamsTx,Vt as buildStellarProposeUpgradePoolTx,Je as buildStellarRemoveAssetFromEModeTx,Fe as buildStellarRemoveEModeCategoryTx,at as buildStellarRenewAccountTx,X as buildStellarRepayBatchTx,Y as buildStellarRepayDebtWithCollateralTx,F as buildStellarRepayTx,qe as buildStellarRevokeRoleTx,Ye as buildStellarRevokeTokenTx,We as buildStellarSetAccumulatorTx,ze as buildStellarSetAggregatorTx,De as buildStellarSetLiquidityPoolTemplateTx,Me as buildStellarSetPositionLimitsTx,V as buildStellarSupplyBatchTx,z as buildStellarSupplyTx,K as buildStellarSwapCollateralTx,J as buildStellarSwapDebtTx,Le as buildStellarTransferOwnershipTx,Ce as buildStellarUnpauseTx,ut as buildStellarUpdateAccountThresholdTx,rt as buildStellarUpdateIndexesTx,Ze as buildStellarUpdatePoolCapsTx,Oe as buildStellarUpgradeControllerTx,st as buildStellarUpgradeLiquidityPoolParamsTx,it as buildStellarUpgradeLiquidityPoolTx,G as buildStellarWithdrawBatchTx,M as buildStellarWithdrawTx,L as buildTx,xo as decodeStellarLendingEvent,xe as encodeAssetConfigRaw,Re as encodeInterestRateModel,Ae as encodeMarketOracleConfigInput,Te as encodeMarketParamsRaw,Be as encodeOracleSourceConfigInput,Ee as encodePositionLimits,Lo as encodeStrategyPayloadToRouteXdr,Bo as extractEventOrder,he as getStellarAccountPositions,Co as getStellarAggregatorQuote,m as getStellarAggregatorRouter,ce as getStellarAsset,we as getStellarAssetGraph,pe as getStellarAssetMarkets,ue as getStellarAssetPage,re as getStellarAssets,h as getStellarGovernance,ye as getStellarGovernanceProposals,de as getStellarHub,be as getStellarHubGraph,ae as getStellarHubs,f as getStellarLendingController,Uo as getStellarQuoteTokens,ie as getStellarReserve,ve as getStellarReserveGraph,le as getStellarReserveHolders,se as getStellarReserves,_e as getStellarSpoke,ge as getStellarSpokeGraph,ne as getStellarSpokes,me as getStellarUserActivity,fe as getStellarUserPositions,Go as mapQuoteResponseToAggregatorSwap,Wo as mapQuoteResponseToStrategyPayload,Do as mapQuoteResponseToStrategySwap,Oo as mapStellarPositionActivityType,Ho as prepareStellarBuiltTx,Fo as prepareStellarTxXdr,no as stellarLendingDispatchKey,Se as stellarLendingRead,Ao as syntheticEventOrder,Xo as tagStellarInvokedContractError,ro as toBase64Xdr,jo as toStellarPositionMode};
@@ -181,6 +181,7 @@ export interface StellarRepayDebtWithCollateralArgs {
181
181
  export interface StellarMigrateFromBlendArgs {
182
182
  accountId: number | string;
183
183
  spokeId: number;
184
+ hubId: number;
184
185
  blendPool: string;
185
186
  collateralTokens: ReadonlyArray<string>;
186
187
  supplyTokens: ReadonlyArray<string>;