@drift-labs/sdk 2.142.0-beta.5 → 2.142.0-beta.7

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/VERSION CHANGED
@@ -1 +1 @@
1
- 2.142.0-beta.5
1
+ 2.142.0-beta.7
@@ -14,6 +14,8 @@ export declare class grpcDriftClientAccountSubscriberV2 extends WebSocketDriftCl
14
14
  subscribe(): Promise<boolean>;
15
15
  getMarketAccountAndSlot(marketIndex: number): DataAndSlot<PerpMarketAccount> | undefined;
16
16
  getSpotMarketAccountAndSlot(marketIndex: number): DataAndSlot<SpotMarketAccount> | undefined;
17
+ setPerpOracleMap(): Promise<void>;
18
+ setSpotOracleMap(): Promise<void>;
17
19
  subscribeToPerpMarketAccounts(): Promise<boolean>;
18
20
  subscribeToSpotMarketAccounts(): Promise<boolean>;
19
21
  subscribeToOracles(): Promise<boolean>;
@@ -69,6 +69,54 @@ class grpcDriftClientAccountSubscriberV2 extends webSocketDriftClientAccountSubs
69
69
  var _a;
70
70
  return (_a = this.spotMarketsSubscriber) === null || _a === void 0 ? void 0 : _a.getAccountData(this.spotMarketIndexToAccountPubkeyMap.get(marketIndex));
71
71
  }
