@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(
|
|
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(
|
|
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 {};
|