@drift-labs/sdk 0.1.36-master.7 → 0.2.0-master.10

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 (254) hide show
  1. package/lib/accounts/bulkAccountLoader.d.ts +6 -6
  2. package/lib/accounts/bulkAccountLoader.js +81 -95
  3. package/lib/accounts/bulkUserSubscription.js +13 -57
  4. package/lib/accounts/fetch.d.ts +4 -0
  5. package/lib/accounts/fetch.js +18 -0
  6. package/lib/accounts/pollingClearingHouseAccountSubscriber.d.ts +34 -38
  7. package/lib/accounts/pollingClearingHouseAccountSubscriber.js +224 -224
  8. package/lib/accounts/pollingOracleSubscriber.d.ts +3 -3
  9. package/lib/accounts/pollingOracleSubscriber.js +37 -49
  10. package/lib/accounts/pollingTokenAccountSubscriber.d.ts +3 -3
  11. package/lib/accounts/pollingTokenAccountSubscriber.js +35 -50
  12. package/lib/accounts/pollingUserAccountSubscriber.d.ts +7 -13
  13. package/lib/accounts/pollingUserAccountSubscriber.js +71 -134
  14. package/lib/accounts/types.d.ts +34 -41
  15. package/lib/accounts/webSocketAccountSubscriber.d.ts +6 -4
  16. package/lib/accounts/webSocketAccountSubscriber.js +39 -35
  17. package/lib/accounts/webSocketClearingHouseAccountSubscriber.d.ts +33 -28
  18. package/lib/accounts/webSocketClearingHouseAccountSubscriber.js +153 -185
  19. package/lib/accounts/webSocketUserAccountSubscriber.d.ts +5 -11
  20. package/lib/accounts/webSocketUserAccountSubscriber.js +22 -67
  21. package/lib/addresses/marketAddresses.d.ts +4 -0
  22. package/lib/addresses/marketAddresses.js +15 -0
  23. package/lib/addresses/pda.d.ts +12 -0
  24. package/lib/addresses/pda.js +83 -0
  25. package/lib/admin.d.ts +12 -18
  26. package/lib/admin.js +398 -558
  27. package/lib/clearingHouse.d.ts +83 -109
  28. package/lib/clearingHouse.js +832 -893
  29. package/lib/clearingHouseConfig.d.ts +34 -0
  30. package/lib/clearingHouseConfig.js +2 -0
  31. package/lib/clearingHouseUser.d.ts +19 -22
  32. package/lib/clearingHouseUser.js +155 -141
  33. package/lib/clearingHouseUserConfig.d.ts +14 -0
  34. package/lib/clearingHouseUserConfig.js +2 -0
  35. package/lib/config.d.ts +12 -0
  36. package/lib/config.js +35 -4
  37. package/lib/constants/banks.d.ts +16 -0
  38. package/lib/constants/banks.js +41 -0
  39. package/lib/constants/markets.d.ts +8 -3
  40. package/lib/constants/markets.js +13 -206
  41. package/lib/constants/numericConstants.d.ts +17 -0
  42. package/lib/constants/numericConstants.js +23 -6
  43. package/lib/events/eventList.d.ts +22 -0
  44. package/lib/events/eventList.js +77 -0
  45. package/lib/events/eventSubscriber.d.ts +34 -0
  46. package/lib/events/eventSubscriber.js +126 -0
  47. package/lib/events/fetchLogs.d.ts +13 -0
  48. package/lib/events/fetchLogs.js +39 -0
  49. package/lib/events/pollingLogProvider.d.ts +15 -0
  50. package/lib/events/pollingLogProvider.js +53 -0
  51. package/lib/events/sort.d.ts +2 -0
  52. package/lib/events/sort.js +44 -0
  53. package/lib/events/txEventCache.d.ts +24 -0
  54. package/lib/events/txEventCache.js +71 -0
  55. package/lib/events/types.d.ts +49 -0
  56. package/lib/events/types.js +20 -0
  57. package/lib/events/webSocketLogProvider.d.ts +12 -0
  58. package/lib/events/webSocketLogProvider.js +30 -0
  59. package/lib/examples/makeTradeExample.js +26 -27
  60. package/lib/factory/bigNum.d.ts +118 -0
  61. package/lib/factory/bigNum.js +364 -0
  62. package/lib/factory/oracleClient.d.ts +1 -2
  63. package/lib/factory/oracleClient.js +6 -2
  64. package/lib/idl/clearing_house.json +2258 -2774
  65. package/lib/index.d.ts +14 -5
  66. package/lib/index.js +18 -5
  67. package/lib/math/amm.d.ts +24 -29
  68. package/lib/math/amm.js +209 -176
  69. package/lib/math/auction.d.ts +5 -0
  70. package/lib/math/auction.js +42 -0
  71. package/lib/math/bankBalance.d.ts +9 -0
  72. package/lib/math/bankBalance.js +75 -0
  73. package/lib/math/conversion.d.ts +0 -1
  74. package/lib/math/conversion.js +1 -5
  75. package/lib/math/funding.d.ts +6 -6
  76. package/lib/math/funding.js +158 -175
  77. package/lib/math/market.d.ts +6 -6
  78. package/lib/math/market.js +10 -9
  79. package/lib/math/orders.d.ts +6 -1
  80. package/lib/math/orders.js +38 -1
  81. package/lib/math/position.d.ts +7 -5
  82. package/lib/math/position.js +29 -27
  83. package/lib/math/repeg.d.ts +22 -0
  84. package/lib/math/repeg.js +128 -0
  85. package/lib/math/trade.d.ts +5 -4
  86. package/lib/math/trade.js +29 -24
  87. package/lib/mockUSDCFaucet.js +87 -116
  88. package/lib/oracles/oracleClientCache.d.ts +8 -0
  89. package/lib/oracles/oracleClientCache.js +19 -0
  90. package/lib/oracles/pythClient.d.ts +3 -5
  91. package/lib/oracles/pythClient.js +12 -31
  92. package/lib/oracles/quoteAssetOracleClient.d.ts +9 -0
  93. package/lib/oracles/quoteAssetOracleClient.js +21 -0
  94. package/lib/oracles/switchboardClient.d.ts +3 -5
  95. package/lib/oracles/switchboardClient.js +29 -50
  96. package/lib/oracles/types.d.ts +6 -1
  97. package/lib/orderParams.d.ts +14 -5
  98. package/lib/orderParams.js +8 -96
  99. package/lib/orders.d.ts +6 -7
  100. package/lib/orders.js +11 -89
  101. package/lib/slot/SlotSubscriber.d.ts +19 -0
  102. package/lib/slot/SlotSubscriber.js +26 -0
  103. package/lib/tx/retryTxSender.d.ts +2 -2
  104. package/lib/tx/retryTxSender.js +108 -123
  105. package/lib/tx/types.d.ts +5 -1
  106. package/lib/tx/utils.d.ts +1 -1
  107. package/lib/tx/utils.js +11 -2
  108. package/lib/types.d.ts +180 -110
  109. package/lib/types.js +54 -1
  110. package/lib/userName.d.ts +4 -0
  111. package/lib/userName.js +20 -0
  112. package/lib/util/computeUnits.js +10 -21
  113. package/lib/util/tps.js +11 -22
  114. package/lib/wallet.js +7 -20
  115. package/package.json +11 -4
  116. package/src/accounts/bulkAccountLoader.js +197 -0
  117. package/src/accounts/bulkAccountLoader.ts +21 -15
  118. package/src/accounts/bulkUserSubscription.js +33 -0
  119. package/src/accounts/bulkUserSubscription.ts +1 -45
  120. package/src/accounts/fetch.js +29 -0
  121. package/src/accounts/fetch.ts +33 -0
  122. package/src/accounts/pollingClearingHouseAccountSubscriber.js +311 -0
  123. package/src/accounts/pollingClearingHouseAccountSubscriber.ts +249 -214
  124. package/src/accounts/pollingOracleSubscriber.js +93 -0
  125. package/src/accounts/pollingOracleSubscriber.ts +16 -8
  126. package/src/accounts/pollingTokenAccountSubscriber.js +90 -0
  127. package/src/accounts/pollingTokenAccountSubscriber.ts +11 -8
  128. package/src/accounts/pollingUserAccountSubscriber.js +132 -0
  129. package/src/accounts/pollingUserAccountSubscriber.ts +21 -86
  130. package/src/accounts/types.js +10 -0
  131. package/src/accounts/types.ts +41 -70
  132. package/src/accounts/utils.js +7 -0
  133. package/src/accounts/webSocketAccountSubscriber.js +93 -0
  134. package/src/accounts/webSocketAccountSubscriber.ts +33 -16
  135. package/src/accounts/webSocketClearingHouseAccountSubscriber.js +233 -0
  136. package/src/accounts/webSocketClearingHouseAccountSubscriber.ts +190 -240
  137. package/src/accounts/webSocketUserAccountSubscriber.js +62 -0
  138. package/src/accounts/webSocketUserAccountSubscriber.ts +11 -71
  139. package/src/addresses/marketAddresses.js +26 -0
  140. package/src/addresses/marketAddresses.ts +18 -0
  141. package/{lib/addresses.js → src/addresses/pda.js} +45 -34
  142. package/src/addresses/pda.ts +118 -0
  143. package/src/admin.ts +247 -336
  144. package/src/assert/assert.js +9 -0
  145. package/src/clearingHouse.ts +1023 -1026
  146. package/src/clearingHouseConfig.ts +37 -0
  147. package/src/clearingHouseUser.ts +275 -185
  148. package/src/clearingHouseUserConfig.ts +18 -0
  149. package/src/config.ts +54 -1
  150. package/src/constants/banks.ts +50 -0
  151. package/src/constants/markets.ts +16 -207
  152. package/src/constants/numericConstants.ts +34 -5
  153. package/src/events/eventList.js +77 -0
  154. package/src/events/eventList.ts +94 -0
  155. package/src/events/eventSubscriber.js +139 -0
  156. package/src/events/eventSubscriber.ts +194 -0
  157. package/src/events/fetchLogs.js +50 -0
  158. package/src/events/fetchLogs.ts +80 -0
  159. package/src/events/pollingLogProvider.js +64 -0
  160. package/src/events/pollingLogProvider.ts +79 -0
  161. package/src/events/sort.js +44 -0
  162. package/src/events/sort.ts +65 -0
  163. package/src/events/txEventCache.js +71 -0
  164. package/src/events/txEventCache.ts +74 -0
  165. package/src/events/types.js +20 -0
  166. package/src/events/types.ts +98 -0
  167. package/src/events/webSocketLogProvider.js +41 -0
  168. package/src/events/webSocketLogProvider.ts +38 -0
  169. package/src/examples/makeTradeExample.js +80 -0
  170. package/src/examples/makeTradeExample.ts +20 -11
  171. package/src/factory/bigNum.js +364 -0
  172. package/src/factory/bigNum.ts +524 -0
  173. package/src/factory/oracleClient.js +20 -0
  174. package/src/factory/oracleClient.ts +7 -4
  175. package/src/idl/clearing_house.json +2258 -2774
  176. package/src/index.js +69 -0
  177. package/src/index.ts +14 -5
  178. package/src/math/amm.js +369 -0
  179. package/src/math/amm.ts +382 -243
  180. package/src/math/auction.js +42 -0
  181. package/src/math/auction.ts +43 -0
  182. package/src/math/bankBalance.js +75 -0
  183. package/src/math/bankBalance.ts +112 -0
  184. package/src/math/conversion.js +11 -0
  185. package/src/math/conversion.ts +1 -11
  186. package/src/math/funding.js +248 -0
  187. package/src/math/funding.ts +12 -9
  188. package/src/math/market.js +57 -0
  189. package/src/math/market.ts +37 -30
  190. package/src/math/oracles.js +26 -0
  191. package/src/math/orders.js +110 -0
  192. package/src/math/orders.ts +43 -1
  193. package/src/math/position.js +140 -0
  194. package/src/math/position.ts +52 -35
  195. package/src/math/repeg.js +128 -0
  196. package/src/math/repeg.ts +176 -0
  197. package/src/math/state.js +15 -0
  198. package/src/math/trade.js +253 -0
  199. package/src/math/trade.ts +55 -47
  200. package/src/math/utils.js +26 -0
  201. package/src/math/utils.js.map +1 -0
  202. package/src/mockUSDCFaucet.js +171 -0
  203. package/src/oracles/oracleClientCache.js +19 -0
  204. package/src/oracles/oracleClientCache.ts +20 -0
  205. package/src/oracles/pythClient.js +46 -0
  206. package/src/oracles/pythClient.ts +4 -11
  207. package/src/oracles/quoteAssetOracleClient.js +32 -0
  208. package/src/oracles/quoteAssetOracleClient.ts +25 -0
  209. package/src/oracles/switchboardClient.js +69 -0
  210. package/src/oracles/switchboardClient.ts +11 -24
  211. package/src/oracles/types.js +2 -0
  212. package/src/oracles/types.ts +7 -1
  213. package/src/orderParams.js +20 -0
  214. package/src/orderParams.ts +20 -141
  215. package/src/orders.js +134 -0
  216. package/src/orders.ts +25 -134
  217. package/src/slot/SlotSubscriber.js +39 -0
  218. package/src/slot/SlotSubscriber.ts +42 -0
  219. package/src/token/index.js +38 -0
  220. package/src/tx/retryTxSender.js +188 -0
  221. package/src/tx/retryTxSender.ts +6 -4
  222. package/src/tx/types.js +2 -0
  223. package/src/tx/types.ts +6 -1
  224. package/src/tx/utils.js +17 -0
  225. package/src/tx/utils.ts +22 -3
  226. package/src/types.js +114 -0
  227. package/src/types.ts +176 -124
  228. package/src/userName.js +20 -0
  229. package/src/userName.ts +20 -0
  230. package/src/util/promiseTimeout.js +14 -0
  231. package/src/util/tps.js +27 -0
  232. package/src/wallet.js +35 -0
  233. package/tests/bn/test.ts +255 -0
  234. package/tsconfig.json +12 -12
  235. package/lib/addresses.d.ts +0 -10
  236. package/lib/constants/accounts.d.ts +0 -15
  237. package/lib/constants/accounts.js +0 -18
  238. package/lib/factory/clearingHouse.d.ts +0 -35
  239. package/lib/factory/clearingHouse.js +0 -81
  240. package/lib/factory/clearingHouseUser.d.ts +0 -19
  241. package/lib/factory/clearingHouseUser.js +0 -34
  242. package/lib/math/insuranceFund.d.ts +0 -15
  243. package/lib/math/insuranceFund.js +0 -33
  244. package/lib/settlement.d.ts +0 -4
  245. package/lib/settlement.js +0 -10
  246. package/lib/tx/defaultTxSender.d.ts +0 -8
  247. package/lib/tx/defaultTxSender.js +0 -12
  248. package/src/addresses.ts +0 -82
  249. package/src/constants/accounts.ts +0 -26
  250. package/src/factory/clearingHouse.ts +0 -173
  251. package/src/factory/clearingHouseUser.ts +0 -73
  252. package/src/math/insuranceFund.ts +0 -29
  253. package/src/settlement.ts +0 -9
  254. package/src/tx/defaultTxSender.ts +0 -24
