redis-smq
Version:
A simple high-performance Redis message queue for Node.js.
122 lines • 6.55 kB
JavaScript
Object.defineProperty(exports, "__esModule", { value: true });
exports.redisKeys = void 0;
const redis_keys_error_1 = require("./redis-keys.error");
const keySegmentSeparator = ':';
const nsPrefix = 'redis-smq-v7.1';
const globalNamespace = 'global';
var ERedisKey;
(function (ERedisKey) {
ERedisKey[ERedisKey["KEY_QUEUE_PENDING"] = 1] = "KEY_QUEUE_PENDING";
ERedisKey[ERedisKey["KEY_QUEUE_PENDING_PRIORITY_MESSAGES"] = 2] = "KEY_QUEUE_PENDING_PRIORITY_MESSAGES";
ERedisKey[ERedisKey["KEY_QUEUE_PENDING_PRIORITY_MESSAGE_WEIGHT"] = 3] = "KEY_QUEUE_PENDING_PRIORITY_MESSAGE_WEIGHT";
ERedisKey[ERedisKey["KEY_QUEUE_DL"] = 4] = "KEY_QUEUE_DL";
ERedisKey[ERedisKey["KEY_QUEUE_PROCESSING"] = 5] = "KEY_QUEUE_PROCESSING";
ERedisKey[ERedisKey["KEY_QUEUE_ACKNOWLEDGED"] = 6] = "KEY_QUEUE_ACKNOWLEDGED";
ERedisKey[ERedisKey["KEY_QUEUE_CONSUMERS"] = 7] = "KEY_QUEUE_CONSUMERS";
ERedisKey[ERedisKey["KEY_QUEUE_PROCESSING_QUEUES"] = 8] = "KEY_QUEUE_PROCESSING_QUEUES";
ERedisKey[ERedisKey["KEY_LOCK_CONSUMER_WORKERS_RUNNER"] = 9] = "KEY_LOCK_CONSUMER_WORKERS_RUNNER";
ERedisKey[ERedisKey["KEY_DELAYED_MESSAGES"] = 10] = "KEY_DELAYED_MESSAGES";
ERedisKey[ERedisKey["KEY_REQUEUE_MESSAGES"] = 11] = "KEY_REQUEUE_MESSAGES";
ERedisKey[ERedisKey["KEY_SCHEDULED_MESSAGES"] = 12] = "KEY_SCHEDULED_MESSAGES";
ERedisKey[ERedisKey["KEY_SCHEDULED_MESSAGE_WEIGHT"] = 13] = "KEY_SCHEDULED_MESSAGE_WEIGHT";
ERedisKey[ERedisKey["KEY_HEARTBEATS"] = 14] = "KEY_HEARTBEATS";
ERedisKey[ERedisKey["KEY_HEARTBEAT_CONSUMER_WEIGHT"] = 15] = "KEY_HEARTBEAT_CONSUMER_WEIGHT";
ERedisKey[ERedisKey["KEY_QUEUES"] = 16] = "KEY_QUEUES";
ERedisKey[ERedisKey["KEY_PROCESSING_QUEUES"] = 17] = "KEY_PROCESSING_QUEUES";
ERedisKey[ERedisKey["KEY_CONSUMER_QUEUES"] = 18] = "KEY_CONSUMER_QUEUES";
ERedisKey[ERedisKey["KEY_NS_QUEUES"] = 19] = "KEY_NS_QUEUES";
ERedisKey[ERedisKey["KEY_NAMESPACES"] = 20] = "KEY_NAMESPACES";
ERedisKey[ERedisKey["KEY_QUEUE_RATE_LIMIT_COUNTER"] = 21] = "KEY_QUEUE_RATE_LIMIT_COUNTER";
ERedisKey[ERedisKey["KEY_QUEUE_SETTINGS"] = 22] = "KEY_QUEUE_SETTINGS";
ERedisKey[ERedisKey["KEY_EXCHANGE_BINDINGS"] = 23] = "KEY_EXCHANGE_BINDINGS";
ERedisKey[ERedisKey["KEY_EXCHANGES"] = 24] = "KEY_EXCHANGES";
})(ERedisKey || (ERedisKey = {}));
function makeNamespacedKeys(keys, namespace, ...rest) {
const result = {};
for (const k in keys) {
result[k] = [nsPrefix, namespace, keys[k], ...rest].join(keySegmentSeparator);
}
return result;
}
exports.redisKeys = {
getNamespaceKeys(ns) {
const mainKeys = this.getMainKeys();
const keys = {
keyNsQueues: ERedisKey.KEY_NS_QUEUES,
};
return Object.assign(Object.assign({}, mainKeys), makeNamespacedKeys(keys, ns));
},
getQueueKeys(queueParams) {
const nsKeys = this.getNamespaceKeys(queueParams.ns);
const queueKeys = {
keyQueuePending: ERedisKey.KEY_QUEUE_PENDING,
keyQueueDL: ERedisKey.KEY_QUEUE_DL,
keyQueueProcessingQueues: ERedisKey.KEY_QUEUE_PROCESSING_QUEUES,
keyQueueAcknowledged: ERedisKey.KEY_QUEUE_ACKNOWLEDGED,
keyQueuePendingPriorityMessageWeight: ERedisKey.KEY_QUEUE_PENDING_PRIORITY_MESSAGE_WEIGHT,
keyQueuePendingPriorityMessages: ERedisKey.KEY_QUEUE_PENDING_PRIORITY_MESSAGES,
keyQueueConsumers: ERedisKey.KEY_QUEUE_CONSUMERS,
keyQueueRateLimitCounter: ERedisKey.KEY_QUEUE_RATE_LIMIT_COUNTER,
keyQueueSettings: ERedisKey.KEY_QUEUE_SETTINGS,
};
return Object.assign(Object.assign({}, nsKeys), makeNamespacedKeys(queueKeys, queueParams.ns, queueParams.name));
},
getFanOutExchangeKeys(bindingKey) {
const mainKeys = this.getMainKeys();
const exchangeKeys = {
keyExchangeBindings: ERedisKey.KEY_EXCHANGE_BINDINGS,
};
return Object.assign(Object.assign({}, mainKeys), makeNamespacedKeys(exchangeKeys, globalNamespace, bindingKey));
},
getConsumerKeys(instanceId) {
const mainKeys = this.getMainKeys();
const consumerKeys = {
keyConsumerQueues: ERedisKey.KEY_CONSUMER_QUEUES,
};
return Object.assign(Object.assign({}, mainKeys), makeNamespacedKeys(consumerKeys, globalNamespace, instanceId));
},
getQueueConsumerKeys(queueParams, instanceId) {
const queueKeys = this.getQueueKeys(queueParams);
const consumerKeys = this.getConsumerKeys(instanceId);
const consumerQueueKeys = {
keyQueueProcessing: ERedisKey.KEY_QUEUE_PROCESSING,
};
return Object.assign(Object.assign(Object.assign({}, queueKeys), consumerKeys), makeNamespacedKeys(consumerQueueKeys, queueParams.ns, queueParams.name, instanceId));
},
getMainKeys() {
const mainKeys = {
keyQueues: ERedisKey.KEY_QUEUES,
keyProcessingQueues: ERedisKey.KEY_PROCESSING_QUEUES,
keyHeartbeats: ERedisKey.KEY_HEARTBEATS,
keyHeartbeatConsumerWeight: ERedisKey.KEY_HEARTBEAT_CONSUMER_WEIGHT,
keyScheduledMessages: ERedisKey.KEY_SCHEDULED_MESSAGES,
keyScheduledMessageWeight: ERedisKey.KEY_SCHEDULED_MESSAGE_WEIGHT,
keyLockConsumerWorkersRunner: ERedisKey.KEY_LOCK_CONSUMER_WORKERS_RUNNER,
keyDelayedMessages: ERedisKey.KEY_DELAYED_MESSAGES,
keyRequeueMessages: ERedisKey.KEY_REQUEUE_MESSAGES,
keyNamespaces: ERedisKey.KEY_NAMESPACES,
keyExchanges: ERedisKey.KEY_EXCHANGES,
};
return makeNamespacedKeys(mainKeys, globalNamespace);
},
validateNamespace(ns) {
ns = this.validateRedisKey(ns);
if (ns === globalNamespace) {
throw new redis_keys_error_1.RedisKeysError(`Namespace [${ns}] is reserved. Use another one.`);
}
return ns;
},
validateRedisKey(key) {
if (!key || !key.length) {
throw new redis_keys_error_1.RedisKeysError('Invalid Redis key. Expected be a non empty string.');
}
const lowerCase = key.toLowerCase();
const filtered = lowerCase.replace(/(?:[a-z][a-z0-9]?)+(?:[-_.]?[a-z0-9])*/, '');
if (filtered.length) {
throw new redis_keys_error_1.RedisKeysError('Invalid Redis key. Valid characters are letters (a-z) and numbers (0-9). (-_) are allowed between alphanumerics. Use a dot (.) to denote hierarchies.');
}
return lowerCase;
},
};
//# sourceMappingURL=redis-keys.js.map
;