@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,372 +0,0 @@
|
|
|
1
|
-
import { VelocityClient } from '../src/velocityClient';
|
|
2
|
-
import { grpcVelocityClientAccountSubscriberV2 } from '../src/accounts/grpcVelocityClientAccountSubscriberV2';
|
|
3
|
-
import { grpcVelocityClientAccountSubscriber } from '../src/accounts/grpcVelocityClientAccountSubscriber';
|
|
4
|
-
import { Connection, Keypair, PublicKey } from '@solana/web3.js';
|
|
5
|
-
import { VelocityClientConfig } from '../src/velocityClientConfig';
|
|
6
|
-
import {
|
|
7
|
-
VELOCITY_PROGRAM_ID,
|
|
8
|
-
PerpMarketAccount,
|
|
9
|
-
SpotMarketAccount,
|
|
10
|
-
Wallet,
|
|
11
|
-
OracleInfo,
|
|
12
|
-
} from '../src';
|
|
13
|
-
import { CommitmentLevel } from '@triton-one/yellowstone-grpc';
|
|
14
|
-
import dotenv from 'dotenv';
|
|
15
|
-
import {
|
|
16
|
-
AnchorProvider,
|
|
17
|
-
Idl,
|
|
18
|
-
Program,
|
|
19
|
-
ProgramAccount,
|
|
20
|
-
} from '@coral-xyz/anchor';
|
|
21
|
-
import velocityIDL from '../src/idl/velocity.json';
|
|
22
|
-
import assert from 'assert';
|
|
23
|
-
|
|
24
|
-
const GRPC_ENDPOINT = process.env.GRPC_ENDPOINT;
|
|
25
|
-
const TOKEN = process.env.TOKEN;
|
|
26
|
-
const RPC_ENDPOINT = process.env.RPC_ENDPOINT;
|
|
27
|
-
|
|
28
|
-
async function initializeGrpcVelocityClientV2VersusV1() {
|
|
29
|
-
const connection = new Connection(RPC_ENDPOINT);
|
|
30
|
-
const wallet = new Wallet(new Keypair());
|
|
31
|
-
dotenv.config({ path: '../' });
|
|
32
|
-
|
|
33
|
-
const programId = new PublicKey(VELOCITY_PROGRAM_ID);
|
|
34
|
-
const provider = new AnchorProvider(
|
|
35
|
-
connection,
|
|
36
|
-
// @ts-ignore
|
|
37
|
-
wallet,
|
|
38
|
-
{
|
|
39
|
-
commitment: 'processed',
|
|
40
|
-
}
|
|
41
|
-
);
|
|
42
|
-
|
|
43
|
-
const program = new Program(velocityIDL as Idl, programId, provider);
|
|
44
|
-
|
|
45
|
-
const allPerpMarketProgramAccounts =
|
|
46
|
-
(await program.account.perpMarket.all()) as ProgramAccount<PerpMarketAccount>[];
|
|
47
|
-
const perpMarketProgramAccounts = allPerpMarketProgramAccounts.filter((val) =>
|
|
48
|
-
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15].includes(
|
|
49
|
-
val.account.marketIndex
|
|
50
|
-
)
|
|
51
|
-
);
|
|
52
|
-
const perpMarketIndexes = perpMarketProgramAccounts.map(
|
|
53
|
-
(val) => val.account.marketIndex
|
|
54
|
-
);
|
|
55
|
-
|
|
56
|
-
const allSpotMarketProgramAccounts =
|
|
57
|
-
(await program.account.spotMarket.all()) as ProgramAccount<SpotMarketAccount>[];
|
|
58
|
-
const spotMarketProgramAccounts = allSpotMarketProgramAccounts.filter((val) =>
|
|
59
|
-
[0, 1, 2, 3, 4, 5].includes(val.account.marketIndex)
|
|
60
|
-
);
|
|
61
|
-
const spotMarketIndexes = spotMarketProgramAccounts.map(
|
|
62
|
-
(val) => val.account.marketIndex
|
|
63
|
-
);
|
|
64
|
-
|
|
65
|
-
const seen = new Set<string>();
|
|
66
|
-
const oracleInfos: OracleInfo[] = [];
|
|
67
|
-
for (const acct of perpMarketProgramAccounts) {
|
|
68
|
-
const key = `${acct.account.amm.oracle.toBase58()}-${
|
|
69
|
-
Object.keys(acct.account.amm.oracleSource)[0]
|
|
70
|
-
}`;
|
|
71
|
-
if (!seen.has(key)) {
|
|
72
|
-
seen.add(key);
|
|
73
|
-
oracleInfos.push({
|
|
74
|
-
publicKey: acct.account.amm.oracle,
|
|
75
|
-
source: acct.account.amm.oracleSource,
|
|
76
|
-
});
|
|
77
|
-
}
|
|
78
|
-
}
|
|
79
|
-
for (const acct of spotMarketProgramAccounts) {
|
|
80
|
-
const key = `${acct.account.oracle.toBase58()}-${
|
|
81
|
-
Object.keys(acct.account.oracleSource)[0]
|
|
82
|
-
}`;
|
|
83
|
-
if (!seen.has(key)) {
|
|
84
|
-
seen.add(key);
|
|
85
|
-
oracleInfos.push({
|
|
86
|
-
publicKey: acct.account.oracle,
|
|
87
|
-
source: acct.account.oracleSource,
|
|
88
|
-
});
|
|
89
|
-
}
|
|
90
|
-
}
|
|
91
|
-
|
|
92
|
-
const baseAccountSubscription = {
|
|
93
|
-
type: 'grpc' as const,
|
|
94
|
-
grpcConfigs: {
|
|
95
|
-
endpoint: GRPC_ENDPOINT,
|
|
96
|
-
token: TOKEN,
|
|
97
|
-
commitmentLevel: CommitmentLevel.PROCESSED,
|
|
98
|
-
channelOptions: {
|
|
99
|
-
grpcKeepAliveTimeout: 1_000,
|
|
100
|
-
grpcTcpKeepalive: 10_000,
|
|
101
|
-
},
|
|
102
|
-
},
|
|
103
|
-
};
|
|
104
|
-
|
|
105
|
-
const configV2: VelocityClientConfig = {
|
|
106
|
-
connection,
|
|
107
|
-
wallet,
|
|
108
|
-
programID: new PublicKey(VELOCITY_PROGRAM_ID),
|
|
109
|
-
accountSubscription: {
|
|
110
|
-
...baseAccountSubscription,
|
|
111
|
-
velocityClientAccountSubscriber: grpcVelocityClientAccountSubscriberV2,
|
|
112
|
-
},
|
|
113
|
-
perpMarketIndexes,
|
|
114
|
-
spotMarketIndexes,
|
|
115
|
-
oracleInfos,
|
|
116
|
-
};
|
|
117
|
-
|
|
118
|
-
const configV1: VelocityClientConfig = {
|
|
119
|
-
connection,
|
|
120
|
-
wallet,
|
|
121
|
-
programID: new PublicKey(VELOCITY_PROGRAM_ID),
|
|
122
|
-
accountSubscription: {
|
|
123
|
-
...baseAccountSubscription,
|
|
124
|
-
velocityClientAccountSubscriber: grpcVelocityClientAccountSubscriber,
|
|
125
|
-
},
|
|
126
|
-
perpMarketIndexes,
|
|
127
|
-
spotMarketIndexes,
|
|
128
|
-
oracleInfos,
|
|
129
|
-
};
|
|
130
|
-
|
|
131
|
-
const clientV2 = new VelocityClient(configV2);
|
|
132
|
-
const clientV1 = new VelocityClient(configV1);
|
|
133
|
-
|
|
134
|
-
await Promise.all([clientV1.subscribe(), clientV2.subscribe()]);
|
|
135
|
-
const compare = () => {
|
|
136
|
-
try {
|
|
137
|
-
// 1. Test getStateAccountAndSlot
|
|
138
|
-
const state1 = clientV1.accountSubscriber.getStateAccountAndSlot();
|
|
139
|
-
const state2 = clientV2.accountSubscriber.getStateAccountAndSlot();
|
|
140
|
-
assert.deepStrictEqual(
|
|
141
|
-
state1.data,
|
|
142
|
-
state2.data,
|
|
143
|
-
'State accounts should match'
|
|
144
|
-
);
|
|
145
|
-
if (
|
|
146
|
-
state1.slot !== undefined &&
|
|
147
|
-
state2.slot !== undefined &&
|
|
148
|
-
state2.slot < state1.slot
|
|
149
|
-
) {
|
|
150
|
-
console.error(
|
|
151
|
-
`State account slot regression: v2 slot ${state2.slot} < v1 slot ${state1.slot}`
|
|
152
|
-
);
|
|
153
|
-
}
|
|
154
|
-
|
|
155
|
-
// 2. Test getMarketAccountsAndSlots (all perp markets) - sorted comparison
|
|
156
|
-
const allPerpMarkets1 = clientV1.accountSubscriber
|
|
157
|
-
.getMarketAccountsAndSlots()
|
|
158
|
-
.sort((a, b) => a.data.marketIndex - b.data.marketIndex);
|
|
159
|
-
const allPerpMarkets2 = clientV2.accountSubscriber
|
|
160
|
-
.getMarketAccountsAndSlots()
|
|
161
|
-
.sort((a, b) => a.data.marketIndex - b.data.marketIndex);
|
|
162
|
-
assert.strictEqual(
|
|
163
|
-
allPerpMarkets1.length,
|
|
164
|
-
allPerpMarkets2.length,
|
|
165
|
-
'Number of perp markets should match'
|
|
166
|
-
);
|
|
167
|
-
|
|
168
|
-
// Compare each perp market in the sorted arrays
|
|
169
|
-
for (let i = 0; i < allPerpMarkets1.length; i++) {
|
|
170
|
-
const market1 = allPerpMarkets1[i];
|
|
171
|
-
const market2 = allPerpMarkets2[i];
|
|
172
|
-
assert.strictEqual(
|
|
173
|
-
market1.data.marketIndex,
|
|
174
|
-
market2.data.marketIndex,
|
|
175
|
-
`Perp market at position ${i} should have same marketIndex`
|
|
176
|
-
);
|
|
177
|
-
// assert.deepStrictEqual(
|
|
178
|
-
// market1.data,
|
|
179
|
-
// market2.data,
|
|
180
|
-
// `Perp market ${market1.data.marketIndex} (from getMarketAccountsAndSlots) should match`
|
|
181
|
-
// );
|
|
182
|
-
}
|
|
183
|
-
|
|
184
|
-
// 3. Test getMarketAccountAndSlot for each perp market
|
|
185
|
-
for (const idx of perpMarketIndexes) {
|
|
186
|
-
const market1 = clientV1.accountSubscriber.getMarketAccountAndSlot(idx);
|
|
187
|
-
const market2 = clientV2.accountSubscriber.getMarketAccountAndSlot(idx);
|
|
188
|
-
// assert.deepStrictEqual(
|
|
189
|
-
// market1?.data,
|
|
190
|
-
// market2?.data,
|
|
191
|
-
// `Perp market ${idx} data should match`
|
|
192
|
-
// );
|
|
193
|
-
// assert.strictEqual(
|
|
194
|
-
// market1?.slot,
|
|
195
|
-
// market2?.slot,
|
|
196
|
-
// `Perp market ${idx} slot should match`
|
|
197
|
-
// );
|
|
198
|
-
if (
|
|
199
|
-
market1?.slot !== undefined &&
|
|
200
|
-
market2?.slot !== undefined &&
|
|
201
|
-
market2.slot < market1.slot
|
|
202
|
-
) {
|
|
203
|
-
console.error(
|
|
204
|
-
`Perp market ${idx} slot regression: v2 slot ${market2.slot} < v1 slot ${market1.slot}`
|
|
205
|
-
);
|
|
206
|
-
} else if (
|
|
207
|
-
market1?.slot !== undefined &&
|
|
208
|
-
market2?.slot !== undefined &&
|
|
209
|
-
market2.slot > market1.slot
|
|
210
|
-
) {
|
|
211
|
-
console.info(
|
|
212
|
-
`Perp market ${idx} slot is FASTER! v2: ${market2.slot}, v1: ${market1.slot}`
|
|
213
|
-
);
|
|
214
|
-
}
|
|
215
|
-
}
|
|
216
|
-
|
|
217
|
-
// 4. Test getSpotMarketAccountsAndSlots (all spot markets) - sorted comparison
|
|
218
|
-
const allSpotMarkets1 = clientV1.accountSubscriber
|
|
219
|
-
.getSpotMarketAccountsAndSlots()
|
|
220
|
-
.sort((a, b) => a.data.marketIndex - b.data.marketIndex);
|
|
221
|
-
const allSpotMarkets2 = clientV2.accountSubscriber
|
|
222
|
-
.getSpotMarketAccountsAndSlots()
|
|
223
|
-
.sort((a, b) => a.data.marketIndex - b.data.marketIndex);
|
|
224
|
-
assert.strictEqual(
|
|
225
|
-
allSpotMarkets1.length,
|
|
226
|
-
allSpotMarkets2.length,
|
|
227
|
-
'Number of spot markets should match'
|
|
228
|
-
);
|
|
229
|
-
|
|
230
|
-
// Compare each spot market in the sorted arrays
|
|
231
|
-
for (let i = 0; i < allSpotMarkets1.length; i++) {
|
|
232
|
-
const market1 = allSpotMarkets1[i];
|
|
233
|
-
const market2 = allSpotMarkets2[i];
|
|
234
|
-
assert.strictEqual(
|
|
235
|
-
market1.data.marketIndex,
|
|
236
|
-
market2.data.marketIndex,
|
|
237
|
-
`Spot market at position ${i} should have same marketIndex`
|
|
238
|
-
);
|
|
239
|
-
// assert.deepStrictEqual(
|
|
240
|
-
// market1.data,
|
|
241
|
-
// market2.data,
|
|
242
|
-
// `Spot market ${market1.data.marketIndex} (from getSpotMarketAccountsAndSlots) should match`
|
|
243
|
-
// );
|
|
244
|
-
}
|
|
245
|
-
|
|
246
|
-
// 5. Test getSpotMarketAccountAndSlot for each spot market
|
|
247
|
-
for (const idx of spotMarketIndexes) {
|
|
248
|
-
const market1 =
|
|
249
|
-
clientV1.accountSubscriber.getSpotMarketAccountAndSlot(idx);
|
|
250
|
-
const market2 =
|
|
251
|
-
clientV2.accountSubscriber.getSpotMarketAccountAndSlot(idx);
|
|
252
|
-
// assert.deepStrictEqual(
|
|
253
|
-
// market1?.data,
|
|
254
|
-
// market2?.data,
|
|
255
|
-
// `Spot market ${idx} data should match`
|
|
256
|
-
// );
|
|
257
|
-
// assert.strictEqual(
|
|
258
|
-
// market1?.slot,
|
|
259
|
-
// market2?.slot,
|
|
260
|
-
// `Spot market ${idx} slot should match`
|
|
261
|
-
// );
|
|
262
|
-
if (
|
|
263
|
-
market1?.slot !== undefined &&
|
|
264
|
-
market2?.slot !== undefined &&
|
|
265
|
-
market2.slot < market1.slot
|
|
266
|
-
) {
|
|
267
|
-
console.error(
|
|
268
|
-
`Spot market ${idx} slot regression: v2 slot ${market2.slot} < v1 slot ${market1.slot}`
|
|
269
|
-
);
|
|
270
|
-
} else if (
|
|
271
|
-
market1?.slot !== undefined &&
|
|
272
|
-
market2?.slot !== undefined &&
|
|
273
|
-
market2.slot > market1.slot
|
|
274
|
-
) {
|
|
275
|
-
console.info(
|
|
276
|
-
`Spot market ${idx} slot is FASTER! v2: ${market2.slot}, v1: ${market1.slot}`
|
|
277
|
-
);
|
|
278
|
-
}
|
|
279
|
-
}
|
|
280
|
-
|
|
281
|
-
// 6. Test getOraclePriceDataAndSlotForPerpMarket
|
|
282
|
-
for (const idx of perpMarketIndexes) {
|
|
283
|
-
const oracle1 =
|
|
284
|
-
clientV1.accountSubscriber.getOraclePriceDataAndSlotForPerpMarket(
|
|
285
|
-
idx
|
|
286
|
-
);
|
|
287
|
-
const oracle2 =
|
|
288
|
-
clientV2.accountSubscriber.getOraclePriceDataAndSlotForPerpMarket(
|
|
289
|
-
idx
|
|
290
|
-
);
|
|
291
|
-
// assert.deepStrictEqual(
|
|
292
|
-
// oracle1?.data,
|
|
293
|
-
// oracle2?.data,
|
|
294
|
-
// `Perp market ${idx} oracle data should match`
|
|
295
|
-
// );
|
|
296
|
-
// Note: slots might differ slightly due to timing, so we can optionally skip this check or be lenient
|
|
297
|
-
// assert.strictEqual(oracle1?.slot, oracle2?.slot, `Perp market ${idx} oracle slot should match`);
|
|
298
|
-
if (
|
|
299
|
-
oracle1?.slot !== undefined &&
|
|
300
|
-
oracle2?.slot !== undefined &&
|
|
301
|
-
oracle2.slot < oracle1.slot
|
|
302
|
-
) {
|
|
303
|
-
console.error(
|
|
304
|
-
`Perp market ${idx} oracle slot regression: v2 slot ${oracle2.slot} < v1 slot ${oracle1.slot}`
|
|
305
|
-
);
|
|
306
|
-
} else if (
|
|
307
|
-
oracle1?.slot !== undefined &&
|
|
308
|
-
oracle2?.slot !== undefined &&
|
|
309
|
-
oracle2.slot > oracle1.slot
|
|
310
|
-
) {
|
|
311
|
-
console.info(
|
|
312
|
-
`Perp market ${idx} oracle slot is FASTER! v2: ${oracle2.slot}, v1: ${oracle1.slot}`
|
|
313
|
-
);
|
|
314
|
-
}
|
|
315
|
-
}
|
|
316
|
-
|
|
317
|
-
// 7. Test getOraclePriceDataAndSlotForSpotMarket
|
|
318
|
-
for (const idx of spotMarketIndexes) {
|
|
319
|
-
const oracle1 =
|
|
320
|
-
clientV1.accountSubscriber.getOraclePriceDataAndSlotForSpotMarket(
|
|
321
|
-
idx
|
|
322
|
-
);
|
|
323
|
-
const oracle2 =
|
|
324
|
-
clientV2.accountSubscriber.getOraclePriceDataAndSlotForSpotMarket(
|
|
325
|
-
idx
|
|
326
|
-
);
|
|
327
|
-
// assert.deepStrictEqual(
|
|
328
|
-
// oracle1?.data,
|
|
329
|
-
// oracle2?.data,
|
|
330
|
-
// `Spot market ${idx} oracle data should match`
|
|
331
|
-
// );
|
|
332
|
-
// Note: slots might differ slightly due to timing
|
|
333
|
-
// assert.strictEqual(oracle1?.slot, oracle2?.slot, `Spot market ${idx} oracle slot should match`);
|
|
334
|
-
if (
|
|
335
|
-
oracle1?.slot !== undefined &&
|
|
336
|
-
oracle2?.slot !== undefined &&
|
|
337
|
-
oracle2.slot < oracle1.slot
|
|
338
|
-
) {
|
|
339
|
-
console.error(
|
|
340
|
-
`Spot market ${idx} oracle slot regression: v2 slot ${oracle2.slot} < v1 slot ${oracle1.slot}`
|
|
341
|
-
);
|
|
342
|
-
} else if (
|
|
343
|
-
oracle1?.slot !== undefined &&
|
|
344
|
-
oracle2?.slot !== undefined &&
|
|
345
|
-
oracle2.slot > oracle1.slot
|
|
346
|
-
) {
|
|
347
|
-
console.info(
|
|
348
|
-
`Spot market ${idx} oracle slot is FASTER! v2: ${oracle2.slot}, v1: ${oracle1.slot}`
|
|
349
|
-
);
|
|
350
|
-
}
|
|
351
|
-
}
|
|
352
|
-
|
|
353
|
-
console.log('✓ All comparisons passed');
|
|
354
|
-
} catch (error) {
|
|
355
|
-
console.error('✗ Comparison failed:', error);
|
|
356
|
-
}
|
|
357
|
-
};
|
|
358
|
-
|
|
359
|
-
compare();
|
|
360
|
-
const interval = setInterval(compare, 1000);
|
|
361
|
-
|
|
362
|
-
const cleanup = async () => {
|
|
363
|
-
clearInterval(interval);
|
|
364
|
-
await Promise.all([clientV1.unsubscribe(), clientV2.unsubscribe()]);
|
|
365
|
-
process.exit(0);
|
|
366
|
-
};
|
|
367
|
-
|
|
368
|
-
process.on('SIGINT', cleanup);
|
|
369
|
-
process.on('SIGTERM', cleanup);
|
|
370
|
-
}
|
|
371
|
-
|
|
372
|
-
initializeGrpcVelocityClientV2VersusV1().catch(console.error);
|
|
@@ -1,158 +0,0 @@
|
|
|
1
|
-
import { grpcUserAccountSubscriber } from '../src/accounts/grpcUserAccountSubscriber';
|
|
2
|
-
import { grpcMultiUserAccountSubscriber } from '../src/accounts/grpcMultiUserAccountSubscriber';
|
|
3
|
-
import { Connection, Keypair, PublicKey } from '@solana/web3.js';
|
|
4
|
-
import { VELOCITY_PROGRAM_ID } from '../src';
|
|
5
|
-
import { CommitmentLevel } from '@triton-one/yellowstone-grpc';
|
|
6
|
-
import { AnchorProvider, Idl, Program } from '@coral-xyz/anchor';
|
|
7
|
-
import velocityIDL from '../src/idl/velocity.json';
|
|
8
|
-
import assert from 'assert';
|
|
9
|
-
import { Wallet } from '../src';
|
|
10
|
-
|
|
11
|
-
const GRPC_ENDPOINT = process.env.GRPC_ENDPOINT;
|
|
12
|
-
const TOKEN = process.env.TOKEN;
|
|
13
|
-
const RPC_ENDPOINT = process.env.RPC_ENDPOINT;
|
|
14
|
-
|
|
15
|
-
const USER_ACCOUNT_PUBKEYS = [
|
|
16
|
-
// Add user account public keys here, e.g.:
|
|
17
|
-
// new PublicKey('...')
|
|
18
|
-
];
|
|
19
|
-
|
|
20
|
-
async function testGrpcUserAccountSubscriberV1VsV2() {
|
|
21
|
-
console.log('🚀 Initializing User Account Subscriber V1 vs V2 Test...');
|
|
22
|
-
|
|
23
|
-
if (USER_ACCOUNT_PUBKEYS.length === 0) {
|
|
24
|
-
console.error(
|
|
25
|
-
'❌ No user account public keys provided. Please add some to USER_ACCOUNT_PUBKEYS array.'
|
|
26
|
-
);
|
|
27
|
-
process.exit(1);
|
|
28
|
-
}
|
|
29
|
-
|
|
30
|
-
const connection = new Connection(RPC_ENDPOINT);
|
|
31
|
-
const wallet = new Wallet(new Keypair());
|
|
32
|
-
|
|
33
|
-
const programId = new PublicKey(VELOCITY_PROGRAM_ID);
|
|
34
|
-
const provider = new AnchorProvider(
|
|
35
|
-
connection,
|
|
36
|
-
// @ts-ignore
|
|
37
|
-
wallet,
|
|
38
|
-
{
|
|
39
|
-
commitment: 'processed',
|
|
40
|
-
}
|
|
41
|
-
);
|
|
42
|
-
|
|
43
|
-
const program = new Program(velocityIDL as Idl, programId, provider);
|
|
44
|
-
|
|
45
|
-
const grpcConfigs = {
|
|
46
|
-
endpoint: GRPC_ENDPOINT,
|
|
47
|
-
token: TOKEN,
|
|
48
|
-
commitmentLevel: CommitmentLevel.PROCESSED,
|
|
49
|
-
channelOptions: {
|
|
50
|
-
grpcKeepAliveTimeout: 1_000,
|
|
51
|
-
grpcTcpKeepalive: 10_000,
|
|
52
|
-
},
|
|
53
|
-
};
|
|
54
|
-
|
|
55
|
-
console.log(`📊 Testing ${USER_ACCOUNT_PUBKEYS.length} user accounts...`);
|
|
56
|
-
|
|
57
|
-
// V1: Create individual subscribers for each user account
|
|
58
|
-
const v1Subscribers = USER_ACCOUNT_PUBKEYS.map(
|
|
59
|
-
(pubkey) =>
|
|
60
|
-
new grpcUserAccountSubscriber(grpcConfigs, program, pubkey, {
|
|
61
|
-
logResubMessages: true,
|
|
62
|
-
})
|
|
63
|
-
);
|
|
64
|
-
|
|
65
|
-
// V2: Create a single multi-subscriber and get per-user interfaces
|
|
66
|
-
const v2MultiSubscriber = new grpcMultiUserAccountSubscriber(
|
|
67
|
-
program,
|
|
68
|
-
grpcConfigs,
|
|
69
|
-
{ logResubMessages: true }
|
|
70
|
-
);
|
|
71
|
-
const v2Subscribers = USER_ACCOUNT_PUBKEYS.map((pubkey) =>
|
|
72
|
-
v2MultiSubscriber.forUser(pubkey)
|
|
73
|
-
);
|
|
74
|
-
|
|
75
|
-
// Subscribe all V1 subscribers
|
|
76
|
-
console.log('🔗 Subscribing V1 subscribers...');
|
|
77
|
-
await Promise.all(v1Subscribers.map((sub) => sub.subscribe()));
|
|
78
|
-
console.log('✅ V1 subscribers ready');
|
|
79
|
-
|
|
80
|
-
// Subscribe all V2 subscribers
|
|
81
|
-
console.log('🔗 Subscribing V2 subscribers...');
|
|
82
|
-
await v2MultiSubscriber.subscribe();
|
|
83
|
-
console.log('✅ V2 subscribers ready');
|
|
84
|
-
|
|
85
|
-
const compare = () => {
|
|
86
|
-
try {
|
|
87
|
-
let passedTests = 0;
|
|
88
|
-
let totalTests = 0;
|
|
89
|
-
|
|
90
|
-
// Test each user account
|
|
91
|
-
for (let i = 0; i < USER_ACCOUNT_PUBKEYS.length; i++) {
|
|
92
|
-
const pubkey = USER_ACCOUNT_PUBKEYS[i];
|
|
93
|
-
const v1Sub = v1Subscribers[i];
|
|
94
|
-
const v2Sub = v2Subscribers[i];
|
|
95
|
-
|
|
96
|
-
totalTests++;
|
|
97
|
-
|
|
98
|
-
// 1. Test isSubscribed
|
|
99
|
-
assert.strictEqual(
|
|
100
|
-
v1Sub.isSubscribed,
|
|
101
|
-
v2Sub.isSubscribed,
|
|
102
|
-
`User ${pubkey.toBase58()}: isSubscribed should match`
|
|
103
|
-
);
|
|
104
|
-
|
|
105
|
-
// 2. Test getUserAccountAndSlot
|
|
106
|
-
const v1Data = v1Sub.getUserAccountAndSlot();
|
|
107
|
-
const v2Data = v2Sub.getUserAccountAndSlot();
|
|
108
|
-
|
|
109
|
-
// Compare the user account data
|
|
110
|
-
assert.deepStrictEqual(
|
|
111
|
-
v1Data.data,
|
|
112
|
-
v2Data.data,
|
|
113
|
-
`User ${pubkey.toBase58()}: account data should match`
|
|
114
|
-
);
|
|
115
|
-
|
|
116
|
-
// Slots might differ slightly due to timing, but let's check if they're close
|
|
117
|
-
const slotDiff = Math.abs(v1Data.slot - v2Data.slot);
|
|
118
|
-
if (slotDiff > 10) {
|
|
119
|
-
console.warn(
|
|
120
|
-
`⚠️ User ${pubkey.toBase58()}: slot difference is ${slotDiff} (v1: ${
|
|
121
|
-
v1Data.slot
|
|
122
|
-
}, v2: ${v2Data.slot})`
|
|
123
|
-
);
|
|
124
|
-
}
|
|
125
|
-
|
|
126
|
-
passedTests++;
|
|
127
|
-
}
|
|
128
|
-
|
|
129
|
-
console.log(
|
|
130
|
-
`✅ All comparisons passed (${passedTests}/${totalTests} user accounts)`
|
|
131
|
-
);
|
|
132
|
-
} catch (error) {
|
|
133
|
-
console.error('❌ Comparison failed:', error);
|
|
134
|
-
}
|
|
135
|
-
};
|
|
136
|
-
|
|
137
|
-
// Run initial comparison
|
|
138
|
-
compare();
|
|
139
|
-
|
|
140
|
-
// Run comparison every second to verify live updates
|
|
141
|
-
const interval = setInterval(compare, 1000);
|
|
142
|
-
|
|
143
|
-
const cleanup = async () => {
|
|
144
|
-
clearInterval(interval);
|
|
145
|
-
console.log('🧹 Cleaning up...');
|
|
146
|
-
await Promise.all([
|
|
147
|
-
...v1Subscribers.map((sub) => sub.unsubscribe()),
|
|
148
|
-
...v2Subscribers.map((sub) => sub.unsubscribe()),
|
|
149
|
-
]);
|
|
150
|
-
console.log('✅ Cleanup complete');
|
|
151
|
-
process.exit(0);
|
|
152
|
-
};
|
|
153
|
-
|
|
154
|
-
process.on('SIGINT', cleanup);
|
|
155
|
-
process.on('SIGTERM', cleanup);
|
|
156
|
-
}
|
|
157
|
-
|
|
158
|
-
testGrpcUserAccountSubscriberV1VsV2().catch(console.error);
|
package/scripts/postbuild.js
DELETED
|
@@ -1,95 +0,0 @@
|
|
|
1
|
-
// scripts/postbuild.js
|
|
2
|
-
const fs = require('fs');
|
|
3
|
-
const path = require('path');
|
|
4
|
-
const yargs = require('yargs/yargs');
|
|
5
|
-
const { hideBin } = require('yargs/helpers');
|
|
6
|
-
|
|
7
|
-
const forceEnv = yargs(hideBin(process.argv))
|
|
8
|
-
.option('force-env', {
|
|
9
|
-
type: 'string',
|
|
10
|
-
description: 'Specify environment to force (node or browser)',
|
|
11
|
-
choices: ['node', 'browser']
|
|
12
|
-
})
|
|
13
|
-
.argv?.forceEnv;
|
|
14
|
-
|
|
15
|
-
const isomorphicPackages = ['grpc', 'anchor', 'anchor29'];
|
|
16
|
-
const environments = ['node', 'browser'];
|
|
17
|
-
|
|
18
|
-
environments.forEach((environment) => {
|
|
19
|
-
console.log(`Running ${environment} environment postbuild script`);
|
|
20
|
-
console.log(``);
|
|
21
|
-
|
|
22
|
-
isomorphicPackages.forEach((package) => {
|
|
23
|
-
|
|
24
|
-
// We want to overwrite the base isomorphic files (the "target" files) with the concrete implementation code and definition files (the "source" files).
|
|
25
|
-
|
|
26
|
-
const isomorphicFolderPath = path.join(
|
|
27
|
-
__dirname,
|
|
28
|
-
'..',
|
|
29
|
-
'lib',
|
|
30
|
-
environment,
|
|
31
|
-
'isomorphic'
|
|
32
|
-
);
|
|
33
|
-
|
|
34
|
-
const targetEnv = forceEnv ? forceEnv : environment;
|
|
35
|
-
|
|
36
|
-
const filesToSwap = [
|
|
37
|
-
{
|
|
38
|
-
source: `${package}.${targetEnv}.js`,
|
|
39
|
-
target: `${package}.js`,
|
|
40
|
-
},
|
|
41
|
-
{
|
|
42
|
-
source: `${package}.${targetEnv}.d.ts`,
|
|
43
|
-
target: `${package}.d.ts`,
|
|
44
|
-
},
|
|
45
|
-
];
|
|
46
|
-
|
|
47
|
-
for (const file of filesToSwap) {
|
|
48
|
-
const sourcePath = path.join(
|
|
49
|
-
isomorphicFolderPath,
|
|
50
|
-
file.source
|
|
51
|
-
);
|
|
52
|
-
|
|
53
|
-
const targetPath = path.join(
|
|
54
|
-
isomorphicFolderPath,
|
|
55
|
-
file.target
|
|
56
|
-
);
|
|
57
|
-
|
|
58
|
-
try {
|
|
59
|
-
const sourceContent = fs.readFileSync(sourcePath, 'utf8');
|
|
60
|
-
fs.writeFileSync(targetPath, sourceContent);
|
|
61
|
-
} catch (error) {
|
|
62
|
-
console.error(
|
|
63
|
-
`Error processing isomophic package : ${package} :: ${error.message}`
|
|
64
|
-
);
|
|
65
|
-
}
|
|
66
|
-
}
|
|
67
|
-
|
|
68
|
-
// Delete other environment files for safety
|
|
69
|
-
environments.forEach((otherEnvironment) => {
|
|
70
|
-
if (otherEnvironment === targetEnv) {
|
|
71
|
-
return;
|
|
72
|
-
}
|
|
73
|
-
|
|
74
|
-
const otherTargetFiles = [
|
|
75
|
-
`${package}.${otherEnvironment}.js`,
|
|
76
|
-
`${package}.${otherEnvironment}.d.ts`,
|
|
77
|
-
];
|
|
78
|
-
|
|
79
|
-
for (const otherTargetFile of otherTargetFiles) {
|
|
80
|
-
const otherTargetPath = path.join(
|
|
81
|
-
__dirname,
|
|
82
|
-
'..',
|
|
83
|
-
'lib',
|
|
84
|
-
environment,
|
|
85
|
-
'isomorphic',
|
|
86
|
-
otherTargetFile
|
|
87
|
-
);
|
|
88
|
-
|
|
89
|
-
if (fs.existsSync(otherTargetPath)) {
|
|
90
|
-
fs.unlinkSync(otherTargetPath);
|
|
91
|
-
}
|
|
92
|
-
}
|
|
93
|
-
});
|
|
94
|
-
});
|
|
95
|
-
});
|