UNPKG

redis-smq

Version:

A simple high-performance Redis message queue for Node.js.

122 lines 6.55 kB
"use strict"; 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