@xoxno/sdk-js 1.0.177 → 1.0.179

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