@gearbox-protocol/sdk 13.3.3 → 13.3.5

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 (80) hide show
  1. package/dist/cjs/sdk/GearboxSDK.js +135 -20
  2. package/dist/cjs/sdk/accounts/AbstractCreditAccountsService.js +78 -157
  3. package/dist/cjs/sdk/accounts/CreditAccountsServiceV310.js +5 -5
  4. package/dist/cjs/sdk/base/BaseContract.js +26 -6
  5. package/dist/cjs/sdk/base/ChainContractsRegister.js +39 -2
  6. package/dist/cjs/sdk/base/Construct.js +15 -3
  7. package/dist/cjs/sdk/base/TokensMeta.js +23 -0
  8. package/dist/cjs/sdk/constants/address-provider.js +0 -22
  9. package/dist/cjs/sdk/core/AbstractAddressProviderContract.js +15 -0
  10. package/dist/cjs/sdk/market/MarketRegister.js +74 -3
  11. package/dist/cjs/sdk/market/oracle/PriceOracleBaseContract.js +31 -50
  12. package/dist/cjs/sdk/market/pricefeeds/PriceFeedRef.js +16 -0
  13. package/dist/cjs/sdk/market/pricefeeds/PriceFeedsRegister.js +55 -12
  14. package/dist/cjs/sdk/options.js +30 -24
  15. package/dist/cjs/sdk/plugins/BasePlugin.js +24 -0
  16. package/dist/cjs/sdk/pools/AbstractPoolService.js +6 -0
  17. package/dist/cjs/sdk/router/AbstractRouterContract.js +4 -1
  18. package/dist/cjs/sdk/router/RouterV310Contract.js +20 -15
  19. package/dist/cjs/sdk/utils/AddressMap.js +53 -17
  20. package/dist/cjs/sdk/utils/AddressSet.js +9 -0
  21. package/dist/cjs/sdk/utils/viem/sendRawTx.js +16 -0
  22. package/dist/esm/sdk/GearboxSDK.js +135 -20
  23. package/dist/esm/sdk/accounts/AbstractCreditAccountsService.js +78 -157
  24. package/dist/esm/sdk/accounts/CreditAccountsServiceV310.js +5 -5
  25. package/dist/esm/sdk/base/BaseContract.js +26 -6
  26. package/dist/esm/sdk/base/ChainContractsRegister.js +39 -2
  27. package/dist/esm/sdk/base/Construct.js +15 -3
  28. package/dist/esm/sdk/base/TokensMeta.js +23 -0
  29. package/dist/esm/sdk/constants/address-provider.js +0 -21
  30. package/dist/esm/sdk/core/AbstractAddressProviderContract.js +15 -0
  31. package/dist/esm/sdk/market/MarketRegister.js +74 -3
  32. package/dist/esm/sdk/market/oracle/PriceOracleBaseContract.js +31 -50
  33. package/dist/esm/sdk/market/pricefeeds/PriceFeedRef.js +16 -0
  34. package/dist/esm/sdk/market/pricefeeds/PriceFeedsRegister.js +55 -12
  35. package/dist/esm/sdk/options.js +30 -24
  36. package/dist/esm/sdk/plugins/BasePlugin.js +24 -0
  37. package/dist/esm/sdk/pools/AbstractPoolService.js +6 -0
  38. package/dist/esm/sdk/router/AbstractRouterContract.js +4 -1
  39. package/dist/esm/sdk/router/RouterV310Contract.js +20 -15
  40. package/dist/esm/sdk/utils/AddressMap.js +53 -17
  41. package/dist/esm/sdk/utils/AddressSet.js +9 -0
  42. package/dist/esm/sdk/utils/viem/sendRawTx.js +19 -1
  43. package/dist/types/sdk/GearboxSDK.d.ts +236 -34
  44. package/dist/types/sdk/accounts/AbstractCreditAccountsService.d.ts +56 -142
  45. package/dist/types/sdk/accounts/CreditAccountsServiceV310.d.ts +14 -5
  46. package/dist/types/sdk/accounts/types.d.ts +230 -18
  47. package/dist/types/sdk/base/BaseContract.d.ts +67 -6
  48. package/dist/types/sdk/base/ChainContractsRegister.d.ts +51 -2
  49. package/dist/types/sdk/base/Construct.d.ts +31 -0
  50. package/dist/types/sdk/base/PlaceholderContract.d.ts +3 -0
  51. package/dist/types/sdk/base/SDKConstruct.d.ts +10 -0
  52. package/dist/types/sdk/base/TokensMeta.d.ts +59 -2
  53. package/dist/types/sdk/base/types.d.ts +185 -25
  54. package/dist/types/sdk/chain/chains.d.ts +78 -18
  55. package/dist/types/sdk/chain/detectNetwork.d.ts +7 -0
  56. package/dist/types/sdk/constants/address-provider.d.ts +4 -3
  57. package/dist/types/sdk/core/AbstractAddressProviderContract.d.ts +23 -0
  58. package/dist/types/sdk/core/types.d.ts +46 -0
  59. package/dist/types/sdk/market/MarketRegister.d.ts +81 -0
  60. package/dist/types/sdk/market/adapters/PlaceholderAdapterContracts.d.ts +3 -0
  61. package/dist/types/sdk/market/oracle/PriceOracleBaseContract.d.ts +40 -50
  62. package/dist/types/sdk/market/oracle/types.d.ts +76 -57
  63. package/dist/types/sdk/market/pricefeeds/AbstractLPPriceFeed.d.ts +3 -0
  64. package/dist/types/sdk/market/pricefeeds/AbstractPriceFeed.d.ts +3 -0
  65. package/dist/types/sdk/market/pricefeeds/PriceFeedRef.d.ts +22 -2
  66. package/dist/types/sdk/market/pricefeeds/PriceFeedsRegister.d.ts +77 -13
  67. package/dist/types/sdk/market/pricefeeds/types.d.ts +70 -10
  68. package/dist/types/sdk/options.d.ts +13 -4
  69. package/dist/types/sdk/plugins/BasePlugin.d.ts +39 -0
  70. package/dist/types/sdk/plugins/types.d.ts +73 -43
  71. package/dist/types/sdk/pools/AbstractPoolService.d.ts +12 -0
  72. package/dist/types/sdk/pools/types.d.ts +75 -6
  73. package/dist/types/sdk/router/AbstractRouterContract.d.ts +21 -2
  74. package/dist/types/sdk/router/RouterV310Contract.d.ts +27 -15
  75. package/dist/types/sdk/router/types.d.ts +51 -69
  76. package/dist/types/sdk/types/state.d.ts +32 -3
  77. package/dist/types/sdk/utils/AddressMap.d.ts +61 -17
  78. package/dist/types/sdk/utils/AddressSet.d.ts +15 -0
  79. package/dist/types/sdk/utils/viem/sendRawTx.d.ts +5 -1
  80. package/package.json +4 -2
