@t2000/sdk 0.19.1 → 0.19.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.d.cts CHANGED
@@ -1,5 +1,5 @@
1
- import { I as InvestmentTrade, S as StrategyDefinition, A as AutoInvestSchedule, a as AutoInvestStatus, T as T2000Options, P as PayOptions, b as PayResult, c as SendResult, B as BalanceResponse, d as TransactionRecord, D as DepositInfo, L as LendingAdapter, e as SwapAdapter, f as SaveResult, W as WithdrawResult, M as MaxWithdrawResult, g as BorrowResult, R as RepayResult, h as MaxBorrowResult, H as HealthFactorResult, i as SwapResult, j as InvestResult, k as InvestEarnResult, l as InvestRebalanceResult, m as PendingReward, C as ClaimRewardsResult, n as StrategyBuyResult, o as StrategySellResult, p as StrategyRebalanceResult, q as StrategyStatusResult, r as AutoInvestRunResult, s as PortfolioResult, t as InvestmentPosition, u as PositionsResult, v as RatesResult, w as LendingRates, x as RebalanceResult, E as EarningsResult, F as FundStatusResult, y as SentinelAgent, z as SentinelAttackResult, G as GasMethod } from './index-D-6pQwzx.cjs';
2
- export { J as AdapterCapability, K as AdapterPositions, N as AdapterTxResult, O as AssetRates, Q as CetusAdapter, U as GasReserve, V as HealthInfo, X as InvestRebalanceMove, Y as NaviAdapter, Z as PerpsAdapter, _ as PerpsPosition, $ as PositionEntry, a0 as PositionSide, a1 as ProtocolDescriptor, a2 as ProtocolRegistry, a3 as RebalanceStep, a4 as SentinelVerdict, a5 as SuilendAdapter, a6 as SwapQuote, a7 as TradePositionsResult, a8 as TradeResult, a9 as allDescriptors, aa as cetusDescriptor, ab as getSentinelInfo, ac as listSentinels, ad as naviDescriptor, ae as requestAttack, af as sentinelAttack, ag as sentinelDescriptor, ah as settleAttack, ai as submitPrompt, aj as suilendDescriptor } from './index-D-6pQwzx.cjs';
1
+ import { I as InvestmentTrade, S as StrategyDefinition, A as AutoInvestSchedule, a as AutoInvestStatus, T as T2000Options, P as PayOptions, b as PayResult, c as SendResult, B as BalanceResponse, d as TransactionRecord, D as DepositInfo, L as LendingAdapter, e as SwapAdapter, f as SaveResult, W as WithdrawResult, M as MaxWithdrawResult, g as BorrowResult, R as RepayResult, h as MaxBorrowResult, H as HealthFactorResult, i as SwapResult, j as InvestResult, k as InvestEarnResult, l as InvestRebalanceResult, m as PendingReward, C as ClaimRewardsResult, n as StrategyBuyResult, o as StrategySellResult, p as StrategyRebalanceResult, q as StrategyStatusResult, r as AutoInvestRunResult, s as PortfolioResult, t as InvestmentPosition, u as PositionsResult, v as RatesResult, w as LendingRates, x as RebalanceResult, E as EarningsResult, F as FundStatusResult, y as SentinelAgent, z as SentinelAttackResult, G as GasMethod } from './index-CcTPxTBs.cjs';
2
+ export { J as AdapterCapability, K as AdapterPositions, N as AdapterTxResult, O as AssetRates, Q as CetusAdapter, U as GasReserve, V as HealthInfo, X as InvestRebalanceMove, Y as NaviAdapter, Z as PerpsAdapter, _ as PerpsPosition, $ as PositionEntry, a0 as PositionSide, a1 as ProtocolDescriptor, a2 as ProtocolRegistry, a3 as RebalanceStep, a4 as SentinelVerdict, a5 as SuilendAdapter, a6 as SwapQuote, a7 as TradePositionsResult, a8 as TradeResult, a9 as allDescriptors, aa as cetusDescriptor, ab as getSentinelInfo, ac as listSentinels, ad as naviDescriptor, ae as requestAttack, af as sentinelAttack, ag as sentinelDescriptor, ah as settleAttack, ai as submitPrompt, aj as suilendDescriptor } from './index-CcTPxTBs.cjs';
3
3
  import { EventEmitter } from 'eventemitter3';
4
4
  import { SuiJsonRpcClient } from '@mysten/sui/jsonRpc';
5
5
  import { Ed25519Keypair } from '@mysten/sui/keypairs/ed25519';
