UNPKG

@kurrent/kurrentdb-client

Version:
100 lines 4.78 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); const shared_pb_1 = require("../../generated/kurrentdb/protocols/v1/shared_pb"); const persistentsubscriptions_pb_1 = require("../../generated/kurrentdb/protocols/v1/persistentsubscriptions_pb"); const semver_1 = __importDefault(require("semver")); const persistentsubscriptions_grpc_pb_1 = require("../../generated/kurrentdb/protocols/v1/persistentsubscriptions_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 } = {}) { const { serverVersion, supports } = await this.capabilities; if (!supports(persistentsubscriptions_grpc_pb_1.PersistentSubscriptionsService.create, "all")) { throw new utils_1.UnsupportedError("createPersistentSubscriptionToAll", "21.10"); } if (semver_1.default.lt(serverVersion, "21.10.1") && settings.consumerStrategyName === constants_1.PINNED_BY_CORRELATION) { console.warn(`Consumer strategy "${constants_1.PINNED_BY_CORRELATION}" requires server version ${serverVersion} or higher. "${constants_1.ROUND_ROBIN}" will be used instead.`); settings.consumerStrategyName = constants_1.ROUND_ROBIN; } const req = new persistentsubscriptions_pb_1.CreateReq(); const options = new persistentsubscriptions_pb_1.CreateReq.Options(); const allOptions = new persistentsubscriptions_pb_1.CreateReq.AllOptions(); const reqSettings = (0, settingsToGRPC_1.settingsToGRPC)(settings, persistentsubscriptions_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 persistentsubscriptions_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 persistentsubscriptions_pb_1.CreateReq.AllOptions.FilterOptions(); const expression = new persistentsubscriptions_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(persistentsubscriptions_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