@haven-fi/solauto-sdk 1.0.660 → 1.0.662

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.
Files changed (35) hide show
  1. package/dist/services/rebalance/rebalanceTxBuilder.d.ts +0 -1
  2. package/dist/services/rebalance/rebalanceTxBuilder.d.ts.map +1 -1
  3. package/dist/services/rebalance/rebalanceTxBuilder.js +2 -7
  4. package/dist/services/solauto/solautoClient.d.ts +0 -2
  5. package/dist/services/solauto/solautoClient.d.ts.map +1 -1
  6. package/dist/services/solauto/solautoClient.js +5 -8
  7. package/dist/services/solauto/solautoMarginfiClient.js +6 -6
  8. package/dist/services/transactions/transactionUtils.js +1 -1
  9. package/dist/solautoPosition/marginfiSolautoPositionEx.d.ts.map +1 -1
  10. package/dist/solautoPosition/marginfiSolautoPositionEx.js +1 -4
  11. package/dist/solautoPosition/positionUtils.d.ts +1 -1
  12. package/dist/solautoPosition/positionUtils.d.ts.map +1 -1
  13. package/dist/solautoPosition/positionUtils.js +17 -16
  14. package/dist/solautoPosition/solautoPositionEx.d.ts +17 -7
  15. package/dist/solautoPosition/solautoPositionEx.d.ts.map +1 -1
  16. package/dist/solautoPosition/solautoPositionEx.js +62 -49
  17. package/dist/utils/instructionUtils.js +1 -1
  18. package/dist/utils/marginfiUtils.d.ts.map +1 -1
  19. package/dist/utils/marginfiUtils.js +8 -5
  20. package/dist/utils/numberUtils.d.ts +2 -0
  21. package/dist/utils/numberUtils.d.ts.map +1 -1
  22. package/dist/utils/numberUtils.js +7 -0
  23. package/local/logPositions.ts +0 -2
  24. package/local/txSandbox.ts +3 -0
  25. package/package.json +1 -1
  26. package/src/services/rebalance/rebalanceTxBuilder.ts +7 -20
  27. package/src/services/solauto/solautoClient.ts +7 -17
  28. package/src/services/solauto/solautoMarginfiClient.ts +6 -6
  29. package/src/services/transactions/transactionUtils.ts +1 -1
  30. package/src/solautoPosition/marginfiSolautoPositionEx.ts +1 -5
  31. package/src/solautoPosition/positionUtils.ts +31 -26
  32. package/src/solautoPosition/solautoPositionEx.ts +124 -72
  33. package/src/utils/instructionUtils.ts +1 -1
  34. package/src/utils/marginfiUtils.ts +20 -13
  35. package/src/utils/numberUtils.ts +13 -1
