@xoxno/sdk-js 1.0.178 → 1.0.180
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.
- package/dist/cjs/sdk/stellar/admin.d.ts +0 -8
- package/dist/cjs/sdk/stellar/governance.d.ts +45 -3
- package/dist/cjs/sdk/stellar/lending-read-types.d.ts +2 -2
- package/dist/index.cjs +1 -1
- package/dist/index.esm.js +1 -1
- package/dist/sdk/stellar/admin.d.ts +0 -8
- package/dist/sdk/stellar/governance.d.ts +45 -3
- package/dist/sdk/stellar/index.cjs +1 -1
- package/dist/sdk/stellar/index.esm.js +1 -1
- package/dist/sdk/stellar/lending-read-types.d.ts +2 -2
- package/package.json +2 -2
|
@@ -1 +1 @@
|
|
|
1
|
-
"undefined"!=typeof globalThis&&void 0===globalThis.self&&(globalThis.self=globalThis),(()=>{"use strict";var e={d:(t,r)=>{for(var o in r)e.o(r,o)&&!e.o(t,o)&&Object.defineProperty(t,o,{enumerable:!0,get:r[o]})},o:(e,t)=>Object.prototype.hasOwnProperty.call(e,t),r:e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})}},t={};e.r(t),e.d(t,{STELLAR_AGGREGATOR_ROUTER:()=>o,STELLAR_GOVERNANCE:()=>a,STELLAR_GOVERNANCE_ZERO_PREDECESSOR:()=>Je,STELLAR_LENDING_CONTROLLER:()=>r,STELLAR_LENDING_TOPICS:()=>ur,STELLAR_NETWORK_PASSPHRASE:()=>l,STELLAR_QUOTE_URL:()=>s,STELLAR_SOROBAN_RPC_URL:()=>n,SYNTHETIC_EVENT_ORDER_STRIDE:()=>pr,XOXNO_LENDING_STELLAR_TICKER:()=>dr,buildSameTokenRepaySwapSteps:()=>Lr,buildStellarAcceptOwnershipTx:()=>Ne,buildStellarAddRewardsTx:()=>Ze,buildStellarApproveTokenTx:()=>Ve,buildStellarBatchSwapTx:()=>vr,buildStellarBorrowBatchTx:()=>C,buildStellarBorrowTx:()=>G,buildStellarCctpForwardTx:()=>Nr,buildStellarClaimRevenueTx:()=>Ke,buildStellarCreateLiquidityPoolTx:()=>je,buildStellarDisableTokenOracleTx:()=>Xe,buildStellarExecuteStrategyTx:()=>xr,buildStellarFlashLoanTx:()=>z,buildStellarGovernanceExecuteGovernanceUpgradeTx:()=>Gt,buildStellarGovernanceExecuteGrantGovernanceRoleTx:()=>Dt,buildStellarGovernanceExecuteRevokeGovernanceRoleTx:()=>Vt,buildStellarGovernanceExecuteTransferGovOwnTx:()=>Wt,buildStellarGovernanceExecuteTx:()=>Ct,buildStellarGovernanceExecuteUpdateDelayTx:()=>qt,buildStellarGrantRoleTx:()=>Be,buildStellarLendingIdentifier:()=>mr,buildStellarLiquidateTx:()=>M,buildStellarMigrateFromBlendTx:()=>X,buildStellarMigrateTx:()=>Ie,buildStellarMultiplyTx:()=>F,buildStellarPauseTx:()=>Ae,buildStellarProposeApproveBlendPoolTx:()=>gt,buildStellarProposeApproveTokenTx:()=>_t,buildStellarProposeConfigureMarketOracleTx:()=>At,buildStellarProposeCreateLiquidityPoolTx:()=>Tt,buildStellarProposeDeployPoolTx:()=>vt,buildStellarProposeDisableTokenOracleTx:()=>kt,buildStellarProposeEditOracleToleranceTx:()=>Ot,buildStellarProposeGovernanceUpgradeTx:()=>Bt,buildStellarProposeGrantGovernanceRoleTx:()=>$t,buildStellarProposeMigrateControllerTx:()=>Pt,buildStellarProposeRevokeBlendPoolTx:()=>yt,buildStellarProposeRevokeGovernanceRoleTx:()=>Nt,buildStellarProposeRevokeTokenTx:()=>wt,buildStellarProposeSetAccumulatorTx:()=>mt,buildStellarProposeSetAggregatorTx:()=>pt,buildStellarProposeSetMinBorrowCollatTx:()=>St,buildStellarProposeSetPoolTemplateTx:()=>ft,buildStellarProposeSetPositionLimitsTx:()=>bt,buildStellarProposeTransferCtrlOwnershipTx:()=>It,buildStellarProposeTransferGovOwnTx:()=>Ut,buildStellarProposeUpdateDelayTx:()=>Lt,buildStellarProposeUpdatePoolCapsTx:()=>ht,buildStellarProposeUpgradeControllerTx:()=>Et,buildStellarProposeUpgradePoolParamsTx:()=>xt,buildStellarProposeUpgradePoolTx:()=>Rt,buildStellarRenewAccountTx:()=>He,buildStellarRepayBatchTx:()=>V,buildStellarRepayDebtWithCollateralTx:()=>Q,buildStellarRepayTx:()=>W,buildStellarRevokeRoleTx:()=>Le,buildStellarRevokeTokenTx:()=>We,buildStellarSetAccumulatorTx:()=>Ce,buildStellarSetAggregatorTx:()=>Ue,buildStellarSetLiquidityPoolTemplateTx:()=>Ge,buildStellarSetMarketOracleConfigTx:()=>Me,buildStellarSetOracleToleranceTx:()=>ze,buildStellarSetPositionLimitsTx:()=>qe,buildStellarSupplyBatchTx:()=>N,buildStellarSupplyTx:()=>U,buildStellarSwapCollateralTx:()=>j,buildStellarSwapDebtTx:()=>H,buildStellarTransferOwnershipTx:()=>$e,buildStellarUnpauseTx:()=>Oe,buildStellarUpdateAccountThresholdTx:()=>Ye,buildStellarUpdateIndexesTx:()=>Fe,buildStellarUpdatePoolCapsTx:()=>De,buildStellarUpgradeControllerTx:()=>Pe,buildStellarUpgradeLiquidityPoolParamsTx:()=>Qe,buildStellarWithdrawBatchTx:()=>q,buildStellarWithdrawTx:()=>D,buildTx:()=>$,decodeStellarLendingEvent:()=>cr,encodeInterestRateModel:()=>ye,encodeMarketOracleConfigInput:()=>Ee,encodeMarketParamsRaw:()=>Te,encodeOracleSourceConfigInput:()=>ke,encodePositionLimits:()=>xe,encodeStrategyPayloadToRouteXdr:()=>Tr,extractEventOrder:()=>fr,getStellarAccountPositions:()=>me,getStellarAggregatorQuote:()=>wr,getStellarAggregatorRouter:()=>u,getStellarAsset:()=>se,getStellarAssetGraph:()=>be,getStellarAssetMarkets:()=>ie,getStellarAssetPage:()=>le,getStellarAssets:()=>ee,getStellarGovernance:()=>c,getStellarGovernanceProposals:()=>fe,getStellarHub:()=>ue,getStellarHubGraph:()=>Se,getStellarHubs:()=>te,getStellarLendingContext:()=>J,getStellarLendingController:()=>i,getStellarQuoteTokens:()=>gr,getStellarReserve:()=>ae,getStellarReserveGraph:()=>_e,getStellarReserveHolders:()=>ne,getStellarReserves:()=>oe,getStellarSpoke:()=>ce,getStellarSpokeGraph:()=>he,getStellarSpokes:()=>re,getStellarUserActivity:()=>pe,getStellarUserPositions:()=>de,mapQuoteResponseToAggregatorSwap:()=>Er,mapQuoteResponseToStrategyPayload:()=>Rr,mapQuoteResponseToStrategySwap:()=>kr,mapStellarPositionActivityType:()=>Sr,prepareStellarBuiltTx:()=>Or,prepareStellarTxXdr:()=>Ar,stellarLendingDispatchKey:()=>Xt,stellarLendingRead:()=>we,syntheticEventOrder:()=>br,tagStellarInvokedContractError:()=>Ir,toBase64Xdr:()=>Mt,toStellarPositionMode:()=>Br});const r={mainnet:process.env.STELLAR_LENDING_CONTROLLER_MAINNET??"",testnet:process.env.STELLAR_LENDING_CONTROLLER_TESTNET??""},o={mainnet:process.env.STELLAR_AGGREGATOR_ROUTER_MAINNET??"",testnet:process.env.STELLAR_AGGREGATOR_ROUTER_TESTNET??""},a={mainnet:process.env.STELLAR_GOVERNANCE_MAINNET??"",testnet:process.env.STELLAR_GOVERNANCE_TESTNET??""},n={mainnet:"https://soroban-rpc.stellar.org",testnet:"https://soroban-testnet.stellar.org"},s={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"},l={mainnet:"Public Global Stellar Network ; September 2015",testnet:"Test SDF Network ; September 2015"};function i(e){const t=r[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 u(e){const t=o[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 c(e){const t=a[e];if(!t)throw new Error(`Stellar governance address not configured for network "${e}". Set STELLAR_GOVERNANCE_${e.toUpperCase()} env var.`);return t}const d=require("@stellar/stellar-sdk"),p=["Soroswap","Aquarius","Phoenix","Sushi","CometDex"],m=e=>new d.Address(e).toScVal(),f=e=>new d.ScInt(e).toI128(),b=e=>d.xdr.ScVal.scvU32(e),S=e=>new d.ScInt("string"==typeof e?e:e.toString()).toU64(),h=e=>d.xdr.ScVal.scvBool(e),_=e=>d.xdr.ScVal.scvString(e),w=e=>d.xdr.ScVal.scvSymbol(e),g=()=>d.xdr.ScVal.scvVoid(),y=e=>d.xdr.ScVal.scvVec(e),T=(e,t=32)=>{const r=e.startsWith("0x")?e.slice(2):e,o=Buffer.from(r,"hex");if(o.length!==t)throw new Error(`Stellar builder: expected a ${t}-byte BytesN (got ${o.length} bytes from "${e}")`);return d.xdr.ScVal.scvBytes(o)},x=(e,t)=>null==e?g():t(e),v=e=>d.xdr.ScVal.scvVec(e.map((e=>{return t=e.token,r=e.amount,d.xdr.ScVal.scvVec([m(t),f(r)]);var t,r}))),R=(e,t)=>P({asset:m(t),hub_id:b(e)}),k=(e,t,r)=>d.xdr.ScVal.scvVec([R(e,t),f(r)]),E=e=>d.xdr.ScVal.scvVec(e.map((e=>k(e.hubId,e.asset,e.amount)))),P=e=>{const t=Object.keys(e).sort().map((t=>new d.xdr.ScMapEntry({key:w(t),val:e[t]})));return d.xdr.ScVal.scvMap(t)},I=e=>{const t=e.paths.map((e=>{const t=e.hops.map((e=>{return P({amount_out:f(e.amountOut),pool:m(e.pool),token_in:m(e.tokenIn),token_out:m(e.tokenOut),venue:(t=e.venue,d.xdr.ScVal.scvVec([w(t)]))});var t}));return P({hops:d.xdr.ScVal.scvVec(t),split_ppm:b(e.splitPpm)})}));return P({paths:d.xdr.ScVal.scvVec(t),referral_id:S(e.referralId??0),token_in:m(e.tokenIn),token_out:m(e.tokenOut),total_min_out:f(e.totalMinOut)})},A=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 d.xdr.ScVal.scvBytes(t)},O=e=>{const t=e.trim();if(t.startsWith("0x")){const e=t.slice(2);if(!((r=e).length>0&&r.length%2==0&&/^[0-9a-fA-F]+$/.test(r)))throw new Error("Stellar builder: strategy swap bytes hex string must be 0x-prefixed and even-length");return Buffer.from(e,"hex")}var r;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 o=Buffer.from(t,"base64");if(0===o.length)throw new Error("Stellar builder: strategy swap bytes must be non-empty base64 routeXdr, 0x hex string, or Uint8Array");return o},B=e=>{if("string"==typeof e)return A(O(e));if(e instanceof Uint8Array)return A(e);if(e&&"object"==typeof e)return"routeXdr"in(r=e)&&"string"==typeof r.routeXdr?A(O(e.routeXdr)):(e=>"swapXdr"in e&&"string"==typeof e.swapXdr)(e)?A(O(e.swapXdr)):(e=>"bytes"in e&&("string"==typeof e.bytes||e.bytes instanceof Uint8Array))(e)?"string"==typeof e.bytes?A(O(e.bytes)):A(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 r=0;for(const[e,o]of t.paths.entries()){if(!o||"number"!=typeof o.splitPpm||o.splitPpm<=0||!Array.isArray(o.hops)||0===o.hops.length)throw new Error(`Stellar builder: \`steps.paths[${e}]\` must have splitPpm > 0 and a non-empty hops array`);r+=o.splitPpm;for(const[t,r]of o.hops.entries())if(!r||"string"!=typeof r.amountOut||"string"!=typeof r.pool||"string"!=typeof r.tokenIn||"string"!=typeof r.tokenOut||!p.includes(r.venue))throw new Error(`Stellar builder: \`steps.paths[${e}].hops[${t}]\` must have amountOut, pool, tokenIn, tokenOut, and a valid Soroban venue`)}if(1e6!==r)throw new Error(`Stellar builder: \`steps.paths[].splitPpm\` must sum to 1_000_000, got ${r}`);return t})(e),d.xdr.ScVal.scvBytes(Buffer.from(I(t).toXDR("base64"),"base64")));var t,r;throw new Error("Stellar builder: `steps` must be opaque strategy bytes (`routeXdr`, base64/hex string, or Uint8Array)")},L=e=>{if("string"==typeof e)return(e=>{const t=e.startsWith("0x")?e.slice(2):e,r=Buffer.from(t,"hex");return d.xdr.ScVal.scvBytes(r)})(e);if(e instanceof Uint8Array)return d.xdr.ScVal.scvBytes(Buffer.from(e));throw new Error("Stellar builder: `data` must be a hex string or Uint8Array (Soroban Bytes payload)")};function $(e,t,r){const o=e.controllerAddress??i(e.network),a=new d.Contract(o),n=new d.Account(e.caller,e.sourceSequence);return{xdr:new d.TransactionBuilder(n,{fee:e.fee??d.BASE_FEE,networkPassphrase:l[e.network]}).addOperation(a.call(t,...r)).setTimeout(e.timeoutSeconds??300).build().toXDR()}}function N(e,t){const r=t.accountNonce??0,o=t.spokeId??0;return $(e,"supply",[m(e.caller),S(r),b(o),E([...t.assets])])}function U(e,t){return N(e,{accountNonce:t.accountNonce,spokeId:t.spokeId,assets:[{hubId:t.hubId,asset:t.asset,amount:t.amount}]})}function C(e,t){return $(e,"borrow",[m(e.caller),S(t.accountNonce),E([...t.borrows]),x(t.to,m)])}function G(e,t){return C(e,{accountNonce:t.accountNonce,borrows:[{hubId:t.hubId,asset:t.asset,amount:t.amount}],to:t.to})}function q(e,t){return $(e,"withdraw",[m(e.caller),S(t.accountNonce),E([...t.withdrawals]),x(t.to,m)])}function D(e,t){return q(e,{accountNonce:t.accountNonce,withdrawals:[{hubId:t.hubId,asset:t.asset,amount:t.amount}],to:t.to})}function V(e,t){return $(e,"repay",[m(e.caller),S(t.accountNonce),E([...t.payments])])}function W(e,t){return V(e,{accountNonce:t.accountNonce,payments:[{hubId:t.hubId,asset:t.asset,amount:t.amount}]})}function M(e,t){return $(e,"liquidate",[m(e.caller),S(t.accountNonce),E([...t.debtPayments])])}function z(e,t){return $(e,"flash_loan",[m(e.caller),R(t.hubId,t.asset),f(t.amount),m(t.receiver),L(t.data)])}function X(e,t){return $(e,"migrate_from_blend",[m(e.caller),S(t.accountId),b(t.spokeId),b(t.hubId),m(t.blendPool),y(t.collateralTokens.map(m)),y(t.supplyTokens.map(m)),v(t.debtCaps.map((e=>({token:e.token,amount:e.cap}))))])}function F(e,t){const r=t.accountNonce??0,o=t.spokeId??0;return $(e,"multiply",[m(e.caller),S(r),b(o),R(t.collateral.hubId,t.collateral.asset),f(t.debtToFlashLoan),R(t.debt.hubId,t.debt.asset),b(t.mode),B(t.steps),x(t.initialPayment,(e=>k(e.hubId,e.asset,e.amount))),x(t.convertSwap,B)])}function H(e,t){return $(e,"swap_debt",[m(e.caller),S(t.accountNonce),R(t.existingDebt.hubId,t.existingDebt.asset),f(t.newDebtAmount),R(t.newDebt.hubId,t.newDebt.asset),B(t.steps)])}function j(e,t){return $(e,"swap_collateral",[m(e.caller),S(t.accountNonce),R(t.current.hubId,t.current.asset),f(t.fromAmount),R(t.newCollateral.hubId,t.newCollateral.asset),B(t.steps)])}function Q(e,t){return $(e,"repay_debt_with_collateral",[m(e.caller),S(t.accountNonce),R(t.collateral.hubId,t.collateral.asset),f(t.collateralAmount),R(t.debt.hubId,t.debt.asset),B(t.steps),h(t.closePosition)])}const K="/stellar-lending",Z=25,Y=encodeURIComponent,J=(e,t)=>e.fetchWithTimeout(`${K}/context`,t),ee=(e,t)=>e.fetchWithTimeout(`${K}/assets`,t),te=(e,t)=>e.fetchWithTimeout(`${K}/hubs`,t),re=(e,t)=>e.fetchWithTimeout(`${K}/spokes`,t),oe=(e,t={},r)=>{const{hubId:o,spokeId:a,asset:n}=t;return e.fetchWithTimeout(`${K}/reserves`,{...r,params:{...void 0!==o?{hubId:o}:{},...void 0!==a?{spokeId:a}:{},...n?{asset:n}:{}}})},ae=(e,t,r,o,a)=>e.fetchWithTimeout(`${K}/reserves/${t}/${r}/${Y(o)}`,a),ne=(e,t,r,o,a,n)=>e.fetchWithTimeout(`${K}/reserves/${t}/${r}/${Y(o)}/holders`,{...n,params:{side:a}}),se=(e,t,r)=>e.fetchWithTimeout(`${K}/assets/${Y(t)}`,r),le=(e,t,r,o)=>e.fetchWithTimeout(`${K}/assets/${Y(t)}/page`,{...o,params:{...r}}),ie=(e,t,r,o)=>e.fetchWithTimeout(`${K}/assets/${Y(t)}/markets`,{...o,params:{side:r}}),ue=(e,t,r)=>e.fetchWithTimeout(`${K}/hubs/${t}`,r),ce=(e,t,r)=>e.fetchWithTimeout(`${K}/spokes/${t}`,r),de=(e,t,r)=>e.fetchWithTimeout(`${K}/users/${Y(t)}/positions`,r),pe=(e,t,r={},o)=>{const{skip:a,top:n}=r;return e.fetchWithTimeout(`${K}/users/${Y(t)}/activity`,{...o,params:{...void 0!==a?{skip:a}:{},...void 0!==n?{top:n}:{}}})},me=(e,t,r)=>e.fetchWithTimeout(`${K}/accounts/${Y(t)}/positions`,r),fe=(e,t={},r)=>{const{top:o=Z,continuationToken:a}=t;return e.fetchWithTimeout(`${K}/governance/proposals`,{...r,params:{top:o,...a?{continuationToken:a}:{}}})},be=(e,t,r,o)=>e.fetchWithTimeout(`${K}/assets/${Y(t)}/graph`,{...o,params:{...r}}),Se=(e,t,r,o)=>e.fetchWithTimeout(`${K}/hubs/${t}/graph`,{...o,params:{...r}}),he=(e,t,r,o)=>e.fetchWithTimeout(`${K}/spokes/${t}/graph`,{...o,params:{...r}}),_e=(e,t,r,o,a,n)=>e.fetchWithTimeout(`${K}/reserves/${t}/${r}/${Y(o)}/graph`,{...n,params:{...a}}),we=e=>({context:t=>J(e,t),assets:t=>ee(e,t),hubs:t=>te(e,t),spokes:t=>re(e,t),reserves:(t,r)=>{return void 0===(o=t)||"hubId"in o||"spokeId"in o||"asset"in o?oe(e,t,r):oe(e,{},t);var o},reserve:(t,r,o,a)=>ae(e,t,r,o,a),reserveHolders:(t,r,o,a,n)=>ne(e,t,r,o,a,n),asset:(t,r)=>se(e,t,r),assetMarkets:(t,r,o)=>ie(e,t,r,o),hub:(t,r)=>ue(e,t,r),spoke:(t,r)=>ce(e,t,r),userPositions:(t,r)=>de(e,t,r),userActivity:(t,r,o)=>pe(e,t,r,o),accountPositions:(t,r)=>me(e,t,r),governanceProposals:(t,r)=>fe(e,t,r),assetGraph:(t,r,o)=>be(e,t,r,o),hubGraph:(t,r,o)=>Se(e,t,r,o),spokeGraph:(t,r,o)=>he(e,t,r,o),reserveGraph:(t,r,o,a,n)=>_e(e,t,r,o,a,n)}),ge={Single:0,PrimaryWithAnchor:1},ye=e=>P({base_borrow_rate:f(e.baseBorrowRateRay),max_borrow_rate:f(e.maxBorrowRateRay),max_utilization:f(e.maxUtilizationRay),mid_utilization:f(e.midUtilizationRay),optimal_utilization:f(e.optimalUtilizationRay),reserve_factor:b(e.reserveFactorBps),slope1:f(e.slope1Ray),slope2:f(e.slope2Ray),slope3:f(e.slope3Ray)}),Te=e=>P({asset_decimals:b(e.assetDecimals),asset_id:m(e.assetId),base_borrow_rate:f(e.baseBorrowRateRay),borrow_cap:f(e.borrowCap),flashloan_fee:b(e.flashloanFeeBps),is_flashloanable:h(e.isFlashloanable),max_borrow_rate:f(e.maxBorrowRateRay),max_utilization:f(e.maxUtilizationRay),mid_utilization:f(e.midUtilizationRay),optimal_utilization:f(e.optimalUtilizationRay),reserve_factor:b(e.reserveFactorBps),slope1:f(e.slope1Ray),slope2:f(e.slope2Ray),slope3:f(e.slope3Ray),supply_cap:f(e.supplyCap)}),xe=e=>P({max_borrow_positions:b(e.maxBorrowPositions),max_supply_positions:b(e.maxSupplyPositions)}),ve=e=>{const t=e.kind;switch(t){case"Stellar":return y([w("Stellar"),m(e.value)]);case"Symbol":return y([w("Symbol"),w(e.value)]);case"String":return y([w("String"),_(e.value)]);default:throw new Error(`Stellar builder: unknown oracle asset ref kind "${t}"`)}},Re=(e,t)=>{if("Twap"===e){if("number"!=typeof t)throw new Error("Stellar builder: oracle source with Twap read mode requires `twapRecords`");return y([w("Twap"),b(t)])}return y([w("Spot")])},ke=e=>{const t=e.provider;if("ReflectorSep40"===t){if(!e.asset)throw new Error("Stellar builder: Reflector oracle source requires `asset`");return y([w("Reflector"),P({asset:ve(e.asset),contract:m(e.contract),read_mode:Re(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 y([w("RedStone"),P({contract:m(e.contract),feed_id:_(e.feedId),max_stale_seconds:S(e.maxStaleSeconds)})])}throw new Error(`Stellar builder: unknown oracle provider "${t}"`)},Ee=e=>{const t=ge[e.strategy];if(void 0===t)throw new Error(`Stellar builder: unknown oracle strategy "${e.strategy}"`);return P({anchor:(r=e.anchor,y(null==r?[w("None")]:[w("Some"),ke(r)])),max_price_stale_seconds:S(e.maxPriceStaleSeconds),max_sanity_price_wad:f(e.maxSanityPriceWad),min_sanity_price_wad:f(e.minSanityPriceWad),primary:ke(e.primary),strategy:b(t),tolerance_bps:b(e.toleranceBps)});var r};function Pe(e,t){return $(e,"upgrade",[T(t.wasmHash)])}function Ie(e,t){return $(e,"migrate",[b(t.newVersion)])}function Ae(e){return $(e,"pause",[])}function Oe(e){return $(e,"unpause",[])}function Be(e,t){return $(e,"grant_role",[m(t.account),w(t.role)])}function Le(e,t){return $(e,"revoke_role",[m(t.account),w(t.role)])}function $e(e,t){return $(e,"transfer_ownership",[m(t.newOwner),b(t.liveUntilLedger)])}function Ne(e){return $(e,"accept_ownership",[])}function Ue(e,t){return $(e,"set_aggregator",[m(t.aggregator)])}function Ce(e,t){return $(e,"set_accumulator",[m(t.accumulator)])}function Ge(e,t){return $(e,"set_liquidity_pool_template",[T(t.wasmHash)])}function qe(e,t){return $(e,"set_position_limits",[xe(t)])}function De(e,t){return $(e,"update_pool_caps",[R(t.hubId,t.asset),f(t.supplyCap),f(t.borrowCap)])}function Ve(e,t){return $(e,"approve_token",[m(t.token)])}function We(e,t){return $(e,"revoke_token",[m(t.token)])}function Me(e,t){return $(e,"set_market_oracle_config",[R(t.hubId,t.asset),Ee(t.config)])}function ze(e,t){return $(e,"set_oracle_tolerance",[m(t.asset),P({lower_ratio_bps:b(t.lowerRatioBps),upper_ratio_bps:b(t.upperRatioBps)})])}function Xe(e,t){return $(e,"disable_token_oracle",[m(t.asset)])}function Fe(e,t){return $(e,"update_indexes",[m(e.caller),y(t.assets.map((e=>R(e.hubId,e.asset))))])}function He(e,t){return $(e,"renew_account",[m(e.caller),S(t.accountNonce)])}function je(e,t){return $(e,"create_liquidity_pool",[b(t.hubId),m(t.asset),Te(t.params)])}function Qe(e,t){return $(e,"upgrade_liquidity_pool_params",[R(t.hubId,t.asset),ye(t.params)])}function Ke(e,t){return $(e,"claim_revenue",[m(e.caller),y(t.assets.map((e=>R(e.hubId,e.asset))))])}function Ze(e,t){return $(e,"add_rewards",[m(e.caller),E(t.rewards)])}function Ye(e,t){return $(e,"update_account_threshold",[m(e.caller),h(t.hasRisks),y(t.accountNonces.map((e=>S(e))))])}const Je="00".repeat(32),et=e=>{if("string"==typeof e)return T(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 d.xdr.ScVal.scvBytes(t)},tt=(e,...t)=>y([w(e),...t]),rt=e=>P({borrow_cap:f(e.borrowCap),hub_asset:R(e.hubId,e.asset),supply_cap:f(e.supplyCap)}),ot=e=>P({asset:m(e.asset),hub_id:b(e.hubId),params:Te(e.params)}),at=e=>P({hub_asset:R(e.hubId,e.asset),params:ye(e.params)}),nt=e=>P({new_owner:m(e.newOwner),live_until_ledger:b(e.liveUntilLedger)}),st=e=>P({cfg:Ee(e.config),hub_asset:R(e.hubId,e.asset)}),lt=e=>P({asset:m(e.asset),tolerance:b(e.tolerance)}),it=e=>P({account:m(e.account),role:w(e.role)});function ut(e,t,r){const o=e.governanceAddress??c(e.network),a=new d.Contract(o),n=new d.Account(e.caller,e.sourceSequence);return{xdr:new d.TransactionBuilder(n,{fee:e.fee??d.BASE_FEE,networkPassphrase:l[e.network]}).addOperation(a.call(t,...r)).setTimeout(e.timeoutSeconds??300).build().toXDR()}}const ct=(e,t,r)=>ut(e,"propose",[m(e.caller),t,et(r)]),dt=(e,t,r)=>ut(e,"execute_self",[g(),t,et(r)]);function pt(e,t,r){return ct(e,tt("SetAggregator",m(t.aggregator)),r)}function mt(e,t,r){return ct(e,tt("SetAccumulator",m(t.accumulator)),r)}function ft(e,t,r){return ct(e,tt("SetLiquidityPoolTemplate",T(t.wasmHash)),r)}function bt(e,t,r){return ct(e,tt("SetPositionLimits",xe(t)),r)}function St(e,t,r){return ct(e,tt("SetMinBorrowCollateralUsd",f(t.floorWad)),r)}function ht(e,t,r){return ct(e,tt("UpdatePoolCaps",rt(t)),r)}function _t(e,t,r){return ct(e,tt("ApproveToken",m(t.token)),r)}function wt(e,t,r){return ct(e,tt("RevokeToken",m(t.token)),r)}function gt(e,t,r){return ct(e,tt("ApproveBlendPool",m(t.pool)),r)}function yt(e,t,r){return ct(e,tt("RevokeBlendPool",m(t.pool)),r)}function Tt(e,t,r){return ct(e,tt("CreateLiquidityPool",ot(t)),r)}function xt(e,t,r){return ct(e,tt("UpgradeLiquidityPoolParams",at(t)),r)}function vt(e,t){return ct(e,tt("DeployPool"),t)}function Rt(e,t,r){return ct(e,tt("UpgradePool",T(t.wasmHash)),r)}function kt(e,t,r){return ct(e,tt("DisableTokenOracle",m(t.asset)),r)}function Et(e,t,r){return ct(e,tt("UpgradeController",T(t.wasmHash)),r)}function Pt(e,t,r){return ct(e,tt("MigrateController",b(t.newVersion)),r)}function It(e,t,r){return ct(e,tt("TransferCtrlOwnership",nt(t)),r)}function At(e,t,r){return ct(e,tt("ConfigureMarketOracle",st(t)),r)}function Ot(e,t,r){return ct(e,tt("EditOracleTolerance",lt(t)),r)}function Bt(e,t,r){return ct(e,tt("UpgradeGov",T(t.wasmHash)),r)}function Lt(e,t,r){return ct(e,tt("UpdateGovDelay",b(t.newDelay)),r)}function $t(e,t,r){return ct(e,tt("GrantGovRole",it(t)),r)}function Nt(e,t,r){return ct(e,tt("RevokeGovRole",it(t)),r)}function Ut(e,t,r){return ct(e,tt("TransferGovOwnership",nt(t)),r)}function Ct(e,t){const r=y(t.argsXdr.map((e=>d.xdr.ScVal.fromXDR(e,"base64")))),o=et(t.predecessor??Je);return ut(e,"execute",[g(),m(t.target),w(t.functionName),r,o,et(t.salt)])}function Gt(e,t,r){return dt(e,tt("UpgradeGov",T(t.wasmHash)),r)}function qt(e,t,r){return dt(e,tt("UpdateGovDelay",b(t.newDelay)),r)}function Dt(e,t,r){return dt(e,tt("GrantGovRole",it(t)),r)}function Vt(e,t,r){return dt(e,tt("RevokeGovRole",it(t)),r)}function Wt(e,t,r){return dt(e,tt("TransferGovOwnership",nt(t)),r)}const Mt=e=>e.toXDR("base64"),zt=e=>d.xdr.ScVal.fromXDR(e,"base64"),Xt=e=>e.map((e=>String((0,d.scValToNative)(zt(e))))).join(":"),Ft=e=>"bigint"==typeof e||"number"==typeof e?e.toString():String(e),Ht=e=>Number(e),jt=e=>String(e),Qt=e=>null==e?void 0:Ft(e),Kt=e=>null==e?void 0:jt(e),Zt=e=>e instanceof Uint8Array?Buffer.from(e).toString("hex"):Buffer.isBuffer(e)?e.toString("hex"):String(e),Yt=["None","Multiply","Long","Short"],Jt=["Single","PrimaryWithAnchor"],er=["ReflectorSep40","RedStonePriceFeed"],tr=["Spot","Twap"],rr=["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"],or=e=>Array.isArray(e)?e:[],ar=(e,t)=>{const r="Borrow"===t;return{action:(o=e[0],rr[Ht(o)]??Ft(o)),positionType:t,hubId:Ht(e[1]),asset:jt(e[2]),scaledAmountRay:Ft(e[3]),indexRay:Ft(e[4]),amount:Ft(e[5]),liquidationThresholdBps:r?void 0:Ht(e[6]),liquidationBonusBps:r?void 0:Ht(e[7]),loanToValueBps:r?void 0:Ht(e[8]),liquidationFeesBps:r?void 0:Ht(e[9])};var o},nr=e=>{return{owner:jt(e[0]),spokeId:Ht(e[1]),mode:(t=e[2],Yt[Ht(t)]??"None")};var t},sr=(e,t)=>{const r=tr[Ht(e[`${t}_read_mode`])]??"Spot",o=e[`${t}_asset`],a=e[`${t}_symbol`],n=null!=o?{kind:"Stellar",value:jt(o)}:null!=a?{kind:"Symbol",value:jt(a)}:void 0;return{provider:er[Ht(e[`${t}_provider`])]??"ReflectorSep40",contractAddress:jt(e[`${t}_contract`]),asset:n,feedId:Kt(e[`${t}_feed_id`]),readMode:r,twapRecords:"Twap"===r?Ht(e[`${t}_twap_records`]):void 0,decimals:Ht(e[`${t}_decimals`]),resolutionSeconds:Ht(e[`${t}_resolution_seconds`]),maxStaleSeconds:Ht(e[`${t}_max_stale_seconds`])}},lr=e=>{const t=null!==e.anchor_provider&&void 0!==e.anchor_provider;return{baseTokenId:jt(e.base_token_id),quoteTokenId:jt(e.quote_token_id),tolerance:{upperRatio:Ht(e.upper_ratio_bps??e.tolerance?.upper_ratio_bps),lowerRatio:Ht(e.lower_ratio_bps??e.tolerance?.lower_ratio_bps)},assetDecimals:Ht(e.asset_decimals),maxPriceStaleSeconds:Ht(e.max_price_stale_seconds),strategy:Jt[Ht(e.strategy)]??"Single",primary:sr(e,"primary"),anchor:t?sr(e,"anchor"):void 0,primaryQuoteToken:Kt(e.primary_quote_token),anchorQuoteToken:Kt(e.anchor_quote_token),minSanityPriceWad:Qt(e.min_sanity_price_wad),maxSanityPriceWad:Qt(e.max_sanity_price_wad)}},ir={"market:create":e=>({topic:"market:create",data:{hubId:Ht(e.hub_id),baseAsset:jt(e.base_asset),maxBorrowRate:Ft(e.max_borrow_rate),baseBorrowRate:Ft(e.base_borrow_rate),slope1:Ft(e.slope1),slope2:Ft(e.slope2),slope3:Ft(e.slope3),midUtilization:Ft(e.mid_utilization),optimalUtilization:Ft(e.optimal_utilization),maxUtilization:Ft(e.max_utilization),reserveFactor:Ht(e.reserve_factor),marketAddress:jt(e.market_address)}}),"market:params_update":e=>({topic:"market:params_update",data:{asset:jt(e.asset),maxBorrowRateRay:Ft(e.max_borrow_rate),baseBorrowRateRay:Ft(e.base_borrow_rate),slope1Ray:Ft(e.slope1),slope2Ray:Ft(e.slope2),slope3Ray:Ft(e.slope3),midUtilizationRay:Ft(e.mid_utilization),optimalUtilizationRay:Ft(e.optimal_utilization),maxUtilizationRay:Ft(e.max_utilization),reserveFactorBps:Ht(e.reserve_factor)}}),"market:batch_state_update":e=>({topic:"market:batch_state_update",data:{updates:or(e).map((e=>{return t=or(e),{hubId:Ht(t[0]),asset:jt(t[1]),timestamp:Ht(t[2]),supplyIndexRay:Ft(t[3]),borrowIndexRay:Ft(t[4]),cash:Ft(t[5]),suppliedRay:Ft(t[6]),borrowedRay:Ft(t[7]),revenueRay:Ft(t[8])};var t}))}}),"market:batch_params_update":e=>({topic:"market:batch_params_update",data:{updates:or(e).map((e=>{const t=e;return{hubId:Ht(t.hub_id),asset:jt(t.asset),params:(r=t.params,{maxBorrowRateRay:Ft(r.max_borrow_rate),baseBorrowRateRay:Ft(r.base_borrow_rate),slope1Ray:Ft(r.slope1),slope2Ray:Ft(r.slope2),slope3Ray:Ft(r.slope3),midUtilizationRay:Ft(r.mid_utilization),optimalUtilizationRay:Ft(r.optimal_utilization),maxUtilizationRay:Ft(r.max_utilization),reserveFactorBps:Ht(r.reserve_factor),supplyCap:Ft(r.supply_cap),borrowCap:Ft(r.borrow_cap),isFlashloanable:Boolean(r.is_flashloanable),flashloanFeeBps:Ht(r.flashloan_fee),assetId:jt(r.asset_id),assetDecimals:Ht(r.asset_decimals)})};var r}))}}),"position:batch_update":e=>{const t=or(e);return{topic:"position:batch_update",data:{accountId:Ft(t[0]),accountAttributes:nr(or(t[1])),updates:[...or(t[2]).map((e=>ar(or(e),"Deposit"))),...or(t[3]).map((e=>ar(or(e),"Borrow")))]}}},"position:flash_loan":e=>({topic:"position:flash_loan",data:{hubId:Ht(e.hub_id),asset:jt(e.asset),receiver:jt(e.receiver),caller:jt(e.caller),amount:Ft(e.amount),fee:Ft(e.fee)}}),"config:oracle":e=>({topic:"config:oracle",data:{asset:jt(e.asset),oracle:lr(e.oracle)}}),"position:liquidation":e=>({topic:"position:liquidation",data:{liquidator:jt(e.liquidator),accountId:Ft(e.account_id),repaidUsdWad:Ft(e.repaid_usd_wad),bonusBps:Ft(e.bonus_bps)}}),"debt:bad_debt":e=>({topic:"debt:bad_debt",data:{accountId:Ft(e.account_id),totalBorrowUsdWad:Ft(e.total_borrow_usd_wad),totalCollateralUsdWad:Ft(e.total_collateral_usd_wad)}}),"strategy:initial_payment":e=>({topic:"strategy:initial_payment",data:{token:jt(e.token),amount:Ft(e.amount),usdValueWad:Ft(e.usd_value_wad),accountId:Ft(e.account_id)}}),"strategy:fee":e=>({topic:"strategy:fee",data:{hubId:Ht(e.hub_id),asset:jt(e.asset),amount:Ft(e.amount),fee:Ft(e.fee),amountSent:Ft(e.amount_sent)}}),"config:approve_token":e=>({topic:"config:approve_token",data:{wasmHash:Zt(e.wasm_hash),approved:Boolean(e.approved)}}),"config:aggregator":e=>({topic:"config:aggregator",data:{aggregator:jt(e.aggregator)}}),"config:accumulator":e=>({topic:"config:accumulator",data:{accumulator:jt(e.accumulator)}}),"config:pool_template":e=>({topic:"config:pool_template",data:{wasmHash:Zt(e.wasm_hash)}}),"config:position_limits":e=>({topic:"config:position_limits",data:{maxSupplyPositions:Ht(e.max_supply_positions),maxBorrowPositions:Ht(e.max_borrow_positions)}}),"config:oracle_disabled":e=>({topic:"config:oracle_disabled",data:{asset:jt(e.asset)}}),"config:spoke":e=>{const t=e.spoke;return{topic:"config:spoke",data:{spokeId:Ht(t.spoke_id),isDeprecated:Boolean(t.is_deprecated),liquidationTargetHfWad:Ft(t.liquidation_target_hf_wad),healthFactorForMaxBonusWad:Ft(t.hf_for_max_bonus_wad),liquidationBonusFactorBps:Ht(t.liquidation_bonus_factor_bps)}}}},ur=Object.freeze(Object.keys(ir));function cr(e,t){const r=Xt(e),o=ir[r];return o?o((0,d.scValToNative)(zt(t))):null}const dr="XLENDXLM-a7c9f3",pr=1e4;function mr(e){const t=BigInt(e).toString(16),r=t.length%2==0?t:`0${t}`;return`${dr}-${r}`}function fr(e){const t=e.split("-");return t.length>=2&&parseInt(t[1],10)||0}function br(e,t=0){return e*pr+t}function Sr(e){switch(e){case"liq_repay":return"lendingLiquidateRepayDebt";case"liq_seize":return"lendingLiquidateSeizeCollateral";case"param_upd":return"lendingUpdateAccountParameters";default:return"lendingUpdateAccountPosition"}}const hr=(e,t,r)=>{const o=new URL(t,e.endsWith("/")?e:`${e}/`);if(r)for(const[e,t]of Object.entries(r))void 0!==t&&o.searchParams.set(e,String(t));return o.toString()},_r=e=>e.baseUrl??s[e.network];async function wr(e,t){if(null==e.amountIn==(null==e.amountOut))throw new Error("getStellarAggregatorQuote: exactly one of `amountIn` or `amountOut` must be provided");const r=hr(_r(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}),o=await fetch(r,t.fetchOptions);if(!o.ok){const e=await o.text().catch((()=>""));throw new Error(`Stellar quote server responded ${o.status} ${o.statusText} for ${r} — ${e}`)}return await o.json()}async function gr(e){const t=hr(_r(e),"api/v1/tokens"),r=await fetch(t,e.fetchOptions);if(!r.ok){const e=await r.text().catch((()=>""));throw new Error(`Stellar quote server responded ${r.status} ${r.statusText} for ${t} — ${e}`)}return await r.json()}const yr=(e,t)=>(e=>Boolean(e&&"object"==typeof e&&!(e instanceof Uint8Array)&&"paths"in e))(e)&&void 0===e.referralId?{...e,referralId:t??0}:e,Tr=e=>I(e).toXDR("base64");function xr(e,t){const r=e.routerAddress??u(e.network),o=new d.Contract(r),a=new d.Account(e.caller,e.sourceSequence),n=B(yr(t,e.referralId));return{xdr:new d.TransactionBuilder(a,{fee:e.fee??d.BASE_FEE,networkPassphrase:l[e.network]}).addOperation(o.call("execute_strategy",m(e.caller),f(e.totalIn),n)).setTimeout(e.timeoutSeconds??300).build().toXDR()}}function vr(e,t){return xr(e,t)}function Rr(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(Pr),splitPpm:e.splitPpm}))):[{hops:e.hops.map(Pr),splitPpm:1e6}],referralId:t.referralId??0,tokenIn:e.from,tokenOut:e.to,totalMinOut:e.amountOutMin}}function kr(e,t={}){const r=e;return"string"==typeof r.routeXdr&&r.routeXdr.length>0?{routeXdr:r.routeXdr}:Rr(e,t)}const Er=Rr,Pr=e=>({amountOut:e.amountOut,pool:e.address,tokenIn:e.from,tokenOut:e.to,venue:e.dex});function Ir(e,t){const r=t instanceof Error?t.message:String(t);return new Error(`[xoxno-invoked:${e}] ${r}`)}async function Ar(e,t,r){const o=d.TransactionBuilder.fromXDR(t,"base64");try{return(await e.prepareTransaction(o)).toXDR()}catch(e){if(r?.invokedContractId)throw Ir(r.invokedContractId,e);throw e}}async function Or(e,t,r){return Ar(e,t.xdr,r)}function Br(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 Lr(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 $r=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 Nr(e){const t=new d.Account(e.caller,e.sourceSequence),r=new d.Contract(e.forwarderAddress).call("mint_and_forward",d.xdr.ScVal.scvBytes($r(e.message)),d.xdr.ScVal.scvBytes($r(e.attestation)));return{xdr:new d.TransactionBuilder(t,{fee:e.fee??"10000000",networkPassphrase:l[e.network]}).addOperation(r).setTimeout(e.timeoutSeconds??120).build().toXDR()}}module.exports=t})();
|
|
1
|
+
"undefined"!=typeof globalThis&&void 0===globalThis.self&&(globalThis.self=globalThis),(()=>{"use strict";var e={d:(t,r)=>{for(var o in r)e.o(r,o)&&!e.o(t,o)&&Object.defineProperty(t,o,{enumerable:!0,get:r[o]})},o:(e,t)=>Object.prototype.hasOwnProperty.call(e,t),r:e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})}},t={};e.r(t),e.d(t,{STELLAR_AGGREGATOR_ROUTER:()=>o,STELLAR_GOVERNANCE:()=>a,STELLAR_GOVERNANCE_ZERO_PREDECESSOR:()=>Ye,STELLAR_LENDING_CONTROLLER:()=>r,STELLAR_LENDING_TOPICS:()=>Sr,STELLAR_NETWORK_PASSPHRASE:()=>l,STELLAR_QUOTE_URL:()=>s,STELLAR_SOROBAN_RPC_URL:()=>n,SYNTHETIC_EVENT_ORDER_STRIDE:()=>_r,XOXNO_LENDING_STELLAR_TICKER:()=>hr,buildSameTokenRepaySwapSteps:()=>qr,buildStellarAcceptOwnershipTx:()=>Ne,buildStellarAddRewardsTx:()=>Ke,buildStellarApproveTokenTx:()=>De,buildStellarBatchSwapTx:()=>Ir,buildStellarBorrowBatchTx:()=>G,buildStellarBorrowTx:()=>C,buildStellarCctpForwardTx:()=>Vr,buildStellarClaimRevenueTx:()=>Qe,buildStellarCreateLiquidityPoolTx:()=>He,buildStellarDisableTokenOracleTx:()=>ze,buildStellarExecuteStrategyTx:()=>Ar,buildStellarFlashLoanTx:()=>z,buildStellarGovernanceExecuteGovernanceUpgradeTx:()=>zt,buildStellarGovernanceExecuteGrantGovernanceRoleTx:()=>Ft,buildStellarGovernanceExecuteRevokeGovernanceRoleTx:()=>Ht,buildStellarGovernanceExecuteTransferGovOwnTx:()=>jt,buildStellarGovernanceExecuteTx:()=>Mt,buildStellarGovernanceExecuteUpdateDelayTx:()=>Xt,buildStellarGrantRoleTx:()=>Be,buildStellarLendingIdentifier:()=>wr,buildStellarLiquidateTx:()=>M,buildStellarMigrateFromBlendTx:()=>X,buildStellarMigrateTx:()=>Ae,buildStellarMultiplyTx:()=>F,buildStellarPauseTx:()=>Ie,buildStellarProposeAddAssetToSpokeTx:()=>wt,buildStellarProposeAddSpokeTx:()=>ht,buildStellarProposeApproveBlendPoolTx:()=>kt,buildStellarProposeApproveTokenTx:()=>vt,buildStellarProposeConfigureMarketOracleTx:()=>Ut,buildStellarProposeCreateHubTx:()=>bt,buildStellarProposeCreateLiquidityPoolTx:()=>Pt,buildStellarProposeDeployPoolTx:()=>It,buildStellarProposeDisableTokenOracleTx:()=>Bt,buildStellarProposeEditAssetInSpokeTx:()=>gt,buildStellarProposeEditOracleToleranceTx:()=>Gt,buildStellarProposeGovernanceUpgradeTx:()=>Ct,buildStellarProposeGrantGovernanceRoleTx:()=>Dt,buildStellarProposeMigrateControllerTx:()=>$t,buildStellarProposeRemoveAssetFromSpokeTx:()=>yt,buildStellarProposeRemoveSpokeTx:()=>_t,buildStellarProposeRevokeBlendPoolTx:()=>Et,buildStellarProposeRevokeGovernanceRoleTx:()=>Vt,buildStellarProposeRevokeTokenTx:()=>Rt,buildStellarProposeSetAccumulatorTx:()=>mt,buildStellarProposeSetAggregatorTx:()=>pt,buildStellarProposeSetMinBorrowCollatTx:()=>xt,buildStellarProposeSetPoolTemplateTx:()=>ft,buildStellarProposeSetPositionLimitsTx:()=>St,buildStellarProposeSetPositionManagerTx:()=>Tt,buildStellarProposeTransferCtrlOwnershipTx:()=>Nt,buildStellarProposeTransferGovOwnTx:()=>Wt,buildStellarProposeUpdateDelayTx:()=>qt,buildStellarProposeUpgradeControllerTx:()=>Lt,buildStellarProposeUpgradePoolParamsTx:()=>At,buildStellarProposeUpgradePoolTx:()=>Ot,buildStellarRenewAccountTx:()=>Fe,buildStellarRepayBatchTx:()=>V,buildStellarRepayDebtWithCollateralTx:()=>Q,buildStellarRepayTx:()=>W,buildStellarRevokeRoleTx:()=>Le,buildStellarRevokeTokenTx:()=>Ve,buildStellarSetAccumulatorTx:()=>Ge,buildStellarSetAggregatorTx:()=>Ue,buildStellarSetLiquidityPoolTemplateTx:()=>Ce,buildStellarSetMarketOracleConfigTx:()=>We,buildStellarSetOracleToleranceTx:()=>Me,buildStellarSetPositionLimitsTx:()=>qe,buildStellarSupplyBatchTx:()=>N,buildStellarSupplyTx:()=>U,buildStellarSwapCollateralTx:()=>j,buildStellarSwapDebtTx:()=>H,buildStellarTransferOwnershipTx:()=>$e,buildStellarUnpauseTx:()=>Oe,buildStellarUpdateAccountThresholdTx:()=>Ze,buildStellarUpdateIndexesTx:()=>Xe,buildStellarUpgradeControllerTx:()=>Pe,buildStellarUpgradeLiquidityPoolParamsTx:()=>je,buildStellarWithdrawBatchTx:()=>q,buildStellarWithdrawTx:()=>D,buildTx:()=>$,decodeStellarLendingEvent:()=>br,encodeInterestRateModel:()=>ye,encodeMarketOracleConfigInput:()=>Ee,encodeMarketParamsRaw:()=>Te,encodeOracleSourceConfigInput:()=>ke,encodePositionLimits:()=>xe,encodeStrategyPayloadToRouteXdr:()=>Pr,extractEventOrder:()=>gr,getStellarAccountPositions:()=>me,getStellarAggregatorQuote:()=>Rr,getStellarAggregatorRouter:()=>u,getStellarAsset:()=>se,getStellarAssetGraph:()=>Se,getStellarAssetMarkets:()=>ie,getStellarAssetPage:()=>le,getStellarAssets:()=>ee,getStellarGovernance:()=>c,getStellarGovernanceProposals:()=>fe,getStellarHub:()=>ue,getStellarHubGraph:()=>be,getStellarHubs:()=>te,getStellarLendingContext:()=>J,getStellarLendingController:()=>i,getStellarQuoteTokens:()=>kr,getStellarReserve:()=>ae,getStellarReserveGraph:()=>_e,getStellarReserveHolders:()=>ne,getStellarReserves:()=>oe,getStellarSpoke:()=>ce,getStellarSpokeGraph:()=>he,getStellarSpokes:()=>re,getStellarUserActivity:()=>pe,getStellarUserPositions:()=>de,mapQuoteResponseToAggregatorSwap:()=>Lr,mapQuoteResponseToStrategyPayload:()=>Or,mapQuoteResponseToStrategySwap:()=>Br,mapStellarPositionActivityType:()=>Tr,prepareStellarBuiltTx:()=>Gr,prepareStellarTxXdr:()=>Ur,stellarLendingDispatchKey:()=>Zt,stellarLendingRead:()=>we,syntheticEventOrder:()=>yr,tagStellarInvokedContractError:()=>Nr,toBase64Xdr:()=>Qt,toStellarPositionMode:()=>Cr});const r={mainnet:process.env.STELLAR_LENDING_CONTROLLER_MAINNET??"",testnet:process.env.STELLAR_LENDING_CONTROLLER_TESTNET??""},o={mainnet:process.env.STELLAR_AGGREGATOR_ROUTER_MAINNET??"",testnet:process.env.STELLAR_AGGREGATOR_ROUTER_TESTNET??""},a={mainnet:process.env.STELLAR_GOVERNANCE_MAINNET??"",testnet:process.env.STELLAR_GOVERNANCE_TESTNET??""},n={mainnet:"https://soroban-rpc.stellar.org",testnet:"https://soroban-testnet.stellar.org"},s={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"},l={mainnet:"Public Global Stellar Network ; September 2015",testnet:"Test SDF Network ; September 2015"};function i(e){const t=r[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 u(e){const t=o[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 c(e){const t=a[e];if(!t)throw new Error(`Stellar governance address not configured for network "${e}". Set STELLAR_GOVERNANCE_${e.toUpperCase()} env var.`);return t}const d=require("@stellar/stellar-sdk"),p=["Soroswap","Aquarius","Phoenix","Sushi","CometDex"],m=e=>new d.Address(e).toScVal(),f=e=>new d.ScInt(e).toI128(),S=e=>d.xdr.ScVal.scvU32(e),b=e=>new d.ScInt("string"==typeof e?e:e.toString()).toU64(),h=e=>d.xdr.ScVal.scvBool(e),_=e=>d.xdr.ScVal.scvString(e),w=e=>d.xdr.ScVal.scvSymbol(e),g=()=>d.xdr.ScVal.scvVoid(),y=e=>d.xdr.ScVal.scvVec(e),T=(e,t=32)=>{const r=e.startsWith("0x")?e.slice(2):e,o=Buffer.from(r,"hex");if(o.length!==t)throw new Error(`Stellar builder: expected a ${t}-byte BytesN (got ${o.length} bytes from "${e}")`);return d.xdr.ScVal.scvBytes(o)},x=(e,t)=>null==e?g():t(e),v=e=>d.xdr.ScVal.scvVec(e.map((e=>{return t=e.token,r=e.amount,d.xdr.ScVal.scvVec([m(t),f(r)]);var t,r}))),R=(e,t)=>P({asset:m(t),hub_id:S(e)}),k=(e,t,r)=>d.xdr.ScVal.scvVec([R(e,t),f(r)]),E=e=>d.xdr.ScVal.scvVec(e.map((e=>k(e.hubId,e.asset,e.amount)))),P=e=>{const t=Object.keys(e).sort().map((t=>new d.xdr.ScMapEntry({key:w(t),val:e[t]})));return d.xdr.ScVal.scvMap(t)},A=e=>{const t=e.paths.map((e=>{const t=e.hops.map((e=>{return P({amount_out:f(e.amountOut),pool:m(e.pool),token_in:m(e.tokenIn),token_out:m(e.tokenOut),venue:(t=e.venue,d.xdr.ScVal.scvVec([w(t)]))});var t}));return P({hops:d.xdr.ScVal.scvVec(t),split_ppm:S(e.splitPpm)})}));return P({paths:d.xdr.ScVal.scvVec(t),referral_id:b(e.referralId??0),token_in:m(e.tokenIn),token_out:m(e.tokenOut),total_min_out:f(e.totalMinOut)})},I=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 d.xdr.ScVal.scvBytes(t)},O=e=>{const t=e.trim();if(t.startsWith("0x")){const e=t.slice(2);if(!((r=e).length>0&&r.length%2==0&&/^[0-9a-fA-F]+$/.test(r)))throw new Error("Stellar builder: strategy swap bytes hex string must be 0x-prefixed and even-length");return Buffer.from(e,"hex")}var r;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 o=Buffer.from(t,"base64");if(0===o.length)throw new Error("Stellar builder: strategy swap bytes must be non-empty base64 routeXdr, 0x hex string, or Uint8Array");return o},B=e=>{if("string"==typeof e)return I(O(e));if(e instanceof Uint8Array)return I(e);if(e&&"object"==typeof e)return"routeXdr"in(r=e)&&"string"==typeof r.routeXdr?I(O(e.routeXdr)):(e=>"swapXdr"in e&&"string"==typeof e.swapXdr)(e)?I(O(e.swapXdr)):(e=>"bytes"in e&&("string"==typeof e.bytes||e.bytes instanceof Uint8Array))(e)?"string"==typeof e.bytes?I(O(e.bytes)):I(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 r=0;for(const[e,o]of t.paths.entries()){if(!o||"number"!=typeof o.splitPpm||o.splitPpm<=0||!Array.isArray(o.hops)||0===o.hops.length)throw new Error(`Stellar builder: \`steps.paths[${e}]\` must have splitPpm > 0 and a non-empty hops array`);r+=o.splitPpm;for(const[t,r]of o.hops.entries())if(!r||"string"!=typeof r.amountOut||"string"!=typeof r.pool||"string"!=typeof r.tokenIn||"string"!=typeof r.tokenOut||!p.includes(r.venue))throw new Error(`Stellar builder: \`steps.paths[${e}].hops[${t}]\` must have amountOut, pool, tokenIn, tokenOut, and a valid Soroban venue`)}if(1e6!==r)throw new Error(`Stellar builder: \`steps.paths[].splitPpm\` must sum to 1_000_000, got ${r}`);return t})(e),d.xdr.ScVal.scvBytes(Buffer.from(A(t).toXDR("base64"),"base64")));var t,r;throw new Error("Stellar builder: `steps` must be opaque strategy bytes (`routeXdr`, base64/hex string, or Uint8Array)")},L=e=>{if("string"==typeof e)return(e=>{const t=e.startsWith("0x")?e.slice(2):e,r=Buffer.from(t,"hex");return d.xdr.ScVal.scvBytes(r)})(e);if(e instanceof Uint8Array)return d.xdr.ScVal.scvBytes(Buffer.from(e));throw new Error("Stellar builder: `data` must be a hex string or Uint8Array (Soroban Bytes payload)")};function $(e,t,r){const o=e.controllerAddress??i(e.network),a=new d.Contract(o),n=new d.Account(e.caller,e.sourceSequence);return{xdr:new d.TransactionBuilder(n,{fee:e.fee??d.BASE_FEE,networkPassphrase:l[e.network]}).addOperation(a.call(t,...r)).setTimeout(e.timeoutSeconds??300).build().toXDR()}}function N(e,t){const r=t.accountNonce??0,o=t.spokeId??0;return $(e,"supply",[m(e.caller),b(r),S(o),E([...t.assets])])}function U(e,t){return N(e,{accountNonce:t.accountNonce,spokeId:t.spokeId,assets:[{hubId:t.hubId,asset:t.asset,amount:t.amount}]})}function G(e,t){return $(e,"borrow",[m(e.caller),b(t.accountNonce),E([...t.borrows]),x(t.to,m)])}function C(e,t){return G(e,{accountNonce:t.accountNonce,borrows:[{hubId:t.hubId,asset:t.asset,amount:t.amount}],to:t.to})}function q(e,t){return $(e,"withdraw",[m(e.caller),b(t.accountNonce),E([...t.withdrawals]),x(t.to,m)])}function D(e,t){return q(e,{accountNonce:t.accountNonce,withdrawals:[{hubId:t.hubId,asset:t.asset,amount:t.amount}],to:t.to})}function V(e,t){return $(e,"repay",[m(e.caller),b(t.accountNonce),E([...t.payments])])}function W(e,t){return V(e,{accountNonce:t.accountNonce,payments:[{hubId:t.hubId,asset:t.asset,amount:t.amount}]})}function M(e,t){return $(e,"liquidate",[m(e.caller),b(t.accountNonce),E([...t.debtPayments])])}function z(e,t){return $(e,"flash_loan",[m(e.caller),R(t.hubId,t.asset),f(t.amount),m(t.receiver),L(t.data)])}function X(e,t){return $(e,"migrate_from_blend",[m(e.caller),b(t.accountId),S(t.spokeId),S(t.hubId),m(t.blendPool),y(t.collateralTokens.map(m)),y(t.supplyTokens.map(m)),v(t.debtCaps.map((e=>({token:e.token,amount:e.cap}))))])}function F(e,t){const r=t.accountNonce??0,o=t.spokeId??0;return $(e,"multiply",[m(e.caller),b(r),S(o),R(t.collateral.hubId,t.collateral.asset),f(t.debtToFlashLoan),R(t.debt.hubId,t.debt.asset),S(t.mode),B(t.steps),x(t.initialPayment,(e=>k(e.hubId,e.asset,e.amount))),x(t.convertSwap,B)])}function H(e,t){return $(e,"swap_debt",[m(e.caller),b(t.accountNonce),R(t.existingDebt.hubId,t.existingDebt.asset),f(t.newDebtAmount),R(t.newDebt.hubId,t.newDebt.asset),B(t.steps)])}function j(e,t){return $(e,"swap_collateral",[m(e.caller),b(t.accountNonce),R(t.current.hubId,t.current.asset),f(t.fromAmount),R(t.newCollateral.hubId,t.newCollateral.asset),B(t.steps)])}function Q(e,t){return $(e,"repay_debt_with_collateral",[m(e.caller),b(t.accountNonce),R(t.collateral.hubId,t.collateral.asset),f(t.collateralAmount),R(t.debt.hubId,t.debt.asset),B(t.steps),h(t.closePosition)])}const K="/stellar-lending",Z=25,Y=encodeURIComponent,J=(e,t)=>e.fetchWithTimeout(`${K}/context`,t),ee=(e,t)=>e.fetchWithTimeout(`${K}/assets`,t),te=(e,t)=>e.fetchWithTimeout(`${K}/hubs`,t),re=(e,t)=>e.fetchWithTimeout(`${K}/spokes`,t),oe=(e,t={},r)=>{const{hubId:o,spokeId:a,asset:n}=t;return e.fetchWithTimeout(`${K}/reserves`,{...r,params:{...void 0!==o?{hubId:o}:{},...void 0!==a?{spokeId:a}:{},...n?{asset:n}:{}}})},ae=(e,t,r,o,a)=>e.fetchWithTimeout(`${K}/reserves/${t}/${r}/${Y(o)}`,a),ne=(e,t,r,o,a,n)=>e.fetchWithTimeout(`${K}/reserves/${t}/${r}/${Y(o)}/holders`,{...n,params:{side:a}}),se=(e,t,r)=>e.fetchWithTimeout(`${K}/assets/${Y(t)}`,r),le=(e,t,r,o)=>e.fetchWithTimeout(`${K}/assets/${Y(t)}/page`,{...o,params:{...r}}),ie=(e,t,r,o)=>e.fetchWithTimeout(`${K}/assets/${Y(t)}/markets`,{...o,params:{side:r}}),ue=(e,t,r)=>e.fetchWithTimeout(`${K}/hubs/${t}`,r),ce=(e,t,r)=>e.fetchWithTimeout(`${K}/spokes/${t}`,r),de=(e,t,r)=>e.fetchWithTimeout(`${K}/users/${Y(t)}/positions`,r),pe=(e,t,r={},o)=>{const{skip:a,top:n}=r;return e.fetchWithTimeout(`${K}/users/${Y(t)}/activity`,{...o,params:{...void 0!==a?{skip:a}:{},...void 0!==n?{top:n}:{}}})},me=(e,t,r)=>e.fetchWithTimeout(`${K}/accounts/${Y(t)}/positions`,r),fe=(e,t={},r)=>{const{top:o=Z,continuationToken:a}=t;return e.fetchWithTimeout(`${K}/governance/proposals`,{...r,params:{top:o,...a?{continuationToken:a}:{}}})},Se=(e,t,r,o)=>e.fetchWithTimeout(`${K}/assets/${Y(t)}/graph`,{...o,params:{...r}}),be=(e,t,r,o)=>e.fetchWithTimeout(`${K}/hubs/${t}/graph`,{...o,params:{...r}}),he=(e,t,r,o)=>e.fetchWithTimeout(`${K}/spokes/${t}/graph`,{...o,params:{...r}}),_e=(e,t,r,o,a,n)=>e.fetchWithTimeout(`${K}/reserves/${t}/${r}/${Y(o)}/graph`,{...n,params:{...a}}),we=e=>({context:t=>J(e,t),assets:t=>ee(e,t),hubs:t=>te(e,t),spokes:t=>re(e,t),reserves:(t,r)=>{return void 0===(o=t)||"hubId"in o||"spokeId"in o||"asset"in o?oe(e,t,r):oe(e,{},t);var o},reserve:(t,r,o,a)=>ae(e,t,r,o,a),reserveHolders:(t,r,o,a,n)=>ne(e,t,r,o,a,n),asset:(t,r)=>se(e,t,r),assetMarkets:(t,r,o)=>ie(e,t,r,o),hub:(t,r)=>ue(e,t,r),spoke:(t,r)=>ce(e,t,r),userPositions:(t,r)=>de(e,t,r),userActivity:(t,r,o)=>pe(e,t,r,o),accountPositions:(t,r)=>me(e,t,r),governanceProposals:(t,r)=>fe(e,t,r),assetGraph:(t,r,o)=>Se(e,t,r,o),hubGraph:(t,r,o)=>be(e,t,r,o),spokeGraph:(t,r,o)=>he(e,t,r,o),reserveGraph:(t,r,o,a,n)=>_e(e,t,r,o,a,n)}),ge={Single:0,PrimaryWithAnchor:1},ye=e=>P({base_borrow_rate:f(e.baseBorrowRateRay),max_borrow_rate:f(e.maxBorrowRateRay),max_utilization:f(e.maxUtilizationRay),mid_utilization:f(e.midUtilizationRay),optimal_utilization:f(e.optimalUtilizationRay),reserve_factor:S(e.reserveFactorBps),slope1:f(e.slope1Ray),slope2:f(e.slope2Ray),slope3:f(e.slope3Ray)}),Te=e=>P({asset_decimals:S(e.assetDecimals),asset_id:m(e.assetId),base_borrow_rate:f(e.baseBorrowRateRay),flashloan_fee:S(e.flashloanFeeBps),is_flashloanable:h(e.isFlashloanable),max_borrow_rate:f(e.maxBorrowRateRay),max_utilization:f(e.maxUtilizationRay),mid_utilization:f(e.midUtilizationRay),optimal_utilization:f(e.optimalUtilizationRay),reserve_factor:S(e.reserveFactorBps),slope1:f(e.slope1Ray),slope2:f(e.slope2Ray),slope3:f(e.slope3Ray)}),xe=e=>P({max_borrow_positions:S(e.maxBorrowPositions),max_supply_positions:S(e.maxSupplyPositions)}),ve=e=>{const t=e.kind;switch(t){case"Stellar":return y([w("Stellar"),m(e.value)]);case"Symbol":return y([w("Symbol"),w(e.value)]);case"String":return y([w("String"),_(e.value)]);default:throw new Error(`Stellar builder: unknown oracle asset ref kind "${t}"`)}},Re=(e,t)=>{if("Twap"===e){if("number"!=typeof t)throw new Error("Stellar builder: oracle source with Twap read mode requires `twapRecords`");return y([w("Twap"),S(t)])}return y([w("Spot")])},ke=e=>{const t=e.provider;if("ReflectorSep40"===t){if(!e.asset)throw new Error("Stellar builder: Reflector oracle source requires `asset`");return y([w("Reflector"),P({asset:ve(e.asset),contract:m(e.contract),read_mode:Re(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 y([w("RedStone"),P({contract:m(e.contract),feed_id:_(e.feedId),max_stale_seconds:b(e.maxStaleSeconds)})])}throw new Error(`Stellar builder: unknown oracle provider "${t}"`)},Ee=e=>{const t=ge[e.strategy];if(void 0===t)throw new Error(`Stellar builder: unknown oracle strategy "${e.strategy}"`);return P({anchor:(r=e.anchor,y(null==r?[w("None")]:[w("Some"),ke(r)])),max_price_stale_seconds:b(e.maxPriceStaleSeconds),max_sanity_price_wad:f(e.maxSanityPriceWad),min_sanity_price_wad:f(e.minSanityPriceWad),primary:ke(e.primary),strategy:S(t),tolerance_bps:S(e.toleranceBps)});var r};function Pe(e,t){return $(e,"upgrade",[T(t.wasmHash)])}function Ae(e,t){return $(e,"migrate",[S(t.newVersion)])}function Ie(e){return $(e,"pause",[])}function Oe(e){return $(e,"unpause",[])}function Be(e,t){return $(e,"grant_role",[m(t.account),w(t.role)])}function Le(e,t){return $(e,"revoke_role",[m(t.account),w(t.role)])}function $e(e,t){return $(e,"transfer_ownership",[m(t.newOwner),S(t.liveUntilLedger)])}function Ne(e){return $(e,"accept_ownership",[])}function Ue(e,t){return $(e,"set_aggregator",[m(t.aggregator)])}function Ge(e,t){return $(e,"set_accumulator",[m(t.accumulator)])}function Ce(e,t){return $(e,"set_liquidity_pool_template",[T(t.wasmHash)])}function qe(e,t){return $(e,"set_position_limits",[xe(t)])}function De(e,t){return $(e,"approve_token",[m(t.token)])}function Ve(e,t){return $(e,"revoke_token",[m(t.token)])}function We(e,t){return $(e,"set_market_oracle_config",[R(t.hubId,t.asset),Ee(t.config)])}function Me(e,t){return $(e,"set_oracle_tolerance",[m(t.asset),P({lower_ratio_bps:S(t.lowerRatioBps),upper_ratio_bps:S(t.upperRatioBps)})])}function ze(e,t){return $(e,"disable_token_oracle",[m(t.asset)])}function Xe(e,t){return $(e,"update_indexes",[m(e.caller),y(t.assets.map((e=>R(e.hubId,e.asset))))])}function Fe(e,t){return $(e,"renew_account",[m(e.caller),b(t.accountNonce)])}function He(e,t){return $(e,"create_liquidity_pool",[S(t.hubId),m(t.asset),Te(t.params)])}function je(e,t){return $(e,"upgrade_liquidity_pool_params",[R(t.hubId,t.asset),ye(t.params)])}function Qe(e,t){return $(e,"claim_revenue",[m(e.caller),y(t.assets.map((e=>R(e.hubId,e.asset))))])}function Ke(e,t){return $(e,"add_rewards",[m(e.caller),E(t.rewards)])}function Ze(e,t){return $(e,"update_account_threshold",[m(e.caller),h(t.hasRisks),y(t.accountNonces.map((e=>b(e))))])}const Ye="00".repeat(32),Je=e=>{if("string"==typeof e)return T(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 d.xdr.ScVal.scvBytes(t)},et=(e,...t)=>y([w(e),...t]),tt=e=>P({asset:m(e.asset),hub_id:S(e.hubId),params:Te(e.params)}),rt=e=>P({hub_asset:R(e.hubId,e.asset),params:ye(e.params)}),ot=e=>P({new_owner:m(e.newOwner),live_until_ledger:S(e.liveUntilLedger)}),at=e=>P({cfg:Ee(e.config),hub_asset:R(e.hubId,e.asset)}),nt=e=>P({asset:m(e.asset),bonus:S(e.bonus),borrow_cap:f(e.borrowCap),can_borrow:h(e.canBorrow),can_collateral:h(e.canCollateral),hub_id:S(e.hubId),liquidation_fees:S(e.liquidationFees),ltv:S(e.ltv),oracle_override:y([w("None")]),spoke_id:S(e.spokeId),supply_cap:f(e.supplyCap),threshold:S(e.threshold)}),st=e=>P({hub_asset:R(e.hubId,e.asset),spoke_id:S(e.spokeId)}),lt=e=>P({asset:m(e.asset),tolerance:S(e.tolerance)}),it=e=>P({account:m(e.account),role:w(e.role)});function ut(e,t,r){const o=e.governanceAddress??c(e.network),a=new d.Contract(o),n=new d.Account(e.caller,e.sourceSequence);return{xdr:new d.TransactionBuilder(n,{fee:e.fee??d.BASE_FEE,networkPassphrase:l[e.network]}).addOperation(a.call(t,...r)).setTimeout(e.timeoutSeconds??300).build().toXDR()}}const ct=(e,t,r)=>ut(e,"propose",[m(e.caller),t,Je(r)]),dt=(e,t,r)=>ut(e,"execute_self",[g(),t,Je(r)]);function pt(e,t,r){return ct(e,et("SetAggregator",m(t.aggregator)),r)}function mt(e,t,r){return ct(e,et("SetAccumulator",m(t.accumulator)),r)}function ft(e,t,r){return ct(e,et("SetLiquidityPoolTemplate",T(t.wasmHash)),r)}function St(e,t,r){return ct(e,et("SetPositionLimits",xe(t)),r)}function bt(e,t){return ct(e,et("CreateHub"),t)}function ht(e,t){return ct(e,et("AddSpoke"),t)}function _t(e,t,r){return ct(e,et("RemoveSpoke",S(t.spokeId)),r)}function wt(e,t,r){return ct(e,et("AddAssetToSpoke",nt(t)),r)}function gt(e,t,r){return ct(e,et("EditAssetInSpoke",nt(t)),r)}function yt(e,t,r){return ct(e,et("RemoveAssetFromSpoke",st(t)),r)}function Tt(e,t,r){return ct(e,et("SetPositionManager",m(t.manager),h(t.isActive)),r)}function xt(e,t,r){return ct(e,et("SetMinBorrowCollateralUsd",f(t.floorWad)),r)}function vt(e,t,r){return ct(e,et("ApproveToken",m(t.token)),r)}function Rt(e,t,r){return ct(e,et("RevokeToken",m(t.token)),r)}function kt(e,t,r){return ct(e,et("ApproveBlendPool",m(t.pool)),r)}function Et(e,t,r){return ct(e,et("RevokeBlendPool",m(t.pool)),r)}function Pt(e,t,r){return ct(e,et("CreateLiquidityPool",tt(t)),r)}function At(e,t,r){return ct(e,et("UpgradeLiquidityPoolParams",rt(t)),r)}function It(e,t){return ct(e,et("DeployPool"),t)}function Ot(e,t,r){return ct(e,et("UpgradePool",T(t.wasmHash)),r)}function Bt(e,t,r){return ct(e,et("DisableTokenOracle",m(t.asset)),r)}function Lt(e,t,r){return ct(e,et("UpgradeController",T(t.wasmHash)),r)}function $t(e,t,r){return ct(e,et("MigrateController",S(t.newVersion)),r)}function Nt(e,t,r){return ct(e,et("TransferCtrlOwnership",ot(t)),r)}function Ut(e,t,r){return ct(e,et("ConfigureMarketOracle",at(t)),r)}function Gt(e,t,r){return ct(e,et("EditOracleTolerance",lt(t)),r)}function Ct(e,t,r){return ct(e,et("UpgradeGov",T(t.wasmHash)),r)}function qt(e,t,r){return ct(e,et("UpdateGovDelay",S(t.newDelay)),r)}function Dt(e,t,r){return ct(e,et("GrantGovRole",it(t)),r)}function Vt(e,t,r){return ct(e,et("RevokeGovRole",it(t)),r)}function Wt(e,t,r){return ct(e,et("TransferGovOwnership",ot(t)),r)}function Mt(e,t){const r=y(t.argsXdr.map((e=>d.xdr.ScVal.fromXDR(e,"base64")))),o=Je(t.predecessor??Ye);return ut(e,"execute",[g(),m(t.target),w(t.functionName),r,o,Je(t.salt)])}function zt(e,t,r){return dt(e,et("UpgradeGov",T(t.wasmHash)),r)}function Xt(e,t,r){return dt(e,et("UpdateGovDelay",S(t.newDelay)),r)}function Ft(e,t,r){return dt(e,et("GrantGovRole",it(t)),r)}function Ht(e,t,r){return dt(e,et("RevokeGovRole",it(t)),r)}function jt(e,t,r){return dt(e,et("TransferGovOwnership",ot(t)),r)}const Qt=e=>e.toXDR("base64"),Kt=e=>d.xdr.ScVal.fromXDR(e,"base64"),Zt=e=>e.map((e=>String((0,d.scValToNative)(Kt(e))))).join(":"),Yt=e=>"bigint"==typeof e||"number"==typeof e?e.toString():String(e),Jt=e=>Number(e),er=e=>String(e),tr=e=>null==e?void 0:Yt(e),rr=e=>null==e?void 0:er(e),or=e=>e instanceof Uint8Array?Buffer.from(e).toString("hex"):Buffer.isBuffer(e)?e.toString("hex"):String(e),ar=["None","Multiply","Long","Short"],nr=["Single","PrimaryWithAnchor"],sr=["ReflectorSep40","RedStonePriceFeed"],lr=["Spot","Twap"],ir=["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"],ur=e=>Array.isArray(e)?e:[],cr=(e,t)=>{const r="Borrow"===t;return{action:(o=e[0],ir[Jt(o)]??Yt(o)),positionType:t,hubId:Jt(e[1]),asset:er(e[2]),scaledAmountRay:Yt(e[3]),indexRay:Yt(e[4]),amount:Yt(e[5]),liquidationThresholdBps:r?void 0:Jt(e[6]),liquidationBonusBps:r?void 0:Jt(e[7]),loanToValueBps:r?void 0:Jt(e[8]),liquidationFeesBps:r?void 0:Jt(e[9])};var o},dr=e=>{return{owner:er(e[0]),spokeId:Jt(e[1]),mode:(t=e[2],ar[Jt(t)]??"None")};var t},pr=(e,t)=>{const r=lr[Jt(e[`${t}_read_mode`])]??"Spot",o=e[`${t}_asset`],a=e[`${t}_symbol`],n=null!=o?{kind:"Stellar",value:er(o)}:null!=a?{kind:"Symbol",value:er(a)}:void 0;return{provider:sr[Jt(e[`${t}_provider`])]??"ReflectorSep40",contractAddress:er(e[`${t}_contract`]),asset:n,feedId:rr(e[`${t}_feed_id`]),readMode:r,twapRecords:"Twap"===r?Jt(e[`${t}_twap_records`]):void 0,decimals:Jt(e[`${t}_decimals`]),resolutionSeconds:Jt(e[`${t}_resolution_seconds`]),maxStaleSeconds:Jt(e[`${t}_max_stale_seconds`])}},mr=e=>{const t=null!==e.anchor_provider&&void 0!==e.anchor_provider;return{baseTokenId:er(e.base_token_id),quoteTokenId:er(e.quote_token_id),tolerance:{upperRatio:Jt(e.upper_ratio_bps??e.tolerance?.upper_ratio_bps),lowerRatio:Jt(e.lower_ratio_bps??e.tolerance?.lower_ratio_bps)},assetDecimals:Jt(e.asset_decimals),maxPriceStaleSeconds:Jt(e.max_price_stale_seconds),strategy:nr[Jt(e.strategy)]??"Single",primary:pr(e,"primary"),anchor:t?pr(e,"anchor"):void 0,primaryQuoteToken:rr(e.primary_quote_token),anchorQuoteToken:rr(e.anchor_quote_token),minSanityPriceWad:tr(e.min_sanity_price_wad),maxSanityPriceWad:tr(e.max_sanity_price_wad)}},fr={"market:create":e=>({topic:"market:create",data:{hubId:Jt(e.hub_id),baseAsset:er(e.base_asset),maxBorrowRate:Yt(e.max_borrow_rate),baseBorrowRate:Yt(e.base_borrow_rate),slope1:Yt(e.slope1),slope2:Yt(e.slope2),slope3:Yt(e.slope3),midUtilization:Yt(e.mid_utilization),optimalUtilization:Yt(e.optimal_utilization),maxUtilization:Yt(e.max_utilization),reserveFactor:Jt(e.reserve_factor),marketAddress:er(e.market_address)}}),"market:params_update":e=>({topic:"market:params_update",data:{asset:er(e.asset),maxBorrowRateRay:Yt(e.max_borrow_rate),baseBorrowRateRay:Yt(e.base_borrow_rate),slope1Ray:Yt(e.slope1),slope2Ray:Yt(e.slope2),slope3Ray:Yt(e.slope3),midUtilizationRay:Yt(e.mid_utilization),optimalUtilizationRay:Yt(e.optimal_utilization),maxUtilizationRay:Yt(e.max_utilization),reserveFactorBps:Jt(e.reserve_factor)}}),"market:batch_state_update":e=>({topic:"market:batch_state_update",data:{updates:ur(e).map((e=>{return t=ur(e),{hubId:Jt(t[0]),asset:er(t[1]),timestamp:Jt(t[2]),supplyIndexRay:Yt(t[3]),borrowIndexRay:Yt(t[4]),cash:Yt(t[5]),suppliedRay:Yt(t[6]),borrowedRay:Yt(t[7]),revenueRay:Yt(t[8])};var t}))}}),"market:batch_params_update":e=>({topic:"market:batch_params_update",data:{updates:ur(e).map((e=>{const t=e;return{hubId:Jt(t.hub_id),asset:er(t.asset),params:(r=t.params,{maxBorrowRateRay:Yt(r.max_borrow_rate),baseBorrowRateRay:Yt(r.base_borrow_rate),slope1Ray:Yt(r.slope1),slope2Ray:Yt(r.slope2),slope3Ray:Yt(r.slope3),midUtilizationRay:Yt(r.mid_utilization),optimalUtilizationRay:Yt(r.optimal_utilization),maxUtilizationRay:Yt(r.max_utilization),reserveFactorBps:Jt(r.reserve_factor),isFlashloanable:Boolean(r.is_flashloanable),flashloanFeeBps:Jt(r.flashloan_fee),assetId:er(r.asset_id),assetDecimals:Jt(r.asset_decimals)})};var r}))}}),"position:batch_update":e=>{const t=ur(e);return{topic:"position:batch_update",data:{accountId:Yt(t[0]),accountAttributes:dr(ur(t[1])),updates:[...ur(t[2]).map((e=>cr(ur(e),"Deposit"))),...ur(t[3]).map((e=>cr(ur(e),"Borrow")))]}}},"position:flash_loan":e=>({topic:"position:flash_loan",data:{hubId:Jt(e.hub_id),asset:er(e.asset),receiver:er(e.receiver),caller:er(e.caller),amount:Yt(e.amount),fee:Yt(e.fee)}}),"config:oracle":e=>({topic:"config:oracle",data:{asset:er(e.asset),oracle:mr(e.oracle)}}),"position:liquidation":e=>({topic:"position:liquidation",data:{liquidator:er(e.liquidator),accountId:Yt(e.account_id),repaidUsdWad:Yt(e.repaid_usd_wad),bonusBps:Yt(e.bonus_bps)}}),"debt:bad_debt":e=>({topic:"debt:bad_debt",data:{accountId:Yt(e.account_id),totalBorrowUsdWad:Yt(e.total_borrow_usd_wad),totalCollateralUsdWad:Yt(e.total_collateral_usd_wad)}}),"strategy:initial_payment":e=>({topic:"strategy:initial_payment",data:{token:er(e.token),amount:Yt(e.amount),usdValueWad:Yt(e.usd_value_wad),accountId:Yt(e.account_id)}}),"strategy:fee":e=>({topic:"strategy:fee",data:{hubId:Jt(e.hub_id),asset:er(e.asset),amount:Yt(e.amount),fee:Yt(e.fee),amountSent:Yt(e.amount_sent)}}),"config:approve_token":e=>({topic:"config:approve_token",data:{wasmHash:or(e.wasm_hash),approved:Boolean(e.approved)}}),"config:aggregator":e=>({topic:"config:aggregator",data:{aggregator:er(e.aggregator)}}),"config:accumulator":e=>({topic:"config:accumulator",data:{accumulator:er(e.accumulator)}}),"config:pool_template":e=>({topic:"config:pool_template",data:{wasmHash:or(e.wasm_hash)}}),"config:position_limits":e=>({topic:"config:position_limits",data:{maxSupplyPositions:Jt(e.max_supply_positions),maxBorrowPositions:Jt(e.max_borrow_positions)}}),"config:oracle_disabled":e=>({topic:"config:oracle_disabled",data:{asset:er(e.asset)}}),"config:spoke":e=>{const t=e.spoke;return{topic:"config:spoke",data:{spokeId:Jt(t.spoke_id),isDeprecated:Boolean(t.is_deprecated),liquidationTargetHfWad:Yt(t.liquidation_target_hf_wad),healthFactorForMaxBonusWad:Yt(t.hf_for_max_bonus_wad),liquidationBonusFactorBps:Jt(t.liquidation_bonus_factor_bps)}}}},Sr=Object.freeze(Object.keys(fr));function br(e,t){const r=Zt(e),o=fr[r];return o?o((0,d.scValToNative)(Kt(t))):null}const hr="XLENDXLM-a7c9f3",_r=1e4;function wr(e){const t=BigInt(e).toString(16),r=t.length%2==0?t:`0${t}`;return`${hr}-${r}`}function gr(e){const t=e.split("-");return t.length>=2&&parseInt(t[1],10)||0}function yr(e,t=0){return e*_r+t}function Tr(e){switch(e){case"liq_repay":return"lendingLiquidateRepayDebt";case"liq_seize":return"lendingLiquidateSeizeCollateral";case"param_upd":return"lendingUpdateAccountParameters";default:return"lendingUpdateAccountPosition"}}const xr=(e,t,r)=>{const o=new URL(t,e.endsWith("/")?e:`${e}/`);if(r)for(const[e,t]of Object.entries(r))void 0!==t&&o.searchParams.set(e,String(t));return o.toString()},vr=e=>e.baseUrl??s[e.network];async function Rr(e,t){if(null==e.amountIn==(null==e.amountOut))throw new Error("getStellarAggregatorQuote: exactly one of `amountIn` or `amountOut` must be provided");const r=xr(vr(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}),o=await fetch(r,t.fetchOptions);if(!o.ok){const e=await o.text().catch((()=>""));throw new Error(`Stellar quote server responded ${o.status} ${o.statusText} for ${r} — ${e}`)}return await o.json()}async function kr(e){const t=xr(vr(e),"api/v1/tokens"),r=await fetch(t,e.fetchOptions);if(!r.ok){const e=await r.text().catch((()=>""));throw new Error(`Stellar quote server responded ${r.status} ${r.statusText} for ${t} — ${e}`)}return await r.json()}const Er=(e,t)=>(e=>Boolean(e&&"object"==typeof e&&!(e instanceof Uint8Array)&&"paths"in e))(e)&&void 0===e.referralId?{...e,referralId:t??0}:e,Pr=e=>A(e).toXDR("base64");function Ar(e,t){const r=e.routerAddress??u(e.network),o=new d.Contract(r),a=new d.Account(e.caller,e.sourceSequence),n=B(Er(t,e.referralId));return{xdr:new d.TransactionBuilder(a,{fee:e.fee??d.BASE_FEE,networkPassphrase:l[e.network]}).addOperation(o.call("execute_strategy",m(e.caller),f(e.totalIn),n)).setTimeout(e.timeoutSeconds??300).build().toXDR()}}function Ir(e,t){return Ar(e,t)}function Or(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($r),splitPpm:e.splitPpm}))):[{hops:e.hops.map($r),splitPpm:1e6}],referralId:t.referralId??0,tokenIn:e.from,tokenOut:e.to,totalMinOut:e.amountOutMin}}function Br(e,t={}){const r=e;return"string"==typeof r.routeXdr&&r.routeXdr.length>0?{routeXdr:r.routeXdr}:Or(e,t)}const Lr=Or,$r=e=>({amountOut:e.amountOut,pool:e.address,tokenIn:e.from,tokenOut:e.to,venue:e.dex});function Nr(e,t){const r=t instanceof Error?t.message:String(t);return new Error(`[xoxno-invoked:${e}] ${r}`)}async function Ur(e,t,r){const o=d.TransactionBuilder.fromXDR(t,"base64");try{return(await e.prepareTransaction(o)).toXDR()}catch(e){if(r?.invokedContractId)throw Nr(r.invokedContractId,e);throw e}}async function Gr(e,t,r){return Ur(e,t.xdr,r)}function Cr(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 qr(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 Dr=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 Vr(e){const t=new d.Account(e.caller,e.sourceSequence),r=new d.Contract(e.forwarderAddress).call("mint_and_forward",d.xdr.ScVal.scvBytes(Dr(e.message)),d.xdr.ScVal.scvBytes(Dr(e.attestation)));return{xdr:new d.TransactionBuilder(t,{fee:e.fee??"10000000",networkPassphrase:l[e.network]}).addOperation(r).setTimeout(e.timeoutSeconds??120).build().toXDR()}}module.exports=t})();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
"undefined"!=typeof globalThis&&void 0===globalThis.self&&(globalThis.self=globalThis);import{Account as e,Address as t,BASE_FEE as r,Contract as o,ScInt as a,TransactionBuilder as n,scValToNative as s,xdr as i}from"@stellar/stellar-sdk";const u={mainnet:process.env.STELLAR_LENDING_CONTROLLER_MAINNET??"",testnet:process.env.STELLAR_LENDING_CONTROLLER_TESTNET??""},l={mainnet:process.env.STELLAR_AGGREGATOR_ROUTER_MAINNET??"",testnet:process.env.STELLAR_AGGREGATOR_ROUTER_TESTNET??""},c={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"},m={mainnet:"Public Global Stellar Network ; September 2015",testnet:"Test SDF Network ; September 2015"};function f(e){const t=u[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 h(e){const t=l[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 _(e){const t=c[e];if(!t)throw new Error(`Stellar governance address not configured for network "${e}". Set STELLAR_GOVERNANCE_${e.toUpperCase()} env var.`);return t}const w=["Soroswap","Aquarius","Phoenix","Sushi","CometDex"],b=e=>new t(e).toScVal(),y=e=>new a(e).toI128(),g=e=>i.ScVal.scvU32(e),S=e=>new a("string"==typeof e?e:e.toString()).toU64(),v=e=>i.ScVal.scvBool(e),k=e=>i.ScVal.scvString(e),R=e=>i.ScVal.scvSymbol(e),x=()=>i.ScVal.scvVoid(),I=e=>i.ScVal.scvVec(e),T=(e,t=32)=>{const r=e.startsWith("0x")?e.slice(2):e,o=Buffer.from(r,"hex");if(o.length!==t)throw new Error(`Stellar builder: expected a ${t}-byte BytesN (got ${o.length} bytes from "${e}")`);return i.ScVal.scvBytes(o)},$=(e,t)=>null==e?x():t(e),E=(e,t)=>O({asset:b(t),hub_id:g(e)}),A=(e,t,r)=>i.ScVal.scvVec([E(e,t),y(r)]),B=e=>i.ScVal.scvVec(e.map((e=>A(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:y(e.amountOut),pool:b(e.pool),token_in:b(e.tokenIn),token_out:b(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:S(e.referralId??0),token_in:b(e.tokenIn),token_out:b(e.tokenOut),total_min_out:y(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)},U=e=>{const t=e.trim();if(t.startsWith("0x")){const e=t.slice(2);if(!((r=e).length>0&&r.length%2==0&&/^[0-9a-fA-F]+$/.test(r)))throw new Error("Stellar builder: strategy swap bytes hex string must be 0x-prefixed and even-length");return Buffer.from(e,"hex")}var r;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 o=Buffer.from(t,"base64");if(0===o.length)throw new Error("Stellar builder: strategy swap bytes must be non-empty base64 routeXdr, 0x hex string, or Uint8Array");return o},L=e=>{if("string"==typeof e)return P(U(e));if(e instanceof Uint8Array)return P(e);if(e&&"object"==typeof e)return"routeXdr"in(r=e)&&"string"==typeof r.routeXdr?P(U(e.routeXdr)):(e=>"swapXdr"in e&&"string"==typeof e.swapXdr)(e)?P(U(e.swapXdr)):(e=>"bytes"in e&&("string"==typeof e.bytes||e.bytes instanceof Uint8Array))(e)?"string"==typeof e.bytes?P(U(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 r=0;for(const[e,o]of t.paths.entries()){if(!o||"number"!=typeof o.splitPpm||o.splitPpm<=0||!Array.isArray(o.hops)||0===o.hops.length)throw new Error(`Stellar builder: \`steps.paths[${e}]\` must have splitPpm > 0 and a non-empty hops array`);r+=o.splitPpm;for(const[t,r]of o.hops.entries())if(!r||"string"!=typeof r.amountOut||"string"!=typeof r.pool||"string"!=typeof r.tokenIn||"string"!=typeof r.tokenOut||!w.includes(r.venue))throw new Error(`Stellar builder: \`steps.paths[${e}].hops[${t}]\` must have amountOut, pool, tokenIn, tokenOut, and a valid Soroban venue`)}if(1e6!==r)throw new Error(`Stellar builder: \`steps.paths[].splitPpm\` must sum to 1_000_000, got ${r}`);return t})(e),i.ScVal.scvBytes(Buffer.from(N(t).toXDR("base64"),"base64")));var t,r;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,r=Buffer.from(t,"hex");return i.ScVal.scvBytes(r)})(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 V(t,a,s){const i=t.controllerAddress??f(t.network),u=new o(i),l=new e(t.caller,t.sourceSequence);return{xdr:new n(l,{fee:t.fee??r,networkPassphrase:m[t.network]}).addOperation(u.call(a,...s)).setTimeout(t.timeoutSeconds??300).build().toXDR()}}function W(e,t){const r=t.accountNonce??0,o=t.spokeId??0;return V(e,"supply",[b(e.caller),S(r),g(o),B([...t.assets])])}function z(e,t){return W(e,{accountNonce:t.accountNonce,spokeId:t.spokeId,assets:[{hubId:t.hubId,asset:t.asset,amount:t.amount}]})}function C(e,t){return V(e,"borrow",[b(e.caller),S(t.accountNonce),B([...t.borrows]),$(t.to,b)])}function D(e,t){return C(e,{accountNonce:t.accountNonce,borrows:[{hubId:t.hubId,asset:t.asset,amount:t.amount}],to:t.to})}function G(e,t){return V(e,"withdraw",[b(e.caller),S(t.accountNonce),B([...t.withdrawals]),$(t.to,b)])}function X(e,t){return G(e,{accountNonce:t.accountNonce,withdrawals:[{hubId:t.hubId,asset:t.asset,amount:t.amount}],to:t.to})}function M(e,t){return V(e,"repay",[b(e.caller),S(t.accountNonce),B([...t.payments])])}function F(e,t){return M(e,{accountNonce:t.accountNonce,payments:[{hubId:t.hubId,asset:t.asset,amount:t.amount}]})}function H(e,t){return V(e,"liquidate",[b(e.caller),S(t.accountNonce),B([...t.debtPayments])])}function j(e,t){return V(e,"flash_loan",[b(e.caller),E(t.hubId,t.asset),y(t.amount),b(t.receiver),q(t.data)])}function Q(e,t){return V(e,"migrate_from_blend",[b(e.caller),S(t.accountId),g(t.spokeId),g(t.hubId),b(t.blendPool),I(t.collateralTokens.map(b)),I(t.supplyTokens.map(b)),(r=t.debtCaps.map((e=>({token:e.token,amount:e.cap}))),i.ScVal.scvVec(r.map((e=>{return t=e.token,r=e.amount,i.ScVal.scvVec([b(t),y(r)]);var t,r}))))]);var r}function Z(e,t){const r=t.accountNonce??0,o=t.spokeId??0;return V(e,"multiply",[b(e.caller),S(r),g(o),E(t.collateral.hubId,t.collateral.asset),y(t.debtToFlashLoan),E(t.debt.hubId,t.debt.asset),g(t.mode),L(t.steps),$(t.initialPayment,(e=>A(e.hubId,e.asset,e.amount))),$(t.convertSwap,L)])}function J(e,t){return V(e,"swap_debt",[b(e.caller),S(t.accountNonce),E(t.existingDebt.hubId,t.existingDebt.asset),y(t.newDebtAmount),E(t.newDebt.hubId,t.newDebt.asset),L(t.steps)])}function K(e,t){return V(e,"swap_collateral",[b(e.caller),S(t.accountNonce),E(t.current.hubId,t.current.asset),y(t.fromAmount),E(t.newCollateral.hubId,t.newCollateral.asset),L(t.steps)])}function Y(e,t){return V(e,"repay_debt_with_collateral",[b(e.caller),S(t.accountNonce),E(t.collateral.hubId,t.collateral.asset),y(t.collateralAmount),E(t.debt.hubId,t.debt.asset),L(t.steps),v(t.closePosition)])}const ee="/stellar-lending",te=25,re=encodeURIComponent,oe=(e,t)=>e.fetchWithTimeout(`${ee}/context`,t),ae=(e,t)=>e.fetchWithTimeout(`${ee}/assets`,t),ne=(e,t)=>e.fetchWithTimeout(`${ee}/hubs`,t),se=(e,t)=>e.fetchWithTimeout(`${ee}/spokes`,t),ie=(e,t={},r)=>{const{hubId:o,spokeId:a,asset:n}=t;return e.fetchWithTimeout(`${ee}/reserves`,{...r,params:{...void 0!==o?{hubId:o}:{},...void 0!==a?{spokeId:a}:{},...n?{asset:n}:{}}})},ue=(e,t,r,o,a)=>e.fetchWithTimeout(`${ee}/reserves/${t}/${r}/${re(o)}`,a),le=(e,t,r,o,a,n)=>e.fetchWithTimeout(`${ee}/reserves/${t}/${r}/${re(o)}/holders`,{...n,params:{side:a}}),ce=(e,t,r)=>e.fetchWithTimeout(`${ee}/assets/${re(t)}`,r),pe=(e,t,r,o)=>e.fetchWithTimeout(`${ee}/assets/${re(t)}/page`,{...o,params:{...r}}),de=(e,t,r,o)=>e.fetchWithTimeout(`${ee}/assets/${re(t)}/markets`,{...o,params:{side:r}}),me=(e,t,r)=>e.fetchWithTimeout(`${ee}/hubs/${t}`,r),fe=(e,t,r)=>e.fetchWithTimeout(`${ee}/spokes/${t}`,r),he=(e,t,r)=>e.fetchWithTimeout(`${ee}/users/${re(t)}/positions`,r),_e=(e,t,r={},o)=>{const{skip:a,top:n}=r;return e.fetchWithTimeout(`${ee}/users/${re(t)}/activity`,{...o,params:{...void 0!==a?{skip:a}:{},...void 0!==n?{top:n}:{}}})},we=(e,t,r)=>e.fetchWithTimeout(`${ee}/accounts/${re(t)}/positions`,r),be=(e,t={},r)=>{const{top:o=te,continuationToken:a}=t;return e.fetchWithTimeout(`${ee}/governance/proposals`,{...r,params:{top:o,...a?{continuationToken:a}:{}}})},ye=(e,t,r,o)=>e.fetchWithTimeout(`${ee}/assets/${re(t)}/graph`,{...o,params:{...r}}),ge=(e,t,r,o)=>e.fetchWithTimeout(`${ee}/hubs/${t}/graph`,{...o,params:{...r}}),Se=(e,t,r,o)=>e.fetchWithTimeout(`${ee}/spokes/${t}/graph`,{...o,params:{...r}}),ve=(e,t,r,o,a,n)=>e.fetchWithTimeout(`${ee}/reserves/${t}/${r}/${re(o)}/graph`,{...n,params:{...a}}),ke=e=>({context:t=>oe(e,t),assets:t=>ae(e,t),hubs:t=>ne(e,t),spokes:t=>se(e,t),reserves:(t,r)=>{return void 0===(o=t)||"hubId"in o||"spokeId"in o||"asset"in o?ie(e,t,r):ie(e,{},t);var o},reserve:(t,r,o,a)=>ue(e,t,r,o,a),reserveHolders:(t,r,o,a,n)=>le(e,t,r,o,a,n),asset:(t,r)=>ce(e,t,r),assetMarkets:(t,r,o)=>de(e,t,r,o),hub:(t,r)=>me(e,t,r),spoke:(t,r)=>fe(e,t,r),userPositions:(t,r)=>he(e,t,r),userActivity:(t,r,o)=>_e(e,t,r,o),accountPositions:(t,r)=>we(e,t,r),governanceProposals:(t,r)=>be(e,t,r),assetGraph:(t,r,o)=>ye(e,t,r,o),hubGraph:(t,r,o)=>ge(e,t,r,o),spokeGraph:(t,r,o)=>Se(e,t,r,o),reserveGraph:(t,r,o,a,n)=>ve(e,t,r,o,a,n)}),Re={Single:0,PrimaryWithAnchor:1},xe=e=>O({base_borrow_rate:y(e.baseBorrowRateRay),max_borrow_rate:y(e.maxBorrowRateRay),max_utilization:y(e.maxUtilizationRay),mid_utilization:y(e.midUtilizationRay),optimal_utilization:y(e.optimalUtilizationRay),reserve_factor:g(e.reserveFactorBps),slope1:y(e.slope1Ray),slope2:y(e.slope2Ray),slope3:y(e.slope3Ray)}),Ie=e=>O({asset_decimals:g(e.assetDecimals),asset_id:b(e.assetId),base_borrow_rate:y(e.baseBorrowRateRay),borrow_cap:y(e.borrowCap),flashloan_fee:g(e.flashloanFeeBps),is_flashloanable:v(e.isFlashloanable),max_borrow_rate:y(e.maxBorrowRateRay),max_utilization:y(e.maxUtilizationRay),mid_utilization:y(e.midUtilizationRay),optimal_utilization:y(e.optimalUtilizationRay),reserve_factor:g(e.reserveFactorBps),slope1:y(e.slope1Ray),slope2:y(e.slope2Ray),slope3:y(e.slope3Ray),supply_cap:y(e.supplyCap)}),Te=e=>O({max_borrow_positions:g(e.maxBorrowPositions),max_supply_positions:g(e.maxSupplyPositions)}),$e=e=>{const t=e.kind;switch(t){case"Stellar":return I([R("Stellar"),b(e.value)]);case"Symbol":return I([R("Symbol"),R(e.value)]);case"String":return I([R("String"),k(e.value)]);default:throw new Error(`Stellar builder: unknown oracle asset ref kind "${t}"`)}},Ee=(e,t)=>{if("Twap"===e){if("number"!=typeof t)throw new Error("Stellar builder: oracle source with Twap read mode requires `twapRecords`");return I([R("Twap"),g(t)])}return I([R("Spot")])},Ae=e=>{const t=e.provider;if("ReflectorSep40"===t){if(!e.asset)throw new Error("Stellar builder: Reflector oracle source requires `asset`");return I([R("Reflector"),O({asset:$e(e.asset),contract:b(e.contract),read_mode:Ee(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 I([R("RedStone"),O({contract:b(e.contract),feed_id:k(e.feedId),max_stale_seconds:S(e.maxStaleSeconds)})])}throw new Error(`Stellar builder: unknown oracle provider "${t}"`)},Be=e=>{const t=Re[e.strategy];if(void 0===t)throw new Error(`Stellar builder: unknown oracle strategy "${e.strategy}"`);return O({anchor:(r=e.anchor,I(null==r?[R("None")]:[R("Some"),Ae(r)])),max_price_stale_seconds:S(e.maxPriceStaleSeconds),max_sanity_price_wad:y(e.maxSanityPriceWad),min_sanity_price_wad:y(e.minSanityPriceWad),primary:Ae(e.primary),strategy:g(t),tolerance_bps:g(e.toleranceBps)});var r};function Oe(e,t){return V(e,"upgrade",[T(t.wasmHash)])}function Ne(e,t){return V(e,"migrate",[g(t.newVersion)])}function Pe(e){return V(e,"pause",[])}function Ue(e){return V(e,"unpause",[])}function Le(e,t){return V(e,"grant_role",[b(t.account),R(t.role)])}function qe(e,t){return V(e,"revoke_role",[b(t.account),R(t.role)])}function Ve(e,t){return V(e,"transfer_ownership",[b(t.newOwner),g(t.liveUntilLedger)])}function We(e){return V(e,"accept_ownership",[])}function ze(e,t){return V(e,"set_aggregator",[b(t.aggregator)])}function Ce(e,t){return V(e,"set_accumulator",[b(t.accumulator)])}function De(e,t){return V(e,"set_liquidity_pool_template",[T(t.wasmHash)])}function Ge(e,t){return V(e,"set_position_limits",[Te(t)])}function Xe(e,t){return V(e,"update_pool_caps",[E(t.hubId,t.asset),y(t.supplyCap),y(t.borrowCap)])}function Me(e,t){return V(e,"approve_token",[b(t.token)])}function Fe(e,t){return V(e,"revoke_token",[b(t.token)])}function He(e,t){return V(e,"set_market_oracle_config",[E(t.hubId,t.asset),Be(t.config)])}function je(e,t){return V(e,"set_oracle_tolerance",[b(t.asset),O({lower_ratio_bps:g(t.lowerRatioBps),upper_ratio_bps:g(t.upperRatioBps)})])}function Qe(e,t){return V(e,"disable_token_oracle",[b(t.asset)])}function Ze(e,t){return V(e,"update_indexes",[b(e.caller),I(t.assets.map((e=>E(e.hubId,e.asset))))])}function Je(e,t){return V(e,"renew_account",[b(e.caller),S(t.accountNonce)])}function Ke(e,t){return V(e,"create_liquidity_pool",[g(t.hubId),b(t.asset),Ie(t.params)])}function Ye(e,t){return V(e,"upgrade_liquidity_pool_params",[E(t.hubId,t.asset),xe(t.params)])}function et(e,t){return V(e,"claim_revenue",[b(e.caller),I(t.assets.map((e=>E(e.hubId,e.asset))))])}function tt(e,t){return V(e,"add_rewards",[b(e.caller),B(t.rewards)])}function rt(e,t){return V(e,"update_account_threshold",[b(e.caller),v(t.hasRisks),I(t.accountNonces.map((e=>S(e))))])}const ot="00".repeat(32),at=e=>{if("string"==typeof e)return T(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)},nt=(e,...t)=>I([R(e),...t]),st=e=>O({new_owner:b(e.newOwner),live_until_ledger:g(e.liveUntilLedger)}),it=e=>O({account:b(e.account),role:R(e.role)});function ut(t,a,s){const i=t.governanceAddress??_(t.network),u=new o(i),l=new e(t.caller,t.sourceSequence);return{xdr:new n(l,{fee:t.fee??r,networkPassphrase:m[t.network]}).addOperation(u.call(a,...s)).setTimeout(t.timeoutSeconds??300).build().toXDR()}}const lt=(e,t,r)=>ut(e,"propose",[b(e.caller),t,at(r)]),ct=(e,t,r)=>ut(e,"execute_self",[x(),t,at(r)]);function pt(e,t,r){return lt(e,nt("SetAggregator",b(t.aggregator)),r)}function dt(e,t,r){return lt(e,nt("SetAccumulator",b(t.accumulator)),r)}function mt(e,t,r){return lt(e,nt("SetLiquidityPoolTemplate",T(t.wasmHash)),r)}function ft(e,t,r){return lt(e,nt("SetPositionLimits",Te(t)),r)}function ht(e,t,r){return lt(e,nt("SetMinBorrowCollateralUsd",y(t.floorWad)),r)}function _t(e,t,r){return lt(e,nt("UpdatePoolCaps",O({borrow_cap:y((o=t).borrowCap),hub_asset:E(o.hubId,o.asset),supply_cap:y(o.supplyCap)})),r);var o}function wt(e,t,r){return lt(e,nt("ApproveToken",b(t.token)),r)}function bt(e,t,r){return lt(e,nt("RevokeToken",b(t.token)),r)}function yt(e,t,r){return lt(e,nt("ApproveBlendPool",b(t.pool)),r)}function gt(e,t,r){return lt(e,nt("RevokeBlendPool",b(t.pool)),r)}function St(e,t,r){return lt(e,nt("CreateLiquidityPool",O({asset:b((o=t).asset),hub_id:g(o.hubId),params:Ie(o.params)})),r);var o}function vt(e,t,r){return lt(e,nt("UpgradeLiquidityPoolParams",O({hub_asset:E((o=t).hubId,o.asset),params:xe(o.params)})),r);var o}function kt(e,t){return lt(e,nt("DeployPool"),t)}function Rt(e,t,r){return lt(e,nt("UpgradePool",T(t.wasmHash)),r)}function xt(e,t,r){return lt(e,nt("DisableTokenOracle",b(t.asset)),r)}function It(e,t,r){return lt(e,nt("UpgradeController",T(t.wasmHash)),r)}function Tt(e,t,r){return lt(e,nt("MigrateController",g(t.newVersion)),r)}function $t(e,t,r){return lt(e,nt("TransferCtrlOwnership",st(t)),r)}function Et(e,t,r){return lt(e,nt("ConfigureMarketOracle",O({cfg:Be((o=t).config),hub_asset:E(o.hubId,o.asset)})),r);var o}function At(e,t,r){return lt(e,nt("EditOracleTolerance",O({asset:b((o=t).asset),tolerance:g(o.tolerance)})),r);var o}function Bt(e,t,r){return lt(e,nt("UpgradeGov",T(t.wasmHash)),r)}function Ot(e,t,r){return lt(e,nt("UpdateGovDelay",g(t.newDelay)),r)}function Nt(e,t,r){return lt(e,nt("GrantGovRole",it(t)),r)}function Pt(e,t,r){return lt(e,nt("RevokeGovRole",it(t)),r)}function Ut(e,t,r){return lt(e,nt("TransferGovOwnership",st(t)),r)}function Lt(e,t){const r=I(t.argsXdr.map((e=>i.ScVal.fromXDR(e,"base64")))),o=at(t.predecessor??ot);return ut(e,"execute",[x(),b(t.target),R(t.functionName),r,o,at(t.salt)])}function qt(e,t,r){return ct(e,nt("UpgradeGov",T(t.wasmHash)),r)}function Vt(e,t,r){return ct(e,nt("UpdateGovDelay",g(t.newDelay)),r)}function Wt(e,t,r){return ct(e,nt("GrantGovRole",it(t)),r)}function zt(e,t,r){return ct(e,nt("RevokeGovRole",it(t)),r)}function Ct(e,t,r){return ct(e,nt("TransferGovOwnership",st(t)),r)}const Dt=e=>e.toXDR("base64"),Gt=e=>i.ScVal.fromXDR(e,"base64"),Xt=e=>e.map((e=>String(s(Gt(e))))).join(":"),Mt=e=>"bigint"==typeof e||"number"==typeof e?e.toString():String(e),Ft=e=>Number(e),Ht=e=>String(e),jt=e=>null==e?void 0:Mt(e),Qt=e=>null==e?void 0:Ht(e),Zt=e=>e instanceof Uint8Array?Buffer.from(e).toString("hex"):Buffer.isBuffer(e)?e.toString("hex"):String(e),Jt=["None","Multiply","Long","Short"],Kt=["Single","PrimaryWithAnchor"],Yt=["ReflectorSep40","RedStonePriceFeed"],er=["Spot","Twap"],tr=["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"],rr=e=>Array.isArray(e)?e:[],or=(e,t)=>{const r="Borrow"===t;return{action:(o=e[0],tr[Ft(o)]??Mt(o)),positionType:t,hubId:Ft(e[1]),asset:Ht(e[2]),scaledAmountRay:Mt(e[3]),indexRay:Mt(e[4]),amount:Mt(e[5]),liquidationThresholdBps:r?void 0:Ft(e[6]),liquidationBonusBps:r?void 0:Ft(e[7]),loanToValueBps:r?void 0:Ft(e[8]),liquidationFeesBps:r?void 0:Ft(e[9])};var o},ar=e=>{return{owner:Ht(e[0]),spokeId:Ft(e[1]),mode:(t=e[2],Jt[Ft(t)]??"None")};var t},nr=(e,t)=>{const r=er[Ft(e[`${t}_read_mode`])]??"Spot",o=e[`${t}_asset`],a=e[`${t}_symbol`],n=null!=o?{kind:"Stellar",value:Ht(o)}:null!=a?{kind:"Symbol",value:Ht(a)}:void 0;return{provider:Yt[Ft(e[`${t}_provider`])]??"ReflectorSep40",contractAddress:Ht(e[`${t}_contract`]),asset:n,feedId:Qt(e[`${t}_feed_id`]),readMode:r,twapRecords:"Twap"===r?Ft(e[`${t}_twap_records`]):void 0,decimals:Ft(e[`${t}_decimals`]),resolutionSeconds:Ft(e[`${t}_resolution_seconds`]),maxStaleSeconds:Ft(e[`${t}_max_stale_seconds`])}},sr=e=>{const t=null!==e.anchor_provider&&void 0!==e.anchor_provider;return{baseTokenId:Ht(e.base_token_id),quoteTokenId:Ht(e.quote_token_id),tolerance:{upperRatio:Ft(e.upper_ratio_bps??e.tolerance?.upper_ratio_bps),lowerRatio:Ft(e.lower_ratio_bps??e.tolerance?.lower_ratio_bps)},assetDecimals:Ft(e.asset_decimals),maxPriceStaleSeconds:Ft(e.max_price_stale_seconds),strategy:Kt[Ft(e.strategy)]??"Single",primary:nr(e,"primary"),anchor:t?nr(e,"anchor"):void 0,primaryQuoteToken:Qt(e.primary_quote_token),anchorQuoteToken:Qt(e.anchor_quote_token),minSanityPriceWad:jt(e.min_sanity_price_wad),maxSanityPriceWad:jt(e.max_sanity_price_wad)}},ir={"market:create":e=>({topic:"market:create",data:{hubId:Ft(e.hub_id),baseAsset:Ht(e.base_asset),maxBorrowRate:Mt(e.max_borrow_rate),baseBorrowRate:Mt(e.base_borrow_rate),slope1:Mt(e.slope1),slope2:Mt(e.slope2),slope3:Mt(e.slope3),midUtilization:Mt(e.mid_utilization),optimalUtilization:Mt(e.optimal_utilization),maxUtilization:Mt(e.max_utilization),reserveFactor:Ft(e.reserve_factor),marketAddress:Ht(e.market_address)}}),"market:params_update":e=>({topic:"market:params_update",data:{asset:Ht(e.asset),maxBorrowRateRay:Mt(e.max_borrow_rate),baseBorrowRateRay:Mt(e.base_borrow_rate),slope1Ray:Mt(e.slope1),slope2Ray:Mt(e.slope2),slope3Ray:Mt(e.slope3),midUtilizationRay:Mt(e.mid_utilization),optimalUtilizationRay:Mt(e.optimal_utilization),maxUtilizationRay:Mt(e.max_utilization),reserveFactorBps:Ft(e.reserve_factor)}}),"market:batch_state_update":e=>({topic:"market:batch_state_update",data:{updates:rr(e).map((e=>{return t=rr(e),{hubId:Ft(t[0]),asset:Ht(t[1]),timestamp:Ft(t[2]),supplyIndexRay:Mt(t[3]),borrowIndexRay:Mt(t[4]),cash:Mt(t[5]),suppliedRay:Mt(t[6]),borrowedRay:Mt(t[7]),revenueRay:Mt(t[8])};var t}))}}),"market:batch_params_update":e=>({topic:"market:batch_params_update",data:{updates:rr(e).map((e=>{const t=e;return{hubId:Ft(t.hub_id),asset:Ht(t.asset),params:(r=t.params,{maxBorrowRateRay:Mt(r.max_borrow_rate),baseBorrowRateRay:Mt(r.base_borrow_rate),slope1Ray:Mt(r.slope1),slope2Ray:Mt(r.slope2),slope3Ray:Mt(r.slope3),midUtilizationRay:Mt(r.mid_utilization),optimalUtilizationRay:Mt(r.optimal_utilization),maxUtilizationRay:Mt(r.max_utilization),reserveFactorBps:Ft(r.reserve_factor),supplyCap:Mt(r.supply_cap),borrowCap:Mt(r.borrow_cap),isFlashloanable:Boolean(r.is_flashloanable),flashloanFeeBps:Ft(r.flashloan_fee),assetId:Ht(r.asset_id),assetDecimals:Ft(r.asset_decimals)})};var r}))}}),"position:batch_update":e=>{const t=rr(e);return{topic:"position:batch_update",data:{accountId:Mt(t[0]),accountAttributes:ar(rr(t[1])),updates:[...rr(t[2]).map((e=>or(rr(e),"Deposit"))),...rr(t[3]).map((e=>or(rr(e),"Borrow")))]}}},"position:flash_loan":e=>({topic:"position:flash_loan",data:{hubId:Ft(e.hub_id),asset:Ht(e.asset),receiver:Ht(e.receiver),caller:Ht(e.caller),amount:Mt(e.amount),fee:Mt(e.fee)}}),"config:oracle":e=>({topic:"config:oracle",data:{asset:Ht(e.asset),oracle:sr(e.oracle)}}),"position:liquidation":e=>({topic:"position:liquidation",data:{liquidator:Ht(e.liquidator),accountId:Mt(e.account_id),repaidUsdWad:Mt(e.repaid_usd_wad),bonusBps:Mt(e.bonus_bps)}}),"debt:bad_debt":e=>({topic:"debt:bad_debt",data:{accountId:Mt(e.account_id),totalBorrowUsdWad:Mt(e.total_borrow_usd_wad),totalCollateralUsdWad:Mt(e.total_collateral_usd_wad)}}),"strategy:initial_payment":e=>({topic:"strategy:initial_payment",data:{token:Ht(e.token),amount:Mt(e.amount),usdValueWad:Mt(e.usd_value_wad),accountId:Mt(e.account_id)}}),"strategy:fee":e=>({topic:"strategy:fee",data:{hubId:Ft(e.hub_id),asset:Ht(e.asset),amount:Mt(e.amount),fee:Mt(e.fee),amountSent:Mt(e.amount_sent)}}),"config:approve_token":e=>({topic:"config:approve_token",data:{wasmHash:Zt(e.wasm_hash),approved:Boolean(e.approved)}}),"config:aggregator":e=>({topic:"config:aggregator",data:{aggregator:Ht(e.aggregator)}}),"config:accumulator":e=>({topic:"config:accumulator",data:{accumulator:Ht(e.accumulator)}}),"config:pool_template":e=>({topic:"config:pool_template",data:{wasmHash:Zt(e.wasm_hash)}}),"config:position_limits":e=>({topic:"config:position_limits",data:{maxSupplyPositions:Ft(e.max_supply_positions),maxBorrowPositions:Ft(e.max_borrow_positions)}}),"config:oracle_disabled":e=>({topic:"config:oracle_disabled",data:{asset:Ht(e.asset)}}),"config:spoke":e=>{const t=e.spoke;return{topic:"config:spoke",data:{spokeId:Ft(t.spoke_id),isDeprecated:Boolean(t.is_deprecated),liquidationTargetHfWad:Mt(t.liquidation_target_hf_wad),healthFactorForMaxBonusWad:Mt(t.hf_for_max_bonus_wad),liquidationBonusFactorBps:Ft(t.liquidation_bonus_factor_bps)}}}},ur=Object.freeze(Object.keys(ir));function lr(e,t){const r=Xt(e),o=ir[r];return o?o(s(Gt(t))):null}const cr="XLENDXLM-a7c9f3",pr=1e4;function dr(e){const t=BigInt(e).toString(16),r=t.length%2==0?t:`0${t}`;return`${cr}-${r}`}function mr(e){const t=e.split("-");return t.length>=2&&parseInt(t[1],10)||0}function fr(e,t=0){return 1e4*e+t}function hr(e){switch(e){case"liq_repay":return"lendingLiquidateRepayDebt";case"liq_seize":return"lendingLiquidateSeizeCollateral";case"param_upd":return"lendingUpdateAccountParameters";default:return"lendingUpdateAccountPosition"}}const _r=(e,t,r)=>{const o=new URL(t,e.endsWith("/")?e:`${e}/`);if(r)for(const[e,t]of Object.entries(r))void 0!==t&&o.searchParams.set(e,String(t));return o.toString()},wr=e=>e.baseUrl??d[e.network];async function br(e,t){if(null==e.amountIn==(null==e.amountOut))throw new Error("getStellarAggregatorQuote: exactly one of `amountIn` or `amountOut` must be provided");const r=_r(wr(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}),o=await fetch(r,t.fetchOptions);if(!o.ok){const e=await o.text().catch((()=>""));throw new Error(`Stellar quote server responded ${o.status} ${o.statusText} for ${r} — ${e}`)}return await o.json()}async function yr(e){const t=_r(wr(e),"api/v1/tokens"),r=await fetch(t,e.fetchOptions);if(!r.ok){const e=await r.text().catch((()=>""));throw new Error(`Stellar quote server responded ${r.status} ${r.statusText} for ${t} — ${e}`)}return await r.json()}const gr=(e,t)=>(e=>Boolean(e&&"object"==typeof e&&!(e instanceof Uint8Array)&&"paths"in e))(e)&&void 0===e.referralId?{...e,referralId:t??0}:e,Sr=e=>N(e).toXDR("base64");function vr(t,a){const s=t.routerAddress??h(t.network),i=new o(s),u=new e(t.caller,t.sourceSequence),l=L(gr(a,t.referralId));return{xdr:new n(u,{fee:t.fee??r,networkPassphrase:m[t.network]}).addOperation(i.call("execute_strategy",b(t.caller),y(t.totalIn),l)).setTimeout(t.timeoutSeconds??300).build().toXDR()}}function kr(e,t){return vr(e,t)}function Rr(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(Tr),splitPpm:e.splitPpm}))):[{hops:e.hops.map(Tr),splitPpm:1e6}],referralId:t.referralId??0,tokenIn:e.from,tokenOut:e.to,totalMinOut:e.amountOutMin}}function xr(e,t={}){const r=e;return"string"==typeof r.routeXdr&&r.routeXdr.length>0?{routeXdr:r.routeXdr}:Rr(e,t)}const Ir=Rr,Tr=e=>({amountOut:e.amountOut,pool:e.address,tokenIn:e.from,tokenOut:e.to,venue:e.dex});function $r(e,t){const r=t instanceof Error?t.message:String(t);return new Error(`[xoxno-invoked:${e}] ${r}`)}async function Er(e,t,r){const o=n.fromXDR(t,"base64");try{return(await e.prepareTransaction(o)).toXDR()}catch(e){if(r?.invokedContractId)throw $r(r.invokedContractId,e);throw e}}async function Ar(e,t,r){return Er(e,t.xdr,r)}function Br(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 Or(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 Nr=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 Pr(t){const r=new e(t.caller,t.sourceSequence),a=new o(t.forwarderAddress).call("mint_and_forward",i.ScVal.scvBytes(Nr(t.message)),i.ScVal.scvBytes(Nr(t.attestation)));return{xdr:new n(r,{fee:t.fee??"10000000",networkPassphrase:m[t.network]}).addOperation(a).setTimeout(t.timeoutSeconds??120).build().toXDR()}}export{l as STELLAR_AGGREGATOR_ROUTER,c as STELLAR_GOVERNANCE,ot as STELLAR_GOVERNANCE_ZERO_PREDECESSOR,u as STELLAR_LENDING_CONTROLLER,ur as STELLAR_LENDING_TOPICS,m as STELLAR_NETWORK_PASSPHRASE,d as STELLAR_QUOTE_URL,p as STELLAR_SOROBAN_RPC_URL,pr as SYNTHETIC_EVENT_ORDER_STRIDE,cr as XOXNO_LENDING_STELLAR_TICKER,Or as buildSameTokenRepaySwapSteps,We as buildStellarAcceptOwnershipTx,tt as buildStellarAddRewardsTx,Me as buildStellarApproveTokenTx,kr as buildStellarBatchSwapTx,C as buildStellarBorrowBatchTx,D as buildStellarBorrowTx,Pr as buildStellarCctpForwardTx,et as buildStellarClaimRevenueTx,Ke as buildStellarCreateLiquidityPoolTx,Qe as buildStellarDisableTokenOracleTx,vr as buildStellarExecuteStrategyTx,j as buildStellarFlashLoanTx,qt as buildStellarGovernanceExecuteGovernanceUpgradeTx,Wt as buildStellarGovernanceExecuteGrantGovernanceRoleTx,zt as buildStellarGovernanceExecuteRevokeGovernanceRoleTx,Ct as buildStellarGovernanceExecuteTransferGovOwnTx,Lt as buildStellarGovernanceExecuteTx,Vt as buildStellarGovernanceExecuteUpdateDelayTx,Le as buildStellarGrantRoleTx,dr as buildStellarLendingIdentifier,H as buildStellarLiquidateTx,Q as buildStellarMigrateFromBlendTx,Ne as buildStellarMigrateTx,Z as buildStellarMultiplyTx,Pe as buildStellarPauseTx,yt as buildStellarProposeApproveBlendPoolTx,wt as buildStellarProposeApproveTokenTx,Et as buildStellarProposeConfigureMarketOracleTx,St as buildStellarProposeCreateLiquidityPoolTx,kt as buildStellarProposeDeployPoolTx,xt as buildStellarProposeDisableTokenOracleTx,At as buildStellarProposeEditOracleToleranceTx,Bt as buildStellarProposeGovernanceUpgradeTx,Nt as buildStellarProposeGrantGovernanceRoleTx,Tt as buildStellarProposeMigrateControllerTx,gt as buildStellarProposeRevokeBlendPoolTx,Pt as buildStellarProposeRevokeGovernanceRoleTx,bt as buildStellarProposeRevokeTokenTx,dt as buildStellarProposeSetAccumulatorTx,pt as buildStellarProposeSetAggregatorTx,ht as buildStellarProposeSetMinBorrowCollatTx,mt as buildStellarProposeSetPoolTemplateTx,ft as buildStellarProposeSetPositionLimitsTx,$t as buildStellarProposeTransferCtrlOwnershipTx,Ut as buildStellarProposeTransferGovOwnTx,Ot as buildStellarProposeUpdateDelayTx,_t as buildStellarProposeUpdatePoolCapsTx,It as buildStellarProposeUpgradeControllerTx,vt as buildStellarProposeUpgradePoolParamsTx,Rt as buildStellarProposeUpgradePoolTx,Je as buildStellarRenewAccountTx,M as buildStellarRepayBatchTx,Y as buildStellarRepayDebtWithCollateralTx,F as buildStellarRepayTx,qe as buildStellarRevokeRoleTx,Fe as buildStellarRevokeTokenTx,Ce as buildStellarSetAccumulatorTx,ze as buildStellarSetAggregatorTx,De as buildStellarSetLiquidityPoolTemplateTx,He as buildStellarSetMarketOracleConfigTx,je as buildStellarSetOracleToleranceTx,Ge as buildStellarSetPositionLimitsTx,W as buildStellarSupplyBatchTx,z as buildStellarSupplyTx,K as buildStellarSwapCollateralTx,J as buildStellarSwapDebtTx,Ve as buildStellarTransferOwnershipTx,Ue as buildStellarUnpauseTx,rt as buildStellarUpdateAccountThresholdTx,Ze as buildStellarUpdateIndexesTx,Xe as buildStellarUpdatePoolCapsTx,Oe as buildStellarUpgradeControllerTx,Ye as buildStellarUpgradeLiquidityPoolParamsTx,G as buildStellarWithdrawBatchTx,X as buildStellarWithdrawTx,V as buildTx,lr as decodeStellarLendingEvent,xe as encodeInterestRateModel,Be as encodeMarketOracleConfigInput,Ie as encodeMarketParamsRaw,Ae as encodeOracleSourceConfigInput,Te as encodePositionLimits,Sr as encodeStrategyPayloadToRouteXdr,mr as extractEventOrder,we as getStellarAccountPositions,br as getStellarAggregatorQuote,h as getStellarAggregatorRouter,ce as getStellarAsset,ye as getStellarAssetGraph,de as getStellarAssetMarkets,pe as getStellarAssetPage,ae as getStellarAssets,_ as getStellarGovernance,be as getStellarGovernanceProposals,me as getStellarHub,ge as getStellarHubGraph,ne as getStellarHubs,oe as getStellarLendingContext,f as getStellarLendingController,yr as getStellarQuoteTokens,ue as getStellarReserve,ve as getStellarReserveGraph,le as getStellarReserveHolders,ie as getStellarReserves,fe as getStellarSpoke,Se as getStellarSpokeGraph,se as getStellarSpokes,_e as getStellarUserActivity,he as getStellarUserPositions,Ir as mapQuoteResponseToAggregatorSwap,Rr as mapQuoteResponseToStrategyPayload,xr as mapQuoteResponseToStrategySwap,hr as mapStellarPositionActivityType,Ar as prepareStellarBuiltTx,Er as prepareStellarTxXdr,Xt as stellarLendingDispatchKey,ke as stellarLendingRead,fr as syntheticEventOrder,$r as tagStellarInvokedContractError,Dt as toBase64Xdr,Br as toStellarPositionMode};
|
|
1
|
+
"undefined"!=typeof globalThis&&void 0===globalThis.self&&(globalThis.self=globalThis);import{Account as e,Address as t,BASE_FEE as r,Contract as o,ScInt as a,TransactionBuilder as n,scValToNative as s,xdr as i}from"@stellar/stellar-sdk";const u={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??""},l={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"},f={mainnet:"Public Global Stellar Network ; September 2015",testnet:"Test SDF Network ; September 2015"};function m(e){const t=u[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 h(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 _(e){const t=l[e];if(!t)throw new Error(`Stellar governance address not configured for network "${e}". Set STELLAR_GOVERNANCE_${e.toUpperCase()} env var.`);return t}const w=["Soroswap","Aquarius","Phoenix","Sushi","CometDex"],b=e=>new t(e).toScVal(),y=e=>new a(e).toI128(),g=e=>i.ScVal.scvU32(e),S=e=>new a("string"==typeof e?e:e.toString()).toU64(),v=e=>i.ScVal.scvBool(e),k=e=>i.ScVal.scvString(e),R=e=>i.ScVal.scvSymbol(e),x=()=>i.ScVal.scvVoid(),I=e=>i.ScVal.scvVec(e),T=(e,t=32)=>{const r=e.startsWith("0x")?e.slice(2):e,o=Buffer.from(r,"hex");if(o.length!==t)throw new Error(`Stellar builder: expected a ${t}-byte BytesN (got ${o.length} bytes from "${e}")`);return i.ScVal.scvBytes(o)},E=(e,t)=>null==e?x():t(e),$=(e,t)=>O({asset:b(t),hub_id:g(e)}),A=(e,t,r)=>i.ScVal.scvVec([$(e,t),y(r)]),B=e=>i.ScVal.scvVec(e.map((e=>A(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:y(e.amountOut),pool:b(e.pool),token_in:b(e.tokenIn),token_out:b(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:S(e.referralId??0),token_in:b(e.tokenIn),token_out:b(e.tokenOut),total_min_out:y(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)},U=e=>{const t=e.trim();if(t.startsWith("0x")){const e=t.slice(2);if(!((r=e).length>0&&r.length%2==0&&/^[0-9a-fA-F]+$/.test(r)))throw new Error("Stellar builder: strategy swap bytes hex string must be 0x-prefixed and even-length");return Buffer.from(e,"hex")}var r;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 o=Buffer.from(t,"base64");if(0===o.length)throw new Error("Stellar builder: strategy swap bytes must be non-empty base64 routeXdr, 0x hex string, or Uint8Array");return o},q=e=>{if("string"==typeof e)return P(U(e));if(e instanceof Uint8Array)return P(e);if(e&&"object"==typeof e)return"routeXdr"in(r=e)&&"string"==typeof r.routeXdr?P(U(e.routeXdr)):(e=>"swapXdr"in e&&"string"==typeof e.swapXdr)(e)?P(U(e.swapXdr)):(e=>"bytes"in e&&("string"==typeof e.bytes||e.bytes instanceof Uint8Array))(e)?"string"==typeof e.bytes?P(U(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 r=0;for(const[e,o]of t.paths.entries()){if(!o||"number"!=typeof o.splitPpm||o.splitPpm<=0||!Array.isArray(o.hops)||0===o.hops.length)throw new Error(`Stellar builder: \`steps.paths[${e}]\` must have splitPpm > 0 and a non-empty hops array`);r+=o.splitPpm;for(const[t,r]of o.hops.entries())if(!r||"string"!=typeof r.amountOut||"string"!=typeof r.pool||"string"!=typeof r.tokenIn||"string"!=typeof r.tokenOut||!w.includes(r.venue))throw new Error(`Stellar builder: \`steps.paths[${e}].hops[${t}]\` must have amountOut, pool, tokenIn, tokenOut, and a valid Soroban venue`)}if(1e6!==r)throw new Error(`Stellar builder: \`steps.paths[].splitPpm\` must sum to 1_000_000, got ${r}`);return t})(e),i.ScVal.scvBytes(Buffer.from(N(t).toXDR("base64"),"base64")));var t,r;throw new Error("Stellar builder: `steps` must be opaque strategy bytes (`routeXdr`, base64/hex string, or Uint8Array)")},L=e=>{if("string"==typeof e)return(e=>{const t=e.startsWith("0x")?e.slice(2):e,r=Buffer.from(t,"hex");return i.ScVal.scvBytes(r)})(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 V(t,a,s){const i=t.controllerAddress??m(t.network),u=new o(i),c=new e(t.caller,t.sourceSequence);return{xdr:new n(c,{fee:t.fee??r,networkPassphrase:f[t.network]}).addOperation(u.call(a,...s)).setTimeout(t.timeoutSeconds??300).build().toXDR()}}function W(e,t){const r=t.accountNonce??0,o=t.spokeId??0;return V(e,"supply",[b(e.caller),S(r),g(o),B([...t.assets])])}function z(e,t){return W(e,{accountNonce:t.accountNonce,spokeId:t.spokeId,assets:[{hubId:t.hubId,asset:t.asset,amount:t.amount}]})}function D(e,t){return V(e,"borrow",[b(e.caller),S(t.accountNonce),B([...t.borrows]),E(t.to,b)])}function G(e,t){return D(e,{accountNonce:t.accountNonce,borrows:[{hubId:t.hubId,asset:t.asset,amount:t.amount}],to:t.to})}function C(e,t){return V(e,"withdraw",[b(e.caller),S(t.accountNonce),B([...t.withdrawals]),E(t.to,b)])}function X(e,t){return C(e,{accountNonce:t.accountNonce,withdrawals:[{hubId:t.hubId,asset:t.asset,amount:t.amount}],to:t.to})}function M(e,t){return V(e,"repay",[b(e.caller),S(t.accountNonce),B([...t.payments])])}function F(e,t){return M(e,{accountNonce:t.accountNonce,payments:[{hubId:t.hubId,asset:t.asset,amount:t.amount}]})}function H(e,t){return V(e,"liquidate",[b(e.caller),S(t.accountNonce),B([...t.debtPayments])])}function j(e,t){return V(e,"flash_loan",[b(e.caller),$(t.hubId,t.asset),y(t.amount),b(t.receiver),L(t.data)])}function Q(e,t){return V(e,"migrate_from_blend",[b(e.caller),S(t.accountId),g(t.spokeId),g(t.hubId),b(t.blendPool),I(t.collateralTokens.map(b)),I(t.supplyTokens.map(b)),(r=t.debtCaps.map((e=>({token:e.token,amount:e.cap}))),i.ScVal.scvVec(r.map((e=>{return t=e.token,r=e.amount,i.ScVal.scvVec([b(t),y(r)]);var t,r}))))]);var r}function Z(e,t){const r=t.accountNonce??0,o=t.spokeId??0;return V(e,"multiply",[b(e.caller),S(r),g(o),$(t.collateral.hubId,t.collateral.asset),y(t.debtToFlashLoan),$(t.debt.hubId,t.debt.asset),g(t.mode),q(t.steps),E(t.initialPayment,(e=>A(e.hubId,e.asset,e.amount))),E(t.convertSwap,q)])}function J(e,t){return V(e,"swap_debt",[b(e.caller),S(t.accountNonce),$(t.existingDebt.hubId,t.existingDebt.asset),y(t.newDebtAmount),$(t.newDebt.hubId,t.newDebt.asset),q(t.steps)])}function K(e,t){return V(e,"swap_collateral",[b(e.caller),S(t.accountNonce),$(t.current.hubId,t.current.asset),y(t.fromAmount),$(t.newCollateral.hubId,t.newCollateral.asset),q(t.steps)])}function Y(e,t){return V(e,"repay_debt_with_collateral",[b(e.caller),S(t.accountNonce),$(t.collateral.hubId,t.collateral.asset),y(t.collateralAmount),$(t.debt.hubId,t.debt.asset),q(t.steps),v(t.closePosition)])}const ee="/stellar-lending",te=25,re=encodeURIComponent,oe=(e,t)=>e.fetchWithTimeout(`${ee}/context`,t),ae=(e,t)=>e.fetchWithTimeout(`${ee}/assets`,t),ne=(e,t)=>e.fetchWithTimeout(`${ee}/hubs`,t),se=(e,t)=>e.fetchWithTimeout(`${ee}/spokes`,t),ie=(e,t={},r)=>{const{hubId:o,spokeId:a,asset:n}=t;return e.fetchWithTimeout(`${ee}/reserves`,{...r,params:{...void 0!==o?{hubId:o}:{},...void 0!==a?{spokeId:a}:{},...n?{asset:n}:{}}})},ue=(e,t,r,o,a)=>e.fetchWithTimeout(`${ee}/reserves/${t}/${r}/${re(o)}`,a),ce=(e,t,r,o,a,n)=>e.fetchWithTimeout(`${ee}/reserves/${t}/${r}/${re(o)}/holders`,{...n,params:{side:a}}),le=(e,t,r)=>e.fetchWithTimeout(`${ee}/assets/${re(t)}`,r),pe=(e,t,r,o)=>e.fetchWithTimeout(`${ee}/assets/${re(t)}/page`,{...o,params:{...r}}),de=(e,t,r,o)=>e.fetchWithTimeout(`${ee}/assets/${re(t)}/markets`,{...o,params:{side:r}}),fe=(e,t,r)=>e.fetchWithTimeout(`${ee}/hubs/${t}`,r),me=(e,t,r)=>e.fetchWithTimeout(`${ee}/spokes/${t}`,r),he=(e,t,r)=>e.fetchWithTimeout(`${ee}/users/${re(t)}/positions`,r),_e=(e,t,r={},o)=>{const{skip:a,top:n}=r;return e.fetchWithTimeout(`${ee}/users/${re(t)}/activity`,{...o,params:{...void 0!==a?{skip:a}:{},...void 0!==n?{top:n}:{}}})},we=(e,t,r)=>e.fetchWithTimeout(`${ee}/accounts/${re(t)}/positions`,r),be=(e,t={},r)=>{const{top:o=te,continuationToken:a}=t;return e.fetchWithTimeout(`${ee}/governance/proposals`,{...r,params:{top:o,...a?{continuationToken:a}:{}}})},ye=(e,t,r,o)=>e.fetchWithTimeout(`${ee}/assets/${re(t)}/graph`,{...o,params:{...r}}),ge=(e,t,r,o)=>e.fetchWithTimeout(`${ee}/hubs/${t}/graph`,{...o,params:{...r}}),Se=(e,t,r,o)=>e.fetchWithTimeout(`${ee}/spokes/${t}/graph`,{...o,params:{...r}}),ve=(e,t,r,o,a,n)=>e.fetchWithTimeout(`${ee}/reserves/${t}/${r}/${re(o)}/graph`,{...n,params:{...a}}),ke=e=>({context:t=>oe(e,t),assets:t=>ae(e,t),hubs:t=>ne(e,t),spokes:t=>se(e,t),reserves:(t,r)=>{return void 0===(o=t)||"hubId"in o||"spokeId"in o||"asset"in o?ie(e,t,r):ie(e,{},t);var o},reserve:(t,r,o,a)=>ue(e,t,r,o,a),reserveHolders:(t,r,o,a,n)=>ce(e,t,r,o,a,n),asset:(t,r)=>le(e,t,r),assetMarkets:(t,r,o)=>de(e,t,r,o),hub:(t,r)=>fe(e,t,r),spoke:(t,r)=>me(e,t,r),userPositions:(t,r)=>he(e,t,r),userActivity:(t,r,o)=>_e(e,t,r,o),accountPositions:(t,r)=>we(e,t,r),governanceProposals:(t,r)=>be(e,t,r),assetGraph:(t,r,o)=>ye(e,t,r,o),hubGraph:(t,r,o)=>ge(e,t,r,o),spokeGraph:(t,r,o)=>Se(e,t,r,o),reserveGraph:(t,r,o,a,n)=>ve(e,t,r,o,a,n)}),Re={Single:0,PrimaryWithAnchor:1},xe=e=>O({base_borrow_rate:y(e.baseBorrowRateRay),max_borrow_rate:y(e.maxBorrowRateRay),max_utilization:y(e.maxUtilizationRay),mid_utilization:y(e.midUtilizationRay),optimal_utilization:y(e.optimalUtilizationRay),reserve_factor:g(e.reserveFactorBps),slope1:y(e.slope1Ray),slope2:y(e.slope2Ray),slope3:y(e.slope3Ray)}),Ie=e=>O({asset_decimals:g(e.assetDecimals),asset_id:b(e.assetId),base_borrow_rate:y(e.baseBorrowRateRay),flashloan_fee:g(e.flashloanFeeBps),is_flashloanable:v(e.isFlashloanable),max_borrow_rate:y(e.maxBorrowRateRay),max_utilization:y(e.maxUtilizationRay),mid_utilization:y(e.midUtilizationRay),optimal_utilization:y(e.optimalUtilizationRay),reserve_factor:g(e.reserveFactorBps),slope1:y(e.slope1Ray),slope2:y(e.slope2Ray),slope3:y(e.slope3Ray)}),Te=e=>O({max_borrow_positions:g(e.maxBorrowPositions),max_supply_positions:g(e.maxSupplyPositions)}),Ee=e=>{const t=e.kind;switch(t){case"Stellar":return I([R("Stellar"),b(e.value)]);case"Symbol":return I([R("Symbol"),R(e.value)]);case"String":return I([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 I([R("Twap"),g(t)])}return I([R("Spot")])},Ae=e=>{const t=e.provider;if("ReflectorSep40"===t){if(!e.asset)throw new Error("Stellar builder: Reflector oracle source requires `asset`");return I([R("Reflector"),O({asset:Ee(e.asset),contract:b(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 I([R("RedStone"),O({contract:b(e.contract),feed_id:k(e.feedId),max_stale_seconds:S(e.maxStaleSeconds)})])}throw new Error(`Stellar builder: unknown oracle provider "${t}"`)},Be=e=>{const t=Re[e.strategy];if(void 0===t)throw new Error(`Stellar builder: unknown oracle strategy "${e.strategy}"`);return O({anchor:(r=e.anchor,I(null==r?[R("None")]:[R("Some"),Ae(r)])),max_price_stale_seconds:S(e.maxPriceStaleSeconds),max_sanity_price_wad:y(e.maxSanityPriceWad),min_sanity_price_wad:y(e.minSanityPriceWad),primary:Ae(e.primary),strategy:g(t),tolerance_bps:g(e.toleranceBps)});var r};function Oe(e,t){return V(e,"upgrade",[T(t.wasmHash)])}function Ne(e,t){return V(e,"migrate",[g(t.newVersion)])}function Pe(e){return V(e,"pause",[])}function Ue(e){return V(e,"unpause",[])}function qe(e,t){return V(e,"grant_role",[b(t.account),R(t.role)])}function Le(e,t){return V(e,"revoke_role",[b(t.account),R(t.role)])}function Ve(e,t){return V(e,"transfer_ownership",[b(t.newOwner),g(t.liveUntilLedger)])}function We(e){return V(e,"accept_ownership",[])}function ze(e,t){return V(e,"set_aggregator",[b(t.aggregator)])}function De(e,t){return V(e,"set_accumulator",[b(t.accumulator)])}function Ge(e,t){return V(e,"set_liquidity_pool_template",[T(t.wasmHash)])}function Ce(e,t){return V(e,"set_position_limits",[Te(t)])}function Xe(e,t){return V(e,"approve_token",[b(t.token)])}function Me(e,t){return V(e,"revoke_token",[b(t.token)])}function Fe(e,t){return V(e,"set_market_oracle_config",[$(t.hubId,t.asset),Be(t.config)])}function He(e,t){return V(e,"set_oracle_tolerance",[b(t.asset),O({lower_ratio_bps:g(t.lowerRatioBps),upper_ratio_bps:g(t.upperRatioBps)})])}function je(e,t){return V(e,"disable_token_oracle",[b(t.asset)])}function Qe(e,t){return V(e,"update_indexes",[b(e.caller),I(t.assets.map((e=>$(e.hubId,e.asset))))])}function Ze(e,t){return V(e,"renew_account",[b(e.caller),S(t.accountNonce)])}function Je(e,t){return V(e,"create_liquidity_pool",[g(t.hubId),b(t.asset),Ie(t.params)])}function Ke(e,t){return V(e,"upgrade_liquidity_pool_params",[$(t.hubId,t.asset),xe(t.params)])}function Ye(e,t){return V(e,"claim_revenue",[b(e.caller),I(t.assets.map((e=>$(e.hubId,e.asset))))])}function et(e,t){return V(e,"add_rewards",[b(e.caller),B(t.rewards)])}function tt(e,t){return V(e,"update_account_threshold",[b(e.caller),v(t.hasRisks),I(t.accountNonces.map((e=>S(e))))])}const rt="00".repeat(32),ot=e=>{if("string"==typeof e)return T(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)},at=(e,...t)=>I([R(e),...t]),nt=e=>O({new_owner:b(e.newOwner),live_until_ledger:g(e.liveUntilLedger)}),st=e=>O({asset:b(e.asset),bonus:g(e.bonus),borrow_cap:y(e.borrowCap),can_borrow:v(e.canBorrow),can_collateral:v(e.canCollateral),hub_id:g(e.hubId),liquidation_fees:g(e.liquidationFees),ltv:g(e.ltv),oracle_override:I([R("None")]),spoke_id:g(e.spokeId),supply_cap:y(e.supplyCap),threshold:g(e.threshold)}),it=e=>O({account:b(e.account),role:R(e.role)});function ut(t,a,s){const i=t.governanceAddress??_(t.network),u=new o(i),c=new e(t.caller,t.sourceSequence);return{xdr:new n(c,{fee:t.fee??r,networkPassphrase:f[t.network]}).addOperation(u.call(a,...s)).setTimeout(t.timeoutSeconds??300).build().toXDR()}}const ct=(e,t,r)=>ut(e,"propose",[b(e.caller),t,ot(r)]),lt=(e,t,r)=>ut(e,"execute_self",[x(),t,ot(r)]);function pt(e,t,r){return ct(e,at("SetAggregator",b(t.aggregator)),r)}function dt(e,t,r){return ct(e,at("SetAccumulator",b(t.accumulator)),r)}function ft(e,t,r){return ct(e,at("SetLiquidityPoolTemplate",T(t.wasmHash)),r)}function mt(e,t,r){return ct(e,at("SetPositionLimits",Te(t)),r)}function ht(e,t){return ct(e,at("CreateHub"),t)}function _t(e,t){return ct(e,at("AddSpoke"),t)}function wt(e,t,r){return ct(e,at("RemoveSpoke",g(t.spokeId)),r)}function bt(e,t,r){return ct(e,at("AddAssetToSpoke",st(t)),r)}function yt(e,t,r){return ct(e,at("EditAssetInSpoke",st(t)),r)}function gt(e,t,r){return ct(e,at("RemoveAssetFromSpoke",O({hub_asset:$((o=t).hubId,o.asset),spoke_id:g(o.spokeId)})),r);var o}function St(e,t,r){return ct(e,at("SetPositionManager",b(t.manager),v(t.isActive)),r)}function vt(e,t,r){return ct(e,at("SetMinBorrowCollateralUsd",y(t.floorWad)),r)}function kt(e,t,r){return ct(e,at("ApproveToken",b(t.token)),r)}function Rt(e,t,r){return ct(e,at("RevokeToken",b(t.token)),r)}function xt(e,t,r){return ct(e,at("ApproveBlendPool",b(t.pool)),r)}function It(e,t,r){return ct(e,at("RevokeBlendPool",b(t.pool)),r)}function Tt(e,t,r){return ct(e,at("CreateLiquidityPool",O({asset:b((o=t).asset),hub_id:g(o.hubId),params:Ie(o.params)})),r);var o}function Et(e,t,r){return ct(e,at("UpgradeLiquidityPoolParams",O({hub_asset:$((o=t).hubId,o.asset),params:xe(o.params)})),r);var o}function $t(e,t){return ct(e,at("DeployPool"),t)}function At(e,t,r){return ct(e,at("UpgradePool",T(t.wasmHash)),r)}function Bt(e,t,r){return ct(e,at("DisableTokenOracle",b(t.asset)),r)}function Ot(e,t,r){return ct(e,at("UpgradeController",T(t.wasmHash)),r)}function Nt(e,t,r){return ct(e,at("MigrateController",g(t.newVersion)),r)}function Pt(e,t,r){return ct(e,at("TransferCtrlOwnership",nt(t)),r)}function Ut(e,t,r){return ct(e,at("ConfigureMarketOracle",O({cfg:Be((o=t).config),hub_asset:$(o.hubId,o.asset)})),r);var o}function qt(e,t,r){return ct(e,at("EditOracleTolerance",O({asset:b((o=t).asset),tolerance:g(o.tolerance)})),r);var o}function Lt(e,t,r){return ct(e,at("UpgradeGov",T(t.wasmHash)),r)}function Vt(e,t,r){return ct(e,at("UpdateGovDelay",g(t.newDelay)),r)}function Wt(e,t,r){return ct(e,at("GrantGovRole",it(t)),r)}function zt(e,t,r){return ct(e,at("RevokeGovRole",it(t)),r)}function Dt(e,t,r){return ct(e,at("TransferGovOwnership",nt(t)),r)}function Gt(e,t){const r=I(t.argsXdr.map((e=>i.ScVal.fromXDR(e,"base64")))),o=ot(t.predecessor??rt);return ut(e,"execute",[x(),b(t.target),R(t.functionName),r,o,ot(t.salt)])}function Ct(e,t,r){return lt(e,at("UpgradeGov",T(t.wasmHash)),r)}function Xt(e,t,r){return lt(e,at("UpdateGovDelay",g(t.newDelay)),r)}function Mt(e,t,r){return lt(e,at("GrantGovRole",it(t)),r)}function Ft(e,t,r){return lt(e,at("RevokeGovRole",it(t)),r)}function Ht(e,t,r){return lt(e,at("TransferGovOwnership",nt(t)),r)}const jt=e=>e.toXDR("base64"),Qt=e=>i.ScVal.fromXDR(e,"base64"),Zt=e=>e.map((e=>String(s(Qt(e))))).join(":"),Jt=e=>"bigint"==typeof e||"number"==typeof e?e.toString():String(e),Kt=e=>Number(e),Yt=e=>String(e),er=e=>null==e?void 0:Jt(e),tr=e=>null==e?void 0:Yt(e),rr=e=>e instanceof Uint8Array?Buffer.from(e).toString("hex"):Buffer.isBuffer(e)?e.toString("hex"):String(e),or=["None","Multiply","Long","Short"],ar=["Single","PrimaryWithAnchor"],nr=["ReflectorSep40","RedStonePriceFeed"],sr=["Spot","Twap"],ir=["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"],ur=e=>Array.isArray(e)?e:[],cr=(e,t)=>{const r="Borrow"===t;return{action:(o=e[0],ir[Kt(o)]??Jt(o)),positionType:t,hubId:Kt(e[1]),asset:Yt(e[2]),scaledAmountRay:Jt(e[3]),indexRay:Jt(e[4]),amount:Jt(e[5]),liquidationThresholdBps:r?void 0:Kt(e[6]),liquidationBonusBps:r?void 0:Kt(e[7]),loanToValueBps:r?void 0:Kt(e[8]),liquidationFeesBps:r?void 0:Kt(e[9])};var o},lr=e=>{return{owner:Yt(e[0]),spokeId:Kt(e[1]),mode:(t=e[2],or[Kt(t)]??"None")};var t},pr=(e,t)=>{const r=sr[Kt(e[`${t}_read_mode`])]??"Spot",o=e[`${t}_asset`],a=e[`${t}_symbol`],n=null!=o?{kind:"Stellar",value:Yt(o)}:null!=a?{kind:"Symbol",value:Yt(a)}:void 0;return{provider:nr[Kt(e[`${t}_provider`])]??"ReflectorSep40",contractAddress:Yt(e[`${t}_contract`]),asset:n,feedId:tr(e[`${t}_feed_id`]),readMode:r,twapRecords:"Twap"===r?Kt(e[`${t}_twap_records`]):void 0,decimals:Kt(e[`${t}_decimals`]),resolutionSeconds:Kt(e[`${t}_resolution_seconds`]),maxStaleSeconds:Kt(e[`${t}_max_stale_seconds`])}},dr=e=>{const t=null!==e.anchor_provider&&void 0!==e.anchor_provider;return{baseTokenId:Yt(e.base_token_id),quoteTokenId:Yt(e.quote_token_id),tolerance:{upperRatio:Kt(e.upper_ratio_bps??e.tolerance?.upper_ratio_bps),lowerRatio:Kt(e.lower_ratio_bps??e.tolerance?.lower_ratio_bps)},assetDecimals:Kt(e.asset_decimals),maxPriceStaleSeconds:Kt(e.max_price_stale_seconds),strategy:ar[Kt(e.strategy)]??"Single",primary:pr(e,"primary"),anchor:t?pr(e,"anchor"):void 0,primaryQuoteToken:tr(e.primary_quote_token),anchorQuoteToken:tr(e.anchor_quote_token),minSanityPriceWad:er(e.min_sanity_price_wad),maxSanityPriceWad:er(e.max_sanity_price_wad)}},fr={"market:create":e=>({topic:"market:create",data:{hubId:Kt(e.hub_id),baseAsset:Yt(e.base_asset),maxBorrowRate:Jt(e.max_borrow_rate),baseBorrowRate:Jt(e.base_borrow_rate),slope1:Jt(e.slope1),slope2:Jt(e.slope2),slope3:Jt(e.slope3),midUtilization:Jt(e.mid_utilization),optimalUtilization:Jt(e.optimal_utilization),maxUtilization:Jt(e.max_utilization),reserveFactor:Kt(e.reserve_factor),marketAddress:Yt(e.market_address)}}),"market:params_update":e=>({topic:"market:params_update",data:{asset:Yt(e.asset),maxBorrowRateRay:Jt(e.max_borrow_rate),baseBorrowRateRay:Jt(e.base_borrow_rate),slope1Ray:Jt(e.slope1),slope2Ray:Jt(e.slope2),slope3Ray:Jt(e.slope3),midUtilizationRay:Jt(e.mid_utilization),optimalUtilizationRay:Jt(e.optimal_utilization),maxUtilizationRay:Jt(e.max_utilization),reserveFactorBps:Kt(e.reserve_factor)}}),"market:batch_state_update":e=>({topic:"market:batch_state_update",data:{updates:ur(e).map((e=>{return t=ur(e),{hubId:Kt(t[0]),asset:Yt(t[1]),timestamp:Kt(t[2]),supplyIndexRay:Jt(t[3]),borrowIndexRay:Jt(t[4]),cash:Jt(t[5]),suppliedRay:Jt(t[6]),borrowedRay:Jt(t[7]),revenueRay:Jt(t[8])};var t}))}}),"market:batch_params_update":e=>({topic:"market:batch_params_update",data:{updates:ur(e).map((e=>{const t=e;return{hubId:Kt(t.hub_id),asset:Yt(t.asset),params:(r=t.params,{maxBorrowRateRay:Jt(r.max_borrow_rate),baseBorrowRateRay:Jt(r.base_borrow_rate),slope1Ray:Jt(r.slope1),slope2Ray:Jt(r.slope2),slope3Ray:Jt(r.slope3),midUtilizationRay:Jt(r.mid_utilization),optimalUtilizationRay:Jt(r.optimal_utilization),maxUtilizationRay:Jt(r.max_utilization),reserveFactorBps:Kt(r.reserve_factor),isFlashloanable:Boolean(r.is_flashloanable),flashloanFeeBps:Kt(r.flashloan_fee),assetId:Yt(r.asset_id),assetDecimals:Kt(r.asset_decimals)})};var r}))}}),"position:batch_update":e=>{const t=ur(e);return{topic:"position:batch_update",data:{accountId:Jt(t[0]),accountAttributes:lr(ur(t[1])),updates:[...ur(t[2]).map((e=>cr(ur(e),"Deposit"))),...ur(t[3]).map((e=>cr(ur(e),"Borrow")))]}}},"position:flash_loan":e=>({topic:"position:flash_loan",data:{hubId:Kt(e.hub_id),asset:Yt(e.asset),receiver:Yt(e.receiver),caller:Yt(e.caller),amount:Jt(e.amount),fee:Jt(e.fee)}}),"config:oracle":e=>({topic:"config:oracle",data:{asset:Yt(e.asset),oracle:dr(e.oracle)}}),"position:liquidation":e=>({topic:"position:liquidation",data:{liquidator:Yt(e.liquidator),accountId:Jt(e.account_id),repaidUsdWad:Jt(e.repaid_usd_wad),bonusBps:Jt(e.bonus_bps)}}),"debt:bad_debt":e=>({topic:"debt:bad_debt",data:{accountId:Jt(e.account_id),totalBorrowUsdWad:Jt(e.total_borrow_usd_wad),totalCollateralUsdWad:Jt(e.total_collateral_usd_wad)}}),"strategy:initial_payment":e=>({topic:"strategy:initial_payment",data:{token:Yt(e.token),amount:Jt(e.amount),usdValueWad:Jt(e.usd_value_wad),accountId:Jt(e.account_id)}}),"strategy:fee":e=>({topic:"strategy:fee",data:{hubId:Kt(e.hub_id),asset:Yt(e.asset),amount:Jt(e.amount),fee:Jt(e.fee),amountSent:Jt(e.amount_sent)}}),"config:approve_token":e=>({topic:"config:approve_token",data:{wasmHash:rr(e.wasm_hash),approved:Boolean(e.approved)}}),"config:aggregator":e=>({topic:"config:aggregator",data:{aggregator:Yt(e.aggregator)}}),"config:accumulator":e=>({topic:"config:accumulator",data:{accumulator:Yt(e.accumulator)}}),"config:pool_template":e=>({topic:"config:pool_template",data:{wasmHash:rr(e.wasm_hash)}}),"config:position_limits":e=>({topic:"config:position_limits",data:{maxSupplyPositions:Kt(e.max_supply_positions),maxBorrowPositions:Kt(e.max_borrow_positions)}}),"config:oracle_disabled":e=>({topic:"config:oracle_disabled",data:{asset:Yt(e.asset)}}),"config:spoke":e=>{const t=e.spoke;return{topic:"config:spoke",data:{spokeId:Kt(t.spoke_id),isDeprecated:Boolean(t.is_deprecated),liquidationTargetHfWad:Jt(t.liquidation_target_hf_wad),healthFactorForMaxBonusWad:Jt(t.hf_for_max_bonus_wad),liquidationBonusFactorBps:Kt(t.liquidation_bonus_factor_bps)}}}},mr=Object.freeze(Object.keys(fr));function hr(e,t){const r=Zt(e),o=fr[r];return o?o(s(Qt(t))):null}const _r="XLENDXLM-a7c9f3",wr=1e4;function br(e){const t=BigInt(e).toString(16),r=t.length%2==0?t:`0${t}`;return`${_r}-${r}`}function yr(e){const t=e.split("-");return t.length>=2&&parseInt(t[1],10)||0}function gr(e,t=0){return 1e4*e+t}function Sr(e){switch(e){case"liq_repay":return"lendingLiquidateRepayDebt";case"liq_seize":return"lendingLiquidateSeizeCollateral";case"param_upd":return"lendingUpdateAccountParameters";default:return"lendingUpdateAccountPosition"}}const vr=(e,t,r)=>{const o=new URL(t,e.endsWith("/")?e:`${e}/`);if(r)for(const[e,t]of Object.entries(r))void 0!==t&&o.searchParams.set(e,String(t));return o.toString()},kr=e=>e.baseUrl??d[e.network];async function Rr(e,t){if(null==e.amountIn==(null==e.amountOut))throw new Error("getStellarAggregatorQuote: exactly one of `amountIn` or `amountOut` must be provided");const r=vr(kr(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}),o=await fetch(r,t.fetchOptions);if(!o.ok){const e=await o.text().catch((()=>""));throw new Error(`Stellar quote server responded ${o.status} ${o.statusText} for ${r} — ${e}`)}return await o.json()}async function xr(e){const t=vr(kr(e),"api/v1/tokens"),r=await fetch(t,e.fetchOptions);if(!r.ok){const e=await r.text().catch((()=>""));throw new Error(`Stellar quote server responded ${r.status} ${r.statusText} for ${t} — ${e}`)}return await r.json()}const Ir=(e,t)=>(e=>Boolean(e&&"object"==typeof e&&!(e instanceof Uint8Array)&&"paths"in e))(e)&&void 0===e.referralId?{...e,referralId:t??0}:e,Tr=e=>N(e).toXDR("base64");function Er(t,a){const s=t.routerAddress??h(t.network),i=new o(s),u=new e(t.caller,t.sourceSequence),c=q(Ir(a,t.referralId));return{xdr:new n(u,{fee:t.fee??r,networkPassphrase:f[t.network]}).addOperation(i.call("execute_strategy",b(t.caller),y(t.totalIn),c)).setTimeout(t.timeoutSeconds??300).build().toXDR()}}function $r(e,t){return Er(e,t)}function Ar(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(Nr),splitPpm:e.splitPpm}))):[{hops:e.hops.map(Nr),splitPpm:1e6}],referralId:t.referralId??0,tokenIn:e.from,tokenOut:e.to,totalMinOut:e.amountOutMin}}function Br(e,t={}){const r=e;return"string"==typeof r.routeXdr&&r.routeXdr.length>0?{routeXdr:r.routeXdr}:Ar(e,t)}const Or=Ar,Nr=e=>({amountOut:e.amountOut,pool:e.address,tokenIn:e.from,tokenOut:e.to,venue:e.dex});function Pr(e,t){const r=t instanceof Error?t.message:String(t);return new Error(`[xoxno-invoked:${e}] ${r}`)}async function Ur(e,t,r){const o=n.fromXDR(t,"base64");try{return(await e.prepareTransaction(o)).toXDR()}catch(e){if(r?.invokedContractId)throw Pr(r.invokedContractId,e);throw e}}async function qr(e,t,r){return Ur(e,t.xdr,r)}function Lr(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 Vr(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 Wr=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 zr(t){const r=new e(t.caller,t.sourceSequence),a=new o(t.forwarderAddress).call("mint_and_forward",i.ScVal.scvBytes(Wr(t.message)),i.ScVal.scvBytes(Wr(t.attestation)));return{xdr:new n(r,{fee:t.fee??"10000000",networkPassphrase:f[t.network]}).addOperation(a).setTimeout(t.timeoutSeconds??120).build().toXDR()}}export{c as STELLAR_AGGREGATOR_ROUTER,l as STELLAR_GOVERNANCE,rt as STELLAR_GOVERNANCE_ZERO_PREDECESSOR,u as STELLAR_LENDING_CONTROLLER,mr as STELLAR_LENDING_TOPICS,f as STELLAR_NETWORK_PASSPHRASE,d as STELLAR_QUOTE_URL,p as STELLAR_SOROBAN_RPC_URL,wr as SYNTHETIC_EVENT_ORDER_STRIDE,_r as XOXNO_LENDING_STELLAR_TICKER,Vr as buildSameTokenRepaySwapSteps,We as buildStellarAcceptOwnershipTx,et as buildStellarAddRewardsTx,Xe as buildStellarApproveTokenTx,$r as buildStellarBatchSwapTx,D as buildStellarBorrowBatchTx,G as buildStellarBorrowTx,zr as buildStellarCctpForwardTx,Ye as buildStellarClaimRevenueTx,Je as buildStellarCreateLiquidityPoolTx,je as buildStellarDisableTokenOracleTx,Er as buildStellarExecuteStrategyTx,j as buildStellarFlashLoanTx,Ct as buildStellarGovernanceExecuteGovernanceUpgradeTx,Mt as buildStellarGovernanceExecuteGrantGovernanceRoleTx,Ft as buildStellarGovernanceExecuteRevokeGovernanceRoleTx,Ht as buildStellarGovernanceExecuteTransferGovOwnTx,Gt as buildStellarGovernanceExecuteTx,Xt as buildStellarGovernanceExecuteUpdateDelayTx,qe as buildStellarGrantRoleTx,br as buildStellarLendingIdentifier,H as buildStellarLiquidateTx,Q as buildStellarMigrateFromBlendTx,Ne as buildStellarMigrateTx,Z as buildStellarMultiplyTx,Pe as buildStellarPauseTx,bt as buildStellarProposeAddAssetToSpokeTx,_t as buildStellarProposeAddSpokeTx,xt as buildStellarProposeApproveBlendPoolTx,kt as buildStellarProposeApproveTokenTx,Ut as buildStellarProposeConfigureMarketOracleTx,ht as buildStellarProposeCreateHubTx,Tt as buildStellarProposeCreateLiquidityPoolTx,$t as buildStellarProposeDeployPoolTx,Bt as buildStellarProposeDisableTokenOracleTx,yt as buildStellarProposeEditAssetInSpokeTx,qt as buildStellarProposeEditOracleToleranceTx,Lt as buildStellarProposeGovernanceUpgradeTx,Wt as buildStellarProposeGrantGovernanceRoleTx,Nt as buildStellarProposeMigrateControllerTx,gt as buildStellarProposeRemoveAssetFromSpokeTx,wt as buildStellarProposeRemoveSpokeTx,It as buildStellarProposeRevokeBlendPoolTx,zt as buildStellarProposeRevokeGovernanceRoleTx,Rt as buildStellarProposeRevokeTokenTx,dt as buildStellarProposeSetAccumulatorTx,pt as buildStellarProposeSetAggregatorTx,vt as buildStellarProposeSetMinBorrowCollatTx,ft as buildStellarProposeSetPoolTemplateTx,mt as buildStellarProposeSetPositionLimitsTx,St as buildStellarProposeSetPositionManagerTx,Pt as buildStellarProposeTransferCtrlOwnershipTx,Dt as buildStellarProposeTransferGovOwnTx,Vt as buildStellarProposeUpdateDelayTx,Ot as buildStellarProposeUpgradeControllerTx,Et as buildStellarProposeUpgradePoolParamsTx,At as buildStellarProposeUpgradePoolTx,Ze as buildStellarRenewAccountTx,M as buildStellarRepayBatchTx,Y as buildStellarRepayDebtWithCollateralTx,F as buildStellarRepayTx,Le as buildStellarRevokeRoleTx,Me as buildStellarRevokeTokenTx,De as buildStellarSetAccumulatorTx,ze as buildStellarSetAggregatorTx,Ge as buildStellarSetLiquidityPoolTemplateTx,Fe as buildStellarSetMarketOracleConfigTx,He as buildStellarSetOracleToleranceTx,Ce as buildStellarSetPositionLimitsTx,W as buildStellarSupplyBatchTx,z as buildStellarSupplyTx,K as buildStellarSwapCollateralTx,J as buildStellarSwapDebtTx,Ve as buildStellarTransferOwnershipTx,Ue as buildStellarUnpauseTx,tt as buildStellarUpdateAccountThresholdTx,Qe as buildStellarUpdateIndexesTx,Oe as buildStellarUpgradeControllerTx,Ke as buildStellarUpgradeLiquidityPoolParamsTx,C as buildStellarWithdrawBatchTx,X as buildStellarWithdrawTx,V as buildTx,hr as decodeStellarLendingEvent,xe as encodeInterestRateModel,Be as encodeMarketOracleConfigInput,Ie as encodeMarketParamsRaw,Ae as encodeOracleSourceConfigInput,Te as encodePositionLimits,Tr as encodeStrategyPayloadToRouteXdr,yr as extractEventOrder,we as getStellarAccountPositions,Rr as getStellarAggregatorQuote,h as getStellarAggregatorRouter,le as getStellarAsset,ye as getStellarAssetGraph,de as getStellarAssetMarkets,pe as getStellarAssetPage,ae as getStellarAssets,_ as getStellarGovernance,be as getStellarGovernanceProposals,fe as getStellarHub,ge as getStellarHubGraph,ne as getStellarHubs,oe as getStellarLendingContext,m as getStellarLendingController,xr as getStellarQuoteTokens,ue as getStellarReserve,ve as getStellarReserveGraph,ce as getStellarReserveHolders,ie as getStellarReserves,me as getStellarSpoke,Se as getStellarSpokeGraph,se as getStellarSpokes,_e as getStellarUserActivity,he as getStellarUserPositions,Or as mapQuoteResponseToAggregatorSwap,Ar as mapQuoteResponseToStrategyPayload,Br as mapQuoteResponseToStrategySwap,Sr as mapStellarPositionActivityType,qr as prepareStellarBuiltTx,Ur as prepareStellarTxXdr,Zt as stellarLendingDispatchKey,ke as stellarLendingRead,gr as syntheticEventOrder,Pr as tagStellarInvokedContractError,jt as toBase64Xdr,Lr as toStellarPositionMode};
|
|
@@ -130,12 +130,12 @@ export interface StellarReserve {
|
|
|
130
130
|
suppliedShort: number;
|
|
131
131
|
borrowedShort: number;
|
|
132
132
|
availableLiquidityShort: number;
|
|
133
|
+
isFlashloanable: boolean;
|
|
134
|
+
flashloanFeeBps: number;
|
|
133
135
|
supplyCapShort: number;
|
|
134
136
|
borrowCapShort: number;
|
|
135
137
|
depositCapFilledPct: number;
|
|
136
138
|
borrowCapFilledPct: number;
|
|
137
|
-
isFlashloanable: boolean;
|
|
138
|
-
flashloanFeeBps: number;
|
|
139
139
|
collateralFactorBps: number;
|
|
140
140
|
liquidationThresholdBps: number;
|
|
141
141
|
liquidationPenaltyBps: number;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@xoxno/sdk-js",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.180",
|
|
4
4
|
"description": "The SDK to interact with the XOXNO Protocol!",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"exports": {
|
|
@@ -114,7 +114,7 @@
|
|
|
114
114
|
"dependencies": {
|
|
115
115
|
"@multiversx/sdk-core": "^15.3.2",
|
|
116
116
|
"@multiversx/sdk-network-providers": "^2.9.3",
|
|
117
|
-
"@xoxno/types": "1.0.
|
|
117
|
+
"@xoxno/types": "1.0.458"
|
|
118
118
|
},
|
|
119
119
|
"peerDependencies": {
|
|
120
120
|
"@stellar/stellar-sdk": ">=15.0.0 <17.0.0"
|