@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.
@@ -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
+ };
@@ -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
@@ -1,3 +1,5 @@
1
1
  export * from "./trade";
2
2
  export * from "./contracts";
3
3
  export * from "./markets";
4
+ export * from "./constants";
5
+ export * from "./prices";
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.18",
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
- "luxon": "^3.2.0"
103
+ "isomorphic-ws": "^5.0.0",
104
+ "luxon": "^3.2.0",
105
+ "ws": "^8.13.0"
103
106
  }
104
107
  }