@@ -15,7 +15,6 @@ export declare class RebalanceTxBuilder {
15
15
  private flashLoanRequirements;
16
16
  private getFlashLoanDetails;
17
17
  private setRebalanceType;
18
- private realtimeUsdToEmaUsd;
19
18
  private getInitialRebalanceValues;
20
19
  private setRebalanceDetails;
21
20
  private refreshBeforeRebalance;
@@ -1 +1 @@
1
- {"version":3,"file":"rebalanceTxBuilder.d.ts","sourceRoot":"","sources":["../../../src/services/rebalance/rebalanceTxBuilder.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAC3C,OAAO,EAGL,qBAAqB,EACtB,MAAM,aAAa,CAAC;AA0BrB,qBAAa,kBAAkB;IAQ3B,OAAO,CAAC,MAAM;IACd,OAAO,CAAC,2BAA2B,CAAC;IARtC,OAAO,CAAC,MAAM,CAAmB;IACjC,OAAO,CAAC,aAAa,CAAwB;IAC7C,OAAO,CAAC,WAAW,CAAwB;IAC3C,OAAO,CAAC,cAAc,CAAC,CAAwB;IAC/C,OAAO,CAAC,SAAS,CAAiC;gBAGxC,MAAM,EAAE,aAAa,EACrB,2BAA2B,CAAC,EAAE,MAAM,YAAA;IAG9C,OAAO,CAAC,0BAA0B;IAQlC,OAAO,CAAC,kBAAkB;IAc1B,OAAO,CAAC,oBAAoB;YAyCd,qBAAqB;IAwCnC,OAAO,CAAC,mBAAmB;IAwB3B,OAAO,CAAC,gBAAgB;IA+BxB,OAAO,CAAC,mBAAmB;IAO3B,OAAO,CAAC,yBAAyB;YA4BnB,mBAAmB;YAwBnB,sBAAsB;YAyBtB,mBAAmB;IAmEpB,gBAAgB,CAC3B,UAAU,EAAE,MAAM,GACjB,OAAO,CAAC,qBAAqB,GAAG,SAAS,CAAC;CAe9C"}
1
+ {"version":3,"file":"rebalanceTxBuilder.d.ts","sourceRoot":"","sources":["../../../src/services/rebalance/rebalanceTxBuilder.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAC3C,OAAO,EAGL,qBAAqB,EACtB,MAAM,aAAa,CAAC;AA2BrB,qBAAa,kBAAkB;IAQ3B,OAAO,CAAC,MAAM;IACd,OAAO,CAAC,2BAA2B,CAAC;IARtC,OAAO,CAAC,MAAM,CAAmB;IACjC,OAAO,CAAC,aAAa,CAAwB;IAC7C,OAAO,CAAC,WAAW,CAAwB;IAC3C,OAAO,CAAC,cAAc,CAAC,CAAwB;IAC/C,OAAO,CAAC,SAAS,CAAiC;gBAGxC,MAAM,EAAE,aAAa,EACrB,2BAA2B,CAAC,EAAE,MAAM,YAAA;IAG9C,OAAO,CAAC,0BAA0B;IAQlC,OAAO,CAAC,kBAAkB;IAc1B,OAAO,CAAC,oBAAoB;YAyCd,qBAAqB;IAwCnC,OAAO,CAAC,mBAAmB;IAwB3B,OAAO,CAAC,gBAAgB;IA+BxB,OAAO,CAAC,yBAAyB;YAqBnB,mBAAmB;YAwBnB,sBAAsB;YAyBtB,mBAAmB;IAmEpB,gBAAgB,CAC3B,UAAU,EAAE,MAAM,GACjB,OAAO,CAAC,qBAAqB,GAAG,SAAS,CAAC;CAe9C"}
@@ -114,17 +114,12 @@ class RebalanceTxBuilder {
114
114
  this.rebalanceType = generated_1.SolautoRebalanceType.Regular;
115
115
  }
116
116
  }
117
- realtimeUsdToEmaUsd(realtimeAmountUsd, mint) {
118
- return ((realtimeAmountUsd / (0, utils_1.safeGetPrice)(mint, generated_1.PriceType.Realtime)) *
119
- (0, utils_1.safeGetPrice)(mint, generated_1.PriceType.Ema));
120
- }
121
117
  getInitialRebalanceValues() {
122
118
  let rebalanceValues = this.getRebalanceValues();
123
119
  if (!rebalanceValues) {
124
120
  return undefined;
125
121
  }
126
- const postRebalanceEmaUtilRateBps = (0, utils_1.getLiqUtilzationRateBps)(this.realtimeUsdToEmaUsd(rebalanceValues.endResult.supplyUsd, this.client.pos.supplyMint), this.realtimeUsdToEmaUsd(rebalanceValues.endResult.debtUsd, this.client.pos.debtMint), this.client.pos.state.liqThresholdBps);
127
- if (postRebalanceEmaUtilRateBps > this.client.pos.maxBoostToBps) {
122
+ if (!this.client.pos.rebalanceHelper.validRealtimePricesBoost(rebalanceValues.debtAdjustmentUsd)) {
128
123
  this.priceType = generated_1.PriceType.Ema;
129
124
  rebalanceValues = this.getRebalanceValues();
130
125
  if (!rebalanceValues) {
@@ -149,7 +144,7 @@ class RebalanceTxBuilder {
149
144
  return true;
150
145
  }
151
146
  async refreshBeforeRebalance() {
152
- if (this.client.selfManaged ||
147
+ if (this.client.pos.selfManaged ||
153
148
  this.client.contextUpdates.supplyAdjustment > BigInt(0) ||
154
149
  this.client.contextUpdates.debtAdjustment > BigInt(0) ||
155
150
  !this.client.pos.exists) {
@@ -18,8 +18,6 @@ export declare abstract class SolautoClient extends ReferralStateManager {
18
18
  lendingPlatform: LendingPlatform;
19
19
  lpEnv: ProgramEnv;
20
20
  authority: PublicKey;
21
- positionId: number;
22
- selfManaged: boolean;
23
21
  pos: SolautoPositionEx;
24
22
  positionSupplyTa: PublicKey;
25
23
  signerSupplyTa: PublicKey;
@@ -1 +1 @@
1
- {"version":3,"file":"solautoClient.d.ts","sourceRoot":"","sources":["../../../src/services/solauto/solautoClient.ts"],"names":[],"mappings":"AAAA,OAAO,gCAAgC,CAAC;AACxC,OAAO,EAA6B,SAAS,EAAE,MAAM,iBAAiB,CAAC;AACvE,OAAO,EACL,kBAAkB,EAMnB,MAAM,0BAA0B,CAAC;AAElC,OAAO,EACL,kBAAkB,EAClB,eAAe,EACf,SAAS,EACT,aAAa,EACb,iBAAiB,EACjB,gCAAgC,EAEhC,sBAAsB,EAGvB,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAML,cAAc,EACf,MAAM,aAAa,CAAC;AAErB,OAAO,EAAE,UAAU,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAC3D,OAAO,EACL,oBAAoB,EACpB,wBAAwB,EACzB,MAAM,wBAAwB,CAAC;AAChC,OAAO,EAEL,iBAAiB,EAClB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAAE,oBAAoB,EAAE,MAAM,eAAe,CAAC;AAErD,MAAM,WAAW,iBAAkB,SAAQ,wBAAwB;IACjE,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,UAAU,CAAC,EAAE,SAAS,CAAC;IACvB,QAAQ,CAAC,EAAE,SAAS,CAAC;IACrB,WAAW,CAAC,EAAE,SAAS,CAAC;IACxB,aAAa,CAAC,EAAE,SAAS,CAAC;CAC3B;AAED,8BAAsB,aAAc,SAAQ,oBAAoB;IACvD,eAAe,EAAG,eAAe,CAAC;IAClC,KAAK,EAAG,UAAU,CAAC;IAEnB,SAAS,EAAG,SAAS,CAAC;IAEtB,UAAU,EAAG,MAAM,CAAC;IACpB,WAAW,EAAG,OAAO,CAAC;IACtB,GAAG,EAAG,iBAAiB,CAAC;IAExB,gBAAgB,EAAG,SAAS,CAAC;IAC7B,cAAc,EAAG,SAAS,CAAC;IAE3B,cAAc,EAAG,SAAS,CAAC;IAC3B,YAAY,EAAG,SAAS,CAAC;IAEzB,mBAAmB,EAAG,SAAS,CAAC;IAChC,iBAAiB,EAAG,SAAS,CAAC;IAE9B,mBAAmB,CAAC,EAAE,SAAS,CAAC;IAEhC,UAAU,EAAG,oBAAoB,CAAC;IAClC,cAAc,EAAE,cAAc,CAAwB;IAE7D,OAAO,CAAC,mBAAmB,CAAqB;IAChD,OAAO,CAAC,iBAAiB,CAAqB;IAExC,UAAU,CAAC,IAAI,EAAE,iBAAiB;IAuFxC,kBAAkB,IAAI,SAAS,GAAG,SAAS;IAO3C,gBAAgB,IAAI,SAAS,GAAG,SAAS;IAOnC,kBAAkB,CAAC,OAAO,CAAC,EAAE,OAAO;IAkB1C,mBAAmB,IAAI,MAAM,EAAE;IAS/B,gBAAgB,IAAI,SAAS,EAAE;IAezB,iCAAiC,IAAI,OAAO,CAAC,SAAS,EAAE,CAAC;IAUzD,iBAAiB,IAAI,OAAO,CAC9B;QACE,EAAE,EAAE,kBAAkB,CAAC;QACvB,GAAG,EAAE,OAAO,CAAC;QACb,aAAa,EAAE,SAAS,EAAE,CAAC;KAC5B,GACD,SAAS,CACZ;IAgEK,cAAc,IAAI,OAAO,CAAC;QAC9B,aAAa,EAAE,MAAM,CAAC;QACtB,WAAW,EAAE,MAAM,CAAC;KACrB,CAAC;IAgBF,cAAc,CACZ,QAAQ,CAAC,EAAE,gCAAgC,EAC3C,GAAG,CAAC,EAAE,kBAAkB,GACvB,kBAAkB;IA0BrB,gBAAgB,CAAC,IAAI,EAAE,sBAAsB,GAAG,kBAAkB;IAsDlE,QAAQ,CAAC,eAAe,IAAI,kBAAkB;IAE9C,WAAW,IAAI,kBAAkB;IAgCjC,QAAQ,CAAC,SAAS,CAAC,SAAS,EAAE,SAAS,GAAG,kBAAkB;IAE5D,qBAAqB,CAAC,IAAI,EAAE,iBAAiB,GAAG,kBAAkB;IAqFlE,QAAQ,CAAC,WAAW,CAClB,aAAa,EAAE,aAAa,EAC5B,IAAI,EAAE,gBAAgB,GACrB,kBAAkB;CACtB"}
1
+ {"version":3,"file":"solautoClient.d.ts","sourceRoot":"","sources":["../../../src/services/solauto/solautoClient.ts"],"names":[],"mappings":"AAAA,OAAO,gCAAgC,CAAC;AACxC,OAAO,EAA6B,SAAS,EAAE,MAAM,iBAAiB,CAAC;AACvE,OAAO,EACL,kBAAkB,EAMnB,MAAM,0BAA0B,CAAC;AAElC,OAAO,EACL,kBAAkB,EAClB,eAAe,EACf,SAAS,EACT,aAAa,EACb,iBAAiB,EACjB,gCAAgC,EAEhC,sBAAsB,EAGvB,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAML,cAAc,EACf,MAAM,aAAa,CAAC;AAErB,OAAO,EAAE,UAAU,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAC3D,OAAO,EACL,oBAAoB,EACpB,wBAAwB,EACzB,MAAM,wBAAwB,CAAC;AAChC,OAAO,EAEL,iBAAiB,EAClB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAAE,oBAAoB,EAAE,MAAM,eAAe,CAAC;AAErD,MAAM,WAAW,iBAAkB,SAAQ,wBAAwB;IACjE,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,UAAU,CAAC,EAAE,SAAS,CAAC;IACvB,QAAQ,CAAC,EAAE,SAAS,CAAC;IACrB,WAAW,CAAC,EAAE,SAAS,CAAC;IACxB,aAAa,CAAC,EAAE,SAAS,CAAC;CAC3B;AAED,8BAAsB,aAAc,SAAQ,oBAAoB;IACvD,eAAe,EAAG,eAAe,CAAC;IAClC,KAAK,EAAG,UAAU,CAAC;IAEnB,SAAS,EAAG,SAAS,CAAC;IAEtB,GAAG,EAAG,iBAAiB,CAAC;IAExB,gBAAgB,EAAG,SAAS,CAAC;IAC7B,cAAc,EAAG,SAAS,CAAC;IAE3B,cAAc,EAAG,SAAS,CAAC;IAC3B,YAAY,EAAG,SAAS,CAAC;IAEzB,mBAAmB,EAAG,SAAS,CAAC;IAChC,iBAAiB,EAAG,SAAS,CAAC;IAE9B,mBAAmB,CAAC,EAAE,SAAS,CAAC;IAEhC,UAAU,EAAG,oBAAoB,CAAC;IAClC,cAAc,EAAE,cAAc,CAAwB;IAE7D,OAAO,CAAC,mBAAmB,CAAqB;IAChD,OAAO,CAAC,iBAAiB,CAAqB;IAExC,UAAU,CAAC,IAAI,EAAE,iBAAiB;IA+ExC,kBAAkB,IAAI,SAAS,GAAG,SAAS;IAO3C,gBAAgB,IAAI,SAAS,GAAG,SAAS;IAOnC,kBAAkB,CAAC,OAAO,CAAC,EAAE,OAAO;IAkB1C,mBAAmB,IAAI,MAAM,EAAE;IAS/B,gBAAgB,IAAI,SAAS,EAAE;IAezB,iCAAiC,IAAI,OAAO,CAAC,SAAS,EAAE,CAAC;IAUzD,iBAAiB,IAAI,OAAO,CAC9B;QACE,EAAE,EAAE,kBAAkB,CAAC;QACvB,GAAG,EAAE,OAAO,CAAC;QACb,aAAa,EAAE,SAAS,EAAE,CAAC;KAC5B,GACD,SAAS,CACZ;IAgEK,cAAc,IAAI,OAAO,CAAC;QAC9B,aAAa,EAAE,MAAM,CAAC;QACtB,WAAW,EAAE,MAAM,CAAC;KACrB,CAAC;IAgBF,cAAc,CACZ,QAAQ,CAAC,EAAE,gCAAgC,EAC3C,GAAG,CAAC,EAAE,kBAAkB,GACvB,kBAAkB;IA0BrB,gBAAgB,CAAC,IAAI,EAAE,sBAAsB,GAAG,kBAAkB;IAsDlE,QAAQ,CAAC,eAAe,IAAI,kBAAkB;IAE9C,WAAW,IAAI,kBAAkB;IAgCjC,QAAQ,CAAC,SAAS,CAAC,SAAS,EAAE,SAAS,GAAG,kBAAkB;IAE5D,qBAAqB,CAAC,IAAI,EAAE,iBAAiB,GAAG,kBAAkB;IAqFlE,QAAQ,CAAC,WAAW,CAClB,aAAa,EAAE,aAAa,EAC5B,IAAI,EAAE,gBAAgB,GACrB,kBAAkB;CACtB"}
@@ -18,14 +18,11 @@ class SolautoClient extends referralStateManager_1.ReferralStateManager {
18
18
  }
19
19
  async initialize(args) {
20
20
  await super.initialize(args);
21
- this.positionId = args.positionId ?? 0;
22
- this.selfManaged = this.positionId === 0;
23
- if (this.selfManaged &&
24
- (!args.supplyMint || !args.debtMint || !args.lpUserAccount)) {
21
+ const positionId = args.positionId ?? 0;
22
+ if (positionId === 0 && !args.lpUserAccount) {
25
23
  throw new Error("Self managed position is missing arguments");
26
24
  }
27
- const positionPk = (0, utils_1.getSolautoPositionAccount)(this.authority, this.positionId, this.programId);
28
- this.pos = await (0, solautoPosition_1.getOrCreatePositionEx)(this.umi, positionPk, {
25
+ this.pos = await (0, solautoPosition_1.getOrCreatePositionEx)(this.umi, this.authority, positionId, this.programId, {
29
26
  supplyMint: args.supplyMint,
30
27
  debtMint: args.debtMint,
31
28
  lendingPool: args.lendingPool,
@@ -33,7 +30,7 @@ class SolautoClient extends referralStateManager_1.ReferralStateManager {
33
30
  lendingPlatform: this.lendingPlatform,
34
31
  lpEnv: this.lpEnv,
35
32
  }, this.contextUpdates);
36
- if (this.pos.selfManaged && (!args.supplyMint || !args.debtMint)) {
33
+ if (this.pos.selfManaged) {
37
34
  await this.pos.refreshPositionState();
38
35
  }
39
36
  this.positionSupplyTa = (0, utils_1.getTokenAccount)(this.pos.publicKey, this.pos.supplyMint);
@@ -274,7 +271,7 @@ class SolautoClient extends referralStateManager_1.ReferralStateManager {
274
271
  }
275
272
  protocolInteractionIx(args) {
276
273
  let tx = (0, umi_1.transactionBuilder)();
277
- if (!this.selfManaged) {
274
+ if (!this.pos.selfManaged) {
278
275
  if (args.__kind === "Deposit") {
279
276
  tx = tx.add((0, utils_1.splTokenTransferUmiIx)(this.signer, this.signerSupplyTa, this.positionSupplyTa, (0, umi_web3js_adapters_1.toWeb3JsPublicKey)(this.signer.publicKey), BigInt(args.fields[0])));
280
277
  }
@@ -18,7 +18,7 @@ class SolautoMarginfiClient extends solautoClient_1.SolautoClient {
18
18
  await super.initialize(args);
19
19
  this.mfiAccounts = (0, constants_1.getMarginfiAccounts)(this.lpEnv);
20
20
  this.marginfiGroup = await this.pos.lendingPool();
21
- if (this.selfManaged) {
21
+ if (this.pos.selfManaged) {
22
22
  this.marginfiAccount =
23
23
  args.lpUserAccount ??
24
24
  (0, umi_1.createSignerFromKeypair)(this.umi, this.umi.eddsa.generateKeypair());
@@ -106,7 +106,7 @@ class SolautoMarginfiClient extends solautoClient_1.SolautoClient {
106
106
  signerDebtTa: signerDebtTa,
107
107
  positionType: positionType ?? generated_1.PositionType.Leverage,
108
108
  positionData: {
109
- positionId: this.positionId,
109
+ positionId: this.pos.positionId,
110
110
  settings: settings ?? null,
111
111
  dca: dca ?? null,
112
112
  },
@@ -139,7 +139,7 @@ class SolautoMarginfiClient extends solautoClient_1.SolautoClient {
139
139
  }
140
140
  protocolInteractionIx(args) {
141
141
  let tx = super.protocolInteractionIx(args);
142
- if (this.selfManaged) {
142
+ if (this.pos.selfManaged) {
143
143
  return tx.add(this.marginfiProtocolInteractionIx(args));
144
144
  }
145
145
  else {
@@ -203,7 +203,7 @@ class SolautoMarginfiClient extends solautoClient_1.SolautoClient {
203
203
  let vaultSupplyTa = undefined;
204
204
  let supplyVaultAuthority = undefined;
205
205
  if (args.__kind === "Deposit" || args.__kind === "Withdraw") {
206
- positionSupplyTa = (0, umi_1.publicKey)(args.__kind === "Withdraw" || this.selfManaged
206
+ positionSupplyTa = (0, umi_1.publicKey)(args.__kind === "Withdraw" || this.pos.selfManaged
207
207
  ? this.signerSupplyTa
208
208
  : this.positionSupplyTa);
209
209
  vaultSupplyTa = (0, umi_1.publicKey)(this.marginfiSupplyAccounts.liquidityVault);
@@ -213,7 +213,7 @@ class SolautoMarginfiClient extends solautoClient_1.SolautoClient {
213
213
  let vaultDebtTa = undefined;
214
214
  let debtVaultAuthority = undefined;
215
215
  if (args.__kind === "Borrow" || args.__kind === "Repay") {
216
- positionDebtTa = (0, umi_1.publicKey)(args.__kind === "Borrow" || this.selfManaged
216
+ positionDebtTa = (0, umi_1.publicKey)(args.__kind === "Borrow" || this.pos.selfManaged
217
217
  ? this.signerDebtTa
218
218
  : this.positionDebtTa);
219
219
  vaultDebtTa = (0, umi_1.publicKey)(this.marginfiDebtAccounts.liquidityVault);
@@ -250,7 +250,7 @@ class SolautoMarginfiClient extends solautoClient_1.SolautoClient {
250
250
  const isFirstRebalance = (preSwapRebalance && (0, utils_1.hasFirstRebalance)(data.rebalanceType)) ||
251
251
  (postSwapRebalance &&
252
252
  data.rebalanceType === generated_1.SolautoRebalanceType.FLSwapThenRebalance);
253
- const addAuthorityTas = this.selfManaged || data.values.tokenBalanceChange !== undefined;
253
+ const addAuthorityTas = this.pos.selfManaged || data.values.tokenBalanceChange !== undefined;
254
254
  return (0, generated_1.marginfiRebalance)(this.umi, {
255
255
  signer: this.signer,
256
256
  marginfiProgram: (0, umi_1.publicKey)(this.mfiAccounts.program),
@@ -52,7 +52,7 @@ async function transactionChoresBefore(client, accountsGettingCreated, solautoAc
52
52
  (0, umi_web3js_adapters_1.toWeb3JsPublicKey)(client.referralStateData.lookupTable).equals(web3_js_1.PublicKey.default))) {
53
53
  chores = chores.add(client.updateReferralStatesIx(undefined, client.authorityLutAddress));
54
54
  }
55
- if (client.selfManaged) {
55
+ if (client.pos.selfManaged) {
56
56
  if ((0, utils_1.isMarginfiClient)(client) &&
57
57
  !(await (0, utils_1.getSolanaAccountCreated)(client.umi, client.marginfiAccountPk))) {
58
58
  chores = chores.add(client.marginfiAccountInitialize(client.marginfiAccount));
@@ -1 +1 @@
1
- {"version":3,"file":"marginfiSolautoPositionEx.d.ts","sourceRoot":"","sources":["../../src/solautoPosition/marginfiSolautoPositionEx.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAC5C,OAAO,EACL,IAAI,EAIL,MAAM,iBAAiB,CAAC;AAYzB,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AACxD,OAAO,EAAE,eAAe,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAE1D,qBAAa,yBAA0B,SAAQ,iBAAiB;IAC9D,eAAe,kBAA4B;IAE3C,OAAO,CAAC,mBAAmB,CAAgC;IAC3D,OAAO,CAAC,UAAU,CAAqB;IACvC,OAAO,CAAC,QAAQ,CAAqB;IAExB,WAAW,IAAI,OAAO,CAAC,SAAS,CAAC;IAyBxC,QAAQ,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;IAgB3B,YAAY,IAAI,OAAO,CAAC,SAAS,EAAE,CAAC;IASpC,wBAAwB,IAAI,OAAO,CAAC,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAa3D,IAAI,wBAAwB,IAAI,MAAM,CAKrC;IAEK,oBAAoB,CAAC,SAAS,CAAC,EAAE,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC;CAuBjE"}
1
+ {"version":3,"file":"marginfiSolautoPositionEx.d.ts","sourceRoot":"","sources":["../../src/solautoPosition/marginfiSolautoPositionEx.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAC5C,OAAO,EACL,IAAI,EAIL,MAAM,iBAAiB,CAAC;AAYzB,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AACxD,OAAO,EAAE,eAAe,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAE1D,qBAAa,yBAA0B,SAAQ,iBAAiB;IAC9D,eAAe,kBAA4B;IAE3C,OAAO,CAAC,mBAAmB,CAAgC;IAC3D,OAAO,CAAC,UAAU,CAAqB;IACvC,OAAO,CAAC,QAAQ,CAAqB;IAExB,WAAW,IAAI,OAAO,CAAC,SAAS,CAAC;IAyBxC,QAAQ,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;IAgB3B,YAAY,IAAI,OAAO,CAAC,SAAS,EAAE,CAAC;IASpC,wBAAwB,IAAI,OAAO,CAAC,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAa3D,IAAI,wBAAwB,IAAI,MAAM,CAKrC;IAEK,oBAAoB,CAAC,SAAS,CAAC,EAAE,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC;CAmBjE"}
@@ -62,10 +62,7 @@ class MarginfiSolautoPositionEx extends solautoPositionEx_1.SolautoPositionEx {
62
62
  return (0, utils_1.fromBaseUnit)((0, utils_1.getBankLiquidityAvailableBaseUnit)(this.supplyBank, false), this.supplyMintInfo.decimals);
63
63
  }
64
64
  async refreshPositionState(priceType) {
65
- if (!this.canRefreshPositionState()) {
66
- return;
67
- }
68
- const useDesignatedMint = !this._data.position || !this._data.selfManaged;
65
+ const useDesignatedMint = !this._data.position || !this.selfManaged;
69
66
  const resp = await (0, utils_1.getMarginfiAccountPositionState)(this.umi, { pk: this.lpUserAccount }, await this.lendingPool(), useDesignatedMint ? { mint: this.supplyMint } : undefined, useDesignatedMint ? { mint: this.debtMint } : undefined, this.lpEnv, this.contextUpdates, priceType);
70
67
  if (resp) {
71
68
  this.supplyBank = resp.supplyBank;
@@ -5,7 +5,7 @@ import { ContextUpdates } from "../utils";
5
5
  import { PositionCustomArgs, SolautoPositionEx } from "./solautoPositionEx";
6
6
  export declare function createSolautoSettings(settings: SolautoSettingsParametersInpArgs): SolautoSettingsParameters;
7
7
  export declare function getPositionExBulk(umi: Umi, publicKeys: PublicKey[]): Promise<SolautoPositionEx[]>;
8
- export declare function getOrCreatePositionEx(umi: Umi, publicKey: PublicKey, customArgs?: PositionCustomArgs, contextUpdates?: ContextUpdates): Promise<SolautoPositionEx>;
8
+ export declare function getOrCreatePositionEx(umi: Umi, authority: PublicKey, positionId: number, programId: PublicKey, customArgs?: PositionCustomArgs, contextUpdates?: ContextUpdates): Promise<SolautoPositionEx>;
9
9
  interface AssetProps {
10
10
  mint: PublicKey;
11
11
  price?: number;
@@ -1 +1 @@
1
- {"version":3,"file":"positionUtils.d.ts","sourceRoot":"","sources":["../../src/solautoPosition/positionUtils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAC5C,OAAO,EAAE,GAAG,EAAE,MAAM,0BAA0B,CAAC;AAK/C,OAAO,EAEL,aAAa,EAGb,yBAAyB,EACzB,gCAAgC,EACjC,MAAM,cAAc,CAAC;AACtB,OAAO,EACL,cAAc,EAQf,MAAM,UAAU,CAAC;AAClB,OAAO,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAI5E,wBAAgB,qBAAqB,CACnC,QAAQ,EAAE,gCAAgC,GACzC,yBAAyB,CAQ3B;AAED,wBAAsB,iBAAiB,CACrC,GAAG,EAAE,GAAG,EACR,UAAU,EAAE,SAAS,EAAE,GACtB,OAAO,CAAC,iBAAiB,EAAE,CAAC,CA4B9B;AAED,wBAAsB,qBAAqB,CACzC,GAAG,EAAE,GAAG,EACR,SAAS,EAAE,SAAS,EACpB,UAAU,CAAC,EAAE,kBAAkB,EAC/B,cAAc,CAAC,EAAE,cAAc,GAC9B,OAAO,CAAC,iBAAiB,CAAC,CAsC5B;AAED,UAAU,UAAU;IAClB,IAAI,EAAE,SAAS,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B;AAED,wBAAgB,uBAAuB,CACrC,MAAM,EAAE,UAAU,EAClB,IAAI,EAAE,UAAU,EAChB,SAAS,EAAE,MAAM,EACjB,eAAe,EAAE,MAAM,GACtB,aAAa,CAgEf"}
1
+ {"version":3,"file":"positionUtils.d.ts","sourceRoot":"","sources":["../../src/solautoPosition/positionUtils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAC5C,OAAO,EAAE,GAAG,EAAE,MAAM,0BAA0B,CAAC;AAK/C,OAAO,EAEL,aAAa,EAGb,yBAAyB,EACzB,gCAAgC,EACjC,MAAM,cAAc,CAAC;AACtB,OAAO,EACL,cAAc,EASf,MAAM,UAAU,CAAC;AAClB,OAAO,EACL,kBAAkB,EAElB,iBAAiB,EAClB,MAAM,qBAAqB,CAAC;AAI7B,wBAAgB,qBAAqB,CACnC,QAAQ,EAAE,gCAAgC,GACzC,yBAAyB,CAQ3B;AAED,wBAAsB,iBAAiB,CACrC,GAAG,EAAE,GAAG,EACR,UAAU,EAAE,SAAS,EAAE,GACtB,OAAO,CAAC,iBAAiB,EAAE,CAAC,CA4B9B;AAED,wBAAsB,qBAAqB,CACzC,GAAG,EAAE,GAAG,EACR,SAAS,EAAE,SAAS,EACpB,UAAU,EAAE,MAAM,EAClB,SAAS,EAAE,SAAS,EACpB,UAAU,CAAC,EAAE,kBAAkB,EAC/B,cAAc,CAAC,EAAE,cAAc,GAC9B,OAAO,CAAC,iBAAiB,CAAC,CAoC5B;AAED,UAAU,UAAU;IAClB,IAAI,EAAE,SAAS,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B;AAED,wBAAgB,uBAAuB,CACrC,MAAM,EAAE,UAAU,EAClB,IAAI,EAAE,UAAU,EAChB,SAAS,EAAE,MAAM,EACjB,eAAe,EAAE,MAAM,GACtB,aAAa,CAgEf"}
@@ -35,28 +35,29 @@ async function getPositionExBulk(umi, publicKeys) {
35
35
  }
36
36
  });
37
37
  }
38
- async function getOrCreatePositionEx(umi, publicKey, customArgs, contextUpdates) {
38
+ async function getOrCreatePositionEx(umi, authority, positionId, programId, customArgs, contextUpdates) {
39
+ const publicKey = (0, utils_1.getSolautoPositionAccount)(authority, positionId, programId);
39
40
  const data = await (0, generated_1.safeFetchSolautoPosition)(umi, (0, umi_web3js_adapters_1.fromWeb3JsPublicKey)(publicKey));
40
- if (!data && (!customArgs?.supplyMint || !customArgs.debtMint)) {
41
- throw new Error("Must provide a supply & debt mint if creating a new position");
42
- }
43
- const placeholderState = createFakePositionState({
44
- mint: customArgs?.supplyMint ?? web3_js_1.PublicKey.default,
45
- }, { mint: customArgs?.debtMint ?? web3_js_1.PublicKey.default }, 0, 0);
46
41
  const lendingPlatform = data
47
42
  ? data.position.lendingPlatform
48
43
  : customArgs.lendingPlatform;
44
+ const args = {
45
+ umi,
46
+ publicKey,
47
+ authority,
48
+ positionId,
49
+ programId,
50
+ data: data ?? {
51
+ state: createFakePositionState({
52
+ mint: customArgs?.supplyMint ?? web3_js_1.PublicKey.default,
53
+ }, { mint: customArgs?.debtMint ?? web3_js_1.PublicKey.default }, 0, 0),
54
+ },
55
+ customArgs,
56
+ contextUpdates,
57
+ };
49
58
  switch (lendingPlatform) {
50
59
  case generated_1.LendingPlatform.Marginfi:
51
- return new marginfiSolautoPositionEx_1.MarginfiSolautoPositionEx({
52
- umi,
53
- publicKey,
54
- data: data ?? {
55
- state: placeholderState,
56
- },
57
- customArgs,
58
- contextUpdates,
59
- });
60
+ return new marginfiSolautoPositionEx_1.MarginfiSolautoPositionEx(args);
60
61
  // TODO: PF
61
62
  }
62
63
  }
@@ -15,9 +15,12 @@ export interface PositionCustomArgs {
15
15
  interface SolautoPositionExData extends Partial<SolautoPosition> {
16
16
  state: PositionState;
17
17
  }
18
- interface PositionExArgs {
18
+ export interface PositionExArgs {
19
19
  umi: Umi;
20
- publicKey: PublicKey;
20
+ publicKey?: PublicKey;
21
+ programId?: PublicKey;
22
+ authority?: PublicKey;
23
+ positionId?: number;
21
24
  data: SolautoPositionExData;
22
25
  customArgs?: PositionCustomArgs;
23
26
  contextUpdates?: ContextUpdates;
@@ -27,18 +30,19 @@ export declare abstract class SolautoPositionEx {
27
30
  protected contextUpdates?: ContextUpdates;
28
31
  publicKey: PublicKey;
29
32
  lendingPlatform: LendingPlatform;
33
+ positionId: number;
34
+ authority: PublicKey;
30
35
  protected _data: SolautoPositionExData;
31
36
  protected lp?: PublicKey;
32
- protected lpEnv: ProgramEnv;
33
37
  lpUserAccount?: PublicKey;
38
+ protected lpEnv: ProgramEnv;
34
39
  private readonly firstState;
35
40
  protected _supplyPrice?: number;
36
41
  protected _debtPrice?: number;
42
+ rebalanceHelper: PositionRebalanceHelper;
37
43
  constructor(args: PositionExArgs);
38
44
  abstract lendingPool(): Promise<PublicKey>;
39
45
  get exists(): boolean;
40
- get authority(): PublicKey;
41
- get positionId(): number | undefined;
42
46
  get selfManaged(): boolean;
43
47
  get positionType(): import("../generated").PositionType | undefined;
44
48
  get strategyName(): string;
@@ -77,10 +81,8 @@ export declare abstract class SolautoPositionEx {
77
81
  abstract maxLtvAndLiqThresholdBps(): Promise<[number, number]>;
78
82
  abstract priceOracles(): Promise<PublicKey[]>;
79
83
  get memecoinPosition(): boolean | undefined;
80
- private sufficientLiquidityToBoost;
81
84
  eligibleForRebalance(bpsDistanceThreshold?: number): RebalanceAction | undefined;
82
85
  eligibleForRefresh(): boolean;
83
- protected canRefreshPositionState(): boolean;
84
86
  abstract refreshPositionState(priceType?: PriceType): Promise<void>;
85
87
  utilizationRateBpsDrift(priceType?: PriceType): Promise<number>;
86
88
  updateSupply(newSupplyUsd: number, supplyPrice?: number): void;
@@ -92,5 +94,13 @@ export declare abstract class SolautoPositionEx {
92
94
  simulateRebalance(unixTime: number, supplyPrice: number, debtPrice: number, targetLiqUtilizationRateBps?: number): undefined;
93
95
  refetchPositionData(): Promise<void>;
94
96
  }
97
+ declare class PositionRebalanceHelper {
98
+ private pos;
99
+ constructor(pos: SolautoPositionEx);
100
+ private sufficientLiquidityToBoost;
101
+ validRealtimePricesBoost(debtAdjustmentUsd: number): boolean;
102
+ private validBoostFromHere;
103
+ eligibleForRebalance(bpsDistanceThreshold: number): RebalanceAction | undefined;
104
+ }
95
105
  export {};
96
106
  //# sourceMappingURL=solautoPositionEx.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"solautoPositionEx.d.ts","sourceRoot":"","sources":["../../src/solautoPosition/solautoPositionEx.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"solautoPositionEx.d.ts","sourceRoot":"","sources":["../../src/solautoPosition/solautoPositionEx.ts"],"names":[],"mappings":"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"}
@@ -1,19 +1,21 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.SolautoPositionEx = void 0;
4
- const web3_js_1 = require("@solana/web3.js");
5
4
  const umi_web3js_adapters_1 = require("@metaplex-foundation/umi-web3js-adapters");
6
5
  const generated_1 = require("../generated");
7
6
  const utils_1 = require("../utils");
8
7
  const rebalance_1 = require("../services/rebalance");
9
- const constants_1 = require("../constants");
10
8
  class SolautoPositionEx {
11
9
  constructor(args) {
12
10
  this.lp = undefined;
13
11
  this.lpUserAccount = undefined;
14
12
  this.umi = args.umi;
15
- this.publicKey = args.publicKey;
16
13
  this.contextUpdates = args.contextUpdates;
14
+ this.publicKey =
15
+ args.publicKey ??
16
+ (0, utils_1.getSolautoPositionAccount)(args.authority, args.positionId, args.programId);
17
+ this.positionId = args.positionId ?? args.data.positionId[0];
18
+ this.authority = args.authority ?? (0, umi_web3js_adapters_1.toWeb3JsPublicKey)(args.data.authority);
17
19
  this.lp = args.customArgs?.lendingPool;
18
20
  this.lpUserAccount =
19
21
  args.customArgs?.lpUserAccount ??
@@ -23,18 +25,11 @@ class SolautoPositionEx {
23
25
  this.lpEnv = args.customArgs?.lpEnv ?? "Prod";
24
26
  this._data = args.data;
25
27
  this.firstState = { ...args.data.state };
28
+ this.rebalanceHelper = new PositionRebalanceHelper(this);
26
29
  }
27
30
  get exists() {
28
31
  return this._data.position !== undefined;
29
32
  }
30
- get authority() {
31
- return this._data.authority
32
- ? (0, umi_web3js_adapters_1.toWeb3JsPublicKey)(this._data.authority)
33
- : web3_js_1.PublicKey.default;
34
- }
35
- get positionId() {
36
- return this._data.positionId ? this._data.positionId[0] : undefined;
37
- }
38
33
  get selfManaged() {
39
34
  return this.positionId === 0;
40
35
  }
@@ -146,50 +141,14 @@ class SolautoPositionEx {
146
141
  get memecoinPosition() {
147
142
  return (0, utils_1.tokenInfo)(this.supplyMint).isMeme || (0, utils_1.tokenInfo)(this.debtMint).isMeme;
148
143
  }
149
- sufficientLiquidityToBoost() {
150
- const limitsUpToDate = this.debtLiquidityUsdAvailable !== 0 ||
151
- this.supplyLiquidityUsdDepositable !== 0;
152
- if (limitsUpToDate) {
153
- const { debtAdjustmentUsd } = (0, rebalance_1.getDebtAdjustment)(this.state.liqThresholdBps, { supplyUsd: this.supplyUsd(), debtUsd: this.debtUsd() }, this.boostToBps, { solauto: 50, lpBorrow: 50, flashLoan: 50 } // TODO: get true data here instead of magic numbers
154
- );
155
- const sufficientLiquidity = this.debtLiquidityUsdAvailable * 0.95 > debtAdjustmentUsd &&
156
- this.supplyLiquidityUsdDepositable * 0.95 > debtAdjustmentUsd;
157
- if (!sufficientLiquidity) {
158
- (0, utils_1.consoleLog)("Insufficient liquidity to further boost");
159
- }
160
- return sufficientLiquidity;
161
- }
162
- return true;
163
- }
164
144
  eligibleForRebalance(bpsDistanceThreshold = 0) {
165
- if (!this.settings || !this.supplyUsd()) {
166
- return undefined;
167
- }
168
- const realtimeLiqUtilRateBps = this.liqUtilizationRateBps(generated_1.PriceType.Realtime);
169
- const emaLiqUtilRateBps = this.liqUtilizationRateBps(generated_1.PriceType.Ema);
170
- if (this.repayFromBps - realtimeLiqUtilRateBps <= bpsDistanceThreshold) {
171
- return "repay";
172
- }
173
- else if (realtimeLiqUtilRateBps - this.boostFromBps <= bpsDistanceThreshold ||
174
- emaLiqUtilRateBps - this.boostFromBps <= bpsDistanceThreshold) {
175
- const sufficientLiquidity = this.sufficientLiquidityToBoost();
176
- return sufficientLiquidity ? "boost" : undefined;
177
- }
178
- return undefined;
145
+ return this.rebalanceHelper.eligibleForRebalance(bpsDistanceThreshold);
179
146
  }
180
147
  eligibleForRefresh() {
181
- if (this._data.selfManaged)
148
+ if (this.selfManaged)
182
149
  return false;
183
150
  return ((0, utils_1.currentUnixSeconds)() - Number(this.state.lastRefreshed) > 60 * 60 * 24 * 7);
184
151
  }
185
- canRefreshPositionState() {
186
- if (Number(this.state.lastRefreshed) >
187
- (0, utils_1.currentUnixSeconds)() - constants_1.MIN_POSITION_STATE_FRESHNESS_SECS &&
188
- !this.contextUpdates?.positionUpdates()) {
189
- return false;
190
- }
191
- return true;
192
- }
193
152
  async utilizationRateBpsDrift(priceType) {
194
153
  const supplyPrice = this.supplyPrice(priceType) ?? 0;
195
154
  const debtPrice = this.debtPrice(priceType) ?? 0;
@@ -238,3 +197,57 @@ class SolautoPositionEx {
238
197
  }
239
198
  }
240
199
  exports.SolautoPositionEx = SolautoPositionEx;
200
+ class PositionRebalanceHelper {
201
+ constructor(pos) {
202
+ this.pos = pos;
203
+ }
204
+ sufficientLiquidityToBoost() {
205
+ const limitsUpToDate = this.pos.debtLiquidityUsdAvailable !== 0 ||
206
+ this.pos.supplyLiquidityUsdDepositable !== 0;
207
+ if (limitsUpToDate) {
208
+ const { debtAdjustmentUsd } = (0, rebalance_1.getDebtAdjustment)(this.pos.state.liqThresholdBps, { supplyUsd: this.pos.supplyUsd(), debtUsd: this.pos.debtUsd() }, this.pos.boostToBps, { solauto: 50, lpBorrow: 50, flashLoan: 50 } // Overshoot fees
209
+ );
210
+ const sufficientLiquidity = this.pos.debtLiquidityUsdAvailable * 0.95 > debtAdjustmentUsd &&
211
+ this.pos.supplyLiquidityUsdDepositable * 0.95 > debtAdjustmentUsd;
212
+ if (!sufficientLiquidity) {
213
+ (0, utils_1.consoleLog)("Insufficient liquidity to further boost");
214
+ }
215
+ return sufficientLiquidity;
216
+ }
217
+ return true;
218
+ }
219
+ validRealtimePricesBoost(debtAdjustmentUsd) {
220
+ if (this.pos.lendingPlatform !== generated_1.LendingPlatform.Marginfi) {
221
+ // TODO: LP
222
+ return true;
223
+ }
224
+ const postRebalanceLiqUtilRate = (0, utils_1.getLiqUtilzationRateBps)((0, utils_1.realtimeUsdToEmaUsd)(this.pos.supplyUsd() + debtAdjustmentUsd, this.pos.supplyMint), (0, utils_1.realtimeUsdToEmaUsd)(this.pos.debtUsd() + debtAdjustmentUsd, this.pos.debtMint), this.pos.state.liqThresholdBps);
225
+ return postRebalanceLiqUtilRate <= this.pos.maxBoostToBps;
226
+ }
227
+ validBoostFromHere() {
228
+ const { debtAdjustmentUsd } = (0, rebalance_1.getDebtAdjustment)(this.pos.state.liqThresholdBps, {
229
+ supplyUsd: this.pos.supplyUsd(generated_1.PriceType.Realtime),
230
+ debtUsd: this.pos.debtUsd(generated_1.PriceType.Realtime),
231
+ }, this.pos.boostToBps, { solauto: 25, lpBorrow: 0, flashLoan: 0 } // Undershoot fees
232
+ );
233
+ return this.validRealtimePricesBoost(debtAdjustmentUsd);
234
+ }
235
+ eligibleForRebalance(bpsDistanceThreshold) {
236
+ if (!this.pos.settings || !this.pos.supplyUsd()) {
237
+ return undefined;
238
+ }
239
+ const realtimeLiqUtilRateBps = this.pos.liqUtilizationRateBps(generated_1.PriceType.Realtime);
240
+ const emaLiqUtilRateBps = this.pos.liqUtilizationRateBps(generated_1.PriceType.Ema);
241
+ if (this.pos.repayFromBps - realtimeLiqUtilRateBps <=
242
+ bpsDistanceThreshold) {
243
+ return "repay";
244
+ }
245
+ else if ((realtimeLiqUtilRateBps - this.pos.boostFromBps <= bpsDistanceThreshold ||
246
+ emaLiqUtilRateBps - this.pos.boostFromBps <= bpsDistanceThreshold) &&
247
+ this.validBoostFromHere()) {
248
+ const sufficientLiquidity = this.sufficientLiquidityToBoost();
249
+ return sufficientLiquidity ? "boost" : undefined;
250
+ }
251
+ return undefined;
252
+ }
253
+ }
@@ -26,7 +26,7 @@ function closeSolautoPosition(client) {
26
26
  function updateSolautoPosition(client, settings, dca) {
27
27
  return new services_1.TransactionItem(async () => ({
28
28
  tx: client.updatePositionIx({
29
- positionId: client.positionId,
29
+ positionId: client.pos.positionId,
30
30
  settings,
31
31
  dca,
32
32
  }),
@@ -1 +1 @@
1
- {"version":3,"file":"marginfiUtils.d.ts","sourceRoot":"","sources":["../../src/utils/marginfiUtils.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"marginfiUtils.d.ts","sourceRoot":"","sources":["../../src/utils/marginfiUtils.ts"],"names":[],"mappings":"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"}
@@ -283,10 +283,13 @@ async function getTokenUsage(bank, isAsset, shares, amountUsedAdjustment, priceT
283
283
  };
284
284
  }
285
285
  async function getBank(umi, data, marginfiGroup) {
286
- return data?.banksCache && data.mint && marginfiGroup
287
- ? data.banksCache[marginfiGroup.toString()][data?.mint?.toString()]
288
- : data?.mint && data?.mint !== web3_js_1.PublicKey.default
289
- ? await (0, marginfi_sdk_1.safeFetchBank)(umi, (0, umi_1.publicKey)((0, constants_1.getMarginfiAccounts)(undefined, marginfiGroup).bankAccounts[marginfiGroup?.toString() ?? ""][data?.mint.toString()].bank), { commitment: "confirmed" })
286
+ const mint = data?.mint && !data.mint.equals(web3_js_1.PublicKey.default)
287
+ ? data.mint.toString()
288
+ : undefined;
289
+ return data?.banksCache && mint
290
+ ? data.banksCache[marginfiGroup.toString()][mint]
291
+ : mint && mint !== web3_js_1.PublicKey.default.toString()
292
+ ? await (0, marginfi_sdk_1.safeFetchBank)(umi, (0, umi_1.publicKey)((0, constants_1.getMarginfiAccounts)(undefined, marginfiGroup).bankAccounts[marginfiGroup.toString()][mint].bank), { commitment: "confirmed" })
290
293
  : null;
291
294
  }
292
295
  async function getMarginfiAccountPositionState(umi, lpUserAccount, marginfiGroup, supply, debt, programEnv, contextUpdates, priceType) {
@@ -363,7 +366,7 @@ async function getMarginfiAccountPositionState(umi, lpUserAccount, marginfiGroup
363
366
  if (!debtUsage) {
364
367
  debtUsage = await getTokenUsage(debtBank, false, 0, contextUpdates?.debtAdjustment);
365
368
  }
366
- const supplyPrice = (0, priceUtils_1.safeGetPrice)(supply.mint);
369
+ const supplyPrice = (0, priceUtils_1.safeGetPrice)((0, umi_web3js_adapters_1.toWeb3JsPublicKey)(supplyBank.mint));
367
370
  let [maxLtvBps, liqThresholdBps] = await getMarginfiMaxLtvAndLiqThresholdBps(umi, marginfiGroup ?? (0, constants_1.getMarginfiAccounts)(programEnv).defaultGroup, {
368
371
  mint: (0, umi_web3js_adapters_1.toWeb3JsPublicKey)(supplyBank.mint),
369
372
  bank: supplyBank,
@@ -1,3 +1,4 @@
1
+ import { PublicKey } from "@solana/web3.js";
1
2
  import { PositionState } from "../generated";
2
3
  import { RoundAction } from "../types";
3
4
  export declare function calcNetWorthUsd(state?: PositionState): number;
@@ -23,4 +24,5 @@ export declare function getMaxLiqUtilizationRateBps(maxLtvBps: number, liqThresh
23
24
  export declare function maxRepayFromBps(maxLtvBps: number, liqThresholdBps: number): number;
24
25
  export declare function maxRepayToBps(maxLtvBps: number, liqThresholdBps: number): number;
25
26
  export declare function maxBoostToBps(maxLtvBps: number, liqThresholdBps: number): number;
27
+ export declare function realtimeUsdToEmaUsd(realtimeAmountUsd: number, mint: PublicKey): number;
26
28
  //# sourceMappingURL=numberUtils.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"numberUtils.d.ts","sourceRoot":"","sources":["../../src/utils/numberUtils.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAC7C,OAAO,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AAEvC,wBAAgB,eAAe,CAAC,KAAK,CAAC,EAAE,aAAa,UAEpD;AAED,wBAAgB,aAAa,CAAC,KAAK,CAAC,EAAE,aAAa,UAIlD;AAED,wBAAgB,WAAW,CAAC,KAAK,CAAC,EAAE,aAAa,UAIhD;AAED,wBAAgB,YAAY,CAAC,KAAK,CAAC,EAAE,aAAa,UAKjD;AAED,wBAAgB,eAAe,CAAC,KAAK,CAAC,EAAE,aAAa,UAKpD;AAED,wBAAgB,aAAa,CAAC,KAAK,CAAC,EAAE,aAAa,UAKlD;AAED,wBAAgB,sBAAsB,CAAC,KAAK,CAAC,EAAE,aAAa,UAK3D;AAED,wBAAgB,yBAAyB,CAAC,KAAK,CAAC,EAAE,aAAa,UAI9D;AAED,wBAAgB,0BAA0B,CAAC,KAAK,CAAC,EAAE,aAAa,UAK/D;AAED,wBAAgB,6BAA6B,CAAC,KAAK,CAAC,EAAE,aAAa,UAIlE;AAED,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,MAAM,UAEjD;AAED,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,MAAM,UAE/C;AAED,wBAAgB,uBAAuB,CACrC,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,MAAM,EACf,eAAe,EAAE,MAAM,GACtB,MAAM,CAMR;AAED,wBAAgB,UAAU,CACxB,KAAK,EAAE,MAAM,EACb,QAAQ,EAAE,MAAM,EAChB,WAAW,GAAE,WAAqB,GACjC,MAAM,CAKR;AAED,wBAAgB,YAAY,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,CAKpE;AAED,wBAAgB,OAAO,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAE7C;AAED,wBAAgB,KAAK,CACnB,KAAK,EAAE,MAAM,EACb,WAAW,GAAE,WAAqB,GACjC,MAAM,CAGR;AAUD,wBAAgB,aAAa,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,MAAM,CAqBrD;AAED,wBAAgB,kBAAkB,CAAC,UAAU,EAAE,UAAU,GAAG,MAAM,CAejE;AAED,wBAAgB,2BAA2B,CACzC,SAAS,EAAE,MAAM,EACjB,eAAe,EAAE,MAAM,EACvB,gBAAgB,EAAE,MAAM,GACvB,MAAM,CAKR;AAED,wBAAgB,eAAe,CAAC,SAAS,EAAE,MAAM,EAAE,eAAe,EAAE,MAAM,UASzE;AAED,wBAAgB,aAAa,CAAC,SAAS,EAAE,MAAM,EAAE,eAAe,EAAE,MAAM,UAKvE;AAED,wBAAgB,aAAa,CAAC,SAAS,EAAE,MAAM,EAAE,eAAe,EAAE,MAAM,UAKvE"}
1
+ {"version":3,"file":"numberUtils.d.ts","sourceRoot":"","sources":["../../src/utils/numberUtils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAO5C,OAAO,EAAE,aAAa,EAAa,MAAM,cAAc,CAAC;AACxD,OAAO,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AAGvC,wBAAgB,eAAe,CAAC,KAAK,CAAC,EAAE,aAAa,UAEpD;AAED,wBAAgB,aAAa,CAAC,KAAK,CAAC,EAAE,aAAa,UAIlD;AAED,wBAAgB,WAAW,CAAC,KAAK,CAAC,EAAE,aAAa,UAIhD;AAED,wBAAgB,YAAY,CAAC,KAAK,CAAC,EAAE,aAAa,UAKjD;AAED,wBAAgB,eAAe,CAAC,KAAK,CAAC,EAAE,aAAa,UAKpD;AAED,wBAAgB,aAAa,CAAC,KAAK,CAAC,EAAE,aAAa,UAKlD;AAED,wBAAgB,sBAAsB,CAAC,KAAK,CAAC,EAAE,aAAa,UAK3D;AAED,wBAAgB,yBAAyB,CAAC,KAAK,CAAC,EAAE,aAAa,UAI9D;AAED,wBAAgB,0BAA0B,CAAC,KAAK,CAAC,EAAE,aAAa,UAK/D;AAED,wBAAgB,6BAA6B,CAAC,KAAK,CAAC,EAAE,aAAa,UAIlE;AAED,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,MAAM,UAEjD;AAED,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,MAAM,UAE/C;AAED,wBAAgB,uBAAuB,CACrC,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,MAAM,EACf,eAAe,EAAE,MAAM,GACtB,MAAM,CAMR;AAED,wBAAgB,UAAU,CACxB,KAAK,EAAE,MAAM,EACb,QAAQ,EAAE,MAAM,EAChB,WAAW,GAAE,WAAqB,GACjC,MAAM,CAKR;AAED,wBAAgB,YAAY,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,CAKpE;AAED,wBAAgB,OAAO,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAE7C;AAED,wBAAgB,KAAK,CACnB,KAAK,EAAE,MAAM,EACb,WAAW,GAAE,WAAqB,GACjC,MAAM,CAGR;AAUD,wBAAgB,aAAa,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,MAAM,CAqBrD;AAED,wBAAgB,kBAAkB,CAAC,UAAU,EAAE,UAAU,GAAG,MAAM,CAejE;AAED,wBAAgB,2BAA2B,CACzC,SAAS,EAAE,MAAM,EACjB,eAAe,EAAE,MAAM,EACvB,gBAAgB,EAAE,MAAM,GACvB,MAAM,CAKR;AAED,wBAAgB,eAAe,CAAC,SAAS,EAAE,MAAM,EAAE,eAAe,EAAE,MAAM,UASzE;AAED,wBAAgB,aAAa,CAAC,SAAS,EAAE,MAAM,EAAE,eAAe,EAAE,MAAM,UAKvE;AAED,wBAAgB,aAAa,CAAC,SAAS,EAAE,MAAM,EAAE,eAAe,EAAE,MAAM,UAKvE;AAED,wBAAgB,mBAAmB,CACjC,iBAAiB,EAAE,MAAM,EACzB,IAAI,EAAE,SAAS,UAMhB"}
@@ -23,7 +23,10 @@ exports.getMaxLiqUtilizationRateBps = getMaxLiqUtilizationRateBps;
23
23
  exports.maxRepayFromBps = maxRepayFromBps;
24
24
  exports.maxRepayToBps = maxRepayToBps;
25
25
  exports.maxBoostToBps = maxBoostToBps;
26
+ exports.realtimeUsdToEmaUsd = realtimeUsdToEmaUsd;
26
27
  const constants_1 = require("../constants");
28
+ const generated_1 = require("../generated");
29
+ const priceUtils_1 = require("./priceUtils");
27
30
  function calcNetWorthUsd(state) {
28
31
  return fromRoundedUsdValue(state?.netWorth.baseAmountUsdValue ?? BigInt(0));
29
32
  }
@@ -131,3 +134,7 @@ function maxRepayToBps(maxLtvBps, liqThresholdBps) {
131
134
  function maxBoostToBps(maxLtvBps, liqThresholdBps) {
132
135
  return Math.min(maxRepayToBps(maxLtvBps, liqThresholdBps), getMaxLiqUtilizationRateBps(maxLtvBps, liqThresholdBps, constants_1.OFFSET_FROM_MAX_LTV));
133
136
  }
137
+ function realtimeUsdToEmaUsd(realtimeAmountUsd, mint) {
138
+ return ((realtimeAmountUsd / (0, priceUtils_1.safeGetPrice)(mint, generated_1.PriceType.Realtime)) *
139
+ (0, priceUtils_1.safeGetPrice)(mint, generated_1.PriceType.Ema));
140
+ }
@@ -7,8 +7,6 @@ import {
7
7
  getSolanaRpcConnection,
8
8
  getSolautoManagedPositions,
9
9
  LOCAL_IRONFORGE_API_URL,
10
- PriceType,
11
- safeGetPrice,
12
10
  SOLAUTO_PROD_PROGRAM,
13
11
  } from "../src";
14
12
 
@@ -43,6 +43,9 @@ export async function main() {
43
43
  await client.initialize({
44
44
  positionId: 1,
45
45
  authority: new PublicKey("5UqsR2PGzbP8pGPbXEeXx86Gjz2N2UFBAuFZUSVydAEe"),
46
+ // lpUserAccount: new PublicKey(
47
+ // "EyATEtRH6FQRCJCn4nVzEnKXnzyGaUV1nt4sHqBrQ2fZ"
48
+ // ),
46
49
  });
47
50
 
48
51
  const transactionItems = [rebalance(client)];
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@haven-fi/solauto-sdk",
3
- "version": "1.0.660",
3
+ "version": "1.0.662",
4
4
  "main": "dist/index.js",
5
5
  "types": "dist/index.d.ts",
6
6
  "description": "Typescript SDK for the Solauto program on the Solana blockchain",