@drift-labs/sdk 0.2.0-master.25 → 0.2.0-master.26

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 (184) hide show
  1. package/lib/accounts/pollingClearingHouseAccountSubscriber.d.ts +13 -13
  2. package/lib/accounts/pollingClearingHouseAccountSubscriber.js +27 -27
  3. package/lib/accounts/types.d.ts +8 -9
  4. package/lib/accounts/webSocketClearingHouseAccountSubscriber.d.ts +14 -14
  5. package/lib/accounts/webSocketClearingHouseAccountSubscriber.js +35 -34
  6. package/lib/addresses/pda.d.ts +7 -6
  7. package/lib/addresses/pda.js +31 -27
  8. package/lib/admin.d.ts +9 -6
  9. package/lib/admin.js +83 -42
  10. package/lib/clearingHouse.d.ts +69 -42
  11. package/lib/clearingHouse.js +753 -277
  12. package/lib/clearingHouseConfig.d.ts +2 -2
  13. package/lib/clearingHouseUser.d.ts +16 -16
  14. package/lib/clearingHouseUser.js +139 -119
  15. package/lib/config.d.ts +7 -7
  16. package/lib/config.js +20 -20
  17. package/lib/constants/numericConstants.d.ts +12 -12
  18. package/lib/constants/numericConstants.js +13 -13
  19. package/lib/constants/{markets.d.ts → perpMarkets.d.ts} +5 -5
  20. package/{src/constants/markets.js → lib/constants/perpMarkets.js} +4 -4
  21. package/lib/constants/{banks.d.ts → spotMarkets.d.ts} +6 -6
  22. package/lib/constants/{banks.js → spotMarkets.js} +16 -16
  23. package/lib/events/types.d.ts +2 -1
  24. package/lib/events/types.js +1 -0
  25. package/lib/examples/makeTradeExample.js +7 -7
  26. package/lib/idl/clearing_house.json +1008 -279
  27. package/lib/index.d.ts +5 -3
  28. package/lib/index.js +5 -3
  29. package/lib/math/amm.d.ts +2 -2
  30. package/lib/math/amm.js +1 -1
  31. package/lib/math/funding.d.ts +6 -6
  32. package/lib/math/funding.js +2 -1
  33. package/lib/math/margin.d.ts +4 -4
  34. package/lib/math/margin.js +18 -11
  35. package/lib/math/market.d.ts +10 -9
  36. package/lib/math/market.js +29 -6
  37. package/lib/math/oracles.d.ts +2 -1
  38. package/lib/math/oracles.js +11 -1
  39. package/lib/math/orders.d.ts +5 -5
  40. package/lib/math/position.d.ts +13 -13
  41. package/lib/math/position.js +19 -19
  42. package/lib/math/spotBalance.d.ts +19 -0
  43. package/lib/math/spotBalance.js +176 -0
  44. package/lib/math/spotMarket.d.ts +4 -0
  45. package/lib/math/spotMarket.js +8 -0
  46. package/lib/math/spotPosition.d.ts +2 -0
  47. package/lib/math/spotPosition.js +8 -0
  48. package/lib/math/state.js +2 -2
  49. package/lib/math/trade.d.ts +4 -4
  50. package/lib/orderParams.d.ts +4 -4
  51. package/lib/orderParams.js +12 -4
  52. package/lib/serum/serumSubscriber.d.ts +23 -0
  53. package/lib/serum/serumSubscriber.js +41 -0
  54. package/lib/serum/types.d.ts +11 -0
  55. package/lib/serum/types.js +2 -0
  56. package/lib/tx/retryTxSender.d.ts +1 -1
  57. package/lib/tx/retryTxSender.js +4 -2
  58. package/lib/tx/types.d.ts +1 -1
  59. package/lib/types.d.ts +123 -33
  60. package/lib/types.js +31 -9
  61. package/my-script/.env +7 -0
  62. package/my-script/getUserStats.ts +106 -0
  63. package/my-script/multiConnections.ts +119 -0
  64. package/my-script/test-regex.ts +11 -0
  65. package/my-script/utils.ts +52 -0
  66. package/package.json +1 -1
  67. package/src/accounts/bulkAccountLoader.js +249 -0
  68. package/src/accounts/bulkUserStatsSubscription.js +75 -0
  69. package/src/accounts/bulkUserSubscription.js +75 -0
  70. package/src/accounts/fetch.js +92 -0
  71. package/src/accounts/pollingClearingHouseAccountSubscriber.js +465 -0
  72. package/src/accounts/pollingClearingHouseAccountSubscriber.ts +38 -38
  73. package/src/accounts/pollingOracleSubscriber.js +156 -0
  74. package/src/accounts/pollingTokenAccountSubscriber.js +141 -0
  75. package/src/accounts/pollingUserAccountSubscriber.js +208 -0
  76. package/src/accounts/pollingUserStatsAccountSubscriber.js +208 -0
  77. package/src/accounts/types.js +28 -0
  78. package/src/accounts/types.ts +11 -9
  79. package/src/accounts/utils.js +7 -0
  80. package/src/accounts/webSocketAccountSubscriber.js +138 -0
  81. package/src/accounts/webSocketClearingHouseAccountSubscriber.js +433 -0
  82. package/src/accounts/webSocketClearingHouseAccountSubscriber.ts +59 -52
  83. package/src/accounts/webSocketUserAccountSubscriber.js +113 -0
  84. package/src/accounts/webSocketUserStatsAccountSubsriber.js +113 -0
  85. package/src/addresses/pda.js +186 -0
  86. package/src/addresses/pda.ts +49 -44
  87. package/src/admin.js +1284 -0
  88. package/src/admin.ts +140 -47
  89. package/src/assert/assert.js +1 -1
  90. package/src/clearingHouse.js +3433 -0
  91. package/src/clearingHouse.ts +1083 -378
  92. package/src/clearingHouseConfig.js +2 -0
  93. package/src/clearingHouseConfig.ts +2 -2
  94. package/src/clearingHouseUser.js +874 -0
  95. package/src/clearingHouseUser.ts +232 -168
  96. package/src/clearingHouseUserConfig.js +2 -0
  97. package/src/clearingHouseUserStats.js +115 -0
  98. package/src/clearingHouseUserStatsConfig.js +2 -0
  99. package/src/config.js +80 -0
  100. package/src/config.ts +29 -29
  101. package/src/constants/numericConstants.js +18 -11
  102. package/src/constants/numericConstants.ts +17 -15
  103. package/{lib/constants/markets.js → src/constants/perpMarkets.js} +11 -11
  104. package/src/constants/{markets.ts → perpMarkets.ts} +5 -5
  105. package/src/constants/spotMarkets.js +51 -0
  106. package/src/constants/{banks.ts → spotMarkets.ts} +19 -19
  107. package/src/events/eventList.js +66 -23
  108. package/src/events/eventSubscriber.js +202 -0
  109. package/src/events/fetchLogs.js +117 -0
  110. package/src/events/pollingLogProvider.js +113 -0
  111. package/src/events/sort.js +41 -0
  112. package/src/events/txEventCache.js +22 -19
  113. package/src/events/types.js +25 -0
  114. package/src/events/types.ts +3 -0
  115. package/src/events/webSocketLogProvider.js +76 -0
  116. package/src/examples/makeTradeExample.ts +10 -8
  117. package/src/factory/bigNum.js +183 -180
  118. package/src/factory/oracleClient.js +9 -9
  119. package/src/idl/clearing_house.json +1008 -279
  120. package/src/index.js +75 -0
  121. package/src/index.ts +5 -3
  122. package/src/math/amm.js +422 -0
  123. package/src/math/amm.ts +6 -3
  124. package/src/math/auction.js +10 -10
  125. package/src/math/conversion.js +4 -3
  126. package/src/math/funding.js +223 -175
  127. package/src/math/funding.ts +7 -7
  128. package/src/math/insurance.js +27 -0
  129. package/src/math/margin.js +77 -0
  130. package/src/math/margin.ts +34 -23
  131. package/src/math/market.js +105 -0
  132. package/src/math/market.ts +71 -19
  133. package/src/math/oracles.js +40 -10
  134. package/src/math/oracles.ts +18 -1
  135. package/src/math/orders.js +153 -0
  136. package/src/math/orders.ts +5 -5
  137. package/src/math/position.js +172 -0
  138. package/src/math/position.ts +31 -31
  139. package/src/math/repeg.js +40 -40
  140. package/src/math/spotBalance.js +176 -0
  141. package/src/math/spotBalance.ts +290 -0
  142. package/src/math/spotMarket.js +8 -0
  143. package/src/math/spotMarket.ts +9 -0
  144. package/src/math/spotPosition.js +8 -0
  145. package/src/math/spotPosition.ts +6 -0
  146. package/src/math/state.ts +2 -2
  147. package/src/math/trade.js +81 -74
  148. package/src/math/trade.ts +4 -4
  149. package/src/math/utils.js +8 -7
  150. package/src/oracles/oracleClientCache.js +10 -9
  151. package/src/oracles/pythClient.js +52 -17
  152. package/src/oracles/quoteAssetOracleClient.js +44 -13
  153. package/src/oracles/switchboardClient.js +69 -37
  154. package/src/oracles/types.js +1 -1
  155. package/src/orderParams.js +14 -6
  156. package/src/orderParams.ts +16 -8
  157. package/src/serum/serumSubscriber.js +102 -0
  158. package/src/serum/serumSubscriber.ts +80 -0
  159. package/src/serum/types.js +2 -0
  160. package/src/serum/types.ts +13 -0
  161. package/src/slot/SlotSubscriber.js +67 -20
  162. package/src/token/index.js +4 -4
  163. package/src/tokenFaucet.js +288 -154
  164. package/src/tx/retryTxSender.js +280 -0
  165. package/src/tx/retryTxSender.ts +5 -2
  166. package/src/tx/types.js +1 -1
  167. package/src/tx/types.ts +2 -1
  168. package/src/tx/utils.js +7 -6
  169. package/src/types.js +216 -0
  170. package/src/types.ts +110 -33
  171. package/src/userName.js +5 -5
  172. package/src/util/computeUnits.js +46 -11
  173. package/src/util/promiseTimeout.js +5 -5
  174. package/src/util/tps.js +46 -12
  175. package/src/wallet.js +55 -18
  176. package/lib/math/bankBalance.d.ts +0 -15
  177. package/lib/math/bankBalance.js +0 -150
  178. package/src/addresses/marketAddresses.js +0 -26
  179. package/src/constants/banks.js +0 -42
  180. package/src/examples/makeTradeExample.js +0 -80
  181. package/src/math/bankBalance.ts +0 -258
  182. package/src/math/state.js +0 -15
  183. package/src/math/utils.js.map +0 -1
  184. package/src/util/getTokenAddress.js +0 -9
