@gearbox-protocol/sdk 9.1.8 → 9.2.0

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.
@@ -91,7 +91,8 @@ class RevolverTransport {
91
91
  get value() {
92
92
  return {
93
93
  rotate: (reason) => this.rotate(reason),
94
- currentTransportName: () => this.currentTransportName()
94
+ currentTransportName: () => this.currentTransportName(),
95
+ statuses: () => this.statuses()
95
96
  };
96
97
  }
97
98
  request = async (r) => {
@@ -100,17 +101,19 @@ class RevolverTransport {
100
101
  }
101
102
  do {
102
103
  try {
103
- this.#requests.set(r, this.currentTransportName);
104
+ this.#requests.set(r, this.currentTransportName());
104
105
  const resp = await this.#transport({ ...this.overrides }).request(r);
105
106
  this.#requests.delete(r);
106
107
  return resp;
107
108
  } catch (e) {
108
109
  if (e instanceof import_viem.RpcError || e instanceof import_viem.HttpRequestError) {
109
110
  const reqTransport = this.#requests.get(r);
110
- if (reqTransport === this.currentTransportName) {
111
+ if (reqTransport === this.currentTransportName()) {
111
112
  await this.rotate(e);
112
113
  } else {
113
- this.#logger?.debug("request made with old transport, try again");
114
+ this.#logger?.debug(
115
+ `request made with old transport ${reqTransport}, trying again`
116
+ );
114
117
  }
115
118
  } else {
116
119
  this.#requests.delete(r);
@@ -201,6 +204,13 @@ class RevolverTransport {
201
204
  currentTransportName() {
202
205
  return this.#transport({}).config.name;
203
206
  }
207
+ statuses() {
208
+ const now = Date.now();
209
+ return this.#transports.map((t, i) => ({
210
+ id: t.transport({}).config.name,
211
+ status: t.cooldown < now ? this.#index === i ? "active" : "standby" : "cooldown"
212
+ }));
213
+ }
204
214
  get #logger() {
205
215
  return this.#config.logger;
206
216
  }
@@ -74,7 +74,8 @@ class RevolverTransport {
74
74
  get value() {
75
75
  return {
76
76
  rotate: (reason) => this.rotate(reason),
77
- currentTransportName: () => this.currentTransportName()
77
+ currentTransportName: () => this.currentTransportName(),
78
+ statuses: () => this.statuses()
78
79
  };
79
80
  }
80
81
  request = async (r) => {
@@ -83,17 +84,19 @@ class RevolverTransport {
83
84
  }
84
85
  do {
85
86
  try {
86
- this.#requests.set(r, this.currentTransportName);
87
+ this.#requests.set(r, this.currentTransportName());
87
88
  const resp = await this.#transport({ ...this.overrides }).request(r);
88
89
  this.#requests.delete(r);
89
90
  return resp;
90
91
  } catch (e) {
91
92
  if (e instanceof RpcError || e instanceof HttpRequestError) {
92
93
  const reqTransport = this.#requests.get(r);
93
- if (reqTransport === this.currentTransportName) {
94
+ if (reqTransport === this.currentTransportName()) {
94
95
  await this.rotate(e);
95
96
  } else {
96
- this.#logger?.debug("request made with old transport, try again");
97
+ this.#logger?.debug(
98
+ `request made with old transport ${reqTransport}, trying again`
99
+ );
97
100
  }
98
101
  } else {
99
102
  this.#requests.delete(r);
@@ -184,6 +187,13 @@ class RevolverTransport {
184
187
  currentTransportName() {
185
188
  return this.#transport({}).config.name;
186
189
  }
190
+ statuses() {
191
+ const now = Date.now();
192
+ return this.#transports.map((t, i) => ({
193
+ id: t.transport({}).config.name,
194
+ status: t.cooldown < now ? this.#index === i ? "active" : "standby" : "cooldown"
195
+ }));
196
+ }
187
197
  get #logger() {
188
198
  return this.#config.logger;
189
199
  }
@@ -2,6 +2,10 @@ import { BaseError, type ClientConfig, type EIP1193RequestFn, type Transport, ty
2
2
  import type { HttpRpcClientOptions } from "viem/utils";
3
3
  import type { ILogger, NetworkType } from "../sdk/index.js";
4
4
  import { type ProviderConfig } from "./providers.js";
5
+ export interface ProviderStatus {
6
+ id: string;
7
+ status: "active" | "cooldown" | "standby";
8
+ }
5
9
  type OnRequestFn = (providerName: string, ...args: Parameters<Required<HttpRpcClientOptions>["onRequest"]>) => ReturnType<Required<HttpRpcClientOptions>["onRequest"]>;
6
10
  type OnResponseFn = (providerName: string, ...args: Parameters<Required<HttpRpcClientOptions>["onResponse"]>) => ReturnType<Required<HttpRpcClientOptions>["onResponse"]>;
7
11
  export interface RevolverTransportConfig {
@@ -53,6 +57,10 @@ export interface RevolverTransportValue {
53
57
  * Returns the name of the current transport
54
58
  */
55
59
  currentTransportName: () => string;
60
+ /**
61
+ * Returns statuses of all providers
62
+ */
63
+ statuses: () => ProviderStatus[];
56
64
  }
57
65
  export declare class RevolverTransport implements ReturnType<Transport<"revolver", RevolverTransportValue>> {
58
66
  #private;
@@ -77,5 +85,6 @@ export declare class RevolverTransport implements ReturnType<Transport<"revolver
77
85
  */
78
86
  rotate(reason?: BaseError): Promise<boolean>;
79
87
  currentTransportName(): string;
88
+ statuses(): ProviderStatus[];
80
89
  }
81
90
  export {};
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@gearbox-protocol/sdk",
3
- "version": "9.1.8",
3
+ "version": "9.2.0",
4
4
  "description": "Gearbox SDK",
5
5
  "license": "MIT",
6
6
  "main": "./dist/cjs/sdk/index.js",