@drift-labs/sdk
Version:
SDK for Drift Protocol
45 lines (44 loc) • 1.83 kB
JavaScript
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.grpcSubscription = void 0;
const memcmp_1 = require("../memcmp");
const grpcProgramAccountSubscriber_1 = require("../accounts/grpcProgramAccountSubscriber");
class grpcSubscription {
constructor({ grpcConfigs, userMap, skipInitialLoad = false, resubOpts, includeIdle = false, decodeFn, additionalFilters = undefined, }) {
this.userMap = userMap;
this.skipInitialLoad = skipInitialLoad;
this.resubOpts = resubOpts;
this.includeIdle = includeIdle || false;
this.decodeFn = decodeFn;
this.grpcConfigs = grpcConfigs;
this.additionalFilters = additionalFilters;
}
async subscribe() {
if (!this.subscriber) {
const filters = [(0, memcmp_1.getUserFilter)()];
if (!this.includeIdle) {
filters.push((0, memcmp_1.getNonIdleUserFilter)());
}
if (this.additionalFilters) {
filters.push(...this.additionalFilters);
}
this.subscriber = await grpcProgramAccountSubscriber_1.grpcProgramAccountSubscriber.create(this.grpcConfigs, 'UserMap', 'User', this.userMap.driftClient.program, this.decodeFn, {
filters,
}, this.resubOpts);
}
await this.subscriber.subscribe((accountId, account, context) => {
const userKey = accountId.toBase58();
this.userMap.updateUserAccount(userKey, account, context.slot);
});
if (!this.skipInitialLoad) {
await this.userMap.sync();
}
}
async unsubscribe() {
if (!this.subscriber)
return;
await this.subscriber.unsubscribe();
this.subscriber = undefined;
}
}
exports.grpcSubscription = grpcSubscription;