@@ -0,0 +1,311 @@
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
+ Object.defineProperty(exports, "__esModule", { value: true });
12
+ exports.PollingClearingHouseAccountSubscriber = void 0;
13
+ const types_1 = require("./types");
14
+ const events_1 = require("events");
15
+ const pda_1 = require("../addresses/pda");
16
+ const utils_1 = require("./utils");
17
+ const web3_js_1 = require("@solana/web3.js");
18
+ const oracleClientCache_1 = require("../oracles/oracleClientCache");
19
+ const quoteAssetOracleClient_1 = require("../oracles/quoteAssetOracleClient");
20
+ class PollingClearingHouseAccountSubscriber {
21
+ constructor(program, accountLoader, marketIndexes, bankIndexes, oracleInfos) {
22
+ this.oracleClientCache = new oracleClientCache_1.OracleClientCache();
23
+ this.accountsToPoll = new Map();
24
+ this.oraclesToPoll = new Map();
25
+ this.market = new Map();
26
+ this.bank = new Map();
27
+ this.oracles = new Map();
28
+ this.isSubscribing = false;
29
+ this.isSubscribed = false;
30
+ this.program = program;
31
+ this.eventEmitter = new events_1.EventEmitter();
32
+ this.accountLoader = accountLoader;
33
+ this.marketIndexes = marketIndexes;
34
+ this.bankIndexes = bankIndexes;
35
+ this.oracleInfos = oracleInfos;
36
+ }
37
+ subscribe() {
38
+ return __awaiter(this, void 0, void 0, function* () {
39
+ if (this.isSubscribed) {
40
+ return true;
41
+ }
42
+ if (this.isSubscribing) {
43
+ return yield this.subscriptionPromise;
44
+ }
45
+ this.isSubscribing = true;
46
+ this.subscriptionPromise = new Promise((res) => {
47
+ this.subscriptionPromiseResolver = res;
48
+ });
49
+ yield this.updateAccountsToPoll();
50
+ yield this.updateOraclesToPoll();
51
+ yield this.addToAccountLoader();
52
+ let subscriptionSucceeded = false;
53
+ let retries = 0;
54
+ while (!subscriptionSucceeded && retries < 5) {
55
+ yield this.fetch();
56
+ subscriptionSucceeded = this.didSubscriptionSucceed();
57
+ retries++;
58
+ }
59
+ if (subscriptionSucceeded) {
60
+ this.eventEmitter.emit('update');
61
+ }
62
+ this.isSubscribing = false;
63
+ this.isSubscribed = subscriptionSucceeded;
64
+ this.subscriptionPromiseResolver(subscriptionSucceeded);
65
+ return subscriptionSucceeded;
66
+ });
67
+ }
68
+ updateAccountsToPoll() {
69
+ return __awaiter(this, void 0, void 0, function* () {
70
+ if (this.accountsToPoll.size > 0) {
71
+ return;
72
+ }
73
+ const accounts = yield this.getClearingHouseAccounts();
74
+ this.accountsToPoll.set(accounts.state.toString(), {
75
+ key: 'state',
76
+ publicKey: accounts.state,
77
+ eventType: 'stateAccountUpdate',
78
+ });
79
+ yield this.updateMarketAccountsToPoll();
80
+ yield this.updateBankAccountsToPoll();
81
+ });
82
+ }
83
+ updateMarketAccountsToPoll() {
84
+ return __awaiter(this, void 0, void 0, function* () {
85
+ for (const marketIndex of this.marketIndexes) {
86
+ yield this.addMarketAccountToPoll(marketIndex);
87
+ }
88
+ return true;
89
+ });
90
+ }
91
+ addMarketAccountToPoll(marketIndex) {
92
+ return __awaiter(this, void 0, void 0, function* () {
93
+ const marketPublicKey = yield pda_1.getMarketPublicKey(this.program.programId, marketIndex);
94
+ this.accountsToPoll.set(marketPublicKey.toString(), {
95
+ key: 'market',
96
+ publicKey: marketPublicKey,
97
+ eventType: 'marketAccountUpdate',
98
+ mapKey: marketIndex.toNumber(),
99
+ });
100
+ return true;
101
+ });
102
+ }
103
+ updateBankAccountsToPoll() {
104
+ return __awaiter(this, void 0, void 0, function* () {
105
+ for (const bankIndex of this.bankIndexes) {
106
+ yield this.addBankAccountToPoll(bankIndex);
107
+ }
108
+ return true;
109
+ });
110
+ }
111
+ addBankAccountToPoll(bankIndex) {
112
+ return __awaiter(this, void 0, void 0, function* () {
113
+ const bankPublicKey = yield pda_1.getBankPublicKey(this.program.programId, bankIndex);
114
+ this.accountsToPoll.set(bankPublicKey.toString(), {
115
+ key: 'bank',
116
+ publicKey: bankPublicKey,
117
+ eventType: 'bankAccountUpdate',
118
+ mapKey: bankIndex.toNumber(),
119
+ });
120
+ return true;
121
+ });
122
+ }
123
+ updateOraclesToPoll() {
124
+ for (const oracleInfo of this.oracleInfos) {
125
+ if (!oracleInfo.publicKey.equals(web3_js_1.PublicKey.default)) {
126
+ this.addOracleToPoll(oracleInfo);
127
+ }
128
+ }
129
+ return true;
130
+ }
131
+ addOracleToPoll(oracleInfo) {
132
+ this.oraclesToPoll.set(oracleInfo.publicKey.toString(), {
133
+ publicKey: oracleInfo.publicKey,
134
+ source: oracleInfo.source,
135
+ });
136
+ return true;
137
+ }
138
+ getClearingHouseAccounts() {
139
+ return __awaiter(this, void 0, void 0, function* () {
140
+ const statePublicKey = yield pda_1.getClearingHouseStateAccountPublicKey(this.program.programId);
141
+ const accounts = {
142
+ state: statePublicKey,
143
+ };
144
+ return accounts;
145
+ });
146
+ }
147
+ addToAccountLoader() {
148
+ return __awaiter(this, void 0, void 0, function* () {
149
+ for (const [_, accountToPoll] of this.accountsToPoll) {
150
+ this.addAccountToAccountLoader(accountToPoll);
151
+ }
152
+ for (const [_, oracleToPoll] of this.oraclesToPoll) {
153
+ this.addOracleToAccountLoader(oracleToPoll);
154
+ }
155
+ this.errorCallbackId = this.accountLoader.addErrorCallbacks((error) => {
156
+ this.eventEmitter.emit('error', error);
157
+ });
158
+ });
159
+ }
160
+ addAccountToAccountLoader(accountToPoll) {
161
+ accountToPoll.callbackId = this.accountLoader.addAccount(accountToPoll.publicKey, (buffer, slot) => {
162
+ if (!buffer)
163
+ return;
164
+ const account = this.program.account[accountToPoll.key].coder.accounts.decode(utils_1.capitalize(accountToPoll.key), buffer);
165
+ const dataAndSlot = {
166
+ data: account,
167
+ slot,
168
+ };
169
+ if (accountToPoll.mapKey != undefined) {
170
+ this[accountToPoll.key].set(accountToPoll.mapKey, dataAndSlot);
171
+ }
172
+ else {
173
+ this[accountToPoll.key] = dataAndSlot;
174
+ }
175
+ // @ts-ignore
176
+ this.eventEmitter.emit(accountToPoll.eventType, account);
177
+ this.eventEmitter.emit('update');
178
+ if (!this.isSubscribed) {
179
+ this.isSubscribed = this.didSubscriptionSucceed();
180
+ }
181
+ });
182
+ }
183
+ addOracleToAccountLoader(oracleToPoll) {
184
+ const oracleClient = this.oracleClientCache.get(oracleToPoll.source, this.program.provider.connection);
185
+ oracleToPoll.callbackId = this.accountLoader.addAccount(oracleToPoll.publicKey, (buffer, slot) => {
186
+ if (!buffer)
187
+ return;
188
+ const oraclePriceData = oracleClient.getOraclePriceDataFromBuffer(buffer);
189
+ const dataAndSlot = {
190
+ data: oraclePriceData,
191
+ slot,
192
+ };
193
+ this.oracles.set(oracleToPoll.publicKey.toString(), dataAndSlot);
194
+ this.eventEmitter.emit('oraclePriceUpdate', oracleToPoll.publicKey, oraclePriceData);
195
+ this.eventEmitter.emit('update');
196
+ });
197
+ }
198
+ fetch() {
199
+ return __awaiter(this, void 0, void 0, function* () {
200
+ yield this.accountLoader.load();
201
+ for (const [_, accountToPoll] of this.accountsToPoll) {
202
+ const { buffer, slot } = this.accountLoader.getBufferAndSlot(accountToPoll.publicKey);
203
+ if (buffer) {
204
+ const account = this.program.account[accountToPoll.key].coder.accounts.decode(utils_1.capitalize(accountToPoll.key), buffer);
205
+ if (accountToPoll.mapKey != undefined) {
206
+ this[accountToPoll.key].set(accountToPoll.mapKey, {
207
+ data: account,
208
+ slot,
209
+ });
210
+ }
211
+ else {
212
+ this[accountToPoll.key] = {
213
+ data: account,
214
+ slot,
215
+ };
216
+ }
217
+ }
218
+ }
219
+ for (const [_, oracleToPoll] of this.oraclesToPoll) {
220
+ const { buffer, slot } = this.accountLoader.getBufferAndSlot(oracleToPoll.publicKey);
221
+ if (buffer) {
222
+ const oracleClient = this.oracleClientCache.get(oracleToPoll.source, this.program.provider.connection);
223
+ const oraclePriceData = oracleClient.getOraclePriceDataFromBuffer(buffer);
224
+ this.oracles.set(oracleToPoll.publicKey.toString(), {
225
+ data: oraclePriceData,
226
+ slot,
227
+ });
228
+ }
229
+ }
230
+ });
231
+ }
232
+ didSubscriptionSucceed() {
233
+ if (this.state)
234
+ return true;
235
+ return false;
236
+ }
237
+ unsubscribe() {
238
+ return __awaiter(this, void 0, void 0, function* () {
239
+ if (!this.isSubscribed) {
240
+ return;
241
+ }
242
+ for (const [_, accountToPoll] of this.accountsToPoll) {
243
+ this.accountLoader.removeAccount(accountToPoll.publicKey, accountToPoll.callbackId);
244
+ }
245
+ for (const [_, oracleToPoll] of this.oraclesToPoll) {
246
+ this.accountLoader.removeAccount(oracleToPoll.publicKey, oracleToPoll.callbackId);
247
+ }
248
+ this.accountLoader.removeErrorCallbacks(this.errorCallbackId);
249
+ this.errorCallbackId = undefined;
250
+ this.accountsToPoll.clear();
251
+ this.oraclesToPoll.clear();
252
+ this.isSubscribed = false;
253
+ });
254
+ }
255
+ addBank(bankIndex) {
256
+ return __awaiter(this, void 0, void 0, function* () {
257
+ yield this.addBankAccountToPoll(bankIndex);
258
+ const accountToPoll = this.accountsToPoll.get(bankIndex.toString());
259
+ this.addAccountToAccountLoader(accountToPoll);
260
+ return true;
261
+ });
262
+ }
263
+ addMarket(marketIndex) {
264
+ return __awaiter(this, void 0, void 0, function* () {
265
+ yield this.addMarketAccountToPoll(marketIndex);
266
+ const accountToPoll = this.accountsToPoll.get(marketIndex.toString());
267
+ this.addAccountToAccountLoader(accountToPoll);
268
+ return true;
269
+ });
270
+ }
271
+ addOracle(oracleInfo) {
272
+ return __awaiter(this, void 0, void 0, function* () {
273
+ if (oracleInfo.publicKey.equals(web3_js_1.PublicKey.default)) {
274
+ return true;
275
+ }
276
+ this.addOracleToPoll(oracleInfo);
277
+ const oracleToPoll = this.oraclesToPoll.get(oracleInfo.publicKey.toString());
278
+ this.addOracleToAccountLoader(oracleToPoll);
279
+ return true;
280
+ });
281
+ }
282
+ assertIsSubscribed() {
283
+ if (!this.isSubscribed) {
284
+ throw new types_1.NotSubscribedError('You must call `subscribe` before using this function');
285
+ }
286
+ }
287
+ getStateAccountAndSlot() {
288
+ this.assertIsSubscribed();
289
+ return this.state;
290
+ }
291
+ getMarketAccountAndSlot(marketIndex) {
292
+ return this.market.get(marketIndex.toNumber());
293
+ }
294
+ getMarketAccountsAndSlots() {
295
+ return Array.from(this.market.values());
296
+ }
297
+ getBankAccountAndSlot(bankIndex) {
298
+ return this.bank.get(bankIndex.toNumber());
299
+ }
300
+ getOraclePriceDataAndSlot(oraclePublicKey) {
301
+ this.assertIsSubscribed();
302
+ if (oraclePublicKey.equals(web3_js_1.PublicKey.default)) {
303
+ return {
304
+ data: quoteAssetOracleClient_1.QUOTE_ORACLE_PRICE_DATA,
305
+ slot: 0,
306
+ };
307
+ }
308
+ return this.oracles.get(oraclePublicKey.toString());
309
+ }
310
+ }
311
+ exports.PollingClearingHouseAccountSubscriber = PollingClearingHouseAccountSubscriber;