@@ -192,7 +192,7 @@ interface TxMetadata {
192
192
  operation: 'send' | 'save' | 'withdraw' | 'borrow' | 'repay' | 'exchange' | 'rebalance' | 'pay' | 'sentinel' | 'invest' | 'trade';
193
193
  amount?: number;
194
194
  }
195
- declare const OUTBOUND_OPS: Set<"save" | "borrow" | "withdraw" | "repay" | "sentinel" | "send" | "exchange" | "rebalance" | "pay" | "invest" | "trade">;
195
+ declare const OUTBOUND_OPS: Set<"save" | "borrow" | "withdraw" | "send" | "repay" | "sentinel" | "exchange" | "rebalance" | "pay" | "invest" | "trade">;
196
196
  declare const DEFAULT_SAFEGUARD_CONFIG: SafeguardConfig;
197
197
 
198
198
  declare class SafeguardEnforcer {
package/dist/index.d.ts CHANGED
@@ -1,5 +1,5 @@
1
- import { I as InvestmentTrade, S as StrategyDefinition, A as AutoInvestSchedule, a as AutoInvestStatus, T as T2000Options, P as PayOptions, b as PayResult, c as SendResult, B as BalanceResponse, d as TransactionRecord, D as DepositInfo, L as LendingAdapter, e as SwapAdapter, f as SaveResult, W as WithdrawResult, M as MaxWithdrawResult, g as BorrowResult, R as RepayResult, h as MaxBorrowResult, H as HealthFactorResult, i as SwapResult, j as InvestResult, k as InvestEarnResult, l as InvestRebalanceResult, m as PendingReward, C as ClaimRewardsResult, n as StrategyBuyResult, o as StrategySellResult, p as StrategyRebalanceResult, q as StrategyStatusResult, r as AutoInvestRunResult, s as PortfolioResult, t as InvestmentPosition, u as PositionsResult, v as RatesResult, w as LendingRates, x as RebalanceResult, E as EarningsResult, F as FundStatusResult, y as SentinelAgent, z as SentinelAttackResult, G as GasMethod } from './index-D-6pQwzx.js';
2
- export { J as AdapterCapability, K as AdapterPositions, N as AdapterTxResult, O as AssetRates, Q as CetusAdapter, U as GasReserve, V as HealthInfo, X as InvestRebalanceMove, Y as NaviAdapter, Z as PerpsAdapter, _ as PerpsPosition, $ as PositionEntry, a0 as PositionSide, a1 as ProtocolDescriptor, a2 as ProtocolRegistry, a3 as RebalanceStep, a4 as SentinelVerdict, a5 as SuilendAdapter, a6 as SwapQuote, a7 as TradePositionsResult, a8 as TradeResult, a9 as allDescriptors, aa as cetusDescriptor, ab as getSentinelInfo, ac as listSentinels, ad as naviDescriptor, ae as requestAttack, af as sentinelAttack, ag as sentinelDescriptor, ah as settleAttack, ai as submitPrompt, aj as suilendDescriptor } from './index-D-6pQwzx.js';
1
+ import { I as InvestmentTrade, S as StrategyDefinition, A as AutoInvestSchedule, a as AutoInvestStatus, T as T2000Options, P as PayOptions, b as PayResult, c as SendResult, B as BalanceResponse, d as TransactionRecord, D as DepositInfo, L as LendingAdapter, e as SwapAdapter, f as SaveResult, W as WithdrawResult, M as MaxWithdrawResult, g as BorrowResult, R as RepayResult, h as MaxBorrowResult, H as HealthFactorResult, i as SwapResult, j as InvestResult, k as InvestEarnResult, l as InvestRebalanceResult, m as PendingReward, C as ClaimRewardsResult, n as StrategyBuyResult, o as StrategySellResult, p as StrategyRebalanceResult, q as StrategyStatusResult, r as AutoInvestRunResult, s as PortfolioResult, t as InvestmentPosition, u as PositionsResult, v as RatesResult, w as LendingRates, x as RebalanceResult, E as EarningsResult, F as FundStatusResult, y as SentinelAgent, z as SentinelAttackResult, G as GasMethod } from './index-CcTPxTBs.js';
2
+ export { J as AdapterCapability, K as AdapterPositions, N as AdapterTxResult, O as AssetRates, Q as CetusAdapter, U as GasReserve, V as HealthInfo, X as InvestRebalanceMove, Y as NaviAdapter, Z as PerpsAdapter, _ as PerpsPosition, $ as PositionEntry, a0 as PositionSide, a1 as ProtocolDescriptor, a2 as ProtocolRegistry, a3 as RebalanceStep, a4 as SentinelVerdict, a5 as SuilendAdapter, a6 as SwapQuote, a7 as TradePositionsResult, a8 as TradeResult, a9 as allDescriptors, aa as cetusDescriptor, ab as getSentinelInfo, ac as listSentinels, ad as naviDescriptor, ae as requestAttack, af as sentinelAttack, ag as sentinelDescriptor, ah as settleAttack, ai as submitPrompt, aj as suilendDescriptor } from './index-CcTPxTBs.js';
3
3
  import { EventEmitter } from 'eventemitter3';
4
4
  import { SuiJsonRpcClient } from '@mysten/sui/jsonRpc';
5
5
  import { Ed25519Keypair } from '@mysten/sui/keypairs/ed25519';
@@ -192,7 +192,7 @@ interface TxMetadata {
192
192
  operation: 'send' | 'save' | 'withdraw' | 'borrow' | 'repay' | 'exchange' | 'rebalance' | 'pay' | 'sentinel' | 'invest' | 'trade';
193
193
  amount?: number;
194
194
  }
195
- declare const OUTBOUND_OPS: Set<"save" | "borrow" | "withdraw" | "repay" | "sentinel" | "send" | "exchange" | "rebalance" | "pay" | "invest" | "trade">;
195
+ declare const OUTBOUND_OPS: Set<"save" | "borrow" | "withdraw" | "send" | "repay" | "sentinel" | "exchange" | "rebalance" | "pay" | "invest" | "trade">;
196
196
  declare const DEFAULT_SAFEGUARD_CONFIG: SafeguardConfig;
197
197
 
198
198
  declare class SafeguardEnforcer {
package/dist/index.js CHANGED
@@ -42713,33 +42713,88 @@ async function queryBalance(client, address) {
42713
42713
  }
42714
42714
 
42715
42715
  // src/wallet/history.ts
42716
+ var SUI_TYPE = "0x2::sui::SUI";
42717
+ var KNOWN_TARGETS = [
42718
+ [/::mpp_charge::/, "mpp payment"],
42719
+ [/::suilend|::obligation/, "lending"],
42720
+ [/::navi|::incentive_v2/, "lending"],
42721
+ [/::cetus|::pool/, "swap"],
42722
+ [/::deepbook/, "swap"],
42723
+ [/::transfer::public_transfer/, "send"],
42724
+ [/::coin::split/, "split"]
42725
+ ];
42716
42726
  async function queryHistory(client, address, limit = 20) {
42717
42727
  const txns = await client.queryTransactionBlocks({
42718
42728
  filter: { FromAddress: address },
42719
- options: { showEffects: true, showInput: true },
42729
+ options: { showEffects: true, showInput: true, showBalanceChanges: true },
42720
42730
  limit,
42721
42731
  order: "descending"
42722
42732
  });
42723
42733
  return txns.data.map((tx) => {
42724
42734
  const gasUsed = tx.effects?.gasUsed;
42725
42735
  const gasCost = gasUsed ? (Number(gasUsed.computationCost) + Number(gasUsed.storageCost) - Number(gasUsed.storageRebate)) / 1e9 : void 0;
42736
+ const targets = extractMoveCallTargets(tx.transaction);
42737
+ const action = classifyAction(targets);
42738
+ const { amount, asset, recipient } = extractTransferDetails(
42739
+ tx.balanceChanges,
42740
+ address
42741
+ );
42726
42742
  return {
42727
42743
  digest: tx.digest,
42728
- action: inferAction(tx.transaction),
42744
+ action,
42745
+ amount,
42746
+ asset,
42747
+ recipient,
42729
42748
  timestamp: Number(tx.timestampMs ?? 0),
42730
42749
  gasCost
42731
42750
  };
42732
42751
  });
42733
42752
  }
42734
- function inferAction(txBlock) {
42735
- if (!txBlock || typeof txBlock !== "object") return "unknown";
42736
- const data = "data" in txBlock ? txBlock.data : void 0;
42737
- if (!data || typeof data !== "object") return "unknown";
42738
- const inner = "transaction" in data ? data.transaction : void 0;
42739
- if (!inner || typeof inner !== "object") return "unknown";
42740
- const kind = "kind" in inner ? inner.kind : void 0;
42741
- if (kind === "ProgrammableTransaction") return "transaction";
42742
- return kind ?? "unknown";
42753
+ function extractTransferDetails(changes, sender) {
42754
+ if (!changes || changes.length === 0) return {};
42755
+ const outflows = changes.filter((c) => {
42756
+ const owner = typeof c.owner === "object" && c.owner.AddressOwner ? c.owner.AddressOwner : typeof c.owner === "string" ? c.owner : null;
42757
+ return owner === sender && BigInt(c.amount) < 0n;
42758
+ });
42759
+ const inflows = changes.filter((c) => {
42760
+ const owner = typeof c.owner === "object" && c.owner.AddressOwner ? c.owner.AddressOwner : typeof c.owner === "string" ? c.owner : null;
42761
+ return owner !== sender && BigInt(c.amount) > 0n;
42762
+ });
42763
+ const primaryOutflow = outflows.filter((c) => c.coinType !== SUI_TYPE).sort((a, b2) => Number(BigInt(a.amount) - BigInt(b2.amount)))[0] ?? outflows[0];
42764
+ if (!primaryOutflow) return {};
42765
+ const coinType = primaryOutflow.coinType;
42766
+ const decimals = coinType.includes("::usdc::") ? 6 : 9;
42767
+ const amount = Math.abs(Number(BigInt(primaryOutflow.amount))) / 10 ** decimals;
42768
+ const asset = coinType === SUI_TYPE ? "SUI" : coinType.includes("::usdc::") ? "USDC" : coinType.split("::").pop() ?? "unknown";
42769
+ const recipientChange = inflows.find((c) => c.coinType === coinType);
42770
+ const recipient = recipientChange ? typeof recipientChange.owner === "object" && recipientChange.owner.AddressOwner ? recipientChange.owner.AddressOwner : void 0 : void 0;
42771
+ return { amount, asset, recipient };
42772
+ }
42773
+ function extractMoveCallTargets(txBlock) {
42774
+ try {
42775
+ if (!txBlock || typeof txBlock !== "object") return [];
42776
+ const data = "data" in txBlock ? txBlock.data : void 0;
42777
+ if (!data || typeof data !== "object") return [];
42778
+ const inner = "transaction" in data ? data.transaction : void 0;
42779
+ if (!inner || typeof inner !== "object") return [];
42780
+ const commands = "commands" in inner ? inner.commands : void 0;
42781
+ if (!Array.isArray(commands)) return [];
42782
+ return commands.filter((c) => c.MoveCall).map((c) => {
42783
+ const mc = c.MoveCall;
42784
+ return `${mc.package}::${mc.module}::${mc.function}`;
42785
+ });
42786
+ } catch {
42787
+ return [];
42788
+ }
42789
+ }
42790
+ function classifyAction(targets) {
42791
+ if (targets.length === 0) return "transaction";
42792
+ for (const target of targets) {
42793
+ for (const [pattern, label] of KNOWN_TARGETS) {
42794
+ if (pattern.test(target)) return label;
42795
+ }
42796
+ }
42797
+ return "transaction";
42743
42798
  }
42744
42799
 
42745
42800
  // src/protocols/protocolFee.ts
@@ -57115,9 +57170,18 @@ var T2000 = class _T2000 extends EventEmitter {
57115
57170
  this.enforcer.check({ operation: "pay", amount: options.maxPrice ?? 1 });
57116
57171
  const { Mppx } = await import('mppx/client');
57117
57172
  const { sui } = await import('@t2000/mpp-sui/client');
57173
+ const client = this.client;
57174
+ const keypair = this.keypair;
57118
57175
  const mppx = Mppx.create({
57119
57176
  polyfill: false,
57120
- methods: [sui({ client: this.client, signer: this.keypair })]
57177
+ methods: [sui({
57178
+ client,
57179
+ signer: keypair,
57180
+ execute: async (tx) => {
57181
+ const result = await executeWithGas(client, keypair, () => tx);
57182
+ return { digest: result.digest, effects: result.effects };
57183
+ }
57184
+ })]
57121
57185
  });
57122
57186
  const method = (options.method ?? "GET").toUpperCase();
57123
57187
  const canHaveBody = method !== "GET" && method !== "HEAD";
@@ -58185,7 +58249,7 @@ To sell investment: t2000 invest sell ${params.amount} ${fromAsset}`,
58185
58249
  await new Promise((r) => setTimeout(r, 1500));
58186
58250
  }
58187
58251
  const maxSellable = Math.max(0, walletAmount - gasReserve);
58188
- const trackedAmount = pos && pos.totalAmount > 0 ? pos.totalAmount : maxSellable;
58252
+ const trackedAmount = pos ? pos.totalAmount : maxSellable;
58189
58253
  if (trackedAmount <= 0) {
58190
58254
  throw new T2000Error("INSUFFICIENT_INVESTMENT", `No ${params.asset} position to sell`);
58191
58255
  }