@drift-labs/sdk 2.121.0-beta.0 → 2.121.0-beta.2
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 +1 -1
- package/lib/browser/memcmp.d.ts +1 -0
- package/lib/browser/memcmp.js +10 -1
- package/lib/browser/swift/swiftOrderSubscriber.d.ts +1 -1
- package/lib/browser/swift/swiftOrderSubscriber.js +5 -1
- package/lib/browser/userMap/userMap.d.ts +2 -0
- package/lib/browser/userMap/userMap.js +16 -12
- package/lib/browser/userMap/userMapConfig.d.ts +1 -0
- package/lib/node/memcmp.d.ts +1 -0
- package/lib/node/memcmp.d.ts.map +1 -1
- package/lib/node/memcmp.js +10 -1
- package/lib/node/swift/swiftOrderSubscriber.d.ts +1 -1
- package/lib/node/swift/swiftOrderSubscriber.d.ts.map +1 -1
- package/lib/node/swift/swiftOrderSubscriber.js +5 -1
- package/lib/node/userMap/userMap.d.ts +2 -0
- package/lib/node/userMap/userMap.d.ts.map +1 -1
- package/lib/node/userMap/userMap.js +16 -12
- package/lib/node/userMap/userMapConfig.d.ts +1 -0
- package/lib/node/userMap/userMapConfig.d.ts.map +1 -1
- package/package.json +1 -1
- package/src/memcmp.ts +9 -0
- package/src/swift/swiftOrderSubscriber.ts +6 -1
- package/src/userMap/userMap.ts +23 -13
- package/src/userMap/userMapConfig.ts +3 -0
package/VERSION
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
2.121.0-beta.
|
|
1
|
+
2.121.0-beta.2
|
package/lib/browser/memcmp.d.ts
CHANGED
|
@@ -6,6 +6,7 @@ export declare function getUserWithoutOrderFilter(): MemcmpFilter;
|
|
|
6
6
|
export declare function getUserWithAuctionFilter(): MemcmpFilter;
|
|
7
7
|
export declare function getUserThatHasBeenLP(): MemcmpFilter;
|
|
8
8
|
export declare function getUserWithName(name: string): MemcmpFilter;
|
|
9
|
+
export declare function getUsersWithPoolId(poolId: number): MemcmpFilter;
|
|
9
10
|
export declare function getUserStatsFilter(): MemcmpFilter;
|
|
10
11
|
export declare function getUserStatsIsReferredFilter(): MemcmpFilter;
|
|
11
12
|
export declare function getUserStatsIsReferredOrReferrerFilter(): MemcmpFilter;
|
package/lib/browser/memcmp.js
CHANGED
|
@@ -3,7 +3,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
3
3
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
4
|
};
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
-
exports.getSignedMsgUserOrdersFilter = exports.getUserStatsIsReferredOrReferrerFilter = exports.getUserStatsIsReferredFilter = exports.getUserStatsFilter = exports.getUserWithName = exports.getUserThatHasBeenLP = exports.getUserWithAuctionFilter = exports.getUserWithoutOrderFilter = exports.getUserWithOrderFilter = exports.getNonIdleUserFilter = exports.getUserFilter = void 0;
|
|
6
|
+
exports.getSignedMsgUserOrdersFilter = exports.getUserStatsIsReferredOrReferrerFilter = exports.getUserStatsIsReferredFilter = exports.getUserStatsFilter = exports.getUsersWithPoolId = exports.getUserWithName = exports.getUserThatHasBeenLP = exports.getUserWithAuctionFilter = exports.getUserWithoutOrderFilter = exports.getUserWithOrderFilter = exports.getNonIdleUserFilter = exports.getUserFilter = void 0;
|
|
7
7
|
const bs58_1 = __importDefault(require("bs58"));
|
|
8
8
|
const anchor_1 = require("@coral-xyz/anchor");
|
|
9
9
|
const userName_1 = require("./userName");
|
|
@@ -70,6 +70,15 @@ function getUserWithName(name) {
|
|
|
70
70
|
};
|
|
71
71
|
}
|
|
72
72
|
exports.getUserWithName = getUserWithName;
|
|
73
|
+
function getUsersWithPoolId(poolId) {
|
|
74
|
+
return {
|
|
75
|
+
memcmp: {
|
|
76
|
+
offset: 4356,
|
|
77
|
+
bytes: bs58_1.default.encode(Uint8Array.from([poolId])),
|
|
78
|
+
},
|
|
79
|
+
};
|
|
80
|
+
}
|
|
81
|
+
exports.getUsersWithPoolId = getUsersWithPoolId;
|
|
73
82
|
function getUserStatsFilter() {
|
|
74
83
|
return {
|
|
75
84
|
memcmp: {
|
|
@@ -29,7 +29,7 @@ export declare class SwiftOrderSubscriber {
|
|
|
29
29
|
getSymbolForMarketIndex(marketIndex: number): string;
|
|
30
30
|
generateChallengeResponse(nonce: string): string;
|
|
31
31
|
handleAuthMessage(message: any): void;
|
|
32
|
-
subscribe(onOrder: (orderMessageRaw: any, signedMessage: SignedMsgOrderParamsMessage | SignedMsgOrderParamsDelegateMessage, isDelegateSigner?: boolean) => Promise<void
|
|
32
|
+
subscribe(onOrder: (orderMessageRaw: any, signedMessage: SignedMsgOrderParamsMessage | SignedMsgOrderParamsDelegateMessage, isDelegateSigner?: boolean) => Promise<void>, acceptSanitized?: boolean): Promise<void>;
|
|
33
33
|
getPlaceAndMakeSignedMsgOrderIxs(orderMessageRaw: any, signedMsgOrderParamsMessage: SignedMsgOrderParamsMessage | SignedMsgOrderParamsDelegateMessage, makerOrderParams: OptionalOrderParams): Promise<TransactionInstruction[]>;
|
|
34
34
|
private startHeartbeatTimer;
|
|
35
35
|
private reconnect;
|
|
@@ -55,7 +55,7 @@ class SwiftOrderSubscriber {
|
|
|
55
55
|
});
|
|
56
56
|
}
|
|
57
57
|
}
|
|
58
|
-
async subscribe(onOrder) {
|
|
58
|
+
async subscribe(onOrder, acceptSanitized = false) {
|
|
59
59
|
this.onOrder = onOrder;
|
|
60
60
|
const endpoint = this.config.endpoint || this.config.driftEnv === 'devnet'
|
|
61
61
|
? 'wss://master.swift.drift.trade/ws'
|
|
@@ -72,6 +72,10 @@ class SwiftOrderSubscriber {
|
|
|
72
72
|
}
|
|
73
73
|
if (message['order']) {
|
|
74
74
|
const order = message['order'];
|
|
75
|
+
// ignore likely sanitized orders by default
|
|
76
|
+
if (order['will_sanitize'] === true && !acceptSanitized) {
|
|
77
|
+
return;
|
|
78
|
+
}
|
|
75
79
|
const signedMsgOrderParamsBuf = Buffer.from(order['order_message'], 'hex');
|
|
76
80
|
const isDelegateSigner = signedMsgOrderParamsBuf
|
|
77
81
|
.slice(0, 8)
|
|
@@ -23,6 +23,7 @@ export declare class UserMap implements UserMapInterface {
|
|
|
23
23
|
private connection;
|
|
24
24
|
private commitment;
|
|
25
25
|
private includeIdle;
|
|
26
|
+
private filterByPoolId?;
|
|
26
27
|
private additionalFilters?;
|
|
27
28
|
private disableSyncOnTotalAccountsChange;
|
|
28
29
|
private lastNumberOfSubAccounts;
|
|
@@ -82,6 +83,7 @@ export declare class UserMap implements UserMapInterface {
|
|
|
82
83
|
*/
|
|
83
84
|
getUniqueAuthorities(filterCriteria?: UserFilterCriteria): PublicKey[];
|
|
84
85
|
sync(): Promise<void>;
|
|
86
|
+
private getFilters;
|
|
85
87
|
/**
|
|
86
88
|
* Syncs the UserMap using the default sync method (single getProgramAccounts call with filters).
|
|
87
89
|
* This method may fail when drift has too many users. (nodejs response size limits)
|
|
@@ -38,6 +38,7 @@ class UserMap {
|
|
|
38
38
|
? (_a = config.subscriptionConfig.commitment) !== null && _a !== void 0 ? _a : this.driftClient.opts.commitment
|
|
39
39
|
: this.driftClient.opts.commitment;
|
|
40
40
|
this.includeIdle = (_b = config.includeIdle) !== null && _b !== void 0 ? _b : false;
|
|
41
|
+
this.filterByPoolId = config.filterByPoolId;
|
|
41
42
|
this.additionalFilters = config.additionalFilters;
|
|
42
43
|
this.disableSyncOnTotalAccountsChange =
|
|
43
44
|
(_c = config.disableSyncOnTotalAccountsChange) !== null && _c !== void 0 ? _c : false;
|
|
@@ -263,6 +264,19 @@ class UserMap {
|
|
|
263
264
|
return this.paginatedSync();
|
|
264
265
|
}
|
|
265
266
|
}
|
|
267
|
+
getFilters() {
|
|
268
|
+
const filters = [(0, memcmp_1.getUserFilter)()];
|
|
269
|
+
if (!this.includeIdle) {
|
|
270
|
+
filters.push((0, memcmp_1.getNonIdleUserFilter)());
|
|
271
|
+
}
|
|
272
|
+
if (this.filterByPoolId !== undefined) {
|
|
273
|
+
filters.push((0, memcmp_1.getUsersWithPoolId)(this.filterByPoolId));
|
|
274
|
+
}
|
|
275
|
+
if (this.additionalFilters) {
|
|
276
|
+
filters.push(...this.additionalFilters);
|
|
277
|
+
}
|
|
278
|
+
return filters;
|
|
279
|
+
}
|
|
266
280
|
/**
|
|
267
281
|
* Syncs the UserMap using the default sync method (single getProgramAccounts call with filters).
|
|
268
282
|
* This method may fail when drift has too many users. (nodejs response size limits)
|
|
@@ -277,18 +291,11 @@ class UserMap {
|
|
|
277
291
|
this.syncPromiseResolver = resolver;
|
|
278
292
|
});
|
|
279
293
|
try {
|
|
280
|
-
const filters = [(0, memcmp_1.getUserFilter)()];
|
|
281
|
-
if (!this.includeIdle) {
|
|
282
|
-
filters.push((0, memcmp_1.getNonIdleUserFilter)());
|
|
283
|
-
}
|
|
284
|
-
if (this.additionalFilters) {
|
|
285
|
-
filters.push(...this.additionalFilters);
|
|
286
|
-
}
|
|
287
294
|
const rpcRequestArgs = [
|
|
288
295
|
this.driftClient.program.programId.toBase58(),
|
|
289
296
|
{
|
|
290
297
|
commitment: this.commitment,
|
|
291
|
-
filters,
|
|
298
|
+
filters: this.getFilters(),
|
|
292
299
|
encoding: 'base64+zstd',
|
|
293
300
|
withContext: true,
|
|
294
301
|
},
|
|
@@ -359,10 +366,7 @@ class UserMap {
|
|
|
359
366
|
try {
|
|
360
367
|
const accountsPrefetch = await this.connection.getProgramAccounts(this.driftClient.program.programId, {
|
|
361
368
|
dataSlice: { offset: 0, length: 0 },
|
|
362
|
-
filters:
|
|
363
|
-
(0, memcmp_1.getUserFilter)(),
|
|
364
|
-
...(!this.includeIdle ? [(0, memcmp_1.getNonIdleUserFilter)()] : []),
|
|
365
|
-
],
|
|
369
|
+
filters: this.getFilters(),
|
|
366
370
|
});
|
|
367
371
|
const accountPublicKeys = accountsPrefetch.map((account) => account.pubkey);
|
|
368
372
|
const limitConcurrency = async (tasks, limit) => {
|
package/lib/node/memcmp.d.ts
CHANGED
|
@@ -6,6 +6,7 @@ export declare function getUserWithoutOrderFilter(): MemcmpFilter;
|
|
|
6
6
|
export declare function getUserWithAuctionFilter(): MemcmpFilter;
|
|
7
7
|
export declare function getUserThatHasBeenLP(): MemcmpFilter;
|
|
8
8
|
export declare function getUserWithName(name: string): MemcmpFilter;
|
|
9
|
+
export declare function getUsersWithPoolId(poolId: number): MemcmpFilter;
|
|
9
10
|
export declare function getUserStatsFilter(): MemcmpFilter;
|
|
10
11
|
export declare function getUserStatsIsReferredFilter(): MemcmpFilter;
|
|
11
12
|
export declare function getUserStatsIsReferredOrReferrerFilter(): MemcmpFilter;
|
package/lib/node/memcmp.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"memcmp.d.ts","sourceRoot":"","sources":["../../src/memcmp.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAK/C,wBAAgB,aAAa,IAAI,YAAY,CAO5C;AAED,wBAAgB,oBAAoB,IAAI,YAAY,CAOnD;AAED,wBAAgB,sBAAsB,IAAI,YAAY,CAOrD;AAED,wBAAgB,yBAAyB,IAAI,YAAY,CAOxD;AAED,wBAAgB,wBAAwB,IAAI,YAAY,CAOvD;AAED,wBAAgB,oBAAoB,IAAI,YAAY,CAOnD;AAED,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,YAAY,CAO1D;AAED,wBAAgB,kBAAkB,IAAI,YAAY,CAOjD;AAED,wBAAgB,4BAA4B,IAAI,YAAY,CAO3D;AAED,wBAAgB,sCAAsC,IAAI,YAAY,CAOrE;AAED,wBAAgB,4BAA4B,IAAI,YAAY,CAS3D"}
|
|
1
|
+
{"version":3,"file":"memcmp.d.ts","sourceRoot":"","sources":["../../src/memcmp.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAK/C,wBAAgB,aAAa,IAAI,YAAY,CAO5C;AAED,wBAAgB,oBAAoB,IAAI,YAAY,CAOnD;AAED,wBAAgB,sBAAsB,IAAI,YAAY,CAOrD;AAED,wBAAgB,yBAAyB,IAAI,YAAY,CAOxD;AAED,wBAAgB,wBAAwB,IAAI,YAAY,CAOvD;AAED,wBAAgB,oBAAoB,IAAI,YAAY,CAOnD;AAED,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,YAAY,CAO1D;AAED,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,MAAM,GAAG,YAAY,CAO/D;AAED,wBAAgB,kBAAkB,IAAI,YAAY,CAOjD;AAED,wBAAgB,4BAA4B,IAAI,YAAY,CAO3D;AAED,wBAAgB,sCAAsC,IAAI,YAAY,CAOrE;AAED,wBAAgB,4BAA4B,IAAI,YAAY,CAS3D"}
|
package/lib/node/memcmp.js
CHANGED
|
@@ -3,7 +3,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
3
3
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
4
|
};
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
-
exports.getSignedMsgUserOrdersFilter = exports.getUserStatsIsReferredOrReferrerFilter = exports.getUserStatsIsReferredFilter = exports.getUserStatsFilter = exports.getUserWithName = exports.getUserThatHasBeenLP = exports.getUserWithAuctionFilter = exports.getUserWithoutOrderFilter = exports.getUserWithOrderFilter = exports.getNonIdleUserFilter = exports.getUserFilter = void 0;
|
|
6
|
+
exports.getSignedMsgUserOrdersFilter = exports.getUserStatsIsReferredOrReferrerFilter = exports.getUserStatsIsReferredFilter = exports.getUserStatsFilter = exports.getUsersWithPoolId = exports.getUserWithName = exports.getUserThatHasBeenLP = exports.getUserWithAuctionFilter = exports.getUserWithoutOrderFilter = exports.getUserWithOrderFilter = exports.getNonIdleUserFilter = exports.getUserFilter = void 0;
|
|
7
7
|
const bs58_1 = __importDefault(require("bs58"));
|
|
8
8
|
const anchor_1 = require("@coral-xyz/anchor");
|
|
9
9
|
const userName_1 = require("./userName");
|
|
@@ -70,6 +70,15 @@ function getUserWithName(name) {
|
|
|
70
70
|
};
|
|
71
71
|
}
|
|
72
72
|
exports.getUserWithName = getUserWithName;
|
|
73
|
+
function getUsersWithPoolId(poolId) {
|
|
74
|
+
return {
|
|
75
|
+
memcmp: {
|
|
76
|
+
offset: 4356,
|
|
77
|
+
bytes: bs58_1.default.encode(Uint8Array.from([poolId])),
|
|
78
|
+
},
|
|
79
|
+
};
|
|
80
|
+
}
|
|
81
|
+
exports.getUsersWithPoolId = getUsersWithPoolId;
|
|
73
82
|
function getUserStatsFilter() {
|
|
74
83
|
return {
|
|
75
84
|
memcmp: {
|
|
@@ -29,7 +29,7 @@ export declare class SwiftOrderSubscriber {
|
|
|
29
29
|
getSymbolForMarketIndex(marketIndex: number): string;
|
|
30
30
|
generateChallengeResponse(nonce: string): string;
|
|
31
31
|
handleAuthMessage(message: any): void;
|
|
32
|
-
subscribe(onOrder: (orderMessageRaw: any, signedMessage: SignedMsgOrderParamsMessage | SignedMsgOrderParamsDelegateMessage, isDelegateSigner?: boolean) => Promise<void
|
|
32
|
+
subscribe(onOrder: (orderMessageRaw: any, signedMessage: SignedMsgOrderParamsMessage | SignedMsgOrderParamsDelegateMessage, isDelegateSigner?: boolean) => Promise<void>, acceptSanitized?: boolean): Promise<void>;
|
|
33
33
|
getPlaceAndMakeSignedMsgOrderIxs(orderMessageRaw: any, signedMsgOrderParamsMessage: SignedMsgOrderParamsMessage | SignedMsgOrderParamsDelegateMessage, makerOrderParams: OptionalOrderParams): Promise<TransactionInstruction[]>;
|
|
34
34
|
private startHeartbeatTimer;
|
|
35
35
|
private reconnect;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"swiftOrderSubscriber.d.ts","sourceRoot":"","sources":["../../../src/swift/swiftOrderSubscriber.ts"],"names":[],"mappings":"AAAA,OAAO,EAEN,WAAW,EACX,QAAQ,EAKR,mBAAmB,EAEnB,mCAAmC,EACnC,2BAA2B,EAC3B,WAAW,EACX,MAAM,IAAI,CAAC;AACZ,OAAO,EAAE,OAAO,EAAa,sBAAsB,EAAE,MAAM,iBAAiB,CAAC;AAO7E,MAAM,WAAW,aAAa;IAC7B,kBAAkB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC,CAAC;CAC5D;AAED,MAAM,MAAM,0BAA0B,GAAG;IACxC,WAAW,EAAE,WAAW,CAAC;IACzB,iBAAiB,CAAC,EAAE,aAAa,CAAC;IAClC,QAAQ,EAAE,QAAQ,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,aAAa,EAAE,MAAM,EAAE,CAAC;IACxB;;;;MAIE;IACF,OAAO,EAAE,OAAO,CAAC;CACjB,CAAC;AAEF,qBAAa,oBAAoB;IAgBpB,OAAO,CAAC,MAAM;IAf1B,OAAO,CAAC,gBAAgB,CAA+B;IACvD,OAAO,CAAC,QAAQ,CAAC,mBAAmB,CAAS;IAC7C,OAAO,CAAC,EAAE,CAA0B;IACpC,OAAO,CAAC,WAAW,CAAc;IAC1B,iBAAiB,CAAC,EAAE,aAAa,CAAC;IAClC,OAAO,EAAE,CACf,eAAe,EAAE,GAAG,EACpB,aAAa,EACV,2BAA2B,GAC3B,mCAAmC,EACtC,gBAAgB,CAAC,EAAE,OAAO,KACtB,OAAO,CAAC,IAAI,CAAC,CAAC;IAEnB,UAAU,UAAS;gBAEC,MAAM,EAAE,0BAA0B;IAKtD,uBAAuB,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM;IAQpD,yBAAyB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM;IAUhD,iBAAiB,CAAC,OAAO,EAAE,GAAG,GAAG,IAAI;IA6B/B,SAAS,CACd,OAAO,EAAE,CACR,eAAe,EAAE,GAAG,EACpB,aAAa,EACV,2BAA2B,GAC3B,mCAAmC,EACtC,gBAAgB,CAAC,EAAE,OAAO,KACtB,OAAO,CAAC,IAAI,CAAC,
|
|
1
|
+
{"version":3,"file":"swiftOrderSubscriber.d.ts","sourceRoot":"","sources":["../../../src/swift/swiftOrderSubscriber.ts"],"names":[],"mappings":"AAAA,OAAO,EAEN,WAAW,EACX,QAAQ,EAKR,mBAAmB,EAEnB,mCAAmC,EACnC,2BAA2B,EAC3B,WAAW,EACX,MAAM,IAAI,CAAC;AACZ,OAAO,EAAE,OAAO,EAAa,sBAAsB,EAAE,MAAM,iBAAiB,CAAC;AAO7E,MAAM,WAAW,aAAa;IAC7B,kBAAkB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC,CAAC;CAC5D;AAED,MAAM,MAAM,0BAA0B,GAAG;IACxC,WAAW,EAAE,WAAW,CAAC;IACzB,iBAAiB,CAAC,EAAE,aAAa,CAAC;IAClC,QAAQ,EAAE,QAAQ,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,aAAa,EAAE,MAAM,EAAE,CAAC;IACxB;;;;MAIE;IACF,OAAO,EAAE,OAAO,CAAC;CACjB,CAAC;AAEF,qBAAa,oBAAoB;IAgBpB,OAAO,CAAC,MAAM;IAf1B,OAAO,CAAC,gBAAgB,CAA+B;IACvD,OAAO,CAAC,QAAQ,CAAC,mBAAmB,CAAS;IAC7C,OAAO,CAAC,EAAE,CAA0B;IACpC,OAAO,CAAC,WAAW,CAAc;IAC1B,iBAAiB,CAAC,EAAE,aAAa,CAAC;IAClC,OAAO,EAAE,CACf,eAAe,EAAE,GAAG,EACpB,aAAa,EACV,2BAA2B,GAC3B,mCAAmC,EACtC,gBAAgB,CAAC,EAAE,OAAO,KACtB,OAAO,CAAC,IAAI,CAAC,CAAC;IAEnB,UAAU,UAAS;gBAEC,MAAM,EAAE,0BAA0B;IAKtD,uBAAuB,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM;IAQpD,yBAAyB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM;IAUhD,iBAAiB,CAAC,OAAO,EAAE,GAAG,GAAG,IAAI;IA6B/B,SAAS,CACd,OAAO,EAAE,CACR,eAAe,EAAE,GAAG,EACpB,aAAa,EACV,2BAA2B,GAC3B,mCAAmC,EACtC,gBAAgB,CAAC,EAAE,OAAO,KACtB,OAAO,CAAC,IAAI,CAAC,EAClB,eAAe,UAAQ,GACrB,OAAO,CAAC,IAAI,CAAC;IAgGV,gCAAgC,CACrC,eAAe,EAAE,GAAG,EACpB,2BAA2B,EACxB,2BAA2B,GAC3B,mCAAmC,EACtC,gBAAgB,EAAE,mBAAmB,GACnC,OAAO,CAAC,sBAAsB,EAAE,CAAC;IAiEpC,OAAO,CAAC,mBAAmB;IAa3B,OAAO,CAAC,SAAS;CAWjB"}
|
|
@@ -55,7 +55,7 @@ class SwiftOrderSubscriber {
|
|
|
55
55
|
});
|
|
56
56
|
}
|
|
57
57
|
}
|
|
58
|
-
async subscribe(onOrder) {
|
|
58
|
+
async subscribe(onOrder, acceptSanitized = false) {
|
|
59
59
|
this.onOrder = onOrder;
|
|
60
60
|
const endpoint = this.config.endpoint || this.config.driftEnv === 'devnet'
|
|
61
61
|
? 'wss://master.swift.drift.trade/ws'
|
|
@@ -72,6 +72,10 @@ class SwiftOrderSubscriber {
|
|
|
72
72
|
}
|
|
73
73
|
if (message['order']) {
|
|
74
74
|
const order = message['order'];
|
|
75
|
+
// ignore likely sanitized orders by default
|
|
76
|
+
if (order['will_sanitize'] === true && !acceptSanitized) {
|
|
77
|
+
return;
|
|
78
|
+
}
|
|
75
79
|
const signedMsgOrderParamsBuf = Buffer.from(order['order_message'], 'hex');
|
|
76
80
|
const isDelegateSigner = signedMsgOrderParamsBuf
|
|
77
81
|
.slice(0, 8)
|
|
@@ -23,6 +23,7 @@ export declare class UserMap implements UserMapInterface {
|
|
|
23
23
|
private connection;
|
|
24
24
|
private commitment;
|
|
25
25
|
private includeIdle;
|
|
26
|
+
private filterByPoolId?;
|
|
26
27
|
private additionalFilters?;
|
|
27
28
|
private disableSyncOnTotalAccountsChange;
|
|
28
29
|
private lastNumberOfSubAccounts;
|
|
@@ -82,6 +83,7 @@ export declare class UserMap implements UserMapInterface {
|
|
|
82
83
|
*/
|
|
83
84
|
getUniqueAuthorities(filterCriteria?: UserFilterCriteria): PublicKey[];
|
|
84
85
|
sync(): Promise<void>;
|
|
86
|
+
private getFilters;
|
|
85
87
|
/**
|
|
86
88
|
* Syncs the UserMap using the default sync method (single getProgramAccounts call with filters).
|
|
87
89
|
* This method may fail when drift has too many users. (nodejs response size limits)
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"userMap.d.ts","sourceRoot":"","sources":["../../../src/userMap/userMap.ts"],"names":[],"mappings":"AAAA,OAAO,EACN,IAAI,EACJ,WAAW,EACX,WAAW,EACX,WAAW,EACX,YAAY,EASZ,IAAI,EAEJ,sBAAsB,EACtB,WAAW,EAEX,qBAAqB,EACrB,MAAM,IAAI,CAAC;AAEZ,OAAO,EAIN,SAAS,EAET,MAAM,iBAAiB,CAAC;
|
|
1
|
+
{"version":3,"file":"userMap.d.ts","sourceRoot":"","sources":["../../../src/userMap/userMap.ts"],"names":[],"mappings":"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"}
|
|
@@ -38,6 +38,7 @@ class UserMap {
|
|
|
38
38
|
? (_a = config.subscriptionConfig.commitment) !== null && _a !== void 0 ? _a : this.driftClient.opts.commitment
|
|
39
39
|
: this.driftClient.opts.commitment;
|
|
40
40
|
this.includeIdle = (_b = config.includeIdle) !== null && _b !== void 0 ? _b : false;
|
|
41
|
+
this.filterByPoolId = config.filterByPoolId;
|
|
41
42
|
this.additionalFilters = config.additionalFilters;
|
|
42
43
|
this.disableSyncOnTotalAccountsChange =
|
|
43
44
|
(_c = config.disableSyncOnTotalAccountsChange) !== null && _c !== void 0 ? _c : false;
|
|
@@ -263,6 +264,19 @@ class UserMap {
|
|
|
263
264
|
return this.paginatedSync();
|
|
264
265
|
}
|
|
265
266
|
}
|
|
267
|
+
getFilters() {
|
|
268
|
+
const filters = [(0, memcmp_1.getUserFilter)()];
|
|
269
|
+
if (!this.includeIdle) {
|
|
270
|
+
filters.push((0, memcmp_1.getNonIdleUserFilter)());
|
|
271
|
+
}
|
|
272
|
+
if (this.filterByPoolId !== undefined) {
|
|
273
|
+
filters.push((0, memcmp_1.getUsersWithPoolId)(this.filterByPoolId));
|
|
274
|
+
}
|
|
275
|
+
if (this.additionalFilters) {
|
|
276
|
+
filters.push(...this.additionalFilters);
|
|
277
|
+
}
|
|
278
|
+
return filters;
|
|
279
|
+
}
|
|
266
280
|
/**
|
|
267
281
|
* Syncs the UserMap using the default sync method (single getProgramAccounts call with filters).
|
|
268
282
|
* This method may fail when drift has too many users. (nodejs response size limits)
|
|
@@ -277,18 +291,11 @@ class UserMap {
|
|
|
277
291
|
this.syncPromiseResolver = resolver;
|
|
278
292
|
});
|
|
279
293
|
try {
|
|
280
|
-
const filters = [(0, memcmp_1.getUserFilter)()];
|
|
281
|
-
if (!this.includeIdle) {
|
|
282
|
-
filters.push((0, memcmp_1.getNonIdleUserFilter)());
|
|
283
|
-
}
|
|
284
|
-
if (this.additionalFilters) {
|
|
285
|
-
filters.push(...this.additionalFilters);
|
|
286
|
-
}
|
|
287
294
|
const rpcRequestArgs = [
|
|
288
295
|
this.driftClient.program.programId.toBase58(),
|
|
289
296
|
{
|
|
290
297
|
commitment: this.commitment,
|
|
291
|
-
filters,
|
|
298
|
+
filters: this.getFilters(),
|
|
292
299
|
encoding: 'base64+zstd',
|
|
293
300
|
withContext: true,
|
|
294
301
|
},
|
|
@@ -359,10 +366,7 @@ class UserMap {
|
|
|
359
366
|
try {
|
|
360
367
|
const accountsPrefetch = await this.connection.getProgramAccounts(this.driftClient.program.programId, {
|
|
361
368
|
dataSlice: { offset: 0, length: 0 },
|
|
362
|
-
filters:
|
|
363
|
-
(0, memcmp_1.getUserFilter)(),
|
|
364
|
-
...(!this.includeIdle ? [(0, memcmp_1.getNonIdleUserFilter)()] : []),
|
|
365
|
-
],
|
|
369
|
+
filters: this.getFilters(),
|
|
366
370
|
});
|
|
367
371
|
const accountPublicKeys = accountsPrefetch.map((account) => account.pubkey);
|
|
368
372
|
const limitConcurrency = async (tasks, limit) => {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"userMapConfig.d.ts","sourceRoot":"","sources":["../../../src/userMap/userMapConfig.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AACvE,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAC7C,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAGhD,MAAM,MAAM,yBAAyB,GAAG;IAEvC,aAAa,EAAE,OAAO,CAAC;CACvB,CAAC;AAEF,MAAM,MAAM,UAAU,GACnB;IACA,IAAI,EAAE,SAAS,CAAC;CACf,GACD;IACA,IAAI,EAAE,WAAW,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,gBAAgB,CAAC,EAAE,MAAM,CAAC;CACzB,CAAC;AAEL,MAAM,MAAM,aAAa,GAAG;IAC3B,WAAW,EAAE,WAAW,CAAC;IAEzB,UAAU,CAAC,EAAE,UAAU,CAAC;IACxB,kBAAkB,EACf;QACA,IAAI,EAAE,SAAS,CAAC;QAChB,SAAS,EAAE,MAAM,CAAC;QAClB,UAAU,CAAC,EAAE,UAAU,CAAC;KACvB,GACD;QACA,IAAI,EAAE,MAAM,CAAC;QACb,WAAW,EAAE,WAAW,CAAC;QACzB,cAAc,CAAC,EAAE,MAAM,CAAC;QACxB,gBAAgB,CAAC,EAAE,OAAO,CAAC;KAC1B,GACD;QACA,IAAI,EAAE,WAAW,CAAC;QAClB,cAAc,CAAC,EAAE,MAAM,CAAC;QACxB,gBAAgB,CAAC,EAAE,OAAO,CAAC;QAC3B,UAAU,CAAC,EAAE,UAAU,CAAC;KACvB,CAAC;IAGL,eAAe,CAAC,EAAE,OAAO,CAAC;IAG1B,WAAW,CAAC,EAAE,OAAO,CAAC;IAGtB,UAAU,CAAC,EAAE,OAAO,CAAC;IAIrB,gCAAgC,CAAC,EAAE,OAAO,CAAC;IAE3C,UAAU,CAAC,EAAE,UAAU,CAAC;IAGxB,iBAAiB,CAAC,EAAE,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"userMapConfig.d.ts","sourceRoot":"","sources":["../../../src/userMap/userMapConfig.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AACvE,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAC7C,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAGhD,MAAM,MAAM,yBAAyB,GAAG;IAEvC,aAAa,EAAE,OAAO,CAAC;CACvB,CAAC;AAEF,MAAM,MAAM,UAAU,GACnB;IACA,IAAI,EAAE,SAAS,CAAC;CACf,GACD;IACA,IAAI,EAAE,WAAW,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,gBAAgB,CAAC,EAAE,MAAM,CAAC;CACzB,CAAC;AAEL,MAAM,MAAM,aAAa,GAAG;IAC3B,WAAW,EAAE,WAAW,CAAC;IAEzB,UAAU,CAAC,EAAE,UAAU,CAAC;IACxB,kBAAkB,EACf;QACA,IAAI,EAAE,SAAS,CAAC;QAChB,SAAS,EAAE,MAAM,CAAC;QAClB,UAAU,CAAC,EAAE,UAAU,CAAC;KACvB,GACD;QACA,IAAI,EAAE,MAAM,CAAC;QACb,WAAW,EAAE,WAAW,CAAC;QACzB,cAAc,CAAC,EAAE,MAAM,CAAC;QACxB,gBAAgB,CAAC,EAAE,OAAO,CAAC;KAC1B,GACD;QACA,IAAI,EAAE,WAAW,CAAC;QAClB,cAAc,CAAC,EAAE,MAAM,CAAC;QACxB,gBAAgB,CAAC,EAAE,OAAO,CAAC;QAC3B,UAAU,CAAC,EAAE,UAAU,CAAC;KACvB,CAAC;IAGL,eAAe,CAAC,EAAE,OAAO,CAAC;IAG1B,WAAW,CAAC,EAAE,OAAO,CAAC;IAGtB,UAAU,CAAC,EAAE,OAAO,CAAC;IAIrB,gCAAgC,CAAC,EAAE,OAAO,CAAC;IAE3C,UAAU,CAAC,EAAE,UAAU,CAAC;IAGxB,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAG5B,cAAc,CAAC,EAAE,MAAM,CAAC;IAExB,iBAAiB,CAAC,EAAE,YAAY,EAAE,CAAC;CACnC,CAAC"}
|
package/package.json
CHANGED
package/src/memcmp.ts
CHANGED
|
@@ -66,6 +66,15 @@ export function getUserWithName(name: string): MemcmpFilter {
|
|
|
66
66
|
};
|
|
67
67
|
}
|
|
68
68
|
|
|
69
|
+
export function getUsersWithPoolId(poolId: number): MemcmpFilter {
|
|
70
|
+
return {
|
|
71
|
+
memcmp: {
|
|
72
|
+
offset: 4356,
|
|
73
|
+
bytes: bs58.encode(Uint8Array.from([poolId])),
|
|
74
|
+
},
|
|
75
|
+
};
|
|
76
|
+
}
|
|
77
|
+
|
|
69
78
|
export function getUserStatsFilter(): MemcmpFilter {
|
|
70
79
|
return {
|
|
71
80
|
memcmp: {
|
|
@@ -112,7 +112,8 @@ export class SwiftOrderSubscriber {
|
|
|
112
112
|
| SignedMsgOrderParamsMessage
|
|
113
113
|
| SignedMsgOrderParamsDelegateMessage,
|
|
114
114
|
isDelegateSigner?: boolean
|
|
115
|
-
) => Promise<void
|
|
115
|
+
) => Promise<void>,
|
|
116
|
+
acceptSanitized = false
|
|
116
117
|
): Promise<void> {
|
|
117
118
|
this.onOrder = onOrder;
|
|
118
119
|
|
|
@@ -137,6 +138,10 @@ export class SwiftOrderSubscriber {
|
|
|
137
138
|
|
|
138
139
|
if (message['order']) {
|
|
139
140
|
const order = message['order'];
|
|
141
|
+
// ignore likely sanitized orders by default
|
|
142
|
+
if (order['will_sanitize'] === true && !acceptSanitized) {
|
|
143
|
+
return;
|
|
144
|
+
}
|
|
140
145
|
const signedMsgOrderParamsBuf = Buffer.from(
|
|
141
146
|
order['order_message'],
|
|
142
147
|
'hex'
|
package/src/userMap/userMap.ts
CHANGED
|
@@ -29,7 +29,11 @@ import {
|
|
|
29
29
|
} from '@solana/web3.js';
|
|
30
30
|
import { Buffer } from 'buffer';
|
|
31
31
|
import { ZSTDDecoder } from 'zstddec';
|
|
32
|
-
import {
|
|
32
|
+
import {
|
|
33
|
+
getNonIdleUserFilter,
|
|
34
|
+
getUserFilter,
|
|
35
|
+
getUsersWithPoolId,
|
|
36
|
+
} from '../memcmp';
|
|
33
37
|
import {
|
|
34
38
|
SyncConfig,
|
|
35
39
|
UserAccountFilterCriteria as UserFilterCriteria,
|
|
@@ -76,6 +80,7 @@ export class UserMap implements UserMapInterface {
|
|
|
76
80
|
private connection: Connection;
|
|
77
81
|
private commitment: Commitment;
|
|
78
82
|
private includeIdle: boolean;
|
|
83
|
+
private filterByPoolId?: number;
|
|
79
84
|
private additionalFilters?: MemcmpFilter[];
|
|
80
85
|
private disableSyncOnTotalAccountsChange: boolean;
|
|
81
86
|
private lastNumberOfSubAccounts: BN;
|
|
@@ -115,6 +120,7 @@ export class UserMap implements UserMapInterface {
|
|
|
115
120
|
this.driftClient.opts.commitment
|
|
116
121
|
: this.driftClient.opts.commitment;
|
|
117
122
|
this.includeIdle = config.includeIdle ?? false;
|
|
123
|
+
this.filterByPoolId = config.filterByPoolId;
|
|
118
124
|
this.additionalFilters = config.additionalFilters;
|
|
119
125
|
this.disableSyncOnTotalAccountsChange =
|
|
120
126
|
config.disableSyncOnTotalAccountsChange ?? false;
|
|
@@ -394,6 +400,20 @@ export class UserMap implements UserMapInterface {
|
|
|
394
400
|
}
|
|
395
401
|
}
|
|
396
402
|
|
|
403
|
+
private getFilters(): MemcmpFilter[] {
|
|
404
|
+
const filters = [getUserFilter()];
|
|
405
|
+
if (!this.includeIdle) {
|
|
406
|
+
filters.push(getNonIdleUserFilter());
|
|
407
|
+
}
|
|
408
|
+
if (this.filterByPoolId !== undefined) {
|
|
409
|
+
filters.push(getUsersWithPoolId(this.filterByPoolId));
|
|
410
|
+
}
|
|
411
|
+
if (this.additionalFilters) {
|
|
412
|
+
filters.push(...this.additionalFilters);
|
|
413
|
+
}
|
|
414
|
+
return filters;
|
|
415
|
+
}
|
|
416
|
+
|
|
397
417
|
/**
|
|
398
418
|
* Syncs the UserMap using the default sync method (single getProgramAccounts call with filters).
|
|
399
419
|
* This method may fail when drift has too many users. (nodejs response size limits)
|
|
@@ -408,18 +428,11 @@ export class UserMap implements UserMapInterface {
|
|
|
408
428
|
});
|
|
409
429
|
|
|
410
430
|
try {
|
|
411
|
-
const filters = [getUserFilter()];
|
|
412
|
-
if (!this.includeIdle) {
|
|
413
|
-
filters.push(getNonIdleUserFilter());
|
|
414
|
-
}
|
|
415
|
-
if (this.additionalFilters) {
|
|
416
|
-
filters.push(...this.additionalFilters);
|
|
417
|
-
}
|
|
418
431
|
const rpcRequestArgs = [
|
|
419
432
|
this.driftClient.program.programId.toBase58(),
|
|
420
433
|
{
|
|
421
434
|
commitment: this.commitment,
|
|
422
|
-
filters,
|
|
435
|
+
filters: this.getFilters(),
|
|
423
436
|
encoding: 'base64+zstd',
|
|
424
437
|
withContext: true,
|
|
425
438
|
},
|
|
@@ -517,10 +530,7 @@ export class UserMap implements UserMapInterface {
|
|
|
517
530
|
this.driftClient.program.programId,
|
|
518
531
|
{
|
|
519
532
|
dataSlice: { offset: 0, length: 0 },
|
|
520
|
-
filters:
|
|
521
|
-
getUserFilter(),
|
|
522
|
-
...(!this.includeIdle ? [getNonIdleUserFilter()] : []),
|
|
523
|
-
],
|
|
533
|
+
filters: this.getFilters(),
|
|
524
534
|
}
|
|
525
535
|
);
|
|
526
536
|
const accountPublicKeys = accountsPrefetch.map(
|
|
@@ -59,5 +59,8 @@ export type UserMapConfig = {
|
|
|
59
59
|
// Whether to throw an error if the userMap fails to sync. Defaults to true.
|
|
60
60
|
throwOnFailedSync?: boolean;
|
|
61
61
|
|
|
62
|
+
// Whether to filter users by poolId. Defaults to false (all users).
|
|
63
|
+
filterByPoolId?: number;
|
|
64
|
+
|
|
62
65
|
additionalFilters?: MemcmpFilter[];
|
|
63
66
|
};
|