72
+ async setPerpOracleMap() {
73
+ var _a;
74
+ const perpMarketsMap = (_a = this.perpMarketsSubscriber) === null || _a === void 0 ? void 0 : _a.getAccountDataMap();
75
+ const perpMarkets = Array.from(perpMarketsMap.values());
76
+ const addOraclePromises = [];
77
+ for (const perpMarket of perpMarkets) {
78
+ if (!perpMarket || !perpMarket.data) {
79
+ continue;
80
+ }
81
+ const perpMarketAccount = perpMarket.data;
82
+ const perpMarketIndex = perpMarketAccount.marketIndex;
83
+ const oracle = perpMarketAccount.amm.oracle;
84
+ const oracleId = (0, oracleId_1.getOracleId)(oracle, perpMarket.data.amm.oracleSource);
85
+ if (!this.oracleSubscribers.has(oracleId)) {
86
+ addOraclePromises.push(this.addOracle({
87
+ publicKey: oracle,
88
+ source: perpMarket.data.amm.oracleSource,
89
+ }));
90
+ }
91
+ this.perpOracleMap.set(perpMarketIndex, oracle);
92
+ this.perpOracleStringMap.set(perpMarketIndex, oracleId);
93
+ }
94
+ await Promise.all(addOraclePromises);
95
+ }
96
+ async setSpotOracleMap() {
97
+ var _a;
98
+ const spotMarketsMap = (_a = this.spotMarketsSubscriber) === null || _a === void 0 ? void 0 : _a.getAccountDataMap();
99
+ const spotMarkets = Array.from(spotMarketsMap.values());
100
+ const addOraclePromises = [];
101
+ for (const spotMarket of spotMarkets) {
102
+ if (!spotMarket || !spotMarket.data) {
103
+ continue;
104
+ }
105
+ const spotMarketAccount = spotMarket.data;
106
+ const spotMarketIndex = spotMarketAccount.marketIndex;
107
+ const oracle = spotMarketAccount.oracle;
108
+ const oracleId = (0, oracleId_1.getOracleId)(oracle, spotMarketAccount.oracleSource);
109
+ if (!this.oracleSubscribers.has(oracleId)) {
110
+ addOraclePromises.push(this.addOracle({
111
+ publicKey: oracle,
112
+ source: spotMarketAccount.oracleSource,
113
+ }));
114
+ }
115
+ this.spotOracleMap.set(spotMarketIndex, oracle);
116
+ this.spotOracleStringMap.set(spotMarketIndex, oracleId);
117
+ }
118
+ await Promise.all(addOraclePromises);
119
+ }
72
120
  async subscribeToPerpMarketAccounts() {
73
121
  const perpMarketIndexToAccountPubkeys = await Promise.all(this.perpMarketIndexes.map(async (marketIndex) => [
74
122
  marketIndex,
@@ -24,6 +24,7 @@ export declare class grpcMultiAccountSubscriber<T> {
24
24
  static create<U>(grpcConfigs: GrpcConfigs, accountName: string, program: Program, decodeBuffer?: (buffer: Buffer, pubkey?: string) => U, resubOpts?: ResubOpts, clientProp?: Client, onUnsubscribe?: () => Promise<void>): Promise<grpcMultiAccountSubscriber<U>>;
25
25
  setAccountData(accountPubkey: PublicKey, data: T, slot?: number): void;
26
26
  getAccountData(accountPubkey: PublicKey): DataAndSlot<T> | undefined;
27
+ getAccountDataMap(): Map<string, DataAndSlot<T>>;
27
28
  subscribe(accounts: PublicKey[], onChange: (accountId: PublicKey, data: T, context: Context, buffer: Buffer) => void): Promise<void>;
28
29
  addAccounts(accounts: PublicKey[]): Promise<void>;
29
30
  removeAccounts(accounts: PublicKey[]): Promise<void>;
@@ -62,6 +62,9 @@ class grpcMultiAccountSubscriber {
62
62
  getAccountData(accountPubkey) {
63
63
  return this.dataMap.get(accountPubkey.toBase58());
64
64
  }
65
+ getAccountDataMap() {
66
+ return this.dataMap;
67
+ }
65
68
  async subscribe(accounts, onChange) {
66
69
  if (this.listenerId != null || this.isUnsubscribing) {
67
70
  return;
@@ -14,6 +14,8 @@ export declare class grpcDriftClientAccountSubscriberV2 extends WebSocketDriftCl
14
14
  subscribe(): Promise<boolean>;
15
15
  getMarketAccountAndSlot(marketIndex: number): DataAndSlot<PerpMarketAccount> | undefined;
16
16
  getSpotMarketAccountAndSlot(marketIndex: number): DataAndSlot<SpotMarketAccount> | undefined;
17
+ setPerpOracleMap(): Promise<void>;
18
+ setSpotOracleMap(): Promise<void>;
17
19
  subscribeToPerpMarketAccounts(): Promise<boolean>;
18
20
  subscribeToSpotMarketAccounts(): Promise<boolean>;
19
21
  subscribeToOracles(): Promise<boolean>;
@@ -1 +1 @@
1
- {"version":3,"file":"grpcDriftClientAccountSubscriberV2.d.ts","sourceRoot":"","sources":["../../../src/accounts/grpcDriftClientAccountSubscriberV2.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,qCAAqC,EAAE,MAAM,yCAAyC,CAAC;AAChG,OAAO,EAAE,UAAU,EAAmB,MAAM,kBAAkB,CAAC;AAC/D,OAAO,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAC;AAQ5C,OAAO,EACN,WAAW,EACX,qBAAqB,EACrB,WAAW,EACX,SAAS,EACT,MAAM,SAAS,CAAC;AAGjB,OAAO,EAAE,iBAAiB,EAAE,iBAAiB,EAAgB,MAAM,UAAU,CAAC;AAM9E,qBAAa,kCAAmC,SAAQ,qCAAqC;IAC5F,OAAO,CAAC,WAAW,CAAc;IACjC,OAAO,CAAC,qBAAqB,CAAC,CAAgD;IAC9E,OAAO,CAAC,qBAAqB,CAAC,CAAgD;IAC9E,OAAO,CAAC,qBAAqB,CAAC,CAA8C;IAC5E,OAAO,CAAC,iCAAiC,CAAgC;IACzE,OAAO,CAAC,iCAAiC,CAAgC;gBAGxE,WAAW,EAAE,WAAW,EACxB,OAAO,EAAE,OAAO,EAChB,iBAAiB,EAAE,MAAM,EAAE,EAC3B,iBAAiB,EAAE,MAAM,EAAE,EAC3B,WAAW,EAAE,UAAU,EAAE,EACzB,8BAA8B,EAAE,OAAO,EACvC,qBAAqB,EAAE,qBAAqB,EAC5C,SAAS,CAAC,EAAE,SAAS;IAcT,SAAS,IAAI,OAAO,CAAC,OAAO,CAAC;IAiFjC,uBAAuB,CAC/B,WAAW,EAAE,MAAM,GACjB,WAAW,CAAC,iBAAiB,CAAC,GAAG,SAAS;IAMpC,2BAA2B,CACnC,WAAW,EAAE,MAAM,GACjB,WAAW,CAAC,iBAAiB,CAAC,GAAG,SAAS;IAM9B,6BAA6B,IAAI,OAAO,CAAC,OAAO,CAAC;IA2DjD,6BAA6B,IAAI,OAAO,CAAC,OAAO,CAAC;IA2DjD,kBAAkB,IAAI,OAAO,CAAC,OAAO,CAAC;IAyE/C,sBAAsB,IAAI,OAAO,CAAC,IAAI,CAAC;IAS9B,WAAW,IAAI,OAAO,CAAC,IAAI,CAAC;CAO3C"}
1
+ {"version":3,"file":"grpcDriftClientAccountSubscriberV2.d.ts","sourceRoot":"","sources":["../../../src/accounts/grpcDriftClientAccountSubscriberV2.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,qCAAqC,EAAE,MAAM,yCAAyC,CAAC;AAChG,OAAO,EAAE,UAAU,EAAmB,MAAM,kBAAkB,CAAC;AAC/D,OAAO,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAC;AAQ5C,OAAO,EACN,WAAW,EACX,qBAAqB,EACrB,WAAW,EACX,SAAS,EACT,MAAM,SAAS,CAAC;AAGjB,OAAO,EAAE,iBAAiB,EAAE,iBAAiB,EAAgB,MAAM,UAAU,CAAC;AAM9E,qBAAa,kCAAmC,SAAQ,qCAAqC;IAC5F,OAAO,CAAC,WAAW,CAAc;IACjC,OAAO,CAAC,qBAAqB,CAAC,CAAgD;IAC9E,OAAO,CAAC,qBAAqB,CAAC,CAAgD;IAC9E,OAAO,CAAC,qBAAqB,CAAC,CAA8C;IAC5E,OAAO,CAAC,iCAAiC,CAAgC;IACzE,OAAO,CAAC,iCAAiC,CAAgC;gBAGxE,WAAW,EAAE,WAAW,EACxB,OAAO,EAAE,OAAO,EAChB,iBAAiB,EAAE,MAAM,EAAE,EAC3B,iBAAiB,EAAE,MAAM,EAAE,EAC3B,WAAW,EAAE,UAAU,EAAE,EACzB,8BAA8B,EAAE,OAAO,EACvC,qBAAqB,EAAE,qBAAqB,EAC5C,SAAS,CAAC,EAAE,SAAS;IAcT,SAAS,IAAI,OAAO,CAAC,OAAO,CAAC;IAiFjC,uBAAuB,CAC/B,WAAW,EAAE,MAAM,GACjB,WAAW,CAAC,iBAAiB,CAAC,GAAG,SAAS;IAMpC,2BAA2B,CACnC,WAAW,EAAE,MAAM,GACjB,WAAW,CAAC,iBAAiB,CAAC,GAAG,SAAS;IAM9B,gBAAgB;IA0BhB,gBAAgB;IA0BhB,6BAA6B,IAAI,OAAO,CAAC,OAAO,CAAC;IA2DjD,6BAA6B,IAAI,OAAO,CAAC,OAAO,CAAC;IA2DjD,kBAAkB,IAAI,OAAO,CAAC,OAAO,CAAC;IAyE/C,sBAAsB,IAAI,OAAO,CAAC,IAAI,CAAC;IAS9B,WAAW,IAAI,OAAO,CAAC,IAAI,CAAC;CAO3C"}
@@ -69,6 +69,54 @@ class grpcDriftClientAccountSubscriberV2 extends webSocketDriftClientAccountSubs
69
69
  var _a;
70
70
  return (_a = this.spotMarketsSubscriber) === null || _a === void 0 ? void 0 : _a.getAccountData(this.spotMarketIndexToAccountPubkeyMap.get(marketIndex));
71
71
  }
72
+ async setPerpOracleMap() {
73
+ var _a;
74
+ const perpMarketsMap = (_a = this.perpMarketsSubscriber) === null || _a === void 0 ? void 0 : _a.getAccountDataMap();
75
+ const perpMarkets = Array.from(perpMarketsMap.values());
76
+ const addOraclePromises = [];
77
+ for (const perpMarket of perpMarkets) {
78
+ if (!perpMarket || !perpMarket.data) {
79
+ continue;
80
+ }
81
+ const perpMarketAccount = perpMarket.data;
82
+ const perpMarketIndex = perpMarketAccount.marketIndex;
83
+ const oracle = perpMarketAccount.amm.oracle;
84
+ const oracleId = (0, oracleId_1.getOracleId)(oracle, perpMarket.data.amm.oracleSource);
85
+ if (!this.oracleSubscribers.has(oracleId)) {
86
+ addOraclePromises.push(this.addOracle({
87
+ publicKey: oracle,
88
+ source: perpMarket.data.amm.oracleSource,
89
+ }));
90
+ }
91
+ this.perpOracleMap.set(perpMarketIndex, oracle);
92
+ this.perpOracleStringMap.set(perpMarketIndex, oracleId);
93
+ }
94
+ await Promise.all(addOraclePromises);
95
+ }
96
+ async setSpotOracleMap() {
97
+ var _a;
98
+ const spotMarketsMap = (_a = this.spotMarketsSubscriber) === null || _a === void 0 ? void 0 : _a.getAccountDataMap();
99
+ const spotMarkets = Array.from(spotMarketsMap.values());
100
+ const addOraclePromises = [];
101
+ for (const spotMarket of spotMarkets) {
102
+ if (!spotMarket || !spotMarket.data) {
103
+ continue;
104
+ }
105
+ const spotMarketAccount = spotMarket.data;
106
+ const spotMarketIndex = spotMarketAccount.marketIndex;
107
+ const oracle = spotMarketAccount.oracle;
108
+ const oracleId = (0, oracleId_1.getOracleId)(oracle, spotMarketAccount.oracleSource);
109
+ if (!this.oracleSubscribers.has(oracleId)) {
110
+ addOraclePromises.push(this.addOracle({
111
+ publicKey: oracle,
112
+ source: spotMarketAccount.oracleSource,
113
+ }));
114
+ }
115
+ this.spotOracleMap.set(spotMarketIndex, oracle);
116
+ this.spotOracleStringMap.set(spotMarketIndex, oracleId);
117
+ }
118
+ await Promise.all(addOraclePromises);
119
+ }
72
120
  async subscribeToPerpMarketAccounts() {
73
121
  const perpMarketIndexToAccountPubkeys = await Promise.all(this.perpMarketIndexes.map(async (marketIndex) => [
74
122
  marketIndex,
@@ -24,6 +24,7 @@ export declare class grpcMultiAccountSubscriber<T> {
24
24
  static create<U>(grpcConfigs: GrpcConfigs, accountName: string, program: Program, decodeBuffer?: (buffer: Buffer, pubkey?: string) => U, resubOpts?: ResubOpts, clientProp?: Client, onUnsubscribe?: () => Promise<void>): Promise<grpcMultiAccountSubscriber<U>>;
25
25
  setAccountData(accountPubkey: PublicKey, data: T, slot?: number): void;
26
26
  getAccountData(accountPubkey: PublicKey): DataAndSlot<T> | undefined;
27
+ getAccountDataMap(): Map<string, DataAndSlot<T>>;
27
28
  subscribe(accounts: PublicKey[], onChange: (accountId: PublicKey, data: T, context: Context, buffer: Buffer) => void): Promise<void>;
28
29
  addAccounts(accounts: PublicKey[]): Promise<void>;
29
30
  removeAccounts(accounts: PublicKey[]): Promise<void>;
@@ -1 +1 @@
1
- {"version":3,"file":"grpcMultiAccountSubscriber.d.ts","sourceRoot":"","sources":["../../../src/accounts/grpcMultiAccountSubscriber.ts"],"names":[],"mappings":";;AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAC;AAC5C,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAIrD,OAAO,EACN,MAAM,EAMN,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAE,WAAW,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AAU9D,qBAAa,0BAA0B,CAAC,CAAC;IACxC,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,MAAM,CAAwD;IACtE,OAAO,CAAC,eAAe,CAAkB;IACzC,OAAO,CAAC,OAAO,CAAU;IACzB,OAAO,CAAC,WAAW,CAAS;IAC5B,OAAO,CAAC,cAAc,CAAC,CAAyC;IAChE,OAAO,CAAC,SAAS,CAAC,CAAY;IAC9B,OAAO,CAAC,aAAa,CAAC,CAAsB;IAErC,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,eAAe,UAAS;IAC/B,OAAO,CAAC,SAAS,CAAC,CAAgC;IAClD,OAAO,CAAC,aAAa,CAAS;IAE9B,OAAO,CAAC,kBAAkB,CAAqB;IAC/C,OAAO,CAAC,WAAW,CAGf;IAEJ,OAAO,CAAC,OAAO,CAAqC;IAEpD,OAAO;WAkBa,MAAM,CAAC,CAAC,EAC3B,WAAW,EAAE,WAAW,EACxB,WAAW,EAAE,MAAM,EACnB,OAAO,EAAE,OAAO,EAChB,YAAY,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,KAAK,CAAC,EACrD,SAAS,CAAC,EAAE,SAAS,EACrB,UAAU,CAAC,EAAE,MAAM,EACnB,aAAa,CAAC,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,GACjC,OAAO,CAAC,0BAA0B,CAAC,CAAC,CAAC,CAAC;IAuBzC,cAAc,CAAC,aAAa,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,EAAE,IAAI,CAAC,EAAE,MAAM,GAAG,IAAI;IAItE,cAAc,CAAC,aAAa,EAAE,SAAS,GAAG,WAAW,CAAC,CAAC,CAAC,GAAG,SAAS;IAI9D,SAAS,CACd,QAAQ,EAAE,SAAS,EAAE,EACrB,QAAQ,EAAE,CACT,SAAS,EAAE,SAAS,EACpB,IAAI,EAAE,CAAC,EACP,OAAO,EAAE,OAAO,EAChB,MAAM,EAAE,MAAM,KACV,IAAI,GACP,OAAO,CAAC,IAAI,CAAC;IA+FV,WAAW,CAAC,QAAQ,EAAE,SAAS,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAiCjD,cAAc,CAAC,QAAQ,EAAE,SAAS,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAmCpD,WAAW,IAAI,OAAO,CAAC,IAAI,CAAC;IA4ClC,OAAO,CAAC,UAAU;IAelB,OAAO,CAAC,UAAU;CAIlB"}
1
+ {"version":3,"file":"grpcMultiAccountSubscriber.d.ts","sourceRoot":"","sources":["../../../src/accounts/grpcMultiAccountSubscriber.ts"],"names":[],"mappings":";;AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAC;AAC5C,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAIrD,OAAO,EACN,MAAM,EAMN,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAE,WAAW,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AAU9D,qBAAa,0BAA0B,CAAC,CAAC;IACxC,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,MAAM,CAAwD;IACtE,OAAO,CAAC,eAAe,CAAkB;IACzC,OAAO,CAAC,OAAO,CAAU;IACzB,OAAO,CAAC,WAAW,CAAS;IAC5B,OAAO,CAAC,cAAc,CAAC,CAAyC;IAChE,OAAO,CAAC,SAAS,CAAC,CAAY;IAC9B,OAAO,CAAC,aAAa,CAAC,CAAsB;IAErC,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,eAAe,UAAS;IAC/B,OAAO,CAAC,SAAS,CAAC,CAAgC;IAClD,OAAO,CAAC,aAAa,CAAS;IAE9B,OAAO,CAAC,kBAAkB,CAAqB;IAC/C,OAAO,CAAC,WAAW,CAGf;IAEJ,OAAO,CAAC,OAAO,CAAqC;IAEpD,OAAO;WAkBa,MAAM,CAAC,CAAC,EAC3B,WAAW,EAAE,WAAW,EACxB,WAAW,EAAE,MAAM,EACnB,OAAO,EAAE,OAAO,EAChB,YAAY,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,KAAK,CAAC,EACrD,SAAS,CAAC,EAAE,SAAS,EACrB,UAAU,CAAC,EAAE,MAAM,EACnB,aAAa,CAAC,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,GACjC,OAAO,CAAC,0BAA0B,CAAC,CAAC,CAAC,CAAC;IAuBzC,cAAc,CAAC,aAAa,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,EAAE,IAAI,CAAC,EAAE,MAAM,GAAG,IAAI;IAItE,cAAc,CAAC,aAAa,EAAE,SAAS,GAAG,WAAW,CAAC,CAAC,CAAC,GAAG,SAAS;IAIpE,iBAAiB,IAAI,GAAG,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC,CAAC,CAAC;IAI1C,SAAS,CACd,QAAQ,EAAE,SAAS,EAAE,EACrB,QAAQ,EAAE,CACT,SAAS,EAAE,SAAS,EACpB,IAAI,EAAE,CAAC,EACP,OAAO,EAAE,OAAO,EAChB,MAAM,EAAE,MAAM,KACV,IAAI,GACP,OAAO,CAAC,IAAI,CAAC;IA+FV,WAAW,CAAC,QAAQ,EAAE,SAAS,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAiCjD,cAAc,CAAC,QAAQ,EAAE,SAAS,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAmCpD,WAAW,IAAI,OAAO,CAAC,IAAI,CAAC;IA4ClC,OAAO,CAAC,UAAU;IAelB,OAAO,CAAC,UAAU;CAIlB"}
@@ -62,6 +62,9 @@ class grpcMultiAccountSubscriber {
62
62
  getAccountData(accountPubkey) {
63
63
  return this.dataMap.get(accountPubkey.toBase58());
64
64
  }
65
+ getAccountDataMap() {
66
+ return this.dataMap;
67
+ }
65
68
  async subscribe(accounts, onChange) {
66
69
  if (this.listenerId != null || this.isUnsubscribing) {
67
70
  return;
package/package.json CHANGED
@@ -1,9 +1,9 @@
1
1
  {
2
2
  "name": "@drift-labs/sdk",
3
- "version": "2.142.0-beta.5",
3
+ "version": "2.142.0-beta.7",
4
4
  "main": "lib/node/index.js",
5
5
  "types": "lib/node/index.d.ts",
6
- "browser": "./lib/browser/index.js",
6
+ "module": "./lib/browser/index.js",
7
7
  "author": "crispheaney",
8
8
  "homepage": "https://www.drift.trade/",
9
9
  "repository": {
@@ -137,5 +137,11 @@
137
137
  "chalk-template": "<1.1.1",
138
138
  "supports-hyperlinks": "<4.1.1",
139
139
  "has-ansi": "<6.0.1"
140
+ },
141
+ "browser": {
142
+ "helius-laserstream": false,
143
+ "@triton-one/yellowstone-grpc": false,
144
+ "@grpc/grpc-js": false,
145
+ "zstddec": false
140
146
  }
141
147
  }
@@ -104,6 +104,12 @@ async function initializeGrpcDriftClientV2() {
104
104
  'Perp market data market index:',
105
105
  perpMarketData?.marketIndex
106
106
  );
107
+ const oracle = driftClient.getOracleDataForPerpMarket(data.marketIndex);
108
+ const mmOracle = driftClient.getMMOracleDataForPerpMarket(
109
+ data.marketIndex
110
+ );
111
+ console.log('Perp oracle price:', oracle.price.toString());
112
+ console.log('Perp MM oracle price:', mmOracle.price.toString());
107
113
  perpMarketUpdateCount++;
108
114
  if (
109
115
  perpMarketUpdateCount >= 10 &&
@@ -127,6 +133,8 @@ async function initializeGrpcDriftClientV2() {
127
133
  'Spot market data market index:',
128
134
  spotMarketData?.marketIndex
129
135
  );
136
+ const oracle = driftClient.getOracleDataForSpotMarket(data.marketIndex);
137
+ console.log('Spot oracle price:', oracle.price.toString());
130
138
  spotMarketUpdateCount++;
131
139
  if (
132
140
  perpMarketUpdateCount >= 10 &&
@@ -175,6 +183,21 @@ async function initializeGrpcDriftClientV2() {
175
183
  await driftClient.subscribe();
176
184
  console.log('DriftClient initialized and listening for updates.');
177
185
 
186
+ for (const marketIndex of config.perpMarketIndexes) {
187
+ const oracle = driftClient.getOracleDataForPerpMarket(marketIndex);
188
+ const mmOracle = driftClient.getMMOracleDataForPerpMarket(marketIndex);
189
+ console.log('Initial perp oracle price:', oracle.price.toString());
190
+ console.log('Initial perp MM oracle price:', mmOracle.price.toString());
191
+ }
192
+
193
+ for (const marketIndex of config.spotMarketIndexes) {
194
+ const oracle = driftClient.getOracleDataForSpotMarket(marketIndex);
195
+ console.log('Initial spot oracle price:', oracle.price.toString());
196
+ }
197
+
198
+ const stateAccount = driftClient.getStateAccount();
199
+ console.log('Initial state account:', stateAccount.toString());
200
+
178
201
  await updatePromise;
179
202
  console.log('Received required number of updates.');
180
203
  }
@@ -27,8 +27,8 @@ export class grpcDriftClientAccountSubscriberV2 extends WebSocketDriftClientAcco
27
27
  private perpMarketsSubscriber?: grpcMultiAccountSubscriber<PerpMarketAccount>;
28
28
  private spotMarketsSubscriber?: grpcMultiAccountSubscriber<SpotMarketAccount>;
29
29
  private oracleMultiSubscriber?: grpcMultiAccountSubscriber<OraclePriceData>;
30
- private perpMarketIndexToAccountPubkeyMap = new Map<number, PublicKey>();
31
- private spotMarketIndexToAccountPubkeyMap = new Map<number, PublicKey>();
30
+ private perpMarketIndexToAccountPubkeyMap = new Map<number, string>();
31
+ private spotMarketIndexToAccountPubkeyMap = new Map<number, string>();
32
32
 
33
33
  constructor(
34
34
  grpcConfigs: GrpcConfigs,
@@ -149,6 +149,58 @@ export class grpcDriftClientAccountSubscriberV2 extends WebSocketDriftClientAcco
149
149
  );
150
150
  }
151
151
 
152
+ override async setPerpOracleMap() {
153
+ const perpMarketsMap = this.perpMarketsSubscriber?.getAccountDataMap();
154
+ const perpMarkets = Array.from(perpMarketsMap.values());
155
+ const addOraclePromises = [];
156
+ for (const perpMarket of perpMarkets) {
157
+ if (!perpMarket || !perpMarket.data) {
158
+ continue;
159
+ }
160
+ const perpMarketAccount = perpMarket.data;
161
+ const perpMarketIndex = perpMarketAccount.marketIndex;
162
+ const oracle = perpMarketAccount.amm.oracle;
163
+ const oracleId = getOracleId(oracle, perpMarket.data.amm.oracleSource);
164
+ if (!this.oracleSubscribers.has(oracleId)) {
165
+ addOraclePromises.push(
166
+ this.addOracle({
167
+ publicKey: oracle,
168
+ source: perpMarket.data.amm.oracleSource,
169
+ })
170
+ );
171
+ }
172
+ this.perpOracleMap.set(perpMarketIndex, oracle);
173
+ this.perpOracleStringMap.set(perpMarketIndex, oracleId);
174
+ }
175
+ await Promise.all(addOraclePromises);
176
+ }
177
+
178
+ override async setSpotOracleMap() {
179
+ const spotMarketsMap = this.spotMarketsSubscriber?.getAccountDataMap();
180
+ const spotMarkets = Array.from(spotMarketsMap.values());
181
+ const addOraclePromises = [];
182
+ for (const spotMarket of spotMarkets) {
183
+ if (!spotMarket || !spotMarket.data) {
184
+ continue;
185
+ }
186
+ const spotMarketAccount = spotMarket.data;
187
+ const spotMarketIndex = spotMarketAccount.marketIndex;
188
+ const oracle = spotMarketAccount.oracle;
189
+ const oracleId = getOracleId(oracle, spotMarketAccount.oracleSource);
190
+ if (!this.oracleSubscribers.has(oracleId)) {
191
+ addOraclePromises.push(
192
+ this.addOracle({
193
+ publicKey: oracle,
194
+ source: spotMarketAccount.oracleSource,
195
+ })
196
+ );
197
+ }
198
+ this.spotOracleMap.set(spotMarketIndex, oracle);
199
+ this.spotOracleStringMap.set(spotMarketIndex, oracleId);
200
+ }
201
+ await Promise.all(addOraclePromises);
202
+ }
203
+
152
204
  override async subscribeToPerpMarketAccounts(): Promise<boolean> {
153
205
  const perpMarketIndexToAccountPubkeys: Array<[number, PublicKey]> =
154
206
  await Promise.all(
@@ -161,7 +213,7 @@ export class grpcDriftClientAccountSubscriberV2 extends WebSocketDriftClientAcco
161
213
  marketIndex,
162
214
  accountPubkey,
163
215
  ] of perpMarketIndexToAccountPubkeys) {
164
- this.perpMarketIndexToAccountPubkeyMap.set(marketIndex, accountPubkey);
216
+ this.perpMarketIndexToAccountPubkeyMap.set(marketIndex, accountPubkey.toBase58());
165
217
  }
166
218
 
167
219
  const perpMarketPubkeys = perpMarketIndexToAccountPubkeys.map(
@@ -220,7 +272,7 @@ export class grpcDriftClientAccountSubscriberV2 extends WebSocketDriftClientAcco
220
272
  marketIndex,
221
273
  accountPubkey,
222
274
  ] of spotMarketIndexToAccountPubkeys) {
223
- this.spotMarketIndexToAccountPubkeyMap.set(marketIndex, accountPubkey);
275
+ this.spotMarketIndexToAccountPubkeyMap.set(marketIndex, accountPubkey.toBase58());
224
276
  }
225
277
 
226
278
  const spotMarketPubkeys = spotMarketIndexToAccountPubkeys.map(
@@ -97,8 +97,12 @@ export class grpcMultiAccountSubscriber<T> {
97
97
  this.dataMap.set(accountPubkey.toBase58(), { data, slot });
98
98
  }
99
99
 
100
- getAccountData(accountPubkey: PublicKey): DataAndSlot<T> | undefined {
101
- return this.dataMap.get(accountPubkey.toBase58());
100
+ getAccountData(accountPubkey: string): DataAndSlot<T> | undefined {
101
+ return this.dataMap.get(accountPubkey);
102
+ }
103
+
104
+ getAccountDataMap(): Map<string, DataAndSlot<T>> {
105
+ return this.dataMap;
102
106
  }
103
107
 
104
108
  async subscribe(