@@ -1,11 +1,23 @@
1
1
  class BasePlugin {
2
2
  #sdk;
3
3
  logger;
4
+ /**
5
+ * Plugin state version for hydration compatibility checks.
6
+ * @default 1
7
+ **/
4
8
  version = 1;
9
+ /**
10
+ * When `true`, state is fetched eagerly during the `attach` phase
11
+ * rather than waiting for an explicit `load` call.
12
+ **/
5
13
  loadOnAttach;
6
14
  constructor(loadOnAttach = false) {
7
15
  this.loadOnAttach = loadOnAttach;
8
16
  }
17
+ /**
18
+ * Reference to the parent SDK instance.
19
+ * @throws Error if the SDK has not been attached yet.
20
+ **/
9
21
  get sdk() {
10
22
  if (!this.#sdk) {
11
23
  throw new Error("SDK is not attached");
@@ -19,17 +31,29 @@ class BasePlugin {
19
31
  this.#sdk = sdk;
20
32
  this.logger = sdk.logger?.child?.({ name: this.constructor.name }) ?? sdk.logger;
21
33
  }
34
+ /**
35
+ * {@inheritDoc IGearboxSDKPlugin.attach}
36
+ **/
22
37
  async attach() {
23
38
  if (this.loadOnAttach) {
24
39
  await this.load(true);
25
40
  }
26
41
  }
42
+ /**
43
+ * {@inheritDoc IGearboxSDKPlugin.syncState}
44
+ **/
27
45
  async syncState() {
28
46
  await this.load(false);
29
47
  }
48
+ /**
49
+ * Network type of the connected chain (e.g. `"Mainnet"`, `"Arbitrum"`).
50
+ **/
30
51
  get network() {
31
52
  return this.sdk.networkType;
32
53
  }
54
+ /**
55
+ * Viem public client for read-only chain interactions.
56
+ **/
33
57
  get client() {
34
58
  return this.sdk.client;
35
59
  }
@@ -10,6 +10,9 @@ class AbstractPoolService extends SDKConstruct {
10
10
  this.#version = version;
11
11
  this.logger?.debug(`Created PoolService with version: ${this.#version}`);
12
12
  }
13
+ /**
14
+ * {@inheritDoc IPoolsService.addLiquidity}
15
+ **/
13
16
  addLiquidity({
14
17
  collateral,
15
18
  pool,
@@ -66,6 +69,9 @@ class AbstractPoolService extends SDKConstruct {
66
69
  ];
67
70
  }
68
71
  }
72
+ /**
73
+ * {@inheritDoc IPoolsService.removeLiquidity}
74
+ **/
69
75
  removeLiquidity({
70
76
  pool,
71
77
  amount,
@@ -3,6 +3,9 @@ import { PERCENTAGE_FACTOR } from "../constants/math.js";
3
3
  import { AddressMap, AddressSet, formatBN, isDust } from "../utils/index.js";
4
4
  import { limitLeftover } from "./helpers.js";
5
5
  class AbstractRouterContract extends BaseContract {
6
+ /**
7
+ * Reference to the parent SDK instance.
8
+ **/
6
9
  sdk;
7
10
  constructor(sdk, args) {
8
11
  super(sdk, args);
@@ -65,7 +68,7 @@ class AbstractRouterContract extends BaseContract {
65
68
  };
66
69
  }
67
70
  /**
68
- * Tries to sell just enought of most valuable token to cover debt
71
+ * Tries to sell just enough of the most valuable token to cover debt.
69
72
  * @param ca
70
73
  * @param keepAssets
71
74
  * @returns
@@ -18,8 +18,8 @@ class RouterV310Contract extends AbstractRouterContract {
18
18
  });
19
19
  }
20
20
  /**
21
- * Implements {@link IRouterContract.findOneTokenPath}
22
- */
21
+ * {@inheritDoc IRouterContract.findOneTokenPath}
22
+ **/
23
23
  async findOneTokenPath(props) {
24
24
  const {
25
25
  creditAccount,
@@ -60,8 +60,8 @@ class RouterV310Contract extends AbstractRouterContract {
60
60
  };
61
61
  }
62
62
  /**
63
- * Implements {@link IRouterContract.findOpenStrategyPath}
64
- */
63
+ * {@inheritDoc IRouterContract.findOpenStrategyPath}
64
+ **/
65
65
  async findOpenStrategyPath(props) {
66
66
  const {
67
67
  creditManager: cm,
@@ -118,8 +118,8 @@ class RouterV310Contract extends AbstractRouterContract {
118
118
  };
119
119
  }
120
120
  /**
121
- * Implements {@link IRouterContract.findClaimAllRewards}
122
- */
121
+ * {@inheritDoc IRouterContract.findClaimAllRewards}
122
+ **/
123
123
  async findClaimAllRewards(props) {
124
124
  const record = props.tokensToClaim.reduce(
125
125
  (acc, a) => {
@@ -144,8 +144,8 @@ class RouterV310Contract extends AbstractRouterContract {
144
144
  };
145
145
  }
146
146
  /**
147
- * Implements {@link IRouterContract.findBestClosePath}
148
- */
147
+ * {@inheritDoc IRouterContract.findBestClosePath}
148
+ **/
149
149
  async findBestClosePath(props) {
150
150
  const {
151
151
  creditAccount: ca,
@@ -210,17 +210,22 @@ class RouterV310Contract extends AbstractRouterContract {
210
210
  };
211
211
  }
212
212
  /**
213
- * v310-specific method to set explicitly number of splits for a token
214
- * @param token
215
- * @param numSplits
216
- */
213
+ * Override the number of route splits used when swapping a specific token.
214
+ *
215
+ * @param token - Token address to configure.
216
+ * @param numSplits - Number of parallel route splits.
217
+ * @internal
218
+ **/
217
219
  setNumSplits(token, numSplits) {
218
220
  this.#numSplits.upsert(token, numSplits);
219
221
  }
220
222
  /**
221
- * v310-specific method to set default number of splits for a token
222
- * @param numSplits
223
- */
223
+ * Set the default number of route splits applied to the highest-value
224
+ * token in each swap.
225
+ *
226
+ * @param numSplits - Default number of parallel route splits.
227
+ * @internal
228
+ **/
224
229
  setDefaultNumSplits(numSplits) {
225
230
  this.#defaultNumSplits = numSplits;
226
231
  }
@@ -3,6 +3,10 @@ class AddressMap {
3
3
  #map;
4
4
  #frozen = false;
5
5
  #name;
6
+ /**
7
+ * @param entries - Optional initial key-value pairs. Address strings are checksummed automatically.
8
+ * @param name - Optional label used in error messages when a lookup fails.
9
+ */
6
10
  constructor(entries, name) {
7
11
  this.#map = /* @__PURE__ */ new Map();
8
12
  if (entries) {
@@ -14,9 +18,10 @@ class AddressMap {
14
18
  this.#name = name;
15
19
  }
16
20
  /**
17
- * Adds or updates value, undefined removes value
18
- * @param address
19
- * @param value
21
+ * Adds or updates a value. Passing `undefined` removes the entry.
22
+ * @param address - EVM address (checksummed automatically).
23
+ * @param value - Value to store, or `undefined` to delete the entry.
24
+ * @throws If the map has been {@link freeze | frozen}.
20
25
  */
21
26
  upsert(address, value) {
22
27
  if (this.#frozen) {
@@ -30,9 +35,10 @@ class AddressMap {
30
35
  }
31
36
  }
32
37
  /**
33
- * Adds value, throws if this address is already used
34
- * @param address
35
- * @param value
38
+ * Inserts a value, throwing if the address is already present.
39
+ * @param address - EVM address (checksummed automatically).
40
+ * @param value - Value to store.
41
+ * @throws If the map has been {@link freeze | frozen} or if `address` already exists.
36
42
  */
37
43
  insert(address, value) {
38
44
  if (this.#frozen) {
@@ -47,27 +53,26 @@ class AddressMap {
47
53
  this.#map.set(key, value);
48
54
  }
49
55
  /**
50
- * Checks if address is present in map
51
- * @param address
52
- * @returns
56
+ * Checks whether an address is present in the map.
57
+ * @param address - EVM address (case-insensitive).
53
58
  */
54
59
  has(address) {
55
60
  const key = getAddress(address);
56
61
  return this.#map.has(key);
57
62
  }
58
63
  /**
59
- * Returns value, or undefined if the address is not in map
60
- * @param address
61
- * @returns
64
+ * Looks up a value by EVM address (case-insensitive).
65
+ * @param address - EVM address to look up.
66
+ * @returns The stored value, or `undefined` if not present.
62
67
  */
63
68
  get(address) {
64
69
  const key = getAddress(address);
65
70
  return this.#map.get(key);
66
71
  }
67
72
  /**
68
- * Gets address from map, throws if not found
69
- * @param address
70
- * @returns
73
+ * Looks up a value by EVM address, throwing if the address is absent.
74
+ * @param address - EVM address to look up.
75
+ * @throws If `address` is not in the map.
71
76
  */
72
77
  mustGet(address) {
73
78
  const key = getAddress(address);
@@ -77,40 +82,71 @@ class AddressMap {
77
82
  return this.#map.get(key);
78
83
  }
79
84
  /**
80
- * Deletes address from map
81
- * @param address
85
+ * Removes an entry by address. No-op if the address is absent.
86
+ * @param address - EVM address to remove.
82
87
  */
83
88
  delete(address) {
84
89
  const key = getAddress(address);
85
90
  this.#map.delete(key);
86
91
  }
92
+ /**
93
+ * Removes all entries from the map.
94
+ **/
87
95
  clear() {
88
96
  this.#map.clear();
89
97
  }
98
+ /**
99
+ * Returns all entries as an array of `[checksummedAddress, value]` tuples.
100
+ **/
90
101
  entries() {
91
102
  return Array.from(this.#map.entries());
92
103
  }
104
+ /**
105
+ * Returns all values in insertion order.
106
+ **/
93
107
  values() {
94
108
  return Array.from(this.#map.values());
95
109
  }
110
+ /**
111
+ * Returns all checksummed addresses in insertion order.
112
+ **/
96
113
  keys() {
97
114
  return Array.from(this.#map.keys());
98
115
  }
116
+ /**
117
+ * Converts the map to a plain `Record<Address, T>` object.
118
+ **/
99
119
  asRecord() {
100
120
  return Object.fromEntries(this.#map.entries());
101
121
  }
122
+ /**
123
+ * Number of entries in the map.
124
+ **/
102
125
  get size() {
103
126
  return this.#map.size;
104
127
  }
128
+ /**
129
+ * Prevents further mutations. Any subsequent call to {@link upsert},
130
+ * {@link insert}, or {@link delete} will throw.
131
+ */
105
132
  freeze() {
106
133
  this.#frozen = true;
107
134
  }
108
135
  get name() {
109
136
  return this.#name;
110
137
  }
138
+ /**
139
+ * Creates an `AddressMap` from a plain record object.
140
+ * @param record - Object whose keys are EVM addresses.
141
+ */
111
142
  static fromRecord(record) {
112
143
  return new AddressMap(Object.entries(record));
113
144
  }
145
+ /**
146
+ * Creates an `AddressMap` by extracting an address from each array element.
147
+ * @param array - Source items.
148
+ * @param mapFn - Function that returns the address key for a given item.
149
+ */
114
150
  static fromMappedArray(array, mapFn) {
115
151
  return new AddressMap(array.map((item) => [mapFn(item), item]));
116
152
  }
@@ -1,5 +1,8 @@
1
1
  import { getAddress } from "viem";
2
2
  class AddressSet extends Set {
3
+ /**
4
+ * @param entries - Optional initial addresses. Each is checksummed automatically.
5
+ */
3
6
  constructor(entries) {
4
7
  super(Array.from(entries ?? []).map((a) => getAddress(a)));
5
8
  }
@@ -12,9 +15,15 @@ class AddressSet extends Set {
12
15
  has(value) {
13
16
  return super.has(getAddress(value));
14
17
  }
18
+ /**
19
+ * Returns all addresses as an array.
20
+ **/
15
21
  asArray() {
16
22
  return Array.from(this);
17
23
  }
24
+ /**
25
+ * Maps each address through `fn` and returns the resulting array.
26
+ **/
18
27
  map(fn) {
19
28
  return this.asArray().map(fn);
20
29
  }
@@ -1,4 +1,7 @@
1
- import { sendTransaction } from "viem/actions";
1
+ import {
2
+ estimateGas,
3
+ sendTransaction
4
+ } from "viem/actions";
2
5
  import { getAction } from "viem/utils";
3
6
  async function sendRawTx(client, params) {
4
7
  const { tx, ...rest } = params;
@@ -13,6 +16,21 @@ async function sendRawTx(client, params) {
13
16
  value: BigInt(tx.value)
14
17
  });
15
18
  }
19
+ async function estimateRawTxGas(client, params) {
20
+ const { tx, ...rest } = params;
21
+ return getAction(
22
+ client,
23
+ estimateGas,
24
+ "estimateGas"
25
+ )({
26
+ ...rest,
27
+ account: params.account,
28
+ data: tx.callData,
29
+ to: tx.to,
30
+ value: BigInt(tx.value)
31
+ });
32
+ }
16
33
  export {
34
+ estimateRawTxGas,
17
35
  sendRawTx
18
36
  };