@gainsnetwork/sdk 0.0.18 → 0.0.20-rc1
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/lib/constants.d.ts +135 -0
- package/lib/constants.js +123 -0
- package/lib/index.d.ts +2 -0
- package/lib/index.js +2 -0
- package/lib/prices/PricingStreamClient.d.ts +16 -0
- package/lib/prices/PricingStreamClient.js +101 -0
- package/lib/prices/index.d.ts +1 -0
- package/lib/prices/index.js +17 -0
- package/package.json +5 -2
|
@@ -0,0 +1,135 @@
|
|
|
1
|
+
export declare const pairs: {
|
|
2
|
+
"BTC/USD": string;
|
|
3
|
+
"ETH/USD": string;
|
|
4
|
+
"LINK/USD": string;
|
|
5
|
+
"DOGE/USD": string;
|
|
6
|
+
"MATIC/USD": string;
|
|
7
|
+
"ADA/USD": string;
|
|
8
|
+
"SUSHI/USD": string;
|
|
9
|
+
"AAVE/USD": string;
|
|
10
|
+
"ALGO/USD": string;
|
|
11
|
+
"BAT/USD": string;
|
|
12
|
+
"COMP/USD": string;
|
|
13
|
+
"DOT/USD": string;
|
|
14
|
+
"EOS/USD": string;
|
|
15
|
+
"LTC/USD": string;
|
|
16
|
+
"MANA/USD": string;
|
|
17
|
+
"OMG/USD": string;
|
|
18
|
+
"SNX/USD": string;
|
|
19
|
+
"UNI/USD": string;
|
|
20
|
+
"XLM/USD": string;
|
|
21
|
+
"XRP/USD": string;
|
|
22
|
+
"ZEC/USD": string;
|
|
23
|
+
"EUR/USD": string;
|
|
24
|
+
"USD/JPY": string;
|
|
25
|
+
"GBP/USD": string;
|
|
26
|
+
"USD/CHF": string;
|
|
27
|
+
"AUD/USD": string;
|
|
28
|
+
"USD/CAD": string;
|
|
29
|
+
"NZD/USD": string;
|
|
30
|
+
"EUR/CHF": string;
|
|
31
|
+
"EUR/JPY": string;
|
|
32
|
+
"EUR/GBP": string;
|
|
33
|
+
"LUNA/USD": string;
|
|
34
|
+
"YFI/USD": string;
|
|
35
|
+
"SOL/USD": string;
|
|
36
|
+
"XTZ/USD": string;
|
|
37
|
+
"BCH/USD": string;
|
|
38
|
+
"BNT/USD": string;
|
|
39
|
+
"CRV/USD": string;
|
|
40
|
+
"DASH/USD": string;
|
|
41
|
+
"ETC/USD": string;
|
|
42
|
+
"ICP/USD": string;
|
|
43
|
+
"MKR/USD": string;
|
|
44
|
+
"NEO/USD": string;
|
|
45
|
+
"THETA/USD": string;
|
|
46
|
+
"TRX/USD": string;
|
|
47
|
+
"ZRX/USD": string;
|
|
48
|
+
"SAND/USD": string;
|
|
49
|
+
"BNB/USD": string;
|
|
50
|
+
"AXS/USD": string;
|
|
51
|
+
"GRT/USD": string;
|
|
52
|
+
"HBAR/USD": string;
|
|
53
|
+
"XMR/USD": string;
|
|
54
|
+
"ENJ/USD": string;
|
|
55
|
+
"FTM/USD": string;
|
|
56
|
+
"FTT/USD": string;
|
|
57
|
+
"APE/USD": string;
|
|
58
|
+
"CHZ/USD": string;
|
|
59
|
+
"SHIB/USD": string;
|
|
60
|
+
"AAPL/USD": string;
|
|
61
|
+
"FB/USD": string;
|
|
62
|
+
"GOOGL/USD": string;
|
|
63
|
+
"AMZN/USD": string;
|
|
64
|
+
"MSFT/USD": string;
|
|
65
|
+
"TSLA/USD": string;
|
|
66
|
+
"SNAP/USD": string;
|
|
67
|
+
"NVDA/USD": string;
|
|
68
|
+
"V/USD": string;
|
|
69
|
+
"MA/USD": string;
|
|
70
|
+
"PFE/USD": string;
|
|
71
|
+
"KO/USD": string;
|
|
72
|
+
"DIS/USD": string;
|
|
73
|
+
"GME/USD": string;
|
|
74
|
+
"NKE/USD": string;
|
|
75
|
+
"AMD/USD": string;
|
|
76
|
+
"PYPL/USD": string;
|
|
77
|
+
"ABNB/USD": string;
|
|
78
|
+
"BA/USD": string;
|
|
79
|
+
"SBUX/USD": string;
|
|
80
|
+
"WMT/USD": string;
|
|
81
|
+
"INTC/USD": string;
|
|
82
|
+
"MCD/USD": string;
|
|
83
|
+
"META/USD": string;
|
|
84
|
+
"GOOGL_1/USD": string;
|
|
85
|
+
"GME_1/USD": string;
|
|
86
|
+
"AMZN_1/USD": string;
|
|
87
|
+
"TSLA_1/USD": string;
|
|
88
|
+
"SPY/USD": string;
|
|
89
|
+
"QQQ/USD": string;
|
|
90
|
+
"IWM/USD": string;
|
|
91
|
+
"DIA/USD": string;
|
|
92
|
+
"XAU/USD": string;
|
|
93
|
+
"XAG/USD": string;
|
|
94
|
+
"USD/CNH": string;
|
|
95
|
+
"USD/SGD": string;
|
|
96
|
+
"EUR/SEK": string;
|
|
97
|
+
"USD/KRW": string;
|
|
98
|
+
"EUR/NOK": string;
|
|
99
|
+
"USD/INR": string;
|
|
100
|
+
"USD/MXN": string;
|
|
101
|
+
"USD/TWD": string;
|
|
102
|
+
"USD/ZAR": string;
|
|
103
|
+
"USD/BRL": string;
|
|
104
|
+
"AVAX/USD": string;
|
|
105
|
+
"ATOM/USD": string;
|
|
106
|
+
"NEAR/USD": string;
|
|
107
|
+
"QNT/USD": string;
|
|
108
|
+
"IOTA/USD": string;
|
|
109
|
+
"TON/USD": string;
|
|
110
|
+
"RPL/USD": string;
|
|
111
|
+
};
|
|
112
|
+
export declare const tickerChanges: {
|
|
113
|
+
FB: {
|
|
114
|
+
newTicker: string;
|
|
115
|
+
date: string;
|
|
116
|
+
};
|
|
117
|
+
};
|
|
118
|
+
export declare const stockSplits: {
|
|
119
|
+
"AMZN_1/USD": {
|
|
120
|
+
date: string;
|
|
121
|
+
split: number;
|
|
122
|
+
};
|
|
123
|
+
"GOOGL_1/USD": {
|
|
124
|
+
date: string;
|
|
125
|
+
split: number;
|
|
126
|
+
};
|
|
127
|
+
"GME_1/USD": {
|
|
128
|
+
date: string;
|
|
129
|
+
split: number;
|
|
130
|
+
};
|
|
131
|
+
"TSLA_1/USD": {
|
|
132
|
+
date: string;
|
|
133
|
+
split: number;
|
|
134
|
+
};
|
|
135
|
+
};
|
package/lib/constants.js
ADDED
|
@@ -0,0 +1,123 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.stockSplits = exports.tickerChanges = exports.pairs = void 0;
|
|
4
|
+
exports.pairs = {
|
|
5
|
+
"BTC/USD": "crypto",
|
|
6
|
+
"ETH/USD": "crypto",
|
|
7
|
+
"LINK/USD": "crypto",
|
|
8
|
+
"DOGE/USD": "crypto",
|
|
9
|
+
"MATIC/USD": "crypto",
|
|
10
|
+
"ADA/USD": "crypto",
|
|
11
|
+
"SUSHI/USD": "crypto",
|
|
12
|
+
"AAVE/USD": "crypto",
|
|
13
|
+
"ALGO/USD": "crypto",
|
|
14
|
+
"BAT/USD": "crypto",
|
|
15
|
+
"COMP/USD": "crypto",
|
|
16
|
+
"DOT/USD": "crypto",
|
|
17
|
+
"EOS/USD": "crypto",
|
|
18
|
+
"LTC/USD": "crypto",
|
|
19
|
+
"MANA/USD": "crypto",
|
|
20
|
+
"OMG/USD": "crypto",
|
|
21
|
+
"SNX/USD": "crypto",
|
|
22
|
+
"UNI/USD": "crypto",
|
|
23
|
+
"XLM/USD": "crypto",
|
|
24
|
+
"XRP/USD": "crypto",
|
|
25
|
+
"ZEC/USD": "crypto",
|
|
26
|
+
"EUR/USD": "forex",
|
|
27
|
+
"USD/JPY": "forex",
|
|
28
|
+
"GBP/USD": "forex",
|
|
29
|
+
"USD/CHF": "forex",
|
|
30
|
+
"AUD/USD": "forex",
|
|
31
|
+
"USD/CAD": "forex",
|
|
32
|
+
"NZD/USD": "forex",
|
|
33
|
+
"EUR/CHF": "forex",
|
|
34
|
+
"EUR/JPY": "forex",
|
|
35
|
+
"EUR/GBP": "forex",
|
|
36
|
+
"LUNA/USD": "crypto",
|
|
37
|
+
"YFI/USD": "crypto",
|
|
38
|
+
"SOL/USD": "crypto",
|
|
39
|
+
"XTZ/USD": "crypto",
|
|
40
|
+
"BCH/USD": "crypto",
|
|
41
|
+
"BNT/USD": "crypto",
|
|
42
|
+
"CRV/USD": "crypto",
|
|
43
|
+
"DASH/USD": "crypto",
|
|
44
|
+
"ETC/USD": "crypto",
|
|
45
|
+
"ICP/USD": "crypto",
|
|
46
|
+
"MKR/USD": "crypto",
|
|
47
|
+
"NEO/USD": "crypto",
|
|
48
|
+
"THETA/USD": "crypto",
|
|
49
|
+
"TRX/USD": "crypto",
|
|
50
|
+
"ZRX/USD": "crypto",
|
|
51
|
+
"SAND/USD": "crypto",
|
|
52
|
+
"BNB/USD": "crypto",
|
|
53
|
+
"AXS/USD": "crypto",
|
|
54
|
+
"GRT/USD": "crypto",
|
|
55
|
+
"HBAR/USD": "crypto",
|
|
56
|
+
"XMR/USD": "crypto",
|
|
57
|
+
"ENJ/USD": "crypto",
|
|
58
|
+
"FTM/USD": "crypto",
|
|
59
|
+
"FTT/USD": "crypto",
|
|
60
|
+
"APE/USD": "crypto",
|
|
61
|
+
"CHZ/USD": "crypto",
|
|
62
|
+
"SHIB/USD": "crypto",
|
|
63
|
+
"AAPL/USD": "stocks",
|
|
64
|
+
"FB/USD": "stocks",
|
|
65
|
+
"GOOGL/USD": "stocks",
|
|
66
|
+
"AMZN/USD": "stocks",
|
|
67
|
+
"MSFT/USD": "stocks",
|
|
68
|
+
"TSLA/USD": "stocks",
|
|
69
|
+
"SNAP/USD": "stocks",
|
|
70
|
+
"NVDA/USD": "stocks",
|
|
71
|
+
"V/USD": "stocks",
|
|
72
|
+
"MA/USD": "stocks",
|
|
73
|
+
"PFE/USD": "stocks",
|
|
74
|
+
"KO/USD": "stocks",
|
|
75
|
+
"DIS/USD": "stocks",
|
|
76
|
+
"GME/USD": "stocks",
|
|
77
|
+
"NKE/USD": "stocks",
|
|
78
|
+
"AMD/USD": "stocks",
|
|
79
|
+
"PYPL/USD": "stocks",
|
|
80
|
+
"ABNB/USD": "stocks",
|
|
81
|
+
"BA/USD": "stocks",
|
|
82
|
+
"SBUX/USD": "stocks",
|
|
83
|
+
"WMT/USD": "stocks",
|
|
84
|
+
"INTC/USD": "stocks",
|
|
85
|
+
"MCD/USD": "stocks",
|
|
86
|
+
"META/USD": "stocks",
|
|
87
|
+
"GOOGL_1/USD": "stocks",
|
|
88
|
+
"GME_1/USD": "stocks",
|
|
89
|
+
"AMZN_1/USD": "stocks",
|
|
90
|
+
"TSLA_1/USD": "stocks",
|
|
91
|
+
"SPY/USD": "indices",
|
|
92
|
+
"QQQ/USD": "indices",
|
|
93
|
+
"IWM/USD": "indices",
|
|
94
|
+
"DIA/USD": "indices",
|
|
95
|
+
"XAU/USD": "commodities",
|
|
96
|
+
"XAG/USD": "commodities",
|
|
97
|
+
"USD/CNH": "forex",
|
|
98
|
+
"USD/SGD": "forex",
|
|
99
|
+
"EUR/SEK": "forex",
|
|
100
|
+
"USD/KRW": "forex",
|
|
101
|
+
"EUR/NOK": "forex",
|
|
102
|
+
"USD/INR": "forex",
|
|
103
|
+
"USD/MXN": "forex",
|
|
104
|
+
"USD/TWD": "forex",
|
|
105
|
+
"USD/ZAR": "forex",
|
|
106
|
+
"USD/BRL": "forex",
|
|
107
|
+
"AVAX/USD": "crypto",
|
|
108
|
+
"ATOM/USD": "crypto",
|
|
109
|
+
"NEAR/USD": "crypto",
|
|
110
|
+
"QNT/USD": "crypto",
|
|
111
|
+
"IOTA/USD": "crypto",
|
|
112
|
+
"TON/USD": "crypto",
|
|
113
|
+
"RPL/USD": "crypto",
|
|
114
|
+
};
|
|
115
|
+
exports.tickerChanges = {
|
|
116
|
+
FB: { newTicker: "META", date: "06/09/2022" },
|
|
117
|
+
};
|
|
118
|
+
exports.stockSplits = {
|
|
119
|
+
"AMZN_1/USD": { date: "6/6/2022", split: 20 },
|
|
120
|
+
"GOOGL_1/USD": { date: "7/18/2022", split: 20 },
|
|
121
|
+
"GME_1/USD": { date: "7/22/2022", split: 4 },
|
|
122
|
+
"TSLA_1/USD": { date: "8/25/2022", split: 3 },
|
|
123
|
+
};
|
package/lib/index.d.ts
CHANGED
package/lib/index.js
CHANGED
|
@@ -17,3 +17,5 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
17
17
|
__exportStar(require("./trade"), exports);
|
|
18
18
|
__exportStar(require("./contracts"), exports);
|
|
19
19
|
__exportStar(require("./markets"), exports);
|
|
20
|
+
__exportStar(require("./constants"), exports);
|
|
21
|
+
__exportStar(require("./prices"), exports);
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import WebSocket from "ws";
|
|
2
|
+
export type PriceMessage = WebSocket.MessageEvent;
|
|
3
|
+
export declare class PricingStreamClient {
|
|
4
|
+
private endpoints;
|
|
5
|
+
private _activeSocket;
|
|
6
|
+
private fallbackIndex;
|
|
7
|
+
private reconnectTimeoutMs;
|
|
8
|
+
private _onPriceMessage;
|
|
9
|
+
constructor(endpoints: string[], onPriceMessage: (message: PriceMessage) => void, reconnectTimeoutMs?: number);
|
|
10
|
+
connect(): Promise<void>;
|
|
11
|
+
private _connect;
|
|
12
|
+
private fallbackToNextEndpoint;
|
|
13
|
+
private measureLatency;
|
|
14
|
+
get activeSocket(): WebSocket | null;
|
|
15
|
+
set onPriceMessage(callback: (message: WebSocket.MessageEvent) => void);
|
|
16
|
+
}
|
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
3
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
4
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
5
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
6
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
7
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
8
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
9
|
+
});
|
|
10
|
+
};
|
|
11
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
12
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
13
|
+
};
|
|
14
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
15
|
+
exports.PricingStreamClient = void 0;
|
|
16
|
+
/* eslint-disable @typescript-eslint/restrict-template-expressions */
|
|
17
|
+
/* eslint-disable @typescript-eslint/no-unsafe-call */
|
|
18
|
+
/* eslint-disable @typescript-eslint/no-unsafe-member-access */
|
|
19
|
+
const ws_1 = __importDefault(require("ws"));
|
|
20
|
+
class PricingStreamClient {
|
|
21
|
+
constructor(endpoints, onPriceMessage, reconnectTimeoutMs = 1000) {
|
|
22
|
+
this.endpoints = endpoints;
|
|
23
|
+
this._activeSocket = null;
|
|
24
|
+
this.fallbackIndex = 0;
|
|
25
|
+
this.reconnectTimeoutMs = reconnectTimeoutMs;
|
|
26
|
+
this._onPriceMessage = onPriceMessage;
|
|
27
|
+
}
|
|
28
|
+
connect() {
|
|
29
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
30
|
+
if (this._activeSocket) {
|
|
31
|
+
return;
|
|
32
|
+
}
|
|
33
|
+
const latencies = yield Promise.all(this.endpoints.map(endpoint => this.measureLatency(endpoint)));
|
|
34
|
+
// Sort endpoints by latency
|
|
35
|
+
this.endpoints.sort((a, b) => {
|
|
36
|
+
const aLatency = latencies[this.endpoints.indexOf(a)];
|
|
37
|
+
const bLatency = latencies[this.endpoints.indexOf(b)];
|
|
38
|
+
return aLatency - bLatency;
|
|
39
|
+
});
|
|
40
|
+
this._connect(this.endpoints[0]);
|
|
41
|
+
});
|
|
42
|
+
}
|
|
43
|
+
_connect(endpoint) {
|
|
44
|
+
this._activeSocket = new ws_1.default(endpoint);
|
|
45
|
+
this._activeSocket.onmessage = message => {
|
|
46
|
+
var _a;
|
|
47
|
+
// Ignore return pong messages
|
|
48
|
+
if (message.data === "pong") {
|
|
49
|
+
return;
|
|
50
|
+
}
|
|
51
|
+
(_a = this._onPriceMessage) === null || _a === void 0 ? void 0 : _a.call(this, message);
|
|
52
|
+
};
|
|
53
|
+
this._activeSocket.onclose = () => {
|
|
54
|
+
setTimeout(() => void this.fallbackToNextEndpoint(), this.reconnectTimeoutMs);
|
|
55
|
+
};
|
|
56
|
+
this._activeSocket.onerror = error => {
|
|
57
|
+
var _a;
|
|
58
|
+
console.error(`WebSocket error: ${error.message}`);
|
|
59
|
+
(_a = this._activeSocket) === null || _a === void 0 ? void 0 : _a.close();
|
|
60
|
+
};
|
|
61
|
+
}
|
|
62
|
+
fallbackToNextEndpoint() {
|
|
63
|
+
this.fallbackIndex = (this.fallbackIndex + 1) % this.endpoints.length;
|
|
64
|
+
const fallbackEndpoint = this.endpoints[this.fallbackIndex];
|
|
65
|
+
this._connect(fallbackEndpoint);
|
|
66
|
+
}
|
|
67
|
+
measureLatency(endpoint) {
|
|
68
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
69
|
+
return new Promise(resolve => {
|
|
70
|
+
const startTime = Date.now();
|
|
71
|
+
const socket = new ws_1.default(endpoint);
|
|
72
|
+
socket.onopen = () => {
|
|
73
|
+
socket.send("ping");
|
|
74
|
+
};
|
|
75
|
+
socket.onmessage = message => {
|
|
76
|
+
if (message.data === "pong") {
|
|
77
|
+
const latency = Date.now() - startTime;
|
|
78
|
+
socket.close();
|
|
79
|
+
resolve(latency);
|
|
80
|
+
}
|
|
81
|
+
};
|
|
82
|
+
socket.on("error", e => {
|
|
83
|
+
resolve(Number.MAX_VALUE);
|
|
84
|
+
});
|
|
85
|
+
// Backstop so we don't wait forever
|
|
86
|
+
setTimeout(() => {
|
|
87
|
+
socket.close();
|
|
88
|
+
resolve(2000);
|
|
89
|
+
}, 2000);
|
|
90
|
+
});
|
|
91
|
+
});
|
|
92
|
+
}
|
|
93
|
+
get activeSocket() {
|
|
94
|
+
// eslint-disable-next-line @typescript-eslint/no-unsafe-return
|
|
95
|
+
return this._activeSocket;
|
|
96
|
+
}
|
|
97
|
+
set onPriceMessage(callback) {
|
|
98
|
+
this._onPriceMessage = callback;
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
exports.PricingStreamClient = PricingStreamClient;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from "./PricingStreamClient";
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
14
|
+
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
15
|
+
};
|
|
16
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
+
__exportStar(require("./PricingStreamClient"), exports);
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@gainsnetwork/sdk",
|
|
3
|
-
"version": "0.0.
|
|
3
|
+
"version": "0.0.20-rc1",
|
|
4
4
|
"description": "Gains Network SDK",
|
|
5
5
|
"main": "./lib/index.js",
|
|
6
6
|
"files": [
|
|
@@ -30,6 +30,7 @@
|
|
|
30
30
|
"@types/jest": "^27.5.2",
|
|
31
31
|
"@types/luxon": "^3.2.0",
|
|
32
32
|
"@types/node": "^12.20.11",
|
|
33
|
+
"@types/ws": "^8.5.4",
|
|
33
34
|
"@typescript-eslint/eslint-plugin": "^4.22.0",
|
|
34
35
|
"@typescript-eslint/parser": "^4.22.0",
|
|
35
36
|
"conventional-changelog-conventionalcommits": "^5.0.0",
|
|
@@ -99,6 +100,8 @@
|
|
|
99
100
|
"@ethersproject/providers": "^5.7.2",
|
|
100
101
|
"ethcall": "^4.8.13",
|
|
101
102
|
"ethers": "^5.7.2",
|
|
102
|
-
"
|
|
103
|
+
"isomorphic-ws": "^5.0.0",
|
|
104
|
+
"luxon": "^3.2.0",
|
|
105
|
+
"ws": "^8.13.0"
|
|
103
106
|
}
|
|
104
107
|
}
|