@xoxno/sdk-js 1.0.193 → 1.0.197
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +15 -0
- package/dist/cjs/sdk/stellar/admin.d.ts +49 -31
- package/dist/cjs/sdk/stellar/events/decode.d.ts +5 -8
- package/dist/cjs/sdk/stellar/governance.d.ts +24 -18
- package/dist/cjs/sdk/stellar/lending-read-types.d.ts +3 -37
- package/dist/cjs/sdk/swagger.d.ts +38 -3
- package/dist/index.cjs +1 -1
- package/dist/index.esm.js +1 -1
- package/dist/sdk/stellar/admin.d.ts +49 -31
- package/dist/sdk/stellar/events/decode.d.ts +5 -8
- package/dist/sdk/stellar/governance.d.ts +24 -18
- package/dist/sdk/stellar/index.cjs +1 -1
- package/dist/sdk/stellar/index.esm.js +1 -1
- package/dist/sdk/stellar/lending-read-types.d.ts +3 -37
- package/dist/sdk/swagger.d.ts +38 -3
- package/package.json +2 -2
|
@@ -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
|
|
29
|
+
import { type ConfigureAssetOracleArgs, 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
|
|
@@ -38,9 +38,8 @@ export declare const STELLAR_GOVERNANCE_ZERO_PREDECESSOR: string;
|
|
|
38
38
|
/**
|
|
39
39
|
* `add_asset_to_spoke` / `edit_asset_in_spoke` payload: the per-(hub, spoke,
|
|
40
40
|
* asset) risk config. Caps are asset-native i128 decimal strings (0 =
|
|
41
|
-
* uncapped); ltv/threshold/bonus/liquidationFees are bps.
|
|
42
|
-
*
|
|
43
|
-
* resolved `MarketOracleConfig`, which no off-chain caller can safely build.
|
|
41
|
+
* uncapped); ltv/threshold/bonus/liquidationFees are bps. Oracle config is
|
|
42
|
+
* asset-level on the price-aggregator, not per-spoke.
|
|
44
43
|
*/
|
|
45
44
|
export interface SpokeAssetArgs {
|
|
46
45
|
hubId: number;
|
|
@@ -77,9 +76,10 @@ export interface SpokeLiquidationCurveArgs {
|
|
|
77
76
|
hfForMaxBonusWad: string;
|
|
78
77
|
liquidationBonusFactorBps: number;
|
|
79
78
|
}
|
|
80
|
-
/** Governance derives the
|
|
79
|
+
/** Governance derives the OracleTolerance band on-chain from one bps value. */
|
|
81
80
|
export interface EditOracleToleranceProposalArgs {
|
|
82
|
-
|
|
81
|
+
/** PriceKey: `{ Token: "C…" }` or `{ Ref: "BTC" }`. */
|
|
82
|
+
key: Record<string, string>;
|
|
83
83
|
tolerance: number;
|
|
84
84
|
}
|
|
85
85
|
export interface UpgradeArgs {
|
|
@@ -91,18 +91,20 @@ export interface MigrateArgs {
|
|
|
91
91
|
export interface UpdateDelayArgs {
|
|
92
92
|
newDelay: number;
|
|
93
93
|
}
|
|
94
|
-
/** propose(
|
|
95
|
-
export declare function
|
|
94
|
+
/** propose(SetSwapAggregator(addr)) */
|
|
95
|
+
export declare function buildStellarProposeSetSwapAggregatorTx(opts: StellarBuilderOptions, args: {
|
|
96
|
+
aggregator: string;
|
|
97
|
+
}, salt: StellarGovernanceSalt): BuiltStellarTx;
|
|
98
|
+
/** propose(SetPriceAggregator(addr)) — Sensitive-tier self-op. */
|
|
99
|
+
export declare function buildStellarProposeSetPriceAggregatorTx(opts: StellarBuilderOptions, args: {
|
|
96
100
|
aggregator: string;
|
|
97
101
|
}, salt: StellarGovernanceSalt): BuiltStellarTx;
|
|
102
|
+
/** @deprecated Use buildStellarProposeSetSwapAggregatorTx. */
|
|
103
|
+
export declare const buildStellarProposeSetAggregatorTx: typeof buildStellarProposeSetSwapAggregatorTx;
|
|
98
104
|
/** propose(SetAccumulator(addr)) */
|
|
99
105
|
export declare function buildStellarProposeSetAccumulatorTx(opts: StellarBuilderOptions, args: {
|
|
100
106
|
accumulator: string;
|
|
101
107
|
}, salt: StellarGovernanceSalt): BuiltStellarTx;
|
|
102
|
-
/** propose(SetLiquidityPoolTemplate(hash)) */
|
|
103
|
-
export declare function buildStellarProposeSetPoolTemplateTx(opts: StellarBuilderOptions, args: {
|
|
104
|
-
wasmHash: string;
|
|
105
|
-
}, salt: StellarGovernanceSalt): BuiltStellarTx;
|
|
106
108
|
/** propose(SetPositionLimits(limits)) */
|
|
107
109
|
export declare function buildStellarProposeSetPositionLimitsTx(opts: StellarBuilderOptions, args: PositionLimitsDto, salt: StellarGovernanceSalt): BuiltStellarTx;
|
|
108
110
|
/** propose(CreateHub) */
|
|
@@ -150,8 +152,10 @@ export declare function buildStellarProposeRevokeBlendPoolTx(opts: StellarBuilde
|
|
|
150
152
|
export declare function buildStellarProposeCreateLiquidityPoolTx(opts: StellarBuilderOptions, args: CreateLiquidityPoolArgs, salt: StellarGovernanceSalt): BuiltStellarTx;
|
|
151
153
|
/** propose(UpgradeLiquidityPoolParams(UpgradePoolParamsArgs)) */
|
|
152
154
|
export declare function buildStellarProposeUpgradePoolParamsTx(opts: StellarBuilderOptions, args: UpgradeLiquidityPoolParamsArgs, salt: StellarGovernanceSalt): BuiltStellarTx;
|
|
153
|
-
/** propose(DeployPool) */
|
|
154
|
-
export declare function buildStellarProposeDeployPoolTx(opts: StellarBuilderOptions,
|
|
155
|
+
/** propose(DeployPool(hash)) */
|
|
156
|
+
export declare function buildStellarProposeDeployPoolTx(opts: StellarBuilderOptions, args: {
|
|
157
|
+
wasmHash: string;
|
|
158
|
+
}, salt: StellarGovernanceSalt): BuiltStellarTx;
|
|
155
159
|
/** propose(UpgradePool(hash)) */
|
|
156
160
|
export declare function buildStellarProposeUpgradePoolTx(opts: StellarBuilderOptions, args: {
|
|
157
161
|
wasmHash: string;
|
|
@@ -163,12 +167,14 @@ export declare function buildStellarProposeMigrateControllerTx(opts: StellarBuil
|
|
|
163
167
|
/** propose(TransferCtrlOwnership(TransferOwnershipArgs)) */
|
|
164
168
|
export declare function buildStellarProposeTransferCtrlOwnershipTx(opts: StellarBuilderOptions, args: TransferOwnershipArgs, salt: StellarGovernanceSalt): BuiltStellarTx;
|
|
165
169
|
/**
|
|
166
|
-
* propose(
|
|
170
|
+
* propose(ConfigureAssetOracle(ConfigureAssetOracleArgs))
|
|
167
171
|
*
|
|
168
|
-
*
|
|
169
|
-
*
|
|
172
|
+
* Pass PriceKey + AssetOracle input; governance resolves asset_decimals for
|
|
173
|
+
* Token keys at propose time.
|
|
170
174
|
*/
|
|
171
|
-
export declare function
|
|
175
|
+
export declare function buildStellarProposeConfigureAssetOracleTx(opts: StellarBuilderOptions, args: ConfigureAssetOracleArgs, salt: StellarGovernanceSalt): BuiltStellarTx;
|
|
176
|
+
/** @deprecated Use buildStellarProposeConfigureAssetOracleTx. */
|
|
177
|
+
export declare const buildStellarProposeConfigureMarketOracleTx: typeof buildStellarProposeConfigureAssetOracleTx;
|
|
172
178
|
/** propose(EditOracleTolerance(EditToleranceArgs)) */
|
|
173
179
|
export declare function buildStellarProposeEditOracleToleranceTx(opts: StellarBuilderOptions, args: EditOracleToleranceProposalArgs, salt: StellarGovernanceSalt): BuiltStellarTx;
|
|
174
180
|
/** propose(UpgradeGov(hash)) */
|
|
@@ -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:()=>rt,STELLAR_LENDING_CONTROLLER:()=>r,STELLAR_LENDING_TOPICS:()=>Pr,STELLAR_NETWORK_PASSPHRASE:()=>l,STELLAR_QUOTE_URL:()=>s,STELLAR_SOROBAN_RPC_URL:()=>n,SYNTHETIC_EVENT_ORDER_STRIDE:()=>Lr,XOXNO_LENDING_STELLAR_TICKER:()=>Br,buildSameTokenRepaySwapSteps:()=>eo,buildStellarAcceptOwnershipTx:()=>Ge,buildStellarAddRewardsTx:()=>et,buildStellarApproveTokenTx:()=>ze,buildStellarBatchSwapTx:()=>Fr,buildStellarBorrowBatchTx:()=>G,buildStellarBorrowTx:()=>q,buildStellarCctpForwardTx:()=>ro,buildStellarClaimRevenueTx:()=>Je,buildStellarCreateLiquidityPoolTx:()=>Ze,buildStellarExecuteCancellerResetTx:()=>rr,buildStellarExecuteStrategyTx:()=>Mr,buildStellarFlashLoanTx:()=>F,buildStellarGovernanceAddSpokeImmediateTx:()=>sr,buildStellarGovernanceCreateHubImmediateTx:()=>nr,buildStellarGovernanceExecuteGovernanceUpgradeTx:()=>Qt,buildStellarGovernanceExecuteGrantGovernanceRoleTx:()=>Zt,buildStellarGovernanceExecuteRevokeGovernanceRoleTx:()=>Yt,buildStellarGovernanceExecuteTransferGovOwnTx:()=>Jt,buildStellarGovernanceExecuteTx:()=>jt,buildStellarGovernanceExecuteUpdateDelayTx:()=>Kt,buildStellarGovernancePauseTx:()=>ir,buildStellarGovernanceRevokeRoleImmediateTx:()=>lr,buildStellarGovernanceSetOracleSanityBoundsImmediateTx:()=>ar,buildStellarGovernanceSetSpokeAssetFlagsImmediateTx:()=>or,buildStellarGrantRoleTx:()=>Ue,buildStellarLendingIdentifier:()=>Nr,buildStellarLiquidateTx:()=>M,buildStellarMigrateFromBlendTx:()=>X,buildStellarMigrateTx:()=>Be,buildStellarMultiplyTx:()=>H,buildStellarPauseTx:()=>Le,buildStellarProposeAddAssetToSpokeTx:()=>vt,buildStellarProposeAddSpokeTx:()=>yt,buildStellarProposeApproveBlendPoolTx:()=>Bt,buildStellarProposeApproveTokenTx:()=>Pt,buildStellarProposeCancellerResetTx:()=>tr,buildStellarProposeConfigureMarketOracleTx:()=>Wt,buildStellarProposeCreateHubTx:()=>Tt,buildStellarProposeCreateLiquidityPoolTx:()=>Nt,buildStellarProposeDeployPoolTx:()=>$t,buildStellarProposeEditAssetInSpokeTx:()=>Rt,buildStellarProposeEditOracleToleranceTx:()=>Vt,buildStellarProposeGovernanceUpgradeTx:()=>zt,buildStellarProposeGrantGovernanceRoleTx:()=>Ft,buildStellarProposeMigrateControllerTx:()=>qt,buildStellarProposeRemoveAssetFromSpokeTx:()=>kt,buildStellarProposeRemoveSpokeTx:()=>xt,buildStellarProposeRevokeBlendPoolTx:()=>Lt,buildStellarProposeRevokeGovernanceRoleTx:()=>Xt,buildStellarProposeRevokeTokenTx:()=>Ot,buildStellarProposeSetAccumulatorTx:()=>_t,buildStellarProposeSetAggregatorTx:()=>bt,buildStellarProposeSetMinBorrowCollatTx:()=>Et,buildStellarProposeSetPoolTemplateTx:()=>gt,buildStellarProposeSetPositionLimitsTx:()=>wt,buildStellarProposeSetPositionManagerTx:()=>It,buildStellarProposeSetSpokeLiquidationCurveTx:()=>At,buildStellarProposeTransferCtrlOwnershipTx:()=>Dt,buildStellarProposeTransferGovOwnTx:()=>Ht,buildStellarProposeUnpauseTx:()=>ur,buildStellarProposeUpdateDelayTx:()=>Mt,buildStellarProposeUpgradeControllerTx:()=>Gt,buildStellarProposeUpgradePoolParamsTx:()=>Ut,buildStellarProposeUpgradePoolTx:()=>Ct,buildStellarRenewAccountTx:()=>Ke,buildStellarRepayBatchTx:()=>V,buildStellarRepayDebtWithCollateralTx:()=>K,buildStellarRepayTx:()=>z,buildStellarRevokeRoleTx:()=>$e,buildStellarRevokeTokenTx:()=>Me,buildStellarSetAccumulatorTx:()=>De,buildStellarSetAggregatorTx:()=>qe,buildStellarSetLiquidityPoolTemplateTx:()=>We,buildStellarSetMarketOracleConfigTx:()=>Fe,buildStellarSetOracleSanityBoundsTx:()=>je,buildStellarSetOracleToleranceTx:()=>Xe,buildStellarSetPositionLimitsTx:()=>Ve,buildStellarSetSpokeAssetFlagsTx:()=>He,buildStellarSupplyBatchTx:()=>$,buildStellarSupplyTx:()=>C,buildStellarSwapCollateralTx:()=>Q,buildStellarSwapDebtTx:()=>j,buildStellarTransferOwnershipTx:()=>Ce,buildStellarUnpauseTx:()=>Ne,buildStellarUpdateAccountThresholdTx:()=>tt,buildStellarUpdateIndexesTx:()=>Qe,buildStellarUpgradeControllerTx:()=>Oe,buildStellarUpgradeLiquidityPoolParamsTx:()=>Ye,buildStellarWithdrawBatchTx:()=>D,buildStellarWithdrawTx:()=>W,buildTx:()=>U,decodeStellarLendingEvent:()=>Or,encodeInterestRateModel:()=>ve,encodeMarketOracleConfigInput:()=>Pe,encodeMarketParamsRaw:()=>Re,encodeOracleSourceConfigInput:()=>Ee,encodePositionLimits:()=>ke,encodeStrategyPayloadToRouteXdr:()=>zr,extractEventOrder:()=>Ur,getStellarAccountPositions:()=>Se,getStellarAggregatorQuote:()=>Dr,getStellarAggregatorRouter:()=>u,getStellarAsset:()=>ie,getStellarAssetGraph:()=>be,getStellarAssetMarkets:()=>ce,getStellarAssetPage:()=>ue,getStellarAssets:()=>re,getStellarGovernance:()=>c,getStellarGovernanceProposals:()=>he,getStellarHub:()=>de,getStellarHubGraph:()=>_e,getStellarHubs:()=>oe,getStellarLendingContext:()=>ee,getStellarLendingController:()=>i,getStellarLendingLiveState:()=>te,getStellarQuoteTokens:()=>Wr,getStellarReserve:()=>se,getStellarReserveGraph:()=>we,getStellarReserveHolders:()=>le,getStellarReserves:()=>ne,getStellarSpoke:()=>pe,getStellarSpokeGraph:()=>ge,getStellarSpokes:()=>ae,getStellarUserActivity:()=>fe,getStellarUserPositions:()=>me,mapQuoteResponseToAggregatorSwap:()=>jr,mapQuoteResponseToStrategyPayload:()=>Xr,mapQuoteResponseToStrategySwap:()=>Hr,mapSorobanError:()=>ao,mapStellarPositionActivityType:()=>Cr,prepareStellarBuiltTx:()=>Yr,prepareStellarTxXdr:()=>Zr,stellarLendingDispatchKey:()=>pr,stellarLendingRead:()=>Te,syntheticEventOrder:()=>$r,tagStellarInvokedContractError:()=>Kr,toBase64Xdr:()=>cr,toStellarPositionMode:()=>Jr});const r={mainnet:process.env.STELLAR_LENDING_CONTROLLER_MAINNET??"",testnet:process.env.STELLAR_LENDING_CONTROLLER_TESTNET??""},o={mainnet:process.env.STELLAR_AGGREGATOR_ROUTER_MAINNET??"",testnet:process.env.STELLAR_AGGREGATOR_ROUTER_TESTNET??""},a={mainnet:process.env.STELLAR_GOVERNANCE_MAINNET??"",testnet:process.env.STELLAR_GOVERNANCE_TESTNET??""},n={mainnet:"https://soroban-rpc.stellar.org",testnet:"https://soroban-testnet.stellar.org"},s={mainnet:process.env.STELLAR_QUOTE_URL_MAINNET??"https://stellar-swap.xoxno.com",testnet:process.env.STELLAR_QUOTE_URL_TESTNET??"https://testnet-stellar-swap.xoxno.com"},l={mainnet:"Public Global Stellar Network ; September 2015",testnet:"Test SDF Network ; September 2015"};function i(e){const t=r[e];if(!t)throw new Error(`Stellar lending controller address not configured for network "${e}". Set STELLAR_LENDING_CONTROLLER_${e.toUpperCase()} env var.`);return t}function u(e){const t=o[e];if(!t)throw new Error(`Stellar aggregator router address not configured for network "${e}". Set STELLAR_AGGREGATOR_ROUTER_${e.toUpperCase()} env var.`);return t}function c(e){const t=a[e];if(!t)throw new Error(`Stellar governance address not configured for network "${e}". Set STELLAR_GOVERNANCE_${e.toUpperCase()} env var.`);return t}const d=require("@stellar/stellar-sdk"),p=["Soroswap","Aquarius","Phoenix","Sushi","CometDex"],m=e=>new d.Address(e).toScVal(),f=e=>new d.ScInt(e).toI128(),S=e=>d.xdr.ScVal.scvU32(e),h=e=>new d.ScInt("string"==typeof e?e:e.toString()).toU64(),b=e=>d.xdr.ScVal.scvBool(e),_=e=>d.xdr.ScVal.scvString(e),g=e=>d.xdr.ScVal.scvSymbol(e),w=()=>d.xdr.ScVal.scvVoid(),T=e=>d.xdr.ScVal.scvVec(e),y=(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?w():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:S(e)}),k=(e,t,r)=>d.xdr.ScVal.scvVec([R(e,t),f(r)]),A=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:g(t),val:e[t]})));return d.xdr.ScVal.scvMap(t)},E=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([g(t)]))});var t}));return I({hops:d.xdr.ScVal.scvVec(t),split_ppm:S(e.splitPpm)})}));return I({paths:d.xdr.ScVal.scvVec(t),referral_id:h(e.referralId??0),token_in:m(e.tokenIn),token_out:m(e.tokenOut),total_min_out:f(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 d.xdr.ScVal.scvBytes(t)},O=()=>d.xdr.ScVal.scvBytes(Buffer.alloc(0)),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},L=e=>{if("string"==typeof e)return P(B(e));if(e instanceof Uint8Array)return 0===e.length?O():P(e);if(e&&"object"==typeof e)return"routeXdr"in(r=e)&&"string"==typeof r.routeXdr?P(B(e.routeXdr)):(e=>"swapXdr"in e&&"string"==typeof e.swapXdr)(e)?P(B(e.swapXdr)):(e=>"bytes"in e&&("string"==typeof e.bytes||e.bytes instanceof Uint8Array))(e)?"string"==typeof e.bytes?P(B(e.bytes)):0===e.bytes.length?O():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||!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(E(t).toXDR("base64"),"base64")));var t,r;throw new Error("Stellar builder: `steps` must be opaque strategy bytes (`routeXdr`, base64/hex string, or Uint8Array)")},N=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 U(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 U(e,"supply",[m(e.caller),h(r),S(o),A([...t.assets])])}function C(e,t){return $(e,{accountNonce:t.accountNonce,spokeId:t.spokeId,assets:[{hubId:t.hubId,asset:t.asset,amount:t.amount}]})}function G(e,t){return U(e,"borrow",[m(e.caller),h(t.accountNonce),A([...t.borrows]),x(t.to,m)])}function q(e,t){return G(e,{accountNonce:t.accountNonce,borrows:[{hubId:t.hubId,asset:t.asset,amount:t.amount}],to:t.to})}function D(e,t){return U(e,"withdraw",[m(e.caller),h(t.accountNonce),A([...t.withdrawals]),x(t.to,m)])}function W(e,t){return D(e,{accountNonce:t.accountNonce,withdrawals:[{hubId:t.hubId,asset:t.asset,amount:t.amount}],to:t.to})}function V(e,t){return U(e,"repay",[m(e.caller),h(t.accountNonce),A([...t.payments])])}function z(e,t){return V(e,{accountNonce:t.accountNonce,payments:[{hubId:t.hubId,asset:t.asset,amount:t.amount}]})}function M(e,t){return U(e,"liquidate",[m(e.caller),h(t.accountNonce),A([...t.debtPayments])])}function F(e,t){return U(e,"flash_loan",[m(e.caller),R(t.hubId,t.asset),f(t.amount),m(t.receiver),N(t.data)])}function X(e,t){return U(e,"migrate_from_blend",[m(e.caller),h(t.accountId),S(t.spokeId),S(t.hubId),m(t.blendPool),T(t.collateralTokens.map(m)),T(t.supplyTokens.map(m)),v(t.debtCaps.map((e=>({token:e.token,amount:e.cap}))))])}function H(e,t){const r=t.accountNonce??0,o=t.spokeId??0;return U(e,"multiply",[m(e.caller),h(r),S(o),R(t.collateral.hubId,t.collateral.asset),f(t.debtToFlashLoan),R(t.debt.hubId,t.debt.asset),S(t.mode),L(t.steps),x(t.initialPayment,(e=>k(e.hubId,e.asset,e.amount))),x(t.convertSwap,L)])}function j(e,t){return U(e,"swap_debt",[m(e.caller),h(t.accountNonce),R(t.existingDebt.hubId,t.existingDebt.asset),f(t.newDebtAmount),R(t.newDebt.hubId,t.newDebt.asset),L(t.steps)])}function Q(e,t){return U(e,"swap_collateral",[m(e.caller),h(t.accountNonce),R(t.current.hubId,t.current.asset),f(t.fromAmount),R(t.newCollateral.hubId,t.newCollateral.asset),L(t.steps)])}function K(e,t){return U(e,"repay_debt_with_collateral",[m(e.caller),h(t.accountNonce),R(t.collateral.hubId,t.collateral.asset),f(t.collateralAmount),R(t.debt.hubId,t.debt.asset),L(t.steps),b(t.closePosition)])}const Z="/stellar-lending",Y=25,J=encodeURIComponent,ee=(e,t)=>e.fetchWithTimeout(`${Z}/context`,t),te=(e,t)=>e.fetchWithTimeout(`${Z}/live-state`,t),re=(e,t)=>e.fetchWithTimeout(`${Z}/assets`,t),oe=(e,t)=>e.fetchWithTimeout(`${Z}/hubs`,t),ae=(e,t)=>e.fetchWithTimeout(`${Z}/spokes`,t),ne=(e,t={},r)=>{const{hubId:o,spokeId:a,asset:n}=t;return e.fetchWithTimeout(`${Z}/reserves`,{...r,params:{...void 0!==o?{hubId:o}:{},...void 0!==a?{spokeId:a}:{},...n?{asset:n}:{}}})},se=(e,t,r,o,a)=>e.fetchWithTimeout(`${Z}/reserves/${t}/${r}/${J(o)}`,a),le=(e,t,r,o,a,n)=>e.fetchWithTimeout(`${Z}/reserves/${t}/${r}/${J(o)}/holders`,{...n,params:{side:a}}),ie=(e,t,r)=>e.fetchWithTimeout(`${Z}/assets/${J(t)}`,r),ue=(e,t,r,o)=>e.fetchWithTimeout(`${Z}/assets/${J(t)}/page`,{...o,params:{...r}}),ce=(e,t,r,o)=>e.fetchWithTimeout(`${Z}/assets/${J(t)}/markets`,{...o,params:{side:r}}),de=(e,t,r)=>e.fetchWithTimeout(`${Z}/hubs/${t}`,r),pe=(e,t,r)=>e.fetchWithTimeout(`${Z}/spokes/${t}`,r),me=(e,t,r)=>e.fetchWithTimeout(`${Z}/users/${J(t)}/positions`,r),fe=(e,t,r={},o)=>{const{skip:a,top:n}=r;return e.fetchWithTimeout(`${Z}/users/${J(t)}/activity`,{...o,params:{...void 0!==a?{skip:a}:{},...void 0!==n?{top:n}:{}}})},Se=(e,t,r)=>e.fetchWithTimeout(`${Z}/accounts/${J(t)}/positions`,r),he=(e,t={},r)=>{const{top:o=Y,continuationToken:a}=t;return e.fetchWithTimeout(`${Z}/governance/proposals`,{...r,params:{top:o,...a?{continuationToken:a}:{}}})},be=(e,t,r,o)=>e.fetchWithTimeout(`${Z}/assets/${J(t)}/graph`,{...o,params:{...r}}),_e=(e,t,r,o)=>e.fetchWithTimeout(`${Z}/hubs/${t}/graph`,{...o,params:{...r}}),ge=(e,t,r,o)=>e.fetchWithTimeout(`${Z}/spokes/${t}/graph`,{...o,params:{...r}}),we=(e,t,r,o,a,n)=>e.fetchWithTimeout(`${Z}/reserves/${t}/${r}/${J(o)}/graph`,{...n,params:{...a}}),Te=e=>({context:t=>ee(e,t),liveState:t=>te(e,t),assets:t=>re(e,t),hubs:t=>oe(e,t),spokes:t=>ae(e,t),reserves:(t,r)=>{return void 0===(o=t)||"hubId"in o||"spokeId"in o||"asset"in o?ne(e,t,r):ne(e,{},t);var o},reserve:(t,r,o,a)=>se(e,t,r,o,a),reserveHolders:(t,r,o,a,n)=>le(e,t,r,o,a,n),asset:(t,r)=>ie(e,t,r),assetMarkets:(t,r,o)=>ce(e,t,r,o),hub:(t,r)=>de(e,t,r),spoke:(t,r)=>pe(e,t,r),userPositions:(t,r)=>me(e,t,r),userActivity:(t,r,o)=>fe(e,t,r,o),accountPositions:(t,r)=>Se(e,t,r),governanceProposals:(t,r)=>he(e,t,r),assetGraph:(t,r,o)=>be(e,t,r,o),hubGraph:(t,r,o)=>_e(e,t,r,o),spokeGraph:(t,r,o)=>ge(e,t,r,o),reserveGraph:(t,r,o,a,n)=>we(e,t,r,o,a,n)}),ye={Single:0,PrimaryWithAnchor:1},xe="RedStonePriceFeed",ve=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:S(e.reserveFactorBps),slope1:f(e.slope1Ray),slope2:f(e.slope2Ray),slope3:f(e.slope3Ray)}),Re=e=>I({asset_decimals:S(e.assetDecimals),asset_id:m(e.assetId),base_borrow_rate:f(e.baseBorrowRateRay),flashloan_fee:S(e.flashloanFeeBps),is_flashloanable:b(e.isFlashloanable),max_borrow_rate:f(e.maxBorrowRateRay),max_utilization:f(e.maxUtilizationRay),mid_utilization:f(e.midUtilizationRay),optimal_utilization:f(e.optimalUtilizationRay),reserve_factor:S(e.reserveFactorBps),slope1:f(e.slope1Ray),slope2:f(e.slope2Ray),slope3:f(e.slope3Ray)}),ke=e=>I({max_borrow_positions:S(e.maxBorrowPositions),max_supply_positions:S(e.maxSupplyPositions)}),Ae=e=>{const t=e.kind;switch(t){case"Stellar":return T([g("Stellar"),m(e.value)]);case"Symbol":return T([g("Symbol"),g(e.value)]);case"String":return T([g("String"),_(e.value)]);default:throw new Error(`Stellar builder: unknown oracle asset ref kind "${t}"`)}},Ie=(e,t)=>{if("Twap"===e){if("number"!=typeof t)throw new Error("Stellar builder: oracle source with Twap read mode requires `twapRecords`");return T([g("Twap"),S(t)])}return T([g("Spot")])},Ee=e=>{const t=e.provider;if("ReflectorSep40"===t){if(!e.asset)throw new Error("Stellar builder: Reflector oracle source requires `asset`");return T([g("Reflector"),I({asset:Ae(e.asset),contract:m(e.contract),read_mode:Ie(e.readMode,e.twapRecords)})])}if(t===xe||"XoxnoPriceFeed"===t){const r=t===xe?"RedStone":"Xoxno";if("string"!=typeof e.feedId)throw new Error(`Stellar builder: ${r} oracle source requires \`feedId\``);if("number"!=typeof e.maxStaleSeconds)throw new Error(`Stellar builder: ${r} oracle source requires \`maxStaleSeconds\``);return T([g(r),I({contract:m(e.contract),feed_id:_(e.feedId),max_stale_seconds:h(e.maxStaleSeconds)})])}throw new Error(`Stellar builder: unknown oracle provider "${t}"`)},Pe=e=>{const t=ye[e.strategy];if(void 0===t)throw new Error(`Stellar builder: unknown oracle strategy "${e.strategy}"`);return I({anchor:(r=e.anchor,T(null==r?[g("None")]:[g("Some"),Ee(r)])),max_price_stale_seconds:h(e.maxPriceStaleSeconds),max_sanity_price_wad:f(e.maxSanityPriceWad),min_sanity_price_wad:f(e.minSanityPriceWad),primary:Ee(e.primary),strategy:S(t),tolerance_bps:S(e.toleranceBps)});var r};function Oe(e,t){return U(e,"upgrade",[y(t.wasmHash)])}function Be(e,t){return U(e,"migrate",[S(t.newVersion)])}function Le(e){return U(e,"pause",[])}function Ne(e){return U(e,"unpause",[])}function Ue(e,t){return U(e,"grant_role",[m(t.account),g(t.role)])}function $e(e,t){return U(e,"revoke_role",[m(t.account),g(t.role)])}function Ce(e,t){return U(e,"transfer_ownership",[m(t.newOwner),S(t.liveUntilLedger)])}function Ge(e){return U(e,"accept_ownership",[])}function qe(e,t){return U(e,"set_aggregator",[m(t.aggregator)])}function De(e,t){return U(e,"set_accumulator",[m(t.accumulator)])}function We(e,t){return U(e,"set_liquidity_pool_template",[y(t.wasmHash)])}function Ve(e,t){return U(e,"set_position_limits",[ke(t)])}function ze(e,t){return U(e,"approve_token",[m(t.token)])}function Me(e,t){return U(e,"revoke_token",[m(t.token)])}function Fe(e,t){return U(e,"set_market_oracle_config",[R(t.hubId,t.asset),Pe(t.config)])}function Xe(e,t){return U(e,"set_oracle_tolerance",[m(t.asset),I({lower_ratio_bps:S(t.lowerRatioBps),upper_ratio_bps:S(t.upperRatioBps)})])}function He(e,t){return U(e,"set_spoke_asset_flags",[S(t.spokeId),R(t.hubId,t.asset),b(t.paused),b(t.frozen)])}function je(e,t){return U(e,"set_oracle_sanity_bounds",[m(t.asset),f(t.minPriceWad),f(t.maxPriceWad)])}function Qe(e,t){return U(e,"update_indexes",[m(e.caller),T(t.assets.map((e=>R(e.hubId,e.asset))))])}function Ke(e,t){return U(e,"renew_account",[m(e.caller),h(t.accountNonce)])}function Ze(e,t){return U(e,"create_liquidity_pool",[S(t.hubId),m(t.asset),Re(t.params)])}function Ye(e,t){return U(e,"upgrade_liquidity_pool_params",[R(t.hubId,t.asset),ve(t.params)])}function Je(e,t){return U(e,"claim_revenue",[m(e.caller),T(t.assets.map((e=>R(e.hubId,e.asset))))])}function et(e,t){return U(e,"add_rewards",[m(e.caller),A(t.rewards)])}function tt(e,t){return U(e,"update_account_threshold",[m(e.caller),b(t.hasRisks),T(t.accountNonces.map((e=>h(e))))])}const rt="00".repeat(32),ot=e=>{if("string"==typeof e)return y(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)},at=(e,...t)=>T([g(e),...t]),nt=e=>I({asset:m(e.asset),hub_id:S(e.hubId),params:Re(e.params)}),st=e=>I({hub_asset:R(e.hubId,e.asset),params:ve(e.params)}),lt=e=>I({new_owner:m(e.newOwner),live_until_ledger:S(e.liveUntilLedger)}),it=e=>I({cfg:Pe(e.config),hub_asset:R(e.hubId,e.asset)}),ut=e=>I({asset:m(e.asset),bonus:S(e.bonus),borrow_cap:f(e.borrowCap),can_borrow:b(e.canBorrow),can_collateral:b(e.canCollateral),frozen:b(e.frozen),hub_id:S(e.hubId),paused:b(e.paused),liquidation_fees:S(e.liquidationFees),ltv:S(e.ltv),oracle_override:T([g("None")]),spoke_id:S(e.spokeId),supply_cap:f(e.supplyCap),threshold:S(e.threshold)}),ct=e=>I({hub_asset:R(e.hubId,e.asset),spoke_id:S(e.spokeId)}),dt=e=>I({hf_for_max_bonus_wad:f(e.hfForMaxBonusWad),liquidation_bonus_factor_bps:S(e.liquidationBonusFactorBps),spoke_id:S(e.spokeId),target_hf_wad:f(e.targetHfWad)}),pt=e=>I({asset:m(e.asset),tolerance:S(e.tolerance)}),mt=e=>I({account:m(e.account),role:g(e.role)});function ft(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 St=(e,t,r)=>ft(e,"propose",[m(e.caller),t,ot(r)]),ht=(e,t,r)=>ft(e,"execute_self",[w(),t,ot(r)]);function bt(e,t,r){return St(e,at("SetAggregator",m(t.aggregator)),r)}function _t(e,t,r){return St(e,at("SetAccumulator",m(t.accumulator)),r)}function gt(e,t,r){return St(e,at("SetLiquidityPoolTemplate",y(t.wasmHash)),r)}function wt(e,t,r){return St(e,at("SetPositionLimits",ke(t)),r)}function Tt(e,t){return St(e,at("CreateHub"),t)}function yt(e,t){return St(e,at("AddSpoke"),t)}function xt(e,t,r){return St(e,at("RemoveSpoke",S(t.spokeId)),r)}function vt(e,t,r){return St(e,at("AddAssetToSpoke",ut(t)),r)}function Rt(e,t,r){return St(e,at("EditAssetInSpoke",ut(t)),r)}function kt(e,t,r){return St(e,at("RemoveAssetFromSpoke",ct(t)),r)}function At(e,t,r){return St(e,at("SetSpokeLiquidationCurve",dt(t)),r)}function It(e,t,r){return St(e,at("SetPositionManager",m(t.manager),b(t.isActive)),r)}function Et(e,t,r){return St(e,at("SetMinBorrowCollateralUsd",f(t.floorWad)),r)}function Pt(e,t,r){return St(e,at("ApproveToken",m(t.token)),r)}function Ot(e,t,r){return St(e,at("RevokeToken",m(t.token)),r)}function Bt(e,t,r){return St(e,at("ApproveBlendPool",m(t.pool)),r)}function Lt(e,t,r){return St(e,at("RevokeBlendPool",m(t.pool)),r)}function Nt(e,t,r){return St(e,at("CreateLiquidityPool",nt(t)),r)}function Ut(e,t,r){return St(e,at("UpgradeLiquidityPoolParams",st(t)),r)}function $t(e,t){return St(e,at("DeployPool"),t)}function Ct(e,t,r){return St(e,at("UpgradePool",y(t.wasmHash)),r)}function Gt(e,t,r){return St(e,at("UpgradeController",y(t.wasmHash)),r)}function qt(e,t,r){return St(e,at("MigrateController",S(t.newVersion)),r)}function Dt(e,t,r){return St(e,at("TransferCtrlOwnership",lt(t)),r)}function Wt(e,t,r){return St(e,at("ConfigureMarketOracle",it(t)),r)}function Vt(e,t,r){return St(e,at("EditOracleTolerance",pt(t)),r)}function zt(e,t,r){return St(e,at("UpgradeGov",y(t.wasmHash)),r)}function Mt(e,t,r){return St(e,at("UpdateGovDelay",S(t.newDelay)),r)}function Ft(e,t,r){return St(e,at("GrantGovRole",mt(t)),r)}function Xt(e,t,r){return St(e,at("RevokeGovRole",mt(t)),r)}function Ht(e,t,r){return St(e,at("TransferGovOwnership",lt(t)),r)}function jt(e,t){const r=T(t.argsXdr.map((e=>d.xdr.ScVal.fromXDR(e,"base64")))),o=ot(t.predecessor??rt);return ft(e,"execute",[w(),m(t.target),g(t.functionName),r,o,ot(t.salt)])}function Qt(e,t,r){return ht(e,at("UpgradeGov",y(t.wasmHash)),r)}function Kt(e,t,r){return ht(e,at("UpdateGovDelay",S(t.newDelay)),r)}function Zt(e,t,r){return ht(e,at("GrantGovRole",mt(t)),r)}function Yt(e,t,r){return ht(e,at("RevokeGovRole",mt(t)),r)}function Jt(e,t,r){return ht(e,at("TransferGovOwnership",lt(t)),r)}const er=e=>T(e.map(m));function tr(e,t,r){return ft(e,"propose_canceller_reset",[er(t.newCancellers),ot(r)])}function rr(e,t,r){return ft(e,"execute_canceller_reset",[x(t.executor,m),er(t.newCancellers),ot(r)])}function or(e,t){return ft(e,"set_spoke_asset_flags",[m(e.caller),S(t.spokeId),R(t.hubId,t.asset),b(t.paused),b(t.frozen)])}function ar(e,t){return ft(e,"set_oracle_sanity_bounds",[m(e.caller),m(t.asset),f(t.minPriceWad),f(t.maxPriceWad)])}function nr(e){return ft(e,"create_hub",[m(e.caller)])}function sr(e){return ft(e,"add_spoke",[m(e.caller)])}function lr(e,t){return ft(e,"revoke_role_immediate",[m(t.account),g(t.role)])}function ir(e){return ft(e,"pause",[m(e.caller)])}function ur(e,t){return St(e,at("Unpause"),t)}const cr=e=>e.toXDR("base64"),dr=e=>d.xdr.ScVal.fromXDR(e,"base64"),pr=e=>e.map((e=>String((0,d.scValToNative)(dr(e))))).join(":"),mr=e=>"bigint"==typeof e||"number"==typeof e?e.toString():String(e),fr=e=>Number(e),Sr=e=>String(e),hr=e=>null==e?void 0:mr(e),br=e=>e instanceof Uint8Array?Buffer.from(e).toString("hex"):Buffer.isBuffer(e)?e.toString("hex"):String(e),_r=["None","Multiply","Long","Short"],gr=["Single","PrimaryWithAnchor"],wr=["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"],Tr=e=>Array.isArray(e)?e:[],yr=(e,t)=>{const r="Borrow"===t;return{action:(o=e[0],wr[fr(o)]??mr(o)),positionType:t,hubId:fr(e[1]),asset:Sr(e[2]),scaledAmountRay:mr(e[3]),indexRay:mr(e[4]),amount:mr(e[5]),liquidationThresholdBps:r?void 0:fr(e[6]),liquidationBonusBps:r?void 0:fr(e[7]),loanToValueBps:r?void 0:fr(e[8]),liquidationFeesBps:r?void 0:fr(e[9])};var o},xr=e=>{return{owner:Sr(e[0]),spokeId:fr(e[1]),mode:(t=e[2],_r[fr(t)]??"None")};var t},vr=e=>Array.isArray(e)?Sr(e[0]):Sr(e),Rr=e=>Array.isArray(e)?e[1]:void 0,kr={Reflector:"ReflectorSep40",RedStone:"RedStonePriceFeed",Xoxno:"XoxnoPriceFeed"},Ar=(e,t)=>{const r=vr(e),o=Rr(e)??{};if("Reflector"!==r)return{source:{provider:kr[r]??"RedStonePriceFeed",contractAddress:Sr(o.contract),asset:void 0,feedId:Sr(o.feed_id),readMode:"Spot",twapRecords:void 0,decimals:fr(o.decimals),resolutionSeconds:0,maxStaleSeconds:fr(o.max_stale_seconds)},quoteToken:void 0};const a=vr(o.read_mode),n=vr(o.asset);return{source:{provider:"ReflectorSep40",contractAddress:Sr(o.contract),asset:"Stellar"===n||"Symbol"===n?{kind:n,value:Sr(Rr(o.asset))}:void 0,feedId:"String"===n?Sr(Rr(o.asset)):void 0,readMode:a,twapRecords:"Twap"===a?fr(Rr(o.read_mode)):void 0,decimals:fr(o.decimals),resolutionSeconds:fr(o.resolution_seconds),maxStaleSeconds:t},quoteToken:"Quoted"===vr(o.base)?Sr(Rr(o.base)):void 0}},Ir=(e,t)=>{const r=t.tolerance??{},o=fr(t.max_price_stale_seconds),a=Ar(t.primary,o),n="Some"===vr(t.anchor)?Rr(t.anchor):void 0,s=n?Ar(n,o):void 0;return{baseTokenId:e,quoteTokenId:"USD",tolerance:{upperRatio:fr(r.upper_ratio_bps),lowerRatio:fr(r.lower_ratio_bps)},assetDecimals:fr(t.asset_decimals),maxPriceStaleSeconds:o,strategy:gr[fr(t.strategy)]??"Single",primary:a.source,anchor:s?.source,primaryQuoteToken:a.quoteToken,anchorQuoteToken:s?.quoteToken,minSanityPriceWad:hr(t.min_sanity_price_wad),maxSanityPriceWad:hr(t.max_sanity_price_wad)}},Er={"market:create":e=>({topic:"market:create",data:{hubId:fr(e.hub_id),baseAsset:Sr(e.base_asset),maxBorrowRate:mr(e.max_borrow_rate),baseBorrowRate:mr(e.base_borrow_rate),slope1:mr(e.slope1),slope2:mr(e.slope2),slope3:mr(e.slope3),midUtilization:mr(e.mid_utilization),optimalUtilization:mr(e.optimal_utilization),maxUtilization:mr(e.max_utilization),reserveFactor:fr(e.reserve_factor),marketAddress:Sr(e.market_address)}}),"market:params_update":e=>({topic:"market:params_update",data:{asset:Sr(e.asset),maxBorrowRateRay:mr(e.max_borrow_rate),baseBorrowRateRay:mr(e.base_borrow_rate),slope1Ray:mr(e.slope1),slope2Ray:mr(e.slope2),slope3Ray:mr(e.slope3),midUtilizationRay:mr(e.mid_utilization),optimalUtilizationRay:mr(e.optimal_utilization),maxUtilizationRay:mr(e.max_utilization),reserveFactorBps:fr(e.reserve_factor)}}),"market:batch_state_update":e=>({topic:"market:batch_state_update",data:{updates:Tr(e).map((e=>{return t=Tr(e),{hubId:fr(t[0]),asset:Sr(t[1]),timestamp:fr(t[2]),supplyIndexRay:mr(t[3]),borrowIndexRay:mr(t[4]),cash:mr(t[5]),suppliedRay:mr(t[6]),borrowedRay:mr(t[7]),revenueRay:mr(t[8])};var t}))}}),"market:batch_params_update":e=>({topic:"market:batch_params_update",data:{updates:Tr(e).map((e=>{const t=e;return{hubId:fr(t.hub_id),asset:Sr(t.asset),params:(r=t.params,{maxBorrowRateRay:mr(r.max_borrow_rate),baseBorrowRateRay:mr(r.base_borrow_rate),slope1Ray:mr(r.slope1),slope2Ray:mr(r.slope2),slope3Ray:mr(r.slope3),midUtilizationRay:mr(r.mid_utilization),optimalUtilizationRay:mr(r.optimal_utilization),maxUtilizationRay:mr(r.max_utilization),reserveFactorBps:fr(r.reserve_factor),isFlashloanable:Boolean(r.is_flashloanable),flashloanFeeBps:fr(r.flashloan_fee),assetId:Sr(r.asset_id),assetDecimals:fr(r.asset_decimals)})};var r}))}}),"position:batch_update":e=>{const t=Tr(e);return{topic:"position:batch_update",data:{accountId:mr(t[0]),accountAttributes:xr(Tr(t[1])),updates:[...Tr(t[2]).map((e=>yr(Tr(e),"Deposit"))),...Tr(t[3]).map((e=>yr(Tr(e),"Borrow")))]}}},"position:flash_loan":e=>({topic:"position:flash_loan",data:{hubId:fr(e.hub_id),asset:Sr(e.asset),receiver:Sr(e.receiver),caller:Sr(e.caller),amount:mr(e.amount),fee:mr(e.fee)}}),"config:oracle":e=>({topic:"config:oracle",data:{asset:Sr(e.asset),oracle:Ir(Sr(e.asset),e.config)}}),"position:liquidation":e=>({topic:"position:liquidation",data:{liquidator:Sr(e.liquidator),accountId:mr(e.account_id),repaidUsdWad:mr(e.repaid_usd_wad),bonusBps:mr(e.bonus_bps)}}),"debt:bad_debt":e=>({topic:"debt:bad_debt",data:{accountId:mr(e.account_id),totalBorrowUsdWad:mr(e.total_borrow_usd_wad),totalCollateralUsdWad:mr(e.total_collateral_usd_wad)}}),"strategy:initial_payment":e=>({topic:"strategy:initial_payment",data:{token:Sr(e.token),amount:mr(e.amount),usdValueWad:mr(e.usd_value_wad),accountId:mr(e.account_id)}}),"strategy:fee":e=>({topic:"strategy:fee",data:{hubId:fr(e.hub_id),asset:Sr(e.asset),amount:mr(e.amount),fee:mr(e.fee),amountSent:mr(e.amount_sent)}}),"config:approve_token":e=>({topic:"config:approve_token",data:{wasmHash:br(e.wasm_hash),approved:Boolean(e.approved)}}),"config:aggregator":e=>({topic:"config:aggregator",data:{aggregator:Sr(e.aggregator)}}),"config:accumulator":e=>({topic:"config:accumulator",data:{accumulator:Sr(e.accumulator)}}),"config:pool_template":e=>({topic:"config:pool_template",data:{wasmHash:br(e.wasm_hash)}}),"config:position_limits":e=>({topic:"config:position_limits",data:{maxSupplyPositions:fr(e.max_supply_positions),maxBorrowPositions:fr(e.max_borrow_positions)}}),"config:oracle_disabled":e=>({topic:"config:oracle_disabled",data:{asset:Sr(e.asset)}}),"config:spoke":e=>{const t=e.spoke;return{topic:"config:spoke",data:{spokeId:fr(t.spoke_id),isDeprecated:Boolean(t.is_deprecated),liquidationTargetHfWad:mr(t.liquidation_target_hf_wad),healthFactorForMaxBonusWad:mr(t.hf_for_max_bonus_wad),liquidationBonusFactorBps:fr(t.liquidation_bonus_factor_bps)}}}},Pr=Object.freeze(Object.keys(Er));function Or(e,t){const r=pr(e),o=Er[r];return o?o((0,d.scValToNative)(dr(t))):null}const Br="XLENDXLM-a7c9f3",Lr=1e4;function Nr(e){const t=BigInt(e).toString(16),r=t.length%2==0?t:`0${t}`;return`${Br}-${r}`}function Ur(e){const t=e.split("-");return t.length>=2&&parseInt(t[1],10)||0}function $r(e,t=0){return e*Lr+t}function Cr(e){switch(e){case"liq_repay":return"lendingLiquidateRepayDebt";case"liq_seize":return"lendingLiquidateSeizeCollateral";case"param_upd":return"lendingUpdateAccountParameters";default:return"lendingUpdateAccountPosition"}}const Gr=(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()},qr=e=>e.baseUrl??s[e.network];async function Dr(e,t){if(null==e.amountIn==(null==e.amountOut))throw new Error("getStellarAggregatorQuote: exactly one of `amountIn` or `amountOut` must be provided");const r=Gr(qr(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=Gr(qr(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 Vr=(e,t)=>(e=>Boolean(e&&"object"==typeof e&&!(e instanceof Uint8Array)&&"paths"in e))(e)&&void 0===e.referralId?{...e,referralId:t??0}:e,zr=e=>E(e).toXDR("base64");function Mr(e,t){const r=e.routerAddress??u(e.network),o=new d.Contract(r),a=new d.Account(e.caller,e.sourceSequence),n=L(Vr(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 Fr(e,t){return Mr(e,t)}function Xr(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(Qr),splitPpm:e.splitPpm}))):[{hops:e.hops.map(Qr),splitPpm:1e6}],referralId:t.referralId??0,tokenIn:e.from,tokenOut:e.to,totalMinOut:e.amountOutMin}}function Hr(e,t={}){const r=e;return"string"==typeof r.routeXdr&&r.routeXdr.length>0?{routeXdr:r.routeXdr}:Xr(e,t)}const jr=Xr,Qr=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 Zr(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 Yr(e,t,r){return Zr(e,t.xdr,r)}function Jr(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 eo(e,t){return new Uint8Array(0)}const to=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 ro(e){const t=new d.Account(e.caller,e.sourceSequence),r=new d.Contract(e.forwarderAddress).call("mint_and_forward",d.xdr.ScVal.scvBytes(to(e.message)),d.xdr.ScVal.scvBytes(to(e.attestation)));return{xdr:new d.TransactionBuilder(t,{fee:e.fee??"10000000",networkPassphrase:l[e.network]}).addOperation(r).setTimeout(e.timeoutSeconds??120).build().toXDR()}}const oo={1:{name:"AssetNotSupported",message:"This asset is not supported by the protocol."},2:{name:"AssetAlreadySupported",message:"This asset is already supported."},3:{name:"InvalidTicker",message:"Invalid asset ticker."},6:{name:"InvalidAsset",message:"Invalid asset address."},10:{name:"InvalidPoolTemplate",message:"The liquidity pool template hash is invalid."},11:{name:"InvalidExchangeSrc",message:"The oracle configuration is invalid."},12:{name:"PairNotActive",message:"No oracle is configured for this asset."},32:{name:"OwnerNotSet",message:"The contract owner has not been set."},39:{name:"InvalidTimelockDelay",message:"The timelock delay is out of the allowed range."},41:{name:"InvalidRole",message:"The caller does not hold the required role."},43:{name:"HubNotActive",message:"This hub is not active."},44:{name:"NotAuthorized",message:"The caller is not authorized to perform this action."},46:{name:"OperationNotCancellable",message:"This governance operation cannot be cancelled."},113:{name:"InvalidLiqThreshold",message:"LTV, liquidation threshold, or bonus is out of bounds."},116:{name:"InvalidBorrowParams",message:"Supply or borrow cap configuration is invalid."},117:{name:"InvalidUtilRange",message:"Interest-rate utilization breakpoints are invalid."},132:{name:"AssetDecimalsTooHigh",message:"Asset decimals exceed the protocol maximum (27)."},300:{name:"SpokeNotFound",message:"This spoke does not exist."},301:{name:"SpokeDeprecated",message:"This spoke has been deprecated."},307:{name:"AssetNotInSpoke",message:"This asset is not listed on the spoke."},308:{name:"AssetAlreadyInSpoke",message:"This asset is already listed in the spoke."},309:{name:"SpokeAssetInUse",message:"This spoke asset still has live positions; drain usage before removal."},315:{name:"SpokeAssetPaused",message:"This spoke asset is paused."},316:{name:"SpokeAssetFrozen",message:"This spoke asset is frozen."},317:{name:"SpokeAssetFlagRelaxation",message:"Guardian flag updates may only tighten; clearing a flag requires the timelocked edit."},220:{name:"InvalidOracleBase",message:"The oracle quote asset/market is missing or invalid."},221:{name:"InvalidOracleDecimals",message:"The oracle decimals value is invalid."},224:{name:"InvalidSanityBounds",message:"Oracle sanity bounds are invalid (require 0 < min < max)."},225:{name:"OracleCycleDetected",message:"A cycle was detected in the oracle quote chain."}};function ao(e){const t=e.match(/Error\(Contract,\s*#(\d+)\)/);if(!t)return null;const r=Number(t[1]),o=oo[r];return o?{code:r,...o}:null}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:()=>ct,STELLAR_LENDING_CONTROLLER:()=>r,STELLAR_LENDING_TOPICS:()=>Ur,STELLAR_NETWORK_PASSPHRASE:()=>i,STELLAR_QUOTE_URL:()=>s,STELLAR_SOROBAN_RPC_URL:()=>n,SYNTHETIC_EVENT_ORDER_STRIDE:()=>qr,XOXNO_LENDING_STELLAR_TICKER:()=>Gr,buildSameTokenRepaySwapSteps:()=>so,buildStellarAcceptOwnershipTx:()=>Me,buildStellarAddRewardsTx:()=>lt,buildStellarApproveBlendPoolTx:()=>je,buildStellarApproveTokenTx:()=>Je,buildStellarBatchSwapTx:()=>Kr,buildStellarBorrowBatchTx:()=>G,buildStellarBorrowTx:()=>q,buildStellarCctpForwardTx:()=>lo,buildStellarClaimRevenueTx:()=>it,buildStellarCreateLiquidityPoolTx:()=>nt,buildStellarExecuteCancellerResetTx:()=>pr,buildStellarExecuteStrategyTx:()=>Jr,buildStellarFlashLoanTx:()=>F,buildStellarGovernanceAddSpokeImmediateTx:()=>br,buildStellarGovernanceCreateHubImmediateTx:()=>Sr,buildStellarGovernanceExecuteGovernanceUpgradeTx:()=>nr,buildStellarGovernanceExecuteGrantGovernanceRoleTx:()=>ir,buildStellarGovernanceExecuteRevokeGovernanceRoleTx:()=>lr,buildStellarGovernanceExecuteTransferGovOwnTx:()=>ur,buildStellarGovernanceExecuteTx:()=>ar,buildStellarGovernanceExecuteUpdateDelayTx:()=>sr,buildStellarGovernancePauseTx:()=>hr,buildStellarGovernanceRevokeRoleImmediateTx:()=>gr,buildStellarGovernanceSetOracleSanityBoundsImmediateTx:()=>fr,buildStellarGovernanceSetSpokeAssetFlagsImmediateTx:()=>mr,buildStellarGrantRoleTx:()=>qe,buildStellarLendingIdentifier:()=>Dr,buildStellarLiquidateTx:()=>z,buildStellarMigrateFromBlendTx:()=>X,buildStellarMigrateTx:()=>Ue,buildStellarMultiplyTx:()=>H,buildStellarPauseTx:()=>Ce,buildStellarProposeAddAssetToSpokeTx:()=>Nt,buildStellarProposeAddSpokeTx:()=>Ot,buildStellarProposeApproveBlendPoolTx:()=>Wt,buildStellarProposeApproveTokenTx:()=>qt,buildStellarProposeCancellerResetTx:()=>dr,buildStellarProposeConfigureAssetOracleTx:()=>Jt,buildStellarProposeConfigureMarketOracleTx:()=>Kt,buildStellarProposeCreateHubTx:()=>Pt,buildStellarProposeCreateLiquidityPoolTx:()=>Vt,buildStellarProposeDeployPoolTx:()=>Ft,buildStellarProposeEditAssetInSpokeTx:()=>Lt,buildStellarProposeEditOracleToleranceTx:()=>Zt,buildStellarProposeGovernanceUpgradeTx:()=>Yt,buildStellarProposeGrantGovernanceRoleTx:()=>tr,buildStellarProposeMigrateControllerTx:()=>jt,buildStellarProposeRemoveAssetFromSpokeTx:()=>$t,buildStellarProposeRemoveSpokeTx:()=>Bt,buildStellarProposeRevokeBlendPoolTx:()=>Mt,buildStellarProposeRevokeGovernanceRoleTx:()=>rr,buildStellarProposeRevokeTokenTx:()=>Dt,buildStellarProposeSetAccumulatorTx:()=>Et,buildStellarProposeSetAggregatorTx:()=>At,buildStellarProposeSetMinBorrowCollatTx:()=>Gt,buildStellarProposeSetPositionLimitsTx:()=>It,buildStellarProposeSetPositionManagerTx:()=>Ct,buildStellarProposeSetPriceAggregatorTx:()=>Rt,buildStellarProposeSetSpokeLiquidationCurveTx:()=>Ut,buildStellarProposeSetSwapAggregatorTx:()=>kt,buildStellarProposeTransferCtrlOwnershipTx:()=>Qt,buildStellarProposeTransferGovOwnTx:()=>or,buildStellarProposeUnpauseTx:()=>_r,buildStellarProposeUpdateDelayTx:()=>er,buildStellarProposeUpgradeControllerTx:()=>Ht,buildStellarProposeUpgradePoolParamsTx:()=>zt,buildStellarProposeUpgradePoolTx:()=>Xt,buildStellarRenewAccountTx:()=>at,buildStellarRepayBatchTx:()=>M,buildStellarRepayDebtWithCollateralTx:()=>J,buildStellarRepayTx:()=>V,buildStellarRevokeBlendPoolTx:()=>Qe,buildStellarRevokeRoleTx:()=>De,buildStellarRevokeTokenTx:()=>Ke,buildStellarSetAccumulatorTx:()=>Xe,buildStellarSetAggregatorTx:()=>Fe,buildStellarSetMarketOracleConfigTx:()=>Ye,buildStellarSetOracleSanityBoundsTx:()=>rt,buildStellarSetOracleToleranceTx:()=>et,buildStellarSetOracleTx:()=>Ze,buildStellarSetPositionLimitsTx:()=>He,buildStellarSetPriceAggregatorTx:()=>ze,buildStellarSetSpokeAssetFlagsTx:()=>tt,buildStellarSetSwapAggregatorTx:()=>Ve,buildStellarSupplyBatchTx:()=>U,buildStellarSupplyTx:()=>C,buildStellarSwapCollateralTx:()=>Q,buildStellarSwapDebtTx:()=>j,buildStellarTransferOwnershipTx:()=>We,buildStellarUnpauseTx:()=>Ge,buildStellarUpdateAccountThresholdTx:()=>ut,buildStellarUpdateIndexesTx:()=>ot,buildStellarUpgradeControllerTx:()=>$e,buildStellarUpgradeLiquidityPoolParamsTx:()=>st,buildStellarWithdrawBatchTx:()=>D,buildStellarWithdrawTx:()=>W,buildTx:()=>$,decodeStellarLendingEvent:()=>Cr,encodeAssetOracle:()=>Ne,encodeInterestRateModel:()=>ye,encodeMarketOracleConfigInput:()=>Le,encodeMarketParamsRaw:()=>xe,encodePositionLimits:()=>ve,encodePriceKey:()=>ke,encodeStrategyPayloadToRouteXdr:()=>Qr,extractEventOrder:()=>Wr,getStellarAccountPositions:()=>Se,getStellarAggregatorQuote:()=>Xr,getStellarAggregatorRouter:()=>u,getStellarAsset:()=>le,getStellarAssetGraph:()=>ge,getStellarAssetMarkets:()=>ce,getStellarAssetPage:()=>ue,getStellarAssets:()=>re,getStellarGovernance:()=>c,getStellarGovernanceProposals:()=>be,getStellarHub:()=>de,getStellarHubGraph:()=>he,getStellarHubs:()=>oe,getStellarLendingContext:()=>ee,getStellarLendingController:()=>l,getStellarLendingLiveState:()=>te,getStellarQuoteTokens:()=>Hr,getStellarReserve:()=>se,getStellarReserveGraph:()=>we,getStellarReserveHolders:()=>ie,getStellarReserves:()=>ne,getStellarSpoke:()=>pe,getStellarSpokeGraph:()=>_e,getStellarSpokes:()=>ae,getStellarUserActivity:()=>fe,getStellarUserPositions:()=>me,mapQuoteResponseToAggregatorSwap:()=>eo,mapQuoteResponseToStrategyPayload:()=>Zr,mapQuoteResponseToStrategySwap:()=>Yr,mapSorobanError:()=>co,mapStellarPositionActivityType:()=>Vr,prepareStellarBuiltTx:()=>ao,prepareStellarTxXdr:()=>oo,stellarLendingDispatchKey:()=>yr,stellarLendingRead:()=>Te,syntheticEventOrder:()=>Mr,tagStellarInvokedContractError:()=>ro,toBase64Xdr:()=>wr,toStellarPositionMode:()=>no});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"},i={mainnet:"Public Global Stellar Network ; September 2015",testnet:"Test SDF Network ; September 2015"};function l(e){const t=r[e];if(!t)throw new Error(`Stellar lending controller address not configured for network "${e}". Set STELLAR_LENDING_CONTROLLER_${e.toUpperCase()} env var.`);return t}function u(e){const t=o[e];if(!t)throw new Error(`Stellar aggregator router address not configured for network "${e}". Set STELLAR_AGGREGATOR_ROUTER_${e.toUpperCase()} env var.`);return t}function c(e){const t=a[e];if(!t)throw new Error(`Stellar governance address not configured for network "${e}". Set STELLAR_GOVERNANCE_${e.toUpperCase()} env var.`);return t}const d=require("@stellar/stellar-sdk"),p=["Soroswap","Aquarius","Phoenix","Sushi","CometDex"],m=e=>new d.Address(e).toScVal(),f=e=>new d.ScInt(e).toI128(),S=e=>d.xdr.ScVal.scvU32(e),b=e=>new d.ScInt("string"==typeof e?e:e.toString()).toU64(),g=e=>d.xdr.ScVal.scvBool(e),h=e=>d.xdr.ScVal.scvString(e),_=e=>d.xdr.ScVal.scvSymbol(e),w=()=>d.xdr.ScVal.scvVoid(),T=e=>d.xdr.ScVal.scvVec(e),y=(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?w():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}))),k=(e,t)=>E({asset:m(t),hub_id:S(e)}),R=(e,t,r)=>d.xdr.ScVal.scvVec([k(e,t),f(r)]),A=e=>d.xdr.ScVal.scvVec(e.map((e=>R(e.hubId,e.asset,e.amount)))),E=e=>{const t=Object.keys(e).sort().map((t=>new d.xdr.ScMapEntry({key:_(t),val:e[t]})));return d.xdr.ScVal.scvMap(t)},I=e=>{const t=e.paths.map((e=>{const t=e.hops.map((e=>{return E({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([_(t)]))});var t}));return E({hops:d.xdr.ScVal.scvVec(t),split_ppm:S(e.splitPpm)})}));return E({paths:d.xdr.ScVal.scvVec(t),referral_id:b(e.referralId??0),token_in:m(e.tokenIn),token_out:m(e.tokenOut),total_min_out:f(e.totalMinOut)})},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 d.xdr.ScVal.scvBytes(t)},O=()=>d.xdr.ScVal.scvBytes(Buffer.alloc(0)),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},N=e=>{if("string"==typeof e)return P(B(e));if(e instanceof Uint8Array)return 0===e.length?O():P(e);if(e&&"object"==typeof e)return"routeXdr"in(r=e)&&"string"==typeof r.routeXdr?P(B(e.routeXdr)):(e=>"swapXdr"in e&&"string"==typeof e.swapXdr)(e)?P(B(e.swapXdr)):(e=>"bytes"in e&&("string"==typeof e.bytes||e.bytes instanceof Uint8Array))(e)?"string"==typeof e.bytes?P(B(e.bytes)):0===e.bytes.length?O():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||!p.includes(r.venue))throw new Error(`Stellar builder: \`steps.paths[${e}].hops[${t}]\` must have amountOut, pool, tokenIn, tokenOut, and a valid Soroban venue`)}if(1e6!==r)throw new Error(`Stellar builder: \`steps.paths[].splitPpm\` must sum to 1_000_000, got ${r}`);return t})(e),d.xdr.ScVal.scvBytes(Buffer.from(I(t).toXDR("base64"),"base64")));var t,r;throw new Error("Stellar builder: `steps` must be opaque strategy bytes (`routeXdr`, base64/hex string, or Uint8Array)")},L=e=>{if("string"==typeof e)return(e=>{const t=e.startsWith("0x")?e.slice(2):e,r=Buffer.from(t,"hex");return d.xdr.ScVal.scvBytes(r)})(e);if(e instanceof Uint8Array)return d.xdr.ScVal.scvBytes(Buffer.from(e));throw new Error("Stellar builder: `data` must be a hex string or Uint8Array (Soroban Bytes payload)")};function $(e,t,r){const o=e.controllerAddress??l(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:i[e.network]}).addOperation(a.call(t,...r)).setTimeout(e.timeoutSeconds??300).build().toXDR()}}function U(e,t){const r=t.accountNonce??0,o=t.spokeId??0;return $(e,"supply",[m(e.caller),b(r),S(o),A([...t.assets])])}function C(e,t){return U(e,{accountNonce:t.accountNonce,spokeId:t.spokeId,assets:[{hubId:t.hubId,asset:t.asset,amount:t.amount}]})}function G(e,t){return $(e,"borrow",[m(e.caller),b(t.accountNonce),A([...t.borrows]),x(t.to,m)])}function q(e,t){return G(e,{accountNonce:t.accountNonce,borrows:[{hubId:t.hubId,asset:t.asset,amount:t.amount}],to:t.to})}function D(e,t){return $(e,"withdraw",[m(e.caller),b(t.accountNonce),A([...t.withdrawals]),x(t.to,m)])}function W(e,t){return D(e,{accountNonce:t.accountNonce,withdrawals:[{hubId:t.hubId,asset:t.asset,amount:t.amount}],to:t.to})}function M(e,t){return $(e,"repay",[m(e.caller),b(t.accountNonce),A([...t.payments])])}function V(e,t){return M(e,{accountNonce:t.accountNonce,payments:[{hubId:t.hubId,asset:t.asset,amount:t.amount}]})}function z(e,t){return $(e,"liquidate",[m(e.caller),b(t.accountNonce),A([...t.debtPayments])])}function F(e,t){return $(e,"flash_loan",[m(e.caller),k(t.hubId,t.asset),f(t.amount),m(t.receiver),L(t.data)])}function X(e,t){return $(e,"migrate_from_blend",[m(e.caller),b(t.accountId),S(t.spokeId),S(t.hubId),m(t.blendPool),T(t.collateralTokens.map(m)),T(t.supplyTokens.map(m)),v(t.debtCaps.map((e=>({token:e.token,amount:e.cap}))))])}function H(e,t){const r=t.accountNonce??0,o=t.spokeId??0;return $(e,"multiply",[m(e.caller),b(r),S(o),k(t.collateral.hubId,t.collateral.asset),f(t.debtToFlashLoan),k(t.debt.hubId,t.debt.asset),S(t.mode),N(t.steps),x(t.initialPayment,(e=>R(e.hubId,e.asset,e.amount))),x(t.convertSwap,N)])}function j(e,t){return $(e,"swap_debt",[m(e.caller),b(t.accountNonce),k(t.existingDebt.hubId,t.existingDebt.asset),f(t.newDebtAmount),k(t.newDebt.hubId,t.newDebt.asset),N(t.steps)])}function Q(e,t){return $(e,"swap_collateral",[m(e.caller),b(t.accountNonce),k(t.current.hubId,t.current.asset),f(t.fromAmount),k(t.newCollateral.hubId,t.newCollateral.asset),N(t.steps)])}function J(e,t){return $(e,"repay_debt_with_collateral",[m(e.caller),b(t.accountNonce),k(t.collateral.hubId,t.collateral.asset),f(t.collateralAmount),k(t.debt.hubId,t.debt.asset),N(t.steps),g(t.closePosition)])}const K="/stellar-lending",Z=25,Y=encodeURIComponent,ee=(e,t)=>e.fetchWithTimeout(`${K}/context`,t),te=(e,t)=>e.fetchWithTimeout(`${K}/live-state`,t),re=(e,t)=>e.fetchWithTimeout(`${K}/assets`,t),oe=(e,t)=>e.fetchWithTimeout(`${K}/hubs`,t),ae=(e,t)=>e.fetchWithTimeout(`${K}/spokes`,t),ne=(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}:{}}})},se=(e,t,r,o,a)=>e.fetchWithTimeout(`${K}/reserves/${t}/${r}/${Y(o)}`,a),ie=(e,t,r,o,a,n)=>e.fetchWithTimeout(`${K}/reserves/${t}/${r}/${Y(o)}/holders`,{...n,params:{side:a}}),le=(e,t,r)=>e.fetchWithTimeout(`${K}/assets/${Y(t)}`,r),ue=(e,t,r,o)=>e.fetchWithTimeout(`${K}/assets/${Y(t)}/page`,{...o,params:{...r}}),ce=(e,t,r,o)=>e.fetchWithTimeout(`${K}/assets/${Y(t)}/markets`,{...o,params:{side:r}}),de=(e,t,r)=>e.fetchWithTimeout(`${K}/hubs/${t}`,r),pe=(e,t,r)=>e.fetchWithTimeout(`${K}/spokes/${t}`,r),me=(e,t,r)=>e.fetchWithTimeout(`${K}/users/${Y(t)}/positions`,r),fe=(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}:{}}})},Se=(e,t,r)=>e.fetchWithTimeout(`${K}/accounts/${Y(t)}/positions`,r),be=(e,t={},r)=>{const{top:o=Z,continuationToken:a}=t;return e.fetchWithTimeout(`${K}/governance/proposals`,{...r,params:{top:o,...a?{continuationToken:a}:{}}})},ge=(e,t,r,o)=>e.fetchWithTimeout(`${K}/assets/${Y(t)}/graph`,{...o,params:{...r}}),he=(e,t,r,o)=>e.fetchWithTimeout(`${K}/hubs/${t}/graph`,{...o,params:{...r}}),_e=(e,t,r,o)=>e.fetchWithTimeout(`${K}/spokes/${t}/graph`,{...o,params:{...r}}),we=(e,t,r,o,a,n)=>e.fetchWithTimeout(`${K}/reserves/${t}/${r}/${Y(o)}/graph`,{...n,params:{...a}}),Te=e=>({context:t=>ee(e,t),liveState:t=>te(e,t),assets:t=>re(e,t),hubs:t=>oe(e,t),spokes:t=>ae(e,t),reserves:(t,r)=>{return void 0===(o=t)||"hubId"in o||"spokeId"in o||"asset"in o?ne(e,t,r):ne(e,{},t);var o},reserve:(t,r,o,a)=>se(e,t,r,o,a),reserveHolders:(t,r,o,a,n)=>ie(e,t,r,o,a,n),asset:(t,r)=>le(e,t,r),assetMarkets:(t,r,o)=>ce(e,t,r,o),hub:(t,r)=>de(e,t,r),spoke:(t,r)=>pe(e,t,r),userPositions:(t,r)=>me(e,t,r),userActivity:(t,r,o)=>fe(e,t,r,o),accountPositions:(t,r)=>Se(e,t,r),governanceProposals:(t,r)=>be(e,t,r),assetGraph:(t,r,o)=>ge(e,t,r,o),hubGraph:(t,r,o)=>he(e,t,r,o),spokeGraph:(t,r,o)=>_e(e,t,r,o),reserveGraph:(t,r,o,a,n)=>we(e,t,r,o,a,n)}),ye=e=>E({base_borrow_rate:f(e.baseBorrowRateRay),max_borrow_rate:f(e.maxBorrowRateRay),max_utilization:f(e.maxUtilizationRay),mid_utilization:f(e.midUtilizationRay),optimal_utilization:f(e.optimalUtilizationRay),reserve_factor:S(e.reserveFactorBps),slope1:f(e.slope1Ray),slope2:f(e.slope2Ray),slope3:f(e.slope3Ray)}),xe=e=>E({asset_decimals:S(e.assetDecimals),asset_id:m(e.assetId),base_borrow_rate:f(e.baseBorrowRateRay),flashloan_fee:S(e.flashloanFeeBps),is_flashloanable:g(e.isFlashloanable),max_borrow_rate:f(e.maxBorrowRateRay),max_utilization:f(e.maxUtilizationRay),mid_utilization:f(e.midUtilizationRay),optimal_utilization:f(e.optimalUtilizationRay),reserve_factor:S(e.reserveFactorBps),slope1:f(e.slope1Ray),slope2:f(e.slope2Ray),slope3:f(e.slope3Ray)}),ve=e=>E({max_borrow_positions:S(e.maxBorrowPositions),max_supply_positions:S(e.maxSupplyPositions)}),ke=e=>{if("Token"in e&&e.Token)return T([_("Token"),m(e.Token)]);if("Ref"in e&&e.Ref)return T([_("Ref"),_(e.Ref)]);throw new Error(`Stellar builder: PriceKey must be { Token } or { Ref }, got ${JSON.stringify(e)}`)},Re=e=>{if("Stellar"in e)return T([_("Stellar"),m(e.Stellar)]);if("Symbol"in e)return T([_("Symbol"),_(e.Symbol)]);if("String"in e)return T([_("String"),h(e.String)]);throw new Error(`Stellar builder: unknown OracleAssetRef ${JSON.stringify(e)}`)},Ae=e=>{if("Spot"===e)return T([_("Spot")]);if(e&&"object"==typeof e&&"Twap"in e)return T([_("Twap"),S(Number(e.Twap))]);throw new Error(`Stellar builder: unknown OracleReadMode ${JSON.stringify(e)}`)},Ee=e=>{if("Reflector"===e||"RedStone"===e||"Xoxno"===e)return T([_(e)]);throw new Error(`Stellar builder: unknown ProviderKind "${e}"`)},Ie=e=>{if("Market"===e||"Fundamental"===e)return T([_(e)]);throw new Error(`Stellar builder: unknown FeedNature "${e}"`)},Pe=e=>{if("Reflector"in e){const t=e.Reflector;return T([_("Reflector"),E({asset:Re(t.asset),contract:m(t.contract),read_mode:Ae(t.readMode)})])}if("MultiFeed"in e){const t=e.MultiFeed;return T([_("MultiFeed"),E({contract:m(t.contract),feed_id:h(t.feedId),kind:Ee(t.kind),nature:Ie(t.nature)})])}throw new Error(`Stellar builder: unknown ProviderRef ${JSON.stringify(e)}`)},Oe=e=>{const t=e;return E({decimals:S(t.decimals),max_stale_seconds:b(t.maxStaleSeconds),provider:Pe(t.provider)})},Be=e=>{if("RequireDisjoint"===e)return T([_("RequireDisjoint")]);if(e&&"object"==typeof e&&"AllowShared"in e){const t=e.AllowShared;return T([_("AllowShared"),T(t.map((e=>E({contract:m(e.contract),kind:Ee(e.kind)}))))])}throw new Error(`Stellar builder: unknown IndependencePolicy ${JSON.stringify(e)}`)},Ne=e=>{const t=e,r=t.sources??[];let o,a;if("number"==typeof t.toleranceBps)o=1e4+t.toleranceBps,a=Math.max(1,Math.floor(1e8/o));else{const e=t.tolerance??{};o=Number(e.upperRatioBps),a=Number(e.lowerRatioBps)}return E({asset_decimals:S(Number(t.assetDecimals)),independence:Be(t.independence),max_price_stale_seconds:b(Number(t.maxPriceStaleSeconds)),max_sanity_price_wad:f(String(t.maxSanityPriceWad)),min_sanity_price_wad:f(String(t.minSanityPriceWad)),sources:T(r.map((e=>(e=>{if("Feed"in e)return T([_("Feed"),Oe(e.Feed)]);if("Scaled"in e){const t=e.Scaled;return T([_("Scaled"),E({factor:Oe(t.factor),max_factor_wad:f(t.maxFactorWad),min_factor_wad:f(t.minFactorWad),quote:ke(t.quote)})])}if("LpShare"in e){const t=e.LpShare;return T([_("LpShare"),E({key_a:ke(t.keyA),key_b:ke(t.keyB),kind:T([_(t.kind||"ConstantProduct")]),pool:m(t.pool),reserve_a_decimals:S(t.reserveADecimals),reserve_b_decimals:S(t.reserveBDecimals),share_decimals:S(t.shareDecimals)})])}throw new Error(`Stellar builder: unknown PriceSource ${JSON.stringify(e)}`)})(e)))),tolerance:E({lower_ratio_bps:S(a),upper_ratio_bps:S(o)})})},Le=Ne;function $e(e,t){return $(e,"upgrade",[y(t.wasmHash)])}function Ue(e,t){return $(e,"migrate",[S(t.newVersion)])}function Ce(e){return $(e,"pause",[])}function Ge(e){return $(e,"unpause",[])}function qe(e,t){return $(e,"grant_role",[m(t.account),_(t.role)])}function De(e,t){return $(e,"revoke_role",[m(t.account),_(t.role)])}function We(e,t){return $(e,"transfer_ownership",[m(t.newOwner),S(t.liveUntilLedger)])}function Me(e){return $(e,"accept_ownership",[])}function Ve(e,t){return $(e,"set_swap_aggregator",[m(t.aggregator)])}function ze(e,t){return $(e,"set_price_aggregator",[m(t.aggregator)])}const Fe=Ve;function Xe(e,t){return $(e,"set_accumulator",[m(t.accumulator)])}function He(e,t){return $(e,"set_position_limits",[ve(t)])}function je(e,t){return $(e,"approve_blend_pool",[m(t.pool)])}function Qe(e,t){return $(e,"revoke_blend_pool",[m(t.pool)])}const Je=je,Ke=Qe;function Ze(e,t){return $(e,"set_oracle",[ke(t.key),Ne(t.oracle)])}const Ye=Ze;function et(e,t){const r=t.toleranceBps,o=t.upperRatioBps??1e4+r,a=t.lowerRatioBps??Math.max(1,Math.floor(1e8/o));return $(e,"set_tolerance",[ke(t.key),E({lower_ratio_bps:S(a),upper_ratio_bps:S(o)})])}function tt(e,t){return $(e,"set_spoke_asset_flags",[S(t.spokeId),k(t.hubId,t.asset),g(t.paused),g(t.frozen)])}function rt(e,t){return $(e,"set_oracle_sanity_bounds",[m(t.asset),f(t.minPriceWad),f(t.maxPriceWad)])}function ot(e,t){return $(e,"update_indexes",[m(e.caller),T(t.assets.map((e=>k(e.hubId,e.asset))))])}function at(e,t){return $(e,"renew_account",[m(e.caller),b(t.accountNonce)])}function nt(e,t){return $(e,"create_liquidity_pool",[S(t.hubId),m(t.asset),xe(t.params)])}function st(e,t){return $(e,"upgrade_liquidity_pool_params",[k(t.hubId,t.asset),ye(t.params)])}function it(e,t){return $(e,"claim_revenue",[m(e.caller),T(t.assets.map((e=>k(e.hubId,e.asset))))])}function lt(e,t){return $(e,"add_rewards",[m(e.caller),A(t.rewards)])}function ut(e,t){return $(e,"update_account_threshold",[m(e.caller),g(t.hasRisks),T(t.accountNonces.map((e=>b(e))))])}const ct="00".repeat(32),dt=e=>{if("string"==typeof e)return y(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)},pt=(e,...t)=>T([_(e),...t]),mt=e=>E({asset:m(e.asset),hub_id:S(e.hubId),params:xe(e.params)}),ft=e=>E({hub_asset:k(e.hubId,e.asset),params:ye(e.params)}),St=e=>E({new_owner:m(e.newOwner),live_until_ledger:S(e.liveUntilLedger)}),bt=e=>E({key:ke(e.key),oracle:Ne(e.oracle)}),gt=e=>E({asset:m(e.asset),bonus:S(e.bonus),borrow_cap:f(e.borrowCap),can_borrow:g(e.canBorrow),can_collateral:g(e.canCollateral),frozen:g(e.frozen),hub_id:S(e.hubId),paused:g(e.paused),liquidation_fees:S(e.liquidationFees),ltv:S(e.ltv),oracle_override:T([_("None")]),spoke_id:S(e.spokeId),supply_cap:f(e.supplyCap),threshold:S(e.threshold)}),ht=e=>E({hub_asset:k(e.hubId,e.asset),spoke_id:S(e.spokeId)}),_t=e=>E({hf_for_max_bonus_wad:f(e.hfForMaxBonusWad),liquidation_bonus_factor_bps:S(e.liquidationBonusFactorBps),spoke_id:S(e.spokeId),target_hf_wad:f(e.targetHfWad)}),wt=e=>E({key:ke(e.key),tolerance:S(e.tolerance)}),Tt=e=>E({account:m(e.account),role:_(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:i[e.network]}).addOperation(a.call(t,...r)).setTimeout(e.timeoutSeconds??300).build().toXDR()}}const xt=(e,t,r)=>yt(e,"propose",[m(e.caller),t,dt(r)]),vt=(e,t,r)=>yt(e,"execute_self",[w(),t,dt(r)]);function kt(e,t,r){return xt(e,pt("SetSwapAggregator",m(t.aggregator)),r)}function Rt(e,t,r){return xt(e,pt("SetPriceAggregator",m(t.aggregator)),r)}const At=kt;function Et(e,t,r){return xt(e,pt("SetAccumulator",m(t.accumulator)),r)}function It(e,t,r){return xt(e,pt("SetPositionLimits",ve(t)),r)}function Pt(e,t){return xt(e,pt("CreateHub"),t)}function Ot(e,t){return xt(e,pt("AddSpoke"),t)}function Bt(e,t,r){return xt(e,pt("RemoveSpoke",S(t.spokeId)),r)}function Nt(e,t,r){return xt(e,pt("AddAssetToSpoke",gt(t)),r)}function Lt(e,t,r){return xt(e,pt("EditAssetInSpoke",gt(t)),r)}function $t(e,t,r){return xt(e,pt("RemoveAssetFromSpoke",ht(t)),r)}function Ut(e,t,r){return xt(e,pt("SetSpokeLiquidationCurve",_t(t)),r)}function Ct(e,t,r){return xt(e,pt("SetPositionManager",m(t.manager),g(t.isActive)),r)}function Gt(e,t,r){return xt(e,pt("SetMinBorrowCollateralUsd",f(t.floorWad)),r)}function qt(e,t,r){return xt(e,pt("ApproveToken",m(t.token)),r)}function Dt(e,t,r){return xt(e,pt("RevokeToken",m(t.token)),r)}function Wt(e,t,r){return xt(e,pt("ApproveBlendPool",m(t.pool)),r)}function Mt(e,t,r){return xt(e,pt("RevokeBlendPool",m(t.pool)),r)}function Vt(e,t,r){return xt(e,pt("CreateLiquidityPool",mt(t)),r)}function zt(e,t,r){return xt(e,pt("UpgradeLiquidityPoolParams",ft(t)),r)}function Ft(e,t,r){return xt(e,pt("DeployPool",y(t.wasmHash)),r)}function Xt(e,t,r){return xt(e,pt("UpgradePool",y(t.wasmHash)),r)}function Ht(e,t,r){return xt(e,pt("UpgradeController",y(t.wasmHash)),r)}function jt(e,t,r){return xt(e,pt("MigrateController",S(t.newVersion)),r)}function Qt(e,t,r){return xt(e,pt("TransferCtrlOwnership",St(t)),r)}function Jt(e,t,r){return xt(e,pt("ConfigureAssetOracle",bt(t)),r)}const Kt=Jt;function Zt(e,t,r){return xt(e,pt("EditOracleTolerance",wt(t)),r)}function Yt(e,t,r){return xt(e,pt("UpgradeGov",y(t.wasmHash)),r)}function er(e,t,r){return xt(e,pt("UpdateGovDelay",S(t.newDelay)),r)}function tr(e,t,r){return xt(e,pt("GrantGovRole",Tt(t)),r)}function rr(e,t,r){return xt(e,pt("RevokeGovRole",Tt(t)),r)}function or(e,t,r){return xt(e,pt("TransferGovOwnership",St(t)),r)}function ar(e,t){const r=T(t.argsXdr.map((e=>d.xdr.ScVal.fromXDR(e,"base64")))),o=dt(t.predecessor??ct);return yt(e,"execute",[w(),m(t.target),_(t.functionName),r,o,dt(t.salt)])}function nr(e,t,r){return vt(e,pt("UpgradeGov",y(t.wasmHash)),r)}function sr(e,t,r){return vt(e,pt("UpdateGovDelay",S(t.newDelay)),r)}function ir(e,t,r){return vt(e,pt("GrantGovRole",Tt(t)),r)}function lr(e,t,r){return vt(e,pt("RevokeGovRole",Tt(t)),r)}function ur(e,t,r){return vt(e,pt("TransferGovOwnership",St(t)),r)}const cr=e=>T(e.map(m));function dr(e,t,r){return yt(e,"propose_canceller_reset",[cr(t.newCancellers),dt(r)])}function pr(e,t,r){return yt(e,"execute_canceller_reset",[x(t.executor,m),cr(t.newCancellers),dt(r)])}function mr(e,t){return yt(e,"set_spoke_asset_flags",[m(e.caller),S(t.spokeId),k(t.hubId,t.asset),g(t.paused),g(t.frozen)])}function fr(e,t){return yt(e,"set_oracle_sanity_bounds",[m(e.caller),m(t.asset),f(t.minPriceWad),f(t.maxPriceWad)])}function Sr(e){return yt(e,"create_hub",[m(e.caller)])}function br(e){return yt(e,"add_spoke",[m(e.caller)])}function gr(e,t){return yt(e,"revoke_role_immediate",[m(t.account),_(t.role)])}function hr(e){return yt(e,"pause",[m(e.caller)])}function _r(e,t){return xt(e,pt("Unpause"),t)}const wr=e=>e.toXDR("base64"),Tr=e=>d.xdr.ScVal.fromXDR(e,"base64"),yr=e=>e.map((e=>String((0,d.scValToNative)(Tr(e))))).join(":"),xr=e=>"bigint"==typeof e||"number"==typeof e?e.toString():String(e),vr=e=>Number(e),kr=e=>String(e),Rr=e=>e instanceof Uint8Array?Buffer.from(e).toString("hex"):Buffer.isBuffer(e)?e.toString("hex"):String(e),Ar=["None","Multiply","Long","Short"],Er=["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","migrate","rp_col_net"],Ir=e=>Array.isArray(e)?e:[],Pr=(e,t)=>{const r="Borrow"===t;return{action:(o=e[0],Er[vr(o)]??xr(o)),positionType:t,hubId:vr(e[1]),asset:kr(e[2]),scaledAmountRay:xr(e[3]),indexRay:xr(e[4]),amount:xr(e[5]),liquidationThresholdBps:r?void 0:vr(e[6]),liquidationBonusBps:r?void 0:vr(e[7]),loanToValueBps:r?void 0:vr(e[8]),liquidationFeesBps:r?void 0:vr(e[9])};var o},Or=e=>{return{owner:kr(e[0]),spokeId:vr(e[1]),mode:(t=e[2],Ar[vr(t)]??"None")};var t},Br=e=>Array.isArray(e)?e[1]:void 0,Nr=e=>{const t=(r=e,Array.isArray(r)?kr(r[0]):kr(r));var r;if("Token"===t)return{Token:kr(Br(e))};if("Ref"===t)return{Ref:kr(Br(e))};if(e&&"object"==typeof e&&!Array.isArray(e)){const t=e;if(void 0!==t.Token)return{Token:kr(t.Token)};if(void 0!==t.Ref)return{Ref:kr(t.Ref)}}return{Token:kr(e)}},Lr=e=>{const t=e.tolerance??{};return{assetDecimals:vr(e.asset_decimals),maxPriceStaleSeconds:vr(e.max_price_stale_seconds),sources:Ir(e.sources).map((e=>e)),tolerance:{upperRatio:vr(t.upper_ratio_bps),lowerRatio:vr(t.lower_ratio_bps)},independence:e.independence,minSanityPriceWad:xr(e.min_sanity_price_wad),maxSanityPriceWad:xr(e.max_sanity_price_wad)}},$r={"market:create":e=>({topic:"market:create",data:{hubId:vr(e.hub_id),baseAsset:kr(e.base_asset),maxBorrowRate:xr(e.max_borrow_rate),baseBorrowRate:xr(e.base_borrow_rate),slope1:xr(e.slope1),slope2:xr(e.slope2),slope3:xr(e.slope3),midUtilization:xr(e.mid_utilization),optimalUtilization:xr(e.optimal_utilization),maxUtilization:xr(e.max_utilization),reserveFactor:vr(e.reserve_factor),marketAddress:kr(e.market_address)}}),"market:params_update":e=>({topic:"market:params_update",data:{asset:kr(e.asset),maxBorrowRateRay:xr(e.max_borrow_rate),baseBorrowRateRay:xr(e.base_borrow_rate),slope1Ray:xr(e.slope1),slope2Ray:xr(e.slope2),slope3Ray:xr(e.slope3),midUtilizationRay:xr(e.mid_utilization),optimalUtilizationRay:xr(e.optimal_utilization),maxUtilizationRay:xr(e.max_utilization),reserveFactorBps:vr(e.reserve_factor)}}),"market:batch_state_update":e=>({topic:"market:batch_state_update",data:{updates:Ir(e).map((e=>{return t=Ir(e),{hubId:vr(t[0]),asset:kr(t[1]),timestamp:vr(t[2]),supplyIndexRay:xr(t[3]),borrowIndexRay:xr(t[4]),cash:xr(t[5]),suppliedRay:xr(t[6]),borrowedRay:xr(t[7]),revenueRay:xr(t[8])};var t}))}}),"market:batch_params_update":e=>({topic:"market:batch_params_update",data:{updates:Ir(e).map((e=>{const t=e;return{hubId:vr(t.hub_id),asset:kr(t.asset),params:(r=t.params,{maxBorrowRateRay:xr(r.max_borrow_rate),baseBorrowRateRay:xr(r.base_borrow_rate),slope1Ray:xr(r.slope1),slope2Ray:xr(r.slope2),slope3Ray:xr(r.slope3),midUtilizationRay:xr(r.mid_utilization),optimalUtilizationRay:xr(r.optimal_utilization),maxUtilizationRay:xr(r.max_utilization),reserveFactorBps:vr(r.reserve_factor),isFlashloanable:Boolean(r.is_flashloanable),flashloanFeeBps:vr(r.flashloan_fee),assetId:kr(r.asset_id),assetDecimals:vr(r.asset_decimals)})};var r}))}}),"position:batch_update":e=>{const t=Ir(e);return{topic:"position:batch_update",data:{accountId:xr(t[0]),accountAttributes:Or(Ir(t[1])),updates:[...Ir(t[2]).map((e=>Pr(Ir(e),"Deposit"))),...Ir(t[3]).map((e=>Pr(Ir(e),"Borrow")))]}}},"position:flash_loan":e=>({topic:"position:flash_loan",data:{hubId:vr(e.hub_id),asset:kr(e.asset),receiver:kr(e.receiver),caller:kr(e.caller),amount:xr(e.amount),fee:xr(e.fee)}}),"config:asset_oracle":e=>({topic:"config:asset_oracle",data:{key:Nr(e.key),oracle:Lr(e.oracle)}}),"config:oracle":e=>({topic:"config:oracle",data:{asset:kr(e.asset),oracle:Lr(e.config??e.oracle)}}),"position:liquidation":e=>({topic:"position:liquidation",data:{liquidator:kr(e.liquidator),accountId:xr(e.account_id),repaidUsdWad:xr(e.repaid_usd_wad),bonusBps:xr(e.bonus_bps)}}),"debt:bad_debt":e=>({topic:"debt:bad_debt",data:{accountId:xr(e.account_id),totalBorrowUsdWad:xr(e.total_borrow_usd_wad),totalCollateralUsdWad:xr(e.total_collateral_usd_wad)}}),"strategy:initial_payment":e=>({topic:"strategy:initial_payment",data:{token:kr(e.token),amount:xr(e.amount),usdValueWad:xr(e.usd_value_wad),accountId:xr(e.account_id)}}),"strategy:fee":e=>({topic:"strategy:fee",data:{hubId:vr(e.hub_id),asset:kr(e.asset),amount:xr(e.amount),fee:xr(e.fee),amountSent:xr(e.amount_sent)}}),"config:approve_blend_pool":e=>({topic:"config:approve_blend_pool",data:{pool:kr(e.pool??e.blend_pool??e.token),approved:Boolean(e.approved??e.is_approved??!0)}}),"config:approve_token":e=>({topic:"config:approve_token",data:{wasmHash:Rr(e.wasm_hash??e.pool),approved:Boolean(e.approved)}}),"config:swap_aggregator":e=>({topic:"config:swap_aggregator",data:{aggregator:kr(e.aggregator??e.swap_aggregator)}}),"config:price_aggregator":e=>({topic:"config:price_aggregator",data:{aggregator:kr(e.aggregator??e.price_aggregator)}}),"config:aggregator":e=>({topic:"config:aggregator",data:{aggregator:kr(e.aggregator)}}),"config:accumulator":e=>({topic:"config:accumulator",data:{accumulator:kr(e.accumulator)}}),"config:pool_template":e=>({topic:"config:pool_template",data:{wasmHash:Rr(e.wasm_hash)}}),"config:position_limits":e=>({topic:"config:position_limits",data:{maxSupplyPositions:vr(e.max_supply_positions),maxBorrowPositions:vr(e.max_borrow_positions)}}),"config:min_borrow_collateral":e=>({topic:"config:min_borrow_collateral",data:{minBorrowCollateralUsdWad:xr(e.min_borrow_collateral_usd_wad??e.floor_wad??e.value)}}),"config:oracle_disabled":e=>({topic:"config:oracle_disabled",data:{asset:kr(e.asset)}}),"config:spoke":e=>{const t=e.spoke;return{topic:"config:spoke",data:{spokeId:vr(t.spoke_id),isDeprecated:Boolean(t.is_deprecated),liquidationTargetHfWad:xr(t.liquidation_target_hf_wad),healthFactorForMaxBonusWad:xr(t.hf_for_max_bonus_wad),liquidationBonusFactorBps:vr(t.liquidation_bonus_factor_bps)}}}},Ur=Object.freeze(Object.keys($r));function Cr(e,t){const r=yr(e),o=$r[r];return o?o((0,d.scValToNative)(Tr(t))):null}const Gr="XLENDXLM-a7c9f3",qr=1e4;function Dr(e){const t=BigInt(e).toString(16),r=t.length%2==0?t:`0${t}`;return`${Gr}-${r}`}function Wr(e){const t=e.split("-");return t.length>=2&&parseInt(t[1],10)||0}function Mr(e,t=0){return e*qr+t}function Vr(e){switch(e){case"liq_repay":return"lendingLiquidateRepayDebt";case"liq_seize":return"lendingLiquidateSeizeCollateral";case"param_upd":return"lendingUpdateAccountParameters";default:return"lendingUpdateAccountPosition"}}const zr=(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()},Fr=e=>e.baseUrl??s[e.network];async function Xr(e,t){if(null==e.amountIn==(null==e.amountOut))throw new Error("getStellarAggregatorQuote: exactly one of `amountIn` or `amountOut` must be provided");const r=zr(Fr(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=zr(Fr(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 jr=(e,t)=>(e=>Boolean(e&&"object"==typeof e&&!(e instanceof Uint8Array)&&"paths"in e))(e)&&void 0===e.referralId?{...e,referralId:t??0}:e,Qr=e=>I(e).toXDR("base64");function Jr(e,t){const r=e.routerAddress??u(e.network),o=new d.Contract(r),a=new d.Account(e.caller,e.sourceSequence),n=N(jr(t,e.referralId));return{xdr:new d.TransactionBuilder(a,{fee:e.fee??d.BASE_FEE,networkPassphrase:i[e.network]}).addOperation(o.call("execute_strategy",m(e.caller),f(e.totalIn),n)).setTimeout(e.timeoutSeconds??300).build().toXDR()}}function Kr(e,t){return Jr(e,t)}function Zr(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(to),splitPpm:e.splitPpm}))):[{hops:e.hops.map(to),splitPpm:1e6}],referralId:t.referralId??0,tokenIn:e.from,tokenOut:e.to,totalMinOut:e.amountOutMin}}function Yr(e,t={}){const r=e;return"string"==typeof r.routeXdr&&r.routeXdr.length>0?{routeXdr:r.routeXdr}:Zr(e,t)}const eo=Zr,to=e=>({amountOut:e.amountOut,pool:e.address,tokenIn:e.from,tokenOut:e.to,venue:e.dex});function ro(e,t){const r=t instanceof Error?t.message:String(t);return new Error(`[xoxno-invoked:${e}] ${r}`)}async function oo(e,t,r){const o=d.TransactionBuilder.fromXDR(t,"base64");try{return(await e.prepareTransaction(o)).toXDR()}catch(e){if(r?.invokedContractId)throw ro(r.invokedContractId,e);throw e}}async function ao(e,t,r){return oo(e,t.xdr,r)}function no(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 so(e,t){return new Uint8Array(0)}const io=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 lo(e){const t=new d.Account(e.caller,e.sourceSequence),r=new d.Contract(e.forwarderAddress).call("mint_and_forward",d.xdr.ScVal.scvBytes(io(e.message)),d.xdr.ScVal.scvBytes(io(e.attestation)));return{xdr:new d.TransactionBuilder(t,{fee:e.fee??"10000000",networkPassphrase:i[e.network]}).addOperation(r).setTimeout(e.timeoutSeconds??120).build().toXDR()}}const uo={1:{name:"AssetNotSupported",message:"This asset is not supported by the protocol."},2:{name:"AssetAlreadySupported",message:"This asset is already supported."},3:{name:"InvalidTicker",message:"Invalid asset ticker."},6:{name:"InvalidAsset",message:"Invalid asset address."},10:{name:"InvalidWasmHash",message:"The WASM hash is empty or invalid."},11:{name:"InvalidExchangeSrc",message:"The oracle configuration is invalid."},12:{name:"PairNotActive",message:"No oracle is configured for this asset."},32:{name:"OwnerNotSet",message:"The contract owner has not been set."},39:{name:"InvalidTimelockDelay",message:"The timelock delay is out of the allowed range."},41:{name:"InvalidRole",message:"The caller does not hold the required role."},43:{name:"HubNotActive",message:"This hub is not active."},44:{name:"NotAuthorized",message:"The caller is not authorized to perform this action."},46:{name:"OperationNotCancellable",message:"This governance operation cannot be cancelled."},113:{name:"InvalidLiqThreshold",message:"LTV, liquidation threshold, or bonus is out of bounds."},116:{name:"InvalidBorrowParams",message:"Supply or borrow cap configuration is invalid."},117:{name:"InvalidUtilRange",message:"Interest-rate utilization breakpoints are invalid."},132:{name:"AssetDecimalsTooHigh",message:"Asset decimals exceed the protocol maximum (27)."},300:{name:"SpokeNotFound",message:"This spoke does not exist."},301:{name:"SpokeDeprecated",message:"This spoke has been deprecated."},307:{name:"AssetNotInSpoke",message:"This asset is not listed on the spoke."},308:{name:"AssetAlreadyInSpoke",message:"This asset is already listed in the spoke."},309:{name:"SpokeAssetInUse",message:"This spoke asset still has live positions; drain usage before removal."},315:{name:"SpokeAssetPaused",message:"This spoke asset is paused."},316:{name:"SpokeAssetFrozen",message:"This spoke asset is frozen."},317:{name:"SpokeAssetFlagRelaxation",message:"Guardian flag updates may only tighten; clearing a flag requires the timelocked edit."},220:{name:"InvalidOracleBase",message:"The oracle quote asset/market is missing or invalid."},221:{name:"InvalidOracleDecimals",message:"The oracle decimals value is invalid."},224:{name:"InvalidSanityBounds",message:"Oracle sanity bounds are invalid (require 0 < min < max)."},225:{name:"OracleCycleDetected",message:"A cycle was detected in the oracle quote chain."}};function co(e){const t=e.match(/Error\(Contract,\s*#(\d+)\)/);if(!t)return null;const r=Number(t[1]),o=uo[r];return o?{code:r,...o}:null}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 u={mainnet:process.env.STELLAR_LENDING_CONTROLLER_MAINNET??"",testnet:process.env.STELLAR_LENDING_CONTROLLER_TESTNET??""},c={mainnet:process.env.STELLAR_AGGREGATOR_ROUTER_MAINNET??"",testnet:process.env.STELLAR_AGGREGATOR_ROUTER_TESTNET??""},l={mainnet:process.env.STELLAR_GOVERNANCE_MAINNET??"",testnet:process.env.STELLAR_GOVERNANCE_TESTNET??""},d={mainnet:"https://soroban-rpc.stellar.org",testnet:"https://soroban-testnet.stellar.org"},p={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=c[e];if(!t)throw new Error(`Stellar aggregator router address not configured for network "${e}". Set STELLAR_AGGREGATOR_ROUTER_${e.toUpperCase()} env var.`);return t}function _(e){const t=l[e];if(!t)throw new Error(`Stellar governance address not configured for network "${e}". Set STELLAR_GOVERNANCE_${e.toUpperCase()} env var.`);return t}const b=["Soroswap","Aquarius","Phoenix","Sushi","CometDex"],w=e=>new t(e).toScVal(),g=e=>new a(e).toI128(),y=e=>i.ScVal.scvU32(e),v=e=>new a("string"==typeof e?e:e.toString()).toU64(),S=e=>i.ScVal.scvBool(e),k=e=>i.ScVal.scvString(e),R=e=>i.ScVal.scvSymbol(e),T=()=>i.ScVal.scvVoid(),I=e=>i.ScVal.scvVec(e),x=(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)},A=(e,t)=>null==e?T():t(e),E=(e,t)=>N({asset:w(t),hub_id:y(e)}),$=(e,t,o)=>i.ScVal.scvVec([E(e,t),g(o)]),B=e=>i.ScVal.scvVec(e.map((e=>$(e.hubId,e.asset,e.amount)))),N=e=>{const t=Object.keys(e).sort().map((t=>new i.ScMapEntry({key:R(t),val:e[t]})));return i.ScVal.scvMap(t)},O=e=>{const t=e.paths.map((e=>{const t=e.hops.map((e=>{return N({amount_out:g(e.amountOut),pool:w(e.pool),token_in:w(e.tokenIn),token_out:w(e.tokenOut),venue:(t=e.venue,i.ScVal.scvVec([R(t)]))});var t}));return N({hops:i.ScVal.scvVec(t),split_ppm:y(e.splitPpm)})}));return N({paths:i.ScVal.scvVec(t),referral_id:v(e.referralId??0),token_in:w(e.tokenIn),token_out:w(e.tokenOut),total_min_out:g(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=()=>i.ScVal.scvBytes(Buffer.alloc(0)),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},L=e=>{if("string"==typeof e)return P(q(e));if(e instanceof Uint8Array)return 0===e.length?U():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)):0===e.bytes.length?U():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||!b.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(O(t).toXDR("base64"),"base64")));var t,o;throw new Error("Stellar builder: `steps` must be opaque strategy bytes (`routeXdr`, base64/hex string, or Uint8Array)")},W=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 z(t,a,s){const i=t.controllerAddress??f(t.network),u=new r(i),c=new e(t.caller,t.sourceSequence);return{xdr:new n(c,{fee:t.fee??o,networkPassphrase:m[t.network]}).addOperation(u.call(a,...s)).setTimeout(t.timeoutSeconds??300).build().toXDR()}}function V(e,t){const o=t.accountNonce??0,r=t.spokeId??0;return z(e,"supply",[w(e.caller),v(o),y(r),B([...t.assets])])}function D(e,t){return V(e,{accountNonce:t.accountNonce,spokeId:t.spokeId,assets:[{hubId:t.hubId,asset:t.asset,amount:t.amount}]})}function C(e,t){return z(e,"borrow",[w(e.caller),v(t.accountNonce),B([...t.borrows]),A(t.to,w)])}function G(e,t){return C(e,{accountNonce:t.accountNonce,borrows:[{hubId:t.hubId,asset:t.asset,amount:t.amount}],to:t.to})}function X(e,t){return z(e,"withdraw",[w(e.caller),v(t.accountNonce),B([...t.withdrawals]),A(t.to,w)])}function F(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 z(e,"repay",[w(e.caller),v(t.accountNonce),B([...t.payments])])}function H(e,t){return M(e,{accountNonce:t.accountNonce,payments:[{hubId:t.hubId,asset:t.asset,amount:t.amount}]})}function j(e,t){return z(e,"liquidate",[w(e.caller),v(t.accountNonce),B([...t.debtPayments])])}function Q(e,t){return z(e,"flash_loan",[w(e.caller),E(t.hubId,t.asset),g(t.amount),w(t.receiver),W(t.data)])}function Z(e,t){return z(e,"migrate_from_blend",[w(e.caller),v(t.accountId),y(t.spokeId),y(t.hubId),w(t.blendPool),I(t.collateralTokens.map(w)),I(t.supplyTokens.map(w)),(o=t.debtCaps.map((e=>({token:e.token,amount:e.cap}))),i.ScVal.scvVec(o.map((e=>{return t=e.token,o=e.amount,i.ScVal.scvVec([w(t),g(o)]);var t,o}))))]);var o}function J(e,t){const o=t.accountNonce??0,r=t.spokeId??0;return z(e,"multiply",[w(e.caller),v(o),y(r),E(t.collateral.hubId,t.collateral.asset),g(t.debtToFlashLoan),E(t.debt.hubId,t.debt.asset),y(t.mode),L(t.steps),A(t.initialPayment,(e=>$(e.hubId,e.asset,e.amount))),A(t.convertSwap,L)])}function K(e,t){return z(e,"swap_debt",[w(e.caller),v(t.accountNonce),E(t.existingDebt.hubId,t.existingDebt.asset),g(t.newDebtAmount),E(t.newDebt.hubId,t.newDebt.asset),L(t.steps)])}function Y(e,t){return z(e,"swap_collateral",[w(e.caller),v(t.accountNonce),E(t.current.hubId,t.current.asset),g(t.fromAmount),E(t.newCollateral.hubId,t.newCollateral.asset),L(t.steps)])}function ee(e,t){return z(e,"repay_debt_with_collateral",[w(e.caller),v(t.accountNonce),E(t.collateral.hubId,t.collateral.asset),g(t.collateralAmount),E(t.debt.hubId,t.debt.asset),L(t.steps),S(t.closePosition)])}const te="/stellar-lending",oe=25,re=encodeURIComponent,ae=(e,t)=>e.fetchWithTimeout(`${te}/context`,t),ne=(e,t)=>e.fetchWithTimeout(`${te}/live-state`,t),se=(e,t)=>e.fetchWithTimeout(`${te}/assets`,t),ie=(e,t)=>e.fetchWithTimeout(`${te}/hubs`,t),ue=(e,t)=>e.fetchWithTimeout(`${te}/spokes`,t),ce=(e,t={},o)=>{const{hubId:r,spokeId:a,asset:n}=t;return e.fetchWithTimeout(`${te}/reserves`,{...o,params:{...void 0!==r?{hubId:r}:{},...void 0!==a?{spokeId:a}:{},...n?{asset:n}:{}}})},le=(e,t,o,r,a)=>e.fetchWithTimeout(`${te}/reserves/${t}/${o}/${re(r)}`,a),de=(e,t,o,r,a,n)=>e.fetchWithTimeout(`${te}/reserves/${t}/${o}/${re(r)}/holders`,{...n,params:{side:a}}),pe=(e,t,o)=>e.fetchWithTimeout(`${te}/assets/${re(t)}`,o),me=(e,t,o,r)=>e.fetchWithTimeout(`${te}/assets/${re(t)}/page`,{...r,params:{...o}}),fe=(e,t,o,r)=>e.fetchWithTimeout(`${te}/assets/${re(t)}/markets`,{...r,params:{side:o}}),he=(e,t,o)=>e.fetchWithTimeout(`${te}/hubs/${t}`,o),_e=(e,t,o)=>e.fetchWithTimeout(`${te}/spokes/${t}`,o),be=(e,t,o)=>e.fetchWithTimeout(`${te}/users/${re(t)}/positions`,o),we=(e,t,o={},r)=>{const{skip:a,top:n}=o;return e.fetchWithTimeout(`${te}/users/${re(t)}/activity`,{...r,params:{...void 0!==a?{skip:a}:{},...void 0!==n?{top:n}:{}}})},ge=(e,t,o)=>e.fetchWithTimeout(`${te}/accounts/${re(t)}/positions`,o),ye=(e,t={},o)=>{const{top:r=oe,continuationToken:a}=t;return e.fetchWithTimeout(`${te}/governance/proposals`,{...o,params:{top:r,...a?{continuationToken:a}:{}}})},ve=(e,t,o,r)=>e.fetchWithTimeout(`${te}/assets/${re(t)}/graph`,{...r,params:{...o}}),Se=(e,t,o,r)=>e.fetchWithTimeout(`${te}/hubs/${t}/graph`,{...r,params:{...o}}),ke=(e,t,o,r)=>e.fetchWithTimeout(`${te}/spokes/${t}/graph`,{...r,params:{...o}}),Re=(e,t,o,r,a,n)=>e.fetchWithTimeout(`${te}/reserves/${t}/${o}/${re(r)}/graph`,{...n,params:{...a}}),Te=e=>({context:t=>ae(e,t),liveState:t=>ne(e,t),assets:t=>se(e,t),hubs:t=>ie(e,t),spokes:t=>ue(e,t),reserves:(t,o)=>{return void 0===(r=t)||"hubId"in r||"spokeId"in r||"asset"in r?ce(e,t,o):ce(e,{},t);var r},reserve:(t,o,r,a)=>le(e,t,o,r,a),reserveHolders:(t,o,r,a,n)=>de(e,t,o,r,a,n),asset:(t,o)=>pe(e,t,o),assetMarkets:(t,o,r)=>fe(e,t,o,r),hub:(t,o)=>he(e,t,o),spoke:(t,o)=>_e(e,t,o),userPositions:(t,o)=>be(e,t,o),userActivity:(t,o,r)=>we(e,t,o,r),accountPositions:(t,o)=>ge(e,t,o),governanceProposals:(t,o)=>ye(e,t,o),assetGraph:(t,o,r)=>ve(e,t,o,r),hubGraph:(t,o,r)=>Se(e,t,o,r),spokeGraph:(t,o,r)=>ke(e,t,o,r),reserveGraph:(t,o,r,a,n)=>Re(e,t,o,r,a,n)}),Ie={Single:0,PrimaryWithAnchor:1},xe="RedStonePriceFeed",Ae=e=>N({base_borrow_rate:g(e.baseBorrowRateRay),max_borrow_rate:g(e.maxBorrowRateRay),max_utilization:g(e.maxUtilizationRay),mid_utilization:g(e.midUtilizationRay),optimal_utilization:g(e.optimalUtilizationRay),reserve_factor:y(e.reserveFactorBps),slope1:g(e.slope1Ray),slope2:g(e.slope2Ray),slope3:g(e.slope3Ray)}),Ee=e=>N({asset_decimals:y(e.assetDecimals),asset_id:w(e.assetId),base_borrow_rate:g(e.baseBorrowRateRay),flashloan_fee:y(e.flashloanFeeBps),is_flashloanable:S(e.isFlashloanable),max_borrow_rate:g(e.maxBorrowRateRay),max_utilization:g(e.maxUtilizationRay),mid_utilization:g(e.midUtilizationRay),optimal_utilization:g(e.optimalUtilizationRay),reserve_factor:y(e.reserveFactorBps),slope1:g(e.slope1Ray),slope2:g(e.slope2Ray),slope3:g(e.slope3Ray)}),$e=e=>N({max_borrow_positions:y(e.maxBorrowPositions),max_supply_positions:y(e.maxSupplyPositions)}),Be=e=>{const t=e.kind;switch(t){case"Stellar":return I([R("Stellar"),w(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}"`)}},Ne=(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"),y(t)])}return I([R("Spot")])},Oe=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"),N({asset:Be(e.asset),contract:w(e.contract),read_mode:Ne(e.readMode,e.twapRecords)})])}if(t===xe||"XoxnoPriceFeed"===t){const o=t===xe?"RedStone":"Xoxno";if("string"!=typeof e.feedId)throw new Error(`Stellar builder: ${o} oracle source requires \`feedId\``);if("number"!=typeof e.maxStaleSeconds)throw new Error(`Stellar builder: ${o} oracle source requires \`maxStaleSeconds\``);return I([R(o),N({contract:w(e.contract),feed_id:k(e.feedId),max_stale_seconds:v(e.maxStaleSeconds)})])}throw new Error(`Stellar builder: unknown oracle provider "${t}"`)},Pe=e=>{const t=Ie[e.strategy];if(void 0===t)throw new Error(`Stellar builder: unknown oracle strategy "${e.strategy}"`);return N({anchor:(o=e.anchor,I(null==o?[R("None")]:[R("Some"),Oe(o)])),max_price_stale_seconds:v(e.maxPriceStaleSeconds),max_sanity_price_wad:g(e.maxSanityPriceWad),min_sanity_price_wad:g(e.minSanityPriceWad),primary:Oe(e.primary),strategy:y(t),tolerance_bps:y(e.toleranceBps)});var o};function Ue(e,t){return z(e,"upgrade",[x(t.wasmHash)])}function qe(e,t){return z(e,"migrate",[y(t.newVersion)])}function Le(e){return z(e,"pause",[])}function We(e){return z(e,"unpause",[])}function ze(e,t){return z(e,"grant_role",[w(t.account),R(t.role)])}function Ve(e,t){return z(e,"revoke_role",[w(t.account),R(t.role)])}function De(e,t){return z(e,"transfer_ownership",[w(t.newOwner),y(t.liveUntilLedger)])}function Ce(e){return z(e,"accept_ownership",[])}function Ge(e,t){return z(e,"set_aggregator",[w(t.aggregator)])}function Xe(e,t){return z(e,"set_accumulator",[w(t.accumulator)])}function Fe(e,t){return z(e,"set_liquidity_pool_template",[x(t.wasmHash)])}function Me(e,t){return z(e,"set_position_limits",[$e(t)])}function He(e,t){return z(e,"approve_token",[w(t.token)])}function je(e,t){return z(e,"revoke_token",[w(t.token)])}function Qe(e,t){return z(e,"set_market_oracle_config",[E(t.hubId,t.asset),Pe(t.config)])}function Ze(e,t){return z(e,"set_oracle_tolerance",[w(t.asset),N({lower_ratio_bps:y(t.lowerRatioBps),upper_ratio_bps:y(t.upperRatioBps)})])}function Je(e,t){return z(e,"set_spoke_asset_flags",[y(t.spokeId),E(t.hubId,t.asset),S(t.paused),S(t.frozen)])}function Ke(e,t){return z(e,"set_oracle_sanity_bounds",[w(t.asset),g(t.minPriceWad),g(t.maxPriceWad)])}function Ye(e,t){return z(e,"update_indexes",[w(e.caller),I(t.assets.map((e=>E(e.hubId,e.asset))))])}function et(e,t){return z(e,"renew_account",[w(e.caller),v(t.accountNonce)])}function tt(e,t){return z(e,"create_liquidity_pool",[y(t.hubId),w(t.asset),Ee(t.params)])}function ot(e,t){return z(e,"upgrade_liquidity_pool_params",[E(t.hubId,t.asset),Ae(t.params)])}function rt(e,t){return z(e,"claim_revenue",[w(e.caller),I(t.assets.map((e=>E(e.hubId,e.asset))))])}function at(e,t){return z(e,"add_rewards",[w(e.caller),B(t.rewards)])}function nt(e,t){return z(e,"update_account_threshold",[w(e.caller),S(t.hasRisks),I(t.accountNonces.map((e=>v(e))))])}const st="00".repeat(32),it=e=>{if("string"==typeof e)return x(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)},ut=(e,...t)=>I([R(e),...t]),ct=e=>N({new_owner:w(e.newOwner),live_until_ledger:y(e.liveUntilLedger)}),lt=e=>N({asset:w(e.asset),bonus:y(e.bonus),borrow_cap:g(e.borrowCap),can_borrow:S(e.canBorrow),can_collateral:S(e.canCollateral),frozen:S(e.frozen),hub_id:y(e.hubId),paused:S(e.paused),liquidation_fees:y(e.liquidationFees),ltv:y(e.ltv),oracle_override:I([R("None")]),spoke_id:y(e.spokeId),supply_cap:g(e.supplyCap),threshold:y(e.threshold)}),dt=e=>N({account:w(e.account),role:R(e.role)});function pt(t,a,s){const i=t.governanceAddress??_(t.network),u=new r(i),c=new e(t.caller,t.sourceSequence);return{xdr:new n(c,{fee:t.fee??o,networkPassphrase:m[t.network]}).addOperation(u.call(a,...s)).setTimeout(t.timeoutSeconds??300).build().toXDR()}}const mt=(e,t,o)=>pt(e,"propose",[w(e.caller),t,it(o)]),ft=(e,t,o)=>pt(e,"execute_self",[T(),t,it(o)]);function ht(e,t,o){return mt(e,ut("SetAggregator",w(t.aggregator)),o)}function _t(e,t,o){return mt(e,ut("SetAccumulator",w(t.accumulator)),o)}function bt(e,t,o){return mt(e,ut("SetLiquidityPoolTemplate",x(t.wasmHash)),o)}function wt(e,t,o){return mt(e,ut("SetPositionLimits",$e(t)),o)}function gt(e,t){return mt(e,ut("CreateHub"),t)}function yt(e,t){return mt(e,ut("AddSpoke"),t)}function vt(e,t,o){return mt(e,ut("RemoveSpoke",y(t.spokeId)),o)}function St(e,t,o){return mt(e,ut("AddAssetToSpoke",lt(t)),o)}function kt(e,t,o){return mt(e,ut("EditAssetInSpoke",lt(t)),o)}function Rt(e,t,o){return mt(e,ut("RemoveAssetFromSpoke",N({hub_asset:E((r=t).hubId,r.asset),spoke_id:y(r.spokeId)})),o);var r}function Tt(e,t,o){return mt(e,ut("SetSpokeLiquidationCurve",N({hf_for_max_bonus_wad:g((r=t).hfForMaxBonusWad),liquidation_bonus_factor_bps:y(r.liquidationBonusFactorBps),spoke_id:y(r.spokeId),target_hf_wad:g(r.targetHfWad)})),o);var r}function It(e,t,o){return mt(e,ut("SetPositionManager",w(t.manager),S(t.isActive)),o)}function xt(e,t,o){return mt(e,ut("SetMinBorrowCollateralUsd",g(t.floorWad)),o)}function At(e,t,o){return mt(e,ut("ApproveToken",w(t.token)),o)}function Et(e,t,o){return mt(e,ut("RevokeToken",w(t.token)),o)}function $t(e,t,o){return mt(e,ut("ApproveBlendPool",w(t.pool)),o)}function Bt(e,t,o){return mt(e,ut("RevokeBlendPool",w(t.pool)),o)}function Nt(e,t,o){return mt(e,ut("CreateLiquidityPool",N({asset:w((r=t).asset),hub_id:y(r.hubId),params:Ee(r.params)})),o);var r}function Ot(e,t,o){return mt(e,ut("UpgradeLiquidityPoolParams",N({hub_asset:E((r=t).hubId,r.asset),params:Ae(r.params)})),o);var r}function Pt(e,t){return mt(e,ut("DeployPool"),t)}function Ut(e,t,o){return mt(e,ut("UpgradePool",x(t.wasmHash)),o)}function qt(e,t,o){return mt(e,ut("UpgradeController",x(t.wasmHash)),o)}function Lt(e,t,o){return mt(e,ut("MigrateController",y(t.newVersion)),o)}function Wt(e,t,o){return mt(e,ut("TransferCtrlOwnership",ct(t)),o)}function zt(e,t,o){return mt(e,ut("ConfigureMarketOracle",N({cfg:Pe((r=t).config),hub_asset:E(r.hubId,r.asset)})),o);var r}function Vt(e,t,o){return mt(e,ut("EditOracleTolerance",N({asset:w((r=t).asset),tolerance:y(r.tolerance)})),o);var r}function Dt(e,t,o){return mt(e,ut("UpgradeGov",x(t.wasmHash)),o)}function Ct(e,t,o){return mt(e,ut("UpdateGovDelay",y(t.newDelay)),o)}function Gt(e,t,o){return mt(e,ut("GrantGovRole",dt(t)),o)}function Xt(e,t,o){return mt(e,ut("RevokeGovRole",dt(t)),o)}function Ft(e,t,o){return mt(e,ut("TransferGovOwnership",ct(t)),o)}function Mt(e,t){const o=I(t.argsXdr.map((e=>i.ScVal.fromXDR(e,"base64")))),r=it(t.predecessor??st);return pt(e,"execute",[T(),w(t.target),R(t.functionName),o,r,it(t.salt)])}function Ht(e,t,o){return ft(e,ut("UpgradeGov",x(t.wasmHash)),o)}function jt(e,t,o){return ft(e,ut("UpdateGovDelay",y(t.newDelay)),o)}function Qt(e,t,o){return ft(e,ut("GrantGovRole",dt(t)),o)}function Zt(e,t,o){return ft(e,ut("RevokeGovRole",dt(t)),o)}function Jt(e,t,o){return ft(e,ut("TransferGovOwnership",ct(t)),o)}const Kt=e=>I(e.map(w));function Yt(e,t,o){return pt(e,"propose_canceller_reset",[Kt(t.newCancellers),it(o)])}function eo(e,t,o){return pt(e,"execute_canceller_reset",[A(t.executor,w),Kt(t.newCancellers),it(o)])}function to(e,t){return pt(e,"set_spoke_asset_flags",[w(e.caller),y(t.spokeId),E(t.hubId,t.asset),S(t.paused),S(t.frozen)])}function oo(e,t){return pt(e,"set_oracle_sanity_bounds",[w(e.caller),w(t.asset),g(t.minPriceWad),g(t.maxPriceWad)])}function ro(e){return pt(e,"create_hub",[w(e.caller)])}function ao(e){return pt(e,"add_spoke",[w(e.caller)])}function no(e,t){return pt(e,"revoke_role_immediate",[w(t.account),R(t.role)])}function so(e){return pt(e,"pause",[w(e.caller)])}function io(e,t){return mt(e,ut("Unpause"),t)}const uo=e=>e.toXDR("base64"),co=e=>i.ScVal.fromXDR(e,"base64"),lo=e=>e.map((e=>String(s(co(e))))).join(":"),po=e=>"bigint"==typeof e||"number"==typeof e?e.toString():String(e),mo=e=>Number(e),fo=e=>String(e),ho=e=>null==e?void 0:po(e),_o=e=>e instanceof Uint8Array?Buffer.from(e).toString("hex"):Buffer.isBuffer(e)?e.toString("hex"):String(e),bo=["None","Multiply","Long","Short"],wo=["Single","PrimaryWithAnchor"],go=["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"],yo=e=>Array.isArray(e)?e:[],vo=(e,t)=>{const o="Borrow"===t;return{action:(r=e[0],go[mo(r)]??po(r)),positionType:t,hubId:mo(e[1]),asset:fo(e[2]),scaledAmountRay:po(e[3]),indexRay:po(e[4]),amount:po(e[5]),liquidationThresholdBps:o?void 0:mo(e[6]),liquidationBonusBps:o?void 0:mo(e[7]),loanToValueBps:o?void 0:mo(e[8]),liquidationFeesBps:o?void 0:mo(e[9])};var r},So=e=>{return{owner:fo(e[0]),spokeId:mo(e[1]),mode:(t=e[2],bo[mo(t)]??"None")};var t},ko=e=>Array.isArray(e)?fo(e[0]):fo(e),Ro=e=>Array.isArray(e)?e[1]:void 0,To={Reflector:"ReflectorSep40",RedStone:"RedStonePriceFeed",Xoxno:"XoxnoPriceFeed"},Io=(e,t)=>{const o=ko(e),r=Ro(e)??{};if("Reflector"!==o)return{source:{provider:To[o]??"RedStonePriceFeed",contractAddress:fo(r.contract),asset:void 0,feedId:fo(r.feed_id),readMode:"Spot",twapRecords:void 0,decimals:mo(r.decimals),resolutionSeconds:0,maxStaleSeconds:mo(r.max_stale_seconds)},quoteToken:void 0};const a=ko(r.read_mode),n=ko(r.asset);return{source:{provider:"ReflectorSep40",contractAddress:fo(r.contract),asset:"Stellar"===n||"Symbol"===n?{kind:n,value:fo(Ro(r.asset))}:void 0,feedId:"String"===n?fo(Ro(r.asset)):void 0,readMode:a,twapRecords:"Twap"===a?mo(Ro(r.read_mode)):void 0,decimals:mo(r.decimals),resolutionSeconds:mo(r.resolution_seconds),maxStaleSeconds:t},quoteToken:"Quoted"===ko(r.base)?fo(Ro(r.base)):void 0}},xo=(e,t)=>{const o=t.tolerance??{},r=mo(t.max_price_stale_seconds),a=Io(t.primary,r),n="Some"===ko(t.anchor)?Ro(t.anchor):void 0,s=n?Io(n,r):void 0;return{baseTokenId:e,quoteTokenId:"USD",tolerance:{upperRatio:mo(o.upper_ratio_bps),lowerRatio:mo(o.lower_ratio_bps)},assetDecimals:mo(t.asset_decimals),maxPriceStaleSeconds:r,strategy:wo[mo(t.strategy)]??"Single",primary:a.source,anchor:s?.source,primaryQuoteToken:a.quoteToken,anchorQuoteToken:s?.quoteToken,minSanityPriceWad:ho(t.min_sanity_price_wad),maxSanityPriceWad:ho(t.max_sanity_price_wad)}},Ao={"market:create":e=>({topic:"market:create",data:{hubId:mo(e.hub_id),baseAsset:fo(e.base_asset),maxBorrowRate:po(e.max_borrow_rate),baseBorrowRate:po(e.base_borrow_rate),slope1:po(e.slope1),slope2:po(e.slope2),slope3:po(e.slope3),midUtilization:po(e.mid_utilization),optimalUtilization:po(e.optimal_utilization),maxUtilization:po(e.max_utilization),reserveFactor:mo(e.reserve_factor),marketAddress:fo(e.market_address)}}),"market:params_update":e=>({topic:"market:params_update",data:{asset:fo(e.asset),maxBorrowRateRay:po(e.max_borrow_rate),baseBorrowRateRay:po(e.base_borrow_rate),slope1Ray:po(e.slope1),slope2Ray:po(e.slope2),slope3Ray:po(e.slope3),midUtilizationRay:po(e.mid_utilization),optimalUtilizationRay:po(e.optimal_utilization),maxUtilizationRay:po(e.max_utilization),reserveFactorBps:mo(e.reserve_factor)}}),"market:batch_state_update":e=>({topic:"market:batch_state_update",data:{updates:yo(e).map((e=>{return t=yo(e),{hubId:mo(t[0]),asset:fo(t[1]),timestamp:mo(t[2]),supplyIndexRay:po(t[3]),borrowIndexRay:po(t[4]),cash:po(t[5]),suppliedRay:po(t[6]),borrowedRay:po(t[7]),revenueRay:po(t[8])};var t}))}}),"market:batch_params_update":e=>({topic:"market:batch_params_update",data:{updates:yo(e).map((e=>{const t=e;return{hubId:mo(t.hub_id),asset:fo(t.asset),params:(o=t.params,{maxBorrowRateRay:po(o.max_borrow_rate),baseBorrowRateRay:po(o.base_borrow_rate),slope1Ray:po(o.slope1),slope2Ray:po(o.slope2),slope3Ray:po(o.slope3),midUtilizationRay:po(o.mid_utilization),optimalUtilizationRay:po(o.optimal_utilization),maxUtilizationRay:po(o.max_utilization),reserveFactorBps:mo(o.reserve_factor),isFlashloanable:Boolean(o.is_flashloanable),flashloanFeeBps:mo(o.flashloan_fee),assetId:fo(o.asset_id),assetDecimals:mo(o.asset_decimals)})};var o}))}}),"position:batch_update":e=>{const t=yo(e);return{topic:"position:batch_update",data:{accountId:po(t[0]),accountAttributes:So(yo(t[1])),updates:[...yo(t[2]).map((e=>vo(yo(e),"Deposit"))),...yo(t[3]).map((e=>vo(yo(e),"Borrow")))]}}},"position:flash_loan":e=>({topic:"position:flash_loan",data:{hubId:mo(e.hub_id),asset:fo(e.asset),receiver:fo(e.receiver),caller:fo(e.caller),amount:po(e.amount),fee:po(e.fee)}}),"config:oracle":e=>({topic:"config:oracle",data:{asset:fo(e.asset),oracle:xo(fo(e.asset),e.config)}}),"position:liquidation":e=>({topic:"position:liquidation",data:{liquidator:fo(e.liquidator),accountId:po(e.account_id),repaidUsdWad:po(e.repaid_usd_wad),bonusBps:po(e.bonus_bps)}}),"debt:bad_debt":e=>({topic:"debt:bad_debt",data:{accountId:po(e.account_id),totalBorrowUsdWad:po(e.total_borrow_usd_wad),totalCollateralUsdWad:po(e.total_collateral_usd_wad)}}),"strategy:initial_payment":e=>({topic:"strategy:initial_payment",data:{token:fo(e.token),amount:po(e.amount),usdValueWad:po(e.usd_value_wad),accountId:po(e.account_id)}}),"strategy:fee":e=>({topic:"strategy:fee",data:{hubId:mo(e.hub_id),asset:fo(e.asset),amount:po(e.amount),fee:po(e.fee),amountSent:po(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:fo(e.aggregator)}}),"config:accumulator":e=>({topic:"config:accumulator",data:{accumulator:fo(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:mo(e.max_supply_positions),maxBorrowPositions:mo(e.max_borrow_positions)}}),"config:oracle_disabled":e=>({topic:"config:oracle_disabled",data:{asset:fo(e.asset)}}),"config:spoke":e=>{const t=e.spoke;return{topic:"config:spoke",data:{spokeId:mo(t.spoke_id),isDeprecated:Boolean(t.is_deprecated),liquidationTargetHfWad:po(t.liquidation_target_hf_wad),healthFactorForMaxBonusWad:po(t.hf_for_max_bonus_wad),liquidationBonusFactorBps:mo(t.liquidation_bonus_factor_bps)}}}},Eo=Object.freeze(Object.keys(Ao));function $o(e,t){const o=lo(e),r=Ao[o];return r?r(s(co(t))):null}const Bo="XLENDXLM-a7c9f3",No=1e4;function Oo(e){const t=BigInt(e).toString(16),o=t.length%2==0?t:`0${t}`;return`${Bo}-${o}`}function Po(e){const t=e.split("-");return t.length>=2&&parseInt(t[1],10)||0}function Uo(e,t=0){return 1e4*e+t}function qo(e){switch(e){case"liq_repay":return"lendingLiquidateRepayDebt";case"liq_seize":return"lendingLiquidateSeizeCollateral";case"param_upd":return"lendingUpdateAccountParameters";default:return"lendingUpdateAccountPosition"}}const Lo=(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()},Wo=e=>e.baseUrl??p[e.network];async function zo(e,t){if(null==e.amountIn==(null==e.amountOut))throw new Error("getStellarAggregatorQuote: exactly one of `amountIn` or `amountOut` must be provided");const o=Lo(Wo(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 Vo(e){const t=Lo(Wo(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 Do=(e,t)=>(e=>Boolean(e&&"object"==typeof e&&!(e instanceof Uint8Array)&&"paths"in e))(e)&&void 0===e.referralId?{...e,referralId:t??0}:e,Co=e=>O(e).toXDR("base64");function Go(t,a){const s=t.routerAddress??h(t.network),i=new r(s),u=new e(t.caller,t.sourceSequence),c=L(Do(a,t.referralId));return{xdr:new n(u,{fee:t.fee??o,networkPassphrase:m[t.network]}).addOperation(i.call("execute_strategy",w(t.caller),g(t.totalIn),c)).setTimeout(t.timeoutSeconds??300).build().toXDR()}}function Xo(e,t){return Go(e,t)}function Fo(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(jo),splitPpm:e.splitPpm}))):[{hops:e.hops.map(jo),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}:Fo(e,t)}const Ho=Fo,jo=e=>({amountOut:e.amountOut,pool:e.address,tokenIn:e.from,tokenOut:e.to,venue:e.dex});function Qo(e,t){const o=t instanceof Error?t.message:String(t);return new Error(`[xoxno-invoked:${e}] ${o}`)}async function Zo(e,t,o){const r=n.fromXDR(t,"base64");try{return(await e.prepareTransaction(r)).toXDR()}catch(e){if(o?.invokedContractId)throw Qo(o.invokedContractId,e);throw e}}async function Jo(e,t,o){return Zo(e,t.xdr,o)}function Ko(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 Yo(e,t){return new Uint8Array(0)}const er=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 tr(t){const o=new e(t.caller,t.sourceSequence),a=new r(t.forwarderAddress).call("mint_and_forward",i.ScVal.scvBytes(er(t.message)),i.ScVal.scvBytes(er(t.attestation)));return{xdr:new n(o,{fee:t.fee??"10000000",networkPassphrase:m[t.network]}).addOperation(a).setTimeout(t.timeoutSeconds??120).build().toXDR()}}const or={1:{name:"AssetNotSupported",message:"This asset is not supported by the protocol."},2:{name:"AssetAlreadySupported",message:"This asset is already supported."},3:{name:"InvalidTicker",message:"Invalid asset ticker."},6:{name:"InvalidAsset",message:"Invalid asset address."},10:{name:"InvalidPoolTemplate",message:"The liquidity pool template hash is invalid."},11:{name:"InvalidExchangeSrc",message:"The oracle configuration is invalid."},12:{name:"PairNotActive",message:"No oracle is configured for this asset."},32:{name:"OwnerNotSet",message:"The contract owner has not been set."},39:{name:"InvalidTimelockDelay",message:"The timelock delay is out of the allowed range."},41:{name:"InvalidRole",message:"The caller does not hold the required role."},43:{name:"HubNotActive",message:"This hub is not active."},44:{name:"NotAuthorized",message:"The caller is not authorized to perform this action."},46:{name:"OperationNotCancellable",message:"This governance operation cannot be cancelled."},113:{name:"InvalidLiqThreshold",message:"LTV, liquidation threshold, or bonus is out of bounds."},116:{name:"InvalidBorrowParams",message:"Supply or borrow cap configuration is invalid."},117:{name:"InvalidUtilRange",message:"Interest-rate utilization breakpoints are invalid."},132:{name:"AssetDecimalsTooHigh",message:"Asset decimals exceed the protocol maximum (27)."},300:{name:"SpokeNotFound",message:"This spoke does not exist."},301:{name:"SpokeDeprecated",message:"This spoke has been deprecated."},307:{name:"AssetNotInSpoke",message:"This asset is not listed on the spoke."},308:{name:"AssetAlreadyInSpoke",message:"This asset is already listed in the spoke."},309:{name:"SpokeAssetInUse",message:"This spoke asset still has live positions; drain usage before removal."},315:{name:"SpokeAssetPaused",message:"This spoke asset is paused."},316:{name:"SpokeAssetFrozen",message:"This spoke asset is frozen."},317:{name:"SpokeAssetFlagRelaxation",message:"Guardian flag updates may only tighten; clearing a flag requires the timelocked edit."},220:{name:"InvalidOracleBase",message:"The oracle quote asset/market is missing or invalid."},221:{name:"InvalidOracleDecimals",message:"The oracle decimals value is invalid."},224:{name:"InvalidSanityBounds",message:"Oracle sanity bounds are invalid (require 0 < min < max)."},225:{name:"OracleCycleDetected",message:"A cycle was detected in the oracle quote chain."}};function rr(e){const t=e.match(/Error\(Contract,\s*#(\d+)\)/);if(!t)return null;const o=Number(t[1]),r=or[o];return r?{code:o,...r}:null}export{c as STELLAR_AGGREGATOR_ROUTER,l as STELLAR_GOVERNANCE,st as STELLAR_GOVERNANCE_ZERO_PREDECESSOR,u as STELLAR_LENDING_CONTROLLER,Eo as STELLAR_LENDING_TOPICS,m as STELLAR_NETWORK_PASSPHRASE,p as STELLAR_QUOTE_URL,d as STELLAR_SOROBAN_RPC_URL,No as SYNTHETIC_EVENT_ORDER_STRIDE,Bo as XOXNO_LENDING_STELLAR_TICKER,Yo as buildSameTokenRepaySwapSteps,Ce as buildStellarAcceptOwnershipTx,at as buildStellarAddRewardsTx,He as buildStellarApproveTokenTx,Xo as buildStellarBatchSwapTx,C as buildStellarBorrowBatchTx,G as buildStellarBorrowTx,tr as buildStellarCctpForwardTx,rt as buildStellarClaimRevenueTx,tt as buildStellarCreateLiquidityPoolTx,eo as buildStellarExecuteCancellerResetTx,Go as buildStellarExecuteStrategyTx,Q as buildStellarFlashLoanTx,ao as buildStellarGovernanceAddSpokeImmediateTx,ro as buildStellarGovernanceCreateHubImmediateTx,Ht as buildStellarGovernanceExecuteGovernanceUpgradeTx,Qt as buildStellarGovernanceExecuteGrantGovernanceRoleTx,Zt as buildStellarGovernanceExecuteRevokeGovernanceRoleTx,Jt as buildStellarGovernanceExecuteTransferGovOwnTx,Mt as buildStellarGovernanceExecuteTx,jt as buildStellarGovernanceExecuteUpdateDelayTx,so as buildStellarGovernancePauseTx,no as buildStellarGovernanceRevokeRoleImmediateTx,oo as buildStellarGovernanceSetOracleSanityBoundsImmediateTx,to as buildStellarGovernanceSetSpokeAssetFlagsImmediateTx,ze as buildStellarGrantRoleTx,Oo as buildStellarLendingIdentifier,j as buildStellarLiquidateTx,Z as buildStellarMigrateFromBlendTx,qe as buildStellarMigrateTx,J as buildStellarMultiplyTx,Le as buildStellarPauseTx,St as buildStellarProposeAddAssetToSpokeTx,yt as buildStellarProposeAddSpokeTx,$t as buildStellarProposeApproveBlendPoolTx,At as buildStellarProposeApproveTokenTx,Yt as buildStellarProposeCancellerResetTx,zt as buildStellarProposeConfigureMarketOracleTx,gt as buildStellarProposeCreateHubTx,Nt as buildStellarProposeCreateLiquidityPoolTx,Pt as buildStellarProposeDeployPoolTx,kt as buildStellarProposeEditAssetInSpokeTx,Vt as buildStellarProposeEditOracleToleranceTx,Dt as buildStellarProposeGovernanceUpgradeTx,Gt as buildStellarProposeGrantGovernanceRoleTx,Lt as buildStellarProposeMigrateControllerTx,Rt as buildStellarProposeRemoveAssetFromSpokeTx,vt as buildStellarProposeRemoveSpokeTx,Bt as buildStellarProposeRevokeBlendPoolTx,Xt as buildStellarProposeRevokeGovernanceRoleTx,Et as buildStellarProposeRevokeTokenTx,_t as buildStellarProposeSetAccumulatorTx,ht as buildStellarProposeSetAggregatorTx,xt as buildStellarProposeSetMinBorrowCollatTx,bt as buildStellarProposeSetPoolTemplateTx,wt as buildStellarProposeSetPositionLimitsTx,It as buildStellarProposeSetPositionManagerTx,Tt as buildStellarProposeSetSpokeLiquidationCurveTx,Wt as buildStellarProposeTransferCtrlOwnershipTx,Ft as buildStellarProposeTransferGovOwnTx,io as buildStellarProposeUnpauseTx,Ct as buildStellarProposeUpdateDelayTx,qt as buildStellarProposeUpgradeControllerTx,Ot as buildStellarProposeUpgradePoolParamsTx,Ut as buildStellarProposeUpgradePoolTx,et as buildStellarRenewAccountTx,M as buildStellarRepayBatchTx,ee as buildStellarRepayDebtWithCollateralTx,H as buildStellarRepayTx,Ve as buildStellarRevokeRoleTx,je as buildStellarRevokeTokenTx,Xe as buildStellarSetAccumulatorTx,Ge as buildStellarSetAggregatorTx,Fe as buildStellarSetLiquidityPoolTemplateTx,Qe as buildStellarSetMarketOracleConfigTx,Ke as buildStellarSetOracleSanityBoundsTx,Ze as buildStellarSetOracleToleranceTx,Me as buildStellarSetPositionLimitsTx,Je as buildStellarSetSpokeAssetFlagsTx,V as buildStellarSupplyBatchTx,D as buildStellarSupplyTx,Y as buildStellarSwapCollateralTx,K as buildStellarSwapDebtTx,De as buildStellarTransferOwnershipTx,We as buildStellarUnpauseTx,nt as buildStellarUpdateAccountThresholdTx,Ye as buildStellarUpdateIndexesTx,Ue as buildStellarUpgradeControllerTx,ot as buildStellarUpgradeLiquidityPoolParamsTx,X as buildStellarWithdrawBatchTx,F as buildStellarWithdrawTx,z as buildTx,$o as decodeStellarLendingEvent,Ae as encodeInterestRateModel,Pe as encodeMarketOracleConfigInput,Ee as encodeMarketParamsRaw,Oe as encodeOracleSourceConfigInput,$e as encodePositionLimits,Co as encodeStrategyPayloadToRouteXdr,Po as extractEventOrder,ge as getStellarAccountPositions,zo as getStellarAggregatorQuote,h as getStellarAggregatorRouter,pe as getStellarAsset,ve as getStellarAssetGraph,fe as getStellarAssetMarkets,me as getStellarAssetPage,se as getStellarAssets,_ as getStellarGovernance,ye as getStellarGovernanceProposals,he as getStellarHub,Se as getStellarHubGraph,ie as getStellarHubs,ae as getStellarLendingContext,f as getStellarLendingController,ne as getStellarLendingLiveState,Vo as getStellarQuoteTokens,le as getStellarReserve,Re as getStellarReserveGraph,de as getStellarReserveHolders,ce as getStellarReserves,_e as getStellarSpoke,ke as getStellarSpokeGraph,ue as getStellarSpokes,we as getStellarUserActivity,be as getStellarUserPositions,Ho as mapQuoteResponseToAggregatorSwap,Fo as mapQuoteResponseToStrategyPayload,Mo as mapQuoteResponseToStrategySwap,rr as mapSorobanError,qo as mapStellarPositionActivityType,Jo as prepareStellarBuiltTx,Zo as prepareStellarTxXdr,lo as stellarLendingDispatchKey,Te as stellarLendingRead,Uo as syntheticEventOrder,Qo as tagStellarInvokedContractError,uo as toBase64Xdr,Ko 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 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"},m={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 h(e){const t=c[e];if(!t)throw new Error(`Stellar aggregator router address not configured for network "${e}". Set STELLAR_AGGREGATOR_ROUTER_${e.toUpperCase()} env var.`);return t}function _(e){const t=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 g=["Soroswap","Aquarius","Phoenix","Sushi","CometDex"],b=e=>new t(e).toScVal(),w=e=>new a(e).toI128(),y=e=>i.ScVal.scvU32(e),v=e=>new a("string"==typeof e?e:e.toString()).toU64(),S=e=>i.ScVal.scvBool(e),k=e=>i.ScVal.scvString(e),R=e=>i.ScVal.scvSymbol(e),T=()=>i.ScVal.scvVoid(),x=e=>i.ScVal.scvVec(e),I=(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)},A=(e,t)=>null==e?T():t(e),E=(e,t)=>$({asset:b(t),hub_id:y(e)}),B=(e,t,r)=>i.ScVal.scvVec([E(e,t),w(r)]),N=e=>i.ScVal.scvVec(e.map((e=>B(e.hubId,e.asset,e.amount)))),$=e=>{const t=Object.keys(e).sort().map((t=>new i.ScMapEntry({key:R(t),val:e[t]})));return i.ScVal.scvMap(t)},O=e=>{const t=e.paths.map((e=>{const t=e.hops.map((e=>{return $({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 $({hops:i.ScVal.scvVec(t),split_ppm:y(e.splitPpm)})}));return $({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)},U=()=>i.ScVal.scvBytes(Buffer.alloc(0)),L=e=>{const t=e.trim();if(t.startsWith("0x")){const e=t.slice(2);if(!((r=e).length>0&&r.length%2==0&&/^[0-9a-fA-F]+$/.test(r)))throw new Error("Stellar builder: strategy swap bytes hex string must be 0x-prefixed and even-length");return Buffer.from(e,"hex")}var r;if(!/^[A-Za-z0-9+/]+={0,2}$/.test(t))throw new Error("Stellar builder: strategy swap bytes must be base64 routeXdr or 0x-prefixed hex");const o=Buffer.from(t,"base64");if(0===o.length)throw new Error("Stellar builder: strategy swap bytes must be non-empty base64 routeXdr, 0x hex string, or Uint8Array");return o},q=e=>{if("string"==typeof e)return P(L(e));if(e instanceof Uint8Array)return 0===e.length?U():P(e);if(e&&"object"==typeof e)return"routeXdr"in(r=e)&&"string"==typeof r.routeXdr?P(L(e.routeXdr)):(e=>"swapXdr"in e&&"string"==typeof e.swapXdr)(e)?P(L(e.swapXdr)):(e=>"bytes"in e&&("string"==typeof e.bytes||e.bytes instanceof Uint8Array))(e)?"string"==typeof e.bytes?P(L(e.bytes)):0===e.bytes.length?U():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||!g.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(O(t).toXDR("base64"),"base64")));var t,r;throw new Error("Stellar builder: `steps` must be opaque strategy bytes (`routeXdr`, base64/hex string, or Uint8Array)")},W=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 z(t,a,s){const i=t.controllerAddress??f(t.network),l=new o(i),c=new e(t.caller,t.sourceSequence);return{xdr:new n(c,{fee:t.fee??r,networkPassphrase:m[t.network]}).addOperation(l.call(a,...s)).setTimeout(t.timeoutSeconds??300).build().toXDR()}}function D(e,t){const r=t.accountNonce??0,o=t.spokeId??0;return z(e,"supply",[b(e.caller),v(r),y(o),N([...t.assets])])}function V(e,t){return D(e,{accountNonce:t.accountNonce,spokeId:t.spokeId,assets:[{hubId:t.hubId,asset:t.asset,amount:t.amount}]})}function C(e,t){return z(e,"borrow",[b(e.caller),v(t.accountNonce),N([...t.borrows]),A(t.to,b)])}function F(e,t){return C(e,{accountNonce:t.accountNonce,borrows:[{hubId:t.hubId,asset:t.asset,amount:t.amount}],to:t.to})}function M(e,t){return z(e,"withdraw",[b(e.caller),v(t.accountNonce),N([...t.withdrawals]),A(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 z(e,"repay",[b(e.caller),v(t.accountNonce),N([...t.payments])])}function H(e,t){return X(e,{accountNonce:t.accountNonce,payments:[{hubId:t.hubId,asset:t.asset,amount:t.amount}]})}function j(e,t){return z(e,"liquidate",[b(e.caller),v(t.accountNonce),N([...t.debtPayments])])}function J(e,t){return z(e,"flash_loan",[b(e.caller),E(t.hubId,t.asset),w(t.amount),b(t.receiver),W(t.data)])}function Q(e,t){return z(e,"migrate_from_blend",[b(e.caller),v(t.accountId),y(t.spokeId),y(t.hubId),b(t.blendPool),x(t.collateralTokens.map(b)),x(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),w(r)]);var t,r}))))]);var r}function K(e,t){const r=t.accountNonce??0,o=t.spokeId??0;return z(e,"multiply",[b(e.caller),v(r),y(o),E(t.collateral.hubId,t.collateral.asset),w(t.debtToFlashLoan),E(t.debt.hubId,t.debt.asset),y(t.mode),q(t.steps),A(t.initialPayment,(e=>B(e.hubId,e.asset,e.amount))),A(t.convertSwap,q)])}function Z(e,t){return z(e,"swap_debt",[b(e.caller),v(t.accountNonce),E(t.existingDebt.hubId,t.existingDebt.asset),w(t.newDebtAmount),E(t.newDebt.hubId,t.newDebt.asset),q(t.steps)])}function Y(e,t){return z(e,"swap_collateral",[b(e.caller),v(t.accountNonce),E(t.current.hubId,t.current.asset),w(t.fromAmount),E(t.newCollateral.hubId,t.newCollateral.asset),q(t.steps)])}function ee(e,t){return z(e,"repay_debt_with_collateral",[b(e.caller),v(t.accountNonce),E(t.collateral.hubId,t.collateral.asset),w(t.collateralAmount),E(t.debt.hubId,t.debt.asset),q(t.steps),S(t.closePosition)])}const te="/stellar-lending",re=25,oe=encodeURIComponent,ae=(e,t)=>e.fetchWithTimeout(`${te}/context`,t),ne=(e,t)=>e.fetchWithTimeout(`${te}/live-state`,t),se=(e,t)=>e.fetchWithTimeout(`${te}/assets`,t),ie=(e,t)=>e.fetchWithTimeout(`${te}/hubs`,t),le=(e,t)=>e.fetchWithTimeout(`${te}/spokes`,t),ce=(e,t={},r)=>{const{hubId:o,spokeId:a,asset:n}=t;return e.fetchWithTimeout(`${te}/reserves`,{...r,params:{...void 0!==o?{hubId:o}:{},...void 0!==a?{spokeId:a}:{},...n?{asset:n}:{}}})},ue=(e,t,r,o,a)=>e.fetchWithTimeout(`${te}/reserves/${t}/${r}/${oe(o)}`,a),pe=(e,t,r,o,a,n)=>e.fetchWithTimeout(`${te}/reserves/${t}/${r}/${oe(o)}/holders`,{...n,params:{side:a}}),de=(e,t,r)=>e.fetchWithTimeout(`${te}/assets/${oe(t)}`,r),me=(e,t,r,o)=>e.fetchWithTimeout(`${te}/assets/${oe(t)}/page`,{...o,params:{...r}}),fe=(e,t,r,o)=>e.fetchWithTimeout(`${te}/assets/${oe(t)}/markets`,{...o,params:{side:r}}),he=(e,t,r)=>e.fetchWithTimeout(`${te}/hubs/${t}`,r),_e=(e,t,r)=>e.fetchWithTimeout(`${te}/spokes/${t}`,r),ge=(e,t,r)=>e.fetchWithTimeout(`${te}/users/${oe(t)}/positions`,r),be=(e,t,r={},o)=>{const{skip:a,top:n}=r;return e.fetchWithTimeout(`${te}/users/${oe(t)}/activity`,{...o,params:{...void 0!==a?{skip:a}:{},...void 0!==n?{top:n}:{}}})},we=(e,t,r)=>e.fetchWithTimeout(`${te}/accounts/${oe(t)}/positions`,r),ye=(e,t={},r)=>{const{top:o=re,continuationToken:a}=t;return e.fetchWithTimeout(`${te}/governance/proposals`,{...r,params:{top:o,...a?{continuationToken:a}:{}}})},ve=(e,t,r,o)=>e.fetchWithTimeout(`${te}/assets/${oe(t)}/graph`,{...o,params:{...r}}),Se=(e,t,r,o)=>e.fetchWithTimeout(`${te}/hubs/${t}/graph`,{...o,params:{...r}}),ke=(e,t,r,o)=>e.fetchWithTimeout(`${te}/spokes/${t}/graph`,{...o,params:{...r}}),Re=(e,t,r,o,a,n)=>e.fetchWithTimeout(`${te}/reserves/${t}/${r}/${oe(o)}/graph`,{...n,params:{...a}}),Te=e=>({context:t=>ae(e,t),liveState:t=>ne(e,t),assets:t=>se(e,t),hubs:t=>ie(e,t),spokes:t=>le(e,t),reserves:(t,r)=>{return void 0===(o=t)||"hubId"in o||"spokeId"in o||"asset"in o?ce(e,t,r):ce(e,{},t);var o},reserve:(t,r,o,a)=>ue(e,t,r,o,a),reserveHolders:(t,r,o,a,n)=>pe(e,t,r,o,a,n),asset:(t,r)=>de(e,t,r),assetMarkets:(t,r,o)=>fe(e,t,r,o),hub:(t,r)=>he(e,t,r),spoke:(t,r)=>_e(e,t,r),userPositions:(t,r)=>ge(e,t,r),userActivity:(t,r,o)=>be(e,t,r,o),accountPositions:(t,r)=>we(e,t,r),governanceProposals:(t,r)=>ye(e,t,r),assetGraph:(t,r,o)=>ve(e,t,r,o),hubGraph:(t,r,o)=>Se(e,t,r,o),spokeGraph:(t,r,o)=>ke(e,t,r,o),reserveGraph:(t,r,o,a,n)=>Re(e,t,r,o,a,n)}),xe=e=>$({base_borrow_rate:w(e.baseBorrowRateRay),max_borrow_rate:w(e.maxBorrowRateRay),max_utilization:w(e.maxUtilizationRay),mid_utilization:w(e.midUtilizationRay),optimal_utilization:w(e.optimalUtilizationRay),reserve_factor:y(e.reserveFactorBps),slope1:w(e.slope1Ray),slope2:w(e.slope2Ray),slope3:w(e.slope3Ray)}),Ie=e=>$({asset_decimals:y(e.assetDecimals),asset_id:b(e.assetId),base_borrow_rate:w(e.baseBorrowRateRay),flashloan_fee:y(e.flashloanFeeBps),is_flashloanable:S(e.isFlashloanable),max_borrow_rate:w(e.maxBorrowRateRay),max_utilization:w(e.maxUtilizationRay),mid_utilization:w(e.midUtilizationRay),optimal_utilization:w(e.optimalUtilizationRay),reserve_factor:y(e.reserveFactorBps),slope1:w(e.slope1Ray),slope2:w(e.slope2Ray),slope3:w(e.slope3Ray)}),Ae=e=>$({max_borrow_positions:y(e.maxBorrowPositions),max_supply_positions:y(e.maxSupplyPositions)}),Ee=e=>{if("Token"in e&&e.Token)return x([R("Token"),b(e.Token)]);if("Ref"in e&&e.Ref)return x([R("Ref"),R(e.Ref)]);throw new Error(`Stellar builder: PriceKey must be { Token } or { Ref }, got ${JSON.stringify(e)}`)},Be=e=>{if("Stellar"in e)return x([R("Stellar"),b(e.Stellar)]);if("Symbol"in e)return x([R("Symbol"),R(e.Symbol)]);if("String"in e)return x([R("String"),k(e.String)]);throw new Error(`Stellar builder: unknown OracleAssetRef ${JSON.stringify(e)}`)},Ne=e=>{if("Spot"===e)return x([R("Spot")]);if(e&&"object"==typeof e&&"Twap"in e)return x([R("Twap"),y(Number(e.Twap))]);throw new Error(`Stellar builder: unknown OracleReadMode ${JSON.stringify(e)}`)},$e=e=>{if("Reflector"===e||"RedStone"===e||"Xoxno"===e)return x([R(e)]);throw new Error(`Stellar builder: unknown ProviderKind "${e}"`)},Oe=e=>{if("Market"===e||"Fundamental"===e)return x([R(e)]);throw new Error(`Stellar builder: unknown FeedNature "${e}"`)},Pe=e=>{if("Reflector"in e){const t=e.Reflector;return x([R("Reflector"),$({asset:Be(t.asset),contract:b(t.contract),read_mode:Ne(t.readMode)})])}if("MultiFeed"in e){const t=e.MultiFeed;return x([R("MultiFeed"),$({contract:b(t.contract),feed_id:k(t.feedId),kind:$e(t.kind),nature:Oe(t.nature)})])}throw new Error(`Stellar builder: unknown ProviderRef ${JSON.stringify(e)}`)},Ue=e=>{const t=e;return $({decimals:y(t.decimals),max_stale_seconds:v(t.maxStaleSeconds),provider:Pe(t.provider)})},Le=e=>{if("RequireDisjoint"===e)return x([R("RequireDisjoint")]);if(e&&"object"==typeof e&&"AllowShared"in e){const t=e.AllowShared;return x([R("AllowShared"),x(t.map((e=>$({contract:b(e.contract),kind:$e(e.kind)}))))])}throw new Error(`Stellar builder: unknown IndependencePolicy ${JSON.stringify(e)}`)},qe=e=>{const t=e,r=t.sources??[];let o,a;if("number"==typeof t.toleranceBps)o=1e4+t.toleranceBps,a=Math.max(1,Math.floor(1e8/o));else{const e=t.tolerance??{};o=Number(e.upperRatioBps),a=Number(e.lowerRatioBps)}return $({asset_decimals:y(Number(t.assetDecimals)),independence:Le(t.independence),max_price_stale_seconds:v(Number(t.maxPriceStaleSeconds)),max_sanity_price_wad:w(String(t.maxSanityPriceWad)),min_sanity_price_wad:w(String(t.minSanityPriceWad)),sources:x(r.map((e=>(e=>{if("Feed"in e)return x([R("Feed"),Ue(e.Feed)]);if("Scaled"in e){const t=e.Scaled;return x([R("Scaled"),$({factor:Ue(t.factor),max_factor_wad:w(t.maxFactorWad),min_factor_wad:w(t.minFactorWad),quote:Ee(t.quote)})])}if("LpShare"in e){const t=e.LpShare;return x([R("LpShare"),$({key_a:Ee(t.keyA),key_b:Ee(t.keyB),kind:x([R(t.kind||"ConstantProduct")]),pool:b(t.pool),reserve_a_decimals:y(t.reserveADecimals),reserve_b_decimals:y(t.reserveBDecimals),share_decimals:y(t.shareDecimals)})])}throw new Error(`Stellar builder: unknown PriceSource ${JSON.stringify(e)}`)})(e)))),tolerance:$({lower_ratio_bps:y(a),upper_ratio_bps:y(o)})})},We=qe;function ze(e,t){return z(e,"upgrade",[I(t.wasmHash)])}function De(e,t){return z(e,"migrate",[y(t.newVersion)])}function Ve(e){return z(e,"pause",[])}function Ce(e){return z(e,"unpause",[])}function Fe(e,t){return z(e,"grant_role",[b(t.account),R(t.role)])}function Me(e,t){return z(e,"revoke_role",[b(t.account),R(t.role)])}function Ge(e,t){return z(e,"transfer_ownership",[b(t.newOwner),y(t.liveUntilLedger)])}function Xe(e){return z(e,"accept_ownership",[])}function He(e,t){return z(e,"set_swap_aggregator",[b(t.aggregator)])}function je(e,t){return z(e,"set_price_aggregator",[b(t.aggregator)])}const Je=He;function Qe(e,t){return z(e,"set_accumulator",[b(t.accumulator)])}function Ke(e,t){return z(e,"set_position_limits",[Ae(t)])}function Ze(e,t){return z(e,"approve_blend_pool",[b(t.pool)])}function Ye(e,t){return z(e,"revoke_blend_pool",[b(t.pool)])}const et=Ze,tt=Ye;function rt(e,t){return z(e,"set_oracle",[Ee(t.key),qe(t.oracle)])}const ot=rt;function at(e,t){const r=t.toleranceBps,o=t.upperRatioBps??1e4+r,a=t.lowerRatioBps??Math.max(1,Math.floor(1e8/o));return z(e,"set_tolerance",[Ee(t.key),$({lower_ratio_bps:y(a),upper_ratio_bps:y(o)})])}function nt(e,t){return z(e,"set_spoke_asset_flags",[y(t.spokeId),E(t.hubId,t.asset),S(t.paused),S(t.frozen)])}function st(e,t){return z(e,"set_oracle_sanity_bounds",[b(t.asset),w(t.minPriceWad),w(t.maxPriceWad)])}function it(e,t){return z(e,"update_indexes",[b(e.caller),x(t.assets.map((e=>E(e.hubId,e.asset))))])}function lt(e,t){return z(e,"renew_account",[b(e.caller),v(t.accountNonce)])}function ct(e,t){return z(e,"create_liquidity_pool",[y(t.hubId),b(t.asset),Ie(t.params)])}function ut(e,t){return z(e,"upgrade_liquidity_pool_params",[E(t.hubId,t.asset),xe(t.params)])}function pt(e,t){return z(e,"claim_revenue",[b(e.caller),x(t.assets.map((e=>E(e.hubId,e.asset))))])}function dt(e,t){return z(e,"add_rewards",[b(e.caller),N(t.rewards)])}function mt(e,t){return z(e,"update_account_threshold",[b(e.caller),S(t.hasRisks),x(t.accountNonces.map((e=>v(e))))])}const ft="00".repeat(32),ht=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)},_t=(e,...t)=>x([R(e),...t]),gt=e=>$({new_owner:b(e.newOwner),live_until_ledger:y(e.liveUntilLedger)}),bt=e=>$({asset:b(e.asset),bonus:y(e.bonus),borrow_cap:w(e.borrowCap),can_borrow:S(e.canBorrow),can_collateral:S(e.canCollateral),frozen:S(e.frozen),hub_id:y(e.hubId),paused:S(e.paused),liquidation_fees:y(e.liquidationFees),ltv:y(e.ltv),oracle_override:x([R("None")]),spoke_id:y(e.spokeId),supply_cap:w(e.supplyCap),threshold:y(e.threshold)}),wt=e=>$({account:b(e.account),role:R(e.role)});function yt(t,a,s){const i=t.governanceAddress??_(t.network),l=new o(i),c=new e(t.caller,t.sourceSequence);return{xdr:new n(c,{fee:t.fee??r,networkPassphrase:m[t.network]}).addOperation(l.call(a,...s)).setTimeout(t.timeoutSeconds??300).build().toXDR()}}const vt=(e,t,r)=>yt(e,"propose",[b(e.caller),t,ht(r)]),St=(e,t,r)=>yt(e,"execute_self",[T(),t,ht(r)]);function kt(e,t,r){return vt(e,_t("SetSwapAggregator",b(t.aggregator)),r)}function Rt(e,t,r){return vt(e,_t("SetPriceAggregator",b(t.aggregator)),r)}const Tt=kt;function xt(e,t,r){return vt(e,_t("SetAccumulator",b(t.accumulator)),r)}function It(e,t,r){return vt(e,_t("SetPositionLimits",Ae(t)),r)}function At(e,t){return vt(e,_t("CreateHub"),t)}function Et(e,t){return vt(e,_t("AddSpoke"),t)}function Bt(e,t,r){return vt(e,_t("RemoveSpoke",y(t.spokeId)),r)}function Nt(e,t,r){return vt(e,_t("AddAssetToSpoke",bt(t)),r)}function $t(e,t,r){return vt(e,_t("EditAssetInSpoke",bt(t)),r)}function Ot(e,t,r){return vt(e,_t("RemoveAssetFromSpoke",$({hub_asset:E((o=t).hubId,o.asset),spoke_id:y(o.spokeId)})),r);var o}function Pt(e,t,r){return vt(e,_t("SetSpokeLiquidationCurve",$({hf_for_max_bonus_wad:w((o=t).hfForMaxBonusWad),liquidation_bonus_factor_bps:y(o.liquidationBonusFactorBps),spoke_id:y(o.spokeId),target_hf_wad:w(o.targetHfWad)})),r);var o}function Ut(e,t,r){return vt(e,_t("SetPositionManager",b(t.manager),S(t.isActive)),r)}function Lt(e,t,r){return vt(e,_t("SetMinBorrowCollateralUsd",w(t.floorWad)),r)}function qt(e,t,r){return vt(e,_t("ApproveToken",b(t.token)),r)}function Wt(e,t,r){return vt(e,_t("RevokeToken",b(t.token)),r)}function zt(e,t,r){return vt(e,_t("ApproveBlendPool",b(t.pool)),r)}function Dt(e,t,r){return vt(e,_t("RevokeBlendPool",b(t.pool)),r)}function Vt(e,t,r){return vt(e,_t("CreateLiquidityPool",$({asset:b((o=t).asset),hub_id:y(o.hubId),params:Ie(o.params)})),r);var o}function Ct(e,t,r){return vt(e,_t("UpgradeLiquidityPoolParams",$({hub_asset:E((o=t).hubId,o.asset),params:xe(o.params)})),r);var o}function Ft(e,t,r){return vt(e,_t("DeployPool",I(t.wasmHash)),r)}function Mt(e,t,r){return vt(e,_t("UpgradePool",I(t.wasmHash)),r)}function Gt(e,t,r){return vt(e,_t("UpgradeController",I(t.wasmHash)),r)}function Xt(e,t,r){return vt(e,_t("MigrateController",y(t.newVersion)),r)}function Ht(e,t,r){return vt(e,_t("TransferCtrlOwnership",gt(t)),r)}function jt(e,t,r){return vt(e,_t("ConfigureAssetOracle",$({key:Ee((o=t).key),oracle:qe(o.oracle)})),r);var o}const Jt=jt;function Qt(e,t,r){return vt(e,_t("EditOracleTolerance",$({key:Ee((o=t).key),tolerance:y(o.tolerance)})),r);var o}function Kt(e,t,r){return vt(e,_t("UpgradeGov",I(t.wasmHash)),r)}function Zt(e,t,r){return vt(e,_t("UpdateGovDelay",y(t.newDelay)),r)}function Yt(e,t,r){return vt(e,_t("GrantGovRole",wt(t)),r)}function er(e,t,r){return vt(e,_t("RevokeGovRole",wt(t)),r)}function tr(e,t,r){return vt(e,_t("TransferGovOwnership",gt(t)),r)}function rr(e,t){const r=x(t.argsXdr.map((e=>i.ScVal.fromXDR(e,"base64")))),o=ht(t.predecessor??ft);return yt(e,"execute",[T(),b(t.target),R(t.functionName),r,o,ht(t.salt)])}function or(e,t,r){return St(e,_t("UpgradeGov",I(t.wasmHash)),r)}function ar(e,t,r){return St(e,_t("UpdateGovDelay",y(t.newDelay)),r)}function nr(e,t,r){return St(e,_t("GrantGovRole",wt(t)),r)}function sr(e,t,r){return St(e,_t("RevokeGovRole",wt(t)),r)}function ir(e,t,r){return St(e,_t("TransferGovOwnership",gt(t)),r)}const lr=e=>x(e.map(b));function cr(e,t,r){return yt(e,"propose_canceller_reset",[lr(t.newCancellers),ht(r)])}function ur(e,t,r){return yt(e,"execute_canceller_reset",[A(t.executor,b),lr(t.newCancellers),ht(r)])}function pr(e,t){return yt(e,"set_spoke_asset_flags",[b(e.caller),y(t.spokeId),E(t.hubId,t.asset),S(t.paused),S(t.frozen)])}function dr(e,t){return yt(e,"set_oracle_sanity_bounds",[b(e.caller),b(t.asset),w(t.minPriceWad),w(t.maxPriceWad)])}function mr(e){return yt(e,"create_hub",[b(e.caller)])}function fr(e){return yt(e,"add_spoke",[b(e.caller)])}function hr(e,t){return yt(e,"revoke_role_immediate",[b(t.account),R(t.role)])}function _r(e){return yt(e,"pause",[b(e.caller)])}function gr(e,t){return vt(e,_t("Unpause"),t)}const br=e=>e.toXDR("base64"),wr=e=>i.ScVal.fromXDR(e,"base64"),yr=e=>e.map((e=>String(s(wr(e))))).join(":"),vr=e=>"bigint"==typeof e||"number"==typeof e?e.toString():String(e),Sr=e=>Number(e),kr=e=>String(e),Rr=e=>e instanceof Uint8Array?Buffer.from(e).toString("hex"):Buffer.isBuffer(e)?e.toString("hex"):String(e),Tr=["None","Multiply","Long","Short"],xr=["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","migrate","rp_col_net"],Ir=e=>Array.isArray(e)?e:[],Ar=(e,t)=>{const r="Borrow"===t;return{action:(o=e[0],xr[Sr(o)]??vr(o)),positionType:t,hubId:Sr(e[1]),asset:kr(e[2]),scaledAmountRay:vr(e[3]),indexRay:vr(e[4]),amount:vr(e[5]),liquidationThresholdBps:r?void 0:Sr(e[6]),liquidationBonusBps:r?void 0:Sr(e[7]),loanToValueBps:r?void 0:Sr(e[8]),liquidationFeesBps:r?void 0:Sr(e[9])};var o},Er=e=>{return{owner:kr(e[0]),spokeId:Sr(e[1]),mode:(t=e[2],Tr[Sr(t)]??"None")};var t},Br=e=>Array.isArray(e)?e[1]:void 0,Nr=e=>{const t=(r=e,Array.isArray(r)?kr(r[0]):kr(r));var r;if("Token"===t)return{Token:kr(Br(e))};if("Ref"===t)return{Ref:kr(Br(e))};if(e&&"object"==typeof e&&!Array.isArray(e)){const t=e;if(void 0!==t.Token)return{Token:kr(t.Token)};if(void 0!==t.Ref)return{Ref:kr(t.Ref)}}return{Token:kr(e)}},$r=e=>{const t=e.tolerance??{};return{assetDecimals:Sr(e.asset_decimals),maxPriceStaleSeconds:Sr(e.max_price_stale_seconds),sources:Ir(e.sources).map((e=>e)),tolerance:{upperRatio:Sr(t.upper_ratio_bps),lowerRatio:Sr(t.lower_ratio_bps)},independence:e.independence,minSanityPriceWad:vr(e.min_sanity_price_wad),maxSanityPriceWad:vr(e.max_sanity_price_wad)}},Or={"market:create":e=>({topic:"market:create",data:{hubId:Sr(e.hub_id),baseAsset:kr(e.base_asset),maxBorrowRate:vr(e.max_borrow_rate),baseBorrowRate:vr(e.base_borrow_rate),slope1:vr(e.slope1),slope2:vr(e.slope2),slope3:vr(e.slope3),midUtilization:vr(e.mid_utilization),optimalUtilization:vr(e.optimal_utilization),maxUtilization:vr(e.max_utilization),reserveFactor:Sr(e.reserve_factor),marketAddress:kr(e.market_address)}}),"market:params_update":e=>({topic:"market:params_update",data:{asset:kr(e.asset),maxBorrowRateRay:vr(e.max_borrow_rate),baseBorrowRateRay:vr(e.base_borrow_rate),slope1Ray:vr(e.slope1),slope2Ray:vr(e.slope2),slope3Ray:vr(e.slope3),midUtilizationRay:vr(e.mid_utilization),optimalUtilizationRay:vr(e.optimal_utilization),maxUtilizationRay:vr(e.max_utilization),reserveFactorBps:Sr(e.reserve_factor)}}),"market:batch_state_update":e=>({topic:"market:batch_state_update",data:{updates:Ir(e).map((e=>{return t=Ir(e),{hubId:Sr(t[0]),asset:kr(t[1]),timestamp:Sr(t[2]),supplyIndexRay:vr(t[3]),borrowIndexRay:vr(t[4]),cash:vr(t[5]),suppliedRay:vr(t[6]),borrowedRay:vr(t[7]),revenueRay:vr(t[8])};var t}))}}),"market:batch_params_update":e=>({topic:"market:batch_params_update",data:{updates:Ir(e).map((e=>{const t=e;return{hubId:Sr(t.hub_id),asset:kr(t.asset),params:(r=t.params,{maxBorrowRateRay:vr(r.max_borrow_rate),baseBorrowRateRay:vr(r.base_borrow_rate),slope1Ray:vr(r.slope1),slope2Ray:vr(r.slope2),slope3Ray:vr(r.slope3),midUtilizationRay:vr(r.mid_utilization),optimalUtilizationRay:vr(r.optimal_utilization),maxUtilizationRay:vr(r.max_utilization),reserveFactorBps:Sr(r.reserve_factor),isFlashloanable:Boolean(r.is_flashloanable),flashloanFeeBps:Sr(r.flashloan_fee),assetId:kr(r.asset_id),assetDecimals:Sr(r.asset_decimals)})};var r}))}}),"position:batch_update":e=>{const t=Ir(e);return{topic:"position:batch_update",data:{accountId:vr(t[0]),accountAttributes:Er(Ir(t[1])),updates:[...Ir(t[2]).map((e=>Ar(Ir(e),"Deposit"))),...Ir(t[3]).map((e=>Ar(Ir(e),"Borrow")))]}}},"position:flash_loan":e=>({topic:"position:flash_loan",data:{hubId:Sr(e.hub_id),asset:kr(e.asset),receiver:kr(e.receiver),caller:kr(e.caller),amount:vr(e.amount),fee:vr(e.fee)}}),"config:asset_oracle":e=>({topic:"config:asset_oracle",data:{key:Nr(e.key),oracle:$r(e.oracle)}}),"config:oracle":e=>({topic:"config:oracle",data:{asset:kr(e.asset),oracle:$r(e.config??e.oracle)}}),"position:liquidation":e=>({topic:"position:liquidation",data:{liquidator:kr(e.liquidator),accountId:vr(e.account_id),repaidUsdWad:vr(e.repaid_usd_wad),bonusBps:vr(e.bonus_bps)}}),"debt:bad_debt":e=>({topic:"debt:bad_debt",data:{accountId:vr(e.account_id),totalBorrowUsdWad:vr(e.total_borrow_usd_wad),totalCollateralUsdWad:vr(e.total_collateral_usd_wad)}}),"strategy:initial_payment":e=>({topic:"strategy:initial_payment",data:{token:kr(e.token),amount:vr(e.amount),usdValueWad:vr(e.usd_value_wad),accountId:vr(e.account_id)}}),"strategy:fee":e=>({topic:"strategy:fee",data:{hubId:Sr(e.hub_id),asset:kr(e.asset),amount:vr(e.amount),fee:vr(e.fee),amountSent:vr(e.amount_sent)}}),"config:approve_blend_pool":e=>({topic:"config:approve_blend_pool",data:{pool:kr(e.pool??e.blend_pool??e.token),approved:Boolean(e.approved??e.is_approved??!0)}}),"config:approve_token":e=>({topic:"config:approve_token",data:{wasmHash:Rr(e.wasm_hash??e.pool),approved:Boolean(e.approved)}}),"config:swap_aggregator":e=>({topic:"config:swap_aggregator",data:{aggregator:kr(e.aggregator??e.swap_aggregator)}}),"config:price_aggregator":e=>({topic:"config:price_aggregator",data:{aggregator:kr(e.aggregator??e.price_aggregator)}}),"config:aggregator":e=>({topic:"config:aggregator",data:{aggregator:kr(e.aggregator)}}),"config:accumulator":e=>({topic:"config:accumulator",data:{accumulator:kr(e.accumulator)}}),"config:pool_template":e=>({topic:"config:pool_template",data:{wasmHash:Rr(e.wasm_hash)}}),"config:position_limits":e=>({topic:"config:position_limits",data:{maxSupplyPositions:Sr(e.max_supply_positions),maxBorrowPositions:Sr(e.max_borrow_positions)}}),"config:min_borrow_collateral":e=>({topic:"config:min_borrow_collateral",data:{minBorrowCollateralUsdWad:vr(e.min_borrow_collateral_usd_wad??e.floor_wad??e.value)}}),"config:oracle_disabled":e=>({topic:"config:oracle_disabled",data:{asset:kr(e.asset)}}),"config:spoke":e=>{const t=e.spoke;return{topic:"config:spoke",data:{spokeId:Sr(t.spoke_id),isDeprecated:Boolean(t.is_deprecated),liquidationTargetHfWad:vr(t.liquidation_target_hf_wad),healthFactorForMaxBonusWad:vr(t.hf_for_max_bonus_wad),liquidationBonusFactorBps:Sr(t.liquidation_bonus_factor_bps)}}}},Pr=Object.freeze(Object.keys(Or));function Ur(e,t){const r=yr(e),o=Or[r];return o?o(s(wr(t))):null}const Lr="XLENDXLM-a7c9f3",qr=1e4;function Wr(e){const t=BigInt(e).toString(16),r=t.length%2==0?t:`0${t}`;return`${Lr}-${r}`}function zr(e){const t=e.split("-");return t.length>=2&&parseInt(t[1],10)||0}function Dr(e,t=0){return 1e4*e+t}function Vr(e){switch(e){case"liq_repay":return"lendingLiquidateRepayDebt";case"liq_seize":return"lendingLiquidateSeizeCollateral";case"param_upd":return"lendingUpdateAccountParameters";default:return"lendingUpdateAccountPosition"}}const Cr=(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()},Fr=e=>e.baseUrl??d[e.network];async function Mr(e,t){if(null==e.amountIn==(null==e.amountOut))throw new Error("getStellarAggregatorQuote: exactly one of `amountIn` or `amountOut` must be provided");const r=Cr(Fr(t),"api/v1/quote",{from:e.from,to:e.to,amountIn:e.amountIn,amountOut:e.amountOut,maxHops:e.maxHops,maxSplits:e.maxSplits,slippage:e.slippage,includePaths:e.includePaths,sender:e.sender,router:e.router,platform:e.platform,fresh:e.fresh}),o=await fetch(r,t.fetchOptions);if(!o.ok){const e=await o.text().catch((()=>""));throw new Error(`Stellar quote server responded ${o.status} ${o.statusText} for ${r} — ${e}`)}return await o.json()}async function Gr(e){const t=Cr(Fr(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 Xr=(e,t)=>(e=>Boolean(e&&"object"==typeof e&&!(e instanceof Uint8Array)&&"paths"in e))(e)&&void 0===e.referralId?{...e,referralId:t??0}:e,Hr=e=>O(e).toXDR("base64");function jr(t,a){const s=t.routerAddress??h(t.network),i=new o(s),l=new e(t.caller,t.sourceSequence),c=q(Xr(a,t.referralId));return{xdr:new n(l,{fee:t.fee??r,networkPassphrase:m[t.network]}).addOperation(i.call("execute_strategy",b(t.caller),w(t.totalIn),c)).setTimeout(t.timeoutSeconds??300).build().toXDR()}}function Jr(e,t){return jr(e,t)}function Qr(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(Yr),splitPpm:e.splitPpm}))):[{hops:e.hops.map(Yr),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}:Qr(e,t)}const Zr=Qr,Yr=e=>({amountOut:e.amountOut,pool:e.address,tokenIn:e.from,tokenOut:e.to,venue:e.dex});function eo(e,t){const r=t instanceof Error?t.message:String(t);return new Error(`[xoxno-invoked:${e}] ${r}`)}async function to(e,t,r){const o=n.fromXDR(t,"base64");try{return(await e.prepareTransaction(o)).toXDR()}catch(e){if(r?.invokedContractId)throw eo(r.invokedContractId,e);throw e}}async function ro(e,t,r){return to(e,t.xdr,r)}function oo(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 ao(e,t){return new Uint8Array(0)}const no=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 so(t){const r=new e(t.caller,t.sourceSequence),a=new o(t.forwarderAddress).call("mint_and_forward",i.ScVal.scvBytes(no(t.message)),i.ScVal.scvBytes(no(t.attestation)));return{xdr:new n(r,{fee:t.fee??"10000000",networkPassphrase:m[t.network]}).addOperation(a).setTimeout(t.timeoutSeconds??120).build().toXDR()}}const io={1:{name:"AssetNotSupported",message:"This asset is not supported by the protocol."},2:{name:"AssetAlreadySupported",message:"This asset is already supported."},3:{name:"InvalidTicker",message:"Invalid asset ticker."},6:{name:"InvalidAsset",message:"Invalid asset address."},10:{name:"InvalidWasmHash",message:"The WASM hash is empty or invalid."},11:{name:"InvalidExchangeSrc",message:"The oracle configuration is invalid."},12:{name:"PairNotActive",message:"No oracle is configured for this asset."},32:{name:"OwnerNotSet",message:"The contract owner has not been set."},39:{name:"InvalidTimelockDelay",message:"The timelock delay is out of the allowed range."},41:{name:"InvalidRole",message:"The caller does not hold the required role."},43:{name:"HubNotActive",message:"This hub is not active."},44:{name:"NotAuthorized",message:"The caller is not authorized to perform this action."},46:{name:"OperationNotCancellable",message:"This governance operation cannot be cancelled."},113:{name:"InvalidLiqThreshold",message:"LTV, liquidation threshold, or bonus is out of bounds."},116:{name:"InvalidBorrowParams",message:"Supply or borrow cap configuration is invalid."},117:{name:"InvalidUtilRange",message:"Interest-rate utilization breakpoints are invalid."},132:{name:"AssetDecimalsTooHigh",message:"Asset decimals exceed the protocol maximum (27)."},300:{name:"SpokeNotFound",message:"This spoke does not exist."},301:{name:"SpokeDeprecated",message:"This spoke has been deprecated."},307:{name:"AssetNotInSpoke",message:"This asset is not listed on the spoke."},308:{name:"AssetAlreadyInSpoke",message:"This asset is already listed in the spoke."},309:{name:"SpokeAssetInUse",message:"This spoke asset still has live positions; drain usage before removal."},315:{name:"SpokeAssetPaused",message:"This spoke asset is paused."},316:{name:"SpokeAssetFrozen",message:"This spoke asset is frozen."},317:{name:"SpokeAssetFlagRelaxation",message:"Guardian flag updates may only tighten; clearing a flag requires the timelocked edit."},220:{name:"InvalidOracleBase",message:"The oracle quote asset/market is missing or invalid."},221:{name:"InvalidOracleDecimals",message:"The oracle decimals value is invalid."},224:{name:"InvalidSanityBounds",message:"Oracle sanity bounds are invalid (require 0 < min < max)."},225:{name:"OracleCycleDetected",message:"A cycle was detected in the oracle quote chain."}};function lo(e){const t=e.match(/Error\(Contract,\s*#(\d+)\)/);if(!t)return null;const r=Number(t[1]),o=io[r];return o?{code:r,...o}:null}export{c as STELLAR_AGGREGATOR_ROUTER,u as STELLAR_GOVERNANCE,ft as STELLAR_GOVERNANCE_ZERO_PREDECESSOR,l as STELLAR_LENDING_CONTROLLER,Pr as STELLAR_LENDING_TOPICS,m as STELLAR_NETWORK_PASSPHRASE,d as STELLAR_QUOTE_URL,p as STELLAR_SOROBAN_RPC_URL,qr as SYNTHETIC_EVENT_ORDER_STRIDE,Lr as XOXNO_LENDING_STELLAR_TICKER,ao as buildSameTokenRepaySwapSteps,Xe as buildStellarAcceptOwnershipTx,dt as buildStellarAddRewardsTx,Ze as buildStellarApproveBlendPoolTx,et as buildStellarApproveTokenTx,Jr as buildStellarBatchSwapTx,C as buildStellarBorrowBatchTx,F as buildStellarBorrowTx,so as buildStellarCctpForwardTx,pt as buildStellarClaimRevenueTx,ct as buildStellarCreateLiquidityPoolTx,ur as buildStellarExecuteCancellerResetTx,jr as buildStellarExecuteStrategyTx,J as buildStellarFlashLoanTx,fr as buildStellarGovernanceAddSpokeImmediateTx,mr as buildStellarGovernanceCreateHubImmediateTx,or as buildStellarGovernanceExecuteGovernanceUpgradeTx,nr as buildStellarGovernanceExecuteGrantGovernanceRoleTx,sr as buildStellarGovernanceExecuteRevokeGovernanceRoleTx,ir as buildStellarGovernanceExecuteTransferGovOwnTx,rr as buildStellarGovernanceExecuteTx,ar as buildStellarGovernanceExecuteUpdateDelayTx,_r as buildStellarGovernancePauseTx,hr as buildStellarGovernanceRevokeRoleImmediateTx,dr as buildStellarGovernanceSetOracleSanityBoundsImmediateTx,pr as buildStellarGovernanceSetSpokeAssetFlagsImmediateTx,Fe as buildStellarGrantRoleTx,Wr as buildStellarLendingIdentifier,j as buildStellarLiquidateTx,Q as buildStellarMigrateFromBlendTx,De as buildStellarMigrateTx,K as buildStellarMultiplyTx,Ve as buildStellarPauseTx,Nt as buildStellarProposeAddAssetToSpokeTx,Et as buildStellarProposeAddSpokeTx,zt as buildStellarProposeApproveBlendPoolTx,qt as buildStellarProposeApproveTokenTx,cr as buildStellarProposeCancellerResetTx,jt as buildStellarProposeConfigureAssetOracleTx,Jt as buildStellarProposeConfigureMarketOracleTx,At as buildStellarProposeCreateHubTx,Vt as buildStellarProposeCreateLiquidityPoolTx,Ft as buildStellarProposeDeployPoolTx,$t as buildStellarProposeEditAssetInSpokeTx,Qt as buildStellarProposeEditOracleToleranceTx,Kt as buildStellarProposeGovernanceUpgradeTx,Yt as buildStellarProposeGrantGovernanceRoleTx,Xt as buildStellarProposeMigrateControllerTx,Ot as buildStellarProposeRemoveAssetFromSpokeTx,Bt as buildStellarProposeRemoveSpokeTx,Dt as buildStellarProposeRevokeBlendPoolTx,er as buildStellarProposeRevokeGovernanceRoleTx,Wt as buildStellarProposeRevokeTokenTx,xt as buildStellarProposeSetAccumulatorTx,Tt as buildStellarProposeSetAggregatorTx,Lt as buildStellarProposeSetMinBorrowCollatTx,It as buildStellarProposeSetPositionLimitsTx,Ut as buildStellarProposeSetPositionManagerTx,Rt as buildStellarProposeSetPriceAggregatorTx,Pt as buildStellarProposeSetSpokeLiquidationCurveTx,kt as buildStellarProposeSetSwapAggregatorTx,Ht as buildStellarProposeTransferCtrlOwnershipTx,tr as buildStellarProposeTransferGovOwnTx,gr as buildStellarProposeUnpauseTx,Zt as buildStellarProposeUpdateDelayTx,Gt as buildStellarProposeUpgradeControllerTx,Ct as buildStellarProposeUpgradePoolParamsTx,Mt as buildStellarProposeUpgradePoolTx,lt as buildStellarRenewAccountTx,X as buildStellarRepayBatchTx,ee as buildStellarRepayDebtWithCollateralTx,H as buildStellarRepayTx,Ye as buildStellarRevokeBlendPoolTx,Me as buildStellarRevokeRoleTx,tt as buildStellarRevokeTokenTx,Qe as buildStellarSetAccumulatorTx,Je as buildStellarSetAggregatorTx,ot as buildStellarSetMarketOracleConfigTx,st as buildStellarSetOracleSanityBoundsTx,at as buildStellarSetOracleToleranceTx,rt as buildStellarSetOracleTx,Ke as buildStellarSetPositionLimitsTx,je as buildStellarSetPriceAggregatorTx,nt as buildStellarSetSpokeAssetFlagsTx,He as buildStellarSetSwapAggregatorTx,D as buildStellarSupplyBatchTx,V as buildStellarSupplyTx,Y as buildStellarSwapCollateralTx,Z as buildStellarSwapDebtTx,Ge as buildStellarTransferOwnershipTx,Ce as buildStellarUnpauseTx,mt as buildStellarUpdateAccountThresholdTx,it as buildStellarUpdateIndexesTx,ze as buildStellarUpgradeControllerTx,ut as buildStellarUpgradeLiquidityPoolParamsTx,M as buildStellarWithdrawBatchTx,G as buildStellarWithdrawTx,z as buildTx,Ur as decodeStellarLendingEvent,qe as encodeAssetOracle,xe as encodeInterestRateModel,We as encodeMarketOracleConfigInput,Ie as encodeMarketParamsRaw,Ae as encodePositionLimits,Ee as encodePriceKey,Hr as encodeStrategyPayloadToRouteXdr,zr as extractEventOrder,we as getStellarAccountPositions,Mr as getStellarAggregatorQuote,h as getStellarAggregatorRouter,de as getStellarAsset,ve as getStellarAssetGraph,fe as getStellarAssetMarkets,me as getStellarAssetPage,se as getStellarAssets,_ as getStellarGovernance,ye as getStellarGovernanceProposals,he as getStellarHub,Se as getStellarHubGraph,ie as getStellarHubs,ae as getStellarLendingContext,f as getStellarLendingController,ne as getStellarLendingLiveState,Gr as getStellarQuoteTokens,ue as getStellarReserve,Re as getStellarReserveGraph,pe as getStellarReserveHolders,ce as getStellarReserves,_e as getStellarSpoke,ke as getStellarSpokeGraph,le as getStellarSpokes,be as getStellarUserActivity,ge as getStellarUserPositions,Zr as mapQuoteResponseToAggregatorSwap,Qr as mapQuoteResponseToStrategyPayload,Kr as mapQuoteResponseToStrategySwap,lo as mapSorobanError,Vr as mapStellarPositionActivityType,ro as prepareStellarBuiltTx,to as prepareStellarTxXdr,yr as stellarLendingDispatchKey,Te as stellarLendingRead,Dr as syntheticEventOrder,eo as tagStellarInvokedContractError,br as toBase64Xdr,oo as toStellarPositionMode};
|
|
@@ -10,48 +10,14 @@
|
|
|
10
10
|
* Numeric `*Wad`/`*Ray`/`*ScaledRay` fields cross the wire as decimal strings
|
|
11
11
|
* (1e18 / 1e27 fixed-point); `*Short` fields are already human-readable numbers.
|
|
12
12
|
*/
|
|
13
|
-
import type { StellarGovernanceProposalField, StellarGovernanceProposalKind, StellarGovernanceProposalStatus, StellarGovernanceProposalTarget, StellarInitialPaymentMultiplier } from '@xoxno/types/stellar-lending';
|
|
13
|
+
import type { StellarAssetOracle, StellarGovernanceProposalField, StellarGovernanceProposalKind, StellarGovernanceProposalStatus, StellarGovernanceProposalTarget, StellarInitialPaymentMultiplier } from '@xoxno/types/stellar-lending';
|
|
14
14
|
export type { StellarLendingContext, StellarAssetPage, StellarAssetPageGraphPoint, StellarAssetPageGraphSeries, StellarAssetPageMarket, } from '@xoxno/types/stellar-lending';
|
|
15
15
|
/** Side selector for an asset's markets table. */
|
|
16
16
|
export type StellarLendingMarketSide = 'deposit' | 'borrow';
|
|
17
17
|
/** Side selector for a reserve's top-holders list. */
|
|
18
18
|
export type StellarLendingHoldersSide = 'deposits' | 'borrows';
|
|
19
|
-
/**
|
|
20
|
-
export
|
|
21
|
-
baseTokenId: string;
|
|
22
|
-
quoteTokenSymbol: string;
|
|
23
|
-
toleranceUpperBps: number;
|
|
24
|
-
toleranceLowerBps: number;
|
|
25
|
-
pricingMethod: number;
|
|
26
|
-
oracleType: number;
|
|
27
|
-
strategy: number;
|
|
28
|
-
assetDecimals: number;
|
|
29
|
-
maxPriceStaleSeconds: number;
|
|
30
|
-
primaryProvider: number;
|
|
31
|
-
primaryContract: string;
|
|
32
|
-
primaryAsset: string | null;
|
|
33
|
-
primarySymbol: string | null;
|
|
34
|
-
primaryFeedId: string | null;
|
|
35
|
-
primaryQuoteToken: string | null;
|
|
36
|
-
primaryReadMode: number;
|
|
37
|
-
primaryTwapRecords: number;
|
|
38
|
-
primaryDecimals: number;
|
|
39
|
-
primaryResolutionSeconds: number;
|
|
40
|
-
primaryMaxStaleSeconds: number;
|
|
41
|
-
anchorProvider: number | null;
|
|
42
|
-
anchorContract: string | null;
|
|
43
|
-
anchorAsset: string | null;
|
|
44
|
-
anchorSymbol: string | null;
|
|
45
|
-
anchorFeedId: string | null;
|
|
46
|
-
anchorQuoteToken: string | null;
|
|
47
|
-
anchorReadMode: number;
|
|
48
|
-
anchorTwapRecords: number;
|
|
49
|
-
anchorDecimals: number;
|
|
50
|
-
anchorResolutionSeconds: number;
|
|
51
|
-
anchorMaxStaleSeconds: number;
|
|
52
|
-
minSanityPriceWad: string;
|
|
53
|
-
maxSanityPriceWad: string;
|
|
54
|
-
}
|
|
19
|
+
/** Composable AssetOracle persisted on an asset (from @xoxno/types). */
|
|
20
|
+
export type StellarAssetOracleConfig = StellarAssetOracle;
|
|
55
21
|
/** One (spoke, hub) market row for an asset's markets table. */
|
|
56
22
|
export interface StellarAssetMarket {
|
|
57
23
|
spokeId: number;
|