@velocity-exchange/sdk 0.4.0 → 0.6.1
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/README.md +3 -3
- package/lib/browser/adminClient.d.ts +52 -0
- package/lib/browser/adminClient.js +97 -0
- package/lib/browser/config.js +6 -7
- package/lib/browser/constants/numericConstants.d.ts +1 -1
- package/lib/browser/constants/numericConstants.js +1 -1
- package/lib/browser/decode/user.js +5 -1
- package/lib/browser/idl/velocity.d.ts +191 -15
- package/lib/browser/idl/velocity.json +192 -16
- package/lib/browser/orderSubscriber/OrderSubscriber.d.ts +1 -0
- package/lib/browser/orderSubscriber/OrderSubscriber.js +10 -4
- package/lib/browser/pyth/pythLazerSubscriber.js +37 -27
- package/lib/browser/types.d.ts +6 -0
- package/lib/browser/user.d.ts +20 -3
- package/lib/browser/user.js +52 -4
- package/lib/browser/velocityClient.d.ts +46 -10
- package/lib/browser/velocityClient.js +107 -35
- package/lib/node/adminClient.d.ts +52 -0
- package/lib/node/adminClient.d.ts.map +1 -1
- package/lib/node/adminClient.js +97 -0
- package/lib/node/config.d.ts.map +1 -1
- package/lib/node/config.js +6 -7
- package/lib/node/constants/numericConstants.d.ts +1 -1
- package/lib/node/constants/numericConstants.d.ts.map +1 -1
- package/lib/node/constants/numericConstants.js +1 -1
- package/lib/node/decode/user.d.ts.map +1 -1
- package/lib/node/decode/user.js +5 -1
- package/lib/node/idl/velocity.d.ts +191 -15
- package/lib/node/idl/velocity.d.ts.map +1 -1
- package/lib/node/idl/velocity.json +192 -16
- package/lib/node/orderSubscriber/OrderSubscriber.d.ts +1 -0
- package/lib/node/orderSubscriber/OrderSubscriber.d.ts.map +1 -1
- package/lib/node/orderSubscriber/OrderSubscriber.js +10 -4
- package/lib/node/pyth/pythLazerSubscriber.d.ts.map +1 -1
- package/lib/node/pyth/pythLazerSubscriber.js +37 -27
- package/lib/node/types.d.ts +6 -0
- package/lib/node/types.d.ts.map +1 -1
- package/lib/node/user.d.ts +20 -3
- package/lib/node/user.d.ts.map +1 -1
- package/lib/node/user.js +52 -4
- package/lib/node/velocityClient.d.ts +46 -10
- package/lib/node/velocityClient.d.ts.map +1 -1
- package/lib/node/velocityClient.js +107 -35
- package/package.json +7 -3
- package/.prettierignore +0 -1
- package/CHANGELOG.md +0 -132
- package/build-browser.js +0 -58
- package/bunfig.toml +0 -3
- package/esbuild-shims.js +0 -12
- package/scripts/deposit-isolated-positions.ts +0 -110
- package/scripts/find-flagged-users.ts +0 -213
- package/scripts/grpc-client-test-comparison.ts +0 -372
- package/scripts/grpc-multiuser-client-test-comparison.ts +0 -158
- package/scripts/postbuild.js +0 -95
- package/scripts/single-grpc-client-test.ts +0 -284
- package/scripts/withdraw-isolated-positions.ts +0 -174
- package/src/accounts/README_WebSocketAccountSubscriberV2.md +0 -95
- package/src/accounts/README_WebSocketProgramAccountSubscriberV2.md +0 -135
- package/src/accounts/basicUserAccountSubscriber.ts +0 -79
- package/src/accounts/basicUserStatsAccountSubscriber.ts +0 -87
- package/src/accounts/bulkAccountLoader.ts +0 -358
- package/src/accounts/bulkUserStatsSubscription.ts +0 -40
- package/src/accounts/bulkUserSubscription.ts +0 -39
- package/src/accounts/customizedCadenceBulkAccountLoader.ts +0 -250
- package/src/accounts/fetch.ts +0 -200
- package/src/accounts/grpcAccountSubscriber.ts +0 -225
- package/src/accounts/grpcInsuranceFundStakeAccountSubscriber.ts +0 -73
- package/src/accounts/grpcMultiAccountSubscriber.ts +0 -566
- package/src/accounts/grpcMultiUserAccountSubscriber.ts +0 -328
- package/src/accounts/grpcProgramAccountSubscriber.ts +0 -264
- package/src/accounts/grpcUserAccountSubscriber.ts +0 -63
- package/src/accounts/grpcUserStatsAccountSubscriber.ts +0 -65
- package/src/accounts/grpcVelocityClientAccountSubscriber.ts +0 -257
- package/src/accounts/grpcVelocityClientAccountSubscriberV2.ts +0 -941
- package/src/accounts/laserProgramAccountSubscriber.ts +0 -266
- package/src/accounts/oneShotUserAccountSubscriber.ts +0 -88
- package/src/accounts/oneShotUserStatsAccountSubscriber.ts +0 -94
- package/src/accounts/pollingInsuranceFundStakeAccountSubscriber.ts +0 -223
- package/src/accounts/pollingOracleAccountSubscriber.ts +0 -151
- package/src/accounts/pollingTokenAccountSubscriber.ts +0 -147
- package/src/accounts/pollingUserAccountSubscriber.ts +0 -198
- package/src/accounts/pollingUserStatsAccountSubscriber.ts +0 -180
- package/src/accounts/pollingVelocityClientAccountSubscriber.ts +0 -774
- package/src/accounts/testBulkAccountLoader.ts +0 -59
- package/src/accounts/types.ts +0 -428
- package/src/accounts/utils.ts +0 -90
- package/src/accounts/webSocketAccountSubscriber.ts +0 -304
- package/src/accounts/webSocketAccountSubscriberV2.ts +0 -536
- package/src/accounts/webSocketInsuranceFundStakeAccountSubscriber.ts +0 -171
- package/src/accounts/webSocketProgramAccountSubscriber.ts +0 -244
- package/src/accounts/webSocketProgramAccountSubscriberV2.ts +0 -1048
- package/src/accounts/webSocketProgramAccountsSubscriberV2.ts +0 -1042
- package/src/accounts/webSocketUserAccountSubscriber.ts +0 -139
- package/src/accounts/webSocketUserStatsAccountSubsriber.ts +0 -131
- package/src/accounts/webSocketVelocityClientAccountSubscriber.ts +0 -865
- package/src/accounts/webSocketVelocityClientAccountSubscriberV2.ts +0 -897
- package/src/accounts/websocketProgramUserAccountSubscriber.ts +0 -127
- package/src/addresses/marketAddresses.ts +0 -28
- package/src/addresses/pda.ts +0 -620
- package/src/adminClient.ts +0 -8136
- package/src/assert/assert.ts +0 -5
- package/src/auctionSubscriber/auctionSubscriber.ts +0 -86
- package/src/auctionSubscriber/auctionSubscriberGrpc.ts +0 -99
- package/src/auctionSubscriber/index.ts +0 -9
- package/src/auctionSubscriber/types.ts +0 -30
- package/src/bankrun/bankrunConnection.ts +0 -630
- package/src/blockhashSubscriber/BlockhashSubscriber.ts +0 -160
- package/src/blockhashSubscriber/index.ts +0 -6
- package/src/blockhashSubscriber/types.ts +0 -13
- package/src/clock/clockSubscriber.ts +0 -146
- package/src/config.ts +0 -312
- package/src/constants/index.ts +0 -9
- package/src/constants/numericConstants.ts +0 -194
- package/src/constants/perpMarkets.ts +0 -127
- package/src/constants/spotMarkets.ts +0 -104
- package/src/constants/txConstants.ts +0 -2
- package/src/constituentMap/constituentMap.ts +0 -305
- package/src/constituentMap/pollingConstituentAccountSubscriber.ts +0 -99
- package/src/constituentMap/webSocketConstituentAccountSubscriber.ts +0 -121
- package/src/core/VelocityCore.ts +0 -606
- package/src/core/index.ts +0 -12
- package/src/core/instructions/deposit.ts +0 -64
- package/src/core/instructions/fill.ts +0 -51
- package/src/core/instructions/funding.ts +0 -33
- package/src/core/instructions/liquidation.ts +0 -55
- package/src/core/instructions/orders.ts +0 -84
- package/src/core/instructions/perpOrders.ts +0 -312
- package/src/core/instructions/settlement.ts +0 -40
- package/src/core/instructions/trigger.ts +0 -41
- package/src/core/instructions/withdraw.ts +0 -65
- package/src/core/remainingAccounts.ts +0 -320
- package/src/core/signedMsg.ts +0 -109
- package/src/decode/customCoder.ts +0 -148
- package/src/decode/user.ts +0 -401
- package/src/dlob/DLOB.ts +0 -2793
- package/src/dlob/DLOBNode.ts +0 -305
- package/src/dlob/DLOBSubscriber.ts +0 -269
- package/src/dlob/NodeList.ts +0 -244
- package/src/dlob/orderBookLevels.ts +0 -695
- package/src/dlob/types.ts +0 -37
- package/src/events/eventList.ts +0 -114
- package/src/events/eventSubscriber.ts +0 -521
- package/src/events/eventsServerLogProvider.ts +0 -189
- package/src/events/fetchLogs.ts +0 -219
- package/src/events/parse.ts +0 -271
- package/src/events/pollingLogProvider.ts +0 -113
- package/src/events/sort.ts +0 -51
- package/src/events/txEventCache.ts +0 -92
- package/src/events/types.ts +0 -337
- package/src/events/webSocketLogProvider.ts +0 -152
- package/src/factory/bigNum.ts +0 -709
- package/src/factory/oracleClient.ts +0 -73
- package/src/idl/pyth.json +0 -142
- package/src/idl/pyth.ts +0 -97
- package/src/idl/pyth_solana_receiver.json +0 -628
- package/src/idl/token_faucet.json +0 -229
- package/src/idl/token_faucet.ts +0 -197
- package/src/idl/velocity.json +0 -23974
- package/src/idl/velocity.ts +0 -23980
- package/src/index.ts +0 -150
- package/src/indicative-quotes/indicativeQuotesSender.ts +0 -233
- package/src/isomorphic/README.md +0 -19
- package/src/isomorphic/anchor.browser.ts +0 -44
- package/src/isomorphic/anchor.node.ts +0 -1
- package/src/isomorphic/anchor.ts +0 -1
- package/src/isomorphic/anchor29.browser.ts +0 -24
- package/src/isomorphic/anchor29.node.ts +0 -1
- package/src/isomorphic/anchor29.ts +0 -1
- package/src/isomorphic/grpc.browser.ts +0 -4
- package/src/isomorphic/grpc.node.ts +0 -130
- package/src/isomorphic/grpc.ts +0 -1
- package/src/jupiter/jupiterClient.ts +0 -502
- package/src/keypair.ts +0 -32
- package/src/margin/README.md +0 -138
- package/src/marginCalculation.ts +0 -407
- package/src/marinade/idl/idl.json +0 -1962
- package/src/marinade/index.ts +0 -73
- package/src/marinade/types.ts +0 -3925
- package/src/math/amm.ts +0 -1758
- package/src/math/auction.ts +0 -480
- package/src/math/bankruptcy.ts +0 -138
- package/src/math/builder.ts +0 -130
- package/src/math/conversion.ts +0 -45
- package/src/math/exchangeStatus.ts +0 -261
- package/src/math/funding.ts +0 -498
- package/src/math/insurance.ts +0 -171
- package/src/math/liquidation.ts +0 -433
- package/src/math/margin.ts +0 -327
- package/src/math/market.ts +0 -487
- package/src/math/oracles.ts +0 -477
- package/src/math/orders.ts +0 -500
- package/src/math/position.ts +0 -381
- package/src/math/repeg.ts +0 -223
- package/src/math/spotBalance.ts +0 -996
- package/src/math/spotMarket.ts +0 -115
- package/src/math/spotPosition.ts +0 -263
- package/src/math/state.ts +0 -71
- package/src/math/superStake.ts +0 -602
- package/src/math/tiers.ts +0 -73
- package/src/math/trade.ts +0 -879
- package/src/math/utils.ts +0 -183
- package/src/memcmp.ts +0 -279
- package/src/oracles/oracleClientCache.ts +0 -41
- package/src/oracles/oracleId.ts +0 -99
- package/src/oracles/prelaunchOracleClient.ts +0 -63
- package/src/oracles/pythClient.ts +0 -125
- package/src/oracles/pythLazerClient.ts +0 -141
- package/src/oracles/quoteAssetOracleClient.ts +0 -43
- package/src/oracles/strictOraclePrice.ts +0 -40
- package/src/oracles/types.ts +0 -82
- package/src/oracles/utils.ts +0 -45
- package/src/orderParams.ts +0 -117
- package/src/orderSubscriber/OrderSubscriber.ts +0 -378
- package/src/orderSubscriber/PollingSubscription.ts +0 -50
- package/src/orderSubscriber/WebsocketSubscription.ts +0 -137
- package/src/orderSubscriber/grpcSubscription.ts +0 -155
- package/src/orderSubscriber/index.ts +0 -7
- package/src/orderSubscriber/types.ts +0 -64
- package/src/priorityFee/averageOverSlotsStrategy.ts +0 -17
- package/src/priorityFee/averageStrategy.ts +0 -13
- package/src/priorityFee/ewmaStrategy.ts +0 -51
- package/src/priorityFee/heliusPriorityFeeMethod.ts +0 -68
- package/src/priorityFee/index.ts +0 -16
- package/src/priorityFee/maxOverSlotsStrategy.ts +0 -18
- package/src/priorityFee/maxStrategy.ts +0 -8
- package/src/priorityFee/priorityFeeSubscriber.ts +0 -328
- package/src/priorityFee/priorityFeeSubscriberMap.ts +0 -134
- package/src/priorityFee/solanaPriorityFeeMethod.ts +0 -46
- package/src/priorityFee/types.ts +0 -82
- package/src/priorityFee/velocityPriorityFeeMethod.ts +0 -53
- package/src/pyth/constants.ts +0 -9
- package/src/pyth/index.ts +0 -15
- package/src/pyth/pythLazerSubscriber.ts +0 -365
- package/src/pyth/types.ts +0 -4451
- package/src/pyth/utils.ts +0 -13
- package/src/slot/SlotSubscriber.ts +0 -126
- package/src/slot/SlothashSubscriber.ts +0 -163
- package/src/swap/UnifiedSwapClient.ts +0 -315
- package/src/swift/grpcSignedMsgUserAccountSubscriber.ts +0 -81
- package/src/swift/index.ts +0 -10
- package/src/swift/signedMsgUserAccountSubscriber.ts +0 -251
- package/src/swift/swiftOrderSubscriber.ts +0 -351
- package/src/testClient.ts +0 -42
- package/src/titan/titanClient.ts +0 -438
- package/src/token/index.ts +0 -13
- package/src/tokenFaucet.ts +0 -296
- package/src/tx/baseTxSender.ts +0 -651
- package/src/tx/blockhashFetcher/baseBlockhashFetcher.ts +0 -31
- package/src/tx/blockhashFetcher/cachedBlockhashFetcher.ts +0 -105
- package/src/tx/blockhashFetcher/types.ts +0 -9
- package/src/tx/fastSingleTxSender.ts +0 -200
- package/src/tx/forwardOnlyTxSender.ts +0 -193
- package/src/tx/priorityFeeCalculator.ts +0 -117
- package/src/tx/reportTransactionError.ts +0 -176
- package/src/tx/retryTxSender.ts +0 -177
- package/src/tx/txHandler.ts +0 -1009
- package/src/tx/txParamProcessor.ts +0 -225
- package/src/tx/types.ts +0 -117
- package/src/tx/utils.ts +0 -133
- package/src/tx/whileValidTxSender.ts +0 -377
- package/src/types.ts +0 -2575
- package/src/user.ts +0 -5316
- package/src/userConfig.ts +0 -38
- package/src/userMap/PollingSubscription.ts +0 -61
- package/src/userMap/WebsocketSubscription.ts +0 -93
- package/src/userMap/grpcSubscription.ts +0 -93
- package/src/userMap/referrerMap.ts +0 -360
- package/src/userMap/revenueShareEscrowMap.ts +0 -342
- package/src/userMap/userMap.ts +0 -784
- package/src/userMap/userMapConfig.ts +0 -82
- package/src/userMap/userStatsMap.ts +0 -393
- package/src/userName.ts +0 -37
- package/src/userStats.ts +0 -159
- package/src/userStatsConfig.ts +0 -35
- package/src/util/TransactionConfirmationManager.ts +0 -333
- package/src/util/chainClock.ts +0 -65
- package/src/util/computeUnits.ts +0 -101
- package/src/util/digest.ts +0 -33
- package/src/util/ed25519Utils.ts +0 -95
- package/src/util/promiseTimeout.ts +0 -23
- package/src/velocityClient.ts +0 -14802
- package/src/velocityClientConfig.ts +0 -119
- package/src/wallet.ts +0 -91
- package/tests/VelocityCore/builder_escrow.test.ts +0 -121
- package/tests/VelocityCore/decode.test.ts +0 -16
- package/tests/VelocityCore/fill_trigger.test.ts +0 -73
- package/tests/VelocityCore/instructions.test.ts +0 -46
- package/tests/VelocityCore/pdas.test.ts +0 -30
- package/tests/VelocityCore/perp_orders.test.ts +0 -205
- package/tests/VelocityCore/remainingAccounts.test.ts +0 -72
- package/tests/VelocityCore/settlement_liquidation.test.ts +0 -69
- package/tests/accounts/customizedCadenceBulkAccountLoader.test.ts +0 -211
- package/tests/amm/test.ts +0 -2402
- package/tests/auctions/test.ts +0 -81
- package/tests/bn/test.ts +0 -355
- package/tests/builder/builderFee.test.ts +0 -42
- package/tests/ci/verifyConstants.ts +0 -393
- package/tests/decode/test.ts +0 -262
- package/tests/decode/userAccountBufferStrings.ts +0 -102
- package/tests/dlob/helpers.ts +0 -748
- package/tests/dlob/test.ts +0 -6969
- package/tests/dlob/tickSizeStandardization.ts +0 -545
- package/tests/events/parseLogsForCuUsage.ts +0 -139
- package/tests/exchangeStatus/test.ts +0 -45
- package/tests/insurance/test.ts +0 -40
- package/tests/liquidation/test.ts +0 -125
- package/tests/oracles/mmOracleGate.test.ts +0 -379
- package/tests/oracles/pythPegSnap.test.ts +0 -76
- package/tests/sdkParity/enumParity.test.ts +0 -84
- package/tests/sdkParity/marginCategoryFill.test.ts +0 -143
- package/tests/sdkParity/memcmpOffsets.test.ts +0 -139
- package/tests/spot/test.ts +0 -281
- package/tests/tx/TransactionConfirmationManager.test.ts +0 -312
- package/tests/tx/cachedBlockhashFetcher.test.ts +0 -96
- package/tests/tx/priorityFeeCalculator.ts +0 -77
- package/tests/tx/priorityFeeStrategy.ts +0 -95
- package/tests/user/bankruptcy.ts +0 -165
- package/tests/user/feeAndWithdrawLimits.ts +0 -284
- package/tests/user/getMarginCalculation.ts +0 -586
- package/tests/user/helpers.ts +0 -184
- package/tests/user/liquidations.ts +0 -129
- package/tests/user/marginCalculations.test.ts +0 -321
- package/tests/user/test.ts +0 -833
- package/tsconfig.browser.json +0 -18
- package/tsconfig.json +0 -36
|
@@ -1,139 +0,0 @@
|
|
|
1
|
-
import {
|
|
2
|
-
DataAndSlot,
|
|
3
|
-
AccountSubscriber,
|
|
4
|
-
NotSubscribedError,
|
|
5
|
-
UserAccountEvents,
|
|
6
|
-
UserAccountSubscriber,
|
|
7
|
-
ResubOpts,
|
|
8
|
-
} from './types';
|
|
9
|
-
import { VelocityProgram } from '../config';
|
|
10
|
-
import StrictEventEmitter from 'strict-event-emitter-types';
|
|
11
|
-
import { EventEmitter } from 'events';
|
|
12
|
-
import { Commitment, PublicKey } from '@solana/web3.js';
|
|
13
|
-
import { WebSocketAccountSubscriber } from './webSocketAccountSubscriber';
|
|
14
|
-
import { UserAccount } from '../types';
|
|
15
|
-
|
|
16
|
-
/**
|
|
17
|
-
* Default `UserAccountSubscriber` implementation: wraps a single `WebSocketAccountSubscriber`
|
|
18
|
-
* for the `UserAccount`. `userDataAccountSubscriber` throws if accessed before `subscribe()` has
|
|
19
|
-
* run (it is created there, not in the constructor).
|
|
20
|
-
*/
|
|
21
|
-
export class WebSocketUserAccountSubscriber implements UserAccountSubscriber {
|
|
22
|
-
isSubscribed: boolean;
|
|
23
|
-
resubOpts?: ResubOpts;
|
|
24
|
-
commitment?: Commitment;
|
|
25
|
-
program: VelocityProgram;
|
|
26
|
-
eventEmitter: StrictEventEmitter<EventEmitter, UserAccountEvents>;
|
|
27
|
-
userAccountPublicKey: PublicKey;
|
|
28
|
-
|
|
29
|
-
private _userDataAccountSubscriber?: AccountSubscriber<UserAccount>;
|
|
30
|
-
get userDataAccountSubscriber(): AccountSubscriber<UserAccount> {
|
|
31
|
-
if (!this._userDataAccountSubscriber) {
|
|
32
|
-
throw new Error('userDataAccountSubscriber accessed before subscribe()');
|
|
33
|
-
}
|
|
34
|
-
return this._userDataAccountSubscriber;
|
|
35
|
-
}
|
|
36
|
-
set userDataAccountSubscriber(subscriber: AccountSubscriber<UserAccount>) {
|
|
37
|
-
this._userDataAccountSubscriber = subscriber;
|
|
38
|
-
}
|
|
39
|
-
|
|
40
|
-
/**
|
|
41
|
-
* @param program Anchor program providing the connection and coder.
|
|
42
|
-
* @param userAccountPublicKey Address of the `UserAccount` to track.
|
|
43
|
-
* @param resubOpts Resubscription watchdog options passed through to the underlying `WebSocketAccountSubscriber`.
|
|
44
|
-
* @param commitment Commitment for the underlying subscription; defaults to the provider's configured commitment.
|
|
45
|
-
*/
|
|
46
|
-
public constructor(
|
|
47
|
-
program: VelocityProgram,
|
|
48
|
-
userAccountPublicKey: PublicKey,
|
|
49
|
-
resubOpts?: ResubOpts,
|
|
50
|
-
commitment?: Commitment
|
|
51
|
-
) {
|
|
52
|
-
this.isSubscribed = false;
|
|
53
|
-
this.program = program;
|
|
54
|
-
this.resubOpts = resubOpts;
|
|
55
|
-
this.userAccountPublicKey = userAccountPublicKey;
|
|
56
|
-
this.eventEmitter = new EventEmitter();
|
|
57
|
-
this.commitment = commitment;
|
|
58
|
-
}
|
|
59
|
-
|
|
60
|
-
/**
|
|
61
|
-
* Creates the underlying `WebSocketAccountSubscriber` and subscribes it. Idempotent: a no-op
|
|
62
|
-
* (returns `true`) if already subscribed.
|
|
63
|
-
* @param userAccount Optional pre-fetched account data to seed the subscriber with, skipping the initial RPC fetch.
|
|
64
|
-
*/
|
|
65
|
-
async subscribe(userAccount?: UserAccount): Promise<boolean> {
|
|
66
|
-
if (this.isSubscribed) {
|
|
67
|
-
return true;
|
|
68
|
-
}
|
|
69
|
-
|
|
70
|
-
this.userDataAccountSubscriber = new WebSocketAccountSubscriber(
|
|
71
|
-
'user',
|
|
72
|
-
this.program,
|
|
73
|
-
this.userAccountPublicKey,
|
|
74
|
-
undefined,
|
|
75
|
-
this.resubOpts,
|
|
76
|
-
this.commitment
|
|
77
|
-
);
|
|
78
|
-
|
|
79
|
-
if (userAccount) {
|
|
80
|
-
this.userDataAccountSubscriber.setData(userAccount);
|
|
81
|
-
}
|
|
82
|
-
|
|
83
|
-
await this.userDataAccountSubscriber.subscribe((data: UserAccount) => {
|
|
84
|
-
this.eventEmitter.emit('userAccountUpdate', data);
|
|
85
|
-
this.eventEmitter.emit('update');
|
|
86
|
-
});
|
|
87
|
-
|
|
88
|
-
this.eventEmitter.emit('update');
|
|
89
|
-
this.isSubscribed = true;
|
|
90
|
-
return true;
|
|
91
|
-
}
|
|
92
|
-
|
|
93
|
-
/** Fetches the account once via the underlying `WebSocketAccountSubscriber`. */
|
|
94
|
-
async fetch(): Promise<void> {
|
|
95
|
-
await Promise.all([this.userDataAccountSubscriber.fetch()]);
|
|
96
|
-
}
|
|
97
|
-
|
|
98
|
-
/** Tears down the underlying WebSocket subscription. A no-op if not subscribed. */
|
|
99
|
-
async unsubscribe(): Promise<void> {
|
|
100
|
-
if (!this.isSubscribed) {
|
|
101
|
-
return;
|
|
102
|
-
}
|
|
103
|
-
|
|
104
|
-
await Promise.all([this.userDataAccountSubscriber.unsubscribe()]);
|
|
105
|
-
|
|
106
|
-
this.isSubscribed = false;
|
|
107
|
-
}
|
|
108
|
-
|
|
109
|
-
/** Throws `NotSubscribedError` if `subscribe()` has not been called. */
|
|
110
|
-
assertIsSubscribed(): void {
|
|
111
|
-
if (!this.isSubscribed) {
|
|
112
|
-
throw new NotSubscribedError(
|
|
113
|
-
'You must call `subscribe` before using this function'
|
|
114
|
-
);
|
|
115
|
-
}
|
|
116
|
-
}
|
|
117
|
-
|
|
118
|
-
/** Throws `NotSubscribedError` if not subscribed. Returns undefined only if subscribed but no data has loaded yet. */
|
|
119
|
-
public getUserAccountAndSlot(): DataAndSlot<UserAccount> | undefined {
|
|
120
|
-
this.assertIsSubscribed();
|
|
121
|
-
return this.userDataAccountSubscriber.dataAndSlot;
|
|
122
|
-
}
|
|
123
|
-
|
|
124
|
-
/**
|
|
125
|
-
* Applies an externally-obtained account update if `slot` is not older than the currently
|
|
126
|
-
* cached slot.
|
|
127
|
-
* @param userAccount Decoded account data to apply.
|
|
128
|
-
* @param slot Slot the data was observed at.
|
|
129
|
-
*/
|
|
130
|
-
public updateData(userAccount: UserAccount, slot: number) {
|
|
131
|
-
const currentDataSlot =
|
|
132
|
-
this.userDataAccountSubscriber.dataAndSlot?.slot || 0;
|
|
133
|
-
if (currentDataSlot <= slot) {
|
|
134
|
-
this.userDataAccountSubscriber.setData(userAccount, slot);
|
|
135
|
-
this.eventEmitter.emit('userAccountUpdate', userAccount);
|
|
136
|
-
this.eventEmitter.emit('update');
|
|
137
|
-
}
|
|
138
|
-
}
|
|
139
|
-
}
|
|
@@ -1,131 +0,0 @@
|
|
|
1
|
-
import {
|
|
2
|
-
DataAndSlot,
|
|
3
|
-
AccountSubscriber,
|
|
4
|
-
NotSubscribedError,
|
|
5
|
-
UserStatsAccountSubscriber,
|
|
6
|
-
UserStatsAccountEvents,
|
|
7
|
-
ResubOpts,
|
|
8
|
-
} from './types';
|
|
9
|
-
import { VelocityProgram } from '../config';
|
|
10
|
-
import StrictEventEmitter from 'strict-event-emitter-types';
|
|
11
|
-
import { EventEmitter } from 'events';
|
|
12
|
-
import { Commitment, PublicKey } from '@solana/web3.js';
|
|
13
|
-
import { WebSocketAccountSubscriber } from './webSocketAccountSubscriber';
|
|
14
|
-
import { UserStatsAccount } from '../types';
|
|
15
|
-
|
|
16
|
-
/**
|
|
17
|
-
* Default `UserStatsAccountSubscriber` implementation: wraps a single `WebSocketAccountSubscriber`
|
|
18
|
-
* for the `UserStatsAccount`, mirroring `WebSocketUserAccountSubscriber`.
|
|
19
|
-
* `userStatsAccountSubscriber` throws if accessed before `subscribe()` has run.
|
|
20
|
-
*/
|
|
21
|
-
export class WebSocketUserStatsAccountSubscriber
|
|
22
|
-
implements UserStatsAccountSubscriber
|
|
23
|
-
{
|
|
24
|
-
isSubscribed: boolean;
|
|
25
|
-
resubOpts?: ResubOpts;
|
|
26
|
-
commitment?: Commitment;
|
|
27
|
-
program: VelocityProgram;
|
|
28
|
-
eventEmitter: StrictEventEmitter<EventEmitter, UserStatsAccountEvents>;
|
|
29
|
-
userStatsAccountPublicKey: PublicKey;
|
|
30
|
-
|
|
31
|
-
private _userStatsAccountSubscriber?: AccountSubscriber<UserStatsAccount>;
|
|
32
|
-
get userStatsAccountSubscriber(): AccountSubscriber<UserStatsAccount> {
|
|
33
|
-
if (!this._userStatsAccountSubscriber) {
|
|
34
|
-
throw new Error('userStatsAccountSubscriber accessed before subscribe()');
|
|
35
|
-
}
|
|
36
|
-
return this._userStatsAccountSubscriber;
|
|
37
|
-
}
|
|
38
|
-
set userStatsAccountSubscriber(
|
|
39
|
-
subscriber: AccountSubscriber<UserStatsAccount>
|
|
40
|
-
) {
|
|
41
|
-
this._userStatsAccountSubscriber = subscriber;
|
|
42
|
-
}
|
|
43
|
-
|
|
44
|
-
/**
|
|
45
|
-
* @param program Anchor program providing the connection and coder.
|
|
46
|
-
* @param userStatsAccountPublicKey Address of the `UserStatsAccount` to track.
|
|
47
|
-
* @param resubOpts Resubscription watchdog options passed through to the underlying `WebSocketAccountSubscriber`.
|
|
48
|
-
* @param commitment Commitment for the underlying subscription; defaults to the provider's configured commitment.
|
|
49
|
-
*/
|
|
50
|
-
public constructor(
|
|
51
|
-
program: VelocityProgram,
|
|
52
|
-
userStatsAccountPublicKey: PublicKey,
|
|
53
|
-
resubOpts?: ResubOpts,
|
|
54
|
-
commitment?: Commitment
|
|
55
|
-
) {
|
|
56
|
-
this.isSubscribed = false;
|
|
57
|
-
this.program = program;
|
|
58
|
-
this.userStatsAccountPublicKey = userStatsAccountPublicKey;
|
|
59
|
-
this.eventEmitter = new EventEmitter();
|
|
60
|
-
this.resubOpts = resubOpts;
|
|
61
|
-
this.commitment = commitment;
|
|
62
|
-
}
|
|
63
|
-
|
|
64
|
-
/**
|
|
65
|
-
* Creates the underlying `WebSocketAccountSubscriber` and subscribes it. Idempotent: a no-op
|
|
66
|
-
* (returns `true`) if already subscribed.
|
|
67
|
-
* @param userStatsAccount Optional pre-fetched account data to seed the subscriber with, skipping the initial RPC fetch.
|
|
68
|
-
*/
|
|
69
|
-
async subscribe(userStatsAccount?: UserStatsAccount): Promise<boolean> {
|
|
70
|
-
if (this.isSubscribed) {
|
|
71
|
-
return true;
|
|
72
|
-
}
|
|
73
|
-
|
|
74
|
-
this.userStatsAccountSubscriber = new WebSocketAccountSubscriber(
|
|
75
|
-
'userStats',
|
|
76
|
-
this.program,
|
|
77
|
-
this.userStatsAccountPublicKey,
|
|
78
|
-
undefined,
|
|
79
|
-
this.resubOpts,
|
|
80
|
-
this.commitment
|
|
81
|
-
);
|
|
82
|
-
|
|
83
|
-
if (userStatsAccount) {
|
|
84
|
-
this.userStatsAccountSubscriber.setData(userStatsAccount);
|
|
85
|
-
}
|
|
86
|
-
|
|
87
|
-
await this.userStatsAccountSubscriber.subscribe(
|
|
88
|
-
(data: UserStatsAccount) => {
|
|
89
|
-
this.eventEmitter.emit('userStatsAccountUpdate', data);
|
|
90
|
-
this.eventEmitter.emit('update');
|
|
91
|
-
}
|
|
92
|
-
);
|
|
93
|
-
|
|
94
|
-
this.eventEmitter.emit('update');
|
|
95
|
-
this.isSubscribed = true;
|
|
96
|
-
return true;
|
|
97
|
-
}
|
|
98
|
-
|
|
99
|
-
/** Fetches the account once via the underlying `WebSocketAccountSubscriber`. */
|
|
100
|
-
async fetch(): Promise<void> {
|
|
101
|
-
await Promise.all([this.userStatsAccountSubscriber.fetch()]);
|
|
102
|
-
}
|
|
103
|
-
|
|
104
|
-
/** Tears down the underlying WebSocket subscription. A no-op if not subscribed. */
|
|
105
|
-
async unsubscribe(): Promise<void> {
|
|
106
|
-
if (!this.isSubscribed) {
|
|
107
|
-
return;
|
|
108
|
-
}
|
|
109
|
-
|
|
110
|
-
await Promise.all([this.userStatsAccountSubscriber.unsubscribe()]);
|
|
111
|
-
|
|
112
|
-
this.isSubscribed = false;
|
|
113
|
-
}
|
|
114
|
-
|
|
115
|
-
/** Throws `NotSubscribedError` if `subscribe()` has not been called. */
|
|
116
|
-
assertIsSubscribed(): void {
|
|
117
|
-
if (!this.isSubscribed) {
|
|
118
|
-
throw new NotSubscribedError(
|
|
119
|
-
'You must call `subscribe` before using this function'
|
|
120
|
-
);
|
|
121
|
-
}
|
|
122
|
-
}
|
|
123
|
-
|
|
124
|
-
/** Throws `NotSubscribedError` if not subscribed. Returns undefined only if subscribed but no data has loaded yet. */
|
|
125
|
-
public getUserStatsAccountAndSlot():
|
|
126
|
-
| DataAndSlot<UserStatsAccount>
|
|
127
|
-
| undefined {
|
|
128
|
-
this.assertIsSubscribed();
|
|
129
|
-
return this.userStatsAccountSubscriber.dataAndSlot;
|
|
130
|
-
}
|
|
131
|
-
}
|