@@ -0,0 +1,208 @@
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 __generator = (this && this.__generator) || function (thisArg, body) {
12
+ var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
13
+ return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
14
+ function verb(n) { return function (v) { return step([n, v]); }; }
15
+ function step(op) {
16
+ if (f) throw new TypeError("Generator is already executing.");
17
+ while (_) try {
18
+ if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
19
+ if (y = 0, t) op = [op[0] & 2, t.value];
20
+ switch (op[0]) {
21
+ case 0: case 1: t = op; break;
22
+ case 4: _.label++; return { value: op[1], done: false };
23
+ case 5: _.label++; y = op[1]; op = [0]; continue;
24
+ case 7: op = _.ops.pop(); _.trys.pop(); continue;
25
+ default:
26
+ if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
27
+ if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
28
+ if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
29
+ if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
30
+ if (t[2]) _.ops.pop();
31
+ _.trys.pop(); continue;
32
+ }
33
+ op = body.call(thisArg, _);
34
+ } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
35
+ if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
36
+ }
37
+ };
38
+ exports.__esModule = true;
39
+ exports.PollingUserStatsAccountSubscriber = void 0;
40
+ var types_1 = require("./types");
41
+ var events_1 = require("events");
42
+ var utils_1 = require("./utils");
43
+ var PollingUserStatsAccountSubscriber = /** @class */ (function () {
44
+ function PollingUserStatsAccountSubscriber(program, userStatsAccountPublicKey, accountLoader) {
45
+ this.accountsToPoll = new Map();
46
+ this.isSubscribed = false;
47
+ this.program = program;
48
+ this.accountLoader = accountLoader;
49
+ this.eventEmitter = new events_1.EventEmitter();
50
+ this.userStatsAccountPublicKey = userStatsAccountPublicKey;
51
+ }
52
+ PollingUserStatsAccountSubscriber.prototype.subscribe = function () {
53
+ return __awaiter(this, void 0, void 0, function () {
54
+ var subscriptionSucceeded, retries;
55
+ return __generator(this, function (_a) {
56
+ switch (_a.label) {
57
+ case 0:
58
+ if (this.isSubscribed) {
59
+ return [2 /*return*/, true];
60
+ }
61
+ return [4 /*yield*/, this.addToAccountLoader()];
62
+ case 1:
63
+ _a.sent();
64
+ subscriptionSucceeded = false;
65
+ retries = 0;
66
+ _a.label = 2;
67
+ case 2:
68
+ if (!(!subscriptionSucceeded && retries < 5)) return [3 /*break*/, 4];
69
+ return [4 /*yield*/, this.fetchIfUnloaded()];
70
+ case 3:
71
+ _a.sent();
72
+ subscriptionSucceeded = this.didSubscriptionSucceed();
73
+ retries++;
74
+ return [3 /*break*/, 2];
75
+ case 4:
76
+ if (subscriptionSucceeded) {
77
+ this.eventEmitter.emit('update');
78
+ }
79
+ this.isSubscribed = subscriptionSucceeded;
80
+ return [2 /*return*/, subscriptionSucceeded];
81
+ }
82
+ });
83
+ });
84
+ };
85
+ PollingUserStatsAccountSubscriber.prototype.addToAccountLoader = function () {
86
+ return __awaiter(this, void 0, void 0, function () {
87
+ var _loop_1, this_1, _i, _a, _b, _1, accountToPoll;
88
+ var _this = this;
89
+ return __generator(this, function (_c) {
90
+ if (this.accountsToPoll.size > 0) {
91
+ return [2 /*return*/];
92
+ }
93
+ this.accountsToPoll.set(this.userStatsAccountPublicKey.toString(), {
94
+ key: 'userStats',
95
+ publicKey: this.userStatsAccountPublicKey,
96
+ eventType: 'userStatsAccountUpdate'
97
+ });
98
+ _loop_1 = function (_1, accountToPoll) {
99
+ accountToPoll.callbackId = this_1.accountLoader.addAccount(accountToPoll.publicKey, function (buffer, slot) {
100
+ if (!buffer) {
101
+ return;
102
+ }
103
+ var account = _this.program.account[accountToPoll.key].coder.accounts.decode((0, utils_1.capitalize)(accountToPoll.key), buffer);
104
+ _this[accountToPoll.key] = { data: account, slot: slot };
105
+ // @ts-ignore
106
+ _this.eventEmitter.emit(accountToPoll.eventType, account);
107
+ _this.eventEmitter.emit('update');
108
+ });
109
+ };
110
+ this_1 = this;
111
+ for (_i = 0, _a = this.accountsToPoll; _i < _a.length; _i++) {
112
+ _b = _a[_i], _1 = _b[0], accountToPoll = _b[1];
113
+ _loop_1(_1, accountToPoll);
114
+ }
115
+ this.errorCallbackId = this.accountLoader.addErrorCallbacks(function (error) {
116
+ _this.eventEmitter.emit('error', error);
117
+ });
118
+ return [2 /*return*/];
119
+ });
120
+ });
121
+ };
122
+ PollingUserStatsAccountSubscriber.prototype.fetchIfUnloaded = function () {
123
+ return __awaiter(this, void 0, void 0, function () {
124
+ var shouldFetch, _i, _a, _b, _2, accountToPoll;
125
+ return __generator(this, function (_c) {
126
+ switch (_c.label) {
127
+ case 0:
128
+ shouldFetch = false;
129
+ for (_i = 0, _a = this.accountsToPoll; _i < _a.length; _i++) {
130
+ _b = _a[_i], _2 = _b[0], accountToPoll = _b[1];
131
+ if (this[accountToPoll.key] === undefined) {
132
+ shouldFetch = true;
133
+ break;
134
+ }
135
+ }
136
+ if (!shouldFetch) return [3 /*break*/, 2];
137
+ return [4 /*yield*/, this.fetch()];
138
+ case 1:
139
+ _c.sent();
140
+ _c.label = 2;
141
+ case 2: return [2 /*return*/];
142
+ }
143
+ });
144
+ });
145
+ };
146
+ PollingUserStatsAccountSubscriber.prototype.fetch = function () {
147
+ return __awaiter(this, void 0, void 0, function () {
148
+ var _i, _a, _b, _3, accountToPoll, _c, buffer, slot, account;
149
+ return __generator(this, function (_d) {
150
+ switch (_d.label) {
151
+ case 0: return [4 /*yield*/, this.accountLoader.load()];
152
+ case 1:
153
+ _d.sent();
154
+ for (_i = 0, _a = this.accountsToPoll; _i < _a.length; _i++) {
155
+ _b = _a[_i], _3 = _b[0], accountToPoll = _b[1];
156
+ _c = this.accountLoader.getBufferAndSlot(accountToPoll.publicKey), buffer = _c.buffer, slot = _c.slot;
157
+ if (buffer) {
158
+ account = this.program.account[accountToPoll.key].coder.accounts.decode((0, utils_1.capitalize)(accountToPoll.key), buffer);
159
+ this[accountToPoll.key] = { data: account, slot: slot };
160
+ }
161
+ }
162
+ return [2 /*return*/];
163
+ }
164
+ });
165
+ });
166
+ };
167
+ PollingUserStatsAccountSubscriber.prototype.didSubscriptionSucceed = function () {
168
+ var success = true;
169
+ for (var _i = 0, _a = this.accountsToPoll; _i < _a.length; _i++) {
170
+ var _b = _a[_i], _4 = _b[0], accountToPoll = _b[1];
171
+ if (!this[accountToPoll.key]) {
172
+ success = false;
173
+ break;
174
+ }
175
+ }
176
+ return success;
177
+ };
178
+ PollingUserStatsAccountSubscriber.prototype.unsubscribe = function () {
179
+ return __awaiter(this, void 0, void 0, function () {
180
+ var _i, _a, _b, _5, accountToPoll;
181
+ return __generator(this, function (_c) {
182
+ if (!this.isSubscribed) {
183
+ return [2 /*return*/];
184
+ }
185
+ for (_i = 0, _a = this.accountsToPoll; _i < _a.length; _i++) {
186
+ _b = _a[_i], _5 = _b[0], accountToPoll = _b[1];
187
+ this.accountLoader.removeAccount(accountToPoll.publicKey, accountToPoll.callbackId);
188
+ }
189
+ this.accountLoader.removeErrorCallbacks(this.errorCallbackId);
190
+ this.errorCallbackId = undefined;
191
+ this.accountsToPoll.clear();
192
+ this.isSubscribed = false;
193
+ return [2 /*return*/];
194
+ });
195
+ });
196
+ };
197
+ PollingUserStatsAccountSubscriber.prototype.assertIsSubscribed = function () {
198
+ if (!this.isSubscribed) {
199
+ throw new types_1.NotSubscribedError('You must call `subscribe` before using this function');
200
+ }
201
+ };
202
+ PollingUserStatsAccountSubscriber.prototype.getUserStatsAccountAndSlot = function () {
203
+ this.assertIsSubscribed();
204
+ return this.userStats;
205
+ };
206
+ return PollingUserStatsAccountSubscriber;
207
+ }());
208
+ exports.PollingUserStatsAccountSubscriber = PollingUserStatsAccountSubscriber;
@@ -0,0 +1,28 @@
1
+ "use strict";
2
+ var __extends = (this && this.__extends) || (function () {
3
+ var extendStatics = function (d, b) {
4
+ extendStatics = Object.setPrototypeOf ||
5
+ ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
6
+ function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };
7
+ return extendStatics(d, b);
8
+ };
9
+ return function (d, b) {
10
+ if (typeof b !== "function" && b !== null)
11
+ throw new TypeError("Class extends value " + String(b) + " is not a constructor or null");
12
+ extendStatics(d, b);
13
+ function __() { this.constructor = d; }
14
+ d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
15
+ };
16
+ })();
17
+ exports.__esModule = true;
18
+ exports.NotSubscribedError = void 0;
19
+ var NotSubscribedError = /** @class */ (function (_super) {
20
+ __extends(NotSubscribedError, _super);
21
+ function NotSubscribedError() {
22
+ var _this = _super !== null && _super.apply(this, arguments) || this;
23
+ _this.name = 'NotSubscribedError';
24
+ return _this;
25
+ }
26
+ return NotSubscribedError;
27
+ }(Error));
28
+ exports.NotSubscribedError = NotSubscribedError;
@@ -1,6 +1,6 @@
1
1
  import {
2
- BankAccount,
3
- MarketAccount,
2
+ SpotMarketAccount,
3
+ PerpMarketAccount,
4
4
  OracleSource,
5
5
  StateAccount,
6
6
  UserAccount,
@@ -26,8 +26,8 @@ export class NotSubscribedError extends Error {
26
26
 
27
27
  export interface ClearingHouseAccountEvents {
28
28
  stateAccountUpdate: (payload: StateAccount) => void;
29
- marketAccountUpdate: (payload: MarketAccount) => void;
30
- bankAccountUpdate: (payload: BankAccount) => void;
29
+ perpMarketAccountUpdate: (payload: PerpMarketAccount) => void;
30
+ spotMarketAccountUpdate: (payload: SpotMarketAccount) => void;
31
31
  oraclePriceUpdate: (publicKey: PublicKey, data: OraclePriceData) => void;
32
32
  userAccountUpdate: (payload: UserAccount) => void;
33
33
  update: void;
@@ -42,16 +42,18 @@ export interface ClearingHouseAccountSubscriber {
42
42
  fetch(): Promise<void>;
43
43
  unsubscribe(): Promise<void>;
44
44
 
45
- addMarket(marketIndex: BN): Promise<boolean>;
46
- addBank(bankIndex: BN): Promise<boolean>;
45
+ addPerpMarket(marketIndex: BN): Promise<boolean>;
46
+ addSpotMarket(marketIndex: BN): Promise<boolean>;
47
47
  addOracle(oracleInfo: OracleInfo): Promise<boolean>;
48
48
 
49
49
  getStateAccountAndSlot(): DataAndSlot<StateAccount>;
50
50
  getMarketAccountAndSlot(
51
51
  marketIndex: BN
52
- ): DataAndSlot<MarketAccount> | undefined;
53
- getMarketAccountsAndSlots(): DataAndSlot<MarketAccount>[];
54
- getBankAccountAndSlot(bankIndex: BN): DataAndSlot<BankAccount> | undefined;
52
+ ): DataAndSlot<PerpMarketAccount> | undefined;
53
+ getMarketAccountsAndSlots(): DataAndSlot<PerpMarketAccount>[];
54
+ getSpotMarketAccountAndSlot(
55
+ marketIndex: BN
56
+ ): DataAndSlot<SpotMarketAccount> | undefined;
55
57
  getOraclePriceDataAndSlot(
56
58
  oraclePublicKey: PublicKey
57
59
  ): DataAndSlot<OraclePriceData> | undefined;
@@ -0,0 +1,7 @@
1
+ "use strict";
2
+ exports.__esModule = true;
3
+ exports.capitalize = void 0;
4
+ function capitalize(value) {
5
+ return value[0].toUpperCase() + value.slice(1);
6
+ }
7
+ exports.capitalize = capitalize;
@@ -0,0 +1,138 @@
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 __generator = (this && this.__generator) || function (thisArg, body) {
12
+ var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
13
+ return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
14
+ function verb(n) { return function (v) { return step([n, v]); }; }
15
+ function step(op) {
16
+ if (f) throw new TypeError("Generator is already executing.");
17
+ while (_) try {
18
+ if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
19
+ if (y = 0, t) op = [op[0] & 2, t.value];
20
+ switch (op[0]) {
21
+ case 0: case 1: t = op; break;
22
+ case 4: _.label++; return { value: op[1], done: false };
23
+ case 5: _.label++; y = op[1]; op = [0]; continue;
24
+ case 7: op = _.ops.pop(); _.trys.pop(); continue;
25
+ default:
26
+ if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
27
+ if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
28
+ if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
29
+ if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
30
+ if (t[2]) _.ops.pop();
31
+ _.trys.pop(); continue;
32
+ }
33
+ op = body.call(thisArg, _);
34
+ } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
35
+ if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
36
+ }
37
+ };
38
+ exports.__esModule = true;
39
+ exports.WebSocketAccountSubscriber = void 0;
40
+ var utils_1 = require("./utils");
41
+ var WebSocketAccountSubscriber = /** @class */ (function () {
42
+ function WebSocketAccountSubscriber(accountName, program, accountPublicKey, decodeBuffer) {
43
+ this.accountName = accountName;
44
+ this.program = program;
45
+ this.accountPublicKey = accountPublicKey;
46
+ this.decodeBufferFn = decodeBuffer;
47
+ }
48
+ WebSocketAccountSubscriber.prototype.subscribe = function (onChange) {
49
+ return __awaiter(this, void 0, void 0, function () {
50
+ var _this = this;
51
+ return __generator(this, function (_a) {
52
+ switch (_a.label) {
53
+ case 0:
54
+ if (this.listenerId) {
55
+ return [2 /*return*/];
56
+ }
57
+ this.onChange = onChange;
58
+ return [4 /*yield*/, this.fetch()];
59
+ case 1:
60
+ _a.sent();
61
+ this.listenerId = this.program.provider.connection.onAccountChange(this.accountPublicKey, function (accountInfo, context) {
62
+ _this.handleRpcResponse(context, accountInfo);
63
+ }, this.program.provider.opts.commitment);
64
+ return [2 /*return*/];
65
+ }
66
+ });
67
+ });
68
+ };
69
+ WebSocketAccountSubscriber.prototype.fetch = function () {
70
+ return __awaiter(this, void 0, void 0, function () {
71
+ var rpcResponse;
72
+ return __generator(this, function (_a) {
73
+ switch (_a.label) {
74
+ case 0: return [4 /*yield*/, this.program.provider.connection.getAccountInfoAndContext(this.accountPublicKey, this.program.provider.opts.commitment)];
75
+ case 1:
76
+ rpcResponse = _a.sent();
77
+ this.handleRpcResponse(rpcResponse.context, rpcResponse === null || rpcResponse === void 0 ? void 0 : rpcResponse.value);
78
+ return [2 /*return*/];
79
+ }
80
+ });
81
+ });
82
+ };
83
+ WebSocketAccountSubscriber.prototype.handleRpcResponse = function (context, accountInfo) {
84
+ var newSlot = context.slot;
85
+ var newBuffer = undefined;
86
+ if (accountInfo) {
87
+ newBuffer = accountInfo.data;
88
+ }
89
+ if (!this.bufferAndSlot) {
90
+ this.bufferAndSlot = {
91
+ buffer: newBuffer,
92
+ slot: newSlot
93
+ };
94
+ if (newBuffer) {
95
+ var account = this.decodeBuffer(newBuffer);
96
+ this.dataAndSlot = {
97
+ data: account,
98
+ slot: newSlot
99
+ };
100
+ this.onChange(account);
101
+ }
102
+ return;
103
+ }
104
+ if (newSlot <= this.bufferAndSlot.slot) {
105
+ return;
106
+ }
107
+ var oldBuffer = this.bufferAndSlot.buffer;
108
+ if (newBuffer && (!oldBuffer || !newBuffer.equals(oldBuffer))) {
109
+ this.bufferAndSlot = {
110
+ buffer: newBuffer,
111
+ slot: newSlot
112
+ };
113
+ var account = this.decodeBuffer(newBuffer);
114
+ this.dataAndSlot = {
115
+ data: account,
116
+ slot: newSlot
117
+ };
118
+ this.onChange(account);
119
+ }
120
+ };
121
+ WebSocketAccountSubscriber.prototype.decodeBuffer = function (buffer) {
122
+ if (this.decodeBufferFn) {
123
+ return this.decodeBufferFn(buffer);
124
+ }
125
+ else {
126
+ return this.program.account[this.accountName].coder.accounts.decode((0, utils_1.capitalize)(this.accountName), buffer);
127
+ }
128
+ };
129
+ WebSocketAccountSubscriber.prototype.unsubscribe = function () {
130
+ if (this.listenerId) {
131
+ var promise = this.program.provider.connection.removeAccountChangeListener(this.listenerId);
132
+ this.listenerId = undefined;
133
+ return promise;
134
+ }
135
+ };
136
+ return WebSocketAccountSubscriber;
137
+ }());
138
+ exports.WebSocketAccountSubscriber = WebSocketAccountSubscriber;