redis-smq
Version:
A simple high-performance Redis message queue for Node.js.
137 lines • 6.22 kB
JavaScript
Object.defineProperty(exports, "__esModule", { value: true });
exports.redisKeys = void 0;
const index_js_1 = require("./errors/index.js");
const REDIS_KEY_CONFIG = {
SEGMENT_SEPARATOR: ':',
VERSION: '800.26',
GLOBAL_NAMESPACE: 'global',
};
const KEY_PREFIX = `redis-smq-${REDIS_KEY_CONFIG.VERSION}`;
var ERedisKey;
(function (ERedisKey) {
ERedisKey[ERedisKey["QUEUE_PENDING"] = 1] = "QUEUE_PENDING";
ERedisKey[ERedisKey["QUEUE_PRIORITY_PENDING"] = 2] = "QUEUE_PRIORITY_PENDING";
ERedisKey[ERedisKey["QUEUE_DL"] = 3] = "QUEUE_DL";
ERedisKey[ERedisKey["QUEUE_PROCESSING"] = 4] = "QUEUE_PROCESSING";
ERedisKey[ERedisKey["QUEUE_ACKNOWLEDGED"] = 5] = "QUEUE_ACKNOWLEDGED";
ERedisKey[ERedisKey["QUEUE_SCHEDULED"] = 6] = "QUEUE_SCHEDULED";
ERedisKey[ERedisKey["QUEUE_DELAYED"] = 7] = "QUEUE_DELAYED";
ERedisKey[ERedisKey["QUEUE_REQUEUED"] = 8] = "QUEUE_REQUEUED";
ERedisKey[ERedisKey["QUEUE_CONSUMERS"] = 9] = "QUEUE_CONSUMERS";
ERedisKey[ERedisKey["QUEUE_PROCESSING_QUEUES"] = 10] = "QUEUE_PROCESSING_QUEUES";
ERedisKey[ERedisKey["QUEUE_WORKERS_LOCK"] = 11] = "QUEUE_WORKERS_LOCK";
ERedisKey[ERedisKey["QUEUE_RATE_LIMIT_COUNTER"] = 12] = "QUEUE_RATE_LIMIT_COUNTER";
ERedisKey[ERedisKey["QUEUE_PROPERTIES"] = 13] = "QUEUE_PROPERTIES";
ERedisKey[ERedisKey["QUEUE_MESSAGES"] = 14] = "QUEUE_MESSAGES";
ERedisKey[ERedisKey["QUEUE_MESSAGE_IDS"] = 15] = "QUEUE_MESSAGE_IDS";
ERedisKey[ERedisKey["QUEUE_CONSUMER_GROUPS"] = 16] = "QUEUE_CONSUMER_GROUPS";
ERedisKey[ERedisKey["QUEUES"] = 17] = "QUEUES";
ERedisKey[ERedisKey["CONSUMER_QUEUES"] = 18] = "CONSUMER_QUEUES";
ERedisKey[ERedisKey["CONSUMER_HEARTBEAT"] = 19] = "CONSUMER_HEARTBEAT";
ERedisKey[ERedisKey["NS_QUEUES"] = 20] = "NS_QUEUES";
ERedisKey[ERedisKey["NAMESPACES"] = 21] = "NAMESPACES";
ERedisKey[ERedisKey["EXCHANGE_BINDINGS"] = 22] = "EXCHANGE_BINDINGS";
ERedisKey[ERedisKey["FANOUT_EXCHANGES"] = 23] = "FANOUT_EXCHANGES";
ERedisKey[ERedisKey["MESSAGE"] = 24] = "MESSAGE";
})(ERedisKey || (ERedisKey = {}));
function makeNamespacedKeys(keys, namespace, ...rest) {
const result = {};
for (const keyName in keys) {
result[keyName] = [KEY_PREFIX, namespace, keys[keyName], ...rest].join(REDIS_KEY_CONFIG.SEGMENT_SEPARATOR);
}
return result;
}
exports.redisKeys = {
getNamespaceKeys(ns) {
const keys = {
keyNamespaceQueues: ERedisKey.NS_QUEUES,
};
return Object.assign({}, makeNamespacedKeys(keys, ns));
},
getQueueKeys(queueParams, consumerGroupId) {
const queueKeys = {
keyQueueDL: ERedisKey.QUEUE_DL,
keyQueueProcessingQueues: ERedisKey.QUEUE_PROCESSING_QUEUES,
keyQueueAcknowledged: ERedisKey.QUEUE_ACKNOWLEDGED,
keyQueueScheduled: ERedisKey.QUEUE_SCHEDULED,
keyQueueRequeued: ERedisKey.QUEUE_REQUEUED,
keyQueueDelayed: ERedisKey.QUEUE_DELAYED,
keyQueueConsumers: ERedisKey.QUEUE_CONSUMERS,
keyQueueRateLimitCounter: ERedisKey.QUEUE_RATE_LIMIT_COUNTER,
keyQueueProperties: ERedisKey.QUEUE_PROPERTIES,
keyQueueMessages: ERedisKey.QUEUE_MESSAGES,
keyQueueMessageIds: ERedisKey.QUEUE_MESSAGE_IDS,
keyQueueConsumerGroups: ERedisKey.QUEUE_CONSUMER_GROUPS,
keyQueueWorkersLock: ERedisKey.QUEUE_WORKERS_LOCK,
};
const pendingKeys = {
keyQueuePending: ERedisKey.QUEUE_PENDING,
keyQueuePriorityPending: ERedisKey.QUEUE_PRIORITY_PENDING,
};
const payload = [queueParams.name];
const pendingPayload = [
...payload,
...(consumerGroupId ? [consumerGroupId] : []),
];
return Object.assign(Object.assign({}, makeNamespacedKeys(queueKeys, queueParams.ns, ...payload)), makeNamespacedKeys(pendingKeys, queueParams.ns, ...pendingPayload));
},
getMessageKeys(messageId) {
const messageKeys = {
keyMessage: ERedisKey.MESSAGE,
};
return Object.assign({}, makeNamespacedKeys(messageKeys, REDIS_KEY_CONFIG.GLOBAL_NAMESPACE, messageId));
},
getFanOutExchangeKeys(bindingKey) {
const exchangeKeys = {
keyExchangeBindings: ERedisKey.EXCHANGE_BINDINGS,
};
return Object.assign({}, makeNamespacedKeys(exchangeKeys, REDIS_KEY_CONFIG.GLOBAL_NAMESPACE, bindingKey));
},
getConsumerKeys(instanceId) {
const consumerKeys = {
keyConsumerQueues: ERedisKey.CONSUMER_QUEUES,
keyConsumerHeartbeat: ERedisKey.CONSUMER_HEARTBEAT,
};
return Object.assign({}, makeNamespacedKeys(consumerKeys, REDIS_KEY_CONFIG.GLOBAL_NAMESPACE, instanceId));
},
getQueueConsumerKeys(queueParams, instanceId) {
const keys = {
keyQueueProcessing: ERedisKey.QUEUE_PROCESSING,
};
return Object.assign({}, makeNamespacedKeys(keys, queueParams.ns, queueParams.name, instanceId));
},
getMainKeys() {
const mainKeys = {
keyQueues: ERedisKey.QUEUES,
keyNamespaces: ERedisKey.NAMESPACES,
keyFanOutExchanges: ERedisKey.FANOUT_EXCHANGES,
};
return makeNamespacedKeys(mainKeys, REDIS_KEY_CONFIG.GLOBAL_NAMESPACE);
},
validateNamespace(ns) {
const validated = this.validateRedisKey(ns);
if (validated instanceof index_js_1.RedisKeysInvalidKeyError) {
return validated;
}
if (validated === REDIS_KEY_CONFIG.GLOBAL_NAMESPACE) {
return new index_js_1.RedisKeysInvalidKeyError();
}
return validated;
},
validateRedisKey(key) {
if (!key || !key.length) {
return new index_js_1.RedisKeysInvalidKeyError();
}
const lowerCase = key.toLowerCase();
const filtered = lowerCase.replace(/(?:[a-z][a-z0-9]?)+(?:[-_.]?[a-z0-9])*/g, '');
if (filtered.length) {
return new index_js_1.RedisKeysInvalidKeyError();
}
return lowerCase;
},
getKeySegmentSeparator() {
return REDIS_KEY_CONFIG.SEGMENT_SEPARATOR;
},
};
//# sourceMappingURL=redis-keys.js.map
;