Skip to content

Commit 697ce50

Browse files
authored
Remove Circular Dependencies 3 (#1779)
1 parent 8a373a1 commit 697ce50

File tree

15 files changed

+80
-84
lines changed

15 files changed

+80
-84
lines changed

sdk/src/dlob/DLOB.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ import {
1010
} from '../constants/numericConstants';
1111
import { decodeName } from '../userName';
1212
import { DLOBNode, DLOBNodeType } from './DLOBNode';
13-
import { DriftClient } from '../driftClient';
13+
import { IDriftClient } from '../driftClient/types';
1414
import {
1515
getLimitPrice,
1616
isOrderExpired,
@@ -1561,7 +1561,7 @@ export class DLOB implements IDLOB {
15611561
}
15621562

15631563
public printTop(
1564-
driftClient: DriftClient,
1564+
driftClient: IDriftClient,
15651565
slotSubscriber: SlotSubscriber,
15661566
marketIndex: number,
15671567
marketType: MarketType

sdk/src/driftClient/index.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -137,7 +137,7 @@ import { PollingDriftClientAccountSubscriber } from '../accounts/driftClientAcco
137137
import { WebSocketDriftClientAccountSubscriber } from '../accounts/driftClientAccount/webSocketDriftClientAccountSubscriber';
138138
import { RetryTxSender } from '../tx/retryTxSender';
139139
import { User } from '../user';
140-
import { UserSubscriptionConfig } from '../userConfig';
140+
import { UserSubscriptionConfig } from '../user/types';
141141
import {
142142
configs,
143143
DRIFT_ORACLE_RECEIVER_ID,

sdk/src/driftClient/types.ts

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -59,8 +59,7 @@ import {
5959
} from '../accounts/types';
6060
import { TxSender, TxSigAndSlot } from '../tx/types';
6161
import { OraclePriceData } from '../oracles/types';
62-
import { User } from '../user';
63-
import { UserSubscriptionConfig } from '../userConfig';
62+
import { UserSubscriptionConfig } from '../user/types';
6463
import { DriftEnv } from '../config/types';
6564
import { IUserStats } from '../userStats/types';
6665
import { UserStatsSubscriptionConfig } from '../userStatsConfig';
@@ -74,6 +73,7 @@ import {
7473
SwapMode,
7574
} from '../jupiter/jupiterClient';
7675
import { TxHandler } from '../tx/txHandler';
76+
import { IUser } from '../user/types';
7777

7878
type RemainingAccountParams = {
7979
userAccounts: UserAccount[];
@@ -93,7 +93,7 @@ export interface IDriftClient {
9393
env: DriftEnv;
9494
opts?: ConfirmOptions;
9595
useHotWalletAdmin?: boolean;
96-
users: Map<string, User>;
96+
users: Map<string, IUser>;
9797
userStats?: IUserStats;
9898
activeSubAccountId: number;
9999
userAccountSubscriptionConfig: UserSubscriptionConfig;
@@ -139,7 +139,7 @@ export interface IDriftClient {
139139
subAccountId: number,
140140
accountSubscriptionConfig: UserSubscriptionConfig,
141141
authority?: PublicKey
142-
): User;
142+
): IUser;
143143
subscribe(): Promise<boolean>;
144144
subscribeUsers(): Promise<boolean>[];
145145

@@ -427,9 +427,9 @@ export interface IDriftClient {
427427
getReclaimRentIx(
428428
userAccountPublicKey: PublicKey
429429
): Promise<TransactionInstruction>;
430-
getUser(subAccountId?: number, authority?: PublicKey): User;
430+
getUser(subAccountId?: number, authority?: PublicKey): IUser;
431431
hasUser(subAccountId?: number, authority?: PublicKey): boolean;
432-
getUsers(): User[];
432+
getUsers(): IUser[];
433433
getUserStats(): IUserStats;
434434
fetchReferrerNameAccount(
435435
name: string
@@ -2018,7 +2018,7 @@ export interface IDriftClient {
20182018
getMarketFees(
20192019
marketType: MarketType,
20202020
marketIndex?: number,
2021-
user?: User,
2021+
user?: IUser,
20222022
enteringHighLeverageMode?: boolean
20232023
): { takerFee: number; makerFee: number };
20242024

sdk/src/index.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@ export * from './adminClient';
3131
export * from './assert/assert';
3232
export * from './testClient';
3333
export * from './user';
34-
export * from './userConfig';
34+
export * from './user/types';
3535
export * from './userStats';
3636
export * from './userName';
3737
export * from './userStatsConfig';

sdk/src/math/margin.ts

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,6 @@ import { BN } from '@coral-xyz/anchor';
1515
import { OraclePriceData } from '../oracles/types';
1616
import { calculateMarketMarginRatio } from './market';
1717
import { calculateScaledInitialAssetWeight } from './spotBalance';
18-
import { DriftClient } from '../driftClient';
1918
import { OneShotUserAccountSubscriber } from '../accounts/userAccount/oneShotUserAccountSubscriber';
2019
import {
2120
PerpMarketAccount,
@@ -27,6 +26,7 @@ import { PublicKey } from '@solana/web3.js';
2726
import { User } from '../user';
2827
import { isVariant } from '../types';
2928
import { assert } from '../assert/assert';
29+
import { IDriftClient } from '../driftClient/types';
3030

3131
export function calculateSizePremiumLiabilityWeight(
3232
size: BN, // AMM_RESERVE_PRECISION
@@ -216,7 +216,7 @@ export function calculatePerpLiabilityValue(
216216
* @returns
217217
*/
218218
export function calculateMarginUSDCRequiredForTrade(
219-
driftClient: DriftClient,
219+
driftClient: IDriftClient,
220220
targetMarketIndex: number,
221221
baseSize: BN,
222222
userMaxMarginRatio?: number,
@@ -256,7 +256,7 @@ export function calculateMarginUSDCRequiredForTrade(
256256
* Returns collateral required in the precision of the target collateral market.
257257
*/
258258
export function calculateCollateralDepositRequiredForTrade(
259-
driftClient: DriftClient,
259+
driftClient: IDriftClient,
260260
targetMarketIndex: number,
261261
baseSize: BN,
262262
collateralIndex: number,
@@ -298,7 +298,7 @@ export function calculateCollateralDepositRequiredForTrade(
298298
}
299299

300300
export function calculateCollateralValueOfDeposit(
301-
driftClient: DriftClient,
301+
driftClient: IDriftClient,
302302
collateralIndex: number,
303303
baseSize: BN
304304
): BN {
@@ -345,7 +345,7 @@ export function calculateLiquidationPrice(
345345
}
346346

347347
export function calculateUserMaxPerpOrderSize(
348-
driftClient: DriftClient,
348+
driftClient: IDriftClient,
349349
userAccountKey: PublicKey,
350350
userAccount: UserAccount,
351351
targetMarketIndex: number,

sdk/src/math/orders.ts

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,3 @@
1-
import { User } from '../user';
21
import {
32
isOneOfVariant,
43
isVariant,
@@ -22,8 +21,9 @@ import {
2221
calculateUpdatedAMM,
2322
} from './amm';
2423
import { standardizeBaseAssetAmount } from './utils';
24+
import { IUser } from '../user/types';
2525

26-
export function isOrderRiskIncreasing(user: User, order: Order): boolean {
26+
export function isOrderRiskIncreasing(user: IUser, order: Order): boolean {
2727
if (!isVariant(order.status, 'open')) {
2828
return false;
2929
}
@@ -62,7 +62,7 @@ export function isOrderRiskIncreasing(user: User, order: Order): boolean {
6262
}
6363

6464
export function isOrderRiskIncreasingInSameDirection(
65-
user: User,
65+
user: IUser,
6666
order: Order
6767
): boolean {
6868
if (!isVariant(order.status, 'open')) {
@@ -94,7 +94,7 @@ export function isOrderRiskIncreasingInSameDirection(
9494
return false;
9595
}
9696

97-
export function isOrderReduceOnly(user: User, order: Order): boolean {
97+
export function isOrderReduceOnly(user: IUser, order: Order): boolean {
9898
if (!isVariant(order.status, 'open')) {
9999
return false;
100100
}

sdk/src/user/index.ts

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
import { PublicKey } from '@solana/web3.js';
22
import { EventEmitter } from 'events';
33
import StrictEventEmitter from 'strict-event-emitter-types';
4-
import { DriftClient } from '../driftClient';
54
import {
65
HealthComponent,
76
HealthComponents,
@@ -93,7 +92,7 @@ import {
9392
calculateWorstCaseBaseAssetAmount,
9493
} from '../math/margin';
9594
import { OraclePriceData } from '../oracles/types';
96-
import { UserConfig } from '../userConfig';
95+
import { UserSubscriptionConfig } from './types';
9796
import { PollingUserAccountSubscriber } from '../accounts/userAccount/pollingUserAccountSubscriber';
9897
import { WebSocketUserAccountSubscriber } from '../accounts/userAccount/webSocketUserAccountSubscriber';
9998
import {
@@ -115,9 +114,16 @@ import { calculateSpotFuelBonus, calculatePerpFuelBonus } from '../math/fuel';
115114
import { grpcUserAccountSubscriber } from '../accounts/userAccount/grpcUserAccountSubscriber';
116115
import { IUserStats } from '../userStats/types';
117116
import { IUser } from './types';
117+
import { IDriftClient } from '../driftClient/types';
118+
119+
export type UserConfig = {
120+
accountSubscription?: UserSubscriptionConfig;
121+
driftClient: IDriftClient;
122+
userAccountPublicKey: PublicKey;
123+
};
118124

119125
export class User implements IUser {
120-
driftClient: DriftClient;
126+
driftClient: IDriftClient;
121127
userAccountPublicKey: PublicKey;
122128
accountSubscriber: UserAccountSubscriber;
123129
_isSubscribed = false;

sdk/src/user/types.ts

Lines changed: 25 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import { PublicKey } from '@solana/web3.js';
1+
import { Commitment, PublicKey } from '@solana/web3.js';
22
import { EventEmitter } from 'events';
33
import StrictEventEmitter from 'strict-event-emitter-types';
44
import {
@@ -18,13 +18,37 @@ import {
1818
} from '../types';
1919
import {
2020
DataAndSlot,
21+
GrpcConfigs,
2122
UserAccountEvents,
2223
UserAccountSubscriber,
2324
} from '../accounts/types';
2425
import { BN } from '@coral-xyz/anchor';
2526
import { OraclePriceData } from '../oracles/types';
2627
import { StrictOraclePrice } from '../oracles/strictOraclePrice';
2728
import { IUserStats } from '../userStats/types';
29+
import { BulkAccountLoader } from '../accounts/bulkAccountLoader/bulkAccountLoader';
30+
31+
export type UserSubscriptionConfig =
32+
| {
33+
type: 'grpc';
34+
resubTimeoutMs?: number;
35+
logResubMessages?: boolean;
36+
grpcConfigs: GrpcConfigs;
37+
}
38+
| {
39+
type: 'websocket';
40+
resubTimeoutMs?: number;
41+
logResubMessages?: boolean;
42+
commitment?: Commitment;
43+
}
44+
| {
45+
type: 'polling';
46+
accountLoader: BulkAccountLoader;
47+
}
48+
| {
49+
type: 'custom';
50+
userAccountSubscriber: UserAccountSubscriber;
51+
};
2852

2953
export interface IUser {
3054
userAccountPublicKey: PublicKey;

sdk/src/userConfig.ts

Lines changed: 0 additions & 32 deletions
This file was deleted.

sdk/src/userMap/events.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
1-
import { User } from '../user';
1+
import { IUser } from '../user/types';
22

33
export interface UserEvents {
4-
userUpdate: (payload: User) => void;
4+
userUpdate: (payload: IUser) => void;
55
update: void;
66
error: (e: Error) => void;
77
}

0 commit comments

Comments
 (0)