@kurrent/kurrentdb-client
Version:
KurrentDB gRPC NodeJS Client SDK
90 lines • 3.9 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
const shared_pb_1 = require("../../generated/shared_pb");
const persistent_pb_1 = require("../../generated/persistent_pb");
const persistent_grpc_pb_1 = require("../../generated/persistent_grpc_pb");
const utils_1 = require("../utils");
const Client_1 = require("../Client");
const constants_1 = require("../constants");
const settingsToGRPC_1 = require("./utils/settingsToGRPC");
Client_1.Client.prototype.createPersistentSubscriptionToAll = async function (groupName, settings, { filter, ...baseOptions } = {}) {
if (!(await this.supports(persistent_grpc_pb_1.PersistentSubscriptionsService.create, "all"))) {
throw new utils_1.UnsupportedError("createPersistentSubscriptionToAll", "21.10");
}
const req = new persistent_pb_1.CreateReq();
const options = new persistent_pb_1.CreateReq.Options();
const allOptions = new persistent_pb_1.CreateReq.AllOptions();
const reqSettings = (0, settingsToGRPC_1.settingsToGRPC)(settings, persistent_pb_1.CreateReq.Settings);
switch (settings.startFrom) {
case constants_1.START: {
allOptions.setStart(new shared_pb_1.Empty());
break;
}
case constants_1.END: {
allOptions.setEnd(new shared_pb_1.Empty());
break;
}
default: {
const position = new persistent_pb_1.CreateReq.Position();
position.setCommitPosition(settings.startFrom.commit.toString(10));
position.setPreparePosition(settings.startFrom.prepare.toString(10));
allOptions.setPosition(position);
break;
}
}
if (filter) {
const filterOptions = new persistent_pb_1.CreateReq.AllOptions.FilterOptions();
const expression = new persistent_pb_1.CreateReq.AllOptions.FilterOptions.Expression();
if ("prefixes" in filter) {
expression.setPrefixList(filter.prefixes);
}
if ("regex" in filter) {
expression.setRegex(filter.regex);
}
switch (filter.filterOn) {
case constants_1.STREAM_NAME: {
filterOptions.setStreamIdentifier(expression);
break;
}
case constants_1.EVENT_TYPE: {
filterOptions.setEventType(expression);
break;
}
}
if (typeof filter.maxSearchWindow === "number") {
if (filter.maxSearchWindow <= 0) {
throw new Error("MaxSearchWindow must be greater than 0.");
}
filterOptions.setMax(filter.maxSearchWindow);
}
else {
filterOptions.setCount(new shared_pb_1.Empty());
}
if (filter.checkpointInterval <= 0) {
throw new Error("CheckpointInterval must be greater than 0.");
}
filterOptions.setCheckpointintervalmultiplier(filter.checkpointInterval);
allOptions.setFilter(filterOptions);
}
else {
allOptions.setNoFilter(new shared_pb_1.Empty());
}
options.setGroupName(groupName);
options.setSettings(reqSettings);
options.setAll(allOptions);
req.setOptions(options);
utils_1.debug.command("createPersistentSubscriptionToAll: %O", {
groupName,
settings,
options: { filter, ...baseOptions },
});
utils_1.debug.command_grpc("createPersistentSubscriptionToAll: %g", req);
return this.execute(persistent_grpc_pb_1.PersistentSubscriptionsClient, "createPersistentSubscriptionToAll", (client) => new Promise((resolve, reject) => {
client.create(req, ...this.callArguments(baseOptions), (error) => {
if (error)
return reject((0, utils_1.convertToCommandError)(error));
return resolve();
});
}));
};
//# sourceMappingURL=createPersistentSubscriptionToAll.js.map